diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-01-09 08:01:46 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-01-09 10:00:44 +0100 |
commit | a572450463cd6cf43b2c64a1486239d9cc464778 (patch) | |
tree | 61caad8c2aeddfa9cb1cadeaf39bb14ffa75af05 /sources/pyside6/tests | |
parent | 3c1a129bd45cf3a16b9ab6d9599d059b986cf8c9 (diff) |
PySide6: Add QQmlEgine.singletonInstance()
[ChangeLog][PySide6] QQmlEgine.singletonInstance() has been added.
Pick-to: 6.6
Change-Id: Ib1b48df49ca8a183dba415a04f414903f58e435c
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/tests')
-rw-r--r-- | sources/pyside6/tests/QtQml/registersingletontype.py | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/sources/pyside6/tests/QtQml/registersingletontype.py b/sources/pyside6/tests/QtQml/registersingletontype.py index eb973b6e6..6beca1131 100644 --- a/sources/pyside6/tests/QtQml/registersingletontype.py +++ b/sources/pyside6/tests/QtQml/registersingletontype.py @@ -12,13 +12,18 @@ init_test_paths(False) from helper.helper import quickview_errorstring -from PySide6.QtCore import Property, Signal, QTimer, QUrl, QObject +from PySide6.QtCore import Property, Signal, QTimer, QUrl, QObject, Slot from PySide6.QtGui import QGuiApplication from PySide6.QtQml import (qmlRegisterSingletonType, qmlRegisterSingletonInstance, - QmlElement, QmlSingleton) + QmlElement, QmlSingleton, QJSValue) from PySide6.QtQuick import QQuickView + +URI = "Singletons" + + finalResult = 0 +qObjectQmlTypeId = 0 class SingletonQObject(QObject): @@ -46,7 +51,7 @@ def singletonQJSValueCallback(engine): return engine.evaluate("new Object({data: 50})") -QML_IMPORT_NAME = "Singletons" +QML_IMPORT_NAME = URI QML_IMPORT_MAJOR_VERSION = 1 @@ -86,37 +91,62 @@ class DecoratedSingletonWithCreate(QObject): data = Property(int, getData, setData) +class TestQuickView(QQuickView): + def __init__(self, parent=None): + super().__init__(parent) + self._singleton_instance_qobject_int = False + self._singleton_instance_qobject_str = False + self._singleton_instance_jsvalue_int = False + + @Slot() + def testSlot(self): + engine = self.engine() + instance = engine.singletonInstance(qObjectQmlTypeId) + if instance is not None and isinstance(instance, QObject): + self._singleton_instance_qobject_int = True + instance = engine.singletonInstance(URI, 'SingletonQObjectNoCallback') + if instance is not None and isinstance(instance, QObject): + self._singleton_instance_qobject_str = True + instance = engine.singletonInstance(URI, 'SingletonQJSValue') + if instance is not None and isinstance(instance, QJSValue): + self._singleton_instance_jsvalue_int = True + self.close() + + class TestQmlSupport(unittest.TestCase): def testIt(self): app = QGuiApplication([]) - qmlRegisterSingletonType(SingletonQObject, 'Singletons', 1, 0, 'SingletonQObjectNoCallback') - qmlRegisterSingletonType(SingletonQObject, 'Singletons', 1, 0, 'SingletonQObjectCallback', + qObjectQmlTypeId = qmlRegisterSingletonType(SingletonQObject, URI, 1, 0, + 'SingletonQObjectNoCallback') + qmlRegisterSingletonType(SingletonQObject, URI, 1, 0, 'SingletonQObjectCallback', singletonQObjectCallback) - qmlRegisterSingletonType('Singletons', 1, 0, 'SingletonQJSValue', singletonQJSValueCallback) + qmlRegisterSingletonType(URI, 1, 0, 'SingletonQJSValue', singletonQJSValueCallback) # Accepts only QObject derived types l = [1, 2] with self.assertRaises(TypeError): - qmlRegisterSingletonInstance(SingletonQObject, 'Singletons', 1, 0, 'SingletonInstance', l) + qmlRegisterSingletonInstance(SingletonQObject, URI, 1, 0, 'SingletonInstance', l) # Modify value on the instance s = SingletonQObject() s.setData(99) - qmlRegisterSingletonInstance(SingletonQObject, 'Singletons', 1, 0, 'SingletonInstance', s) + qmlRegisterSingletonInstance(SingletonQObject, URI, 1, 0, 'SingletonInstance', s) - view = QQuickView() + view = TestQuickView() file = Path(__file__).resolve().parent / 'registersingletontype.qml' self.assertTrue(file.is_file()) view.setSource(QUrl.fromLocalFile(file)) self.assertTrue(view.rootObject(), quickview_errorstring(view)) view.resize(200, 200) view.show() - QTimer.singleShot(250, view.close) + QTimer.singleShot(250, view.testSlot) app.exec() self.assertEqual(finalResult, 899) + self.assertTrue(view._singleton_instance_qobject_int) + self.assertTrue(view._singleton_instance_qobject_str) + self.assertTrue(view._singleton_instance_jsvalue_int) -if __name__ == '__main__': - unittest.main() +if __name__ == '__main__': unittest.main() |