diff options
Diffstat (limited to 'tests/auto/qml/qqmlecmascript')
4 files changed, 60 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlecmascript/data/MyDeferredComponent.qml b/tests/auto/qml/qqmlecmascript/data/MyDeferredComponent.qml new file mode 100644 index 0000000000..1432e7da55 --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/MyDeferredComponent.qml @@ -0,0 +1,10 @@ +import Qt.test 1.0 +import QtQml 2.0 + +MyDeferredObject { + id: root + property QtObject target: null + objectProperty: MyQmlObject { + value: target.value + } +} diff --git a/tests/auto/qml/qqmlecmascript/data/MyDeferredComponent2.qml b/tests/auto/qml/qqmlecmascript/data/MyDeferredComponent2.qml new file mode 100644 index 0000000000..de73629f7a --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/MyDeferredComponent2.qml @@ -0,0 +1,3 @@ +import Qt.test 1.0 + +MyDeferredObject {} diff --git a/tests/auto/qml/qqmlecmascript/data/deferredPropertiesInComponents.qml b/tests/auto/qml/qqmlecmascript/data/deferredPropertiesInComponents.qml new file mode 100644 index 0000000000..868b7b1908 --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/deferredPropertiesInComponents.qml @@ -0,0 +1,15 @@ +import Qt.test 1.0 +import QtQml 2.0 + +QtObject { + id: root + property int value: 10 + property QtObject deferredInside: MyDeferredComponent { + target: root + } + property QtObject deferredOutside: MyDeferredComponent2 { + objectProperty: MyQmlObject { + value: root.value + } + } +} diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index dcf72f9dc0..cb1b0b3212 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -89,6 +89,7 @@ private slots: void objectPropertiesTriggerReeval(); void deferredProperties(); void deferredPropertiesErrors(); + void deferredPropertiesInComponents(); void extensionObjects(); void overrideExtensionProperties(); void attachedProperties(); @@ -863,6 +864,37 @@ void tst_qqmlecmascript::deferredPropertiesErrors() delete object; } +void tst_qqmlecmascript::deferredPropertiesInComponents() +{ + // Test that it works when the property is set inside and outside component + QQmlComponent component(&engine, testFileUrl("deferredPropertiesInComponents.qml")); + QObject *object = component.create(); + if (!object) + qDebug() << component.errorString(); + QVERIFY(object != 0); + QCOMPARE(object->property("value").value<int>(), 10); + + MyDeferredObject *defObjectA = + qobject_cast<MyDeferredObject *>(object->property("deferredInside").value<QObject*>()); + QVERIFY(defObjectA != 0); + QVERIFY(defObjectA->objectProperty() == 0); + + qmlExecuteDeferred(defObjectA); + QVERIFY(defObjectA->objectProperty() != 0); + QCOMPARE(defObjectA->objectProperty()->property("value").value<int>(), 10); + + MyDeferredObject *defObjectB = + qobject_cast<MyDeferredObject *>(object->property("deferredOutside").value<QObject*>()); + QVERIFY(defObjectB != 0); + QVERIFY(defObjectB->objectProperty() == 0); + + qmlExecuteDeferred(defObjectB); + QVERIFY(defObjectB->objectProperty() != 0); + QCOMPARE(defObjectB->objectProperty()->property("value").value<int>(), 10); + + delete object; +} + void tst_qqmlecmascript::extensionObjects() { QQmlComponent component(&engine, testFileUrl("extensionObjects.qml")); |