Skip to content

Commit

Permalink
Merge pull request #722 from splendo/feature/721-mocking-convenience
Browse files Browse the repository at this point in the history
Added some convenience methods for mocking
  • Loading branch information
Daeda88 authored Aug 2, 2023
2 parents f76aa33 + f7e8ab4 commit d4d35b7
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 90 deletions.
12 changes: 12 additions & 0 deletions test-utils-base/api/androidLib/test-utils-base.api
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,18 @@ public final class com/splendo/kaluga/test/base/mock/MethodMock$Stub : com/splen

public final class com/splendo/kaluga/test/base/mock/MockMethodKt {
public static final fun doReturn (Lcom/splendo/kaluga/test/base/mock/BaseMethodMock$Stub;)V
public static final fun pairParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun quadrupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun quintupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun singleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun suspendPairParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendQuadrupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendQuintupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendSingleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendTripleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendVoidParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun tripleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun voidParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
}

public final class com/splendo/kaluga/test/base/mock/OnKt {
Expand Down
12 changes: 12 additions & 0 deletions test-utils-base/api/jvm/test-utils-base.api
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,18 @@ public final class com/splendo/kaluga/test/base/mock/MethodMock$Stub : com/splen

public final class com/splendo/kaluga/test/base/mock/MockMethodKt {
public static final fun doReturn (Lcom/splendo/kaluga/test/base/mock/BaseMethodMock$Stub;)V
public static final fun pairParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun quadrupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun quintupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun singleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun suspendPairParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendQuadrupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendQuintupleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendSingleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendTripleParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun suspendVoidParametersMock ()Lcom/splendo/kaluga/test/base/mock/SuspendMethodMock;
public static final fun tripleParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
public static final fun voidParametersMock ()Lcom/splendo/kaluga/test/base/mock/MethodMock;
}

public final class com/splendo/kaluga/test/base/mock/OnKt {
Expand Down
106 changes: 106 additions & 0 deletions test-utils-base/src/commonMain/kotlin/mock/MockMethod.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,13 @@ import com.splendo.kaluga.base.collections.concurrentMutableMapOf
import com.splendo.kaluga.test.base.mock.answer.Answer
import com.splendo.kaluga.test.base.mock.answer.BaseAnswer
import com.splendo.kaluga.test.base.mock.answer.SuspendedAnswer
import com.splendo.kaluga.test.base.mock.parameters.PairParameters
import com.splendo.kaluga.test.base.mock.parameters.ParametersSpec
import com.splendo.kaluga.test.base.mock.parameters.QuadrupleParameters
import com.splendo.kaluga.test.base.mock.parameters.QuintupleParameters
import com.splendo.kaluga.test.base.mock.parameters.SingleParameters
import com.splendo.kaluga.test.base.mock.parameters.TripleParameters
import com.splendo.kaluga.test.base.mock.parameters.VoidParameters
import com.splendo.kaluga.test.base.mock.verification.VerificationRule
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
Expand Down Expand Up @@ -283,3 +289,103 @@ class SuspendMethodMock<
}
}
}

typealias VoidParametersMock<Result> = MethodMock<VoidParameters.Matchers, VoidParameters.MatchersOrCaptor, VoidParameters.Values, VoidParameters, Result>
fun <Result> voidParametersMock() = VoidParametersMock<Result>(VoidParameters)

typealias SingleParametersMock<ValueOne, Result> = MethodMock<
SingleParameters.Matchers<ValueOne>,
SingleParameters.MatchersOrCaptor<ValueOne>,
SingleParameters.Values<ValueOne>,
SingleParameters<ValueOne>,
Result,
>
fun <ValueOne, Result> singleParametersMock() = SingleParametersMock<ValueOne, Result>(SingleParameters())

typealias PairParametersMock<ValueOne, ValueTwo, Result> = MethodMock<
PairParameters.Matchers<ValueOne, ValueTwo>,
PairParameters.MatchersOrCaptor<ValueOne, ValueTwo>,
PairParameters.Values<ValueOne, ValueTwo>,
PairParameters<ValueOne, ValueTwo>,
Result,
>
fun <ValueOne, ValueTwo, Result> pairParametersMock() = PairParametersMock<ValueOne, ValueTwo, Result>(PairParameters())

