package com.kickstarter.libs.rx.transformers;
import org.junit.Test;
import rx.Observable;
import rx.observers.TestSubscriber;
import rx.subjects.PublishSubject;
public class TakeWhenTransformerTest {
@Test
public void testTakeWhen_sourceEmitsFirst() {
final PublishSubject<Integer> source = PublishSubject.create();
final PublishSubject<Void> sample = PublishSubject.create();
final Observable<Integer> result = source.compose(Transformers.takeWhen(sample));
final TestSubscriber<Integer> resultTest = new TestSubscriber<>();
result.subscribe(resultTest);
source.onNext(1);
resultTest.assertNoValues();
source.onNext(2);
resultTest.assertNoValues();
sample.onNext(null);
resultTest.assertValues(2);
sample.onNext(null);
resultTest.assertValues(2, 2);
source.onNext(3);
resultTest.assertValues(2, 2);
sample.onNext(null);
resultTest.assertValues(2, 2, 3);
}
@Test
public void testTakeWhen_sourceEmitsSecond() {
final PublishSubject<Integer> source = PublishSubject.create();
final PublishSubject<Void> sample = PublishSubject.create();
final Observable<Integer> result = source.compose(Transformers.takeWhen(sample));
final TestSubscriber<Integer> resultTest = new TestSubscriber<>();
result.subscribe(resultTest);
sample.onNext(null);
resultTest.assertNoValues();
sample.onNext(null);
resultTest.assertNoValues();
source.onNext(1);
resultTest.assertNoValues();
sample.onNext(null);
resultTest.assertValues(1);
source.onNext(2);
resultTest.assertValues(1);
sample.onNext(null);
resultTest.assertValues(1, 2);
source.onNext(3);
resultTest.assertValues(1, 2);
sample.onNext(null);
resultTest.assertValues(1, 2, 3);
}
}