T - the value type consumedU - the subclass of this BaseTestConsumerpublic abstract class BaseTestConsumer<T,U extends BaseTestConsumer<T,U>> extends Object
TestSubscriber and TestObserver.| Modifier and Type | Field and Description |
|---|---|
protected boolean |
checkSubscriptionOnce |
protected long |
completions
The number of completions.
|
protected CountDownLatch |
done
The latch that indicates an onError or onComplete has been called.
|
protected List<Throwable> |
errors
The list of errors received.
|
protected Thread |
lastThread
The last thread seen by the observer.
|
protected CharSequence |
tag
The optional tag associated with this test consumer.
|
protected boolean |
timeout
Indicates that one of the
awaitX method has timed out. |
protected List<T> |
values
The list of values received.
|
| Constructor and Description |
|---|
BaseTestConsumer() |
| Modifier and Type | Method and Description |
|---|---|
U |
assertComplete()
Assert that this
TestObserver/TestSubscriber received exactly one onComplete event. |
U |
assertEmpty()
Assert that the
TestObserver/TestSubscriber has received a
Disposable/Subscription
via onSubscribe but no other events. |
U |
assertError(@NonNull Class<? extends Throwable> errorClass)
Asserts that this
TestObserver/TestSubscriber received exactly one onError event which is an
instance of the specified errorClass Class. |
U |
assertError(@NonNull Predicate<Throwable> errorPredicate)
Asserts that this
TestObserver/TestSubscriber received exactly one onError event for which
the provided predicate returns true. |
U |
assertError(@NonNull Throwable error)
Assert that this
TestObserver/TestSubscriber received exactly the specified onError event value. |
U |
assertFailure(@NonNull Class<? extends Throwable> error,
T... values)
Assert that the upstream signaled the specified values in order
and then failed with a specific class or subclass of
Throwable. |
U |
assertNoErrors()
Assert that this
TestObserver/TestSubscriber has not received an onError event. |
U |
assertNotComplete()
Assert that this
TestObserver/TestSubscriber has not received an onComplete event. |
U |
assertNoValues()
Assert that this
TestObserver/TestSubscriber has not received any onNext events. |
U |
assertResult(T... values)
Assert that the upstream signaled the specified values in order and
completed normally.
|
protected abstract U |
assertSubscribed()
Assert that the
onSubscribe method was called exactly once. |
U |
assertValue(@NonNull Predicate<T> valuePredicate)
Asserts that this
TestObserver/TestSubscriber received exactly one onNext value for which
the provided predicate returns true. |
U |
assertValue(T value)
Assert that this
TestObserver/TestSubscriber received exactly one onNext value which is equal to
the given value with respect to Objects.equals(Object, Object). |
U |
assertValueAt(int index,
@NonNull Predicate<T> valuePredicate)
Asserts that this
TestObserver/TestSubscriber received an onNext value at the given index
for the provided predicate returns true. |
U |
assertValueAt(int index,
T value)
Asserts that this
TestObserver/TestSubscriber received an onNext value at the given index
which is equal to the given value with respect to null-safe Objects.equals(Object, Object). |
U |
assertValueCount(int count)
Assert that this
TestObserver/TestSubscriber received the specified number onNext events. |
U |
assertValues(T... values)
Assert that the
TestObserver/TestSubscriber received only the specified values in the specified order. |
U |
assertValueSequence(@NonNull Iterable<? extends T> sequence)
Assert that the
TestObserver/TestSubscriber received only the specified sequence of values in the same order. |
U |
assertValuesOnly(T... values)
Assert that the
TestObserver/TestSubscriber received only the specified values in the specified order without terminating. |
U |
await()
Awaits until this
TestObserver/TestSubscriber receives an onError or onComplete events. |
boolean |
await(long time,
@NonNull TimeUnit unit)
Awaits the specified amount of time or until this
TestObserver/TestSubscriber
receives an onError or onComplete events, whichever happens first. |
U |
awaitCount(int atLeast)
Await until the
TestObserver/TestSubscriber receives the given
number of items or terminates by sleeping 10 milliseconds at a time
up to 5000 milliseconds of timeout. |
U |
awaitDone(long time,
@NonNull TimeUnit unit)
Awaits until the internal latch is counted down.
|
protected abstract void |
dispose()
Cancel/dispose this test consumer.
|
protected @NonNull AssertionError |
fail(@NonNull String message)
Fail with the given message and add the sequence of errors as suppressed ones.
|
protected abstract boolean |
isDisposed()
Returns true if this test consumer was cancelled/disposed.
|
static @NonNull String |
valueAndClass(@Nullable Object o)
Appends the class name to a non-
null value or returns "null". |
@NonNull List<T> |
values()
Returns a shared list of received
onNext values or the single onSuccess value. |
U |
withTag(@Nullable CharSequence tag)
Set the tag displayed along with an assertion failure's
other state information.
|
protected final CountDownLatch done
protected long completions
protected Thread lastThread
protected boolean checkSubscriptionOnce
protected CharSequence tag
protected boolean timeout
awaitX method has timed out.@NonNull public final @NonNull List<T> values()
onNext values or the single onSuccess value.
Note that accessing the items via certain methods of the List
interface while the upstream is still actively emitting
more items may result in a ConcurrentModificationException.
The List.size() method will return the number of items
already received by this TestObserver/TestSubscriber in a thread-safe
manner that can be read via List.get(int)) method
(index range of 0 to List.size() - 1).
A view of the returned List can be created via List.subList(int, int)
by using the bounds 0 (inclusive) to List.size() (exclusive) which,
when accessed in a read-only fashion, should be also thread-safe and not throw any
ConcurrentModificationException.
@NonNull protected final @NonNull AssertionError fail(@NonNull @NonNull String message)
Note this is deliberately the only fail method. Most of the times an assertion would fail but it is possible it was due to an exception somewhere. This construct will capture those potential errors and report it along with the original failure.
message - the message to use@NonNull public final U await() throws InterruptedException
TestObserver/TestSubscriber receives an onError or onComplete events.InterruptedException - if the current thread is interrupted while waitingpublic final boolean await(long time,
@NonNull
@NonNull TimeUnit unit)
throws InterruptedException
TestObserver/TestSubscriber
receives an onError or onComplete events, whichever happens first.time - the waiting timeunit - the time unit of the waiting timeTestObserver/TestSubscriber terminated, false if timeout happenedInterruptedException - if the current thread is interrupted while waiting@NonNull public final U assertComplete()
TestObserver/TestSubscriber received exactly one onComplete event.@NonNull public final U assertNotComplete()
TestObserver/TestSubscriber has not received an onComplete event.@NonNull public final U assertNoErrors()
TestObserver/TestSubscriber has not received an onError event.@NonNull public final U assertError(@NonNull @NonNull Throwable error)
TestObserver/TestSubscriber received exactly the specified onError event value.
The comparison is performed via Objects.equals(Object, Object); since most exceptions don't
implement equals(), this assertion may fail. Use the assertError(Class)
overload to test against the class of an error instead of an instance of an error
or assertError(Predicate) to test with different condition.
error - the error to checkassertError(Class),
assertError(Predicate)@NonNull public final U assertError(@NonNull @NonNull Class<? extends Throwable> errorClass)
TestObserver/TestSubscriber received exactly one onError event which is an
instance of the specified errorClass Class.errorClass - the error Class to expect@NonNull public final U assertError(@NonNull @NonNull Predicate<Throwable> errorPredicate)
TestObserver/TestSubscriber received exactly one onError event for which
the provided predicate returns true.errorPredicate - the predicate that receives the error Throwable
and should return true for expected errors.@NonNull public final U assertValue(@NonNull T value)
TestObserver/TestSubscriber received exactly one onNext value which is equal to
the given value with respect to Objects.equals(Object, Object).value - the value to expect@NonNull public final U assertValue(@NonNull @NonNull Predicate<T> valuePredicate)
TestObserver/TestSubscriber received exactly one onNext value for which
the provided predicate returns true.valuePredicate - the predicate that receives the onNext value
and should return true for the expected value.@NonNull public final U assertValueAt(int index, @NonNull T value)
TestObserver/TestSubscriber received an onNext value at the given index
which is equal to the given value with respect to null-safe Objects.equals(Object, Object).
History: 2.1.3 - experimental
index - the position to assert onvalue - the value to expect@NonNull public final U assertValueAt(int index, @NonNull @NonNull Predicate<T> valuePredicate)
TestObserver/TestSubscriber received an onNext value at the given index
for the provided predicate returns true.index - the position to assert onvaluePredicate - the predicate that receives the onNext value
and should return true for the expected value.@NonNull public static @NonNull String valueAndClass(@Nullable @Nullable Object o)
null value or returns "null".o - the object@NonNull public final U assertValueCount(int count)
TestObserver/TestSubscriber received the specified number onNext events.count - the expected number of onNext events@NonNull public final U assertNoValues()
TestObserver/TestSubscriber has not received any onNext events.@SafeVarargs @NonNull public final U assertValues(@NonNull T... values)
TestObserver/TestSubscriber received only the specified values in the specified order.values - the values expected@SafeVarargs @NonNull public final U assertValuesOnly(@NonNull T... values)
TestObserver/TestSubscriber received only the specified values in the specified order without terminating.
History: 2.1.4 - experimental
values - the values expected@NonNull public final U assertValueSequence(@NonNull @NonNull Iterable<? extends T> sequence)
TestObserver/TestSubscriber received only the specified sequence of values in the same order.sequence - the sequence of expected values in order@NonNull protected abstract U assertSubscribed()
onSubscribe method was called exactly once.@SafeVarargs @NonNull public final U assertResult(@NonNull T... values)
values - the expected values, asserted in orderassertFailure(Class, Object...)@SafeVarargs @NonNull public final U assertFailure(@NonNull @NonNull Class<? extends Throwable> error, @NonNull T... values)
Throwable.error - the expected exception (parent) Classvalues - the expected values, asserted in order@NonNull public final U awaitDone(long time, @NonNull @NonNull TimeUnit unit)
If the wait times out or gets interrupted, the TestObserver/TestSubscriber is cancelled.
time - the waiting timeunit - the time unit of the waiting timeRuntimeException - wrapping an InterruptedException if the wait is interrupted@NonNull public final U assertEmpty()
TestObserver/TestSubscriber has received a
Disposable/Subscription
via onSubscribe but no other events.@NonNull public final U withTag(@Nullable @Nullable CharSequence tag)
History: 2.0.7 - experimental
tag - the string to display (null won't print any tag)@NonNull public final U awaitCount(int atLeast)
TestObserver/TestSubscriber receives the given
number of items or terminates by sleeping 10 milliseconds at a time
up to 5000 milliseconds of timeout.
History: 2.0.7 - experimental
atLeast - the number of items expected at leastprotected abstract boolean isDisposed()
protected abstract void dispose()