typealias TripleParametersMock<ValueOne, ValueTwo, ValueThree, Result> = MethodMock<
TripleParameters.Matchers<ValueOne, ValueTwo, ValueThree>,
TripleParameters.MatchersOrCaptor<ValueOne, ValueTwo, ValueThree>,
TripleParameters.Values<ValueOne, ValueTwo, ValueThree>,
TripleParameters<ValueOne, ValueTwo, ValueThree>,
Result,
>
fun <ValueOne, ValueTwo, ValueThree, Result> tripleParametersMock() = TripleParametersMock<ValueOne, ValueTwo, ValueThree, Result>(TripleParameters())

typealias QuadrupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, Result> = MethodMock<
QuadrupleParameters.Matchers<ValueOne, ValueTwo, ValueThree, ValueFour>,
QuadrupleParameters.MatchersOrCaptor<ValueOne, ValueTwo, ValueThree, ValueFour>,
QuadrupleParameters.Values<ValueOne, ValueTwo, ValueThree, ValueFour>,
QuadrupleParameters<ValueOne, ValueTwo, ValueThree, ValueFour>,
Result,
>
fun <ValueOne, ValueTwo, ValueThree, ValueFour, Result> quadrupleParametersMock() =
QuadrupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, Result>(QuadrupleParameters())

typealias QuintupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive, Result> = MethodMock<
QuintupleParameters.Matchers<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
QuintupleParameters.MatchersOrCaptor<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
QuintupleParameters.Values<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
QuintupleParameters<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
Result,
>
fun <ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive, Result> quintupleParametersMock() =
QuintupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive, Result>(QuintupleParameters())

typealias SuspendVoidParametersMock<Result> = SuspendMethodMock<VoidParameters.Matchers, VoidParameters.MatchersOrCaptor, VoidParameters.Values, VoidParameters, Result>
fun <Result> suspendVoidParametersMock() = SuspendVoidParametersMock<Result>(VoidParameters)

typealias SuspendSingleParametersMock<ValueOne, Result> = SuspendMethodMock<
SingleParameters.Matchers<ValueOne>,
SingleParameters.MatchersOrCaptor<ValueOne>,
SingleParameters.Values<ValueOne>,
SingleParameters<ValueOne>,
Result,
>
fun <ValueOne, Result> suspendSingleParametersMock() = SuspendSingleParametersMock<ValueOne, Result>(SingleParameters())

typealias SuspendPairParametersMock<ValueOne, ValueTwo, Result> = SuspendMethodMock<
PairParameters.Matchers<ValueOne, ValueTwo>,
PairParameters.MatchersOrCaptor<ValueOne, ValueTwo>,
PairParameters.Values<ValueOne, ValueTwo>,
PairParameters<ValueOne, ValueTwo>,
Result,
>
fun <ValueOne, ValueTwo, Result> suspendPairParametersMock() = SuspendPairParametersMock<ValueOne, ValueTwo, Result>(PairParameters())

typealias SuspendTripleParametersMock<ValueOne, ValueTwo, ValueThree, Result> = SuspendMethodMock<
TripleParameters.Matchers<ValueOne, ValueTwo, ValueThree>,
TripleParameters.MatchersOrCaptor<ValueOne, ValueTwo, ValueThree>,
TripleParameters.Values<ValueOne, ValueTwo, ValueThree>,
TripleParameters<ValueOne, ValueTwo, ValueThree>,
Result,
>
fun <ValueOne, ValueTwo, ValueThree, Result> suspendTripleParametersMock() = SuspendTripleParametersMock<ValueOne, ValueTwo, ValueThree, Result>(TripleParameters())

