diff options
Diffstat (limited to 'tests/auto/qml')
-rw-r--r-- | tests/auto/qml/qml.pro | 2 | ||||
-rw-r--r-- | tests/auto/qml/qqmlmetatype/data/testExternalEnums.qml | 12 | ||||
-rw-r--r-- | tests/auto/qml/qqmlmetatype/tst_qqmlmetatype.cpp | 33 | ||||
-rw-r--r-- | tests/auto/qml/qqmlproperty/data/aliasPropertyBindings2.qml | 23 | ||||
-rw-r--r-- | tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp | 40 | ||||
-rw-r--r-- | tests/auto/qml/v4misc/tst_v4misc.cpp | 92 |
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" |