aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlproperty
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/qqmlproperty')
-rw-r--r--tests/auto/qml/qqmlproperty/data/SecondComponent.qml6
-rw-r--r--tests/auto/qml/qqmlproperty/data/componentDir/FirstComponent.qml5
-rw-r--r--tests/auto/qml/qqmlproperty/data/registeredCompositeTypeProperty.qml32
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp68
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