folly::via(Executor*, Func)
[folly.git] / folly / futures / test / ViaTest.cpp
index 72b2e1e86f636ac67b143ae72d1b2faf91743840..499d61d4159ae3b7c14e3d89336f514ef73bdc5c 100644 (file)
@@ -415,7 +415,7 @@ TEST(Via, viaRaces) {
   t2.join();
 }
 
-TEST(Future, callbackRace) {
+TEST(Via, callbackRace) {
   ThreadExecutor x;
 
   auto fn = [&x]{
@@ -441,3 +441,52 @@ TEST(Future, callbackRace) {
 
   fn().wait();
 }
+
+TEST(ViaFunc, liftsVoid) {
+  ManualExecutor x;
+  int count = 0;
+  Future<void> f = via(&x, [&]{ count++; });
+
+  EXPECT_EQ(0, count);
+  x.run();
+  EXPECT_EQ(1, count);
+}
+
+TEST(ViaFunc, value) {
+  ManualExecutor x;
+  EXPECT_EQ(42, via(&x, []{ return 42; }).getVia(&x));
+}
+
+TEST(ViaFunc, exception) {
+  ManualExecutor x;
+  EXPECT_THROW(
+    via(&x, []() -> int { throw std::runtime_error("expected"); })
+      .getVia(&x),
+    std::runtime_error);
+}
+
+TEST(ViaFunc, future) {
+  ManualExecutor x;
+  EXPECT_EQ(42, via(&x, []{ return makeFuture(42); })
+            .getVia(&x));
+}
+
+TEST(ViaFunc, voidFuture) {
+  ManualExecutor x;
+  int count = 0;
+  via(&x, [&]{ count++; }).getVia(&x);
+  EXPECT_EQ(1, count);
+}
+
+TEST(ViaFunc, isSticky) {
+  ManualExecutor x;
+  int count = 0;
+
+  auto f = via(&x, [&]{ count++; });
+  x.run();
+
+  f.then([&]{ count++; });
+  EXPECT_EQ(1, count);
+  x.run();
+  EXPECT_EQ(2, count);
+}