From 19f24e2daa7595d839443f8047c139cdf788b882 Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 15 May 2016 07:01:57 -0500 Subject: [PATCH 1/4] Documentation example of split doesn't work I'm wasn't super sure I was following your test functions so I just tested the observables by transforming them to and from arrays. Part of the problem is StringObservable.split() seems to always behave like String.split() limit 0 which trims excess empty strings at the end. There also doesn't seem to be a way to change the limit so at least the documentation needs to be updated to show this behavior. Changing the limit in testSplit() doesn't help which is why I went with the array tests. Limit -1 or even something like 6 should preserve the empty strings if you follow the normal String.split(). But that limit could be for something else. I didn't dive that deep in the test code. --- .../java/rx/observables/StringObservableTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/rx/observables/StringObservableTest.java b/src/test/java/rx/observables/StringObservableTest.java index aa3dc76..825d6f3 100644 --- a/src/test/java/rx/observables/StringObservableTest.java +++ b/src/test/java/rx/observables/StringObservableTest.java @@ -145,6 +145,19 @@ public void testSplitOnColon() { public void testSplitOnOh() { testSplit("boo:and:foo", "o", 0, "b", "", ":and:f"); } + + @Test + public void testDocumentationSplit() { + //Documentation Example + //split(["boo:an", "d:foo"], "o") --> ["b", "", ":and:f", "", ""] + + List expected = Observable.from(new String[]{"b", "", ":and:f", "", ""}).toList().toBlocking().single(); + + Observable test = Observable.from(new String[]{"boo:an", "d:foo"}); + List actual = StringObservable.split(test, "o").toList().toBlocking().single(); + + assertArrayEquals(expected.toArray(new String[expected.size()]), new String[actual.size()]); + } @Test public void testSplitOnEmptyStream() { From e366ea3582be2a8e26bc4e5af458a0f255b0d68a Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 15 May 2016 07:35:12 -0500 Subject: [PATCH 2/4] Mistake in assert. It still failed because of different lengths. But now it should behave if they were actually equal. --- src/test/java/rx/observables/StringObservableTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/rx/observables/StringObservableTest.java b/src/test/java/rx/observables/StringObservableTest.java index 825d6f3..dc9b159 100644 --- a/src/test/java/rx/observables/StringObservableTest.java +++ b/src/test/java/rx/observables/StringObservableTest.java @@ -156,7 +156,9 @@ public void testDocumentationSplit() { Observable test = Observable.from(new String[]{"boo:an", "d:foo"}); List actual = StringObservable.split(test, "o").toList().toBlocking().single(); - assertArrayEquals(expected.toArray(new String[expected.size()]), new String[actual.size()]); + String[] expectedArray = expected.toArray(new String[expected.size()]); + String[] actualArray = actual.toArray(new String[actual.size()]); + assertArrayEquals(expectedArray, actualArray); } @Test From cba7e870a53a4075664a446bb9b6f2a82c9d0ef5 Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 15 May 2016 07:38:39 -0500 Subject: [PATCH 3/4] testSplitOnOh to be consistent with documentation I think I have a fix now. --- src/test/java/rx/observables/StringObservableTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/rx/observables/StringObservableTest.java b/src/test/java/rx/observables/StringObservableTest.java index dc9b159..a449e51 100644 --- a/src/test/java/rx/observables/StringObservableTest.java +++ b/src/test/java/rx/observables/StringObservableTest.java @@ -143,7 +143,7 @@ public void testSplitOnColon() { @Test public void testSplitOnOh() { - testSplit("boo:and:foo", "o", 0, "b", "", ":and:f"); + testSplit("boo:and:foo", "o", 0, "b", "", ":and:f", "", ""); } @Test From 5f557380a99a86ba24f24f4c5b4a4030fd06bc0c Mon Sep 17 00:00:00 2001 From: Jake Date: Sun, 15 May 2016 07:44:52 -0500 Subject: [PATCH 4/4] Implementation consistent with documentation It should pass all the current tests. --- .../java/rx/observables/StringObservable.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/rx/observables/StringObservable.java b/src/main/java/rx/observables/StringObservable.java index 0af7817..89869f2 100644 --- a/src/main/java/rx/observables/StringObservable.java +++ b/src/main/java/rx/observables/StringObservable.java @@ -434,24 +434,14 @@ public void onNext(String segment) { leftOver = parts[parts.length - 1]; } - private int emptyPartCount = 0; - /** * when limit == 0 trailing empty parts are not emitted. - * + * * @param part */ private void output(String part) { - if (part.isEmpty()) { - emptyPartCount++; - } - else { - for (; emptyPartCount > 0; emptyPartCount--) - if (!o.isUnsubscribed()) - o.onNext(""); - if (!o.isUnsubscribed()) - o.onNext(part); - } + if (!o.isUnsubscribed()) + o.onNext(part); } }; }