Skip to content

Commit ff069cc

Browse files
committed
Merge pull request #3677 from zsxwing/negative-check
1.x: negative argument check for skip's count and merge's maxConcurrent
2 parents eb39120 + ddaafc3 commit ff069cc

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

src/main/java/rx/internal/operators/OperatorMerge.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ public static <T> OperatorMerge<T> instance(boolean delayErrors) {
8181
* @return
8282
*/
8383
public static <T> OperatorMerge<T> instance(boolean delayErrors, int maxConcurrent) {
84+
if (maxConcurrent <= 0) {
85+
throw new IllegalArgumentException("maxConcurrent > 0 required but it was " + maxConcurrent);
86+
}
8487
if (maxConcurrent == Integer.MAX_VALUE) {
8588
return instance(delayErrors);
8689
}

src/main/java/rx/internal/operators/OperatorSkip.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ public final class OperatorSkip<T> implements Observable.Operator<T, T> {
3131
final int toSkip;
3232

3333
public OperatorSkip(int n) {
34+
if (n < 0) {
35+
throw new IllegalArgumentException("n >= 0 required but it was " + n);
36+
}
3437
this.toSkip = n;
3538
}
3639

src/test/java/rx/internal/operators/OperatorMergeTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,4 +1333,24 @@ public void testConcurrencyLimit() {
13331333
ts.assertValue(0);
13341334
ts.assertCompleted();
13351335
}
1336+
1337+
@Test
1338+
public void negativeMaxConcurrent() {
1339+
try {
1340+
Observable.merge(Arrays.asList(Observable.just(1), Observable.just(2)), -1);
1341+
fail("Expected IllegalArgumentException");
1342+
} catch (IllegalArgumentException e) {
1343+
assertEquals("maxConcurrent > 0 required but it was -1", e.getMessage());
1344+
}
1345+
}
1346+
1347+
@Test
1348+
public void zeroMaxConcurrent() {
1349+
try {
1350+
Observable.merge(Arrays.asList(Observable.just(1), Observable.just(2)), 0);
1351+
fail("Expected IllegalArgumentException");
1352+
} catch (IllegalArgumentException e) {
1353+
assertEquals("maxConcurrent > 0 required but it was 0", e.getMessage());
1354+
}
1355+
}
13361356
}

src/test/java/rx/internal/operators/OperatorSkipTest.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package rx.internal.operators;
1717

1818
import static org.junit.Assert.assertEquals;
19+
import static org.junit.Assert.fail;
1920
import static org.mockito.Matchers.any;
2021
import static org.mockito.Mockito.mock;
2122
import static org.mockito.Mockito.never;
@@ -37,17 +38,12 @@ public class OperatorSkipTest {
3738

3839
@Test
3940
public void testSkipNegativeElements() {
40-
41-
Observable<String> skip = Observable.just("one", "two", "three").lift(new OperatorSkip<String>(-99));
42-
43-
@SuppressWarnings("unchecked")
44-
Observer<String> observer = mock(Observer.class);
45-
skip.subscribe(observer);
46-
verify(observer, times(1)).onNext("one");
47-
verify(observer, times(1)).onNext("two");
48-
verify(observer, times(1)).onNext("three");
49-
verify(observer, never()).onError(any(Throwable.class));
50-
verify(observer, times(1)).onCompleted();
41+
try {
42+
Observable.just("one", "two", "three").skip(-99);
43+
fail("Expected IllegalArgumentException");
44+
} catch (IllegalArgumentException e) {
45+
assertEquals("n >= 0 required but it was -99", e.getMessage());
46+
}
5147
}
5248

5349
@Test

0 commit comments

Comments
 (0)