aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml')
-rw-r--r--tests/auto/qml/qml.pro2
-rw-r--r--tests/auto/qml/qqmlmetatype/data/testExternalEnums.qml12
-rw-r--r--tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp33
-rw-r--r--tests/auto/qml/qqmlproperty/data/aliasPropertyBindings2.qml23
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp40
-rw-r--r--tests/auto/qml/v4misc/tst_v4misc.cpp92
6 files changed, 190 insertions, 12 deletions
diff --git a/tests/auto/qml/qml.pro b/tests/auto/qml/qml.pro
index 04e4b04114..7d182b7255 100644
--- a/tests/auto/qml/qml.pro
+++ b/tests/auto/qml/qml.pro
@@ -73,7 +73,7 @@ qtHaveModule(widgets) {
SUBDIRS += $$PUBLICTESTS \
qqmlextensionplugin
SUBDIRS += $$METATYPETESTS
-!qtConfig(process) {
+qtConfig(process) {
!contains(QT_CONFIG, no-qml-debug): SUBDIRS += debugger
SUBDIRS += qmllint qmlplugindump
}
diff --git a/tests/auto/qml/qqmlmetatype/data/testExternalEnums.qml b/tests/auto/qml/qqmlmetatype/data/testExternalEnums.qml
new file mode 100644
index 0000000000..8eb5616ab2
--- /dev/null
+++ b/tests/auto/qml/qqmlmetatype/data/testExternalEnums.qml
@@ -0,0 +1,12 @@
+import QtQml 2.2
+import x.y.z 1.0
+
+QtObject {
+ function x() {
+ eval("1");
+ return ExternalEnums.DocumentsLocation;
+ }
+
+ property var a: ExternalEnums.DocumentsLocation
+ property var b: x()
+}
diff --git a/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp b/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp
index 19cda21685..9fbd719d7b 100644
--- a/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp
+++ b/tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp
@@ -26,6 +26,7 @@
**
****************************************************************************/
+#include <qstandardpaths.h>
#include <qtest.h>
#include <qqml.h>
#include <qqmlprivate.h>
@@ -53,6 +54,7 @@ private slots:
void invalidQmlTypeName();
void registrationType();
void compositeType();
+ void externalEnums();
void isList();
@@ -70,6 +72,20 @@ public:
};
QML_DECLARE_TYPE(TestType);
+class ExternalEnums : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(QStandardPaths::StandardLocation QStandardPaths::LocateOptions)
+public:
+ ExternalEnums(QObject *parent = nullptr) : QObject(parent) {}
+
+ static QObject *create(QQmlEngine *engine, QJSEngine *scriptEngine) {
+ Q_UNUSED(scriptEngine);
+ return new ExternalEnums(engine);
+ }
+};
+QML_DECLARE_TYPE(ExternalEnums);
+
QObject *testTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine);
@@ -271,6 +287,23 @@ void tst_qqmlmetatype::compositeType()
QCOMPARE(type->sourceUrl(), testFileUrl("ImplicitType.qml"));
}
+void tst_qqmlmetatype::externalEnums()
+{
+ QQmlEngine engine;
+ qmlRegisterSingletonType<ExternalEnums>("x.y.z", 1, 0, "ExternalEnums", ExternalEnums::create);
+
+ QQmlComponent c(&engine, testFileUrl("testExternalEnums.qml"));
+ QObject *obj = c.create();
+ QVERIFY(obj);
+ QVariant a = obj->property("a");
+ QCOMPARE(a.type(), QVariant::Int);
+ QCOMPARE(a.toInt(), int(QStandardPaths::DocumentsLocation));
+ QVariant b = obj->property("b");
+ QCOMPARE(b.type(), QVariant::Int);
+ QCOMPARE(b.toInt(), int(QStandardPaths::DocumentsLocation));
+
+}
+
QTEST_MAIN(tst_qqmlmetatype)
#include "tst_qqmlmetatype.moc"
diff --git a/tests/auto/qml/qqmlproperty/data/aliasPropertyBindings2.qml b/tests/auto/qml/qqmlproperty/data/aliasPropertyBindings2.qml
new file mode 100644
index 0000000000..60cb088209
--- /dev/null
+++ b/tests/auto/qml/qqmlproperty/data/aliasPropertyBindings2.qml
@@ -0,0 +1,23 @@
+import QtQuick 2.0
+
+Item {
+ id: root
+
+ property real test: 9
+ property real test2: 3
+
+ property alias aliasProperty: innerObject.realProperty
+
+ property QtObject innerObject: QtObject {
+ id: innerObject
+ property real realProperty: test * test + test
+ }
+
+ states: State {
+ name: "switch"
+ PropertyChanges {
+ target: root
+ aliasProperty: 32 * test2
+ }
+ }
+}
diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
index 385ffc523a..84a1bd9cc5 100644
--- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
+++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
@@ -135,6 +135,7 @@ private slots:
// Bugs
void crashOnValueProperty();
+ void aliasPropertyBindings_data();
void aliasPropertyBindings();
void noContext();
void assignEmptyVariantMap();
@@ -1833,23 +1834,40 @@ void tst_qqmlproperty::crashOnValueProperty()
QCOMPARE(p.read(), QVariant(20));
}
-// QTBUG-13719
+void tst_qqmlproperty::aliasPropertyBindings_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("subObject");
+
+ QTest::newRow("same object") << "aliasPropertyBindings.qml" << "";
+ QTest::newRow("different objects") << "aliasPropertyBindings2.qml" << "innerObject";
+}
+
+// QTBUG-13719, QTBUG-58271
void tst_qqmlproperty::aliasPropertyBindings()
{
- QQmlComponent component(&engine, testFileUrl("aliasPropertyBindings.qml"));
+ QFETCH(QString, file);
+ QFETCH(QString, subObject);
+
+ QQmlComponent component(&engine, testFileUrl(file));
QObject *object = component.create();
QVERIFY(object != 0);
- QCOMPARE(object->property("realProperty").toReal(), 90.);
+ // the object where realProperty lives
+ QObject *realPropertyObject = object;
+ if (!subObject.isEmpty())
+ realPropertyObject = object->property(subObject.toLatin1()).value<QObject*>();
+
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 90.);
QCOMPARE(object->property("aliasProperty").toReal(), 90.);
object->setProperty("test", 10);
- QCOMPARE(object->property("realProperty").toReal(), 110.);
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 110.);
QCOMPARE(object->property("aliasProperty").toReal(), 110.);
- QQmlProperty realProperty(object, QLatin1String("realProperty"));
+ QQmlProperty realProperty(realPropertyObject, QLatin1String("realProperty"));
QQmlProperty aliasProperty(object, QLatin1String("aliasProperty"));
// Check there is a binding on these two properties
@@ -1868,18 +1886,18 @@ void tst_qqmlproperty::aliasPropertyBindings()
QCOMPARE(QQmlPropertyPrivate::binding(realProperty),
QQmlPropertyPrivate::binding(aliasProperty));
- QCOMPARE(object->property("realProperty").toReal(), 96.);
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 96.);
QCOMPARE(object->property("aliasProperty").toReal(), 96.);
// Check the old binding really has not effect any more
object->setProperty("test", 4);
- QCOMPARE(object->property("realProperty").toReal(), 96.);
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 96.);
QCOMPARE(object->property("aliasProperty").toReal(), 96.);
object->setProperty("test2", 9);
- QCOMPARE(object->property("realProperty").toReal(), 288.);
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 288.);
QCOMPARE(object->property("aliasProperty").toReal(), 288.);
// Revert
@@ -1890,12 +1908,12 @@ void tst_qqmlproperty::aliasPropertyBindings()
QCOMPARE(QQmlPropertyPrivate::binding(realProperty),
QQmlPropertyPrivate::binding(aliasProperty));
- QCOMPARE(object->property("realProperty").toReal(), 20.);
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 20.);
QCOMPARE(object->property("aliasProperty").toReal(), 20.);
object->setProperty("test2", 3);
- QCOMPARE(object->property("realProperty").toReal(), 20.);
+ QCOMPARE(realPropertyObject->property("realProperty").toReal(), 20.);
QCOMPARE(object->property("aliasProperty").toReal(), 20.);
delete object;
@@ -1996,7 +2014,7 @@ void tst_qqmlproperty::warnOnInvalidBinding()
QTest::ignoreMessage(QtWarningMsg, expectedWarning.toLatin1().constData());
// V8 error message for invalid binding to anchor
- expectedWarning = testUrl.toString() + QString::fromLatin1(":14:33: Unable to assign QQuickItem_QML_6 to QQuickAnchorLine");
+ expectedWarning = testUrl.toString() + QString::fromLatin1(":14:33: Unable to assign QQuickItem_QML_8 to QQuickAnchorLine");
QTest::ignoreMessage(QtWarningMsg, expectedWarning.toLatin1().constData());
QQmlComponent component(&engine, testUrl);
diff --git a/tests/auto/qml/v4misc/tst_v4misc.cpp b/tests/auto/qml/v4misc/tst_v4misc.cpp
index 057714e175..88b6ae92a8 100644
--- a/tests/auto/qml/v4misc/tst_v4misc.cpp
+++ b/tests/auto/qml/v4misc/tst_v4misc.cpp
@@ -28,6 +28,7 @@
#include <qtest.h>
+#define V4_AUTOTEST
#include <private/qv4ssa_p.h>
class tst_v4misc: public QObject
@@ -40,6 +41,9 @@ private slots:
void rangeSplitting_1();
void rangeSplitting_2();
void rangeSplitting_3();
+
+ void moveMapping_1();
+ void moveMapping_2();
};
QT_BEGIN_NAMESPACE
@@ -139,6 +143,94 @@ void tst_v4misc::rangeSplitting_3()
QCOMPARE(interval.end(), 71);
}
+void tst_v4misc::moveMapping_1()
+{
+ Temp fp2(DoubleType, Temp::PhysicalRegister, 2);
+ Temp fp3(DoubleType, Temp::PhysicalRegister, 3);
+ Temp fp4(DoubleType, Temp::PhysicalRegister, 4);
+ Temp fp5(DoubleType, Temp::PhysicalRegister, 5);
+
+ MoveMapping mapping;
+ mapping.add(&fp2, &fp3);
+ mapping.add(&fp2, &fp4);
+ mapping.add(&fp2, &fp5);
+ mapping.add(&fp3, &fp2);
+
+ mapping.order();
+// mapping.dump();
+
+ QCOMPARE(mapping._moves.size(), 3);
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp2, &fp4, false)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp2, &fp5, false)));
+ QVERIFY(mapping._moves.last() == MoveMapping::Move(&fp2, &fp3, true) ||
+ mapping._moves.last() == MoveMapping::Move(&fp3, &fp2, true));
+}
+
+void tst_v4misc::moveMapping_2()
+{
+ Temp fp1(DoubleType, Temp::PhysicalRegister, 1);
+ Temp fp2(DoubleType, Temp::PhysicalRegister, 2);
+ Temp fp3(DoubleType, Temp::PhysicalRegister, 3);
+ Temp fp4(DoubleType, Temp::PhysicalRegister, 4);
+ Temp fp5(DoubleType, Temp::PhysicalRegister, 5);
+ Temp fp6(DoubleType, Temp::PhysicalRegister, 6);
+ Temp fp7(DoubleType, Temp::PhysicalRegister, 7);
+ Temp fp8(DoubleType, Temp::PhysicalRegister, 8);
+ Temp fp9(DoubleType, Temp::PhysicalRegister, 9);
+ Temp fp10(DoubleType, Temp::PhysicalRegister, 10);
+ Temp fp11(DoubleType, Temp::PhysicalRegister, 11);
+ Temp fp12(DoubleType, Temp::PhysicalRegister, 12);
+ Temp fp13(DoubleType, Temp::PhysicalRegister, 13);
+
+ MoveMapping mapping;
+ mapping.add(&fp2, &fp1);
+ mapping.add(&fp2, &fp3);
+ mapping.add(&fp3, &fp2);
+ mapping.add(&fp3, &fp4);
+
+ mapping.add(&fp9, &fp8);
+ mapping.add(&fp8, &fp7);
+ mapping.add(&fp7, &fp6);
+ mapping.add(&fp7, &fp5);
+
+ mapping.add(&fp10, &fp11);
+ mapping.add(&fp11, &fp12);
+ mapping.add(&fp12, &fp13);
+ mapping.add(&fp13, &fp10);
+
+ mapping.order();
+// mapping.dump();
+
+ QCOMPARE(mapping._moves.size(), 10);
+
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp2, &fp1, false)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp3, &fp4, false)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp7, &fp6, false)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp7, &fp5, false)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp8, &fp7, false)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp9, &fp8, false)));
+
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp2, &fp3, true)) ||
+ mapping._moves.contains(MoveMapping::Move(&fp3, &fp2, true)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp10, &fp13, true)) ||
+ mapping._moves.contains(MoveMapping::Move(&fp13, &fp10, true)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp12, &fp13, true)) ||
+ mapping._moves.contains(MoveMapping::Move(&fp13, &fp12, true)));
+ QVERIFY(mapping._moves.contains(MoveMapping::Move(&fp12, &fp11, true)) ||
+ mapping._moves.contains(MoveMapping::Move(&fp11, &fp12, true)));
+
+ QVERIFY(!mapping._moves.at(0).needsSwap);
+ QVERIFY(!mapping._moves.at(1).needsSwap);
+ QVERIFY(!mapping._moves.at(2).needsSwap);
+ QVERIFY(!mapping._moves.at(3).needsSwap);
+ QVERIFY(!mapping._moves.at(4).needsSwap);
+ QVERIFY(!mapping._moves.at(5).needsSwap);
+ QVERIFY(mapping._moves.at(6).needsSwap);
+ QVERIFY(mapping._moves.at(7).needsSwap);
+ QVERIFY(mapping._moves.at(8).needsSwap);
+ QVERIFY(mapping._moves.at(9).needsSwap);
+}
+
QTEST_MAIN(tst_v4misc)
#include "tst_v4misc.moc"