aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-04-30 16:51:49 +0200
committerGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-05-04 10:49:01 +0000
commit029d119f4c0e13afbcbd5a0724af7d158acaf8e2 (patch)
tree2f9b8fd13b61c4a462dca8422807bb021a2e5bc4 /tests/auto
parent0d3c6767c1117980f48edbd3f4737a8f37471a8f (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.qml56
-rw-r--r--tests/auto/controls/data/tst_button.qml20
-rw-r--r--tests/auto/controls/data/tst_checkbox.qml10
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"]