Fix QFAIL() to interract correctly with QEXPECT_FAIL()

Previously, it went direct to QTestResults::addFailure() without going
via the checking for expected failure. Add QTestResults::fail() to
take care of this checking, as for verify() and compare().

Tidied up the code implementing expected failure and QFAIL(), while I
was about it. Adjusted an existing test to verify that expecting a
QFAIL() works, by using QFAIL() instead of QVERIFY(false).

Remove the QVERIFY(false) whose comment brought this to my attention.

[ChangeLog][QtTestLib][QFAIL] QEXPECT_FAIL() now correctly anticipates
a subsequent QFAIL(). Previously QFAIL() counted as a fail regardless.

Change-Id: Icc28cf70e5ff3006363791ea03aa01f2f591eb71
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Edward Welbourne 2021-06-11 14:33:41 +02:00
parent b62fcccb15
commit a93a9ea915
6 changed files with 21 additions and 16 deletions

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2020 The Qt Company Ltd.
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@ -2019,9 +2019,9 @@ int QTest::qExec(QObject *testObject, const QStringList &arguments)
/*! \internal
*/
void QTest::qFail(const char *statementStr, const char *file, int line)
void QTest::qFail(const char *message, const char *file, int line)
{
QTestResult::addFailure(statementStr, file, line);
QTestResult::fail(message, file, line);
}
/*! \internal

View File

@ -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 QtTest module of the Qt Toolkit.
@ -310,7 +310,7 @@ namespace QTest
Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description,
const char *file, int line);
Q_TESTLIB_EXPORT void qFail(const char *statementStr, const char *file, int line);
Q_TESTLIB_EXPORT void qFail(const char *message, const char *file, int line);
Q_TESTLIB_EXPORT void qSkip(const char *message, const char *file, int line);
Q_TESTLIB_EXPORT bool qExpectFail(const char *dataIndex, const char *comment, TestFailMode mode,
const char *file, int line);

View File

@ -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 QtTest module of the Qt Toolkit.
@ -237,7 +237,6 @@ bool QTestResult::expectFail(const char *dataIndex, const char *comment,
if (QTest::expectFailMode) {
delete[] comment;
clearExpectFail();
addFailure("Already expecting a fail", file, line);
return false;
}
@ -278,6 +277,11 @@ static bool checkStatement(bool statement, const char *msg, const char *file, in
return false;
}
void QTestResult::fail(const char *msg, const char *file, int line)
{
checkStatement(false, msg, file, line);
}
bool QTestResult::verify(bool statement, const char *statementStr,
const char *description, const char *file, int line)
{
@ -290,10 +294,11 @@ bool QTestResult::verify(bool statement, const char *statementStr,
QTestLog::info(msg, file, line);
}
if (!statement && !QTest::expectFailMode)
qsnprintf(msg, 1024, "'%s' returned FALSE. (%s)", statementStr, description ? description : "");
else if (statement && QTest::expectFailMode)
qsnprintf(msg, 1024, "'%s' returned TRUE unexpectedly. (%s)", statementStr, description ? description : "");
if (statement == !!QTest::expectFailMode) {
qsnprintf(msg, 1024,
statement ? "'%s' returned TRUE unexpectedly. (%s)" : "'%s' returned FALSE. (%s)",
statementStr, description ? description : "");
}
return checkStatement(statement, msg, file, line);
}

View File

@ -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 QtTest module of the Qt Toolkit.
@ -123,6 +123,7 @@ public:
static void addSkip(const char *message, const char *file, int line);
static bool expectFail(const char *dataIndex, const char *comment,
QTest::TestFailMode mode, const char *file, int line);
static void fail(const char *message, const char *file, int line);
static bool verify(bool statement, const char *statementStr, const char *extraInfo,
const char *file, int line);
static void setSkipCurrentTest(bool value);

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2017 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@ -442,7 +442,6 @@ void tst_QUdpSocket::broadcasting()
QEXPECT_FAIL("",
"Broadcasting to 255.255.255.255 does not work on FreeBSD",
Abort);
QVERIFY(false); // seems that QFAIL() doesn't respect the QEXPECT_FAIL() :/
#endif
QFAIL("Network operation timed out");
}

View File

@ -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,7 +88,7 @@ void tst_Xunit::testFunc5()
void tst_Xunit::testFunc6()
{
QEXPECT_FAIL("", "this failure is also expected", Abort);
QVERIFY(false);
QFAIL("This is a deliberate failure");
}
void tst_Xunit::testFunc7()