blob: bd3fed479b15ba0887959819e1fd1b74814e54e7 [file] [log] [blame]
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
}
}