package com.kickstarter.libs.rx.transformers; import android.util.Pair; import com.kickstarter.KSRobolectricTestCase; import org.junit.Test; import rx.Observable; import rx.observers.TestSubscriber; import rx.subjects.PublishSubject; public class TakePairWhenTransformerTest extends KSRobolectricTestCase { @Test public void testPairTakeWhen_sourceEmitsFirst() { final PublishSubject<Integer> source = PublishSubject.create(); final PublishSubject<String> sample = PublishSubject.create(); final Observable<Pair<Integer, String>> pair = source.compose(Transformers.takePairWhen(sample)); final TestSubscriber<Pair<Integer, String>> resultTest = TestSubscriber.create(); pair.subscribe(resultTest); source.onNext(1); resultTest.assertNoValues(); source.onNext(2); resultTest.assertNoValues(); sample.onNext("a"); resultTest.assertValues(Pair.create(2, "a")); sample.onNext("b"); resultTest.assertValues(Pair.create(2, "a"), Pair.create(2, "b")); source.onNext(3); resultTest.assertValues(Pair.create(2, "a"), Pair.create(2, "b")); sample.onNext("c"); resultTest.assertValues(Pair.create(2, "a"), Pair.create(2, "b"), Pair.create(3, "c")); } @Test public void testPairTakeWhen_sourceEmitsSecond() { final PublishSubject<Integer> source = PublishSubject.create(); final PublishSubject<String> sample = PublishSubject.create(); final Observable<Pair<Integer, String>> pair = source.compose(Transformers.takePairWhen(sample)); final TestSubscriber<Pair<Integer, String>> resultTest = TestSubscriber.create(); pair.subscribe(resultTest); sample.onNext("a"); resultTest.assertNoValues(); sample.onNext("b"); resultTest.assertNoValues(); source.onNext(1); resultTest.assertNoValues(); sample.onNext("c"); resultTest.assertValues(Pair.create(1, "c")); source.onNext(2); resultTest.assertValues(Pair.create(1, "c")); sample.onNext("d"); resultTest.assertValues(Pair.create(1, "c"), Pair.create(2, "d")); } }