-
Notifications
You must be signed in to change notification settings - Fork 11
Custom Matchers
Ruby Lichtenshtein edited this page Apr 12, 2018
·
3 revisions
- Creating Matcher from scratch.
- Wrapping existing matcher.
- Combining matchers with And/Or.
RxTest provides you function for creating matchers, the function located at:
com.rubylichtenstein.rxtest.matchers.CreateMatcher::createMatcher()
and have 2 parameters
-
assertion: (BaseTestConsumer<T, U>) -> Boolean
- lambda from BaseTestConsumer to boolean, return true for success. -
failMessage: String
- message in case of failure.
Create matcher signature:
import com.rubylichtenstein.rxtest.matchers.*
fun <T, U : BaseTestConsumer<T, U>> createMatcher(assertion: (BaseTestConsumer<T, U>) -> Boolean,
failMessage: String)
: Matcher<BaseTestConsumer<T, U>> {
Examples:
- Assert emitted more than X values
import com.rubylichtenstein.rxtest.matchers.*
fun <T, U : BaseTestConsumer<T, U>> moreValuesThen(count: Int)
= createMatcher<T, U>({ it.values().size > count },
failMessage = "Emited Less values then $count")
Observable.just("Hello", "RxTest")
.test {
it shouldEmit moreValuesThen(1)
}
- Assert emitted less than X values.
import com.rubylichtenstein.rxtest.matchers.*
fun <T, U : BaseTestConsumer<T, U>> lessValuesThen(count: Int)
= createMatcher<T, U>({ it.values().size < count },
failMessage = "More values then $count")
Observable.just("Hello", "RxTest")
.test {
it shouldEmit lessValuesThen(3)
}
- Create matcher for observer that not emitted any values yet.
fun <T, U : BaseTestConsumer<T, U>> noValues() = valueCount<T, U>(0)
Observable.empty<String>()
.test {
it shouldHave noValues()
}
import com.rubylichtenstein.rxtest.matchers.*
fun <T, U : BaseTestConsumer<T, U>> errorOrComplete(error: Throwable)
= error<T, U>(error) or complete<T, U>()
import com.rubylichtenstein.rxtest.matchers.*
fun <T, U : BaseTestConsumer<T, U>> valueCountBetween(min: Int, max: Int)
= moreValuesThen<T, U>(min) and lessValuesThen<T, U>(max)