diff options
author | Chris Adams <christopher.adams@nokia.com> | 2012-07-25 11:03:35 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-16 06:42:33 +0200 |
commit | 4317c442fd492121e2fc037a39b40653bbc34294 (patch) | |
tree | a3774e09b4f7184316b445886486a6eb77346245 /tests/auto/qml/qqmllanguage/data | |
parent | ee0a9ce6518f4423dec83102293dcc5b9c0d4c7f (diff) |
Fix crash in signal change notification override
Manual overrides of automatically generated property change
notification signals can cause crashes. They also don't work
properly in the situations where they don't crash. This patch
ensures that it is now a compile error to attempt to override a
signal with a manual signal or slot.
Note that this includes signals defined in superclasses.
Task-number: QTBUG-26723
Task-number: QTBUG-26818
Change-Id: I4ecf448ce9de5d97526606126991e280debea2d6
Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
Diffstat (limited to 'tests/auto/qml/qqmllanguage/data')
12 files changed, 181 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/data/OverrideSignalComponent.qml b/tests/auto/qml/qqmllanguage/data/OverrideSignalComponent.qml new file mode 100644 index 0000000000..f984e70fc5 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/OverrideSignalComponent.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +Item { + property int test: 10 +} diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.1.errors.txt b/tests/auto/qml/qqmllanguage/data/overrideSignal.1.errors.txt new file mode 100644 index 0000000000..ba8945b87c --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.1.errors.txt @@ -0,0 +1 @@ +5:12:Duplicate signal name: invalid override of property change signal or superclass signal diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.1.qml b/tests/auto/qml/qqmllanguage/data/overrideSignal.1.qml new file mode 100644 index 0000000000..d6328fa57d --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.1.qml @@ -0,0 +1,26 @@ +import QtQuick 2.0 + +Item { + property int test: 10 + signal testChanged // manual signal override, should not be valid. + + Component.onCompleted: test = 20 + + // due to an unrelated bug (QTBUG-26818), a certain + // number of properties are needed to exist before the + // crash condition is hit, currently. + property int a + property int b + property int c + property int d + property int e + property int f + property int g + property int h + property int i + property int j + property int k + property int l + property int m + property int n +} diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.2.errors.txt b/tests/auto/qml/qqmllanguage/data/overrideSignal.2.errors.txt new file mode 100644 index 0000000000..bc1490759f --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.2.errors.txt @@ -0,0 +1 @@ +5:14:Duplicate method name: invalid override of property change signal or superclass signal diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.2.qml b/tests/auto/qml/qqmllanguage/data/overrideSignal.2.qml new file mode 100644 index 0000000000..3b38d0074b --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.2.qml @@ -0,0 +1,26 @@ +import QtQuick 2.0 + +Item { + property int test: 10 + function testChanged() { console.log("function override"); } // manual function override, should not be valid. + + Component.onCompleted: test = 20 + + // due to an unrelated bug (QTBUG-26818), a certain + // number of properties are needed to exist before the + // crash condition is hit, currently. + property int a + property int b + property int c + property int d + property int e + property int f + property int g + property int h + property int i + property int j + property int k + property int l + property int m + property int n +} diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.3.qml b/tests/auto/qml/qqmllanguage/data/overrideSignal.3.qml new file mode 100644 index 0000000000..779724a3cc --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.3.qml @@ -0,0 +1,32 @@ +import QtQuick 2.0 + +Item { + property bool success: false + property int test: 10 + property int testChanged: 15 // property override is fine. + + onTestChanged: if (test == 20) success = true; + + Component.onCompleted: { + test = 20; + testChanged = 25; + } + + // due to an unrelated bug (QTBUG-26818), a certain + // number of properties are needed to exist before the + // crash condition is hit, currently. + property int a + property int b + property int c + property int d + property int e + property int f + property int g + property int h + property int i + property int j + property int k + property int l + property int m + property int n +} diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.4.errors.txt b/tests/auto/qml/qqmllanguage/data/overrideSignal.4.errors.txt new file mode 100644 index 0000000000..e2e235cc11 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.4.errors.txt @@ -0,0 +1 @@ +6:12:Duplicate signal name: invalid override of property change signal or superclass signal diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.4.qml b/tests/auto/qml/qqmllanguage/data/overrideSignal.4.qml new file mode 100644 index 0000000000..2f5abf3c0e --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.4.qml @@ -0,0 +1,32 @@ +import QtQuick 2.0 + +Item { + property bool success: false + property alias test: child.test + signal testChanged // manual signal override, should not be valid. + + Component.onCompleted: test = 20; + + Item { + id: child + property int test: 10 + } + + // due to an unrelated bug (QTBUG-26818), a certain + // number of properties are needed to exist before the + // crash condition is hit, currently. + property int a + property int b + property int c + property int d + property int e + property int f + property int g + property int h + property int i + property int j + property int k + property int l + property int m + property int n +} diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.5.errors.txt b/tests/auto/qml/qqmllanguage/data/overrideSignal.5.errors.txt new file mode 100644 index 0000000000..e2e235cc11 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.5.errors.txt @@ -0,0 +1 @@ +6:12:Duplicate signal name: invalid override of property change signal or superclass signal diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.5.qml b/tests/auto/qml/qqmllanguage/data/overrideSignal.5.qml new file mode 100644 index 0000000000..fd393f6211 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.5.qml @@ -0,0 +1,32 @@ +import QtQuick 2.0 + +OverrideSignalComponent { + property bool success: (testChangedCount == 1) + property int testChangedCount: 0 + signal testChanged // override change signal from super + + Component.onCompleted: { + test = 20; + testChanged(); + } + + onTestChanged: testChangedCount = 1; // override the signal, change handler won't be called. + + // due to an unrelated bug (QTBUG-26818), a certain + // number of properties are needed to exist before the + // crash condition is hit, currently. + property int a + property int b + property int c + property int d + property int e + property int f + property int g + property int h + property int i + property int j + property int k + property int l + property int m + property int n +} diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.6.errors.txt b/tests/auto/qml/qqmllanguage/data/overrideSignal.6.errors.txt new file mode 100644 index 0000000000..da451917f5 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.6.errors.txt @@ -0,0 +1 @@ +4:12:Duplicate signal name: invalid override of property change signal or superclass signal diff --git a/tests/auto/qml/qqmllanguage/data/overrideSignal.6.qml b/tests/auto/qml/qqmllanguage/data/overrideSignal.6.qml new file mode 100644 index 0000000000..69e56bf7fe --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/overrideSignal.6.qml @@ -0,0 +1,23 @@ +import QtQuick 2.0 + +OverrideSignalComponent { + signal objectNameChanged // manual signal override of builtin signal, invalid. + + // due to an unrelated bug (QTBUG-26818), a certain + // number of properties are needed to exist before the + // crash condition is hit, currently. + property int a + property int b + property int c + property int d + property int e + property int f + property int g + property int h + property int i + property int j + property int k + property int l + property int m + property int n +} |