diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2015-05-08 11:18:45 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-05-08 11:18:45 -0700 |
commit | 499efc8fef29ef797a97734992f1a6660408b042 (patch) | |
tree | 52759d347865da330b5f6b2c36c022a6a6bd6fcd /test | |
parent | 21c419bd91fcb6fc518a6fcf0f8d99a44b673fe6 (diff) | |
parent | 8ee40a544e4b6459253056f2f1b6c812bde1cb33 (diff) | |
download | qtlocation-mapboxgl-499efc8fef29ef797a97734992f1a6660408b042.tar.gz |
Merge pull request #1470 from mapbox/1470-cancelable-work-requests
Make WorkRequests cancelable
Diffstat (limited to 'test')
-rw-r--r-- | test/miscellaneous/worker.cpp | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/test/miscellaneous/worker.cpp b/test/miscellaneous/worker.cpp index 50fabcebc8..3d3c781b8c 100644 --- a/test/miscellaneous/worker.cpp +++ b/test/miscellaneous/worker.cpp @@ -1,6 +1,7 @@ #include "../fixtures/util.hpp" #include <mbgl/util/worker.hpp> +#include <mbgl/util/work_request.hpp> #include <mbgl/util/run_loop.hpp> using namespace mbgl; @@ -10,7 +11,7 @@ TEST(Worker, ExecutesWorkAndAfter) { RunLoop loop(uv_default_loop()); Worker worker(1); - WorkRequest request; + std::unique_ptr<WorkRequest> request; bool didWork = false; bool didAfter = false; @@ -29,19 +30,22 @@ TEST(Worker, ExecutesWorkAndAfter) { EXPECT_TRUE(didAfter); } -TEST(Worker, WorkRequestJoinWaitsForWorkToComplete) { +TEST(Worker, WorkRequestDeletionWaitsForWorkToComplete) { RunLoop loop(uv_default_loop()); Worker worker(1); + std::promise<void> started; bool didWork = false; loop.invoke([&] { - WorkRequest request = worker.send([&] { + auto request = worker.send([&] { + started.set_value(); usleep(10000); didWork = true; }, [&] {}); + started.get_future().get(); - request.join(); + request.reset(); EXPECT_TRUE(didWork); loop.stop(); }); @@ -53,18 +57,48 @@ TEST(Worker, WorkRequestJoinCancelsAfter) { RunLoop loop(uv_default_loop()); Worker worker(1); + std::promise<void> started; bool didAfter = false; loop.invoke([&] { - WorkRequest request = worker.send([&] { + auto request = worker.send([&] { + started.set_value(); }, [&] { didAfter = true; }); + started.get_future().get(); - request.join(); + request.reset(); loop.stop(); }); uv_run(uv_default_loop(), UV_RUN_DEFAULT); EXPECT_FALSE(didAfter); } + +TEST(Worker, WorkRequestCancelsImmediately) { + RunLoop loop(uv_default_loop()); + + Worker worker(1); + + loop.invoke([&] { + std::promise<void> started; + // First worker item. + auto request1 = worker.send([&] { + usleep(10000); + started.set_value(); + }, [&] {}); + + auto request2 = worker.send([&] { + ADD_FAILURE() << "Second work item should not be invoked"; + }, [&] {}); + request2.reset(); + + started.get_future().get(); + request1.reset(); + + loop.stop(); + }); + + uv_run(uv_default_loop(), UV_RUN_DEFAULT); +} |