diff options
author | Grigoriy Chudnov <g.chudnov@gmail.com> | 2016-03-04 17:44:22 +0300 |
---|---|---|
committer | Grigoriy Chudnov <g.chudnov@gmail.com> | 2016-03-04 17:44:22 +0300 |
commit | dccee6d3525fa2f5220a3e6fadd466888f37bbf0 (patch) | |
tree | 9460eab358aca367a447e80c7bf31998434789c3 /Rx/v2/test/operators/ignore_elements.cpp | |
parent | 8433dfe942088a572dba79518ba36427921d5b9f (diff) | |
download | RxCpp-dccee6d3525fa2f5220a3e6fadd466888f37bbf0.tar.gz |
add ignore_elements operator
Diffstat (limited to 'Rx/v2/test/operators/ignore_elements.cpp')
-rw-r--r-- | Rx/v2/test/operators/ignore_elements.cpp | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/Rx/v2/test/operators/ignore_elements.cpp b/Rx/v2/test/operators/ignore_elements.cpp new file mode 100644 index 0000000..7e495e9 --- /dev/null +++ b/Rx/v2/test/operators/ignore_elements.cpp @@ -0,0 +1,160 @@ +#include "../test.h" + + +SCENARIO("ignore_elements - never", "[ignore_elements][operators]"){ + GIVEN("a source"){ + auto sc = rxsc::make_test(); + auto w = sc.create_worker(); + const rxsc::test::messages<int> on; + + auto xs = sc.make_hot_observable({ + on.next(150, 1) + }); + + WHEN("ignore_elements is applied"){ + + auto res = w.start( + [xs]() { + return xs.ignore_elements(); + } + ); + + THEN("the output is empty"){ + auto required = std::vector<rxsc::test::messages<int>::recorded_type>(); + auto actual = res.get_observer().messages(); + REQUIRE(required == actual); + } + + THEN("there was 1 subscription/unsubscription to the source"){ + auto required = rxu::to_vector({ + on.subscribe(200, 1000) + }); + auto actual = xs.subscriptions(); + REQUIRE(required == actual); + } + } + } +} + +SCENARIO("ignore_elements - empty", "[ignore_elements][operators]"){ + GIVEN("a source"){ + auto sc = rxsc::make_test(); + auto w = sc.create_worker(); + const rxsc::test::messages<int> on; + + auto xs = sc.make_hot_observable({ + on.next(150, 1), + on.completed(250) + }); + + WHEN("ignore_elements is applied"){ + + auto res = w.start( + [xs]() { + return xs.ignore_elements(); + } + ); + + THEN("the output contains the completion message"){ + auto required = rxu::to_vector({ + on.completed(250) + }); + auto actual = res.get_observer().messages(); + REQUIRE(required == actual); + } + + THEN("there was 1 subscription/unsubscription to the source"){ + auto required = rxu::to_vector({ + on.subscribe(200, 250) + }); + auto actual = xs.subscriptions(); + REQUIRE(required == actual); + } + + } + } +} + +SCENARIO("ignore_elements - throw", "[ignore_elements][operators]"){ + GIVEN("a source"){ + auto sc = rxsc::make_test(); + auto w = sc.create_worker(); + const rxsc::test::messages<int> on; + + std::runtime_error ex("ignore_elements on_error from source"); + + auto xs = sc.make_hot_observable({ + on.next(150, 1), + on.error(250, ex) + }); + + WHEN("ignore_elements is applied"){ + + auto res = w.start( + [xs]() { + return xs.ignore_elements(); + } + ); + + THEN("the output contains an error"){ + auto required = rxu::to_vector({ + on.error(250, ex) + }); + auto actual = res.get_observer().messages(); + REQUIRE(required == actual); + } + + THEN("there was 1 subscription/unsubscription to the source"){ + auto required = rxu::to_vector({ + on.subscribe(200, 250) + }); + auto actual = xs.subscriptions(); + REQUIRE(required == actual); + } + + } + } +} + +SCENARIO("ignore_elements - items", "[ignore_elements][operators]"){ + GIVEN("a source"){ + auto sc = rxsc::make_test(); + auto w = sc.create_worker(); + const rxsc::test::messages<int> on; + + auto xs = sc.make_hot_observable({ + on.next(150, 1), + on.next(210, 2), + on.next(220, 3), + on.next(230, 4), + on.next(240, 5), + on.completed(250) + }); + + WHEN("ignore_elements is applied"){ + + auto res = w.start( + [xs]() { + return xs.ignore_elements(); + } + ); + + THEN("the output contains the completion message"){ + auto required = rxu::to_vector({ + on.completed(250) + }); + auto actual = res.get_observer().messages(); + REQUIRE(required == actual); + } + + THEN("there was 1 subscription/unsubscription to the source"){ + auto required = rxu::to_vector({ + on.subscribe(200, 250) + }); + auto actual = xs.subscriptions(); + REQUIRE(required == actual); + } + + } + } +} |