diff options
author | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-04-30 16:51:49 +0200 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-05-04 10:49:01 +0000 |
commit | 029d119f4c0e13afbcbd5a0724af7d158acaf8e2 (patch) | |
tree | 2f9b8fd13b61c4a462dca8422807bb021a2e5bc4 /tests/auto | |
parent | 0d3c6767c1117980f48edbd3f4737a8f37471a8f (diff) |
ControlSpy: Accept a list of signals to spy on
This API is cleaner than having to connect to each signal
handler namually.
We solve the 'pressed' signal problem by connecting to the
other signal accessor, namely 'onPressed'. And we do so for
all signals.
We also lay foundation to capture the signal parameters as
each signal is emitted. What we may do with those values is
not clear yet.
Auto-tests updated accordingly.
Change-Id: Ieda96a43072ca7dff2b183e07f6f67aa49c8cf5d
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/controls/data/ControlSpy.qml | 56 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_button.qml | 20 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_checkbox.qml | 10 |
3 files changed, 54 insertions, 32 deletions
diff --git a/tests/auto/controls/data/ControlSpy.qml b/tests/auto/controls/data/ControlSpy.qml index 23601707..45d603b8 100644 --- a/tests/auto/controls/data/ControlSpy.qml +++ b/tests/auto/controls/data/ControlSpy.qml @@ -42,18 +42,46 @@ import QtQuick 2.5 QtObject { property QtObject target: null + property var signals: [] property var expectedSequence: [] property int sequenceIndex: 0 property bool sequenceFailure: false - readonly property bool success: sequenceIndex === expectedSequence.length - && !sequenceFailure + readonly property bool success: !sequenceFailure && sequenceIndex === expectedSequence.length function reset() { sequenceIndex = 0 sequenceFailure = false } - function checkSignal(signalName) { + property QtObject __oldTarget: null + property var __connections: [] + + onExpectedSequenceChanged: reset() + onTargetChanged: __setup() + onSignalsChanged: __setup() + + function __setup() { + if (__oldTarget) { + __connections.forEach(function (cx) { + __oldTarget[cx.name].disconnect(cx.method) + }) + __oldTarget = null + } + + __connections = [] + + if (!!target && !!signals && signals.length > 0) { + signals.forEach(function (signalName) { + var handlerName = "on" + signalName.substr(0, 1).toUpperCase() + signalName.substr(1) + var method = function() { __checkSignal(signalName, arguments) } + target[handlerName].connect(method) + __connections.push({ "name": handlerName, "method": method }) + }) + __oldTarget = target + } + } + + function __checkSignal(signalName, signalArgs) { if (sequenceFailure) return; @@ -70,28 +98,30 @@ QtObject { return } } else if (typeof expectedSignal === "object") { - expectedSignal = expectedSignal[0] + var expectedSignalData = expectedSignal + expectedSignal = expectedSignalData[0] if (expectedSignal === signalName) { - var expectedValues = expectedSequence[sequenceIndex][1] - for (var p in expectedValues) + var expectedValues = expectedSignalData[1] + for (var p in expectedValues) { if (target[p] != expectedValues[p]) { console.warn("ControlSpy: Value mismatch for property '" + p + "' after '" + signalName + "' signal." + - "\n Actual : " + target[p] + - "\n Expected : " + expectedValues[p] + - "\n Sequence index: " + sequenceIndex) + __mismatchValuesFormat(target[p], expectedValues[p])) sequenceFailure = true return } + } sequenceIndex++ return } } console.warn("ControlSpy: Received unexpected signal." + - "\n Actual : " + signalName + - "\n Expected : " + expectedSignal + - "\n Sequence index: " + sequenceIndex) + __mismatchValuesFormat(signalName, expectedSignal)) sequenceFailure = true } - onExpectedSequenceChanged: reset() + function __mismatchValuesFormat(actual, expected) { + return "\n Actual : " + actual + + "\n Expected : " + expected + + "\n Sequence index: " + sequenceIndex + } } diff --git a/tests/auto/controls/data/tst_button.qml b/tests/auto/controls/data/tst_button.qml index 865b495b..ce3ae6c5 100644 --- a/tests/auto/controls/data/tst_button.qml +++ b/tests/auto/controls/data/tst_button.qml @@ -56,15 +56,9 @@ TestCase { id: control property ControlSpy spy: ControlSpy { - id: spy target: control + signals: ["pressed", "released", "canceled", "clicked", "pressedChanged"] } - - onPressed: spy.checkSignal("pressed") - onReleased: spy.checkSignal("released") - onCanceled: spy.checkSignal("canceled") - onClicked: spy.checkSignal("clicked") - onPressedChanged: spy.checkSignal("pressedChanged") } } @@ -102,7 +96,9 @@ TestCase { compare(control.pressed, true) verify(control.spy.success) - control.spy.expectedSequence = [["pressedChanged", { "pressed": false }], "released", "clicked"] + control.spy.expectedSequence = [["pressedChanged", { "pressed": false }], + "released", + "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) compare(control.pressed, false) verify(control.spy.success) @@ -142,8 +138,11 @@ TestCase { verify(control.activeFocus) // click - control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed", - ["pressedChanged", { "pressed": false }], "released", "clicked"] + control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], + "pressed", + ["pressedChanged", { "pressed": false }], + "released", + "clicked"] keyClick(Qt.Key_Space) verify(control.spy.success) @@ -151,6 +150,7 @@ TestCase { control.spy.expectedSequence = [] var keys = [Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab] for (var i = 0; i < keys.length; ++i) { + control.spy.reset() keyClick(keys[i]) verify(control.spy.success) } diff --git a/tests/auto/controls/data/tst_checkbox.qml b/tests/auto/controls/data/tst_checkbox.qml index 734f5464..e3414595 100644 --- a/tests/auto/controls/data/tst_checkbox.qml +++ b/tests/auto/controls/data/tst_checkbox.qml @@ -56,16 +56,9 @@ TestCase { id: control property ControlSpy spy: ControlSpy { - id: spy target: control + signals: ["pressed", "released", "canceled", "clicked", "pressedChanged", "checkedChanged"] } - - onPressed: spy.checkSignal("pressed") - onReleased: spy.checkSignal("released") - onCanceled: spy.checkSignal("canceled") - onClicked: spy.checkSignal("clicked") - onPressedChanged: spy.checkSignal("pressedChanged") - onCheckedChanged: spy.checkSignal("checkedChanged") } } @@ -147,7 +140,6 @@ TestCase { function test_mouse() { var control = checkBox.createObject(testCase) - // check control.spy.expectedSequence = [["pressedChanged", { "pressed": true, "checked": false }], "pressed"] |