From 7f0c0e0d92ae6f0c4fba072babdc0afa89cf964b Mon Sep 17 00:00:00 2001 From: Niklas Baudy Date: Thu, 24 Aug 2017 23:52:13 +0200 Subject: [PATCH 1/2] 2.x: Add assertValuesOnly to BaseTestConsumer. --- .../reactivex/observers/BaseTestConsumer.java | 13 ++++++ .../reactivex/observers/TestObserverTest.java | 43 +++++++++++++++++++ .../subscribers/TestSubscriberTest.java | 43 +++++++++++++++++++ 3 files changed, 99 insertions(+) diff --git a/src/main/java/io/reactivex/observers/BaseTestConsumer.java b/src/main/java/io/reactivex/observers/BaseTestConsumer.java index 6e1693bb18..06dbef1922 100644 --- a/src/main/java/io/reactivex/observers/BaseTestConsumer.java +++ b/src/main/java/io/reactivex/observers/BaseTestConsumer.java @@ -522,6 +522,19 @@ public final U assertValues(T... values) { return (U)this; } + /** + * Assert that the TestObserver/TestSubscriber received only the specified values in the specified order without terminating. + * @param values the values expected + * @return this; + */ + @SuppressWarnings("unchecked") + public final U assertValuesOnly(T... values) { + return assertSubscribed() + .assertValues(values) + .assertNoErrors() + .assertNotComplete(); + } + /** * Assert that the TestObserver/TestSubscriber received only the specified values in any order. *

This helps asserting when the order of the values is not guaranteed, i.e., when merging diff --git a/src/test/java/io/reactivex/observers/TestObserverTest.java b/src/test/java/io/reactivex/observers/TestObserverTest.java index 095e3d171f..5bfedc5b9d 100644 --- a/src/test/java/io/reactivex/observers/TestObserverTest.java +++ b/src/test/java/io/reactivex/observers/TestObserverTest.java @@ -1439,4 +1439,47 @@ public void withTag() { assertTrue(ex.toString(), ex.toString().contains("testing with item=2")); } } + + @Test + public void assertValuesOnlyWantsOnlyValues() { + TestObserver to = TestObserver.create(); + to.onSubscribe(Disposables.empty()); + to.assertValuesOnly(); + + to.onNext(5); + to.assertValuesOnly(5); + + to.onNext(-1); + to.assertValuesOnly(5, -1); + } + + @Test + public void assertValuesOnlyThrowsWhenCompleted() { + TestObserver to = TestObserver.create(); + to.onSubscribe(Disposables.empty()); + + to.onComplete(); + + try { + to.assertValuesOnly(); + fail(); + } catch (AssertionError ex) { + // expected + } + } + + @Test + public void assertValuesOnlyThrowsWhenErrored() { + TestObserver to = TestObserver.create(); + to.onSubscribe(Disposables.empty()); + + to.onError(new TestException()); + + try { + to.assertValuesOnly(); + fail(); + } catch (AssertionError ex) { + // expected + } + } } diff --git a/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java b/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java index 470f5a2308..0b397a7a68 100644 --- a/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java +++ b/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java @@ -1997,4 +1997,47 @@ public void waitStrategyRuns() { ws.run(); } } + + @Test + public void assertValuesOnlyWantsOnlyValues() { + TestSubscriber ts = TestSubscriber.create(); + ts.onSubscribe(new BooleanSubscription()); + ts.assertValuesOnly(); + + ts.onNext(5); + ts.assertValuesOnly(5); + + ts.onNext(-1); + ts.assertValuesOnly(5, -1); + } + + @Test + public void assertValuesOnlyThrowsWhenCompleted() { + TestSubscriber ts = TestSubscriber.create(); + ts.onSubscribe(new BooleanSubscription()); + + ts.onComplete(); + + try { + ts.assertValuesOnly(); + fail(); + } catch (AssertionError ex) { + // expected + } + } + + @Test + public void assertValuesOnlyThrowsWhenErrored() { + TestSubscriber ts = TestSubscriber.create(); + ts.onSubscribe(new BooleanSubscription()); + + ts.onError(new TestException()); + + try { + ts.assertValuesOnly(); + fail(); + } catch (AssertionError ex) { + // expected + } + } } From dc261cd28681275f5990a0df2a500b908566adc5 Mon Sep 17 00:00:00 2001 From: Niklas Baudy Date: Fri, 25 Aug 2017 08:40:54 +0200 Subject: [PATCH 2/2] Address comments. --- .../reactivex/observers/BaseTestConsumer.java | 2 ++ .../reactivex/observers/TestObserverTest.java | 21 ++++++++++++++++++- .../subscribers/TestSubscriberTest.java | 21 ++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/reactivex/observers/BaseTestConsumer.java b/src/main/java/io/reactivex/observers/BaseTestConsumer.java index 06dbef1922..cebb70d7c0 100644 --- a/src/main/java/io/reactivex/observers/BaseTestConsumer.java +++ b/src/main/java/io/reactivex/observers/BaseTestConsumer.java @@ -526,8 +526,10 @@ public final U assertValues(T... values) { * Assert that the TestObserver/TestSubscriber received only the specified values in the specified order without terminating. * @param values the values expected * @return this; + * @since 2.1.4 */ @SuppressWarnings("unchecked") + @Experimental public final U assertValuesOnly(T... values) { return assertSubscribed() .assertValues(values) diff --git a/src/test/java/io/reactivex/observers/TestObserverTest.java b/src/test/java/io/reactivex/observers/TestObserverTest.java index 5bfedc5b9d..2a34a98650 100644 --- a/src/test/java/io/reactivex/observers/TestObserverTest.java +++ b/src/test/java/io/reactivex/observers/TestObserverTest.java @@ -1441,7 +1441,7 @@ public void withTag() { } @Test - public void assertValuesOnlyWantsOnlyValues() { + public void assertValuesOnly() { TestObserver to = TestObserver.create(); to.onSubscribe(Disposables.empty()); to.assertValuesOnly(); @@ -1453,6 +1453,25 @@ public void assertValuesOnlyWantsOnlyValues() { to.assertValuesOnly(5, -1); } + @Test + public void assertValuesOnlyThrowsOnUnexpectedValue() { + TestObserver to = TestObserver.create(); + to.onSubscribe(Disposables.empty()); + to.assertValuesOnly(); + + to.onNext(5); + to.assertValuesOnly(5); + + to.onNext(-1); + + try { + to.assertValuesOnly(5); + fail(); + } catch (AssertionError ex) { + // expected + } + } + @Test public void assertValuesOnlyThrowsWhenCompleted() { TestObserver to = TestObserver.create(); diff --git a/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java b/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java index 0b397a7a68..39a384168d 100644 --- a/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java +++ b/src/test/java/io/reactivex/subscribers/TestSubscriberTest.java @@ -1999,7 +1999,7 @@ public void waitStrategyRuns() { } @Test - public void assertValuesOnlyWantsOnlyValues() { + public void assertValuesOnly() { TestSubscriber ts = TestSubscriber.create(); ts.onSubscribe(new BooleanSubscription()); ts.assertValuesOnly(); @@ -2011,6 +2011,25 @@ public void assertValuesOnlyWantsOnlyValues() { ts.assertValuesOnly(5, -1); } + @Test + public void assertValuesOnlyThrowsOnUnexpectedValue() { + TestSubscriber ts = TestSubscriber.create(); + ts.onSubscribe(new BooleanSubscription()); + ts.assertValuesOnly(); + + ts.onNext(5); + ts.assertValuesOnly(5); + + ts.onNext(-1); + + try { + ts.assertValuesOnly(5); + fail(); + } catch (AssertionError ex) { + // expected + } + } + @Test public void assertValuesOnlyThrowsWhenCompleted() { TestSubscriber ts = TestSubscriber.create();