Skip to content

Commit

Permalink
finos#1296 add remaining DefaultTypeConverters
Browse files Browse the repository at this point in the history
  • Loading branch information
junaidzm13 committed Apr 25, 2024
1 parent df0d0e6 commit e89ee2b
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,39 @@ object DefaultTypeConverters {
val stringToBooleanConverter: TypeConverter[String, Boolean] = TypeConverter(classOf[String], classOf[Boolean], withNullSafety[String, Boolean](_, _.toBoolean))

val intToStringConverter: TypeConverter[Integer, String] = TypeConverter(classOf[Integer], classOf[String], withNullSafety[Integer, String](_, _.toString))
val intToLongConverter: TypeConverter[Integer, Long] = TypeConverter(classOf[Integer], classOf[Long], withNullSafety[Integer, Long](_, _.toLong))
val intToDoubleConverter: TypeConverter[Integer, Double] = TypeConverter(classOf[Integer], classOf[Double], withNullSafety[Integer, Double](_, _.doubleValue()))

val longToStringConverter: TypeConverter[Long, String] = TypeConverter(classOf[Long], classOf[String], withNullSafety[Long, String](_, _.toString))
val longToIntConverter: TypeConverter[Long, Integer] = TypeConverter(classOf[Long], classOf[Integer], withNullSafety[Long, Integer](_, _.toInt))
val longToDoubleConverter: TypeConverter[Long, Double] = TypeConverter(classOf[Long], classOf[Double], withNullSafety[Long, Double](_, _.doubleValue()))

val doubleToStringConverter: TypeConverter[Double, String] = TypeConverter(classOf[Double], classOf[String], withNullSafety[Double, String](_, _.toString))
val doubleToIntConverter: TypeConverter[Double, Integer] = TypeConverter(classOf[Double], classOf[Integer], withNullSafety[Double, Integer](_, _.toInt))
val doubleToLongConverter: TypeConverter[Double, Long] = TypeConverter(classOf[Double], classOf[Long], withNullSafety[Double, Long](_, _.toLong))

val booleanToStringConverter: TypeConverter[Boolean, String] = TypeConverter(classOf[Boolean], classOf[String], withNullSafety[Boolean, String](_, _.toString))

val charToStringConverter: TypeConverter[Character, String] = TypeConverter(classOf[Character], classOf[String], withNullSafety[Character, String](_, _.toString))

private def withNullSafety[T1, T2 >: Null](v: T1, fn: T1 => T2): T2 = Option(v).map(fn).orNull

def getAll: List[TypeConverter[_, _]] = List(
stringToDoubleConverter,
doubleToStringConverter,
stringToLongConverter,
longToStringConverter,
stringToIntConverter,
intToStringConverter,
stringToCharConverter,
stringToBooleanConverter,
intToStringConverter,
intToLongConverter,
intToDoubleConverter,
longToStringConverter,
longToIntConverter,
longToDoubleConverter,
doubleToStringConverter,
doubleToIntConverter,
doubleToLongConverter,
booleanToStringConverter,
charToStringConverter,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,27 @@ class DefaultTypeConvertersTest extends AnyFeatureSpec with Matchers {
forAll(Table(
("title", "converter", "input", "expected output"),
("String to Double", stringToDoubleConverter, "10.5", 10.5),
("Double to String", doubleToStringConverter, 10.5, "10.5"),
("String to Long", stringToLongConverter, "10000", 10_000L),
("Long to String", longToStringConverter, 10_000L, "10000"),
("Int to String", intToStringConverter, 10, "10"),
("String to Int", stringToIntConverter, "10", 10),
("String to Boolean", stringToBooleanConverter, "false", false),
("String to Char", stringToCharConverter, "A", 'A'),
("Int to String", intToStringConverter, 10, "10"),
("Int to Long", intToLongConverter, 10, 10L),
("Int to Double", intToDoubleConverter, 10, 10.0),
("Long to String", longToStringConverter, 10_000L, "10000"),
("Long to Int", longToIntConverter, 10_000L, 10_000),
("Long to Double", longToDoubleConverter, 10_000L, 10000.0),
("Double to String", doubleToStringConverter, 10.5, "10.5"),
("Double to Int", doubleToIntConverter, 10.5, 10),
("Double to Long", doubleToLongConverter, 10.5, 10L),
("Boolean to String", booleanToStringConverter, true, "true"),
("Char to String", charToStringConverter, 'Z', "Z"),
))((title, converter, input, expectedOutput) => {
Scenario(title) {
converter.asInstanceOf[TypeConverter[Any, Any]].convert(input) shouldEqual expectedOutput
val result = converter.asInstanceOf[TypeConverter[Any, Any]].convert(input)

result shouldEqual expectedOutput
converter.toClass.isInstance(result) shouldBe true
}
})
}
Expand All @@ -28,11 +41,21 @@ class DefaultTypeConvertersTest extends AnyFeatureSpec with Matchers {
forAll(Table(
("title", "converter"),
("String to Double", stringToDoubleConverter),
("Double to String", doubleToStringConverter),
("String to Long", stringToLongConverter),
("Long to String", longToStringConverter),
("Int to String", intToStringConverter),
("String to Int", stringToIntConverter),
("String to Boolean", stringToBooleanConverter),
("String to Char", stringToCharConverter),
("Int to String", intToStringConverter),
("Int to Long", intToLongConverter),
("Int to Double", intToDoubleConverter),
("Long to String", longToStringConverter),
("Long to Int", longToIntConverter),
("Long to Double", longToDoubleConverter),
("Double to String", doubleToStringConverter),
("Double to Int", doubleToIntConverter),
("Double to Long", doubleToLongConverter),
("Boolean to String", booleanToStringConverter),
("Char to String", charToStringConverter),
))((title, converter) => {
Scenario(title) {
converter.convert(null) shouldEqual null
Expand Down

0 comments on commit e89ee2b

Please sign in to comment.