typealias SuspendQuadrupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, Result> = SuspendMethodMock<
QuadrupleParameters.Matchers<ValueOne, ValueTwo, ValueThree, ValueFour>,
QuadrupleParameters.MatchersOrCaptor<ValueOne, ValueTwo, ValueThree, ValueFour>,
QuadrupleParameters.Values<ValueOne, ValueTwo, ValueThree, ValueFour>,
QuadrupleParameters<ValueOne, ValueTwo, ValueThree, ValueFour>,
Result,
>
fun <ValueOne, ValueTwo, ValueThree, ValueFour, Result> suspendQuadrupleParametersMock() =
SuspendQuadrupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, Result>(QuadrupleParameters())

typealias SuspendQuintupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive, Result> = SuspendMethodMock<
QuintupleParameters.Matchers<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
QuintupleParameters.MatchersOrCaptor<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
QuintupleParameters.Values<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
QuintupleParameters<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive>,
Result,
>
fun <ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive, Result> suspendQuintupleParametersMock() =
SuspendQuintupleParametersMock<ValueOne, ValueTwo, ValueThree, ValueFour, ValueFive, Result>(QuintupleParameters())
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@

package com.splendo.kaluga.test.base.mock.parameters

import com.splendo.kaluga.test.base.mock.MethodMock
import com.splendo.kaluga.test.base.mock.SuspendMethodMock
import com.splendo.kaluga.test.base.mock.answer.Answer
import com.splendo.kaluga.test.base.mock.answer.SuspendedAnswer
import com.splendo.kaluga.test.base.mock.matcher.Captor
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcher
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcherOrCaptor
import com.splendo.kaluga.test.base.mock.on
import com.splendo.kaluga.test.base.mock.pairParametersMock
import com.splendo.kaluga.test.base.mock.suspendPairParametersMock
import kotlin.js.JsName
import kotlin.jvm.JvmName

Expand Down Expand Up @@ -73,13 +73,7 @@ class PairParameters<T0, T1> : ParametersSpec<PairParameters.Matchers<T0, T1>, P
}
}

internal fun <T0, T1, R> ((T0, T1) -> R).asMock() = MethodMock<
PairParameters.Matchers<T0, T1>,
PairParameters.MatchersOrCaptor<T0, T1>,
PairParameters.Values<T0, T1>,
PairParameters<T0, T1>,
R,
>(PairParameters())
internal fun <T0, T1, R> ((T0, T1) -> R).asMock() = pairParametersMock<T0, T1, R>()

fun <T0, T1, R> ((T0, T1) -> R).mockWithDefaultAnswer(defaultAnswer: Answer<PairParameters.Values<T0, T1>, R>) = asMock().also {
it.on(ParameterMatcher.any<T0>(), ParameterMatcher.any<T1>()).doAnswer(defaultAnswer)
Expand Down Expand Up @@ -204,13 +198,7 @@ fun <T0, T1, R : Any> ((T0, T1) -> R?).mock() = mockWithDefaultValue(null)
@JsName("mockPairNonNullable")
fun <T0, T1, R : Any> ((T0, T1) -> R).mock() = asMock()

internal fun <T0, T1, R> (suspend (T0, T1) -> R).asSuspendedMock() = SuspendMethodMock<
PairParameters.Matchers<T0, T1>,
PairParameters.MatchersOrCaptor<T0, T1>,
PairParameters.Values<T0, T1>,
PairParameters<T0, T1>,
R,
>(PairParameters())
internal fun <T0, T1, R> (suspend (T0, T1) -> R).asSuspendedMock() = suspendPairParametersMock<T0, T1, R>()

fun <T0, T1, R> (suspend (T0, T1) -> R).mockWithDefaultAnswer(defaultAnswer: SuspendedAnswer<PairParameters.Values<T0, T1>, R>) = asSuspendedMock()
.also {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@

package com.splendo.kaluga.test.base.mock.parameters

import com.splendo.kaluga.test.base.mock.MethodMock
import com.splendo.kaluga.test.base.mock.SuspendMethodMock
import com.splendo.kaluga.test.base.mock.answer.Answer
import com.splendo.kaluga.test.base.mock.answer.SuspendedAnswer
import com.splendo.kaluga.test.base.mock.matcher.Captor
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcher
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcherOrCaptor
import com.splendo.kaluga.test.base.mock.on
import com.splendo.kaluga.test.base.mock.quadrupleParametersMock
import com.splendo.kaluga.test.base.mock.suspendQuadrupleParametersMock
import kotlin.js.JsName
import kotlin.jvm.JvmName

Expand Down Expand Up @@ -101,13 +101,7 @@ class QuadrupleParameters<T0, T1, T2, T3> :
}
}

