diff options
Diffstat (limited to 'tests/auto/testlib/selftests/warnings')
4 files changed, 144 insertions, 60 deletions
diff --git a/tests/auto/testlib/selftests/warnings/.prev_CMakeLists.txt b/tests/auto/testlib/selftests/warnings/.prev_CMakeLists.txt deleted file mode 100644 index f87eb13b42..0000000000 --- a/tests/auto/testlib/selftests/warnings/.prev_CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Generated from warnings.pro. - -##################################################################### -## warnings Binary: -##################################################################### - -qt_add_executable(warnings - SOURCES - tst_warnings.cpp - PUBLIC_LIBRARIES - Qt::Test -) - -## Scopes: -##################################################################### diff --git a/tests/auto/testlib/selftests/warnings/CMakeLists.txt b/tests/auto/testlib/selftests/warnings/CMakeLists.txt index ca8268bd37..553a023a90 100644 --- a/tests/auto/testlib/selftests/warnings/CMakeLists.txt +++ b/tests/auto/testlib/selftests/warnings/CMakeLists.txt @@ -1,21 +1,21 @@ -# Generated from warnings.pro. +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause ##################################################################### ## warnings Binary: ##################################################################### -qt_add_executable(warnings - NO_INSTALL # special case - OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case +qt_internal_add_executable(warnings + NO_INSTALL + EXCEPTIONS + OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} SOURCES tst_warnings.cpp - PUBLIC_LIBRARIES + LIBRARIES Qt::Test ) ## Scopes: ##################################################################### -# special case begin -qt_apply_testlib_coverage_options(warnings) -# special case end +qt_internal_apply_testlib_coverage_options(warnings) diff --git a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp index cdad72bd57..5add39ac88 100644 --- a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp +++ b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp @@ -1,35 +1,11 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only +#undef QTEST_THROW_ON_FAILURE // fails ### investigate #include <QtCore/QCoreApplication> #include <QtCore/QRegularExpression> -#include <QtTest/QtTest> +#include <QTest> class tst_Warnings: public QObject { @@ -37,9 +13,22 @@ class tst_Warnings: public QObject private slots: void testWarnings(); void testMissingWarnings(); +#if QT_CONFIG(regularexpression) void testMissingWarningsRegularExpression(); +#endif void testMissingWarningsWithData_data(); void testMissingWarningsWithData(); + + void testFailOnWarnings(); + void testFailOnWarningsCleared(); +#if QT_CONFIG(regularexpression) + void testFailOnWarningsWithData_data(); + void testFailOnWarningsWithData(); + void testFailOnWarningsFailInHelper(); + void testFailOnWarningsThenSkip(); +#endif + void testFailOnWarningsAndIgnoreWarnings(); + void testFailOnTemporaryObjectDestruction(); }; void tst_Warnings::testWarnings() @@ -99,6 +88,7 @@ void tst_Warnings::testMissingWarnings() qWarning("Warning2"); } +#if QT_CONFIG(regularexpression) void tst_Warnings::testMissingWarningsRegularExpression() { QTest::ignoreMessage(QtWarningMsg, QRegularExpression("Warning\\d\\d")); @@ -106,6 +96,7 @@ void tst_Warnings::testMissingWarningsRegularExpression() qWarning("Warning11"); } +#endif void tst_Warnings::testMissingWarningsWithData_data() { @@ -124,6 +115,123 @@ void tst_Warnings::testMissingWarningsWithData() qWarning("Warning2"); } +void tst_Warnings::testFailOnWarnings() +{ + // failOnWarning() wasn't called yet; shouldn't fail; + qWarning("Ran out of space!"); + +#if QT_CONFIG(regularexpression) + const auto warnRegex = QRegularExpression("Ran out of .*!"); + QTest::failOnWarning(warnRegex); + // Should now fail. + qWarning("Ran out of cabbage!"); + + // Should not fail; none of these are warnings. + qDebug("Ran out of tortillas!"); + qInfo("Ran out of oil!"); + + // Should not fail; regex doesn't match. + qWarning("nope"); + + // Should fail; matches regex. + qWarning("Ran out of biscuits!"); +#endif // QT_CONFIG(regularexpression) + + QTest::failOnWarning("Running low on toothpaste!"); + + // Should fail; strings match. + qWarning("Running low on toothpaste!"); + + // Shouldn't fail; strings don't match. + qWarning("Running low on flour!"); + + // Should not fail; none of these are warnings. + qDebug("Running low on toothpaste!"); + qInfo("Running low on toothpaste!"); +} + +void tst_Warnings::testFailOnWarningsCleared() +{ + // The patterns passed to failOnWarnings() should be cleared at the end of + // each test function, so this shouldn't fail because of the failOnWarning() + // call in the previous function. Note that this test always needs to come + // after testFailOnWarnings for it to test anything meaningfully. + qWarning("Ran out of muffins!"); +} + +#if QT_CONFIG(regularexpression) +void tst_Warnings::testFailOnWarningsWithData_data() +{ + // The warning message that should cause a failure. + QTest::addColumn<QString>("warningMessage"); + + QTest::newRow("warning1") << "warning1"; + QTest::newRow("warning2") << "warning2"; + QTest::newRow("warning3") << "warning3"; +} + +void tst_Warnings::testFailOnWarningsWithData() +{ + QFETCH(QString, warningMessage); + + QTest::failOnWarning(QRegularExpression(warningMessage)); + + // Only one of these should fail, depending on warningMessage. + qWarning("warning1"); + qWarning("warning2"); + qWarning("warning3"); +} + +void tst_Warnings::testFailOnWarningsFailInHelper() +{ + const QTest::ThrowOnFailDisabler nothrow; // tests repeated QFAILs + [](){ QFAIL("This failure message should be printed but not cause the test to abort"); }(); + // So we've already failed, but we get more messages - that don't increment counters. + const auto warnRegex = QRegularExpression("Ran out of .*!"); + QTest::failOnWarning(warnRegex); + qWarning("Ran out of cabbage!"); + QFAIL("My cabbage! :("); +} + +void tst_Warnings::testFailOnWarningsThenSkip() +{ + const auto warnRegex = QRegularExpression("Ran out of .*!"); + QTest::failOnWarning(warnRegex); + qWarning("Ran out of cabbage!"); + QSKIP("My cabbage! :("); // Reports, but doesn't count. +} +#endif // QT_CONFIG(regularexpression) + +void tst_Warnings::testFailOnWarningsAndIgnoreWarnings() +{ + const auto warningStr = "Running low on toothpaste!"; + QTest::failOnWarning(warningStr); + QTest::ignoreMessage(QtWarningMsg, warningStr); + // Shouldn't fail; we ignored it. + qWarning(warningStr); +} + +void tst_Warnings::testFailOnTemporaryObjectDestruction() +{ + QTest::failOnWarning("Running low on toothpaste!"); + QTest::ignoreMessage(QtWarningMsg, "Ran out of cabbage!"); + + class TestObject : public QObject + { + public: + ~TestObject() + { + // Shouldn't fail - ignored + qWarning("Ran out of cabbage!"); + // Should fail + qWarning("Running low on toothpaste!"); + } + }; + + QScopedPointer<TestObject, QScopedPointerDeleteLater> testObject(new TestObject); + QVERIFY(testObject); +} + QTEST_MAIN(tst_Warnings) #include "tst_warnings.moc" diff --git a/tests/auto/testlib/selftests/warnings/warnings.pro b/tests/auto/testlib/selftests/warnings/warnings.pro deleted file mode 100644 index a0bd2c62ba..0000000000 --- a/tests/auto/testlib/selftests/warnings/warnings.pro +++ /dev/null @@ -1,9 +0,0 @@ -SOURCES += tst_warnings.cpp -QT = core testlib - -mac:CONFIG -= app_bundle -CONFIG -= debug_and_release_target - -TARGET = warnings - -include($$QT_SOURCE_TREE/src/testlib/selfcover.pri) |