aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmltest/quicktest.cpp
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2023-04-17 18:50:39 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2023-04-18 05:44:55 +0200
commit9c2ecfc6c06f1defa512e8a8b49d12dd37a313dd (patch)
treee32ac4309ce43bca02e8c54527598ec8dc2088d9 /src/qmltest/quicktest.cpp
parent645aaa25b17ad3437e63877576ef7dac7966a934 (diff)
Document that running a Quick Test always show a window
After 47490648b14938049ddf84c3f665619c1117241c, test functions are executed asynchronously through a scheduler. This makes the entire logic for detecting whether a test case completed during setSource() obsolete, and always results in a window being shown. That is as such fine, Qt Quick Test always required the GUI and Quick specific Qt modules and platform plugins to be available (so it wasn't easily possible to run those tests on a server without any display infrastructure). But we can now remove the logic from the startup function. Add a note to the documentation that running tests always shows a UI, and how to avoid it using the offscreen platform plugin. Pick-to: 6.5 Fixes: QTBUG-110592 Change-Id: Ie69b04e3fd4044db2fc7f0fc3ca44947a3dddfce Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qmltest/quicktest.cpp')
-rw-r--r--src/qmltest/quicktest.cpp58
1 files changed, 26 insertions, 32 deletions
diff --git a/src/qmltest/quicktest.cpp b/src/qmltest/quicktest.cpp
index 0ecb48dd10..c333f7fe1b 100644
--- a/src/qmltest/quicktest.cpp
+++ b/src/qmltest/quicktest.cpp
@@ -616,39 +616,33 @@ int quick_test_main_with_setup(int argc, char **argv, const char *name, const ch
handleCompileErrors(fi, view.errors(), view.engine(), &view);
continue;
}
- if (!QTestRootObject::instance()->hasQuit) {
- // If the test already quit, then it was performed
- // synchronously during setSource(). Otherwise it is
- // an asynchronous test and we need to show the window
- // and wait for the first frame to be rendered
- // and then wait for quit indication.
- view.setFramePosition(QPoint(50, 50));
- if (view.size().isEmpty()) { // Avoid hangs with empty windows.
- view.resize(200, 200);
- }
- view.show();
- if (!QTest::qWaitForWindowExposed(&view)) {
- qWarning().nospace()
- << "Test '" << QDir::toNativeSeparators(path) << "' window not exposed after show().";
- }
- view.requestActivate();
- if (!QTest::qWaitForWindowActive(&view)) {
- qWarning().nospace()
- << "Test '" << QDir::toNativeSeparators(path) << "' window not active after requestActivate().";
- }
- if (view.isExposed()) {
- // Defer property update until event loop has started
- QTimer::singleShot(0, []() {
- QTestRootObject::instance()->setWindowShown(true);
- });
- } else {
- qWarning().nospace()
- << "Test '" << QDir::toNativeSeparators(path) << "' window was never exposed! "
- << "If the test case was expecting windowShown, it will hang.";
- }
- if (!QTestRootObject::instance()->hasQuit && QTestRootObject::instance()->hasTestCase())
- eventLoop.exec();
+
+ view.setFramePosition(QPoint(50, 50));
+ if (view.size().isEmpty()) { // Avoid hangs with empty windows.
+ view.resize(200, 200);
+ }
+ view.show();
+ if (!QTest::qWaitForWindowExposed(&view)) {
+ qWarning().nospace()
+ << "Test '" << QDir::toNativeSeparators(path) << "' window not exposed after show().";
+ }
+ view.requestActivate();
+ if (!QTest::qWaitForWindowActive(&view)) {
+ qWarning().nospace()
+ << "Test '" << QDir::toNativeSeparators(path) << "' window not active after requestActivate().";
+ }
+ if (view.isExposed()) {
+ // Defer property update until event loop has started
+ QTimer::singleShot(0, []() {
+ QTestRootObject::instance()->setWindowShown(true);
+ });
+ } else {
+ qWarning().nospace()
+ << "Test '" << QDir::toNativeSeparators(path) << "' window was never exposed! "
+ << "If the test case was expecting windowShown, it will hang.";
}
+ if (!QTestRootObject::instance()->hasQuit && QTestRootObject::instance()->hasTestCase())
+ eventLoop.exec();
}
if (setup)