internal fun <T0, T1, T2, T3, R> ((T0, T1, T2, T3) -> R).asMock() = MethodMock<
QuadrupleParameters.Matchers<T0, T1, T2, T3>,
QuadrupleParameters.MatchersOrCaptor<T0, T1, T2, T3>,
QuadrupleParameters.Values<T0, T1, T2, T3>,
QuadrupleParameters<T0, T1, T2, T3>,
R,
>(QuadrupleParameters())
internal fun <T0, T1, T2, T3, R> ((T0, T1, T2, T3) -> R).asMock() = quadrupleParametersMock<T0, T1, T2, T3, R>()

fun <T0, T1, T2, T3, R> ((T0, T1, T2, T3) -> R).mockWithDefaultAnswer(
defaultAnswer: Answer<QuadrupleParameters.Values<T0, T1, T2, T3>, R>,
Expand Down Expand Up @@ -245,13 +239,7 @@ fun <T0, T1, T2, T3, R : Any> ((T0, T1, T2, T3) -> R?).mock() = mockWithDefaultV
@JsName("mockQuadrupleNonNullable")
fun <T0, T1, T2, T3, R : Any> ((T0, T1, T2, T3) -> R).mock() = asMock()

internal fun <T0, T1, T2, T3, R> (suspend (T0, T1, T2, T3) -> R).asSuspendedMock() = SuspendMethodMock<
QuadrupleParameters.Matchers<T0, T1, T2, T3>,
QuadrupleParameters.MatchersOrCaptor<T0, T1, T2, T3>,
QuadrupleParameters.Values<T0, T1, T2, T3>,
QuadrupleParameters<T0, T1, T2, T3>,
R,
>(QuadrupleParameters())
internal fun <T0, T1, T2, T3, R> (suspend (T0, T1, T2, T3) -> R).asSuspendedMock() = suspendQuadrupleParametersMock<T0, T1, T2, T3, R>()

fun <T0, T1, T2, T3, R> (suspend (T0, T1, T2, T3) -> R).mockWithDefaultAnswer(
defaultAnswer: SuspendedAnswer<QuadrupleParameters.Values<T0, T1, T2, T3>, R>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@

package com.splendo.kaluga.test.base.mock.parameters

import com.splendo.kaluga.test.base.mock.MethodMock
import com.splendo.kaluga.test.base.mock.SuspendMethodMock
import com.splendo.kaluga.test.base.mock.answer.Answer
import com.splendo.kaluga.test.base.mock.answer.SuspendedAnswer
import com.splendo.kaluga.test.base.mock.matcher.Captor
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcher
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcherOrCaptor
import com.splendo.kaluga.test.base.mock.on
import com.splendo.kaluga.test.base.mock.quintupleParametersMock
import com.splendo.kaluga.test.base.mock.suspendQuintupleParametersMock
import kotlin.js.JsName
import kotlin.jvm.JvmName

Expand Down Expand Up @@ -104,13 +104,7 @@ class QuintupleParameters<T0, T1, T2, T3, T4> : ParametersSpec<
}
}

internal fun <T0, T1, T2, T3, T4, R> ((T0, T1, T2, T3, T4) -> R).asMock() = MethodMock<
QuintupleParameters.Matchers<T0, T1, T2, T3, T4>,
QuintupleParameters.MatchersOrCaptor<T0, T1, T2, T3, T4>,
QuintupleParameters.Values<T0, T1, T2, T3, T4>,
QuintupleParameters<T0, T1, T2, T3, T4>,
R,
>(QuintupleParameters())
internal fun <T0, T1, T2, T3, T4, R> ((T0, T1, T2, T3, T4) -> R).asMock() = quintupleParametersMock<T0, T1, T2, T3, T4, R>()

