diff --git a/src/test/kotlin/com/mapk/core/EnumMapperTest.kt b/src/test/kotlin/com/mapk/core/EnumMapperTest.kt new file mode 100644 index 0000000..ed3fb76 --- /dev/null +++ b/src/test/kotlin/com/mapk/core/EnumMapperTest.kt @@ -0,0 +1,36 @@ +package com.mapk.core + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource + +@DisplayName("EnumMapperのテスト") +class EnumMapperTest { + enum class JvmLanguage { + Java, Scala, Groovy, Kotlin + } + + @ParameterizedTest + @EnumSource(value = JvmLanguage::class) + @DisplayName("正常系") + fun test(value: JvmLanguage) { + assertEquals(value, EnumMapper.getEnum(JvmLanguage::class.java, value.name)) + } + + @Test + @DisplayName("null/空文字列入力") + fun isNull() { + assertNull(EnumMapper.getEnum(JvmLanguage::class.java, null)) + assertNull(EnumMapper.getEnum(JvmLanguage::class.java, "")) + } + + @Test + @DisplayName("存在しないもの") + fun isNotExisting() { + assertThrows { EnumMapper.getEnum(JvmLanguage::class.java, "C") } + } +} diff --git a/src/test/kotlin/com/mapk/core/FunctionsTest.kt b/src/test/kotlin/com/mapk/core/FunctionsTest.kt new file mode 100644 index 0000000..5164183 --- /dev/null +++ b/src/test/kotlin/com/mapk/core/FunctionsTest.kt @@ -0,0 +1,88 @@ +package com.mapk.core + +import com.mapk.annotations.KConstructor +import kotlin.reflect.full.companionObjectInstance +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +@DisplayName("共通利用関数関連のテスト") +class FunctionsTest { + class NoCompanionObject + + @Target(AnnotationTarget.FUNCTION) + @Retention(AnnotationRetention.RUNTIME) + @MustBeDocumented + annotation class TestAnnotation1 + + @Target(AnnotationTarget.FUNCTION) + @Retention(AnnotationRetention.RUNTIME) + @MustBeDocumented + annotation class TestAnnotation2 + + class WithCompanionObject { + companion object { + @KConstructor + fun kConstructor() {} + + @TestAnnotation2 + fun testAnnotation1() {} + + @TestAnnotation2 + fun testAnnotation2() {} + } + } + + @Nested + @DisplayName("コンパニオンオブジェクトから指定したアノテーションを取得するテスト") + inner class GetAnnotatedFunctionsFromCompanionObject { + @Test + @DisplayName("コンパニオンオブジェクトが無い場合") + fun noCompanionObject() { + assertNull(NoCompanionObject::class.getAnnotatedFunctionsFromCompanionObject()) + } + + @Test + @DisplayName("コンパニオンオブジェクトが有るが関数が取れない場合") + fun withCompanionObjectButNotFound() { + assertNull(WithCompanionObject::class.getAnnotatedFunctionsFromCompanionObject()) + } + + @Test + @DisplayName("単体取得") + fun kConstructor() { + val result = + WithCompanionObject::class.getAnnotatedFunctionsFromCompanionObject()!! + + assertEquals(WithCompanionObject::class.companionObjectInstance!!, result.first) + assertEquals(1, result.second.size) + assertEquals("kConstructor", result.second.single().name) + } + + @Test + @DisplayName("複数取得") + fun testAnnotation() { + val result = + WithCompanionObject::class.getAnnotatedFunctionsFromCompanionObject()!! + + assertEquals(WithCompanionObject::class.companionObjectInstance!!, result.first) + assertEquals(2, result.second.size) + val names = listOf("testAnnotation1", "testAnnotation2") + assertTrue(names.contains(result.second[0].name)) + assertTrue(names.contains(result.second[1].name)) + } + } + + data class InnerClass(val arg: Int) + data class DataClass(val innerClass: InnerClass) + + @Test + @DisplayName("パラメータからの型取得テスト") + fun getKClassTest() { + val param = ::DataClass.parameters.single() + assertEquals(InnerClass::class, param.getKClass()) + } +}