diff options
Diffstat (limited to 'tests/auto/qml/qqmllanguage')
-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" |