summaryrefslogtreecommitdiff
path: root/test/miscellaneous
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2015-06-09 10:45:51 -0400
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-07-01 15:21:10 -0700
commit3670a78569bd9f7f92b768a9c761b4d8d4b278e3 (patch)
treeb6af3aaa311520f210550f003f02f76996ec4b87 /test/miscellaneous
parenteee02425fa4a38b51067ea8d325340ec699e47fa (diff)
downloadqtlocation-mapboxgl-3670a78569bd9f7f92b768a9c761b4d8d4b278e3.tar.gz
Convert Worker tests to Thread tests
Diffstat (limited to 'test/miscellaneous')
-rw-r--r--test/miscellaneous/thread.cpp83
-rw-r--r--test/miscellaneous/worker.cpp104
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);
-}