From 479c95729a986fb9a6a25cdf763898cb865b61c7 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Tue, 15 Feb 2022 17:00:10 +0100 Subject: [PATCH] Support global data tags in blacklisting identification of test-cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously the blacklisting file format only worked with slot:data or plain slot names for the items to blacklist. However, tests with global data report themselves with the global data-row tag in the same way as function-specific ones do; and tests which have both join the two as slot(global:data) in the test output name, so the reader is apt to mistake global:data for a data tag. In any case, it is potentially desirable to be able to blacklist a function with either or both of global and local data-row tags specified. Add support for that and remove a blacklisting that was only needed due to the lack of this support. For now, make the new parameter to checkBlackLists() optional, so that qtdeclarative's qmltest framework can adapt to this change. Fixes: QTBUG-100870 Change-Id: I9125811ebdab75d3fb462ba8b60561f003426502 Reviewed-by: Pasi Petäjäjärvi Reviewed-by: Tor Arne Vestbø --- src/testlib/qtestblacklist.cpp | 51 +++++++++++++------ src/testlib/qtestblacklist_p.h | 5 +- src/testlib/qtestcase.cpp | 9 +++- .../auto/network/socket/qtcpsocket/BLACKLIST | 2 - 4 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/testlib/qtestblacklist.cpp b/src/testlib/qtestblacklist.cpp index 4e9934c80d7..4ca3ec128f4 100644 --- a/src/testlib/qtestblacklist.cpp +++ b/src/testlib/qtestblacklist.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtTest module of the Qt Toolkit. @@ -59,17 +59,25 @@ QT_BEGIN_NAMESPACE referring to this documentation is kind to readers. Comments can also be used to indicate the reasons for ignoring particular cases. - The key "ci" applies only when run by COIN. - The key "cmake" applies when Qt is built using CMake. Other keys name platforms, - operating systems, distributions, tool-chains or architectures; a ! prefix - reverses what it checks. A version, joined to a key (at present, only for - distributions and for msvc) with a hyphen, limits the key to the specific - version. A keyword line matches if every key on it applies to the present - run. Successive lines are alternate conditions for ignoring a test. + The key "ci" applies only when run by COIN. The key "cmake" applies when Qt + is built using CMake. Other keys name platforms, operating systems, + distributions, tool-chains or architectures; a ! prefix reverses what it + checks. A version, joined to a key (at present, only for distributions and + for msvc) with a hyphen, limits the key to the specific version. A keyword + line matches if every key on it applies to the present run. Successive lines + are alternate conditions for ignoring a test. + + Ungrouped lines at the beginning of a file apply to the whole testcase. A + group starts with a [square-bracketed] identification of a test function to + ignore. For data-driven tests, this identification can be narrowed by the + inclusion of global and local data row tags, separated from the function name + and each other by colons. If both global and function-specific data rows tags + are supplied, the global one comes first (as in the tag reported in test + output, albeit in parentheses after the function name). Even when a test does + have global and local data tags, you can omit either or both. (If a global + data row's name coincides with that of a local data row, some unintended + matches may result; try to keep your data-row tags distinct.) - Ungrouped lines at the beginning of a file apply to the whole testcase. - A group starts with a [square-bracketed] identification of a test function, - optionally with (after a colon, the name of) a specific data set, to ignore. Subsequent lines give conditions for ignoring this test. # See qtbase/src/testlib/qtestblacklist.cpp for format @@ -89,6 +97,9 @@ QT_BEGIN_NAMESPACE [testfunction2:testData] msvc-2010 + [getFile:withProxy SSL:localhost] + android + QML test functions are identified using the following format: ::: @@ -296,17 +307,25 @@ void parseBlackList() } } -void checkBlackLists(const char *slot, const char *data) +void checkBlackLists(const char *slot, const char *data, const char *global) { bool ignore = ignoreAll; if (!ignore && ignoredTests) { QByteArray s = slot; - ignore = (ignoredTests->find(s) != ignoredTests->end()); + ignore = ignoredTests->find(s) != ignoredTests->end(); if (!ignore && data) { - s += ':'; - s += data; - ignore = (ignoredTests->find(s) != ignoredTests->end()); + s = (s + ':') + data; + ignore = ignoredTests->find(s) != ignoredTests->end(); + } + + if (!ignore && global) { + s = slot + ":"_qba + global; + ignore = ignoredTests->find(s) != ignoredTests->end(); + if (!ignore && data) { + s = (s + ':') + data; + ignore = ignoredTests->find(s) != ignoredTests->end(); + } } } diff --git a/src/testlib/qtestblacklist_p.h b/src/testlib/qtestblacklist_p.h index ebcb8082b2b..1455eb8c9ea 100644 --- a/src/testlib/qtestblacklist_p.h +++ b/src/testlib/qtestblacklist_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2018 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtTest module of the Qt Toolkit. @@ -59,7 +59,8 @@ QT_BEGIN_NAMESPACE namespace QTestPrivate { // Export functions so they can also be used by QQuickTest Q_TESTLIB_EXPORT void parseBlackList(); - Q_TESTLIB_EXPORT void checkBlackLists(const char *slot, const char *data); + Q_TESTLIB_EXPORT void checkBlackLists(const char *slot, const char *data, + const char *global = nullptr); } QT_END_NAMESPACE diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 5176c03931f..a773d7b0e1a 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1164,6 +1164,9 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co const QTestTable *gTable = QTestTable::globalTestTable(); const int globalDataCount = gTable->dataCount(); int curGlobalDataIndex = 0; + const auto globalDataTag = [gTable, globalDataCount](int index) { + return globalDataCount ? gTable->testData(index)->dataTag() : nullptr; + }; /* For each entry in the global data table, do: */ do { @@ -1180,6 +1183,9 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co bool foundFunction = false; int curDataIndex = 0; const int dataCount = table.dataCount(); + const auto dataTag = [&table, dataCount](int index) { + return dataCount ? table.testData(index)->dataTag() : nullptr; + }; // Data tag requested but none available? if (data && !dataCount) { @@ -1200,7 +1206,8 @@ bool TestMethods::invokeTest(int index, const char *data, WatchDog *watchDog) co if (!data || !qstrcmp(data, table.testData(curDataIndex)->dataTag())) { foundFunction = true; - QTestPrivate::checkBlackLists(name.constData(), dataCount ? table.testData(curDataIndex)->dataTag() : nullptr); + QTestPrivate::checkBlackLists(name.constData(), dataTag(curDataIndex), + globalDataTag(curGlobalDataIndex)); QTestDataSetter s(curDataIndex >= dataCount ? nullptr : table.testData(curDataIndex)); diff --git a/tests/auto/network/socket/qtcpsocket/BLACKLIST b/tests/auto/network/socket/qtcpsocket/BLACKLIST index d42457d7432..1791156ee51 100644 --- a/tests/auto/network/socket/qtcpsocket/BLACKLIST +++ b/tests/auto/network/socket/qtcpsocket/BLACKLIST @@ -1,7 +1,5 @@ [timeoutConnect:ip] windows -[connectToHostError] -windows-10 gcc developer-build # QTBUG-66247 [delayedClose:WithSocks5Proxy] windows-10 gcc developer-build