T
- the value type consumedU
- the subclass of this BaseTestConsumer
public 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()
Constructs a
BaseTestConsumer with CountDownLatch set to 1. |
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.public BaseTestConsumer()
BaseTestConsumer
with CountDownLatch
set to 1.@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 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 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 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 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 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 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 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 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 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 Class<? extends Throwable> error, @NonNull T... values)
Throwable
.error
- the expected exception (parent) Class
values
- the expected values, asserted in order@NonNull public final U awaitDone(long time, @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 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()