|
1 | 1 | package cucumber.runtime.scala.test
|
2 | 2 |
|
| 3 | +import java.lang.reflect.Type |
3 | 4 | import java.util
|
4 | 5 | import java.util.Locale
|
5 |
| - |
6 | 6 | import cucumber.api.{TypeRegistry, TypeRegistryConfigurer}
|
7 | 7 | import cucumber.runtime.scala.model.{Cukes, Person, Snake}
|
8 |
| -import io.cucumber.cucumberexpressions.{ParameterType, Transformer} |
9 |
| -import io.cucumber.datatable.{DataTableType, TableEntryTransformer} |
| 8 | +import io.cucumber.cucumberexpressions.{ParameterByTypeTransformer, ParameterType, Transformer} |
| 9 | +import io.cucumber.datatable.dependency.com.fasterxml.jackson.databind.ObjectMapper |
| 10 | +import io.cucumber.datatable.{DataTableType, TableCellByTypeTransformer, TableEntryByTypeTransformer, TableEntryTransformer} |
10 | 11 |
|
11 | 12 | class TypeRegistryConfiguration extends TypeRegistryConfigurer {
|
12 | 13 |
|
@@ -56,6 +57,11 @@ class TypeRegistryConfiguration extends TypeRegistryConfigurer {
|
56 | 57 | override def locale(): Locale = Locale.ENGLISH
|
57 | 58 |
|
58 | 59 | override def configureTypeRegistry(typeRegistry: TypeRegistry): Unit = {
|
| 60 | + val defaultTransformer = new DefaultTransformer() |
| 61 | + typeRegistry.setDefaultDataTableCellTransformer(defaultTransformer) |
| 62 | + typeRegistry.setDefaultDataTableEntryTransformer(defaultTransformer) |
| 63 | + typeRegistry.setDefaultParameterTransformer(defaultTransformer) |
| 64 | + |
59 | 65 | typeRegistry.defineParameterType(new ParameterType[Snake](
|
60 | 66 | "snake",
|
61 | 67 | "[=><]+",
|
@@ -86,5 +92,24 @@ class TypeRegistryConfiguration extends TypeRegistryConfigurer {
|
86 | 92 |
|
87 | 93 | typeRegistry.defineDataTableType(new DataTableType(classOf[Cukes],listTransformer))
|
88 | 94 | }
|
| 95 | + private class DefaultTransformer |
| 96 | + extends ParameterByTypeTransformer |
| 97 | + with TableEntryByTypeTransformer |
| 98 | + with TableCellByTypeTransformer { |
| 99 | + |
| 100 | + var objectMapper: ObjectMapper = new ObjectMapper() |
| 101 | + |
| 102 | + override def transform(s: String, `type`: Type): AnyRef = |
| 103 | + objectMapper.convertValue(s, objectMapper.constructType(`type`)) |
| 104 | + |
| 105 | + |
| 106 | + override def transform[T](s: String, aClass: Class[T]): T = |
| 107 | + objectMapper.convertValue(s, aClass) |
| 108 | + |
| 109 | + override def transform[T](map: util.Map[String, String], |
| 110 | + aClass: Class[T], |
| 111 | + tableCellByTypeTransformer: TableCellByTypeTransformer): T = |
| 112 | + objectMapper.convertValue(map, aClass) |
| 113 | + } |
89 | 114 |
|
90 | 115 | }
|
0 commit comments