aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp')
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp155
1 files changed, 59 insertions, 96 deletions
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
index 10425db0d1..4c5fb6f123 100644
--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
@@ -153,11 +153,10 @@ private slots:
void signalWithQJSValue();
void singletonType_data();
void singletonType();
+ void singletonTypeCaching_data();
+ void singletonTypeCaching();
void singletonTypeImportOrder();
void singletonTypeResolution();
- void singletonTypeConflicts1();
- void singletonTypeConflicts2();
- void singletonTypeConflicts3();
void importScripts_data();
void importScripts();
void scarceResources();
@@ -3602,8 +3601,9 @@ void tst_qqmlecmascript::singletonType_data()
<< QString()
<< QStringList()
<< (QStringList() << "existingUriTest" << "qobjectTest" << "qobjectMethodTest"
- << "qobjectMinorVersionTest" << "qobjectMajorVersionTest" << "qobjectParentedTest")
- << (QVariantList() << 20 << 20 << 2 << 20 << 20 << 26)
+ << "qobjectMinorVersionMethodTest" << "qobjectMinorVersionTest"
+ << "qobjectMajorVersionTest" << "qobjectParentedTest")
+ << (QVariantList() << 20 << 20 << 2 << 1 << 20 << 20 << 26)
<< QStringList()
<< QVariantList()
<< QStringList()
@@ -3614,29 +3614,7 @@ void tst_qqmlecmascript::singletonType_data()
<< QString()
<< QStringList()
<< (QStringList() << "scriptTest")
- << (QVariantList() << 13)
- << QStringList()
- << QVariantList()
- << QStringList()
- << QVariantList();
-
- QTest::newRow("qobject, caching + read")
- << testFileUrl("singletontype/qobjectSingletonTypeCaching.qml")
- << QString()
- << QStringList()
- << (QStringList() << "existingUriTest" << "qobjectParentedTest")
- << (QVariantList() << 20 << 26) // 26, shouldn't have incremented to 27.
- << QStringList()
- << QVariantList()
- << QStringList()
- << QVariantList();
-
- QTest::newRow("script, caching + read")
- << testFileUrl("singletontype/scriptSingletonTypeCaching.qml")
- << QString()
- << QStringList()
- << (QStringList() << "scriptTest")
- << (QVariantList() << 13) // 13, shouldn't have incremented to 14.
+ << (QVariantList() << 14) // will have incremented, since we create a new engine each row in this test.
<< QStringList()
<< QVariantList()
<< QStringList()
@@ -3658,7 +3636,7 @@ void tst_qqmlecmascript::singletonType_data()
<< QString()
<< (QStringList() << QString(testFileUrl("singletontype/scriptSingletonTypeWriting.qml").toString() + QLatin1String(":21: Error: Cannot assign to read-only property \"scriptTestProperty\"")))
<< (QStringList() << "readBack" << "unchanged")
- << (QVariantList() << 13 << 42)
+ << (QVariantList() << 15 << 42)
<< (QStringList() << "firstProperty" << "secondProperty")
<< (QVariantList() << 30 << 30)
<< (QStringList() << "readBack" << "unchanged")
@@ -3696,6 +3674,17 @@ void tst_qqmlecmascript::singletonType_data()
<< QVariantList()
<< QStringList()
<< QVariantList();
+
+ QTest::newRow("qobject, multiple in namespace")
+ << testFileUrl("singletontype/singletonTypeMultiple.qml")
+ << QString()
+ << QStringList()
+ << (QStringList() << "first" << "second")
+ << (QVariantList() << 35 << 42)
+ << QStringList()
+ << QVariantList()
+ << QStringList()
+ << QVariantList();
}
void tst_qqmlecmascript::singletonType()
@@ -3710,7 +3699,8 @@ void tst_qqmlecmascript::singletonType()
QFETCH(QStringList, readBackProperties);
QFETCH(QVariantList, readBackExpectedValues);
- QQmlComponent component(&engine, testfile);
+ QQmlEngine cleanEngine; // so tests don't interfere which each other, as singleton types are engine-singletons only.
+ QQmlComponent component(&cleanEngine, testfile);
if (!errorMessage.isEmpty())
QTest::ignoreMessage(QtWarningMsg, errorMessage.toLatin1().constData());
@@ -3734,6 +3724,45 @@ void tst_qqmlecmascript::singletonType()
}
}
+void tst_qqmlecmascript::singletonTypeCaching_data()
+{
+ QTest::addColumn<QUrl>("testfile");
+ QTest::addColumn<QStringList>("readProperties");
+
+ QTest::newRow("qobject, caching + read")
+ << testFileUrl("singletontype/qobjectSingletonTypeCaching.qml")
+ << (QStringList() << "existingUriTest" << "qobjectParentedTest");
+
+ QTest::newRow("script, caching + read")
+ << testFileUrl("singletontype/scriptSingletonTypeCaching.qml")
+ << (QStringList() << "scriptTest");
+}
+
+void tst_qqmlecmascript::singletonTypeCaching()
+{
+ QFETCH(QUrl, testfile);
+ QFETCH(QStringList, readProperties);
+
+ // ensure that the singleton type instances are cached per-engine.
+
+ QQmlEngine cleanEngine;
+ QQmlComponent component(&cleanEngine, testfile);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QList<QVariant> firstValues;
+ QMetaObject::invokeMethod(object, "modifyValues");
+ for (int i = 0; i < readProperties.size(); ++i)
+ firstValues << object->property(readProperties.at(i).toLatin1().constData());
+ delete object;
+
+ QQmlComponent component2(&cleanEngine, testfile);
+ QObject *object2 = component2.create();
+ QVERIFY(object2 != 0);
+ for (int i = 0; i < readProperties.size(); ++i)
+ QCOMPARE(object2->property(readProperties.at(i).toLatin1().constData()), firstValues.at(i)); // cached, shouldn't have changed.
+ delete object2;
+}
+
void tst_qqmlecmascript::singletonTypeImportOrder()
{
QQmlComponent component(&engine, testFileUrl("singletontype/singletonTypeImportOrder.qml"));
@@ -3752,72 +3781,6 @@ void tst_qqmlecmascript::singletonTypeResolution()
delete object;
}
-void tst_qqmlecmascript::singletonTypeConflicts1()
-{
- const char *warning = "Cannot register singleton type TypeName in uri Test.Conflict1 1.5 (a conflicting singleton type already exists)";
- QTest::ignoreMessage(QtWarningMsg, warning);
-
- int i0 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict1", 1, 5, "TypeName", 0);
- QVERIFY(i0 != -1);
-
- int i1 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict1", 2, 0, "TypeName", 0);
- QVERIFY(i1 != -1);
-
- int i2 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict1", 1, 5, "TypeName", 0);
- QVERIFY(i2 == -1);
-
- int i3 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict1", 1, 2, "TypeName", 0);
- QVERIFY(i3 != -1);
-
- int i4 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict1", 1, 8, "TypeName", 0);
- QVERIFY(i4 != -1);
-}
-
-void tst_qqmlecmascript::singletonTypeConflicts2()
-{
- int i0 = qmlRegisterType<MyQmlObject>("Test.Conflict2", 1, 5, "TypeName");
- QVERIFY(i0 != -1);
-
- int i2 = qmlRegisterType<MyQmlObject>("Test.Conflict2", 1, 8, "TypeName");
- QVERIFY(i2 != -1);
-
- int i3 = qmlRegisterType<MyQmlObject>("Test.Conflict2", 2, 0, "TypeName");
- QVERIFY(i3 != -1);
-
- int i4 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict2", 1, 0, "TypeName", 0);
- QVERIFY(i4 != -1);
-
- const char *warning2 = "Cannot register singleton type TypeName in uri Test.Conflict2 1.9 (a conflicting type already exists)";
- QTest::ignoreMessage(QtWarningMsg, warning2);
-
- int i5 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict2", 1, 9, "TypeName", 0);
- QVERIFY(i5 == -1);
-}
-
-void tst_qqmlecmascript::singletonTypeConflicts3()
-{
- int i0 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict3", 1, 0, "TypeName", 0);
- QVERIFY(i0 != -1);
-
- int i1 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict3", 1, 5, "TypeName", 0);
- QVERIFY(i1 != -1);
-
- int i2 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict3", 1, 8, "TypeName", 0);
- QVERIFY(i2 != -1);
-
- int i3 = qmlRegisterSingletonType<testImportOrderApi>("Test.Conflict3", 2, 0, "TypeName", 0);
- QVERIFY(i3 != -1);
-
- const char *warning = "Cannot register type TypeName in uri Test.Conflict3 1.0 (a conflicting singleton type already exists)";
- QTest::ignoreMessage(QtWarningMsg, warning);
-
- int i4 = qmlRegisterType<MyQmlObject>("Test.Conflict3", 1, 0, "TypeName");
- QVERIFY(i4 == -1);
-
- int i5 = qmlRegisterType<MyQmlObject>("Test.Conflict3", 1, 3, "TypeName");
- QVERIFY(i5 != -1);
-}
-
void tst_qqmlecmascript::importScripts_data()
{
QTest::addColumn<QUrl>("testfile");