Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit e8170ad

Browse files
authored
Merge pull request #9 from k163377/default_argument_feature
Add annotation that means "Use default argument".
2 parents 6a7eaed + 4e04e71 commit e8170ad

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.mapk.annotations
2+
3+
@Target(AnnotationTarget.VALUE_PARAMETER)
4+
@Retention(AnnotationRetention.RUNTIME)
5+
annotation class KUseDefaultArgument
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
package com.mapk.core
22

33
import com.mapk.annotations.KParameterAlias
4+
import com.mapk.annotations.KUseDefaultArgument
5+
import java.lang.IllegalArgumentException
46
import kotlin.reflect.KParameter
57
import kotlin.reflect.full.findAnnotation
68

79
/**
810
* パラメータからエイリアスもしくはプロパティ名を取得する関数
911
*/
1012
fun KParameter.getAliasOrName(): String? = findAnnotation<KParameterAlias>()?.value ?: name
13+
14+
/**
15+
* デフォルト引数を用いるかチェックする関数
16+
*/
17+
fun KParameter.isUseDefaultArgument(): Boolean {
18+
if (annotations.any { it is KUseDefaultArgument }) {
19+
if (!isOptional) {
20+
throw IllegalArgumentException("Find KUseDefaultArgument, but it's not has default argument.")
21+
}
22+
return true
23+
}
24+
return false
25+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.mapk.core
2+
3+
import com.mapk.annotations.KParameterAlias
4+
import com.mapk.annotations.KUseDefaultArgument
5+
import io.mockk.every
6+
import io.mockk.mockk
7+
import java.lang.IllegalArgumentException
8+
import kotlin.reflect.KParameter
9+
import org.junit.jupiter.api.Assertions.assertEquals
10+
import org.junit.jupiter.api.Assertions.assertFalse
11+
import org.junit.jupiter.api.Assertions.assertTrue
12+
import org.junit.jupiter.api.BeforeEach
13+
import org.junit.jupiter.api.DisplayName
14+
import org.junit.jupiter.api.Nested
15+
import org.junit.jupiter.api.Test
16+
import org.junit.jupiter.api.assertThrows
17+
18+
@DisplayName("関数類のテスト")
19+
class FunctionsTest {
20+
lateinit var parameter: KParameter
21+
22+
@BeforeEach
23+
fun beforeEach() {
24+
parameter = mockk()
25+
}
26+
27+
@Nested
28+
@DisplayName("エイリアス関連のテスト")
29+
inner class GetAliasOrNameTest {
30+
@Test
31+
@DisplayName("エイリアス無し")
32+
fun noAlias() {
33+
val paramName = "mocked name"
34+
every { parameter.annotations } returns emptyList()
35+
every { parameter.name } returns paramName
36+
37+
assertEquals(paramName, parameter.getAliasOrName())
38+
}
39+
40+
@Test
41+
@DisplayName("エイリアス有り")
42+
fun withAlias() {
43+
val aliasedName = "aliased name"
44+
45+
val alias = mockk<KParameterAlias>()
46+
every { alias.value } returns aliasedName
47+
48+
every { parameter.annotations } returns listOf(alias)
49+
50+
assertEquals(aliasedName, parameter.getAliasOrName())
51+
}
52+
}
53+
54+
@Nested
55+
@DisplayName("デフォルト引数を用いるかの判定関数のテスト")
56+
inner class IsUseDefaultArgumentTest {
57+
@Test
58+
@DisplayName("デフォルト引数を用いない場合")
59+
fun noDefaultArgument() {
60+
every { parameter.annotations } returns emptyList()
61+
assertFalse(parameter.isUseDefaultArgument())
62+
}
63+
64+
@Test
65+
@DisplayName("デフォルト引数を用いる指定が有るが、実際はデフォルト引数が設定されていない場合")
66+
fun isIncorrect() {
67+
every { parameter.annotations } returns listOf(mockk<KUseDefaultArgument>())
68+
every { parameter.isOptional } returns false
69+
assertThrows<IllegalArgumentException> { parameter.isUseDefaultArgument() }
70+
}
71+
72+
@Test
73+
@DisplayName("正常入力")
74+
fun isCorrect() {
75+
every { parameter.annotations } returns listOf(mockk<KUseDefaultArgument>())
76+
every { parameter.isOptional } returns true
77+
assertTrue(parameter.isUseDefaultArgument())
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)