Fix bug 694 - "QWebPage::extensions need injected overloads due to required casts on C++ version"
This commit is contained in:
parent
61f479b682
commit
deefa35087
3 changed files with 74 additions and 0 deletions
|
|
@ -81,6 +81,29 @@
|
||||||
<value-type name="ExtensionOption" />
|
<value-type name="ExtensionOption" />
|
||||||
<value-type name="ExtensionReturn" />
|
<value-type name="ExtensionReturn" />
|
||||||
|
|
||||||
|
<modify-function signature="extension(QWebPage::Extension, const QWebPage::ExtensionOption*, QWebPage::ExtensionReturn*)">
|
||||||
|
<modify-argument index="2" invalidate-after-use="yes">
|
||||||
|
<conversion-rule class="target">
|
||||||
|
PyObject* %out = 0;
|
||||||
|
// Cast the parameters according to the extension type
|
||||||
|
if (extension == QWebPage::ChooseMultipleFilesExtension)
|
||||||
|
%out = %CONVERTTOPYTHON[ChooseMultipleFilesExtensionOption*](reinterpret_cast<const ChooseMultipleFilesExtensionOption*>(option));
|
||||||
|
else if (extension == QWebPage::ErrorPageExtension)
|
||||||
|
%out = %CONVERTTOPYTHON[ErrorPageExtensionOption*](reinterpret_cast<const ErrorPageExtensionOption*>(option));
|
||||||
|
</conversion-rule>
|
||||||
|
</modify-argument>
|
||||||
|
<modify-argument index="3" invalidate-after-use="yes">
|
||||||
|
<conversion-rule class="target">
|
||||||
|
PyObject* %out = 0;
|
||||||
|
// Cast the parameters according to the extension type
|
||||||
|
if (extension == QWebPage::ChooseMultipleFilesExtension)
|
||||||
|
%out = %CONVERTTOPYTHON[ChooseMultipleFilesExtensionReturn*](reinterpret_cast<const ChooseMultipleFilesExtensionReturn*>(output));
|
||||||
|
else if (extension == QWebPage::ErrorPageExtension)
|
||||||
|
%out = %CONVERTTOPYTHON[ErrorPageExtensionReturn*](reinterpret_cast<const ErrorPageExtensionReturn*>(output));
|
||||||
|
</conversion-rule>
|
||||||
|
</modify-argument>
|
||||||
|
</modify-function>
|
||||||
|
|
||||||
<modify-function signature="setNetworkAccessManager(QNetworkAccessManager*)">
|
<modify-function signature="setNetworkAccessManager(QNetworkAccessManager*)">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<reference-count action="set"/>
|
<reference-count action="set"/>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
PYSIDE_TEST(bug_448.py)
|
PYSIDE_TEST(bug_448.py)
|
||||||
|
PYSIDE_TEST(bug_694.py)
|
||||||
PYSIDE_TEST(webpage_test.py)
|
PYSIDE_TEST(webpage_test.py)
|
||||||
PYSIDE_TEST(webview_test.py)
|
PYSIDE_TEST(webview_test.py)
|
||||||
|
|
|
||||||
50
tests/QtWebKit/bug_694.py
Normal file
50
tests/QtWebKit/bug_694.py
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
from PySide.QtCore import *
|
||||||
|
from PySide.QtGui import *
|
||||||
|
from PySide.QtWebKit import *
|
||||||
|
|
||||||
|
class ErrorPage (QWebPage):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
QWebPage.__init__(self)
|
||||||
|
self.rcv_extension = None
|
||||||
|
self.rcv_url = None
|
||||||
|
self.rcv_url_copy = None
|
||||||
|
self.rcv_option_type = None
|
||||||
|
self.rcv_output_type = None
|
||||||
|
|
||||||
|
|
||||||
|
def supportsExtension(self, extension):
|
||||||
|
return extension == QWebPage.ErrorPageExtension
|
||||||
|
|
||||||
|
def extension(self, extension, option, output):
|
||||||
|
self.rcv_extension = extension
|
||||||
|
self.rcv_url = option.url
|
||||||
|
self.rcv_url_copy = QUrl(option.url)
|
||||||
|
self.rcv_option_type = type(option)
|
||||||
|
self.rcv_output_type = type(output)
|
||||||
|
return True
|
||||||
|
|
||||||
|
class TestWebPageExtension(unittest.TestCase):
|
||||||
|
def testIt(self):
|
||||||
|
app = QApplication([])
|
||||||
|
ep = ErrorPage()
|
||||||
|
view = QWebView()
|
||||||
|
view.setPage(ep)
|
||||||
|
view.load("foo://bar") # Some malformmed url
|
||||||
|
view.show()
|
||||||
|
|
||||||
|
# If the timeout is 0 the webpage isn't even loaded on Qt4.6-i386, so we use 100 :-)
|
||||||
|
QTimer.singleShot(100, app.quit)
|
||||||
|
app.exec_()
|
||||||
|
|
||||||
|
self.assertEqual(ep.rcv_extension, QWebPage.ErrorPageExtension)
|
||||||
|
self.assertRaises(RuntimeError, ep.rcv_url.__str__)
|
||||||
|
|
||||||
|
self.assertEqual(ep.rcv_url_copy, "foo://bar")
|
||||||
|
self.assertEqual(ep.rcv_option_type, QWebPage.ErrorPageExtensionOption)
|
||||||
|
self.assertEqual(ep.rcv_output_type, QWebPage.ErrorPageExtensionReturn)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue