diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2015-06-09 10:45:51 -0400 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-07-01 15:21:10 -0700 |
commit | 3670a78569bd9f7f92b768a9c761b4d8d4b278e3 (patch) | |
tree | b6af3aaa311520f210550f003f02f76996ec4b87 /test/miscellaneous | |
parent | eee02425fa4a38b51067ea8d325340ec699e47fa (diff) | |
download | qtlocation-mapboxgl-3670a78569bd9f7f92b768a9c761b4d8d4b278e3.tar.gz |
Convert Worker tests to Thread tests
Diffstat (limited to 'test/miscellaneous')
-rw-r--r-- | test/miscellaneous/thread.cpp | 83 | ||||
-rw-r--r-- | test/miscellaneous/worker.cpp | 104 |
2 files changed, 83 insertions, 104 deletions
diff --git a/test/miscellaneous/thread.cpp b/test/miscellaneous/thread.cpp index 1206afc149..68f8ddccdf 100644 --- a/test/miscellaneous/thread.cpp +++ b/test/miscellaneous/thread.cpp @@ -136,3 +136,86 @@ TEST(Thread, context) { uv_run(uv_default_loop(), UV_RUN_DEFAULT); } + +class TestWorker { +public: + TestWorker(uv_loop_t*) {} + void send(std::function<void ()> fn) { fn(); } +}; + +TEST(Thread, ExecutesAfter) { + RunLoop loop(uv_default_loop()); + Thread<TestWorker> thread({"Test", ThreadType::Map, ThreadPriority::Regular}); + + bool didWork = false; + bool didAfter = false; + + auto request = thread.invokeWithResult(&TestWorker::send, [&] { + didAfter = true; + loop.stop(); + }, [&] { + didWork = true; + }); + + uv_run(uv_default_loop(), UV_RUN_DEFAULT); + + EXPECT_TRUE(didWork); + EXPECT_TRUE(didAfter); +} + +TEST(Thread, WorkRequestDeletionWaitsForWorkToComplete) { + RunLoop loop(uv_default_loop()); + Thread<TestWorker> thread({"Test", ThreadType::Map, ThreadPriority::Regular}); + + std::promise<void> started; + bool didWork = false; + + auto request = thread.invokeWithResult(&TestWorker::send, [&] {}, [&] { + started.set_value(); + usleep(10000); + didWork = true; + }); + + started.get_future().get(); + request.reset(); + EXPECT_TRUE(didWork); +} + +TEST(Thread, WorkRequestDeletionCancelsAfter) { + RunLoop loop(uv_default_loop()); + Thread<TestWorker> thread({"Test", ThreadType::Map, ThreadPriority::Regular}); + + std::promise<void> started; + bool didAfter = false; + + auto request = thread.invokeWithResult(&TestWorker::send, [&] { + didAfter = true; + }, [&] { + started.set_value(); + }); + + started.get_future().get(); + request.reset(); + uv_run(uv_default_loop(), UV_RUN_ONCE); + EXPECT_FALSE(didAfter); +} + +TEST(Thread, WorkRequestDeletionCancelsImmediately) { + RunLoop loop(uv_default_loop()); + Thread<TestWorker> thread({"Test", ThreadType::Map, ThreadPriority::Regular}); + + std::promise<void> started; + + auto request1 = thread.invokeWithResult(&TestWorker::send, [&] {}, [&] { + usleep(10000); + started.set_value(); + }); + + auto request2 = thread.invokeWithResult(&TestWorker::send, [&] {}, [&] { + ADD_FAILURE() << "Second work item should not be invoked"; + }); + request2.reset(); + + started.get_future().get(); + request1.reset(); +} diff --git a/test/miscellaneous/worker.cpp b/test/miscellaneous/worker.cpp deleted file mode 100644 index 3d3c781b8c..0000000000 --- a/test/miscellaneous/worker.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include "../fixtures/util.hpp" - -#include <mbgl/util/worker.hpp> -#include <mbgl/util/work_request.hpp> -#include <mbgl/util/run_loop.hpp> - -using namespace mbgl; -using namespace mbgl::util; - -TEST(Worker, ExecutesWorkAndAfter) { - RunLoop loop(uv_default_loop()); - - Worker worker(1); - std::unique_ptr<WorkRequest> request; - - bool didWork = false; - bool didAfter = false; - - loop.invoke([&] { - request = worker.send([&] { - didWork = true; - }, [&] { - didAfter = true; - loop.stop(); - }); - }); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - EXPECT_TRUE(didWork); - EXPECT_TRUE(didAfter); -} - -TEST(Worker, WorkRequestDeletionWaitsForWorkToComplete) { - RunLoop loop(uv_default_loop()); - - Worker worker(1); - std::promise<void> started; - bool didWork = false; - - loop.invoke([&] { - auto request = worker.send([&] { - started.set_value(); - usleep(10000); - didWork = true; - }, [&] {}); - started.get_future().get(); - - request.reset(); - EXPECT_TRUE(didWork); - loop.stop(); - }); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); -} - -TEST(Worker, WorkRequestJoinCancelsAfter) { - RunLoop loop(uv_default_loop()); - - Worker worker(1); - std::promise<void> started; - bool didAfter = false; - - loop.invoke([&] { - auto request = worker.send([&] { - started.set_value(); - }, [&] { - didAfter = true; - }); - started.get_future().get(); - - 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); -} |