rx_ruby 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitattributes +22 -0
- data/.gitignore +173 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Rakefile +11 -0
- data/examples/aggregate.rb +39 -0
- data/examples/amb.rb +25 -0
- data/examples/ambproto.rb +24 -0
- data/examples/and.rb +26 -0
- data/examples/as_observable.rb +25 -0
- data/examples/average.rb +43 -0
- data/examples/buffer_with_count.rb +44 -0
- data/examples/buffer_with_time.rb +51 -0
- data/examples/case.rb +29 -0
- data/examples/catch.rb +20 -0
- data/examples/catchproto.rb +39 -0
- data/examples/combine_latest.rb +35 -0
- data/examples/combine_latestproto.rb +33 -0
- data/examples/concat.rb +22 -0
- data/examples/concat_all.rb +27 -0
- data/examples/concat_map.rb +61 -0
- data/examples/concat_map_observer.rb +29 -0
- data/examples/concatproto.rb +25 -0
- data/examples/connect.rb +41 -0
- data/examples/contains.rb +37 -0
- data/examples/count.rb +36 -0
- data/examples/create.rb +55 -0
- data/examples/debounce.rb +35 -0
- data/examples/default_if_empty.rb +35 -0
- data/examples/defer.rb +20 -0
- data/examples/delay.rb +49 -0
- data/examples/delay_with_selector.rb +63 -0
- data/examples/dematerialize.rb +22 -0
- data/examples/disposable.rb +12 -0
- data/examples/distinct.rb +43 -0
- data/examples/distinct_until_changed.rb +43 -0
- data/examples/do.rb +59 -0
- data/examples/empty.rb +16 -0
- data/examples/for.rb +26 -0
- data/examples/fork_join.rb +23 -0
- data/examples/from.rb +106 -0
- data/examples/from_array.rb +21 -0
- data/examples/from_callback.rb +21 -0
- data/examples/generate.rb +24 -0
- data/examples/group_join.rb +39 -0
- data/examples/if.rb +46 -0
- data/examples/intervals.rb +26 -0
- data/examples/merge.rb +36 -0
- data/examples/merge_all.rb +27 -0
- data/examples/multicast.rb +32 -0
- data/examples/never.rb +15 -0
- data/examples/of.rb +19 -0
- data/examples/on_error_resume_next.rb +21 -0
- data/examples/pairs.rb +26 -0
- data/examples/publish.rb +79 -0
- data/examples/range.rb +19 -0
- data/examples/reduce.rb +18 -0
- data/examples/repeat.rb +19 -0
- data/examples/return.rb +17 -0
- data/examples/scan.rb +41 -0
- data/examples/start.rb +29 -0
- data/examples/throw.rb +17 -0
- data/examples/time_intervals.rb +28 -0
- data/examples/timer.rb +26 -0
- data/examples/timestamp.rb +28 -0
- data/examples/to_a.rb +23 -0
- data/examples/to_async.rb +26 -0
- data/examples/using.rb +52 -0
- data/examples/when.rb +26 -0
- data/examples/while.rb +25 -0
- data/examples/window_with_time.rb +78 -0
- data/examples/zip.rb +27 -0
- data/examples/zip_array.rb +25 -0
- data/lib/core_ext/enumerable.rb +22 -0
- data/lib/rx_ruby.rb +27 -0
- data/lib/rx_ruby/concurrency/async_lock.rb +57 -0
- data/lib/rx_ruby/concurrency/current_thread_scheduler.rb +75 -0
- data/lib/rx_ruby/concurrency/default_scheduler.rb +51 -0
- data/lib/rx_ruby/concurrency/historical_scheduler.rb +16 -0
- data/lib/rx_ruby/concurrency/immediate_scheduler.rb +68 -0
- data/lib/rx_ruby/concurrency/local_scheduler.rb +39 -0
- data/lib/rx_ruby/concurrency/periodic_scheduler.rb +74 -0
- data/lib/rx_ruby/concurrency/scheduled_item.rb +42 -0
- data/lib/rx_ruby/concurrency/scheduler.rb +150 -0
- data/lib/rx_ruby/concurrency/virtual_time_scheduler.rb +170 -0
- data/lib/rx_ruby/core/async_lock_observer.rb +46 -0
- data/lib/rx_ruby/core/auto_detach_observer.rb +59 -0
- data/lib/rx_ruby/core/checked_observer.rb +66 -0
- data/lib/rx_ruby/core/notification.rb +161 -0
- data/lib/rx_ruby/core/observable.rb +104 -0
- data/lib/rx_ruby/core/observe_on_observer.rb +50 -0
- data/lib/rx_ruby/core/observer.rb +119 -0
- data/lib/rx_ruby/core/scheduled_observer.rb +83 -0
- data/lib/rx_ruby/core/synchronized_observer.rb +47 -0
- data/lib/rx_ruby/core/time_interval.rb +17 -0
- data/lib/rx_ruby/internal/priority_queue.rb +122 -0
- data/lib/rx_ruby/internal/util.rb +9 -0
- data/lib/rx_ruby/joins/active_plan.rb +45 -0
- data/lib/rx_ruby/joins/join_observer.rb +51 -0
- data/lib/rx_ruby/joins/pattern.rb +14 -0
- data/lib/rx_ruby/joins/plan.rb +44 -0
- data/lib/rx_ruby/linq/connectable_observable.rb +34 -0
- data/lib/rx_ruby/linq/observable/_observable_timer_date_and_period.rb +22 -0
- data/lib/rx_ruby/linq/observable/_observable_timer_time_span.rb +14 -0
- data/lib/rx_ruby/linq/observable/_observable_timer_time_span_and_period.rb +20 -0
- data/lib/rx_ruby/linq/observable/aggregate.rb +7 -0
- data/lib/rx_ruby/linq/observable/and.rb +7 -0
- data/lib/rx_ruby/linq/observable/case.rb +15 -0
- data/lib/rx_ruby/linq/observable/concat_all.rb +7 -0
- data/lib/rx_ruby/linq/observable/concat_map.rb +35 -0
- data/lib/rx_ruby/linq/observable/concat_map_observer.rb +43 -0
- data/lib/rx_ruby/linq/observable/contains.rb +28 -0
- data/lib/rx_ruby/linq/observable/debounce.rb +41 -0
- data/lib/rx_ruby/linq/observable/delay.rb +81 -0
- data/lib/rx_ruby/linq/observable/delay_with_selector.rb +64 -0
- data/lib/rx_ruby/linq/observable/do.rb +42 -0
- data/lib/rx_ruby/linq/observable/for.rb +13 -0
- data/lib/rx_ruby/linq/observable/fork_join.rb +55 -0
- data/lib/rx_ruby/linq/observable/from.rb +34 -0
- data/lib/rx_ruby/linq/observable/group_join.rb +108 -0
- data/lib/rx_ruby/linq/observable/if.rb +17 -0
- data/lib/rx_ruby/linq/observable/interval.rb +5 -0
- data/lib/rx_ruby/linq/observable/multicast.rb +14 -0
- data/lib/rx_ruby/linq/observable/of.rb +11 -0
- data/lib/rx_ruby/linq/observable/pairs.rb +7 -0
- data/lib/rx_ruby/linq/observable/pluck.rb +7 -0
- data/lib/rx_ruby/linq/observable/publish.rb +11 -0
- data/lib/rx_ruby/linq/observable/start.rb +7 -0
- data/lib/rx_ruby/linq/observable/time_interval.rb +15 -0
- data/lib/rx_ruby/linq/observable/timer.rb +26 -0
- data/lib/rx_ruby/linq/observable/timestamp.rb +9 -0
- data/lib/rx_ruby/linq/observable/to_async.rb +40 -0
- data/lib/rx_ruby/linq/observable/when.rb +36 -0
- data/lib/rx_ruby/linq/observable/while.rb +41 -0
- data/lib/rx_ruby/operators/aggregates.rb +611 -0
- data/lib/rx_ruby/operators/creation.rb +220 -0
- data/lib/rx_ruby/operators/multiple.rb +735 -0
- data/lib/rx_ruby/operators/single.rb +399 -0
- data/lib/rx_ruby/operators/standard_query_operators.rb +279 -0
- data/lib/rx_ruby/operators/synchronization.rb +47 -0
- data/lib/rx_ruby/operators/time.rb +120 -0
- data/lib/rx_ruby/subjects/async_subject.rb +161 -0
- data/lib/rx_ruby/subjects/behavior_subject.rb +149 -0
- data/lib/rx_ruby/subjects/replay_subject.rb +39 -0
- data/lib/rx_ruby/subjects/subject.rb +131 -0
- data/lib/rx_ruby/subjects/subject_extensions.rb +45 -0
- data/lib/rx_ruby/subscriptions/composite_subscription.rb +91 -0
- data/lib/rx_ruby/subscriptions/ref_count_subscription.rb +88 -0
- data/lib/rx_ruby/subscriptions/scheduled_subscription.rb +32 -0
- data/lib/rx_ruby/subscriptions/serial_subscription.rb +60 -0
- data/lib/rx_ruby/subscriptions/single_assignment_subscription.rb +64 -0
- data/lib/rx_ruby/subscriptions/subscription.rb +56 -0
- data/lib/rx_ruby/testing/cold_observable.rb +45 -0
- data/lib/rx_ruby/testing/hot_observable.rb +47 -0
- data/lib/rx_ruby/testing/mock_observer.rb +33 -0
- data/lib/rx_ruby/testing/reactive_test.rb +94 -0
- data/lib/rx_ruby/testing/recorded.rb +17 -0
- data/lib/rx_ruby/testing/test_scheduler.rb +96 -0
- data/lib/rx_ruby/testing/test_subscription.rb +22 -0
- data/lib/rx_ruby/version.rb +3 -0
- data/license.txt +13 -0
- data/readme.md +152 -0
- data/rx_ruby.gemspec +22 -0
- data/test/rx_ruby/concurrency/helpers/historical_virtual_scheduler_helper.rb +135 -0
- data/test/rx_ruby/concurrency/helpers/immediate_local_scheduler_helper.rb +51 -0
- data/test/rx_ruby/concurrency/test_async_lock.rb +56 -0
- data/test/rx_ruby/concurrency/test_current_thread_scheduler.rb +44 -0
- data/test/rx_ruby/concurrency/test_default_scheduler.rb +44 -0
- data/test/rx_ruby/concurrency/test_historical_scheduler.rb +18 -0
- data/test/rx_ruby/concurrency/test_immediate_scheduler.rb +53 -0
- data/test/rx_ruby/concurrency/test_local_scheduler.rb +12 -0
- data/test/rx_ruby/concurrency/test_periodic_scheduler.rb +53 -0
- data/test/rx_ruby/concurrency/test_scheduled_item.rb +50 -0
- data/test/rx_ruby/concurrency/test_scheduler.rb +128 -0
- data/test/rx_ruby/concurrency/test_virtual_time_scheduler.rb +14 -0
- data/test/rx_ruby/core/test_notification.rb +129 -0
- data/test/rx_ruby/core/test_observable_creation.rb +483 -0
- data/test/rx_ruby/core/test_observer.rb +634 -0
- data/test/rx_ruby/internal/test_priority_queue.rb +71 -0
- data/test/rx_ruby/subscriptions/test_composite_subscription.rb +116 -0
- data/test/rx_ruby/subscriptions/test_serial_subscription.rb +62 -0
- data/test/rx_ruby/subscriptions/test_singleassignment_subscription.rb +61 -0
- data/test/rx_ruby/subscriptions/test_subscription.rb +27 -0
- data/test/test_helper.rb +11 -0
- metadata +291 -0
@@ -0,0 +1,483 @@
|
|
1
|
+
# Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class TestObservableCreation < Minitest::Test
|
6
|
+
include RxRuby::ReactiveTest
|
7
|
+
|
8
|
+
# Create Methods
|
9
|
+
|
10
|
+
def test_create_next
|
11
|
+
scheduler = RxRuby::TestScheduler.new
|
12
|
+
|
13
|
+
res = scheduler.configure do
|
14
|
+
RxRuby::Observable.create do |obs|
|
15
|
+
obs.on_next 1
|
16
|
+
obs.on_next 2
|
17
|
+
RxRuby::Subscription.empty
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_messages [on_next(200, 1), on_next(200, 2)], res.messages
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_create_next_nil
|
25
|
+
scheduler = RxRuby::TestScheduler.new
|
26
|
+
|
27
|
+
res = scheduler.configure do
|
28
|
+
RxRuby::Observable.create do |obs|
|
29
|
+
obs.on_next 1
|
30
|
+
obs.on_next 2
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_messages [on_next(200, 1), on_next(200, 2)], res.messages
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_create_completed
|
39
|
+
scheduler = RxRuby::TestScheduler.new
|
40
|
+
|
41
|
+
res = scheduler.configure do
|
42
|
+
RxRuby::Observable.create do |obs|
|
43
|
+
obs.on_completed
|
44
|
+
obs.on_next 100
|
45
|
+
obs.on_error RuntimeError.new
|
46
|
+
obs.on_completed
|
47
|
+
nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
assert_messages [on_completed(200)], res.messages
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_create_error
|
55
|
+
err = RuntimeError.new
|
56
|
+
scheduler = RxRuby::TestScheduler.new
|
57
|
+
|
58
|
+
res = scheduler.configure do
|
59
|
+
RxRuby::Observable.create do |obs|
|
60
|
+
obs.on_error err
|
61
|
+
obs.on_next 100
|
62
|
+
obs.on_error RuntimeError.new
|
63
|
+
obs.on_completed
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
assert_messages [on_error(200, err)], res.messages
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_create_unsubscribe
|
72
|
+
err = RuntimeError.new
|
73
|
+
scheduler = RxRuby::TestScheduler.new
|
74
|
+
|
75
|
+
res = scheduler.configure do
|
76
|
+
RxRuby::Observable.create do |obs|
|
77
|
+
stopped = false
|
78
|
+
|
79
|
+
obs.on_next 1
|
80
|
+
obs.on_next 2
|
81
|
+
|
82
|
+
scheduler.schedule_relative(600, lambda {
|
83
|
+
obs.on_next 3 unless stopped
|
84
|
+
})
|
85
|
+
|
86
|
+
scheduler.schedule_relative(700, lambda {
|
87
|
+
obs.on_next 4 unless stopped
|
88
|
+
})
|
89
|
+
|
90
|
+
scheduler.schedule_relative(900, lambda {
|
91
|
+
obs.on_next 5 unless stopped
|
92
|
+
})
|
93
|
+
|
94
|
+
scheduler.schedule_relative(1100, lambda {
|
95
|
+
obs.on_next 6 unless stopped
|
96
|
+
})
|
97
|
+
|
98
|
+
RxRuby::Subscription.create { stopped = true }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
msgs = [
|
103
|
+
on_next(200, 1),
|
104
|
+
on_next(200, 2),
|
105
|
+
on_next(800, 3),
|
106
|
+
on_next(900, 4)
|
107
|
+
]
|
108
|
+
assert_messages msgs, res.messages
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_create_observer_raises
|
112
|
+
assert_raises(RuntimeError) do
|
113
|
+
|
114
|
+
observable = RxRuby::Observable.create do |obs|
|
115
|
+
obs.on_next 1
|
116
|
+
nil
|
117
|
+
end
|
118
|
+
|
119
|
+
observer = RxRuby::Observer.configure do |o|
|
120
|
+
o.on_next {|x| raise RuntimeError.new }
|
121
|
+
end
|
122
|
+
|
123
|
+
observable.subscribe observer
|
124
|
+
end
|
125
|
+
|
126
|
+
assert_raises(RuntimeError) do
|
127
|
+
|
128
|
+
observable = RxRuby::Observable.create do |obs|
|
129
|
+
obs.on_error RuntimeError.new
|
130
|
+
nil
|
131
|
+
end
|
132
|
+
|
133
|
+
observer = RxRuby::Observer.configure do |o|
|
134
|
+
o.on_error {|err| raise RuntimeError.new }
|
135
|
+
end
|
136
|
+
|
137
|
+
observable.subscribe observer
|
138
|
+
end
|
139
|
+
|
140
|
+
assert_raises(RuntimeError) do
|
141
|
+
|
142
|
+
observable = RxRuby::Observable.create do |obs|
|
143
|
+
obs.on_completed
|
144
|
+
nil
|
145
|
+
end
|
146
|
+
|
147
|
+
observer = RxRuby::Observer.configure do |o|
|
148
|
+
o.on_completed { raise RuntimeError.new }
|
149
|
+
end
|
150
|
+
|
151
|
+
observable.subscribe observer
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# Defer Method tests
|
156
|
+
|
157
|
+
def test_defer_complete
|
158
|
+
scheduler = RxRuby::TestScheduler.new
|
159
|
+
|
160
|
+
invoked = 0
|
161
|
+
xs = nil
|
162
|
+
|
163
|
+
res = scheduler.configure do
|
164
|
+
RxRuby::Observable.defer do
|
165
|
+
invoked += 1
|
166
|
+
|
167
|
+
xs = scheduler.create_cold_observable(
|
168
|
+
on_next(100, scheduler.clock),
|
169
|
+
on_completed(200)
|
170
|
+
)
|
171
|
+
xs
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
msgs = [on_next(300, 200), on_completed(400)]
|
176
|
+
assert_messages msgs, res.messages
|
177
|
+
|
178
|
+
assert_equal 1, invoked
|
179
|
+
|
180
|
+
assert_subscriptions [subscribe(200, 400)], xs.subscriptions
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_defer_error
|
184
|
+
scheduler = RxRuby::TestScheduler.new
|
185
|
+
|
186
|
+
invoked = 0
|
187
|
+
xs = nil
|
188
|
+
err = RuntimeError.new
|
189
|
+
|
190
|
+
res = scheduler.configure do
|
191
|
+
RxRuby::Observable.defer do
|
192
|
+
invoked += 1
|
193
|
+
|
194
|
+
xs = scheduler.create_cold_observable(
|
195
|
+
on_next(100, scheduler.clock),
|
196
|
+
on_error(200, err)
|
197
|
+
)
|
198
|
+
xs
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
msgs = [on_next(300, 200), on_error(400, err)]
|
203
|
+
assert_messages msgs, res.messages
|
204
|
+
|
205
|
+
assert_equal 1, invoked
|
206
|
+
|
207
|
+
assert_subscriptions [subscribe(200, 400)], xs.subscriptions
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_defer_unsubscribe
|
211
|
+
scheduler = RxRuby::TestScheduler.new
|
212
|
+
|
213
|
+
invoked = 0
|
214
|
+
xs = nil
|
215
|
+
|
216
|
+
res = scheduler.configure do
|
217
|
+
RxRuby::Observable.defer do
|
218
|
+
invoked += 1
|
219
|
+
|
220
|
+
xs = scheduler.create_cold_observable(
|
221
|
+
on_next(100, scheduler.clock),
|
222
|
+
on_next(200, invoked),
|
223
|
+
on_next(1100, 1000)
|
224
|
+
)
|
225
|
+
xs
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
msgs = [on_next(300, 200), on_next(400, 1)]
|
230
|
+
assert_messages msgs, res.messages
|
231
|
+
|
232
|
+
assert_equal 1, invoked
|
233
|
+
|
234
|
+
assert_subscriptions [subscribe(200, 1000)], xs.subscriptions
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_defer_raise
|
238
|
+
scheduler = RxRuby::TestScheduler.new
|
239
|
+
|
240
|
+
invoked = 0
|
241
|
+
err = RuntimeError.new
|
242
|
+
|
243
|
+
res = scheduler.configure do
|
244
|
+
RxRuby::Observable.defer do
|
245
|
+
invoked += 1
|
246
|
+
raise err
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
msgs = [on_error(200, err)]
|
251
|
+
assert_messages msgs, res.messages
|
252
|
+
|
253
|
+
assert_equal 1, invoked
|
254
|
+
end
|
255
|
+
|
256
|
+
# Empty methods
|
257
|
+
|
258
|
+
def test_empty_basic
|
259
|
+
scheduler = RxRuby::TestScheduler.new
|
260
|
+
|
261
|
+
res = scheduler.configure do
|
262
|
+
RxRuby::Observable.empty(scheduler)
|
263
|
+
end
|
264
|
+
|
265
|
+
msgs = [on_completed(201)]
|
266
|
+
assert_messages msgs, res.messages
|
267
|
+
end
|
268
|
+
|
269
|
+
def test_empty_disposed
|
270
|
+
scheduler = RxRuby::TestScheduler.new
|
271
|
+
|
272
|
+
res = scheduler.configure({:disposed => 200}) do
|
273
|
+
RxRuby::Observable.empty(scheduler)
|
274
|
+
end
|
275
|
+
|
276
|
+
msgs = []
|
277
|
+
assert_messages msgs, res.messages
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_empty_observer_raises
|
281
|
+
scheduler = RxRuby::TestScheduler.new
|
282
|
+
|
283
|
+
xs = RxRuby::Observable.empty(scheduler)
|
284
|
+
|
285
|
+
observer = RxRuby::Observer.configure do |obs|
|
286
|
+
obs.on_completed { raise RuntimeError.new }
|
287
|
+
end
|
288
|
+
|
289
|
+
xs.subscribe observer
|
290
|
+
|
291
|
+
assert_raises(RuntimeError) { scheduler.start }
|
292
|
+
end
|
293
|
+
|
294
|
+
# Generate methods
|
295
|
+
|
296
|
+
def test_generate_finite
|
297
|
+
scheduler = RxRuby::TestScheduler.new
|
298
|
+
|
299
|
+
res = scheduler.configure do
|
300
|
+
RxRuby::Observable.generate(
|
301
|
+
0,
|
302
|
+
lambda { |x| return x <= 3 },
|
303
|
+
lambda { |x| return x + 1 },
|
304
|
+
lambda { |x| return x },
|
305
|
+
scheduler)
|
306
|
+
end
|
307
|
+
|
308
|
+
msgs = [
|
309
|
+
on_next(201, 0),
|
310
|
+
on_next(202, 1),
|
311
|
+
on_next(203, 2),
|
312
|
+
on_next(204, 3),
|
313
|
+
on_completed(205)
|
314
|
+
]
|
315
|
+
assert_messages msgs, res.messages
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_generate_condition_raise
|
319
|
+
scheduler = RxRuby::TestScheduler.new
|
320
|
+
err = RuntimeError.new
|
321
|
+
|
322
|
+
res = scheduler.configure do
|
323
|
+
RxRuby::Observable.generate(
|
324
|
+
0,
|
325
|
+
lambda { |x| raise err },
|
326
|
+
lambda { |x| return x + 1 },
|
327
|
+
lambda { |x| return x },
|
328
|
+
scheduler)
|
329
|
+
end
|
330
|
+
|
331
|
+
msgs = [
|
332
|
+
on_error(201, err)
|
333
|
+
]
|
334
|
+
assert_messages msgs, res.messages
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_generate_raise_result_selector
|
338
|
+
scheduler = RxRuby::TestScheduler.new
|
339
|
+
err = RuntimeError.new
|
340
|
+
|
341
|
+
res = scheduler.configure do
|
342
|
+
RxRuby::Observable.generate(
|
343
|
+
0,
|
344
|
+
lambda { |x| return true },
|
345
|
+
lambda { |x| return x + 1 },
|
346
|
+
lambda { |x| raise err },
|
347
|
+
scheduler)
|
348
|
+
end
|
349
|
+
|
350
|
+
msgs = [
|
351
|
+
on_error(201, err)
|
352
|
+
]
|
353
|
+
assert_messages msgs, res.messages
|
354
|
+
end
|
355
|
+
|
356
|
+
def test_generate_raise_iterate
|
357
|
+
scheduler = RxRuby::TestScheduler.new
|
358
|
+
err = RuntimeError.new
|
359
|
+
|
360
|
+
res = scheduler.configure do
|
361
|
+
RxRuby::Observable.generate(
|
362
|
+
0,
|
363
|
+
lambda { |x| return true },
|
364
|
+
lambda { |x| raise err },
|
365
|
+
lambda { |x| return x },
|
366
|
+
scheduler)
|
367
|
+
end
|
368
|
+
|
369
|
+
msgs = [
|
370
|
+
on_next(201, 0),
|
371
|
+
on_error(202, err)
|
372
|
+
]
|
373
|
+
assert_messages msgs, res.messages
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_generate_dispose
|
377
|
+
scheduler = RxRuby::TestScheduler.new
|
378
|
+
|
379
|
+
res = scheduler.configure(:disposed => 203) do
|
380
|
+
RxRuby::Observable.generate(
|
381
|
+
0,
|
382
|
+
lambda { |x| return x <= 3 },
|
383
|
+
lambda { |x| return x + 1 },
|
384
|
+
lambda { |x| return x },
|
385
|
+
scheduler)
|
386
|
+
end
|
387
|
+
|
388
|
+
msgs = [
|
389
|
+
on_next(201, 0),
|
390
|
+
on_next(202, 1),
|
391
|
+
]
|
392
|
+
assert_messages msgs, res.messages
|
393
|
+
end
|
394
|
+
|
395
|
+
# Never methods
|
396
|
+
|
397
|
+
def test_never_basic
|
398
|
+
scheduler = RxRuby::TestScheduler.new
|
399
|
+
|
400
|
+
res = scheduler.configure do
|
401
|
+
RxRuby::Observable.never
|
402
|
+
end
|
403
|
+
|
404
|
+
msgs = []
|
405
|
+
assert_messages msgs, res.messages
|
406
|
+
end
|
407
|
+
|
408
|
+
# Range methods
|
409
|
+
|
410
|
+
def test_range_zero
|
411
|
+
scheduler = RxRuby::TestScheduler.new
|
412
|
+
|
413
|
+
res = scheduler.configure do
|
414
|
+
RxRuby::Observable.range(0, 0, scheduler)
|
415
|
+
end
|
416
|
+
|
417
|
+
msgs = [on_completed(201)]
|
418
|
+
assert_messages msgs, res.messages
|
419
|
+
end
|
420
|
+
|
421
|
+
def test_range_one
|
422
|
+
scheduler = RxRuby::TestScheduler.new
|
423
|
+
|
424
|
+
res = scheduler.configure do
|
425
|
+
RxRuby::Observable.range(0, 1, scheduler)
|
426
|
+
end
|
427
|
+
|
428
|
+
msgs = [on_next(201, 0), on_completed(202)]
|
429
|
+
assert_messages msgs, res.messages
|
430
|
+
end
|
431
|
+
|
432
|
+
def test_range_five
|
433
|
+
scheduler = RxRuby::TestScheduler.new
|
434
|
+
|
435
|
+
res = scheduler.configure do
|
436
|
+
RxRuby::Observable.range(10, 5, scheduler)
|
437
|
+
end
|
438
|
+
|
439
|
+
msgs = [
|
440
|
+
on_next(201, 10),
|
441
|
+
on_next(202, 11),
|
442
|
+
on_next(203, 12),
|
443
|
+
on_next(204, 13),
|
444
|
+
on_next(205, 14),
|
445
|
+
on_completed(206)
|
446
|
+
]
|
447
|
+
assert_messages msgs, res.messages
|
448
|
+
end
|
449
|
+
|
450
|
+
def range_dispose
|
451
|
+
scheduler = RxRuby::TestScheduler.new
|
452
|
+
|
453
|
+
res = scheduler.configure(:dispose => 204) do
|
454
|
+
RxRuby::Observable.range(-10, 5, scheduler)
|
455
|
+
end
|
456
|
+
|
457
|
+
msgs = [
|
458
|
+
on_next(201, -10),
|
459
|
+
on_next(202, -9),
|
460
|
+
on_next(203, -8),
|
461
|
+
]
|
462
|
+
assert_messages msgs, res.messages
|
463
|
+
end
|
464
|
+
|
465
|
+
# Repeat methods
|
466
|
+
|
467
|
+
=begin
|
468
|
+
def test_repeat_value_count_zero
|
469
|
+
scheduler = RxRuby::TestScheduler.new
|
470
|
+
|
471
|
+
res = scheduler.configure(:dispose => 204) do
|
472
|
+
RxRuby::Observable.repeat(42, 0, scheduler)
|
473
|
+
end
|
474
|
+
|
475
|
+
msgs = [
|
476
|
+
on_completed(201)
|
477
|
+
]
|
478
|
+
assert_messages msgs, res.messages
|
479
|
+
end
|
480
|
+
=end
|
481
|
+
|
482
|
+
|
483
|
+
end
|