aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp73
1 files changed, 60 insertions, 13 deletions
diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
index 3957dee062..12a8325f97 100644
--- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
+++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
@@ -190,6 +190,44 @@ void tst_qqmlproperty::qmlmetaproperty()
delete obj;
}
+// 1 = equal, 0 = unknown, -1 = not equal.
+static int compareVariantAndListReference(const QVariant &v, QQmlListReference &r)
+{
+ if (QLatin1String(v.typeName()) != QLatin1String("QQmlListReference"))
+ return -1;
+
+ QQmlListReference lhs = v.value<QQmlListReference>();
+ if (lhs.isValid() != r.isValid())
+ return -1;
+
+ if (lhs.canCount() != r.canCount())
+ return -1;
+
+ if (!lhs.canCount()) {
+ if (lhs.canAt() != r.canAt())
+ return -1; // not equal.
+ return 0; // not sure if they're equal or not, and no way to tell.
+ }
+
+ // if we get here, we must be able to count.
+ if (lhs.count() != r.count())
+ return -1;
+
+ if (lhs.canAt() != r.canAt())
+ return -1;
+
+ if (!lhs.canAt())
+ return 0; // can count, but can't check element equality.
+
+ for (int i = 0; i < lhs.count(); ++i) {
+ if (lhs.at(i) != r.at(i)) {
+ return -1; // different elements :. not equal.
+ }
+ }
+
+ return 1; // equal.
+}
+
void tst_qqmlproperty::registeredCompositeTypeProperty()
{
// Composite type properties
@@ -203,6 +241,9 @@ void tst_qqmlproperty::registeredCompositeTypeProperty()
QQmlProperty p1(obj, "first");
QQmlProperty p2(obj, "second");
QQmlProperty p3(obj, "third");
+ QQmlProperty p1e(obj, "first", &engine);
+ QQmlProperty p2e(obj, "second", &engine);
+ QQmlProperty p3e(obj, "third", &engine);
QVERIFY(p1.propertyType() == p2.propertyType());
QVERIFY(p1.propertyType() != p3.propertyType());
@@ -218,10 +259,13 @@ void tst_qqmlproperty::registeredCompositeTypeProperty()
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);
+ // check that the values retrieved via QQmlProperty match those retrieved via QMetaProperty::read().
+ QCOMPARE(p1.read().value<QObject*>(), first.value<QObject*>());
+ QCOMPARE(p2.read().value<QObject*>(), second.value<QObject*>());
+ QCOMPARE(p3.read().value<QObject*>(), third.value<QObject*>());
+ QCOMPARE(p1e.read().value<QObject*>(), first.value<QObject*>());
+ QCOMPARE(p2e.read().value<QObject*>(), second.value<QObject*>());
+ QCOMPARE(p3e.read().value<QObject*>(), third.value<QObject*>());
delete obj;
}
@@ -234,11 +278,11 @@ void tst_qqmlproperty::registeredCompositeTypeProperty()
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());
+ QQmlProperty lp1e(obj, "fclist", &engine);
+ QQmlProperty lp2e(obj, "sclistOne", &engine);
+ QQmlProperty lp3e(obj, "sclistTwo", &engine);
+ QVERIFY(lp1e.propertyType() != lp2e.propertyType());
+ QVERIFY(lp2e.propertyType() == lp3e.propertyType());
// check that the list values are retrievable from CPP
QVariant firstList = obj->property("fclist");
@@ -248,10 +292,13 @@ void tst_qqmlproperty::registeredCompositeTypeProperty()
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);
+ // check that the value returned by QQmlProperty::read() is equivalent to the list reference.
+ QQmlListReference r1(obj, "fclist", &engine);
+ QQmlListReference r2(obj, "sclistOne", &engine);
+ QQmlListReference r3(obj, "sclistTwo", &engine);
+ QCOMPARE(compareVariantAndListReference(lp1e.read(), r1), 1);
+ QCOMPARE(compareVariantAndListReference(lp2e.read(), r2), 1);
+ QCOMPARE(compareVariantAndListReference(lp3e.read(), r3), 1);
delete obj;
}