4#include <QtTest/private/qtestresult_p.h>
5#include <QtCore/qglobal.h>
6#include <QtCore/qstringview.h>
8#include <QtTest/private/qtestlog_p.h>
9#include <QtTest/qtest.h>
10#include <QtTest/qtestdata.h>
11#include <QtTest/qtestcase.h>
12#include <QtTest/qtestassert.h>
13#include <QtTest/qtesteventloop.h>
31 static const bool fatalFailure = []() {
32 static const char *
const environmentVar =
"QTEST_FATAL_FAIL";
41 if (failed && fatalFailure)
149 addFailure(
"QEXPECT_FAIL was called without any subsequent verification statements");
155 addFailure(
"Not all expected messages were received");
224 if (!dataIndex || dataIndex[0] ==
'\0')
293 const char *description,
const char *
file,
int line)
301 qsnprintf(msg, 1024,
"QVERIFY(%s)", statementStr);
307 statement ?
"'%s' returned TRUE unexpectedly. (%s)" :
"'%s' returned FALSE. (%s)",
308 statementStr, description ? description :
"");
326 const char *failureMsg,
327 const char *val1,
const char *val2,
328 const char *actual,
const char *
expected,
331 size_t len1 = mbstowcs(
nullptr, actual, maxMsgLen);
332 size_t len2 = mbstowcs(
nullptr,
expected, maxMsgLen);
333 const int written =
qsnprintf(msg, maxMsgLen,
"%s\n", failureMsg);
335 maxMsgLen -= written;
338 qsnprintf(msg, maxMsgLen,
" %s(%s)%*s %s\n %s(%s)%*s %s",
340 val1 ? val1 :
"<null>",
342 val2 ? val2 :
"<null>");
345 qsnprintf(msg, maxMsgLen,
" %s: %s\n %s: %s",
351template <
class Actual,
class Expected>
353 const char *failureMsg,
354 const Actual &val1,
const Expected &val2,
355 const char *actual,
const char *
expected,
367template <
class Actual,
class Expected>
369 const Actual &val1,
const Expected &val2,
370 const char *actual,
const char *
expected,
372 bool hasValues =
true)
374 const size_t maxMsgLen = 1024;
387 failureMsg =
"Compared values are not the same";
392 "QCOMPARE(%s, %s) returned TRUE unexpectedly.", actual,
expected);
399 qsnprintf(msg, maxMsgLen,
"%s", failureMsg);
413 const char *actual,
const char *
expected,
416 const size_t maxMsgLen = 1024;
432 qsnprintf(msg, maxMsgLen,
"QCOMPARE(%s, %s) returned TRUE unexpectedly.",
442 char *val1,
char *val2,
443 const char *actual,
const char *
expected,
447 val1 !=
nullptr ? val1 :
"<null>",
448 val2 !=
nullptr ? val2 :
"<null>",
450 val1 !=
nullptr && val2 !=
nullptr);
460 double val1,
double val2,
461 const char *actual,
const char *
expected,
468 float val1,
float val2,
469 const char *actual,
const char *
expected,
477 const char *actual,
const char *
expected,
483#if QT_POINTER_SIZE == 8
486 const char *actual,
const char *
expected,
494 unsigned val1,
unsigned val2,
495 const char *actual,
const char *
expected,
503 const char *actual,
const char *
expected,
511 const char *actual,
const char *
expected,
519 const char *actual,
const char *
expected,
528 const char *actual,
const char *expeceted,
581 return ::currentAppName;
586 using namespace QTest;
588 case ComparisonOperation::CustomCompare:
590 case ComparisonOperation::Equal:
591 return "QCOMPARE_EQ";
592 case ComparisonOperation::NotEqual:
593 return "QCOMPARE_NE";
594 case ComparisonOperation::LessThan:
595 return "QCOMPARE_LT";
596 case ComparisonOperation::LessThanOrEqual:
597 return "QCOMPARE_LE";
598 case ComparisonOperation::GreaterThan:
599 return "QCOMPARE_GT";
600 case ComparisonOperation::GreaterThanOrEqual:
601 return "QCOMPARE_GE";
603 Q_UNREACHABLE_RETURN(
"");
608 using namespace QTest;
610 case ComparisonOperation::CustomCompare:
611 return "Compared values are not the same";
612 case ComparisonOperation::Equal:
613 return "The computed value is expected to be equal to the baseline, but is not";
614 case ComparisonOperation::NotEqual:
615 return "The computed value is expected to be different from the baseline, but is not";
616 case ComparisonOperation::LessThan:
617 return "The computed value is expected to be less than the baseline, but is not";
618 case ComparisonOperation::LessThanOrEqual:
619 return "The computed value is expected to be less than or equal to the baseline, but is not";
620 case ComparisonOperation::GreaterThan:
621 return "The computed value is expected to be greater than the baseline, but is not";
622 case ComparisonOperation::GreaterThanOrEqual:
623 return "The computed value is expected to be greater than or equal to the baseline, but is not";
625 Q_UNREACHABLE_RETURN(
"");
630 const char *lhsExpr,
const char *rhsExpr,
632 const char *failureMessage)
634 const size_t maxMsgLen = 1024;
648 qsnprintf(msg, maxMsgLen,
"%s(%s, %s) returned TRUE unexpectedly.",
654 const std::unique_ptr<const char[]> lhsPtr{ lhs() };
655 const std::unique_ptr<const char[]> rhsPtr{ rhs() };
661 lhsExpr, rhsExpr, op);
const char * dataTag() const
static QTestEventLoop & instance()
static void clearCurrentTestState()
static void addPass(const char *msg)
static int verboseLevel()
static void addSkip(const char *msg, const char *file, int line)
static void addFail(const char *msg, const char *file, int line)
static void enterTestData(QTestData *data)
static void clearFailOnWarnings()
static void enterTestFunction(const char *function)
static void addXPass(const char *msg, const char *file, int line)
static void addXFail(const char *msg, const char *file, int line)
static void addBPass(const char *msg)
static int unhandledIgnoreMessages()
static void addBFail(const char *msg, const char *file, int line)
static void clearIgnoreMessages()
static void addBXFail(const char *msg, const char *file, int line)
static void info(const char *msg, const char *file, int line)
static void leaveTestFunction()
static void printUnhandledIgnoreMessages()
static void addBXPass(const char *msg, const char *file, int line)
static void resetCounters()
static const char * currentTestObjectName()
static void fail(const char *message, const char *file, int line)
static const char * currentAppName()
static const char * currentGlobalDataTag()
static void finishedCurrentTestDataCleanup()
This function is called after completing each test function, including test functions that are not da...
static void finishedCurrentTestData()
This function is called after completing each test function, including test functions that are not da...
static bool expectFail(const char *dataIndex, const char *comment, QTest::TestFailMode mode, const char *file, int line)
static bool verify(bool statement, const char *statementStr, const char *extraInfo, const char *file, int line)
static bool currentTestFailed()
static void setSkipCurrentTest(bool value)
static void setCurrentAppName(const char *appName)
static void setCurrentTestFunction(const char *func)
static void setBlacklistCurrentTest(bool b)
static void setCurrentTestObject(const char *name)
static const char * currentDataTag()
static bool compare(bool success, const char *failureMsg, char *val1, char *val2, const char *actual, const char *expected, const char *file, int line)
static void addFailure(const char *message, const char *file=nullptr, int line=0)
static bool skipCurrentTest()
static bool reportResult(bool success, qxp::function_ref< const char *()> lhs, qxp::function_ref< const char *()> rhs, const char *lhsExpr, const char *rhsExpr, QTest::ComparisonOperation op, const char *file, int line, const char *failureMessage=nullptr)
static void setCurrentGlobalTestData(QTestData *data)
static void finishedCurrentTestFunction()
This function is called after completing each test function, including test functions that are data-d...
static void setCurrentTestData(QTestData *data)
static void addSkip(const char *message, const char *file, int line)
static QTestData * currentGlobalTestData()
static QTestData * currentTestData()
static const char * currentTestFunction()
static QThread * currentThread()
Combined button and popup list for selecting options.
static QTestData * currentGlobalTestData
static void resetFailed()
static QTestData * currentTestData
static bool skipCurrentTest
char * toString(const MyPoint &point)
static void setFailed(bool failed)
static const char * currentTestFunc
static bool blacklistCurrentTest
static int expectFailMode
static const char * expectFailComment
static const char * currentTestObjectName
Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt,...)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
QT_BEGIN_NAMESPACE Q_NORETURN void qTerminate() noexcept
constexpr const T & qMax(const T &a, const T &b)
GLboolean GLboolean GLboolean b
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) noexcept
Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nullptr) noexcept
#define QTEST_ASSERT(cond)
static const char * currentAppName
static bool checkStatement(bool statement, const char *msg, const char *file, int line)
static bool isExpectFailData(const char *dataIndex)
static const char * rightArgNameForOp(QTest::ComparisonOperation op)
static const char * failureMessageForOp(QTest::ComparisonOperation op)
void formatFailMessage(char *msg, size_t maxMsgLen, const char *failureMsg, const char *val1, const char *val2, const char *actual, const char *expected, QTest::ComparisonOperation op)
static bool compareHelper(bool success, const char *failureMsg, const Actual &val1, const Expected &val2, const char *actual, const char *expected, const char *file, int line, bool hasValues=true)
static const char * macroNameForOp(QTest::ComparisonOperation op)
static const char * leftArgNameForOp(QTest::ComparisonOperation op)
static void clearExpectFail()