diff options
Diffstat (limited to 'tests/auto/qml/qqmlproperty')
4 files changed, 111 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlproperty/data/SecondComponent.qml b/tests/auto/qml/qqmlproperty/data/SecondComponent.qml new file mode 100644 index 0000000000..45d81c9010 --- /dev/null +++ b/tests/auto/qml/qqmlproperty/data/SecondComponent.qml @@ -0,0 +1,6 @@ +import QtQuick 2.0 + +Item { + property string a: "Hello, World" + property bool b: false +} diff --git a/tests/auto/qml/qqmlproperty/data/componentDir/FirstComponent.qml b/tests/auto/qml/qqmlproperty/data/componentDir/FirstComponent.qml new file mode 100644 index 0000000000..1b7614dc07 --- /dev/null +++ b/tests/auto/qml/qqmlproperty/data/componentDir/FirstComponent.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +Item { + property int a: 10 +} diff --git a/tests/auto/qml/qqmlproperty/data/registeredCompositeTypeProperty.qml b/tests/auto/qml/qqmlproperty/data/registeredCompositeTypeProperty.qml new file mode 100644 index 0000000000..92e1675d11 --- /dev/null +++ b/tests/auto/qml/qqmlproperty/data/registeredCompositeTypeProperty.qml @@ -0,0 +1,32 @@ +import QtQuick 2.0 +import "componentDir" + +Item { + id: root + + property FirstComponent first: FirstComponent { } + property FirstComponent second + property SecondComponent third: SecondComponent { } + + property list<FirstComponent> fclist: [ + FirstComponent { + a: 15 + } + ] + property list<SecondComponent> sclistOne: [ + SecondComponent { + a: "G'day, World" + }, + SecondComponent { }, + SecondComponent { + b: true + } + ] + property list<SecondComponent> sclistTwo + + Component.onCompleted: { + var c1 = Qt.createComponent("./componentDir/FirstComponent.qml"); + var o1 = c1.createObject(root); + second = o1; + } +} diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp index a65693bb8f..3957dee062 100644 --- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp +++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp @@ -135,6 +135,7 @@ private slots: void noContext(); void assignEmptyVariantMap(); void warnOnInvalidBinding(); + void registeredCompositeTypeProperty(); void copy(); private: @@ -189,6 +190,73 @@ void tst_qqmlproperty::qmlmetaproperty() delete obj; } +void tst_qqmlproperty::registeredCompositeTypeProperty() +{ + // Composite type properties + { + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("registeredCompositeTypeProperty.qml")); + QObject *obj = component.create(); + QVERIFY(obj); + + // create property accessors and check types. + QQmlProperty p1(obj, "first"); + QQmlProperty p2(obj, "second"); + QQmlProperty p3(obj, "third"); + QVERIFY(p1.propertyType() == p2.propertyType()); + QVERIFY(p1.propertyType() != p3.propertyType()); + + // check that the values are retrievable from CPP + QVariant first = obj->property("first"); + QVariant second = obj->property("second"); + QVariant third = obj->property("third"); + QVERIFY(first.isValid()); + QVERIFY(second.isValid()); + QVERIFY(third.isValid()); + // ensure that conversion from qobject-derived-ptr to qobject-ptr works. + QVERIFY(first.value<QObject*>()); + QVERIFY(second.value<QObject*>()); + QVERIFY(third.value<QObject*>()); + + // check that the values retrieved via QQmlProperty match. + QCOMPARE(p1.read(), first); + QCOMPARE(p2.read(), second); + QCOMPARE(p3.read(), third); + + delete obj; + } + + // List-of-composite-type type properties + { + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("registeredCompositeTypeProperty.qml")); + QObject *obj = component.create(); + QVERIFY(obj); + + // create list property accessors and check types + QQmlProperty lp1(obj, "fclist"); + QQmlProperty lp2(obj, "sclistOne"); + QQmlProperty lp3(obj, "sclistTwo"); + QVERIFY(lp1.propertyType() != lp2.propertyType()); + QVERIFY(lp2.propertyType() == lp3.propertyType()); + + // check that the list values are retrievable from CPP + QVariant firstList = obj->property("fclist"); + QVariant secondList = obj->property("sclistOne"); + QVariant thirdList = obj->property("sclistTwo"); + QVERIFY(firstList.isValid()); + QVERIFY(secondList.isValid()); + QVERIFY(thirdList.isValid()); + + // check that the values retrieved via QQmlProperty match. + QCOMPARE(lp1.read(), firstList); + QCOMPARE(lp2.read(), secondList); + QCOMPARE(lp3.read(), thirdList); + + delete obj; + } +} + class PropertyObject : public QObject { Q_OBJECT |