aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml')
-rw-r--r--tests/auto/qml/qmlcachegen/CMakeLists.txt9
-rw-r--r--tests/auto/qml/qqmlecmascript/data/generatorCallsGC.qml13
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp10
-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
-rw-r--r--tests/auto/qml/qqmlmetatype/data/revisionedGroupedPropertiesUnversioned.qml5
-rw-r--r--tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp23
-rw-r--r--tests/auto/qml/qqmltranslation/CMakeLists.txt10
-rw-r--r--tests/auto/qml/qqmlvaluetypes/data/matrix4x4_invokables.qml54
-rw-r--r--tests/auto/qml/qquickfolderlistmodel/CMakeLists.txt5
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"