From 328e10eba94113a1f4a91f4667e0570366e51df0 Mon Sep 17 00:00:00 2001 From: YexuanXiao Date: Wed, 18 Mar 2026 15:06:20 +0800 Subject: [PATCH 1/2] Add the missing synchronization in old_tests/async.cpp --- test/old_tests/UnitTests/async.cpp | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/test/old_tests/UnitTests/async.cpp b/test/old_tests/UnitTests/async.cpp index 7a7382004..dc32cc443 100644 --- a/test/old_tests/UnitTests/async.cpp +++ b/test/old_tests/UnitTests/async.cpp @@ -407,13 +407,16 @@ TEST_CASE("async, Throw_IAsyncAction") bool completed = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); try @@ -498,13 +501,16 @@ TEST_CASE("async, Throw_IAsyncActionWithProgress") bool completed = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); try @@ -589,13 +595,16 @@ TEST_CASE("async, Throw_IAsyncOperation") bool completed = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); try @@ -680,13 +689,16 @@ TEST_CASE("async, Throw_IAsyncOperationWithProgress") bool completed = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); try @@ -830,13 +842,16 @@ TEST_CASE("async, Cancel_IAsyncAction") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -858,16 +873,19 @@ TEST_CASE("async, Cancel_IAsyncAction, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); @@ -901,13 +919,16 @@ TEST_CASE("async, Cancel_IAsyncActionWithProgress") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -930,16 +951,19 @@ TEST_CASE("async, Cancel_IAsyncActionWithProgress, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); @@ -972,13 +996,16 @@ TEST_CASE("async, Cancel_IAsyncOperation") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -1000,16 +1027,20 @@ TEST_CASE("async, Cancel_IAsyncOperation, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); @@ -1043,13 +1074,16 @@ TEST_CASE("async, Cancel_IAsyncOperationWithProgress") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -1072,16 +1106,20 @@ TEST_CASE("async, Cancel_IAsyncOperationWithProgress, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); @@ -1164,13 +1202,16 @@ TEST_CASE("async, AutoCancel_IAsyncAction") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -1191,16 +1232,20 @@ TEST_CASE("async, AutoCancel_IAsyncAction, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); @@ -1230,13 +1275,16 @@ TEST_CASE("async, AutoCancel_IAsyncActionWithProgress") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -1257,16 +1305,20 @@ TEST_CASE("async, AutoCancel_IAsyncActionWithProgress, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); @@ -1296,13 +1348,16 @@ TEST_CASE("async, AutoCancel_IAsyncOperation") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -1323,16 +1378,20 @@ TEST_CASE("async, AutoCancel_IAsyncOperation, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); @@ -1362,13 +1421,16 @@ TEST_CASE("async, AutoCancel_IAsyncOperationWithProgress") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); @@ -1389,16 +1451,20 @@ TEST_CASE("async, AutoCancel_IAsyncOperationWithProgress, 2") bool objectMatches = false; bool statusMatches = false; + handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); + SetEvent(eventCompleted.get()); }); async.Cancel(); SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be canceled + + REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); From 84287f66f3dd89c10fe9401f2c87fdbf5a8fb300 Mon Sep 17 00:00:00 2001 From: YexuanXiao Date: Wed, 18 Mar 2026 17:07:11 +0800 Subject: [PATCH 2/2] Simplify old_tests/async.cpp --- test/old_tests/UnitTests/async.cpp | 94 ------------------------------ 1 file changed, 94 deletions(-) diff --git a/test/old_tests/UnitTests/async.cpp b/test/old_tests/UnitTests/async.cpp index dc32cc443..ee5cce40e 100644 --- a/test/old_tests/UnitTests/async.cpp +++ b/test/old_tests/UnitTests/async.cpp @@ -230,11 +230,8 @@ TEST_CASE("async, Suspend_IAsyncAction") REQUIRE(async.Status() == AsyncStatus::Started); async.Close(); - bool completed = false; - async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Completed); SetEvent(event.get()); // signal completion @@ -244,7 +241,6 @@ TEST_CASE("async, Suspend_IAsyncAction") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to complete - REQUIRE(completed); REQUIRE(async.Status() == AsyncStatus::Completed); REQUIRE(async.ErrorCode() == S_OK); } @@ -256,12 +252,10 @@ TEST_CASE("async, Suspend_IAsyncActionWithProgress") REQUIRE(async.Status() == AsyncStatus::Started); async.Close(); - bool completed = false; bool progress = false; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Completed); SetEvent(event.get()); // signal completion @@ -278,7 +272,6 @@ TEST_CASE("async, Suspend_IAsyncActionWithProgress") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to complete - REQUIRE(completed); REQUIRE(progress); REQUIRE(async.Status() == AsyncStatus::Completed); REQUIRE(async.ErrorCode() == S_OK); @@ -291,11 +284,8 @@ TEST_CASE("async, Suspend_IAsyncOperation") REQUIRE(async.Status() == AsyncStatus::Started); async.Close(); - bool completed = false; - async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Completed); SetEvent(event.get()); // signal completion @@ -306,7 +296,6 @@ TEST_CASE("async, Suspend_IAsyncOperation") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to complete REQUIRE(async.GetResults() == 123); - REQUIRE(completed); REQUIRE(async.Status() == AsyncStatus::Completed); REQUIRE(async.ErrorCode() == S_OK); } @@ -318,12 +307,10 @@ TEST_CASE("async, Suspend_IAsyncOperationWithProgress") REQUIRE(async.Status() == AsyncStatus::Started); async.Close(); - bool completed = false; bool progress = false; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Completed); SetEvent(event.get()); // signal completion @@ -341,7 +328,6 @@ TEST_CASE("async, Suspend_IAsyncOperationWithProgress") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to complete REQUIRE(async.GetResults() == 456); - REQUIRE(completed); REQUIRE(progress); REQUIRE(async.Status() == AsyncStatus::Completed); REQUIRE(async.ErrorCode() == S_OK); @@ -405,19 +391,15 @@ TEST_CASE("async, Throw_IAsyncAction") SetEvent(event.get()); // signal async to run while (async.Status() != AsyncStatus::Error); - bool completed = false; - handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); try { @@ -450,11 +432,8 @@ TEST_CASE("async, Throw_IAsyncAction, 2") IAsyncAction async = Throw_IAsyncAction(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; - async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(event.get()); @@ -463,7 +442,6 @@ TEST_CASE("async, Throw_IAsyncAction, 2") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be completed REQUIRE(async.Status() == AsyncStatus::Error); - REQUIRE(completed); try { @@ -499,19 +477,15 @@ TEST_CASE("async, Throw_IAsyncActionWithProgress") SetEvent(event.get()); // signal async to run while (async.Status() != AsyncStatus::Error); - bool completed = false; - handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); try { @@ -544,11 +518,8 @@ TEST_CASE("async, Throw_IAsyncActionWithProgress, 2") IAsyncActionWithProgress async = Throw_IAsyncActionWithProgress(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; - async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(event.get()); @@ -557,7 +528,6 @@ TEST_CASE("async, Throw_IAsyncActionWithProgress, 2") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be completed REQUIRE(async.Status() == AsyncStatus::Error); - REQUIRE(completed); try { @@ -593,19 +563,15 @@ TEST_CASE("async, Throw_IAsyncOperation") SetEvent(event.get()); // signal async to run while (async.Status() != AsyncStatus::Error); - bool completed = false; - handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); try { @@ -638,11 +604,8 @@ TEST_CASE("async, Throw_IAsyncOperation, 2") IAsyncOperation async = Throw_IAsyncOperation(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; - async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(event.get()); @@ -651,7 +614,6 @@ TEST_CASE("async, Throw_IAsyncOperation, 2") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be completed REQUIRE(async.Status() == AsyncStatus::Error); - REQUIRE(completed); try { @@ -687,19 +649,15 @@ TEST_CASE("async, Throw_IAsyncOperationWithProgress") SetEvent(event.get()); // signal async to run while (async.Status() != AsyncStatus::Error); - bool completed = false; - handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); try { @@ -732,11 +690,8 @@ TEST_CASE("async, Throw_IAsyncOperationWithProgress, 2") IAsyncOperationWithProgress async = Throw_IAsyncOperationWithProgress(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; - async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; REQUIRE(async == sender); REQUIRE(status == AsyncStatus::Error); SetEvent(event.get()); @@ -745,7 +700,6 @@ TEST_CASE("async, Throw_IAsyncOperationWithProgress, 2") SetEvent(event.get()); // signal async to run REQUIRE(WaitForSingleObject(event.get(), INFINITE) == WAIT_OBJECT_0); // wait for async to be completed REQUIRE(async.Status() == AsyncStatus::Error); - REQUIRE(completed); try { @@ -838,21 +792,18 @@ TEST_CASE("async, Cancel_IAsyncAction") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -869,14 +820,12 @@ TEST_CASE("async, Cancel_IAsyncAction, 2") REQUIRE(async.Status() == AsyncStatus::Started); REQUIRE_THROWS_AS(async.GetResults(), hresult_illegal_method_call); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -890,7 +839,6 @@ TEST_CASE("async, Cancel_IAsyncAction, 2") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -915,21 +863,18 @@ TEST_CASE("async, Cancel_IAsyncActionWithProgress") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -947,14 +892,12 @@ TEST_CASE("async, Cancel_IAsyncActionWithProgress, 2") // It is legal to read results of an incomplete WithProgress. REQUIRE_NOTHROW(async.GetResults()); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -968,7 +911,6 @@ TEST_CASE("async, Cancel_IAsyncActionWithProgress, 2") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -992,21 +934,18 @@ TEST_CASE("async, Cancel_IAsyncOperation") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1023,14 +962,12 @@ TEST_CASE("async, Cancel_IAsyncOperation, 2") REQUIRE(async.Status() == AsyncStatus::Started); REQUIRE_THROWS_AS(async.GetResults(), hresult_illegal_method_call); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -1045,7 +982,6 @@ TEST_CASE("async, Cancel_IAsyncOperation, 2") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1070,21 +1006,18 @@ TEST_CASE("async, Cancel_IAsyncOperationWithProgress") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1102,14 +1035,12 @@ TEST_CASE("async, Cancel_IAsyncOperationWithProgress, 2") // It is legal to read results of an incomplete WithProgress. REQUIRE_NOTHROW(async.GetResults()); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -1124,7 +1055,6 @@ TEST_CASE("async, Cancel_IAsyncOperationWithProgress, 2") REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); REQUIRE(async.ErrorCode() == HRESULT_FROM_WIN32(ERROR_CANCELLED)); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1198,21 +1128,18 @@ TEST_CASE("async, AutoCancel_IAsyncAction") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1228,14 +1155,12 @@ TEST_CASE("async, AutoCancel_IAsyncAction, 2") IAsyncAction async = AutoCancel_IAsyncAction(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncAction & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -1249,7 +1174,6 @@ TEST_CASE("async, AutoCancel_IAsyncAction, 2") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1271,21 +1195,18 @@ TEST_CASE("async, AutoCancel_IAsyncActionWithProgress") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1301,14 +1222,12 @@ TEST_CASE("async, AutoCancel_IAsyncActionWithProgress, 2") IAsyncActionWithProgress async = AutoCancel_IAsyncActionWithProgress(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncActionWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -1322,7 +1241,6 @@ TEST_CASE("async, AutoCancel_IAsyncActionWithProgress, 2") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1344,21 +1262,18 @@ TEST_CASE("async, AutoCancel_IAsyncOperation") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1374,14 +1289,12 @@ TEST_CASE("async, AutoCancel_IAsyncOperation, 2") IAsyncOperation async = AutoCancel_IAsyncOperation(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperation & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -1395,7 +1308,6 @@ TEST_CASE("async, AutoCancel_IAsyncOperation, 2") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1417,21 +1329,18 @@ TEST_CASE("async, AutoCancel_IAsyncOperationWithProgress") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); }); REQUIRE(WaitForSingleObject(eventCompleted.get(), INFINITE) == WAIT_OBJECT_0); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); } @@ -1447,14 +1356,12 @@ TEST_CASE("async, AutoCancel_IAsyncOperationWithProgress, 2") IAsyncOperationWithProgress async = AutoCancel_IAsyncOperationWithProgress(event.get()); REQUIRE(async.Status() == AsyncStatus::Started); - bool completed = false; bool objectMatches = false; bool statusMatches = false; handle eventCompleted { CreateEvent(nullptr, false, false, nullptr)}; async.Completed([&](const IAsyncOperationWithProgress & sender, AsyncStatus status) { - completed = true; objectMatches = (async == sender); statusMatches = (status == AsyncStatus::Canceled); SetEvent(eventCompleted.get()); @@ -1468,7 +1375,6 @@ TEST_CASE("async, AutoCancel_IAsyncOperationWithProgress, 2") REQUIRE(async.Status() == AsyncStatus::Canceled); REQUIRE_THROWS_AS(async.GetResults(), hresult_canceled); - REQUIRE(completed); REQUIRE(objectMatches); REQUIRE(statusMatches); }