diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-04-12 12:00:11 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-04-12 12:46:59 -0700 |
commit | 618b9f1dbff9c3a13c886b0edd949b7c6533fc5c (patch) | |
tree | a353ca0b088560e2fb000e6cfe2163bf4d70bf04 /test | |
parent | 23a0e2a84e6c1c9d7d861e00d5160ca09313e707 (diff) | |
download | qtlocation-mapboxgl-618b9f1dbff9c3a13c886b0edd949b7c6533fc5c.tar.gz |
[darwin] use CFRunLoopSourceInvalidate() to also cancel any pending AsyncTask invocations
Diffstat (limited to 'test')
-rw-r--r-- | test/util/async_task.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/util/async_task.cpp b/test/util/async_task.cpp index 9d36230472..5fd890ad9e 100644 --- a/test/util/async_task.cpp +++ b/test/util/async_task.cpp @@ -64,6 +64,33 @@ TEST(AsyncTask, DestroyShouldNotRunQueue) { EXPECT_EQ(count, 0); } +TEST(AsyncTask, DestroyAfterSignaling) { + RunLoop loop; + + // We're creating two tasks and signal both of them; the one that gets fired first destroys + // the other one. Make sure that the second one we destroyed doesn't fire. + + std::unique_ptr<AsyncTask> task1, task2; + + task1 = std::make_unique<AsyncTask>([&] { + task2.reset(); + if (!task1) { + FAIL() << "Task was destroyed but invoked anyway"; + } + }); + task2 = std::make_unique<AsyncTask>([&] { + task1.reset(); + if (!task2) { + FAIL() << "Task was destroyed but invoked anyway"; + } + }); + + task1->send(); + task2->send(); + + loop.runOnce(); +} + TEST(AsyncTask, RequestCoalescingMultithreaded) { RunLoop loop; |