diff options
Diffstat (limited to 'src/testlib/qtestcase.cpp')
-rw-r--r-- | src/testlib/qtestcase.cpp | 73 |
1 files changed, 60 insertions, 13 deletions
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index f5668c274e..32facaf12b 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -60,6 +60,8 @@ #include <QtCore/qwaitcondition.h> #include <QtCore/qmutex.h> +#include <QtCore/qtestsupport_core.h> + #include <QtTest/private/qtestlog_p.h> #include <QtTest/private/qtesttable_p.h> #include <QtTest/qtestdata.h> @@ -85,7 +87,6 @@ #if defined(Q_OS_LINUX) #include <sys/types.h> -#include <unistd.h> #include <fcntl.h> #endif @@ -99,6 +100,7 @@ #include <errno.h> #include <signal.h> #include <time.h> +#include <unistd.h> # if !defined(Q_OS_INTEGRITY) # include <sys/resource.h> # endif @@ -344,7 +346,9 @@ namespace QTest static int keyDelay = -1; static int mouseDelay = -1; static int eventDelay = -1; +#if QT_CONFIG(thread) static int timeout = -1; +#endif static bool noCrashHandler = false; /*! \internal @@ -395,7 +399,7 @@ int Q_TESTLIB_EXPORT defaultKeyDelay() } return keyDelay; } - +#if QT_CONFIG(thread) static int defaultTimeout() { if (timeout == -1) { @@ -407,6 +411,7 @@ static int defaultTimeout() } return timeout; } +#endif Q_TESTLIB_EXPORT bool printAvailableFunctions = false; Q_TESTLIB_EXPORT QStringList testFunctions; @@ -526,6 +531,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml) " xml : XML document\n" " lightxml : A stream of XML tags\n" " teamcity : TeamCity format\n" + " tap : Test Anything Protocol\n" "\n" " *** Multiple loggers can be specified, but at most one can log to stdout.\n" "\n" @@ -537,6 +543,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml) " -xml : Output results as XML document\n" " -lightxml : Output results as stream of XML tags\n" " -teamcity : Output results in TeamCity format\n" + " -tap : Output results in Test Anything Protocol format\n" "\n" " *** If no output file is specified, stdout is assumed.\n" " *** If no output format is specified, -txt is assumed.\n" @@ -624,6 +631,8 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml) logFormat = QTestLog::LightXML; } else if (strcmp(argv[i], "-teamcity") == 0) { logFormat = QTestLog::TeamCity; + } else if (strcmp(argv[i], "-tap") == 0) { + logFormat = QTestLog::TAP; } else if (strcmp(argv[i], "-silent") == 0) { QTestLog::setVerboseLevel(-1); } else if (strcmp(argv[i], "-v1") == 0) { @@ -658,8 +667,10 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml) logFormat = QTestLog::XunitXML; else if (strcmp(format, "teamcity") == 0) logFormat = QTestLog::TeamCity; + else if (strcmp(format, "tap") == 0) + logFormat = QTestLog::TAP; else { - fprintf(stderr, "output format must be one of txt, csv, lightxml, xml, teamcity or xunitxml\n"); + fprintf(stderr, "output format must be one of txt, csv, lightxml, xml, tap, teamcity or xunitxml\n"); exit(1); } if (strcmp(filename, "-") == 0 && QTestLog::loggerUsingStdout()) { @@ -967,6 +978,8 @@ void TestMethods::invokeTestOnData(int index) const } } +#if QT_CONFIG(thread) + class WatchDog : public QThread { public: @@ -1018,6 +1031,17 @@ private: QWaitCondition waitCondition; }; +#else // !QT_CONFIG(thread) + +class WatchDog : public QObject +{ +public: + void beginTest() {}; + void testFinished() {}; +}; + +#endif + /*! \internal @@ -1141,6 +1165,31 @@ void *fetchData(QTestData *data, const char *tagName, int typeId) } /*! + * \internal + */ +char *formatString(const char *prefix, const char *suffix, size_t numArguments, ...) +{ + va_list ap; + va_start(ap, numArguments); + + QByteArray arguments; + arguments += prefix; + + if (numArguments > 0) { + arguments += va_arg(ap, const char *); + + for (size_t i = 1; i < numArguments; ++i) { + arguments += ", "; + arguments += va_arg(ap, const char *); + } + } + + va_end(ap); + arguments += suffix; + return qstrdup(arguments.constData()); +} + +/*! \fn char* QTest::toHexRepresentation(const char *ba, int length) Returns a pointer to a string that is the string \a ba represented @@ -1439,8 +1488,13 @@ void FatalSignalHandler::signal(int signum) { const int msecsFunctionTime = qRound(QTestLog::msecsFunctionTime()); const int msecsTotalTime = qRound(QTestLog::msecsTotalTime()); - if (signum != SIGINT) + if (signum != SIGINT) { stackTrace(); + if (qEnvironmentVariableIsSet("QTEST_PAUSE_ON_CRASH")) { + fprintf(stderr, "Pausing process %d for debugging\n", getpid()); + raise(SIGSTOP); + } + } qFatal("Received signal %d\n" " Function time: %dms Total time: %dms", signum, msecsFunctionTime, msecsTotalTime); @@ -2380,16 +2434,9 @@ bool QTest::currentTestFailed() */ void QTest::qSleep(int ms) { + // ### Qt 6, move to QtCore or remove altogether QTEST_ASSERT(ms > 0); - -#if defined(Q_OS_WINRT) - WaitForSingleObjectEx(GetCurrentThread(), ms, true); -#elif defined(Q_OS_WIN) - Sleep(uint(ms)); -#else - struct timespec ts = { time_t(ms / 1000), (ms % 1000) * 1000 * 1000 }; - nanosleep(&ts, NULL); -#endif + QTestPrivate::qSleep(ms); } /*! \internal |