aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-06-16 15:01:00 +0200
committerUlf Hermann <ulf.hermann@qt.io>2021-06-17 13:04:37 +0200
commit55a9b77788dc11bf3669ed77a91d3cb68de03b0a (patch)
treeb2d52eef32758e9d36e6406e002ce54570d67ba9 /tests/auto
parente0989ff3e320af7ea81fb251d300609baba81ed3 (diff)
Fix conversion of entries to be added to QVariantLists
We should pass the variants themselves, not their constData(). Fixes: QTBUG-94502 Change-Id: I92688348d7b46d74935dc11080b26290f5e8be86 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit dbe34dfa0d42510b804c898b77d6fe145473c31b)
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/qml/qqmllanguage/data/variantListConversion.qml7
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.cpp3
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.h48
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp19
4 files changed, 77 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/data/variantListConversion.qml b/tests/auto/qml/qqmllanguage/data/variantListConversion.qml
new file mode 100644
index 0000000000..334bf17393
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/variantListConversion.qml
@@ -0,0 +1,7 @@
+import Test
+
+Foo {
+ a.a: 12
+ b.a: 13
+ fooProperty: [a, b]
+}
diff --git a/tests/auto/qml/qqmllanguage/testtypes.cpp b/tests/auto/qml/qqmllanguage/testtypes.cpp
index 80ec4900c7..fd541fd36a 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.cpp
+++ b/tests/auto/qml/qqmllanguage/testtypes.cpp
@@ -122,6 +122,9 @@ void registerTypes()
qmlRegisterTypesAndRevisions<Extended, Foreign, ForeignExtended>("Test", 1);
qmlRegisterTypesAndRevisions<BareSingleton>("Test", 1);
qmlRegisterTypesAndRevisions<UncreatableSingleton>("Test", 1);
+
+ qmlRegisterTypesAndRevisions<Large>("Test", 1);
+ qmlRegisterTypesAndRevisions<Foo>("Test", 1);
}
QVariant myCustomVariantTypeConverter(const QString &data)
diff --git a/tests/auto/qml/qqmllanguage/testtypes.h b/tests/auto/qml/qqmllanguage/testtypes.h
index c3733efd3f..9c122a6e92 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.h
+++ b/tests/auto/qml/qqmllanguage/testtypes.h
@@ -1711,6 +1711,54 @@ signals:
void signal(QJSValue value);
};
+struct Large {
+ Q_GADGET
+ QML_VALUE_TYPE(large)
+
+ Q_PROPERTY(uint a MEMBER a)
+ Q_PROPERTY(uint b MEMBER b)
+ Q_PROPERTY(uint c MEMBER c)
+ Q_PROPERTY(uint d MEMBER d)
+ Q_PROPERTY(uint e MEMBER e)
+ Q_PROPERTY(uint f MEMBER f)
+
+public:
+ quint64 a;
+ quint64 b;
+ quint64 c;
+ quint64 d;
+ quint64 e;
+ quint64 f;
+};
+
+inline bool operator==(const Large &a, const Large &b)
+{
+ return a.a == b.a && a.b == b.b && a.c == b.c && a.d == b.d && a.e == b.e && a.f == b.f;
+}
+
+inline bool operator!=(const Large &a, const Large &b) { return !(a == b); }
+
+class Foo: public QObject {
+
+ Q_OBJECT
+ Q_PROPERTY(QVariantList fooProperty READ getList WRITE setList)
+ Q_PROPERTY(Large a MEMBER a BINDABLE aBindable)
+ Q_PROPERTY(Large b MEMBER b BINDABLE bBindable)
+ QML_ELEMENT
+
+public:
+ QVariantList getList() const { return mFooProperty;}
+ void setList(QVariantList list) { mFooProperty = list;}
+
+ QBindable<Large> aBindable() { return QBindable<Large>(&a); }
+ QBindable<Large> bBindable() { return QBindable<Large>(&b); }
+
+private:
+ QProperty<Large> a;
+ QProperty<Large> b;
+ QVariantList mFooProperty;
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index b5bc1d72ac..df759ba7d0 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -358,6 +358,8 @@ private slots:
void hangOnWarning();
+ void variantListConversion();
+
private:
QQmlEngine engine;
QStringList defaultImportPathList;
@@ -6288,6 +6290,23 @@ void tst_qqmllanguage::hangOnWarning()
QVERIFY(object != nullptr);
}
+void tst_qqmllanguage::variantListConversion()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("variantListConversion.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+
+ Foo *foo = qobject_cast<Foo *>(o.data());
+ QVERIFY(foo);
+ const QVariantList list = foo->getList();
+ QCOMPARE(list.length(), 2);
+ const Large l0 = qvariant_cast<Large>(list.at(0));
+ QCOMPARE(l0.a, 12ull);
+ const Large l1 = qvariant_cast<Large>(list.at(1));
+ QCOMPARE(l1.a, 13ull);
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"