|
|
|
|
@ -34,19 +34,48 @@ class AopUtilsKotlinTests {
@@ -34,19 +34,48 @@ class AopUtilsKotlinTests {
|
|
|
|
|
@Test |
|
|
|
|
fun `Invoking suspending function should return Mono`() { |
|
|
|
|
val value = "foo" |
|
|
|
|
val method = ReflectionUtils.findMethod(AopUtilsKotlinTests::class.java, "suspendingFunction", |
|
|
|
|
String::class.java, Continuation::class.java)!! |
|
|
|
|
val method = ReflectionUtils.findMethod(WithoutInterface::class.java, "handle", |
|
|
|
|
String::class. java, Continuation::class.java)!! |
|
|
|
|
val continuation = Continuation<Any>(CoroutineName("test")) { } |
|
|
|
|
val result = AopUtils.invokeJoinpointUsingReflection(this, method, arrayOf(value, continuation)) |
|
|
|
|
val result = AopUtils.invokeJoinpointUsingReflection(WithoutInterface(), method, arrayOf(value, continuation)) |
|
|
|
|
assertThat(result).isInstanceOfSatisfying(Mono::class.java) { |
|
|
|
|
assertThat(it.block()).isEqualTo(value) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
fun `Invoking suspending function on bridged method should return Mono`() { |
|
|
|
|
val value = "foo" |
|
|
|
|
val bridgedMethod = ReflectionUtils.findMethod(WithInterface::class.java, "handle", Object::class.java, Continuation::class.java)!! |
|
|
|
|
val continuation = Continuation<Any>(CoroutineName("test")) { } |
|
|
|
|
val result = AopUtils.invokeJoinpointUsingReflection(WithInterface(), bridgedMethod, arrayOf(value, continuation)) |
|
|
|
|
assertThat(result).isInstanceOfSatisfying(Mono::class.java) { |
|
|
|
|
assertThat(it.block()).isEqualTo(value) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Suppress("unused") |
|
|
|
|
suspend fun suspendingFunction(value: String): String { |
|
|
|
|
delay(1) |
|
|
|
|
return value |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class WithoutInterface { |
|
|
|
|
suspend fun handle(value: String): String { |
|
|
|
|
delay(1) |
|
|
|
|
return value |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
interface ProxyInterface<T> { |
|
|
|
|
suspend fun handle(value: T): T |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class WithInterface : ProxyInterface<String> { |
|
|
|
|
override suspend fun handle(value: String): String { |
|
|
|
|
delay(1) |
|
|
|
|
return value |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|