12#include <QtTest/qttestglobal.h>
13#include <QtTest/qtestcase.h>
14#include <QtTest/qtestdata.h>
15#include <QtTest/qtesttostring.h>
16#include <QtTest/qbenchmark.h>
18#if defined(TESTCASE_LOWDPI)
19#include <QtCore/qcoreapplication.h>
22#include <initializer_list>
44template <
typename ActualIterator,
typename ExpectedIterator>
46 ExpectedIterator expectedBegin, ExpectedIterator expectedEnd,
47 const char *actual,
const char *
expected,
53 const qsizetype actualSize = actualEnd - actualIt;
54 const qsizetype expectedSize = expectedEnd - expectedBegin;
55 bool isOk = actualSize == expectedSize;
58 qsnprintf(msg,
sizeof(msg),
"Compared lists have different sizes.\n"
59 " Actual (%s) size: %zd\n"
60 " Expected (%s) size: %zd", actual, actualSize,
64 for (
auto expectedIt = expectedBegin; isOk && expectedIt < expectedEnd; ++actualIt, ++expectedIt) {
65 if (!(*actualIt == *expectedIt)) {
70 qsnprintf(msg,
sizeof(msg),
"Compared lists differ at index %zd.\n"
72 " Expected (%s): %s",
i, actual, val1 ? val1 :
"<null>",
85#if defined(TESTCASE_LOWDPI)
88 qputenv(
"QT_ENABLE_HIGHDPI_SCALING",
"0");
103template <
typename T,
int N>
105 const char *actual,
const char *
expected,
113template <
typename T,
int N>
115 const char *actual,
const char *
expected,
185 using YesType =
char[1];
186 using NoType =
char[2];
188 template <
typename C>
static YesType& test(
decltype(&C::initMain) ) ;
189 template <
typename C>
static NoType& test(...);
192 enum {
value =
sizeof(test<T>(
nullptr)) ==
sizeof(YesType) };
211#ifdef QT_TESTCASE_BUILDDIR
212# define QTEST_SET_MAIN_SOURCE_PATH QTest::setMainSourcePath(__FILE__, QT_TESTCASE_BUILDDIR);
214# define QTEST_SET_MAIN_SOURCE_PATH QTest::setMainSourcePath(__FILE__);
218#if QT_CONFIG(testlib_selfcover) && defined(__COVERAGESCANNER__)
219struct QtCoverageScanner
221 QtCoverageScanner(
const char *
name)
223 __coveragescanner_clear();
224 __coveragescanner_testname(
name);
228 __coveragescanner_save();
229 __coveragescanner_testname(
"");
232#define TESTLIB_SELFCOVERAGE_START(name) QtCoverageScanner _qtCoverageScanner(name);
234#define TESTLIB_SELFCOVERAGE_START(name)
237#if !defined(QTEST_BATCH_TESTS)
241#define QTEST_MAIN_WRAPPER(TestObject, ...) \
242int main(int argc, char *argv[]) \
244 TESTLIB_SELFCOVERAGE_START(#TestObject) \
245 QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
248 QTEST_SET_MAIN_SOURCE_PATH \
249 return QTest::qExec(&tc, argc, argv); \
255#if !defined(BATCHED_TEST_NAME)
256#define BATCHED_TEST_NAME "other"
258#define QTEST_MAIN_WRAPPER(TestObject, ...) \
260void qRegister##TestObject() \
262 auto runTest = [](int argc, char** argv) -> int { \
263 TESTLIB_SELFCOVERAGE_START(TestObject) \
264 QT_PREPEND_NAMESPACE(QTest::Internal::callInitMain)<TestObject>(); \
267 QTEST_SET_MAIN_SOURCE_PATH \
268 return QTest::qExec(&tc, argc, argv); \
270 QTest::qRegisterTestCase(QStringLiteral(BATCHED_TEST_NAME), runTest); \
273Q_CONSTRUCTOR_FUNCTION(qRegister##TestObject)
277#define QTEST_APPLESS_MAIN(TestObject) QTEST_MAIN_WRAPPER(TestObject)
279#include <QtTest/qtestsystem.h>
281#if defined(QT_NETWORK_LIB)
282# include <QtTest/qtest_network.h>
286#define QTEST_QAPP_SETUP(klaz) \
287 klaz app(argc, argv); \
288 app.setAttribute(Qt::AA_Use96Dpi, true);
290#if defined(QT_WIDGETS_LIB)
291# include <QtTest/qtest_widgets.h>
292# ifdef QT_KEYPAD_NAVIGATION
293# define QTEST_DISABLE_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeNone);
295# define QTEST_DISABLE_KEYPAD_NAVIGATION
298# define QTEST_MAIN_SETUP() QTEST_QAPP_SETUP(QApplication) QTEST_DISABLE_KEYPAD_NAVIGATION
299#elif defined(QT_GUI_LIB)
300# include <QtTest/qtest_gui.h>
302# define QTEST_MAIN_SETUP() QTEST_QAPP_SETUP(QGuiApplication)
305# define QTEST_MAIN_SETUP() QTEST_QAPP_SETUP(QCoreApplication)
309#define QTEST_MAIN(TestObject) QTEST_MAIN_WRAPPER(TestObject, QTEST_MAIN_SETUP())
312#define QTEST_GUILESS_MAIN(TestObject) \
313 QTEST_MAIN_WRAPPER(TestObject, QTEST_QAPP_SETUP(QCoreApplication))
std::conditional< std::is_unsigned< typenamestd::underlying_type< Enum >::type >::value, unsignedint, signedint >::type Int
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
std::enable_if< HasInitMain< T >::value, void >::type callInitMain()
char * toString(const MyPoint &point)
bool _q_compareSequence(ActualIterator actualIt, ActualIterator actualEnd, ExpectedIterator expectedBegin, ExpectedIterator expectedEnd, const char *actual, const char *expected, const char *file, int line)
bool qCompare(QString const &t1, QLatin1StringView const &t2, const char *actual, const char *expected, const char *file, int line)
Q_TESTLIB_EXPORT bool compare_helper(bool success, const char *failureMsg, const void *actualPtr, const void *expectedPtr, const char *(*actualFormatter)(const void *), const char *(*expectedFormatter)(const void *), const char *actual, const char *expected, const char *file, int line)
Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt,...)
Q_CONSTRUCTOR_FUNCTION(qt_apple_check_os_version)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
[4]
bool qputenv(const char *varName, QByteArrayView raw)
unsigned long long quint64