diff options
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/data/propertyOverride.qml')
-rw-r--r-- | tests/auto/qml/qqmlecmascript/data/propertyOverride.qml | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlecmascript/data/propertyOverride.qml b/tests/auto/qml/qqmlecmascript/data/propertyOverride.qml new file mode 100644 index 0000000000..bd3fed479b --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/propertyOverride.qml @@ -0,0 +1,104 @@ +import QtQuick 2.0 + +Item { + property bool success: false + + BaseComponent2 { + id: foo + + // Override the properties of the base component + property string directProperty: 'hello' + function getDirectFromExtension() { return directProperty } + + property alias extensionDirectAlias: foo.directProperty + + property Text objectProperty: Text { width: 666 } + + property int optimizedBoundProperty: objectProperty.width + function getOptimizedBoundFromExtension() { return optimizedBoundProperty } + + property alias extensionOptimizedBoundAlias: foo.optimizedBoundProperty + + property int unoptimizedBoundProperty: if (true) objectProperty.width + function getUnoptimizedBoundFromExtension() { return unoptimizedBoundProperty } + + property alias extensionUnoptimizedBoundAlias: foo.unoptimizedBoundProperty + + property string extensionDirectPropertyChangedValue: '' + onDirectPropertyChanged: extensionDirectPropertyChangedValue = directProperty + + property int extensionOptimizedBoundPropertyChangedValue: 0 + onOptimizedBoundPropertyChanged: extensionOptimizedBoundPropertyChangedValue = optimizedBoundProperty + + property int extensionUnoptimizedBoundPropertyChangedValue: 0 + onUnoptimizedBoundPropertyChanged: extensionUnoptimizedBoundPropertyChangedValue = unoptimizedBoundProperty + + function setDirectFromExtension(n) { directProperty = n } + function setBoundFromExtension(n) { objectProperty.width = n } + } + + Component.onCompleted: { + // In the base component, overriding should not affect resolution + if (foo.getDirectFromBase() != 333) return + if (foo.getOptimizedBoundFromBase() != 333) return + if (foo.getUnoptimizedBoundFromBase() != 333) return + + // In the extension component overriding should occur + if (foo.getDirectFromExtension() != 'hello') return + if (foo.getOptimizedBoundFromExtension() != 666) return + if (foo.getUnoptimizedBoundFromExtension() != 666) return + + // External access should yield extension component scoping + if (foo.directProperty != 'hello') return + if (foo.optimizedBoundProperty != 666) return + if (foo.unoptimizedBoundProperty != 666) return + + // Verify alias properties bind to the correct target + if (foo.baseDirectAlias != 333) return + if (foo.baseOptimizedBoundAlias != 333) return + if (foo.baseUnoptimizedBoundAlias != 333) return + + if (foo.extensionDirectAlias != 'hello') return + if (foo.extensionOptimizedBoundAlias != 666) return + if (foo.extensionUnoptimizedBoundAlias != 666) return + + foo.baseDirectPropertyChangedValue = 0 + foo.baseOptimizedBoundPropertyChangedValue = 0 + foo.baseUnoptimizedBoundPropertyChangedValue = 0 + foo.extensionDirectPropertyChangedValue = '' + foo.extensionOptimizedBoundPropertyChangedValue = 0 + foo.extensionUnoptimizedBoundPropertyChangedValue = 0 + + // Verify that the correct onChanged signal is emitted + foo.setDirectFromBase(999) + if (foo.getDirectFromBase() != 999) return + if (foo.baseDirectPropertyChangedValue != 999) return + if (foo.extensionDirectPropertyChangedValue != '') return + + foo.setDirectFromExtension('goodbye') + if (foo.getDirectFromExtension() != 'goodbye') return + if (foo.extensionDirectPropertyChangedValue != 'goodbye') return + if (foo.baseDirectPropertyChangedValue != 999) return + + foo.setBoundFromBase(999) + if (foo.getOptimizedBoundFromBase() != 999) return + if (foo.getUnoptimizedBoundFromBase() != 999) return + if (foo.baseOptimizedBoundPropertyChangedValue != 999) return + if (foo.baseUnoptimizedBoundPropertyChangedValue != 999) return + if (foo.extensionOptimizedBoundPropertyChangedValue != 0) return + if (foo.extensionUnoptimizedBoundPropertyChangedValue != 0) return + + foo.baseOptimizedBoundPropertyChangedValue = 0 + foo.baseUnoptimizedBoundPropertyChangedValue = 0 + + foo.setBoundFromExtension(123) + if (foo.getOptimizedBoundFromExtension() != 123) return + if (foo.getUnoptimizedBoundFromExtension() != 123) return + if (foo.extensionOptimizedBoundPropertyChangedValue != 123) return + if (foo.extensionUnoptimizedBoundPropertyChangedValue != 123) return + if (foo.baseOptimizedBoundPropertyChangedValue != 0) return + if (foo.baseUnoptimizedBoundPropertyChangedValue != 0) return + + success = true + } +} |