aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2011-03-23 13:31:35 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:54:05 -0300
commitdeefa3508703537c318d18e5da2df57ae19a70bd (patch)
treec73144080fa16143ebcd6d6d11c4d8d6e84353af
parent61f479b6826f7d88c02c0ab5986e8e2c08be5518 (diff)
Fix bug 694 - "QWebPage::extensions need injected overloads due to required casts on C++ version"
-rw-r--r--PySide/QtWebKit/typesystem_webkit.xml23
-rw-r--r--tests/QtWebKit/CMakeLists.txt1
-rw-r--r--tests/QtWebKit/bug_694.py50
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&lt;const ChooseMultipleFilesExtensionOption*>(option));
+ else if (extension == QWebPage::ErrorPageExtension)
+ %out = %CONVERTTOPYTHON[ErrorPageExtensionOption*](reinterpret_cast&lt;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&lt;const ChooseMultipleFilesExtensionReturn*>(output));
+ else if (extension == QWebPage::ErrorPageExtension)
+ %out = %CONVERTTOPYTHON[ErrorPageExtensionReturn*](reinterpret_cast&lt;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()