aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/testlib/SignalSpy.qml
diff options
context:
space:
mode:
authorCaroline Chao <caroline.chao@digia.com>2014-01-08 13:55:37 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-09 23:33:18 +0100
commitf5c6987ef8f09873dcfc47b5d4dbd532da660b2b (patch)
treedca1181b4860ff4504b3138e092f7a2cb6fe6476 /src/imports/testlib/SignalSpy.qml
parent7701b58ad06f9e99d291e0e3468096dc3ab4dd00 (diff)
Doc: QtTest - Fix documentation for TestCase and SignalSpy
The property/methods documentation needs to be available in the components qml file. Thus we now import those components from the qml files directly instead of using fake header files. Rename the Qt Quick Test page to Qt Quick Test Qml Types to be consistent with the other submodules. Task-number: QTBUG-33587 Change-Id: Ifb1df8e7d15f2e23b4b4268e5df138934e62fc42 Reviewed-by: Topi Reiniƶ <topi.reinio@digia.com> Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com> Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'src/imports/testlib/SignalSpy.qml')
-rw-r--r--src/imports/testlib/SignalSpy.qml129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/imports/testlib/SignalSpy.qml b/src/imports/testlib/SignalSpy.qml
index 5b05778c5d..8318f156a0 100644
--- a/src/imports/testlib/SignalSpy.qml
+++ b/src/imports/testlib/SignalSpy.qml
@@ -42,6 +42,43 @@
import QtQuick 2.0
import QtTest 1.0
+/*!
+ \qmltype SignalSpy
+ \inqmlmodule QtTest
+ \brief Enables introspection of signal emission
+ \since 4.8
+ \ingroup qtquicktest
+
+ In the following example, a SignalSpy is installed to watch the
+ "clicked" signal on a user-defined Button type. When the signal
+ is emitted, the \l count property on the spy will be increased.
+
+ \code
+ Button {
+ id: button
+ SignalSpy {
+ id: spy
+ target: button
+ signalName: "clicked"
+ }
+ TestCase {
+ name: "ButtonClick"
+ function test_click() {
+ compare(spy.count, 0)
+ button.clicked();
+ compare(spy.count, 1)
+ }
+ }
+ }
+ \endcode
+
+ The above style of test is suitable for signals that are emitted
+ synchronously. For asynchronous signals, the wait() method can be
+ used to block the test until the signal occurs (or a timeout expires).
+
+ \sa {QtTest::TestCase}{TestCase}, {Qt Quick Test Reference Documentation}
+*/
+
Item {
id: spy
visible: false
@@ -50,18 +87,101 @@ Item {
id: util
}
// Public API.
+ /*!
+ \qmlproperty object SignalSpy::target
+
+ This property defines the target object that will be used to
+ listen for emissions of the \l signalName signal.
+
+ \sa signalName, count
+ */
property var target: null
+ /*!
+ \qmlproperty string SignalSpy::signalName
+
+ This property defines the name of the signal on \l target to
+ listen for.
+
+ \sa target, count
+ */
property string signalName: ""
+ /*!
+ \qmlproperty int SignalSpy::count
+
+ This property defines the number of times that \l signalName has
+ been emitted from \l target since the last call to clear().
+
+ \sa target, signalName, clear()
+ \readonly
+ */
readonly property alias count: spy.qtest_count
+ /*!
+ \qmlproperty bool SignalSpy::valid
+
+ This property defines the current signal connection status. It will be true when the \l signalName of the \l target is connected successfully, otherwise it will be false.
+
+ \sa count, target, signalName, clear()
+ \readonly
+ */
readonly property alias valid:spy.qtest_valid
+ /*!
+ \qmlproperty list SignalSpy::signalArguments
+
+ This property holds a list of emitted signal arguments. Each emission of the signal will append one item to the list, containing the arguments of the signal.
+ When connecting to a new \l target or new \l signalName or calling the \l clear() method, the \l signalArguments will be reset to empty.
+
+ \sa signalName, clear()
+ \readonly
+ */
readonly property alias signalArguments:spy.qtest_signalArguments
+ /*!
+ \qmlmethod SignalSpy::clear()
+
+ Clears \l count to 0, resets \l valid to false and clears the \l signalArguments to empty.
+
+ \sa count, wait()
+ */
function clear() {
qtest_count = 0
qtest_expectedCount = 0
qtest_signalArguments = []
}
+ /*!
+ \qmlmethod SignalSpy::wait(timeout = 5000)
+
+ Waits for the signal \l signalName on \l target to be emitted,
+ for up to \a timeout milliseconds. The test case will fail if
+ the signal is not emitted.
+
+ \code
+ SignalSpy {
+ id: spy
+ target: button
+ signalName: "clicked"
+ }
+
+ function test_async_click() {
+ ...
+ // do something that will cause clicked() to be emitted
+ ...
+ spy.wait()
+ compare(spy.count, 1)
+ }
+ \endcode
+
+ There are two possible scenarios: the signal has already been
+ emitted when wait() is called, or the signal has not yet been
+ emitted. The wait() function handles the first scenario by immediately
+ returning if the signal has already occurred.
+
+ The clear() method can be used to discard information about signals
+ that have already occurred to synchronize wait() with future signal
+ emissions.
+
+ \sa clear(), TestCase::tryCompare()
+ */
function wait(timeout) {
if (timeout === undefined)
timeout = 5000
@@ -87,13 +207,21 @@ Item {
qtest_update()
}
+ /*! \internal */
property var qtest_prevTarget: null
+ /*! \internal */
property string qtest_prevSignalName: ""
+ /*! \internal */
property int qtest_expectedCount: 0
+ /*! \internal */
property var qtest_signalArguments:[]
+ /*! \internal */
property int qtest_count: 0
+ /*! \internal */
property bool qtest_valid:false
+ /*! \internal */
+ /*! \internal */
function qtest_update() {
if (qtest_prevTarget != null) {
var prevFunc = qtest_prevTarget[qtest_prevSignalName]
@@ -119,6 +247,7 @@ Item {
}
}
+ /*! \internal */
function qtest_activated() {
++qtest_count
spy.qtest_signalArguments[spy.qtest_signalArguments.length] = arguments