From 630d3075234a9efaed34a2e9dafda59990672a20 Mon Sep 17 00:00:00 2001 From: Niklas Baudy Date: Mon, 26 Sep 2016 14:16:19 +0200 Subject: [PATCH] 2.x: Verify same onNext / onError null behavior across all Subjects and Processors --- .../io/reactivex/subjects/PublishSubject.java | 2 +- .../processors/AsyncProcessorTest.java | 26 ++++++++++++++++++- .../processors/BehaviorProcessorTest.java | 26 ++++++++++++++++++- .../processors/PublishProcessorTest.java | 26 ++++++++++++++++++- .../processors/ReplayProcessorTest.java | 26 ++++++++++++++++++- .../processors/UnicastProcessorTest.java | 12 ++++----- .../reactivex/subjects/AsyncSubjectTest.java | 25 +++++++++++++++++- .../subjects/BehaviorSubjectTest.java | 26 ++++++++++++++++++- .../subjects/PublishSubjectTest.java | 25 +++++++++++++++++- .../reactivex/subjects/ReplaySubjectTest.java | 25 +++++++++++++++++- .../subjects/UnicastSubjectTest.java | 12 ++++----- 11 files changed, 210 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/reactivex/subjects/PublishSubject.java b/src/main/java/io/reactivex/subjects/PublishSubject.java index 32dfe7b195..a516dcef0e 100644 --- a/src/main/java/io/reactivex/subjects/PublishSubject.java +++ b/src/main/java/io/reactivex/subjects/PublishSubject.java @@ -175,7 +175,7 @@ public void onNext(T t) { return; } if (t == null) { - onError(new NullPointerException("onNext got a null value. Null values are generally not allowed in 2.x operators and sources.")); + onError(new NullPointerException("onNext called with null. Null values are generally not allowed in 2.x operators and sources.")); return; } for (PublishDisposable s : subscribers.get()) { diff --git a/src/test/java/io/reactivex/processors/AsyncProcessorTest.java b/src/test/java/io/reactivex/processors/AsyncProcessorTest.java index e941e2ec54..f51c8d90c3 100644 --- a/src/test/java/io/reactivex/processors/AsyncProcessorTest.java +++ b/src/test/java/io/reactivex/processors/AsyncProcessorTest.java @@ -419,4 +419,28 @@ public void fusionOfflie() { .assertOf(SubscriberFusion.assertFusionMode(QueueSubscription.ASYNC)) .assertResult(1); } -} \ No newline at end of file + + @Test + public void onNextNull() { + final AsyncProcessor p = AsyncProcessor.create(); + + p.onNext(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final AsyncProcessor p = AsyncProcessor.create(); + + p.onError(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/processors/BehaviorProcessorTest.java b/src/test/java/io/reactivex/processors/BehaviorProcessorTest.java index a89e0e0897..580701b90b 100644 --- a/src/test/java/io/reactivex/processors/BehaviorProcessorTest.java +++ b/src/test/java/io/reactivex/processors/BehaviorProcessorTest.java @@ -559,4 +559,28 @@ public void testCurrentStateMethodsError() { assertNull(as.getValue()); assertTrue(as.getThrowable() instanceof TestException); } -} \ No newline at end of file + + @Test + public void onNextNull() { + final BehaviorProcessor p = BehaviorProcessor.create(); + + p.onNext(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final BehaviorProcessor p = BehaviorProcessor.create(); + + p.onError(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/processors/PublishProcessorTest.java b/src/test/java/io/reactivex/processors/PublishProcessorTest.java index 647576bd78..e91c706c38 100644 --- a/src/test/java/io/reactivex/processors/PublishProcessorTest.java +++ b/src/test/java/io/reactivex/processors/PublishProcessorTest.java @@ -615,4 +615,28 @@ public void run() { TestHelper.race(r1, r2, Schedulers.io()); } } -} \ No newline at end of file + + @Test + public void onNextNull() { + final PublishProcessor p = PublishProcessor.create(); + + p.onNext(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final PublishProcessor p = PublishProcessor.create(); + + p.onError(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/processors/ReplayProcessorTest.java b/src/test/java/io/reactivex/processors/ReplayProcessorTest.java index d3a138c06f..b95c0cd706 100644 --- a/src/test/java/io/reactivex/processors/ReplayProcessorTest.java +++ b/src/test/java/io/reactivex/processors/ReplayProcessorTest.java @@ -1016,4 +1016,28 @@ public void peekStateTimeAndSizeValue() { assertNull(rp.getValues(new Integer[2])[0]); } -} \ No newline at end of file + + @Test + public void onNextNull() { + final ReplayProcessor p = ReplayProcessor.create(); + + p.onNext(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final ReplayProcessor p = ReplayProcessor.create(); + + p.onError(null); + + p.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/processors/UnicastProcessorTest.java b/src/test/java/io/reactivex/processors/UnicastProcessorTest.java index b1dfbfd0e8..ba9bc0bf6e 100644 --- a/src/test/java/io/reactivex/processors/UnicastProcessorTest.java +++ b/src/test/java/io/reactivex/processors/UnicastProcessorTest.java @@ -129,11 +129,11 @@ public void zeroCapacityHint() { @Test public void onNextNull() { - final UnicastProcessor up = UnicastProcessor.create(); + final UnicastProcessor p = UnicastProcessor.create(); - up.onNext(null); + p.onNext(null); - up.test() + p.test() .assertNoValues() .assertError(NullPointerException.class) .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); @@ -141,11 +141,11 @@ public void onNextNull() { @Test public void onErrorNull() { - final UnicastProcessor up = UnicastProcessor.create(); + final UnicastProcessor p = UnicastProcessor.create(); - up.onError(null); + p.onError(null); - up.test() + p.test() .assertNoValues() .assertError(NullPointerException.class) .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); diff --git a/src/test/java/io/reactivex/subjects/AsyncSubjectTest.java b/src/test/java/io/reactivex/subjects/AsyncSubjectTest.java index 9519fc0b78..7e88e17021 100644 --- a/src/test/java/io/reactivex/subjects/AsyncSubjectTest.java +++ b/src/test/java/io/reactivex/subjects/AsyncSubjectTest.java @@ -420,4 +420,27 @@ public void fusionOfflie() { .assertResult(1); } -} \ No newline at end of file + @Test + public void onNextNull() { + final AsyncSubject s = AsyncSubject.create(); + + s.onNext(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final AsyncSubject s = AsyncSubject.create(); + + s.onError(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/subjects/BehaviorSubjectTest.java b/src/test/java/io/reactivex/subjects/BehaviorSubjectTest.java index d12cb6bb06..6a50f56ea2 100644 --- a/src/test/java/io/reactivex/subjects/BehaviorSubjectTest.java +++ b/src/test/java/io/reactivex/subjects/BehaviorSubjectTest.java @@ -559,4 +559,28 @@ public void testCurrentStateMethodsError() { assertNull(as.getValue()); assertTrue(as.getThrowable() instanceof TestException); } -} \ No newline at end of file + + @Test + public void onNextNull() { + final BehaviorSubject s = BehaviorSubject.create(); + + s.onNext(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final BehaviorSubject s = BehaviorSubject.create(); + + s.onError(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/subjects/PublishSubjectTest.java b/src/test/java/io/reactivex/subjects/PublishSubjectTest.java index 02442802d8..7a08575a99 100644 --- a/src/test/java/io/reactivex/subjects/PublishSubjectTest.java +++ b/src/test/java/io/reactivex/subjects/PublishSubjectTest.java @@ -708,4 +708,27 @@ public void subscribedTo() { ts.assertResult(1, 2); } -} \ No newline at end of file + @Test + public void onNextNull() { + final PublishSubject s = PublishSubject.create(); + + s.onNext(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final PublishSubject s = PublishSubject.create(); + + s.onError(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/subjects/ReplaySubjectTest.java b/src/test/java/io/reactivex/subjects/ReplaySubjectTest.java index 5d7d53325b..c526d7bb61 100644 --- a/src/test/java/io/reactivex/subjects/ReplaySubjectTest.java +++ b/src/test/java/io/reactivex/subjects/ReplaySubjectTest.java @@ -929,4 +929,27 @@ public void peekStateTimeAndSizeValue() { assertNull(rp.getValues(new Integer[2])[0]); } -} \ No newline at end of file + @Test + public void onNextNull() { + final ReplaySubject s = ReplaySubject.create(); + + s.onNext(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); + } + + @Test + public void onErrorNull() { + final ReplaySubject s = ReplaySubject.create(); + + s.onError(null); + + s.test() + .assertNoValues() + .assertError(NullPointerException.class) + .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources."); + } +} diff --git a/src/test/java/io/reactivex/subjects/UnicastSubjectTest.java b/src/test/java/io/reactivex/subjects/UnicastSubjectTest.java index 29291b9e45..2277a88eaa 100644 --- a/src/test/java/io/reactivex/subjects/UnicastSubjectTest.java +++ b/src/test/java/io/reactivex/subjects/UnicastSubjectTest.java @@ -129,11 +129,11 @@ public void zeroCapacityHint() { @Test public void onNextNull() { - final UnicastSubject up = UnicastSubject.create(); + final UnicastSubject s = UnicastSubject.create(); - up.onNext(null); + s.onNext(null); - up.test() + s.test() .assertNoValues() .assertError(NullPointerException.class) .assertErrorMessage("onNext called with null. Null values are generally not allowed in 2.x operators and sources."); @@ -141,11 +141,11 @@ public void onNextNull() { @Test public void onErrorNull() { - final UnicastSubject up = UnicastSubject.create(); + final UnicastSubject s = UnicastSubject.create(); - up.onError(null); + s.onError(null); - up.test() + s.test() .assertNoValues() .assertError(NullPointerException.class) .assertErrorMessage("onError called with null. Null values are generally not allowed in 2.x operators and sources.");