diff options
Diffstat (limited to 'tests/auto/qml/qqmlecmascript')
4 files changed, 3 insertions, 320 deletions
diff --git a/tests/auto/qml/qqmlecmascript/data/functionAssignment.1.qml b/tests/auto/qml/qqmlecmascript/data/functionAssignment.1.qml index d97613a875..ec6f8b32c5 100644 --- a/tests/auto/qml/qqmlecmascript/data/functionAssignment.1.qml +++ b/tests/auto/qml/qqmlecmascript/data/functionAssignment.1.qml @@ -1,8 +1,6 @@ import Qt.test 1.0 MyQmlObject { - property variant a: function myFunction() { return 2; } - property variant b: Qt.binding(function() { return 2; }) property var c: Qt.binding(function() { return 2; }) qjsvalue: Qt.binding(function() { return 2; }) } diff --git a/tests/auto/qml/qqmlecmascript/data/sequenceConversion.array.qml b/tests/auto/qml/qqmlecmascript/data/sequenceConversion.array.qml index 99c49ebf62..77d8161138 100644 --- a/tests/auto/qml/qqmlecmascript/data/sequenceConversion.array.qml +++ b/tests/auto/qml/qqmlecmascript/data/sequenceConversion.array.qml @@ -17,54 +17,36 @@ Item { property bool success: false - property variant intList - property variant qrealList - property variant boolList - property variant stringList - function indexedAccess() { - intList = msco.intListProperty; var jsIntList = msco.intListProperty; - qrealList = msco.qrealListProperty; var jsQrealList = msco.qrealListProperty; - boolList = msco.boolListProperty; var jsBoolList = msco.boolListProperty; - stringList = msco.stringListProperty; var jsStringList = msco.stringListProperty; - // Three cases: direct property modification, variant copy modification, js var reference modification. - // Only the first and third should "write back" to the original QObject Q_PROPERTY; the second one - // should have no effect whatsoever to maintain "property variant" semantics (see e.g., valuetype). + // Two cases: direct property modification, js var reference modification. + // Both should "write back" to the original QObject Q_PROPERTY success = true; msco.intListProperty[1] = 33; if (msco.intListProperty[1] != 33) success = false; // ensure write back - intList[1] = 44; - if (intList[1] == 44) success = false; // ensure no effect jsIntList[1] = 55; if (jsIntList[1] != 55 || jsIntList[1] != msco.intListProperty[1]) success = false; // ensure write back msco.qrealListProperty[1] = 33.3; if (msco.qrealListProperty[1] != 33.3) success = false; // ensure write back - qrealList[1] = 44.4; - if (qrealList[1] == 44.4) success = false; // ensure no effect jsQrealList[1] = 55.5; if (jsQrealList[1] != 55.5 || jsQrealList[1] != msco.qrealListProperty[1]) success = false; // ensure write back msco.boolListProperty[1] = true; if (msco.boolListProperty[1] != true) success = false; // ensure write back - boolList[1] = true; - if (boolList[1] != false) success = false; // ensure no effect jsBoolList[1] = false; if (jsBoolList[1] != false || jsBoolList[1] != msco.boolListProperty[1]) success = false; // ensure write back msco.stringListProperty[1] = "changed"; if (msco.stringListProperty[1] != "changed") success = false; // ensure write back - stringList[1] = "changed"; - if (stringList[1] != "second") success = false; // ensure no effect jsStringList[1] = "different"; if (jsStringList[1] != "different" || jsStringList[1] != msco.stringListProperty[1]) success = false; // ensure write back diff --git a/tests/auto/qml/qqmlecmascript/data/sequenceConversion.copy.qml b/tests/auto/qml/qqmlecmascript/data/sequenceConversion.copy.qml deleted file mode 100644 index 088e240ad4..0000000000 --- a/tests/auto/qml/qqmlecmascript/data/sequenceConversion.copy.qml +++ /dev/null @@ -1,183 +0,0 @@ -import QtQuick 2.0 -import Qt.test 1.0 - -Item { - id: root - objectName: "root" - - MySequenceConversionObject { - id: msco - objectName: "msco" - } - - property bool success: true - - property variant intList - property variant qrealList - property variant boolList - property variant stringList - property variant urlList - property variant qstringList - - // this test ensures that the "copy resource" codepaths work - function testCopySequences() { - success = true; - - // create "copy resource" sequences - var jsIntList = msco.generateIntSequence(); - var jsQrealList = msco.generateQrealSequence(); - var jsBoolList = msco.generateBoolSequence(); - var jsStringList = msco.generateStringSequence(); - var jsUrlList = msco.generateUrlSequence(); - var jsQStringList = msco.generateQStringSequence(); - - if (jsIntList.toString() != [1, 2, 3].toString()) - success = false; - if (jsQrealList.toString() != [1.1, 2.2, 3.3].toString()) - success = false; - if (jsBoolList.toString() != [true, false, true].toString()) - success = false; - if (jsStringList.toString() != ["one", "two", "three"].toString()) - success = false; - if (jsUrlList.toString() != ["http://www.example1.com", "http://www.example2.com", "http://www.example3.com"].toString()) - success = false; - if (jsQStringList.toString() != ["one", "two", "three"].toString()) - success = false; - - // copy the sequence; should result in a new copy - intList = jsIntList; - qrealList = jsQrealList; - boolList = jsBoolList; - stringList = jsStringList; - urlList = jsUrlList; - qstringList = jsQStringList; - - // these operations shouldn't modify either variables - because - // we don't handle writing to the intermediate variant at list[index] - // for variant properties. - intList[1] = 8; - qrealList[1] = 8.8; - boolList[1] = true; - stringList[1] = "eight"; - urlList[1] = "http://www.example8.com"; - qstringList[1] = "eight"; - - if (jsIntList[1] == 8) - success = false; - if (jsQrealList[1] == 8.8) - success = false; - if (jsBoolList[1] == true) - success = false; - if (jsStringList[1] == "eight") - success = false; - if (jsUrlList[1] == "http://www.example8.com") - success = false; - if (jsQStringList[1] == "eight") - success = false; - - // assign a "copy resource" sequence to a QObject Q_PROPERTY - msco.intListProperty = intList; - msco.qrealListProperty = qrealList; - msco.boolListProperty = boolList; - msco.stringListProperty = stringList; - msco.urlListProperty = urlList; - msco.qstringListProperty = qstringList; - - if (msco.intListProperty.toString() != [1, 2, 3].toString()) - success = false; - if (msco.qrealListProperty.toString() != [1.1, 2.2, 3.3].toString()) - success = false; - if (msco.boolListProperty.toString() != [true, false, true].toString()) - success = false; - if (msco.stringListProperty.toString() != ["one", "two", "three"].toString()) - success = false; - if (msco.urlListProperty.toString() != ["http://www.example1.com", "http://www.example2.com", "http://www.example3.com"].toString()) - success = false; - if (msco.qstringListProperty.toString() != ["one", "two", "three"].toString()) - success = false; - - // now modify the QObject Q_PROPERTY (reference resource) sequences - shouldn't modify the copy resource sequences. - msco.intListProperty[2] = 9; - msco.qrealListProperty[2] = 9.9; - msco.boolListProperty[2] = false; - msco.stringListProperty[2] = "nine"; - msco.urlListProperty[2] = "http://www.example9.com"; - msco.qstringListProperty[2] = "nine"; - - if (intList[2] == 9) - success = false; - if (qrealList[2] == 9.9) - success = false; - if (boolList[2] == false) - success = false; - if (stringList[2] == "nine") - success = false; - if (urlList[2] == "http://www.example9.com") - success = false; - if (qstringList[2] == "nine") - success = false; - } - - property int intVal - property real qrealVal - property bool boolVal - property string stringVal - - // this test ensures that indexed access works for copy resource sequences. - function readSequenceCopyElements() { - success = true; - - var jsIntList = msco.generateIntSequence(); - var jsQrealList = msco.generateQrealSequence(); - var jsBoolList = msco.generateBoolSequence(); - var jsStringList = msco.generateStringSequence(); - - intVal = jsIntList[1]; - qrealVal = jsQrealList[1]; - boolVal = jsBoolList[1]; - stringVal = jsStringList[1]; - - if (intVal != 2) - success = false; - if (qrealVal != 2.2) - success = false; - if (boolVal != false) - success = false; - if (stringVal != "two") - success = false; - } - - // this test ensures that equality works for copy resource sequences. - function testEqualitySemantics() { - success = true; - - var jsIntList = msco.generateIntSequence(); - var jsIntList2 = msco.generateIntSequence(); - - if (jsIntList == jsIntList2) success = false; - if (jsIntList != jsIntList) success = false; - } - - // this test ensures that copy resource sequences can be passed as parameters - function testCopyParameters() { - success = false; - - var jsIntList = msco.generateIntSequence(); - success = msco.parameterEqualsGeneratedIntSequence(jsIntList); - if (success == false) return; - - // here we construct something which should be converted to a copy sequence automatically. - success = msco.parameterEqualsGeneratedIntSequence([1,2,3]); - } - - // this test ensures that reference resource sequences are converted - // to copy resource sequences when passed as parameters. - function testReferenceParameters() { - success = false; - - msco.intListProperty = msco.generateIntSequence(); - var jsIntList = msco.intListProperty - success = msco.parameterEqualsGeneratedIntSequence(jsIntList); - if (success == false) return; - } -} diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index deb949e7a5..374819a3fe 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -205,7 +205,6 @@ private slots: void sequenceConversionIndexes(); void sequenceConversionThreads(); void sequenceConversionBindings(); - void sequenceConversionCopy(); void assignSequenceTypes(); void sequenceSort_data(); void sequenceSort(); @@ -4887,94 +4886,6 @@ void tst_qqmlecmascript::scarceResources_data() << (QList<QVariant>() << false << false) // invalidating one should invalidate the other, because they're references to the same JS object. << (QList<QVariant>() << QVariant() << QVariant()) << QStringList(); - - - /* property variant semantics */ - - // in the following three cases, the instance created from the component - // has a property which is a copy of the scarce resource; hence, the - // resource should NOT be detached prior to deletion of the object instance, - // unless the resource is destroyed explicitly. - QTest::newRow("variant: import scarce resource copy directly") - << testFileUrl("scarceResourceCopy.variant.qml") - << true - << false // won't be detached, because assigned to property and not explicitly released - << (QStringList() << QLatin1String("scarceResourceCopy")) - << (QList<QVariant>() << true) - << (QList<QVariant>() << origPixmap) - << QStringList(); - - QTest::newRow("variant: import scarce resource copy from JS") - << testFileUrl("scarceResourceCopyFromJs.variant.qml") - << true - << false // won't be detached, because assigned to property and not explicitly released - << (QStringList() << QLatin1String("scarceResourceCopy")) - << (QList<QVariant>() << true) - << (QList<QVariant>() << origPixmap) - << QStringList(); - - QTest::newRow("variant: import released scarce resource copy from JS") - << testFileUrl("scarceResourceDestroyedCopy.variant.qml") - << true - << true // explicitly released, so it will be detached - << (QStringList() << QLatin1String("scarceResourceCopy")) - << (QList<QVariant>() << false) - << (QList<QVariant>() << QVariant()) - << QStringList(); - - // in the following three cases, no other copy should exist in memory, - // and so it should be detached (unless explicitly preserved). - QTest::newRow("variant: import auto-release SR from JS in binding side-effect") - << testFileUrl("scarceResourceTest.variant.qml") - << true - << true // auto released, so it will be detached - << (QStringList() << QLatin1String("scarceResourceTest")) - << (QList<QVariant>() << true) - << (QList<QVariant>() << QVariant(100)) - << QStringList(); - QTest::newRow("variant: import explicit-preserve SR from JS in binding side-effect") - << testFileUrl("scarceResourceTestPreserve.variant.qml") - << true - << false // won't be detached because we explicitly preserve it - << (QStringList() << QLatin1String("scarceResourceTest")) - << (QList<QVariant>() << true) - << (QList<QVariant>() << QVariant(100)) - << QStringList(); - QTest::newRow("variant: import multiple scarce resources") - << testFileUrl("scarceResourceTestMultiple.variant.qml") - << true - << true // will be detached because all resources were released manually or automatically. - << (QStringList() << QLatin1String("scarceResourceTest")) - << (QList<QVariant>() << true) - << (QList<QVariant>() << QVariant(100)) - << QStringList(); - - // In the following three cases, test that scarce resources are handled - // correctly for imports. - QTest::newRow("variant: import with no binding") - << testFileUrl("scarceResourceCopyImportNoBinding.variant.qml") - << false // cannot check detach status. - << false - << QStringList() - << QList<QVariant>() - << QList<QVariant>() - << QStringList(); - QTest::newRow("variant: import with binding without explicit preserve") - << testFileUrl("scarceResourceCopyImportNoBinding.variant.qml") - << false - << false - << (QStringList() << QLatin1String("scarceResourceCopy")) - << (QList<QVariant>() << false) // will have been released prior to evaluation of binding. - << (QList<QVariant>() << QVariant()) - << QStringList(); - QTest::newRow("variant: import with explicit release after binding evaluation") - << testFileUrl("scarceResourceCopyImport.variant.qml") - << false - << false - << (QStringList() << QLatin1String("scarceResourceImportedCopy") << QLatin1String("scarceResourceAssignedCopyOne") << QLatin1String("scarceResourceAssignedCopyTwo")) - << (QList<QVariant>() << true << true << false) // since property variant = variant copy, releasing the provider's resource does not invalidate previously assigned copies. - << (QList<QVariant>() << origPixmap << origPixmap << QVariant()) - << QStringList(); } void tst_qqmlecmascript::scarceResources() @@ -5923,26 +5834,6 @@ void tst_qqmlecmascript::sequenceConversionBindings() } } -void tst_qqmlecmascript::sequenceConversionCopy() -{ - QUrl qmlFile = testFileUrl("sequenceConversion.copy.qml"); - QQmlEngine engine; - QQmlComponent component(&engine, qmlFile); - QObject *object = component.create(); - QVERIFY(object != nullptr); - QMetaObject::invokeMethod(object, "testCopySequences"); - QCOMPARE(object->property("success").toBool(), true); - QMetaObject::invokeMethod(object, "readSequenceCopyElements"); - QCOMPARE(object->property("success").toBool(), true); - QMetaObject::invokeMethod(object, "testEqualitySemantics"); - QCOMPARE(object->property("success").toBool(), true); - QMetaObject::invokeMethod(object, "testCopyParameters"); - QCOMPARE(object->property("success").toBool(), true); - QMetaObject::invokeMethod(object, "testReferenceParameters"); - QCOMPARE(object->property("success").toBool(), true); - delete object; -} - void tst_qqmlecmascript::assignSequenceTypes() { QQmlEngine engine; @@ -6317,19 +6208,14 @@ void tst_qqmlecmascript::functionAssignment_fromBinding() QQmlComponent component(&engine, testFileUrl("functionAssignment.1.qml")); QString url = component.url().toString(); - QString w1 = url + ":4:5: Unable to assign a function to a property of any type other than var."; + QString w1 = url + ":4:5: Invalid use of Qt.binding() in a binding declaration."; QString w2 = url + ":5:5: Invalid use of Qt.binding() in a binding declaration."; - QString w3 = url + ":6:5: Invalid use of Qt.binding() in a binding declaration."; - QString w4 = url + ":7:5: Invalid use of Qt.binding() in a binding declaration."; QTest::ignoreMessage(QtWarningMsg, w1.toLatin1().constData()); QTest::ignoreMessage(QtWarningMsg, w2.toLatin1().constData()); - QTest::ignoreMessage(QtWarningMsg, w3.toLatin1().constData()); - QTest::ignoreMessage(QtWarningMsg, w4.toLatin1().constData()); MyQmlObject *o = qobject_cast<MyQmlObject *>(component.create()); QVERIFY(o != nullptr); - QVERIFY(!o->property("a").isValid()); delete o; } |