fun <T0, T1, T2, T3, T4, R> ((T0, T1, T2, T3, T4) -> R).mockWithDefaultAnswer(
defaultAnswer: Answer<QuintupleParameters.Values<T0, T1, T2, T3, T4>, R>,
Expand Down Expand Up @@ -237,13 +231,7 @@ fun <T0, T1, T2, T3, T4, R : Any> ((T0, T1, T2, T3, T4) -> R?).mock() = mockWith
@JsName("mockQuintupleNonNullable")
fun <T0, T1, T2, T3, T4, R : Any> ((T0, T1, T2, T3, T4) -> R).mock() = asMock()

internal fun <T0, T1, T2, T3, T4, R> (suspend (T0, T1, T2, T3, T4) -> R).asSuspendedMock() = SuspendMethodMock<
QuintupleParameters.Matchers<T0, T1, T2, T3, T4>,
QuintupleParameters.MatchersOrCaptor<T0, T1, T2, T3, T4>,
QuintupleParameters.Values<T0, T1, T2, T3, T4>,
QuintupleParameters<T0, T1, T2, T3, T4>,
R,
>(QuintupleParameters())
internal fun <T0, T1, T2, T3, T4, R> (suspend (T0, T1, T2, T3, T4) -> R).asSuspendedMock() = suspendQuintupleParametersMock<T0, T1, T2, T3, T4, R>()

fun <T0, T1, T2, T3, T4, R> (suspend (T0, T1, T2, T3, T4) -> R).mockWithDefaultAnswer(
defaultAnswer: SuspendedAnswer<QuintupleParameters.Values<T0, T1, T2, T3, T4>, R>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@

package com.splendo.kaluga.test.base.mock.parameters

import com.splendo.kaluga.test.base.mock.MethodMock
import com.splendo.kaluga.test.base.mock.SuspendMethodMock
import com.splendo.kaluga.test.base.mock.answer.Answer
import com.splendo.kaluga.test.base.mock.answer.SuspendedAnswer
import com.splendo.kaluga.test.base.mock.matcher.Captor
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcher
import com.splendo.kaluga.test.base.mock.matcher.ParameterMatcherOrCaptor
import com.splendo.kaluga.test.base.mock.on
import com.splendo.kaluga.test.base.mock.singleParametersMock
import com.splendo.kaluga.test.base.mock.suspendSingleParametersMock
import kotlin.js.JsName
import kotlin.jvm.JvmName

Expand Down Expand Up @@ -63,13 +63,7 @@ class SingleParameters<T0> : ParametersSpec<SingleParameters.Matchers<T0>, Singl
}
}

internal fun <T0, R> ((T0) -> R).asMock() = MethodMock<
SingleParameters.Matchers<T0>,
SingleParameters.MatchersOrCaptor<T0>,
SingleParameters.Values<T0>,
SingleParameters<T0>,
R,
>(SingleParameters())
internal fun <T0, R> ((T0) -> R).asMock() = singleParametersMock<T0, R>()

fun <T0, R> ((T0) -> R).mockWithDefaultAnswer(
defaultAnswer: Answer<SingleParameters.Values<T0>, R>,
Expand Down Expand Up @@ -196,13 +190,7 @@ fun <T0, R : Any> ((T0) -> R?).mock() = mockWithDefaultValue(null)
@JsName("mockSingleNonNullable")
fun <T0, R : Any> ((T0) -> R).mock() = asMock()

internal fun <T0, R> (suspend (T0) -> R).asSuspendedMock() = SuspendMethodMock<
SingleParameters.Matchers<T0>,
SingleParameters.MatchersOrCaptor<T0>,
SingleParameters.Values<T0>,
SingleParameters<T0>,
R,
>(SingleParameters())
internal fun <T0, R> (suspend (T0) -> R).asSuspendedMock() = suspendSingleParametersMock<T0, R>()

fun <T0, R> (suspend (T0) -> R).mockWithDefaultAnswer(
defaultAnswer: SuspendedAnswer<SingleParameters.Values<T0>, R>,
Expand Down
Loading

0 comments on commit d4d35b7

Please sign in to comment.