summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2021-09-28 15:12:48 +0200
committerEdward Welbourne <edward.welbourne@qt.io>2021-12-09 20:54:25 +0100
commit37bc11e707d3f29fa81675bcc41610ab65c2b314 (patch)
tree8706fcaec5e287425fb70d047febe7ebaceffc12
parentb67c367e0eb81a9062009abb6d5893e91719ca3e (diff)
Refactor QTEST*_MAIN() implementations
The various variants duplicated some rather complex code around varying setup in the middle. Rework in terms of a macro that defines main() and takes the setup code as a parameter. That setup code also had some common structure, so package that in a setup macro that takes the class to be used. Reworked various testlib selftests that were using QTEST_MAIN_IMPL(); change to use the new QTEST_MAIN_WRAPPER() and TEST_MAIN_SETUP(). These might be better dealt with by supporting a second form of the initMain() test-setup function in the test classes, that takes references for argc and argv, to let a test massage its command-line options. Change-Id: I7fb16b38d51c80ba2f5c9c82f3b7a37ffc636795 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r--src/testlib/qtest.h91
-rw-r--r--tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp7
-rw-r--r--tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp9
-rw-r--r--tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp9
-rw-r--r--tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp9
-rw-r--r--tests/auto/testlib/selftests/counting/tst_counting.cpp17
-rw-r--r--tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp9
-rw-r--r--tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp9
-rw-r--r--tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp9
-rw-r--r--tests/auto/testlib/selftests/silent/tst_silent.cpp9
10 files changed, 65 insertions, 113 deletions
diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h
index 894c59f39b..20c80058ac 100644
--- a/src/testlib/qtest.h
+++ b/src/testlib/qtest.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2020 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -612,84 +612,57 @@ struct QtCoverageScanner
#define TESTLIB_SELFCOVERAGE_START(name)
#endif
-#define QTEST_APPLESS_MAIN(TestObject) \
+// Internal (but used by some testlib selftests to hack argc and argv).
+// Tests should normally implement initMain() if they have set-up to do before
+// instantiating the test class.
+#define QTEST_MAIN_WRAPPER(TestObject, ...) \
int main(int argc, char *argv[]) \
{ \
- TESTLIB_SELFCOVERAGE_START(TestObject) \
+ TESTLIB_SELFCOVERAGE_START(#TestObject) \
QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
+ __VA_ARGS__ \
TestObject tc; \
QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
+// For when you don't even want a QApplication:
+#define QTEST_APPLESS_MAIN(TestObject) QTEST_MAIN_WRAPPER(TestObject)
+
#include <QtTest/qtestsystem.h>
#if defined(QT_NETWORK_LIB)
# include <QtTest/qtest_network.h>
#endif
-#if defined(QT_WIDGETS_LIB)
-
-#include <QtTest/qtest_widgets.h>
-
-#ifdef QT_KEYPAD_NAVIGATION
-# define QTEST_DISABLE_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeNone);
-#else
-# define QTEST_DISABLE_KEYPAD_NAVIGATION
-#endif
-
-#define QTEST_MAIN_IMPL(TestObject) \
- TESTLIB_SELFCOVERAGE_START(#TestObject) \
- QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
- QApplication app(argc, argv); \
- app.setAttribute(Qt::AA_Use96Dpi, true); \
- QTEST_DISABLE_KEYPAD_NAVIGATION \
- TestObject tc; \
- QTEST_SET_MAIN_SOURCE_PATH \
- return QTest::qExec(&tc, argc, argv);
+// Internal
+#define QTEST_QAPP_SETUP(klaz) \
+ klaz app(argc, argv); \
+ app.setAttribute(Qt::AA_Use96Dpi, true);
+#if defined(QT_WIDGETS_LIB)
+# include <QtTest/qtest_widgets.h>
+# ifdef QT_KEYPAD_NAVIGATION
+# define QTEST_DISABLE_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeNone);
+# else
+# define QTEST_DISABLE_KEYPAD_NAVIGATION
+# endif
+// Internal
+# define QTEST_MAIN_SETUP() QTEST_QAPP_SETUP(QApplication) QTEST_DISABLE_KEYPAD_NAVIGATION
#elif defined(QT_GUI_LIB)
-
-#include <QtTest/qtest_gui.h>
-
-#define QTEST_MAIN_IMPL(TestObject) \
- TESTLIB_SELFCOVERAGE_START(#TestObject) \
- QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
- QGuiApplication app(argc, argv); \
- app.setAttribute(Qt::AA_Use96Dpi, true); \
- TestObject tc; \
- QTEST_SET_MAIN_SOURCE_PATH \
- return QTest::qExec(&tc, argc, argv);
-
+# include <QtTest/qtest_gui.h>
+// Internal
+# define QTEST_MAIN_SETUP() QTEST_QAPP_SETUP(QGuiApplication)
#else
-
-#define QTEST_MAIN_IMPL(TestObject) \
- TESTLIB_SELFCOVERAGE_START(#TestObject) \
- QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
- QCoreApplication app(argc, argv); \
- app.setAttribute(Qt::AA_Use96Dpi, true); \
- TestObject tc; \
- QTEST_SET_MAIN_SOURCE_PATH \
- return QTest::qExec(&tc, argc, argv);
-
+// Internal
+# define QTEST_MAIN_SETUP() QTEST_QAPP_SETUP(QCoreApplication)
#endif // QT_GUI_LIB
-#define QTEST_MAIN(TestObject) \
-int main(int argc, char *argv[]) \
-{ \
- QTEST_MAIN_IMPL(TestObject) \
-}
+// For most tests:
+#define QTEST_MAIN(TestObject) QTEST_MAIN_WRAPPER(TestObject, QTEST_MAIN_SETUP())
+// For command-line tests
#define QTEST_GUILESS_MAIN(TestObject) \
-int main(int argc, char *argv[]) \
-{ \
- TESTLIB_SELFCOVERAGE_START(#TestObject) \
- QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
- QCoreApplication app(argc, argv); \
- app.setAttribute(Qt::AA_Use96Dpi, true); \
- TestObject tc; \
- QTEST_SET_MAIN_SOURCE_PATH \
- return QTest::qExec(&tc, argc, argv); \
-}
+ QTEST_MAIN_WRAPPER(TestObject, QTEST_QAPP_SETUP(QCoreApplication))
#endif
diff --git a/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp b/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp
index 353a7f5018..b3cf623375 100644
--- a/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp
+++ b/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp
@@ -78,8 +78,7 @@ void tst_BenchlibCallgrind::twoHundredMillionInstructions()
#endif
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_BenchlibCallgrind,
std::vector<const char*> args(argv, argv + argc);
// Add the -callgrind argument unless (it's there anyway or) we're the
// recursive invocation with -callgrindchild passed.
@@ -92,9 +91,7 @@ int main(int argc, char *argv[])
argc = args.size();
argv = const_cast<char**>(&args[0]);
}
-
- QTEST_MAIN_IMPL(tst_BenchlibCallgrind)
-}
+ QTEST_MAIN_SETUP())
#undef HAVE_VALGRIND_H
#include "tst_benchlibcallgrind.moc"
diff --git a/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp b/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp
index 40dd0bc25f..9903a1bd59 100644
--- a/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp
+++ b/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -59,14 +59,11 @@ void tst_BenchlibCounting::failingBenchmark()
};
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_BenchlibCounting,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-eventcounter");
argc = args.size();
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_BenchlibCounting)
-}
+ QTEST_MAIN_SETUP())
#include "tst_benchlibcounting.moc"
diff --git a/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp b/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp
index 8f1a06a3c3..97ac22bb94 100644
--- a/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp
+++ b/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -62,14 +62,11 @@ void tst_BenchlibTickCounter::threeBillionTicks()
#endif
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_BenchlibTickCounter,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-tickcounter");
argc = args.size();
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_BenchlibTickCounter)
-}
+ QTEST_MAIN_SETUP())
#include "tst_benchlibtickcounter.moc"
diff --git a/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp b/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp
index 42746d8fab..9759436ef9 100644
--- a/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp
+++ b/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -63,16 +63,13 @@ void tst_DataTable::fiveTablePasses_data() const
QTest::newRow("fiveTablePasses_data5") << true;
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_DataTable,
std::vector<const char*> args(argv, argv + argc);
args.push_back("fiveTablePasses");
args.push_back("fiveTablePasses:fiveTablePasses_data1");
args.push_back("-v2");
argc = int(args.size());
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_DataTable)
-}
+ QTEST_MAIN_SETUP())
#include "tst_commandlinedata.moc"
diff --git a/tests/auto/testlib/selftests/counting/tst_counting.cpp b/tests/auto/testlib/selftests/counting/tst_counting.cpp
index 0831f88005..69cfc91b40 100644
--- a/tests/auto/testlib/selftests/counting/tst_counting.cpp
+++ b/tests/auto/testlib/selftests/counting/tst_counting.cpp
@@ -290,15 +290,18 @@ void tst_Counting::testSkipInCleanup()
qDebug() << "This test function should execute and then QSKIP in cleanup()";
}
-int main(int argc, char *argv[])
-{
#ifdef TESTLIB_VERBOSITY_ARG
- std::vector<const char*> args(argv, argv + argc);
- args.push_back(QT_STRINGIFY(TESTLIB_VERBOSITY_ARG));
- argc = int(args.size());
+#define SETUP() \
+ std::vector<const char*> args(argv, argv + argc); \
+ args.push_back(QT_STRINGIFY(TESTLIB_VERBOSITY_ARG)); \
+ argc = int(args.size()); \
argv = const_cast<char**>(&args[0]);
+#else
+#define SETUP()
#endif
- QTEST_MAIN_IMPL(tst_Counting)
-}
+QTEST_MAIN_WRAPPER(tst_Counting,
+ SETUP()
+ QTEST_MAIN_SETUP())
+
#include "tst_counting.moc"
diff --git a/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp b/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp
index d036c64d1f..a2f91896f4 100644
--- a/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp
+++ b/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -72,14 +72,11 @@ void tst_PrintDataTags::c() const
{
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_PrintDataTags,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-datatags");
argc = int(args.size());
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_PrintDataTags)
-}
+ QTEST_MAIN_SETUP())
#include "tst_printdatatags.moc"
diff --git a/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp b/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp
index e94bec3b64..417df9aedb 100644
--- a/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp
+++ b/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -88,14 +88,11 @@ void tst_PrintDataTagsWithGlobalTags::c() const
{
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_PrintDataTagsWithGlobalTags,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-datatags");
argc = int(args.size());
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_PrintDataTagsWithGlobalTags)
-}
+ QTEST_MAIN_SETUP())
#include "tst_printdatatagswithglobaltags.moc"
diff --git a/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp b/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp
index f83a3c42f6..6dee51b544 100644
--- a/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp
+++ b/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -424,14 +424,11 @@ void tst_Signaldumper::deletingSender()
emit signalSlotOwner->signalWithoutParameters();
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_Signaldumper,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-vs");
argc = int(args.size());
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_Signaldumper)
-}
+ QTEST_MAIN_SETUP())
#include "tst_signaldumper.moc"
diff --git a/tests/auto/testlib/selftests/silent/tst_silent.cpp b/tests/auto/testlib/selftests/silent/tst_silent.cpp
index 34b33e1391..87c610f269 100644
--- a/tests/auto/testlib/selftests/silent/tst_silent.cpp
+++ b/tests/auto/testlib/selftests/silent/tst_silent.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -102,14 +102,11 @@ void tst_Silent::messages()
qFatal("This is a fatal error message that should still appear in silent test output");
}
-int main(int argc, char *argv[])
-{
+QTEST_MAIN_WRAPPER(tst_Silent,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-silent");
argc = int(args.size());
argv = const_cast<char**>(&args[0]);
-
- QTEST_MAIN_IMPL(tst_Silent)
-}
+ QTEST_MAIN_SETUP())
#include "tst_silent.moc"