diff options
Diffstat (limited to 'tests/auto/qml')
12 files changed, 187 insertions, 19 deletions
diff --git a/tests/auto/qml/qmlcachegen/CMakeLists.txt b/tests/auto/qml/qmlcachegen/CMakeLists.txt index 06a5fb9b9c..d03e277b93 100644 --- a/tests/auto/qml/qmlcachegen/CMakeLists.txt +++ b/tests/auto/qml/qmlcachegen/CMakeLists.txt @@ -56,11 +56,8 @@ qt_internal_add_resource(tst_qmlcachegen "trickypaths" FILES ${trickypaths_resource_files} ) -set_source_files_properties("data/Retain.qml" - PROPERTIES QT_RESOURCE_ALIAS "Retain.qml" -) set(retain_resource_files - "Retain.qml" + "data/Retain.qml" ) qt_internal_add_resource(tst_qmlcachegen "retain" @@ -76,14 +73,12 @@ set_source_files_properties("data/SkipQmlCacheGen.qml" QT_SKIP_QUICKCOMPILER 1 ) set(skip_resource_files - "SkipQmlCacheGen.qml" + "data/SkipQmlCacheGen.qml" ) qt_internal_add_resource(tst_qmlcachegen "skip" PREFIX "/not/" - BASE - "data" FILES ${skip_resource_files} ) diff --git a/tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml b/tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml new file mode 100644 index 0000000000..7fe366cac8 --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml @@ -0,0 +1,13 @@ +import QtQml 2.15 + +QtObject { + function test_generator_gc() { + ((function*() { gc() })()).next(); + ((function*() { gc() })()).next(); + ((function*() { gc() })()).next(); + ((function*() { gc() })()).next(); + } + + Component.onCompleted: () => test_generator_gc() + +} diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 59f2b1ab88..14551bae8e 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -244,6 +244,7 @@ private slots: void function(); void topLevelGeneratorFunction(); void generatorCrashNewProperty(); + void generatorCallsGC(); void qtbug_10696(); void qtbug_11606(); void qtbug_11600(); @@ -6518,6 +6519,15 @@ void tst_qqmlecmascript::generatorCrashNewProperty() QCOMPARE(o->property("c").toInt(), 42); } +void tst_qqmlecmascript::generatorCallsGC() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("generatorCallsGC.qml")); + + QScopedPointer<QObject> o(component.create()); // should not crash + QVERIFY2(o != nullptr, qPrintable(component.errorString())); +} + // Test the "Qt.include" method void tst_qqmlecmascript::include() { 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" diff --git a/tests/auto/qml/qqmlmetatype/data/revisionedGroupedPropertiesUnversioned.qml b/tests/auto/qml/qqmlmetatype/data/revisionedGroupedPropertiesUnversioned.qml new file mode 100644 index 0000000000..cef3ab84e6 --- /dev/null +++ b/tests/auto/qml/qqmlmetatype/data/revisionedGroupedPropertiesUnversioned.qml @@ -0,0 +1,5 @@ +import GroupedTest + +MyRevisioned { + grouped.prop2: 5 +} diff --git a/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp b/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp index 50d23dd049..0556276280 100644 --- a/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp +++ b/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp @@ -573,6 +573,7 @@ class Grouped : public QObject { Q_OBJECT Q_PROPERTY(int prop READ prop WRITE setProp NOTIFY propChanged REVISION 1) + Q_PROPERTY(int prop2 READ prop WRITE setProp NOTIFY prop2Changed REVISION 2) public: int prop() const { return m_prop; } void setProp(int prop) @@ -580,11 +581,13 @@ public: if (prop != m_prop) { m_prop = prop; emit propChanged(prop); + emit prop2Changed(prop); } } signals: Q_REVISION(1) void propChanged(int prop); + Q_REVISION(2) void prop2Changed(int prop); private: int m_prop = 0; @@ -602,13 +605,24 @@ private: QScopedPointer<Grouped> m_grouped; }; +class MyRevisioned : public MyItem +{ + Q_OBJECT + Q_PROPERTY(int revisioned READ revisioned CONSTANT REVISION 1) +public: + int revisioned() const { return 12; } +}; + void tst_qqmlmetatype::revisionedGroupedProperties() { qmlClearTypeRegistrations(); qmlRegisterType<MyItem>("GroupedTest", 1, 0, "MyItem"); qmlRegisterType<MyItem, 1>("GroupedTest", 1, 1, "MyItem"); + qmlRegisterType<MyRevisioned>("GroupedTest", 1, 0, "MyRevisioned"); + qmlRegisterType<MyRevisioned, 1>("GroupedTest", 1, 1, "MyRevisioned"); qmlRegisterUncreatableType<Grouped>("GroupedTest", 1, 0, "Grouped", "Grouped"); qmlRegisterUncreatableType<Grouped, 1>("GroupedTest", 1, 1, "Grouped", "Grouped"); + qmlRegisterUncreatableType<Grouped, 2>("GroupedTest", 1, 2, "Grouped", "Grouped"); { QQmlEngine engine; @@ -623,6 +637,15 @@ void tst_qqmlmetatype::revisionedGroupedProperties() QQmlComponent invalid(&engine, testFileUrl("revisionedGroupedPropertiesInvalid.qml")); QVERIFY(invalid.isError()); } + + { + QQmlEngine engine; + QQmlComponent unversioned( + &engine, testFileUrl("revisionedGroupedPropertiesUnversioned.qml")); + QVERIFY2(unversioned.isReady(), qPrintable(unversioned.errorString())); + QScopedPointer<QObject> obj(unversioned.create()); + QVERIFY(!obj.isNull()); + } } void tst_qqmlmetatype::enumsInRecursiveImport_data() diff --git a/tests/auto/qml/qqmltranslation/CMakeLists.txt b/tests/auto/qml/qqmltranslation/CMakeLists.txt index 6e67a2ecfb..cb402b3e64 100644 --- a/tests/auto/qml/qqmltranslation/CMakeLists.txt +++ b/tests/auto/qml/qqmltranslation/CMakeLists.txt @@ -27,8 +27,8 @@ qt_internal_add_test(tst_qqmltranslation # Resources: set(translation_resource_files - "qml_fr.qm" - "translation.qml" + "data/qml_fr.qm" + "data/translation.qml" ) # special case begin @@ -36,12 +36,6 @@ set_source_files_properties( data/translation.qml PROPERTIES QT_SKIP_QUICKCOMPILER 1 - QT_RESOURCE_ALIAS translation.qml -) -set_source_files_properties( - data/qml_fr.qm - PROPERTIES - QT_RESOURCE_ALIAS qml_fr.qm ) # special case end diff --git a/tests/auto/qml/qqmlvaluetypes/data/matrix4x4_invokables.qml b/tests/auto/qml/qqmlvaluetypes/data/matrix4x4_invokables.qml index aa26956922..09f1d472b7 100644 --- a/tests/auto/qml/qqmlvaluetypes/data/matrix4x4_invokables.qml +++ b/tests/auto/qml/qqmlvaluetypes/data/matrix4x4_invokables.qml @@ -10,6 +10,59 @@ Item { property variant v2: Qt.vector3d(1,2,3) property real factor: 2.23 + function testTransformation() { + let m = Qt.matrix4x4(); + + m.scale(1, 2, 4); + if (m !== Qt.matrix4x4(1, 0, 0, 0, + 0, 2, 0, 0, + 0, 0, 4, 0, + 0, 0, 0, 1)) + return false; + m.scale(Qt.vector3d(-8, -4, -2)); + if (m !== Qt.matrix4x4(-8, 0, 0, 0, + 0,-8, 0, 0, + 0, 0, -8, 0, + 0, 0, 0, 1)) + return false; + m.scale(-1 / 8); + if (m !== Qt.matrix4x4()) + return false; + + m.rotate(180, Qt.vector3d(1, 0, 0)); + if (m !== Qt.matrix4x4(1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, -1, 0, + 0, 0, 0, 1)) + return false; + m.rotate(180, Qt.vector3d(0, 1, 0)); + if (m !== Qt.matrix4x4(-1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1)) + return false; + m.rotate(180, Qt.vector3d(0, 0, 1)); + if (m !== Qt.matrix4x4()) + return false; + + m.translate(Qt.vector3d(1, 2, 4)); + if (m !== Qt.matrix4x4(1, 0, 0, 1, + 0, 1, 0, 2, + 0, 0, 1, 4, + 0, 0, 0, 1)) + return false; + + m = Qt.matrix4x4(); + m.lookAt(Qt.vector3d(1, 2, 4), Qt.vector3d(1, 2, 0), Qt.vector3d(0, 1, 0)); + if (m !== Qt.matrix4x4(1, 0, 0, -1, + 0, 1, 0, -2, + 0, 0, 1, -4, + 0, 0, 0, 1)) + return false; + + return true; + } + Component.onCompleted: { success = true; if (m1.times(m2) != Qt.matrix4x4(26, 26, 26, 26, 52, 52, 52, 52, 78, 78, 78, 78, 104, 104, 104, 104)) success = false; @@ -27,5 +80,6 @@ Item { if (m1.transposed() != Qt.matrix4x4(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)) success = false; if (m1.fuzzyEquals(m2)) success = false; if (!m1.fuzzyEquals(m2, 10)) success = false; + if (!testTransformation()) success = false; } } diff --git a/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt b/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt index 9c44abd939..58aa6e95f1 100644 --- a/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt +++ b/tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt @@ -24,12 +24,9 @@ qt_internal_add_test(tst_qquickfolderlistmodel TESTDATA ${test_data} ) -# special case begin -set_source_files_properties(data/txtdir/hello.txt PROPERTIES QT_RESOURCE_ALIAS "txtdir/hello.txt") -# special case end # Resources: set(introspect_resource_files - "txtdir/hello.txt" + "data/txtdir/hello.txt" ) qt_internal_add_resource(tst_qquickfolderlistmodel "introspect" |