@Nonnull @Override public Disposable subscribe(Consumer<E> eventConsumer) { final List<Disposable> disposables = new ArrayList<>(eventSources.size()); for (EventSource<E> eventSource : eventSources) { disposables.add(eventSource.subscribe(eventConsumer)); } return new Disposable() { @Override public void dispose() { for (Disposable disposable : disposables) { disposable.dispose(); } } }; } }
@Nonnull @Override public Disposable subscribe(Consumer<E> eventConsumer) { final List<Disposable> disposables = new ArrayList<>(eventSources.size()); for (EventSource<E> eventSource : eventSources) { disposables.add(eventSource.subscribe(eventConsumer)); } return new Disposable() { @Override public void dispose() { for (Disposable disposable : disposables) { disposable.dispose(); } } }; } }
@Override public void call(final Emitter<E> emitter) { final Disposable disposable = eventSource.subscribe( new Consumer<E>() { @Override public void accept(E value) { emitter.onNext(value); } }); emitter.setCancellation( new Cancellable() { @Override public void cancel() throws Exception { disposable.dispose(); } }); } },
@Override public void subscribe(final ObservableEmitter<E> emitter) throws Exception { final Disposable disposable = eventSource.subscribe( new Consumer<E>() { @Override public void accept(E value) { emitter.onNext(value); } }); emitter.setCancellable( new Cancellable() { @Override public void cancel() throws Exception { disposable.dispose(); } }); } });
@Test public void eventsAreForwardedInOrder() throws Exception { EventSource<Integer> source = RxEventSources.fromObservables(Observable.just(1, 2, 3)); RecordingConsumer<Integer> consumer = new RecordingConsumer<>(); source.subscribe(consumer); consumer.waitForChange(50); consumer.assertValues(1, 2, 3); }
@Test public void eventsAreForwardedInOrder() throws Exception { EventSource<Integer> source = RxEventSources.fromObservables(Observable.just(1, 2, 3)); RecordingConsumer<Integer> consumer = new RecordingConsumer<>(); source.subscribe(consumer); consumer.waitForChange(50); consumer.assertValues(1, 2, 3); }
this.eventSourceDisposable = eventSource.subscribe(eventConsumer);
this.eventSourceDisposable = eventSource.subscribe(eventConsumer);
@Test public void composesMultipleEventSources() { TestEventSource<String> s1 = new TestEventSource<>(); TestEventSource<String> s2 = new TestEventSource<>(); TestEventSource<String> s3 = new TestEventSource<>(); TestEventSource<String> s4 = new TestEventSource<>(); EventSource<String> mergedSource = MergedEventSource.from(s1, s2, s3, s4); RecordingConsumer<String> consumer = new RecordingConsumer<>(); Disposable disposable = mergedSource.subscribe(consumer); s1.send("Hello"); s3.send("World!"); s2.send("We"); s4.send("are"); s1.send("all"); s2.send("one"); s3.send("event"); s1.send("source"); consumer.assertValues("Hello", "World!", "We", "are", "all", "one", "event", "source"); disposable.dispose(); assertThat(s1.disposed, is(true)); assertThat(s2.disposed, is(true)); assertThat(s3.disposed, is(true)); assertThat(s4.disposed, is(true)); }
@Test public void disposePreventsFurtherEvents() throws Exception { PublishSubject<Integer> subject = PublishSubject.create(); EventSource<Integer> source = RxEventSources.fromObservables(subject); RecordingConsumer<Integer> consumer = new RecordingConsumer<>(); Disposable d = source.subscribe(consumer); subject.onNext(1); subject.onNext(2); d.dispose(); subject.onNext(3); consumer.waitForChange(50); consumer.assertValues(1, 2); } }
@Test public void disposePreventsFurtherEvents() throws Exception { PublishSubject<Integer> subject = PublishSubject.create(); EventSource<Integer> source = RxEventSources.fromObservables(subject); RecordingConsumer<Integer> consumer = new RecordingConsumer<>(); Disposable d = source.subscribe(consumer); subject.onNext(1); subject.onNext(2); d.dispose(); subject.onNext(3); consumer.waitForChange(50); consumer.assertValues(1, 2); } }