diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2022-10-06 16:54:14 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2022-10-16 08:36:03 +0200 |
commit | 0f94430a0fba5509d2d756832cb44a266d1d2e86 (patch) | |
tree | cbfa4610c61daf1cd545c96b1437fce8ae1d6ae2 /tests/auto/testlib/selftests | |
parent | 5caf80875067aab69c83f84e40d84e5307b24b01 (diff) |
testlib: make it possible to test double-clicks with discrete events
The timestamp will no longer be incremented by 500ms after a mouse
release if the delay has been explicitly specified.
The default delay is 1 ms since f5010c49a37729375e37e6fe8cea60dd4b880d83
but the running timestamp was unconditionally post-incremented by 500ms
after every mouse release, to prevent double-clicks, which were always
deemed as unintended (because we have a mouseDClick function for that).
Now, we do that 500ms increment only if the user has not provided a
delay value in the function argument at all. We have often found it
useful in our own tests to generate double-clicks "the hard way", by
sending indivdual events, so as to be able to check state in some target
object at each step, as shown in the new snippet.
[ChangeLog][QtTest] QTest::mouseRelease() and mouseClick() can now be
used to test double-clicks, by specifying a realistic timestamp delay.
Fixes: QTBUG-102441
Change-Id: I8e8d242061f79efb4c6e02638645e03661a9cd92
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests/auto/testlib/selftests')
7 files changed, 68 insertions, 6 deletions
diff --git a/tests/auto/testlib/selftests/expected_mouse.junitxml b/tests/auto/testlib/selftests/expected_mouse.junitxml index 0664ab3a34..8b0b7b2da5 100644 --- a/tests/auto/testlib/selftests/expected_mouse.junitxml +++ b/tests/auto/testlib/selftests/expected_mouse.junitxml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<testsuite name="tst_Mouse" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="13" failures="0" errors="0" skipped="3" time="@TEST_DURATION@"> +<testsuite name="tst_Mouse" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="14" failures="0" errors="0" skipped="3" time="@TEST_DURATION@"> <properties> <property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/> <property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/> @@ -23,5 +23,6 @@ <testcase name="deterministicEvents(first-run-false)" classname="tst_Mouse" time="@TEST_DURATION@"> <skipped message="Not implemented!"/> </testcase> + <testcase name="doubleClick" classname="tst_Mouse" time="@TEST_DURATION@"/> <testcase name="cleanupTestCase" classname="tst_Mouse" time="@TEST_DURATION@"/> </testsuite> diff --git a/tests/auto/testlib/selftests/expected_mouse.lightxml b/tests/auto/testlib/selftests/expected_mouse.lightxml index ed125d9b68..fd6b9a8218 100644 --- a/tests/auto/testlib/selftests/expected_mouse.lightxml +++ b/tests/auto/testlib/selftests/expected_mouse.lightxml @@ -54,6 +54,10 @@ </Incident> <Duration msecs="0"/> </TestFunction> + <TestFunction name="doubleClick"> + <Incident type="pass" file="" line="0" /> + <Duration msecs="0"/> + </TestFunction> <TestFunction name="cleanupTestCase"> <Incident type="pass" file="" line="0" /> <Duration msecs="0"/> diff --git a/tests/auto/testlib/selftests/expected_mouse.tap b/tests/auto/testlib/selftests/expected_mouse.tap index a91b5b4da2..a2ba671bf4 100644 --- a/tests/auto/testlib/selftests/expected_mouse.tap +++ b/tests/auto/testlib/selftests/expected_mouse.tap @@ -12,8 +12,9 @@ ok 9 - stateHandlingPart1(dummy-2) ok 10 - stateHandlingPart2() # SKIP Not implemented beyond this point! ok 11 - deterministicEvents(first-run-true) # SKIP Not implemented! ok 12 - deterministicEvents(first-run-false) # SKIP Not implemented! -ok 13 - cleanupTestCase() -1..13 -# tests 13 -# pass 10 +ok 13 - doubleClick() +ok 14 - cleanupTestCase() +1..14 +# tests 14 +# pass 11 # fail 0 diff --git a/tests/auto/testlib/selftests/expected_mouse.teamcity b/tests/auto/testlib/selftests/expected_mouse.teamcity index 371bd49626..44c03ce6d7 100644 --- a/tests/auto/testlib/selftests/expected_mouse.teamcity +++ b/tests/auto/testlib/selftests/expected_mouse.teamcity @@ -26,6 +26,8 @@ ##teamcity[testStarted name='deterministicEvents(first-run-false)' flowId='tst_Mouse'] ##teamcity[testIgnored name='deterministicEvents(first-run-false)' message='Not implemented! |[Loc: qtbase/tests/auto/testlib/selftests/mouse/tst_mouse.cpp(0)|]' flowId='tst_Mouse'] ##teamcity[testFinished name='deterministicEvents(first-run-false)' flowId='tst_Mouse'] +##teamcity[testStarted name='doubleClick()' flowId='tst_Mouse'] +##teamcity[testFinished name='doubleClick()' flowId='tst_Mouse'] ##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Mouse'] ##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Mouse'] ##teamcity[testSuiteFinished name='tst_Mouse' flowId='tst_Mouse'] diff --git a/tests/auto/testlib/selftests/expected_mouse.txt b/tests/auto/testlib/selftests/expected_mouse.txt index 660b4f47a4..9fe927062d 100644 --- a/tests/auto/testlib/selftests/expected_mouse.txt +++ b/tests/auto/testlib/selftests/expected_mouse.txt @@ -15,6 +15,7 @@ SKIP : tst_Mouse::deterministicEvents(first-run-true) Not implemented! Loc: [qtbase/tests/auto/testlib/selftests/mouse/tst_mouse.cpp(0)] SKIP : tst_Mouse::deterministicEvents(first-run-false) Not implemented! Loc: [qtbase/tests/auto/testlib/selftests/mouse/tst_mouse.cpp(0)] +PASS : tst_Mouse::doubleClick() PASS : tst_Mouse::cleanupTestCase() -Totals: 10 passed, 0 failed, 3 skipped, 0 blacklisted, 0ms +Totals: 11 passed, 0 failed, 3 skipped, 0 blacklisted, 0ms ********* Finished testing of tst_Mouse ********* diff --git a/tests/auto/testlib/selftests/expected_mouse.xml b/tests/auto/testlib/selftests/expected_mouse.xml index 26bde614ce..b532534049 100644 --- a/tests/auto/testlib/selftests/expected_mouse.xml +++ b/tests/auto/testlib/selftests/expected_mouse.xml @@ -56,6 +56,10 @@ </Incident> <Duration msecs="0"/> </TestFunction> + <TestFunction name="doubleClick"> + <Incident type="pass" file="" line="0" /> + <Duration msecs="0"/> + </TestFunction> <TestFunction name="cleanupTestCase"> <Incident type="pass" file="" line="0" /> <Duration msecs="0"/> diff --git a/tests/auto/testlib/selftests/mouse/tst_mouse.cpp b/tests/auto/testlib/selftests/mouse/tst_mouse.cpp index b2e9c61baf..c9793da553 100644 --- a/tests/auto/testlib/selftests/mouse/tst_mouse.cpp +++ b/tests/auto/testlib/selftests/mouse/tst_mouse.cpp @@ -24,6 +24,7 @@ private slots: void stateHandlingPart2(); void deterministicEvents_data(); void deterministicEvents(); + void doubleClick(); }; class MouseWindow : public QWindow @@ -251,5 +252,53 @@ void tst_Mouse::deterministicEvents() QCOMPARE(w.moveCount, 1); } +void tst_Mouse::doubleClick() +{ + MouseWindow w; + w.show(); + w.setGeometry(100, 100, 200, 200); + QVERIFY(QTest::qWaitForWindowActive(&w)); + + // click + QPoint point(10, 10); + QCOMPARE(w.pressCount, 0); + QTest::mousePress(&w, Qt::LeftButton, { }, point); + QCOMPARE(w.pressCount, 1); + // give a delay of 10ms + auto ts = w.lastTimeStamp; + QTest::mouseRelease(&w, Qt::LeftButton, { }, point, 10); + QCOMPARE(w.lastTimeStamp, ts + 10); + QCOMPARE(w.doubleClickCount, 0); + + // click again within a short time to generate double-click + QTest::mousePress(&w, Qt::LeftButton, { }, point, 10); + QCOMPARE(w.pressCount, 2); + QCOMPARE(w.lastTimeStamp, ts + 20); + // this time, let some virtual time elapse, because we're going to test double-click again afterwards + QTest::mouseRelease(&w, Qt::LeftButton, { }, point); + QCOMPARE_GT(w.lastTimeStamp, ts + 20); + QCOMPARE(w.doubleClickCount, 1); + + // use the mouseClick function to generate another double-click + ts = w.lastTimeStamp; + QTest::mouseClick(&w, Qt::LeftButton, {}, point, 10); + QCOMPARE_GE(w.lastTimeStamp, ts + 500); // because the last release had a default delay + QTest::mouseClick(&w, Qt::LeftButton, {}, point); + QCOMPARE(w.doubleClickCount, 2); + + // use the mouseDClick function to generate another double-click + ts = w.lastTimeStamp; + QTest::mouseDClick(&w, Qt::LeftButton, {}, point); + QCOMPARE_GE(w.lastTimeStamp, ts + 500); // because the last release had a default delay + QCOMPARE(w.doubleClickCount, 3); + + // use the mouseClick function with default delay to avoid double-click + ts = w.lastTimeStamp; + QTest::mouseClick(&w, Qt::LeftButton, {}, point); + QCOMPARE_GE(w.lastTimeStamp, ts + 500); // because the last release had a default delay + QTest::mouseClick(&w, Qt::LeftButton, {}, point); + QCOMPARE(w.doubleClickCount, 3); +} + QTEST_MAIN(tst_Mouse) #include "tst_mouse.moc" |