From 0ac0ca8124627a989918d5f5af136275366c6db2 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 28 Oct 2024 11:10:40 +0100 Subject: [PATCH] tst_QPromise: QSKIP when !QT_CONFIG(cxx11_future) Don't just silently succeed. As a drive-by, keep the skipped code visible to the compiler. QThread::create() is universally available since 4a5f3c8b930d319ce2ecc802a0868164f18034db, so the skipped code ought to compile. Amends ac6a9f9bfae88e21b3e589cc25e4632a69f67a50. Change-Id: I193ecf802ffbfd103747aa34eb307fb1a814a94e Reviewed-by: Thiago Macieira (cherry picked from commit 4e1b20893aeeb9580bc6b52ac4baea297675bfee) Reviewed-by: Qt Cherry-pick Bot --- .../corelib/thread/qpromise/tst_qpromise.cpp | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp b/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp index 605516de09a..2e35422cc9f 100644 --- a/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp +++ b/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp @@ -86,7 +86,6 @@ do { \ QFAIL("Test case " #test "(" #__VA_ARGS__ ") failed"); \ } while (false) -#if QT_CONFIG(cxx11_future) // std::thread-like wrapper that ensures that the thread is joined at the end of // a scope to prevent potential std::terminate struct ThreadWrapper @@ -103,7 +102,6 @@ struct ThreadWrapper join(); } }; -#endif struct FutureWatcher { @@ -369,7 +367,9 @@ void tst_QPromise::progress() void tst_QPromise::addInThread() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif const auto testAddResult = [] (auto promise, const auto &result) { promise.start(); auto f = promise.future(); @@ -387,12 +387,13 @@ void tst_QPromise::addInThread() RUN_TEST_FUNC(testAddResult, QPromise(), 42); RUN_TEST_FUNC(testAddResult, QPromise(), u8"42"); RUN_TEST_FUNC(testAddResult, QPromise(), CopyOnlyType{99}); -#endif } void tst_QPromise::addInThreadMoveOnlyObject() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise promise; promise.start(); auto f = promise.future(); @@ -405,12 +406,13 @@ void tst_QPromise::addInThreadMoveOnlyObject() // Iterators wait for result first for (auto& result : f) QCOMPARE(result, MoveOnlyType{-11}); -#endif } void tst_QPromise::reportFromMultipleThreads() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise promise; auto f = promise.future(); promise.start(); @@ -429,12 +431,13 @@ void tst_QPromise::reportFromMultipleThreads() QVERIFY(std::find(expected.begin(), expected.end(), actual) != expected.end()); expected.removeOne(actual); } -#endif } void tst_QPromise::reportFromMultipleThreadsByMovedPromise() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise initialPromise; auto f = initialPromise.future(); { @@ -461,12 +464,13 @@ void tst_QPromise::reportFromMultipleThreadsByMovedPromise() QVERIFY(std::find(expected.begin(), expected.end(), actual) != expected.end()); expected.removeOne(actual); } -#endif } void tst_QPromise::doNotCancelWhenFinished() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif const auto testFinishedPromise = [] (auto promise) { auto f = promise.future(); promise.start(); @@ -485,13 +489,14 @@ void tst_QPromise::doNotCancelWhenFinished() RUN_TEST_FUNC(testFinishedPromise, QPromise()); RUN_TEST_FUNC(testFinishedPromise, QPromise()); RUN_TEST_FUNC(testFinishedPromise, QPromise()); -#endif } #ifndef QT_NO_EXCEPTIONS void tst_QPromise::cancelWhenDestroyed() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise initialPromise; auto f = initialPromise.future(); @@ -519,13 +524,14 @@ void tst_QPromise::cancelWhenDestroyed() QVERIFY(std::find(expected.begin(), expected.end(), actual) != expected.end()); expected.removeOne(actual); } -#endif } #endif void tst_QPromise::cancelWhenReassigned() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise promise; auto f = promise.future(); promise.start(); @@ -540,7 +546,6 @@ void tst_QPromise::cancelWhenReassigned() QCOMPARE(f.isFinished(), true); QCOMPARE(f.isCanceled(), true); -#endif } template @@ -642,7 +647,9 @@ void tst_QPromise::continuationsRunWhenFinished() void tst_QPromise::finishWhenSwapped() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise promise1; auto f1 = promise1.future(); promise1.start(); @@ -677,13 +684,14 @@ void tst_QPromise::finishWhenSwapped() QCOMPARE(f2.resultAt(0), 1); QCOMPARE(f2.resultAt(1), 2); -#endif } template void testCancelWhenMoved() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise promise1; auto f1 = promise1.future(); promise1.start(); @@ -711,7 +719,6 @@ void testCancelWhenMoved() // Future #2 is explicitly finished inside thread QCOMPARE(f2.isFinished(), true); QCOMPARE(f2.isCanceled(), false); -#endif } void tst_QPromise::cancelWhenMoved() @@ -754,7 +761,9 @@ void tst_QPromise::waitUntilResumed() void tst_QPromise::waitUntilCanceled() { -#if QT_CONFIG(cxx11_future) +#if !QT_CONFIG(cxx11_future) + QSKIP("This test requires C++11 std threading enabled (and working) in the standard library."); +#endif QPromise promise; promise.start(); auto f = promise.future(); @@ -776,7 +785,6 @@ void tst_QPromise::waitUntilCanceled() f.waitForFinished(); QCOMPARE(f.resultCount(), 0); -#endif } // Below is a quick and dirty hack to make snippets a part of a test suite