Skip to content

Commit

Permalink
2.x: Verify same onNext / onError null behavior across all Subjects a…
Browse files Browse the repository at this point in the history
…nd Processors (#4606)
  • Loading branch information
vanniktech authored and akarnokd committed Sep 26, 2016
1 parent 62612ab commit c19e16e
Show file tree
Hide file tree
Showing 11 changed files with 210 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/main/java/io/reactivex/subjects/PublishSubject.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<T> s : subscribers.get()) {
Expand Down
26 changes: 25 additions & 1 deletion src/test/java/io/reactivex/processors/AsyncProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -419,4 +419,28 @@ public void fusionOfflie() {
.assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueSubscription.ASYNC))
.assertResult(1);
}
}

@Test
public void onNextNull() {
final AsyncProcessor<Object> 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<Object> 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.");
}
}
26 changes: 25 additions & 1 deletion src/test/java/io/reactivex/processors/BehaviorProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -559,4 +559,28 @@ public void testCurrentStateMethodsError() {
assertNull(as.getValue());
assertTrue(as.getThrowable() instanceof TestException);
}
}

@Test
public void onNextNull() {
final BehaviorProcessor<Object> 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<Object> 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.");
}
}
26 changes: 25 additions & 1 deletion src/test/java/io/reactivex/processors/PublishProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -615,4 +615,28 @@ public void run() {
TestHelper.race(r1, r2, Schedulers.io());
}
}
}

@Test
public void onNextNull() {
final PublishProcessor<Object> 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<Object> 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.");
}
}
26 changes: 25 additions & 1 deletion src/test/java/io/reactivex/processors/ReplayProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1016,4 +1016,28 @@ public void peekStateTimeAndSizeValue() {

assertNull(rp.getValues(new Integer[2])[0]);
}
}

@Test
public void onNextNull() {
final ReplayProcessor<Object> 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<Object> 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.");
}
}
12 changes: 6 additions & 6 deletions src/test/java/io/reactivex/processors/UnicastProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -129,23 +129,23 @@ public void zeroCapacityHint() {

@Test
public void onNextNull() {
final UnicastProcessor<Object> up = UnicastProcessor.create();
final UnicastProcessor<Object> 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.");
}

@Test
public void onErrorNull() {
final UnicastProcessor<Object> up = UnicastProcessor.create();
final UnicastProcessor<Object> 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.");
Expand Down
25 changes: 24 additions & 1 deletion src/test/java/io/reactivex/subjects/AsyncSubjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -420,4 +420,27 @@ public void fusionOfflie() {
.assertResult(1);
}

}
@Test
public void onNextNull() {
final AsyncSubject<Object> 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<Object> 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.");
}
}
26 changes: 25 additions & 1 deletion src/test/java/io/reactivex/subjects/BehaviorSubjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -559,4 +559,28 @@ public void testCurrentStateMethodsError() {
assertNull(as.getValue());
assertTrue(as.getThrowable() instanceof TestException);
}
}

@Test
public void onNextNull() {
final BehaviorSubject<Object> 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<Object> 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.");
}
}
25 changes: 24 additions & 1 deletion src/test/java/io/reactivex/subjects/PublishSubjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -708,4 +708,27 @@ public void subscribedTo() {
ts.assertResult(1, 2);
}

}
@Test
public void onNextNull() {
final PublishSubject<Object> 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<Object> 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.");
}
}
25 changes: 24 additions & 1 deletion src/test/java/io/reactivex/subjects/ReplaySubjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -929,4 +929,27 @@ public void peekStateTimeAndSizeValue() {
assertNull(rp.getValues(new Integer[2])[0]);
}

}
@Test
public void onNextNull() {
final ReplaySubject<Object> 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<Object> 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.");
}
}
12 changes: 6 additions & 6 deletions src/test/java/io/reactivex/subjects/UnicastSubjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -129,23 +129,23 @@ public void zeroCapacityHint() {

@Test
public void onNextNull() {
final UnicastSubject<Object> up = UnicastSubject.create();
final UnicastSubject<Object> 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.");
}

@Test
public void onErrorNull() {
final UnicastSubject<Object> up = UnicastSubject.create();
final UnicastSubject<Object> 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.");
Expand Down

0 comments on commit c19e16e

Please sign in to comment.