aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
diff options
context:
space:
mode:
authorChris Adams <christopher.adams@nokia.com>2012-05-09 12:21:41 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-16 02:14:57 +0200
commit14e247e4b94df17ed62750b4468c2ac25aabe30f (patch)
tree59784d82bbc05887c6c11e7babdf9cc5575c345a /tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
parentb22496ba74c0106d949b970fb799fd3fa81243c4 (diff)
Fix composite type property support
The metatype changes caused a regression in composite type properties for which there was no autotest. In particular, declarative previously used the transitional QMetaType::registerType() function, whose implementation specifies a zero-size, which means that accessing a property of that type via QObject::property would fail. This commit adds some unit tests to track the issue, and also fixes the implementation of QQmlEnginePrivate::registerCompositeType to use the updated metatype registration functions. Task-number: QTBUG-25697 Change-Id: Ic4abc1711aee8cf4a50a2ef1769465ef73f5d022 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
Diffstat (limited to 'tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp')
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp68
1 files changed, 68 insertions, 0 deletions
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