@ -22,18 +22,27 @@ import kotlin.reflect.full.primaryConstructor
/ * *
/ * *
* @author Brian Clozel
* @author Brian Clozel
* @author Sebastien Deleuze
* /
* /
class ConverterFactoryNullnessTests {
class ConverterFactoryNullnessTests {
@Test
@Test
fun converterFactoryWithNullableTypes ( ) {
fun converterFactoryWithNullableTypes ( ) {
val factory = StringToNullableIdConverterFactory
val userIdConverter : Converter < String , UserId ? > = factory . getConverter ( UserId :: class . java )
assertThat ( userIdConverter . convert ( " 42 " ) ) . isEqualTo ( UserId ( " 42 " ) )
}
@Test
fun converterFactoryWithNonNullableTypes ( ) {
val factory = StringToIdConverterFactory
val factory = StringToIdConverterFactory
val userIdConverter = factory . getConverter ( UserId :: class . java )
val userIdConverter : Converter < String , UserId > = factory . getConverter ( UserId :: class . java )
assertThat ( userIdConverter . convert ( " 42 " ) ) . isEqualTo ( UserId ( " 42 " ) )
assertThat ( userIdConverter . convert ( " 42 " ) ) . isEqualTo ( UserId ( " 42 " ) )
}
}
object StringToIdConverterFactory : ConverterFactory < String , Id > {
object StringToNullable IdConverterFactory : ConverterFactory < String , Id > {
override fun < T : Id > getConverter ( targetType : Class < T > ) : Converter < String , T ? > {
override fun < T : Id > getConverter ( targetType : Class < T > ) : Converter < String , T ? > {
val constructor = checkNotNull ( targetType . kotlin . primaryConstructor )
val constructor = checkNotNull ( targetType . kotlin . primaryConstructor )
return Converter { source ->
return Converter { source ->
@ -42,12 +51,19 @@ class ConverterFactoryNullnessTests {
}
}
}
}
object StringToIdConverterFactory : ConverterFactory < String , Id > {
override fun < T : Id > getConverter ( targetType : Class < T > ) : Converter < String , T > {
val constructor = checkNotNull ( targetType . kotlin . primaryConstructor )
return Converter { source ->
constructor . call ( source )
}
}
}
abstract class Id {
abstract class Id {
abstract val value : String
abstract val value : String
}
}
data class UserId ( override val value : String ) : Id ( )
data class UserId ( override val value : String ) : Id ( )
data class ProductId ( override val value : String ) : Id ( )
}
}