Skip to content

Commit 82c5aa4

Browse files
committed
Refactor InvocableHandlerMethodKotlinTests
See gh-33026
1 parent b93b7e0 commit 82c5aa4

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

spring-web/src/test/kotlin/org/springframework/web/method/support/InvocableHandlerMethodKotlinTests.kt

+23-20
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,15 @@ package org.springframework.web.method.support
1818

1919
import org.assertj.core.api.Assertions
2020
import org.junit.jupiter.api.Test
21+
import org.springframework.util.ReflectionUtils
2122
import org.springframework.web.context.request.NativeWebRequest
2223
import org.springframework.web.context.request.ServletWebRequest
2324
import org.springframework.web.testfixture.method.ResolvableMethod
2425
import org.springframework.web.testfixture.servlet.MockHttpServletRequest
2526
import org.springframework.web.testfixture.servlet.MockHttpServletResponse
27+
import java.lang.reflect.Method
28+
import kotlin.reflect.jvm.javaGetter
29+
import kotlin.reflect.jvm.javaMethod
2630

2731
/**
2832
* Kotlin unit tests for [InvocableHandlerMethod].
@@ -38,7 +42,7 @@ class InvocableHandlerMethodKotlinTests {
3842
@Test
3943
fun intDefaultValue() {
4044
composite.addResolver(StubArgumentResolver(Int::class.java, null))
41-
val value = getInvocable(Handler::class.java, Int::class.java).invokeForRequest(request, null)
45+
val value = getInvocable(Handler::intDefaultValue.javaMethod!!).invokeForRequest(request, null)
4246

4347
Assertions.assertThat(getStubResolver(0).resolvedParameters).hasSize(1)
4448
Assertions.assertThat(value).isEqualTo("20")
@@ -47,7 +51,7 @@ class InvocableHandlerMethodKotlinTests {
4751
@Test
4852
fun booleanDefaultValue() {
4953
composite.addResolver(StubArgumentResolver(Boolean::class.java, null))
50-
val value = getInvocable(Handler::class.java, Boolean::class.java).invokeForRequest(request, null)
54+
val value = getInvocable(Handler::booleanDefaultValue.javaMethod!!).invokeForRequest(request, null)
5155

5256
Assertions.assertThat(getStubResolver(0).resolvedParameters).hasSize(1)
5357
Assertions.assertThat(value).isEqualTo("true")
@@ -56,7 +60,7 @@ class InvocableHandlerMethodKotlinTests {
5660
@Test
5761
fun nullableIntDefaultValue() {
5862
composite.addResolver(StubArgumentResolver(Int::class.javaObjectType, null))
59-
val value = getInvocable(Handler::class.java, Int::class.javaObjectType).invokeForRequest(request, null)
63+
val value = getInvocable(Handler::nullableIntDefaultValue.javaMethod!!).invokeForRequest(request, null)
6064

6165
Assertions.assertThat(getStubResolver(0).resolvedParameters).hasSize(1)
6266
Assertions.assertThat(value).isEqualTo("20")
@@ -65,29 +69,29 @@ class InvocableHandlerMethodKotlinTests {
6569
@Test
6670
fun nullableBooleanDefaultValue() {
6771
composite.addResolver(StubArgumentResolver(Boolean::class.javaObjectType, null))
68-
val value = getInvocable(Handler::class.java, Boolean::class.javaObjectType).invokeForRequest(request, null)
72+
val value = getInvocable(Handler::nullableBooleanDefaultValue.javaMethod!!).invokeForRequest(request, null)
6973

7074
Assertions.assertThat(getStubResolver(0).resolvedParameters).hasSize(1)
7175
Assertions.assertThat(value).isEqualTo("true")
7276
}
7377

7478
@Test
7579
fun unitReturnValue() {
76-
val value = getInvocable(Handler::class.java).invokeForRequest(request, null)
80+
val value = getInvocable(Handler::unit.javaMethod!!).invokeForRequest(request, null)
7781
Assertions.assertThat(value).isNull()
7882
}
7983

8084
@Test
8185
fun nullReturnValue() {
8286
composite.addResolver(StubArgumentResolver(String::class.java, null))
83-
val value = getInvocable(Handler::class.java, String::class.java).invokeForRequest(request, null)
87+
val value = getInvocable(Handler::nullable.javaMethod!!).invokeForRequest(request, null)
8488
Assertions.assertThat(value).isNull()
8589
}
8690

8791
@Test
8892
fun private() {
8993
composite.addResolver(StubArgumentResolver(Float::class.java, 1.2f))
90-
val value = getInvocable(Handler::class.java, Float::class.java).invokeForRequest(request, null)
94+
val value = getInvocable(ReflectionUtils.findMethod(Handler::class.java, "private", Float::class.java)!!).invokeForRequest(request, null)
9195

9296
Assertions.assertThat(getStubResolver(0).resolvedParameters).hasSize(1)
9397
Assertions.assertThat(value).isEqualTo("1.2")
@@ -96,56 +100,56 @@ class InvocableHandlerMethodKotlinTests {
96100
@Test
97101
fun valueClass() {
98102
composite.addResolver(StubArgumentResolver(Long::class.java, 1L))
99-
val value = getInvocable(ValueClassHandler::class.java, Long::class.java).invokeForRequest(request, null)
103+
val value = getInvocable(ValueClassHandler::longValueClass.javaMethod!!).invokeForRequest(request, null)
100104
Assertions.assertThat(value).isEqualTo(1L)
101105
}
102106

103107
@Test
104108
fun valueClassDefaultValue() {
105109
composite.addResolver(StubArgumentResolver(Double::class.java))
106-
val value = getInvocable(ValueClassHandler::class.java, Double::class.java).invokeForRequest(request, null)
110+
val value = getInvocable(ValueClassHandler::doubleValueClass.javaMethod!!).invokeForRequest(request, null)
107111
Assertions.assertThat(value).isEqualTo(3.1)
108112
}
109113

110114
@Test
111115
fun valueClassWithInit() {
112116
composite.addResolver(StubArgumentResolver(String::class.java, ""))
113-
val invocable = getInvocable(ValueClassHandler::class.java, String::class.java)
117+
val invocable = getInvocable(ValueClassHandler::valueClassWithInit.javaMethod!!)
114118
Assertions.assertThatIllegalArgumentException().isThrownBy { invocable.invokeForRequest(request, null) }
115119
}
116120

117121
@Test
118122
fun valueClassWithNullable() {
119123
composite.addResolver(StubArgumentResolver(LongValueClass::class.java, null))
120-
val value = getInvocable(ValueClassHandler::class.java, LongValueClass::class.java).invokeForRequest(request, null)
124+
val value = getInvocable(ValueClassHandler::valueClassWithNullable.javaMethod!!).invokeForRequest(request, null)
121125
Assertions.assertThat(value).isNull()
122126
}
123127

124128
@Test
125129
fun valueClassWithPrivateConstructor() {
126130
composite.addResolver(StubArgumentResolver(Char::class.java, 'a'))
127-
val value = getInvocable(ValueClassHandler::class.java, Char::class.java).invokeForRequest(request, null)
131+
val value = getInvocable(ValueClassHandler::valueClassWithPrivateConstructor.javaMethod!!).invokeForRequest(request, null)
128132
Assertions.assertThat(value).isEqualTo('a')
129133
}
130134

131135
@Test
132136
fun propertyAccessor() {
133-
val value = getInvocable(PropertyAccessorHandler::class.java).invokeForRequest(request, null)
137+
val value = getInvocable(PropertyAccessorHandler::prop.javaGetter!!).invokeForRequest(request, null)
134138
Assertions.assertThat(value).isEqualTo("foo")
135139
}
136140

137141
@Test
138142
fun extension() {
139143
composite.addResolver(StubArgumentResolver(CustomException::class.java, CustomException("foo")))
140-
val value = getInvocable(ExtensionHandler::class.java, CustomException::class.java).invokeForRequest(request, null)
144+
val value = getInvocable(ReflectionUtils.findMethod(ExtensionHandler::class.java, "handle", CustomException::class.java)!!).invokeForRequest(request, null)
141145
Assertions.assertThat(value).isEqualTo("foo")
142146
}
143147

144148
@Test
145149
fun extensionWithParameter() {
146150
composite.addResolver(StubArgumentResolver(CustomException::class.java, CustomException("foo")))
147151
composite.addResolver(StubArgumentResolver(Int::class.java, 20))
148-
val value = getInvocable(ExtensionHandler::class.java, CustomException::class.java, Int::class.java)
152+
val value = getInvocable(ReflectionUtils.findMethod(ExtensionHandler::class.java, "handleWithParameter", CustomException::class.java, Int::class.java)!!)
149153
.invokeForRequest(request, null)
150154
Assertions.assertThat(value).isEqualTo("foo-20")
151155
}
@@ -154,12 +158,11 @@ class InvocableHandlerMethodKotlinTests {
154158
fun genericParameter() {
155159
val horse = Animal("horse")
156160
composite.addResolver(StubArgumentResolver(Animal::class.java, horse))
157-
val value = getInvocable(AnimalHandler::class.java, Named::class.java).invokeForRequest(request, null)
161+
val value = getInvocable(AnimalHandler::handle.javaMethod!!, AnimalHandler::class.java).invokeForRequest(request, null)
158162
Assertions.assertThat(value).isEqualTo(horse.name)
159163
}
160164

161-
private fun getInvocable(clazz: Class<*>, vararg argTypes: Class<*>): InvocableHandlerMethod {
162-
val method = ResolvableMethod.on(clazz).argTypes(*argTypes).resolveMethod()
165+
private fun getInvocable(method: Method, clazz: Class<*> = method.declaringClass): InvocableHandlerMethod {
163166
val handlerMethod = InvocableHandlerMethod(clazz.constructors.first().newInstance(), method)
164167
handlerMethod.setHandlerMethodArgumentResolvers(composite)
165168
return handlerMethod
@@ -197,10 +200,10 @@ class InvocableHandlerMethodKotlinTests {
197200

198201
private class ValueClassHandler {
199202

200-
fun valueClass(limit: LongValueClass) =
203+
fun longValueClass(limit: LongValueClass) =
201204
limit.value
202205

203-
fun valueClass(limit: DoubleValueClass = DoubleValueClass(3.1)) =
206+
fun doubleValueClass(limit: DoubleValueClass = DoubleValueClass(3.1)) =
204207
limit.value
205208

206209
fun valueClassWithInit(valueClass: ValueClassWithInit) =

0 commit comments

Comments
 (0)