diff --git a/src/main/java/rx/observables/StringObservable.java b/src/main/java/rx/observables/StringObservable.java index 976cd4f..c79cc1a 100644 --- a/src/main/java/rx/observables/StringObservable.java +++ b/src/main/java/rx/observables/StringObservable.java @@ -420,14 +420,16 @@ public Subscriber call(final Subscriber o) { @Override public void onCompleted() { - output(leftOver); + if (leftOver!=null) + output(leftOver); if (!o.isUnsubscribed()) o.onCompleted(); } @Override public void onError(Throwable e) { - output(leftOver); + if (leftOver!=null) + output(leftOver); if (!o.isUnsubscribed()) o.onError(e); } diff --git a/src/test/java/rx/observables/StringObservableTest.java b/src/test/java/rx/observables/StringObservableTest.java index 6a8c7a3..6741d7b 100644 --- a/src/test/java/rx/observables/StringObservableTest.java +++ b/src/test/java/rx/observables/StringObservableTest.java @@ -142,6 +142,24 @@ public void testSplitOnOh() { testSplit("boo:and:foo", "o", 0, "b", "", ":and:f"); } + @Test + public void testSplitOnEmptyStream() { + assertEquals(0, (int) StringObservable.split(Observable.empty(), "\n") + .count().toBlocking().single()); + } + + @Test + public void testSplitOnStreamThatThrowsExceptionImmediately() { + RuntimeException ex = new RuntimeException("boo"); + try { + StringObservable.split(Observable.error(ex), "\n") + .count().toBlocking().single(); + fail(); + } catch (RuntimeException e) { + assertEquals(ex, e); + } + } + public void testSplit(String str, String regex, int limit, String... parts) { testSplit(str, regex, 0, Observable.just(str), parts); for (int i = 0; i < str.length(); i++) {