diff options
Diffstat (limited to 'tests/src/test/kotlin/test/MatchersTest.kt')
-rw-r--r-- | tests/src/test/kotlin/test/MatchersTest.kt | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/tests/src/test/kotlin/test/MatchersTest.kt b/tests/src/test/kotlin/test/MatchersTest.kt index afed69f..ac3021a 100644 --- a/tests/src/test/kotlin/test/MatchersTest.kt +++ b/tests/src/test/kotlin/test/MatchersTest.kt @@ -4,12 +4,11 @@ import com.nhaarman.expect.expect import com.nhaarman.expect.expectErrorWithMessage import org.junit.Test import org.mockito.ArgumentMatcher -import org.mockito.internal.matchers.VarargMatcher import org.mockito.invocation.InvocationOnMock import org.mockito.kotlin.* import org.mockito.stubbing.Answer import java.io.IOException -import kotlin.check +import kotlin.reflect.KClass class MatchersTest : TestBase() { @@ -70,6 +69,14 @@ class MatchersTest : TestBase() { } @Test + fun anyVarargMatching() { + mock<Methods>().apply { + whenever(varargBooleanResult(anyVararg())).thenReturn(true) + expect(varargBooleanResult()).toBe(true) + } + } + + @Test fun anyNull_neverVerifiesAny() { mock<Methods>().apply { nullableString(null) @@ -277,7 +284,7 @@ class MatchersTest : TestBase() { /* Given */ val t = mock<Methods>() // a matcher to check if any of the varargs was equals to "b" - val matcher = VarargAnyMatcher<String, Boolean>({ "b" == it }, true, false) + val matcher = VarargAnyMatcher({ "b" == it }, String::class.java, true, false) /* When */ whenever(t.varargBooleanResult(argThat(matcher))).thenAnswer(matcher) @@ -291,7 +298,7 @@ class MatchersTest : TestBase() { /* Given */ val t = mock<Methods>() // a matcher to check if any of the varargs was equals to "d" - val matcher = VarargAnyMatcher<String, Boolean>({ "d" == it }, true, false) + val matcher = VarargAnyMatcher({ "d" == it }, String::class.java, true, false) /* When */ whenever(t.varargBooleanResult(argThat(matcher))).thenAnswer(matcher) @@ -319,16 +326,20 @@ class MatchersTest : TestBase() { */ private class VarargAnyMatcher<T, R>( private val match: ((T) -> Boolean), + private val clazz: Class<T>, private val success: R, private val failure: R - ) : ArgumentMatcher<T>, VarargMatcher, Answer<R> { + ) : ArgumentMatcher<T>, Answer<R> { private var anyMatched = false override fun matches(t: T): Boolean { - anyMatched = anyMatched or match(t) - return true + @Suppress("UNCHECKED_CAST") // No idea how to solve this better + anyMatched = (t as Array<T>).any(match) + return anyMatched } override fun answer(i: InvocationOnMock) = if (anyMatched) success else failure + + override fun type(): Class<*> = java.lang.reflect.Array.newInstance(clazz, 0).javaClass } -}
\ No newline at end of file +} |