diff options
Diffstat (limited to 'tests/auto/declarative/qdeclarativeecmascript/data')
57 files changed, 785 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/Scope6Nested.qml b/tests/auto/declarative/qdeclarativeecmascript/data/Scope6Nested.qml new file mode 100644 index 0000000000..a3794df22b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/Scope6Nested.qml @@ -0,0 +1,7 @@ +import Qt.test 1.0 + +MyQmlObject { + function runtest(obj) { + return obj.MyQmlObject.value == 19; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.1.qml new file mode 100644 index 0000000000..3182d6b4ab --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.1.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 + +Item { + property int changeCount: 0 + + property bool _nameWithUnderscore: false + + // this should error, since the first alpha isn't capitalised. + on_nameWithUnderscoreChanged: { + changeCount = changeCount + 2; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.2.qml new file mode 100644 index 0000000000..50ef0b34dd --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.2.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 + +Item { + property int changeCount: 0 + + property bool ____nameWithUnderscores: false + + // this should error, since the first alpha isn't capitalised + on____nameWithUnderscoresChanged: { + changeCount = changeCount + 3; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.3.qml b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.3.qml new file mode 100644 index 0000000000..343cf91720 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.3.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 + +Item { + property int changeCount: 0 + + // invalid property name - we don't allow $ + property bool $nameWithDollarsign: false + + on$NameWithDollarsignChanged: { + changeCount = changeCount + 4; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.4.qml b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.4.qml new file mode 100644 index 0000000000..b8459875df --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlotErrors.4.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 + +Item { + property int changeCount: 0 + + property bool _6nameWithUnderscoreNumber: false + + // invalid property name - the first character after an underscore must be a letter + on_6NameWithUnderscoreNumberChanged: { + changeCount = changeCount + 3; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlots.qml b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlots.qml new file mode 100644 index 0000000000..d31c89382b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/changeslots/propertyChangeSlots.qml @@ -0,0 +1,27 @@ +import QtQuick 1.0 + +Item { + property int changeCount: 0 + + property bool normalName: false + property bool _nameWithUnderscore: false + property bool ____nameWithUnderscores: false + + onNormalNameChanged: { + changeCount = changeCount + 1; + } + + on_NameWithUnderscoreChanged: { + changeCount = changeCount + 2; + } + + on____NameWithUnderscoresChanged: { + changeCount = changeCount + 3; + } + + Component.onCompleted: { + normalName = true; + _nameWithUnderscore = true; + ____nameWithUnderscores = true; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/SpecialRectangleOne.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/SpecialRectangleOne.qml new file mode 100644 index 0000000000..698b672259 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/SpecialRectangleOne.qml @@ -0,0 +1,9 @@ +import QtQuick 1.0 + +import "importPragmaLibrary.js" as TestPragmaLibraryImport + +Rectangle { + width: TestPragmaLibraryImport.importIncrementedValue() + height: width + 15 + color: "red" +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/SpecialRectangleTwo.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/SpecialRectangleTwo.qml new file mode 100644 index 0000000000..581ae671e3 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/SpecialRectangleTwo.qml @@ -0,0 +1,9 @@ +import QtQuick 1.0 + +import "importPragmaLibrary.js" as TestPragmaLibraryImport + +Rectangle { + width: TestPragmaLibraryImport.importIncrementedValue() + height: width + 5 + color: "blue" +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importFive.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importFive.js new file mode 100644 index 0000000000..e458094552 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importFive.js @@ -0,0 +1,3 @@ +function importFiveFunction() { + return '5'; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importFour.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importFour.js new file mode 100644 index 0000000000..faddc15c9d --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importFour.js @@ -0,0 +1,9 @@ +.pragma library + +function importFourFunction() { + return '4'; +} + +function greetingString() { + return 'Hello, World!'; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importOne.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importOne.js new file mode 100644 index 0000000000..338c4e042f --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importOne.js @@ -0,0 +1,13 @@ +.import "importTwo.js" as ImportTwoJs +.import "importThree.js" as ImportThreeJs + +function greetingString() { + if (ImportTwoJs.greetingString().length > 0) { + return ImportTwoJs.greetingString(); + } + return ImportThreeJs.greetingString(); +} + +function importOneFunction() { + return '1'; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importPragmaLibrary.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importPragmaLibrary.js new file mode 100644 index 0000000000..c746fef14b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importPragmaLibrary.js @@ -0,0 +1,9 @@ +.pragma library + +var i = 4; + +// .pragma library, so should be callable from multiple .qml with shared i. +function importIncrementedValue() { + i = i + 1; + return i; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importThree.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importThree.js new file mode 100644 index 0000000000..3917134ee2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importThree.js @@ -0,0 +1,9 @@ +.import "importFour.js" as ImportFourJs + +function greetingString() { + return ImportFourJs.greetingString(); +} + +function importThreeFunction() { + return '3'; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importTwo.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importTwo.js new file mode 100644 index 0000000000..45b3c9a74d --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importTwo.js @@ -0,0 +1,10 @@ +.import "importFour.js" as ImportFourJs +.import "importFive.js" as ImportFiveJs + +function greetingString() { + return ImportFourJs.greetingString(); +} + +function importTwoFunction() { + return '2'; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importWithNoImports.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importWithNoImports.js new file mode 100644 index 0000000000..83426c425c --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/importWithNoImports.js @@ -0,0 +1,11 @@ +// This js file has no imports, and so should inherit +// scope from the QML file which includes it. + +function componentError() { + var i = 5; + var errorIsOne = Component.error == 1; + if (errorIsOne == true) { + i = i + 7; + } + return i; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImport.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImport.qml new file mode 100644 index 0000000000..4a284ad886 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImport.qml @@ -0,0 +1,14 @@ +import QtQuick 1.0 + +import "testScriptImport.js" as TestScriptImport +import "testModuleImport.js" as TestModuleImport + +QtObject { + id: testQtObject + + property string importedScriptStringValue: TestScriptImport.greetingText + property int importedScriptFunctionValue: TestScriptImport.randomInteger(1, 20) + + property int importedModuleAttachedPropertyValue: TestModuleImport.importedAttachedPropertyValue(testQtObject) + property int importedModuleEnumValue: TestModuleImport.importedEnumValue +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImportPragmaLibrary.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImportPragmaLibrary.qml new file mode 100644 index 0000000000..7add311326 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImportPragmaLibrary.qml @@ -0,0 +1,20 @@ +import QtQuick 1.0 + +// We use the components specified in SpecialRectangleOne.qml and SpecialRectangleTwo.qml + +QtObject { + id: testQtObject + + property SpecialRectangleOne a; + property SpecialRectangleTwo b; + + a: SpecialRectangleOne { + id: rectangleOne + } + b: SpecialRectangleTwo { + id: rectangleTwo + } + + // this should be: (5 + 15) + (6 + 5) == 31 + property int testValue: rectangleOne.height + rectangleTwo.height +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImportScoping.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImportScoping.qml new file mode 100644 index 0000000000..0df841c78c --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testImportScoping.qml @@ -0,0 +1,11 @@ +import QtQuick 1.0 + +// For backward compatibility, importing a script which has no imports, +// should run the script in the parent context. See QTBUG-17518. + +import "importWithNoImports.js" as TestNoImportScoping + +QtObject { + id: testQtObject + property int componentError: TestNoImportScoping.componentError() +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testModuleImport.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testModuleImport.js new file mode 100644 index 0000000000..69bc1c9887 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testModuleImport.js @@ -0,0 +1,8 @@ +.import Qt.test 1.0 as JsQtTest // test that we can import elements from .js files + +function importedAttachedPropertyValue(obj) { + return obj.JsQtTest.MyQmlObject.value; // attached property, value = 19. +} + +var importedEnumValue = JsQtTest.MyQmlObject.EnumValue3 // the actual value of this enum value is "2" + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testScriptImport.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testScriptImport.js new file mode 100644 index 0000000000..2ecccd8816 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimport/testScriptImport.js @@ -0,0 +1,11 @@ +.import "importOne.js" as ImportOneJs // test that we can import scripts from .js files + +var greetingText = ImportOneJs.greetingString() + +function randomInteger(min, max) { + if (max > min) { + if (min > 10) return min; + return max; + } + return min; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failFive.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failFive.qml new file mode 100644 index 0000000000..9bf969cc61 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failFive.qml @@ -0,0 +1,11 @@ +import QtQuick 1.0 + +// This should fail, since if the script does have imports +// of its own, it should run in its own context. + +import "importWithImports.js" as TestImportScoping + +QtObject { + id: testQtObject + property int componentError: TestImportScoping.componentError() +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failFour.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failFour.qml new file mode 100644 index 0000000000..fe7e88a829 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failFour.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +import "testModuleImport.js" as TestModuleImport + +QtObject { + property int importedModuleEnumValue: JsQtTest.MyQmlObject.EnumValue3 // should fail - the typenames available in TestModuleImport should not be available in this scope +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failOne.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failOne.qml new file mode 100644 index 0000000000..e7fb7656f0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failOne.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +import "testScriptImport.js" as TestScriptImport + +QtObject { + property string importScriptFunctionValue: TestScriptImport.ImportOneJs.greetingString() // should fail - the context of TestScriptImport is private to TestScriptImport. +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failThree.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failThree.qml new file mode 100644 index 0000000000..fa720a64eb --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failThree.qml @@ -0,0 +1,8 @@ +import QtQuick 1.0 + +import "testModuleImport.js" as TestModuleImport + +QtObject { + id: testQtObject + property int importedModuleAttachedPropertyValue: testQtObject.TestModuleImport.JsQtTest.MyQmlObject.value // should fail - the context of TestScriptImport is private to TestScriptImport. +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failTwo.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failTwo.qml new file mode 100644 index 0000000000..c2cbce9f80 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/failTwo.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +import "testScriptImport.js" as TestScriptImport + +QtObject { + property string importScriptFunctionValue: ImportOneJs.greetingString() // should fail - the typenames in TestScriptImport should not be visible from this scope +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importOne.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importOne.js new file mode 100644 index 0000000000..45fd9c75dd --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importOne.js @@ -0,0 +1,7 @@ +function greetingString() { + return 'Hello, World!'; +} + +function importOneFunction() { + return '1'; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importPragmaLibrary.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importPragmaLibrary.js new file mode 100644 index 0000000000..ad0e6946a2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importPragmaLibrary.js @@ -0,0 +1,11 @@ +.pragma library + +// .pragma library, so shouldn't inherit imports from any .qml file. +function importValue() { + var i = 3; + var errorIsOne = Component.error == 1; // this line should fail. + if (errorIsOne == true) { + i = i + 4; + } + return i; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importWithImports.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importWithImports.js new file mode 100644 index 0000000000..6d77ceccb1 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/importWithImports.js @@ -0,0 +1,13 @@ +.import "importOne.js" as ImportOne + +// This js file has imports, so should not inherit +// scope from the QML file which includes it. + +function componentError() { + var i = 3; + var errorIsOne = Component.error == 1; // this line should fail. + if (errorIsOne == true) { + i = i + 4; + } + return i; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testImportPragmaLibrary.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testImportPragmaLibrary.qml new file mode 100644 index 0000000000..7e4a73ae42 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testImportPragmaLibrary.qml @@ -0,0 +1,8 @@ +import QtQuick 1.0 + +import "importPragmaLibrary.js" as ImportPragmaLibrary + +QtObject { + id: testQtObject + property int testValue: ImportPragmaLibrary.importValue() +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testModuleImport.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testModuleImport.js new file mode 100644 index 0000000000..69bc1c9887 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testModuleImport.js @@ -0,0 +1,8 @@ +.import Qt.test 1.0 as JsQtTest // test that we can import elements from .js files + +function importedAttachedPropertyValue(obj) { + return obj.JsQtTest.MyQmlObject.value; // attached property, value = 19. +} + +var importedEnumValue = JsQtTest.MyQmlObject.EnumValue3 // the actual value of this enum value is "2" + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testScriptImport.js b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testScriptImport.js new file mode 100644 index 0000000000..2ecccd8816 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/jsimportfail/testScriptImport.js @@ -0,0 +1,11 @@ +.import "importOne.js" as ImportOneJs // test that we can import scripts from .js files + +var greetingText = ImportOneJs.greetingString() + +function randomInteger(min, max) { + if (max > min) { + if (min > 10) return min; + return max; + } + return min; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/moduleApi.qml b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApi.qml new file mode 100644 index 0000000000..23c1eb0bb8 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApi.qml @@ -0,0 +1,23 @@ +import QtQuick 1.0 + +import Qt.test 1.0 as QtTest // module API installed into existing uri +import Qt.test.scriptApi 1.0 as QtTestScriptApi // script module API installed into new uri +import Qt.test.qobjectApi 1.0 as QtTestQObjectApi // qobject module API installed into new uri +import Qt.test.qobjectApi 1.3 as QtTestMinorVersionQObjectApi // qobject module API installed into existing uri with new minor version +import Qt.test.qobjectApi 2.0 as QtTestMajorVersionQObjectApi // qobject module API installed into existing uri with new major version +import Qt.test.qobjectApiParented 1.0 as QtTestParentedQObjectApi // qobject (with parent) module API installed into a new uri + +QtObject { + property int existingUriTest: QtTest.qobjectTestProperty + property int scriptTest: QtTestScriptApi.scriptTestProperty + property int qobjectTest: QtTestQObjectApi.qobjectTestProperty + property int qobjectMethodTest: 2 + property int qobjectMinorVersionTest: QtTestMinorVersionQObjectApi.qobjectTestProperty + property int qobjectMajorVersionTest: QtTestMajorVersionQObjectApi.qobjectTestProperty + property int qobjectParentedTest: QtTestParentedQObjectApi.qobjectTestProperty + + Component.onCompleted: { + qobjectMethodTest = QtTestQObjectApi.qobjectTestMethod(); + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiCaching.qml b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiCaching.qml new file mode 100644 index 0000000000..9cee8c3065 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiCaching.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 + +import Qt.test 1.0 as QtTest // module API installed into existing uri +import Qt.test.scriptApi 1.0 as QtTestScriptApi // script module API installed into new uri +import Qt.test.qobjectApiParented 1.0 as QtTestParentedQObjectApi // qobject (with parent) module API installed into a new uri + +QtObject { + property int existingUriTest: QtTest.qobjectTestProperty + property int scriptTest: QtTestScriptApi.scriptTestProperty + property int qobjectParentedTest: QtTestParentedQObjectApi.qobjectTestProperty +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiMajorVersionFail.qml b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiMajorVersionFail.qml new file mode 100644 index 0000000000..eca29ab2cf --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiMajorVersionFail.qml @@ -0,0 +1,10 @@ +import QtQuick 1.0 + +// this qml file attempts to import an invalid version of a qobject module API. + +import Qt.test.qobjectApi 4.0 as QtTestMajorVersionQObjectApi // qobject module API installed into existing uri with nonexistent major version + +QtObject { + property int qobjectMajorVersionTest: QtTestMajorVersionQObjectApi.qobjectTestProperty +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiMinorVersionFail.qml b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiMinorVersionFail.qml new file mode 100644 index 0000000000..e360bd1668 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiMinorVersionFail.qml @@ -0,0 +1,10 @@ +import QtQuick 1.0 + +// this qml file attempts to import an invalid version of a qobject module API. + +import Qt.test.qobjectApi 1.2 as QtTestMinorVersionQObjectApi // qobject module API installed into existing uri with nonexistent minor version + +QtObject { + property int qobjectMinorVersionTest: QtTestMinorVersionedQObjectApi.qobjectTestProperty +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiWriting.qml b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiWriting.qml new file mode 100644 index 0000000000..90a674681c --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/moduleApiWriting.qml @@ -0,0 +1,27 @@ +import QtQuick 1.0 + +import Qt.test 1.0 as QtTest // module API installed into existing uri + +QtObject { + property int firstProperty: 1 + property int secondProperty: 2 + property int readOnlyProperty: QtTest.qobjectTestProperty + property int writableProperty: QtTest.qobjectTestWritableProperty + + onFirstPropertyChanged: { + // In this case, we want to attempt to set the module API property. + // This should fail, as the module API property is read only. + if (firstProperty != QtTest.qobjectTestProperty) { + QtTest.qobjectTestProperty = firstProperty; // should silently fail. + } + } + + onSecondPropertyChanged: { + // In this case, we want to attempt to set the module API property. + // This should succeed, as the module API property is writable. + if (secondProperty != QtTest.qobjectTestWritableProperty) { + QtTest.qobjectTestWritableProperty = secondProperty; // should succeed. + } + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/realToInt.qml b/tests/auto/declarative/qdeclarativeecmascript/data/realToInt.qml new file mode 100644 index 0000000000..cbbbbf921a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/realToInt.qml @@ -0,0 +1,11 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +MyQmlObject { + function test1() { + value = 4.2 + } + function test2() { + value = 7.9 + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/ScarceResourceSignalComponent.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/ScarceResourceSignalComponent.qml new file mode 100644 index 0000000000..fb40bdc2de --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/ScarceResourceSignalComponent.qml @@ -0,0 +1,9 @@ +import QtQuick 1.0 + +QtObject { + property variant scarceResourceCopy + property int width: 5 + signal testSignal + signal testSignal2 +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopy.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopy.qml new file mode 100644 index 0000000000..82184354d8 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopy.qml @@ -0,0 +1,15 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +// Here we import a scarce resource directly. +// The instance has a property which is a copy +// of the scarce resource, so it should not be +// detached (but we should automatically release +// the resource from our engine internal list). + +QtObject { + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + property variant scarceResourceCopy: scarceResourceProvider.scarceResource +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyFromJs.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyFromJs.qml new file mode 100644 index 0000000000..60c26ac4f2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyFromJs.qml @@ -0,0 +1,15 @@ +import QtQuick 1.0 +import Qt.test 1.0 +import "scarceResourceTest.js" as ScarceResourceProviderJs + +// Here we import a scarce resource directly, from JS module. +// It is not preserved or released manually, so it should be +// automatically released once evaluation of the binding +// is complete. + +QtObject { + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + property variant scarceResourceCopy: ScarceResourceProviderJs.importScarceResource(scarceResourceProvider) +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImport.js b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImport.js new file mode 100644 index 0000000000..bacc50dcc9 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImport.js @@ -0,0 +1,24 @@ +.import Qt.test 1.0 as JsQtTest + +// In this case, the "retn" variable will be evaluated during import. +// Since the "importScarceResource()" function depends on this variable, +// we must explicitly preserve the "retn" variable or the scarce +// resource would automatically be released after import completes +// but before the binding is evaluated. + +var component = Qt.createComponent("scarceResourceCopy.qml"); +var scarceResourceElement = component.createObject(null); +var scarceResourceProvider = scarceResourceElement.a; +var retn = scarceResourceProvider.scarceResource; +retn.preserve(); // must preserve manually or it will be released! + +function importScarceResource() { + // if called prior to calling destroyScarceResource(), + // this function should return the preserved scarce resource. + // otherwise, it should return an invalid variant. + return retn; +} + +function destroyScarceResource() { + retn.destroy(); +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImport.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImport.qml new file mode 100644 index 0000000000..0513b0840e --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImport.qml @@ -0,0 +1,18 @@ +import QtQuick 1.0 +import Qt.test 1.0 +import "scarceResourceCopyImport.js" as ScarceResourceCopyImportJs + +QtObject { + // this binding is evaluated once, prior to the resource being released + property variant scarceResourceCopy: ScarceResourceCopyImportJs.importScarceResource() + + // this code is evaluated on completion, and so copy one should be valid, copy two invalid. + property variant scarceResourceAssignedCopyOne; + property variant scarceResourceAssignedCopyTwo; + Component.onCompleted: { + scarceResourceAssignedCopyOne = ScarceResourceCopyImportJs.importScarceResource(); + ScarceResourceCopyImportJs.destroyScarceResource(); + scarceResourceAssignedCopyTwo = ScarceResourceCopyImportJs.importScarceResource(); + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportFail.js b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportFail.js new file mode 100644 index 0000000000..6c495863b5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportFail.js @@ -0,0 +1,18 @@ +.import Qt.test 1.0 as JsQtTest + +// In this case, the "retn" variable will be evaluated during import. +// Since the importScarceResource() function depends on this variable, +// because we DO NOT call "retn.preserve()", the scarce resource will +// be released after the import completes but prior to evaluation of +// any binding which calls "importScarceResource()". +// Thus, "importScarceResource()" will return a released (invalid) +// scarce resource. + +var component = Qt.createComponent("scarceResourceCopy.qml"); +var scarceResourceElement = component.createObject(null); +var scarceResourceProvider = scarceResourceElement.a; +var retn = scarceResourceProvider.scarceResource; + +function importScarceResource() { + return retn; // should return a released (invalid) scarce resource +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportFail.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportFail.qml new file mode 100644 index 0000000000..d3c4d4ed65 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportFail.qml @@ -0,0 +1,8 @@ +import QtQuick 1.0 +import Qt.test 1.0 +import "scarceResourceCopyImportFail.js" as ScarceResourceCopyImportFailJs + +QtObject { + property variant scarceResourceCopy: ScarceResourceCopyImportFailJs.importScarceResource() +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportNoBinding.js b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportNoBinding.js new file mode 100644 index 0000000000..4a5b6b4427 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportNoBinding.js @@ -0,0 +1,14 @@ +.import Qt.test 1.0 as JsQtTest + +// In this case, the "retn" variable will be evaluated during import. +// Since the importScarceResource() function depends on this variable, +// because we DO NOT call "retn.preserve()", the scarce resource will +// be released after the import completes but prior to evaluation of +// any binding which calls "importScarceResource()". +// Thus, "importScarceResource()" will return a released (invalid) +// scarce resource. + +var component = Qt.createComponent("scarceResourceCopyNoBinding.qml"); +var scarceResourceElement = component.createObject(null); +var scarceResourceProvider = scarceResourceElement.a; +var retn = scarceResourceProvider.scarceResource; diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportNoBinding.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportNoBinding.qml new file mode 100644 index 0000000000..72cd4dac8a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyImportNoBinding.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +// the following js import doesn't manually preserve or destroy any resources +import "scarceResourceCopyImportNoBinding.js" as ScarceResourceCopyImportNoBindingJs + +QtObject { + // in this case, there is an import but no binding evaluated. + // nonetheless, any resources which are not preserved, should + // be automatically released by the engine. +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyNoBinding.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyNoBinding.qml new file mode 100644 index 0000000000..681a382427 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceCopyNoBinding.qml @@ -0,0 +1,14 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +QtObject { + // this component doesn't bind any property to a scarce + // resource from the scarce resource provider, + // so the binding evaluation resource cleanup + // codepath shouldn't be activated; so if the resources + // are released, it will be due to the import evaluation + // resource cleanup codepath being activated correctly. + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceDestroyedCopy.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceDestroyedCopy.qml new file mode 100644 index 0000000000..87ceda9d7a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceDestroyedCopy.qml @@ -0,0 +1,14 @@ +import QtQuick 1.0 +import Qt.test 1.0 +import "scarceResourceTest.js" as ScarceResourceProviderJs + +// In this case, following the evaluation of the binding, +// the scarceResourceTest value should be an invalid variant, +// since the scarce resource will have been released. + +QtObject { + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + property variant scarceResourceCopy: ScarceResourceProviderJs.importReleasedScarceResource(scarceResourceProvider); +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceFunction.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceFunction.qml new file mode 100644 index 0000000000..e3e7aed9ee --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceFunction.qml @@ -0,0 +1,23 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +// Here we import a scarce resource directly. +// The copy is only assigned when retrieveScarceResource() +// is called, and so should be detached prior to that. +// The copy should be released when releaseScarceResource() +// is called, and so should be detached after that. + +QtObject { + id: root + property MyScarceResourceObject a: MyScarceResourceObject { id: scarceResourceProvider } + property variant scarceResourceCopy; + + function retrieveScarceResource() { + root.scarceResourceCopy = scarceResourceProvider.scarceResource; + } + + function releaseScarceResource() { + root.scarceResourceCopy = null; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceFunctionFail.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceFunctionFail.qml new file mode 100644 index 0000000000..b1342fea90 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceFunctionFail.qml @@ -0,0 +1,23 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +// In this example, a common syntax error will only be "caught" +// when the function is called via: +// QDeclarativeVMEMetaObject::metaCall->invokeMetaMethod() +// We would like to ensure that a useful error message is printed, +// rather than having QScriptValue::call() function fail silently. + +QtObject { + id: root + property MyScarceResourceObject a: MyScarceResourceObject { id: scarceResourceProvider } + property variant scarceResourceCopy; + + function retrieveScarceResource() { + root.scarceResourceCopy = scarceResourceProvider.scarceResource(); // common syntax error, should throw exception + } + + function releaseScarceResource() { + root.scarceResourceCopy = null; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceSignal.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceSignal.qml new file mode 100644 index 0000000000..9c920b1aa0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceSignal.qml @@ -0,0 +1,29 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +QtObject { + id: root + + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + + property ScarceResourceSignalComponent b; + b: ScarceResourceSignalComponent { + objectName: "srsc" + + onTestSignal: { + // this signal will be invoked manually in the test. + // the scarce resource should be released automatically after evaluation + // and since we don't keep a copy of it, the pixmap will be detached. + width = (scarceResourceProvider.scarceResource,10) + } + + onTestSignal2: { + // this signal will be invoked manually in the test. + // the scarce resource should be released automatically after evaluation + // but since we assign it to a property, the pixmap won't be detached. + scarceResourceCopy = scarceResourceProvider.scarceResource + } + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTest.js b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTest.js new file mode 100644 index 0000000000..c904eb3564 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTest.js @@ -0,0 +1,48 @@ +.import Qt.test 1.0 as JsQtTest + +function importScarceResource(scarceResourceProvider) { + // the scarce resource should be automatically released + // after the binding is evaluated if preserve is not + // called. + return scarceResourceProvider.scarceResource; +} + +function importPreservedScarceResource(scarceResourceProvider) { + // the scarce resource is manually preserved + // during the evaluation of the binding. + // it should not be released. + var scarceResource = scarceResourceProvider.scarceResource; + scarceResource.preserve(); + return scarceResource; +} + +function importReleasedScarceResource(scarceResourceProvider) { + // release the scarce resource during the + // evaluation of the binding. The returned + // variant will therefore be invalid. + var scarceResource = scarceResourceProvider.scarceResource; + scarceResource.destroy(); + return scarceResource; +} + +function importPreservedScarceResourceFromMultiple(scarceResourceProvider) { + // some scarce resources are manually preserved, + // some of them are manually destroyed, + // and some are automatically managed. + // We return a preserved resource + var sr1 = scarceResourceProvider.scarceResource; // preserved/destroyed. + sr1.preserve(); + var sr2 = scarceResourceProvider.scarceResource; // preserved/destroyed + sr2.preserve(); + var sr3 = scarceResourceProvider.scarceResource; // automatic. + var sr4 = scarceResourceProvider.scarceResource; // automatic and returned. + var sr5 = scarceResourceProvider.scarceResource; // destroyed + sr5.destroy(); + sr2.destroy(); + var sr6 = scarceResourceProvider.scarceResource; // destroyed + var sr7 = scarceResourceProvider.scarceResource; // automatic + sr1.destroy(); + sr6.destroy(); + return sr4; +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTest.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTest.qml new file mode 100644 index 0000000000..3775172c04 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTest.qml @@ -0,0 +1,14 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +// Here we import a scarce resource directly, and use it in a binding. +// It is not preserved or released manually, so it should be +// automatically released once evaluation of the binding +// is complete. + +QtObject { + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + property int scarceResourceTest: scarceResourceProvider.scarceResource,100 // return 100, but include the scarceResource in the binding to be evaluated. +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTestMultiple.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTestMultiple.qml new file mode 100644 index 0000000000..3139382b05 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTestMultiple.qml @@ -0,0 +1,16 @@ +import QtQuick 1.0 +import Qt.test 1.0 +import "scarceResourceTest.js" as ScarceResourceProviderJs + +// In this case, multiple scarce resource are explicity preserved +// and then explicitly destroyed, while others are automatically +// managed. Since none are manually preserved without subsequently +// being destroyed, after the evaluation of the binding the +// scarce resource should be detached. + +QtObject { + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + property int scarceResourceTest: ScarceResourceProviderJs.importPreservedScarceResourceFromMultiple(scarceResourceProvider), 100 +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTestPreserve.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTestPreserve.qml new file mode 100644 index 0000000000..d810377a51 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scarceresources/scarceResourceTestPreserve.qml @@ -0,0 +1,15 @@ +import QtQuick 1.0 +import Qt.test 1.0 +import "scarceResourceTest.js" as ScarceResourceProviderJs + +// In this case, the scarce resource is explicity preserved. +// It should not be automatically released after the evaluation +// of the binding is complete, but instead will be kept in +// memory until the JS garbage collector runs. + +QtObject { + property MyScarceResourceObject a; + a: MyScarceResourceObject { id: scarceResourceProvider } + property int scarceResourceTest: ScarceResourceProviderJs.importPreservedScarceResource(scarceResourceProvider),100 // return 100, but the resource should be preserved. +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scope.5.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scope.5.qml new file mode 100644 index 0000000000..405746c459 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scope.5.qml @@ -0,0 +1,27 @@ +import QtQuick 1.0 + +Item { + property bool test1: false; + property bool test2: false; + + property int a: 10 + + Item { + id: nested + property int a: 11 + + function mynestedfunction() { + return a; + } + } + + function myouterfunction() { + return a; + } + + Component.onCompleted: { + test1 = (myouterfunction() == 10); + test2 = (nested.mynestedfunction() == 11); + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scope.6.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scope.6.qml new file mode 100644 index 0000000000..1c81e4e945 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scope.6.qml @@ -0,0 +1,10 @@ +import QtQuick 1.0 + +Item { + id: me + property bool test: nested.runtest(me); + + Scope6Nested { + id: nested + } +} |