diff options
Diffstat (limited to 'Rx/v2/test/sources/create.cpp')
-rw-r--r-- | Rx/v2/test/sources/create.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Rx/v2/test/sources/create.cpp b/Rx/v2/test/sources/create.cpp new file mode 100644 index 0000000..063ff7e --- /dev/null +++ b/Rx/v2/test/sources/create.cpp @@ -0,0 +1,46 @@ +#include "rxcpp/rx.hpp" +namespace rx=rxcpp; +namespace rxu=rxcpp::util; +namespace rxsc=rxcpp::schedulers; + +#include "rxcpp/rx-test.hpp" +#include "catch.hpp" + +SCENARIO("create stops on completion", "[create][sources]"){ + GIVEN("a test cold observable of ints"){ + auto sc = rxsc::make_test(); + auto w = sc.create_worker(); + const rxsc::test::messages<int> on; + + long invoked = 0; + + WHEN("created"){ + + auto res = w.start( + [&]() { + return rx::observable<>::create<int>( + [&](const rx::subscriber<int>& s){ + invoked++; + s.on_next(1); + s.on_next(2); + }) + // forget type to workaround lambda deduction bug on msvc 2013 + .as_dynamic(); + } + ); + + THEN("the output contains all items"){ + auto required = rxu::to_vector({ + on.on_next(200, 1), + on.on_next(200, 2) + }); + auto actual = res.get_observer().messages(); + REQUIRE(required == actual); + } + + THEN("create was called until completed"){ + REQUIRE(1 == invoked); + } + } + } +} |