Skip to content

Commit 85362eb

Browse files
committed
=tck #384 check for alternative wordings in messages when checking 3.9
1 parent 11469fa commit 85362eb

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

tck/src/main/java/org/reactivestreams/tck/PublisherVerification.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,8 @@ public void required_spec309_requestZeroMustSignalIllegalArgumentException() thr
896896
@Override public void run(Publisher<T> pub) throws Throwable {
897897
final ManualSubscriber<T> sub = env.newManualSubscriber(pub);
898898
sub.request(0);
899-
sub.expectErrorWithMessage(IllegalArgumentException.class, "3.9"); // we do require implementations to mention the rule number at the very least
899+
// we do require implementations to mention the rule number at the very least, or mentioning that the non-negative request is the problem
900+
sub.expectErrorWithMessage(IllegalArgumentException.class, Arrays.asList("3.9", "non-positive subscription request", "zero subscription request"));
900901
}
901902
});
902903
}
@@ -909,7 +910,8 @@ public void run(Publisher<T> pub) throws Throwable {
909910
final ManualSubscriber<T> sub = env.newManualSubscriber(pub);
910911
final Random r = new Random();
911912
sub.request(-r.nextInt(Integer.MAX_VALUE) - 1);
912-
sub.expectErrorWithMessage(IllegalArgumentException.class, "3.9"); // we do require implementations to mention the rule number at the very least
913+
// we do require implementations to mention the rule number at the very least, or mentioning that the non-negative request is the problem
914+
sub.expectErrorWithMessage(IllegalArgumentException.class, Arrays.asList("3.9", "non-positive subscription request", "negative subscription request"));
913915
}
914916
});
915917
}

tck/src/main/java/org/reactivestreams/tck/TestEnvironment.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.reactivestreams.tck.support.SubscriberBufferOverflowException;
1818
import org.reactivestreams.tck.support.Optional;
1919

20+
import java.util.Collections;
2021
import java.util.LinkedList;
2122
import java.util.List;
2223
import java.util.concurrent.ArrayBlockingQueue;
@@ -513,14 +514,24 @@ public void expectCompletion(long timeoutMillis, String errorMsg) throws Interru
513514
public <E extends Throwable> void expectErrorWithMessage(Class<E> expected, String requiredMessagePart) throws Exception {
514515
expectErrorWithMessage(expected, requiredMessagePart, env.defaultTimeoutMillis());
515516
}
517+
public <E extends Throwable> void expectErrorWithMessage(Class<E> expected, List<String> requiredMessagePartAlternatives) throws Exception {
518+
expectErrorWithMessage(expected, requiredMessagePartAlternatives, env.defaultTimeoutMillis());
519+
}
516520

517521
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
518522
public <E extends Throwable> void expectErrorWithMessage(Class<E> expected, String requiredMessagePart, long timeoutMillis) throws Exception {
523+
expectErrorWithMessage(expected, Collections.singletonList(requiredMessagePart), timeoutMillis);
524+
}
525+
public <E extends Throwable> void expectErrorWithMessage(Class<E> expected, List<String> requiredMessagePartAlternatives, long timeoutMillis) throws Exception {
519526
final E err = expectError(expected, timeoutMillis);
520527
final String message = err.getMessage();
521-
assertTrue(message.contains(requiredMessagePart),
528+
529+
boolean contains = false;
530+
for (String requiredMessagePart : requiredMessagePartAlternatives)
531+
if (message.contains(requiredMessagePart)) contains = true; // not short-circuting loop, it is expected to
532+
assertTrue(contains,
522533
String.format("Got expected exception [%s] but missing message part [%s], was: %s",
523-
err.getClass(), requiredMessagePart, err.getMessage()));
534+
err.getClass(), "anyOf: " + requiredMessagePartAlternatives, err.getMessage()));
524535
}
525536

526537
public <E extends Throwable> E expectError(Class<E> expected) throws Exception {

tck/src/test/java/org/reactivestreams/tck/PublisherVerificationTest.java

+40
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,26 @@ public void required_spec309_requestZeroMustSignalIllegalArgumentException_shoul
481481
}, "Expected onError");
482482
}
483483

484+
@Test
485+
public void required_spec309_requestZeroMustSignalIllegalArgumentException_shouldPassWhenFailureIncludesNonPositiveWording() throws Throwable {
486+
customPublisherVerification(new Publisher<Integer>() {
487+
@Override
488+
public void subscribe(final Subscriber<? super Integer> s) {
489+
s.onSubscribe(new Subscription() {
490+
@Override
491+
public void request(long n) {
492+
if (n <= 0) s.onError(new IllegalArgumentException("non-positive subscription request detected, which is illegal!"));
493+
}
494+
495+
@Override
496+
public void cancel() {
497+
// noop
498+
}
499+
});
500+
}
501+
}).required_spec309_requestZeroMustSignalIllegalArgumentException();
502+
}
503+
484504
@Test
485505
public void required_spec309_requestNegativeNumberMustSignalIllegalArgumentException_shouldFailBy_expectingOnError() throws Throwable {
486506
requireTestFailure(new ThrowingRunnable() {
@@ -490,6 +510,26 @@ public void required_spec309_requestNegativeNumberMustSignalIllegalArgumentExcep
490510
}, "Expected onError");
491511
}
492512

513+
@Test
514+
public void required_spec309_requestNegativeNumberMustSignalIllegalArgumentException_shouldPassWhenFailureIncludesNonPositiveWording() throws Throwable {
515+
customPublisherVerification(new Publisher<Integer>() {
516+
@Override
517+
public void subscribe(final Subscriber<? super Integer> s) {
518+
s.onSubscribe(new Subscription() {
519+
@Override
520+
public void request(long n) {
521+
if (n <= 0) s.onError(new IllegalArgumentException("non-positive subscription request detected, which is illegal!"));
522+
}
523+
524+
@Override
525+
public void cancel() {
526+
// noop
527+
}
528+
});
529+
}
530+
}).required_spec309_requestNegativeNumberMustSignalIllegalArgumentException();
531+
}
532+
493533
@Test
494534
public void required_spec312_cancelMustMakeThePublisherToEventuallyStopSignaling_shouldFailBy_havingEmitedMoreThanRequested() throws Throwable {
495535
final ExecutorService pool = Executors.newFixedThreadPool(2);

0 commit comments

Comments
 (0)