• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "../test.h"
2 #include <rxcpp/operators/rx-ignore_elements.hpp>
3 
4 SCENARIO("ignore_elements - never", "[ignore_elements][operators]"){
5     GIVEN("a source"){
6         auto sc = rxsc::make_test();
7         auto w = sc.create_worker();
8         const rxsc::test::messages<int> on;
9 
10         auto xs = sc.make_hot_observable({
11             on.next(150, 1)
12         });
13 
14         WHEN("ignore_elements is applied"){
15 
16             auto res = w.start(
__anonbd4027330102() 17                 [xs]() {
18                     return xs | rxo::ignore_elements();
19                 }
20             );
21 
22             THEN("the output is empty"){
23                 auto required = std::vector<rxsc::test::messages<int>::recorded_type>();
24                 auto actual = res.get_observer().messages();
25                 REQUIRE(required == actual);
26             }
27 
28             THEN("there was 1 subscription/unsubscription to the source"){
29                 auto required = rxu::to_vector({
30                     on.subscribe(200, 1000)
31                 });
32                 auto actual = xs.subscriptions();
33                 REQUIRE(required == actual);
34             }
35         }
36     }
37 }
38 
39 SCENARIO("ignore_elements - empty", "[ignore_elements][operators]"){
40     GIVEN("a source"){
41         auto sc = rxsc::make_test();
42         auto w = sc.create_worker();
43         const rxsc::test::messages<int> on;
44 
45         auto xs = sc.make_hot_observable({
46             on.next(150, 1),
47             on.completed(250)
48         });
49 
50         WHEN("ignore_elements is applied"){
51 
52             auto res = w.start(
__anonbd4027330202() 53                 [xs]() {
54                     return xs.ignore_elements();
55                 }
56             );
57 
58             THEN("the output contains the completion message"){
59                 auto required = rxu::to_vector({
60                     on.completed(250)
61                 });
62                 auto actual = res.get_observer().messages();
63                 REQUIRE(required == actual);
64             }
65 
66             THEN("there was 1 subscription/unsubscription to the source"){
67                 auto required = rxu::to_vector({
68                     on.subscribe(200, 250)
69                 });
70                 auto actual = xs.subscriptions();
71                 REQUIRE(required == actual);
72             }
73 
74         }
75     }
76 }
77 
78 SCENARIO("ignore_elements - throw", "[ignore_elements][operators]"){
79     GIVEN("a source"){
80         auto sc = rxsc::make_test();
81         auto w = sc.create_worker();
82         const rxsc::test::messages<int> on;
83 
84         std::runtime_error ex("ignore_elements on_error from source");
85 
86         auto xs = sc.make_hot_observable({
87             on.next(150, 1),
88             on.error(250, ex)
89         });
90 
91         WHEN("ignore_elements is applied"){
92 
93             auto res = w.start(
__anonbd4027330302() 94                 [xs]() {
95                     return xs.ignore_elements();
96                 }
97             );
98 
99             THEN("the output contains an error"){
100                 auto required = rxu::to_vector({
101                     on.error(250, ex)
102                 });
103                 auto actual = res.get_observer().messages();
104                 REQUIRE(required == actual);
105             }
106 
107             THEN("there was 1 subscription/unsubscription to the source"){
108                 auto required = rxu::to_vector({
109                     on.subscribe(200, 250)
110                 });
111                 auto actual = xs.subscriptions();
112                 REQUIRE(required == actual);
113             }
114 
115         }
116     }
117 }
118 
119 SCENARIO("ignore_elements - items", "[ignore_elements][operators]"){
120     GIVEN("a source"){
121         auto sc = rxsc::make_test();
122         auto w = sc.create_worker();
123         const rxsc::test::messages<int> on;
124 
125         auto xs = sc.make_hot_observable({
126             on.next(150, 1),
127             on.next(210, 2),
128             on.next(220, 3),
129             on.next(230, 4),
130             on.next(240, 5),
131             on.completed(250)
132         });
133 
134         WHEN("ignore_elements is applied"){
135 
136             auto res = w.start(
__anonbd4027330402() 137                 [xs]() {
138                     return xs.ignore_elements();
139                 }
140             );
141 
142             THEN("the output contains the completion message"){
143                 auto required = rxu::to_vector({
144                     on.completed(250)
145                 });
146                 auto actual = res.get_observer().messages();
147                 REQUIRE(required == actual);
148             }
149 
150             THEN("there was 1 subscription/unsubscription to the source"){
151                 auto required = rxu::to_vector({
152                     on.subscribe(200, 250)
153                 });
154                 auto actual = xs.subscriptions();
155                 REQUIRE(required == actual);
156             }
157 
158         }
159     }
160 }
161