diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-06-16 15:01:00 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2021-06-17 13:04:37 +0200 |
commit | 55a9b77788dc11bf3669ed77a91d3cb68de03b0a (patch) | |
tree | b2d52eef32758e9d36e6406e002ce54570d67ba9 /tests/auto | |
parent | e0989ff3e320af7ea81fb251d300609baba81ed3 (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.qml | 7 | ||||
-rw-r--r-- | tests/auto/qml/qqmllanguage/testtypes.cpp | 3 | ||||
-rw-r--r-- | tests/auto/qml/qqmllanguage/testtypes.h | 48 | ||||
-rw-r--r-- | tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | 19 |
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" |