Skip to content

Commit 5729ba6

Browse files
committed
Add inline value class test
1 parent dd2d20a commit 5729ba6

File tree

4 files changed

+131
-0
lines changed

4 files changed

+131
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.junit.jupiter.api.kotlin
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.Disabled
5+
import org.junit.jupiter.params.ParameterizedTest
6+
import org.junit.jupiter.params.provider.Arguments
7+
import org.junit.jupiter.params.provider.MethodSource
8+
9+
/**
10+
* Tests for custom inline value classes.
11+
*
12+
* Currently, disabled: The POC only supports kotlin.Result.
13+
* Support for arbitrary inline value classes needs to be added.
14+
*
15+
* @see <a href="https://github.com/junit-team/junit-framework/issues/5081">Issue #5081</a>
16+
*/
17+
@Disabled("POC only supports kotlin.Result, not custom inline value classes")
18+
class CustomInlineValueClassTest {
19+
20+
@MethodSource("userIdProvider")
21+
@ParameterizedTest
22+
fun testUserId(userId: UserId) {
23+
assertEquals(123L, userId.value)
24+
}
25+
26+
@MethodSource("emailProvider")
27+
@ParameterizedTest
28+
fun testEmail(email: Email) {
29+
assertEquals("[email protected]", email.value)
30+
}
31+
32+
companion object {
33+
@JvmStatic
34+
fun userIdProvider() = listOf(Arguments.of(UserId(123L)))
35+
36+
@JvmStatic
37+
fun emailProvider() = listOf(Arguments.of(Email("[email protected]")))
38+
}
39+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.junit.jupiter.api.kotlin
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.params.ParameterizedTest
5+
import org.junit.jupiter.params.provider.Arguments
6+
import org.junit.jupiter.params.provider.MethodSource
7+
8+
class MultipleInlineValueClassTest {
9+
10+
@MethodSource("mixedProvider")
11+
@ParameterizedTest
12+
fun testMultipleValueClasses(
13+
userId: UserId,
14+
email: Email,
15+
result: Result<String>
16+
) {
17+
assertEquals(100L, userId.value)
18+
assertEquals("[email protected]", email.value)
19+
assertEquals("data", result.getOrThrow())
20+
}
21+
22+
@MethodSource("normalAndValueClassProvider")
23+
@ParameterizedTest
24+
fun testMixedParameters(
25+
normalString: String,
26+
userId: UserId
27+
) {
28+
assertEquals("normal", normalString)
29+
assertEquals(200L, userId.value)
30+
}
31+
32+
companion object {
33+
@JvmStatic
34+
fun mixedProvider() = listOf(
35+
Arguments.of(
36+
UserId(100L),
37+
38+
Result.success("data")
39+
)
40+
)
41+
42+
@JvmStatic
43+
fun normalAndValueClassProvider() = listOf(
44+
Arguments.of("normal", UserId(200L))
45+
)
46+
}
47+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.junit.jupiter.api.kotlin
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.assertNotNull
5+
import org.junit.jupiter.params.ParameterizedTest
6+
import org.junit.jupiter.params.provider.Arguments
7+
import org.junit.jupiter.params.provider.MethodSource
8+
9+
class NullableInlineValueClassTest {
10+
11+
@MethodSource("nullableResultProvider")
12+
@ParameterizedTest
13+
fun testNullableResult(result: Result<String>?) {
14+
assertNotNull(result)
15+
assertEquals("test", result.getOrNull())
16+
}
17+
18+
@MethodSource("nullableUserIdProvider")
19+
@ParameterizedTest
20+
fun testNullableUserId(userId: UserId?) {
21+
assertNotNull(userId)
22+
assertEquals(999L, userId.value)
23+
}
24+
25+
companion object {
26+
@JvmStatic
27+
fun nullableResultProvider() =
28+
listOf(
29+
Arguments.of(Result.success("test"))
30+
)
31+
32+
@JvmStatic
33+
fun nullableUserIdProvider() =
34+
listOf(
35+
Arguments.of(UserId(999L))
36+
)
37+
}
38+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.junit.jupiter.api.kotlin
2+
3+
@JvmInline
4+
value class UserId(val value: Long)
5+
6+
@JvmInline
7+
value class Email(val value: String)

0 commit comments

Comments
 (0)