diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-03-23 13:31:35 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:54:05 -0300 |
commit | deefa3508703537c318d18e5da2df57ae19a70bd (patch) | |
tree | c73144080fa16143ebcd6d6d11c4d8d6e84353af | |
parent | 61f479b6826f7d88c02c0ab5986e8e2c08be5518 (diff) |
Fix bug 694 - "QWebPage::extensions need injected overloads due to required casts on C++ version"
-rw-r--r-- | PySide/QtWebKit/typesystem_webkit.xml | 23 | ||||
-rw-r--r-- | tests/QtWebKit/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/QtWebKit/bug_694.py | 50 |
3 files changed, 74 insertions, 0 deletions
diff --git a/PySide/QtWebKit/typesystem_webkit.xml b/PySide/QtWebKit/typesystem_webkit.xml index 1e632926b..eb645c25f 100644 --- a/PySide/QtWebKit/typesystem_webkit.xml +++ b/PySide/QtWebKit/typesystem_webkit.xml @@ -81,6 +81,29 @@ <value-type name="ExtensionOption" /> <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-argument index="1"> <reference-count action="set"/> diff --git a/tests/QtWebKit/CMakeLists.txt b/tests/QtWebKit/CMakeLists.txt index 4f381ff52..1902fbf9a 100644 --- a/tests/QtWebKit/CMakeLists.txt +++ b/tests/QtWebKit/CMakeLists.txt @@ -1,3 +1,4 @@ PYSIDE_TEST(bug_448.py) +PYSIDE_TEST(bug_694.py) PYSIDE_TEST(webpage_test.py) PYSIDE_TEST(webview_test.py) diff --git a/tests/QtWebKit/bug_694.py b/tests/QtWebKit/bug_694.py new file mode 100644 index 000000000..f4e0e0c7f --- /dev/null +++ b/tests/QtWebKit/bug_694.py @@ -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() |