Skip to content

Commit ce26145

Browse files
committed
Remove boilerplate code
1 parent e93f813 commit ce26145

15 files changed

+163
-87
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<minimum.maven.version>3.3</minimum.maven.version>
2121
<outputDirectory>${project.build.directory}</outputDirectory>
2222
<scala-maven-plugin.version>3.4.6</scala-maven-plugin.version>
23+
<build-helper-maven-plugin.version>3.1.0</build-helper-maven-plugin.version>
2324
<cucumber.version>5.7.0</cucumber.version>
2425
<gherkin.version>9.2.0</gherkin.version>
2526
<groovy.version>2.4.19</groovy.version>
@@ -235,6 +236,12 @@
235236
</executions>
236237
</plugin>
237238

239+
<plugin>
240+
<groupId>org.codehaus.mojo</groupId>
241+
<artifactId>build-helper-maven-plugin</artifactId>
242+
<version>${build-helper-maven-plugin.version}</version>
243+
</plugin>
244+
238245
<!-- Non-standard plugins -->
239246
<plugin>
240247
<groupId>net.alchim31.maven</groupId>

scala/scala_2.11/pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,24 @@
6060
</testResource>
6161
</testResources>
6262
<plugins>
63+
<!-- Extra Sources for Scala 2.11 -->
64+
<plugin>
65+
<groupId>org.codehaus.mojo</groupId>
66+
<artifactId>build-helper-maven-plugin</artifactId>
67+
<executions>
68+
<execution>
69+
<phase>generate-sources</phase>
70+
<goals>
71+
<goal>add-source</goal>
72+
</goals>
73+
<configuration>
74+
<sources>
75+
<source>src/main/scala</source>
76+
</sources>
77+
</configuration>
78+
</execution>
79+
</executions>
80+
</plugin>
6381
<plugin>
6482
<groupId>net.alchim31.maven</groupId>
6583
<artifactId>scala-maven-plugin</artifactId>
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package io.cucumber
2+
3+
import java.lang.reflect.Type
4+
import java.util.function.Supplier
5+
import java.util.{List => JavaList, Map => JavaMap}
6+
7+
import io.cucumber.cucumberexpressions.{CaptureGroupTransformer, ParameterByTypeTransformer}
8+
import io.cucumber.datatable._
9+
import io.cucumber.docstring.DocStringType.Transformer
10+
11+
/**
12+
* Only for Scala 2.11 which does not support some Single Abstract Method
13+
*/
14+
package object scala {
15+
16+
import language.implicitConversions
17+
18+
// Cucumber Scala Types
19+
20+
implicit def function1AsDataTableEntryDefinitionBody[T](f: (Map[String, String]) => T): DataTableEntryDefinitionBody[T] = new DataTableEntryDefinitionBody[T] {
21+
override def transform(entry: Map[String, String]): T = f.apply(entry)
22+
}
23+
24+
25+
implicit def function1AsDataTableRowDefinitionBody[T](f: (Seq[String]) => T): DataTableRowDefinitionBody[T] = new DataTableRowDefinitionBody[T] {
26+
override def transform(row: Seq[String]): T = f.apply(row)
27+
}
28+
29+
30+
implicit def function1AsDataTableCellDefinitionBody[T](f: (String) => T): DataTableCellDefinitionBody[T] = new DataTableCellDefinitionBody[T] {
31+
override def transform(cell: String): T = f.apply(cell)
32+
}
33+
34+
35+
implicit def function1AsDataTableDefinitionBody[T](f: (DataTable) => T): DataTableDefinitionBody[T] = new DataTableDefinitionBody[T] {
36+
override def transform(dataTable: DataTable): T = f.apply(dataTable)
37+
}
38+
39+
// Cucumber Core Types
40+
41+
implicit def function1AsTableCellTransformer[T](f: String => T): TableCellTransformer[T] = {
42+
new TableCellTransformer[T] {
43+
override def transform(cell: String): T = f.apply(cell)
44+
}
45+
}
46+
47+
implicit def function1AsTableTransformer[T](f: DataTable => T): TableTransformer[T] = {
48+
new TableTransformer[T] {
49+
override def transform(table: DataTable): T = f.apply(table)
50+
}
51+
}
52+
53+
implicit def function1AsTableEntryTransformer[T](f: JavaMap[String, String] => T): TableEntryTransformer[T] = {
54+
new TableEntryTransformer[T] {
55+
override def transform(entry: JavaMap[String, String]): T = f.apply(entry)
56+
}
57+
}
58+
59+
implicit def function1AsTableRowTransformer[T](f: JavaList[String] => T): TableRowTransformer[T] = {
60+
new TableRowTransformer[T] {
61+
override def transform(row: JavaList[String]): T = f.apply(row)
62+
}
63+
}
64+
65+
implicit def function1AsTableCellByTypeTransformer(f: (String, Type) => AnyRef): TableCellByTypeTransformer = {
66+
new TableCellByTypeTransformer {
67+
override def transform(fromValue: String, toTypeValue: Type): AnyRef = {
68+
f.apply(fromValue, toTypeValue)
69+
}
70+
}
71+
}
72+
73+
implicit def function1AsTableEntryByTypeTransformer(f: (JavaMap[String, String], Type, TableCellByTypeTransformer) => AnyRef): TableEntryByTypeTransformer = {
74+
new TableEntryByTypeTransformer {
75+
override def transform(fromValue: JavaMap[String, String], toValueType: Type, tableCellByTypeTransformer: TableCellByTypeTransformer): AnyRef = {
76+
f.apply(fromValue, toValueType, tableCellByTypeTransformer)
77+
}
78+
}
79+
}
80+
81+
implicit def function1AsParameterByTypeTransformer(f: (String, Type) => AnyRef): ParameterByTypeTransformer = {
82+
new ParameterByTypeTransformer {
83+
override def transform(fromValue: String, toValue: Type): AnyRef = {
84+
f.apply(fromValue, toValue)
85+
}
86+
}
87+
}
88+
89+
implicit def function1AsTransformer[T](f: (String) => T): Transformer[T] = {
90+
new Transformer[T] {
91+
override def transform(s: String): T = {
92+
f.apply(s)
93+
}
94+
}
95+
}
96+
97+
implicit def function1AsCaptureGroupTransformer[T](f: (Array[String]) => T): CaptureGroupTransformer[T] = {
98+
new CaptureGroupTransformer[T] {
99+
override def transform(parameterContent: Array[String]): T = {
100+
f.apply(parameterContent)
101+
}
102+
}
103+
}
104+
105+
// For tests
106+
107+
implicit def function1AsSupplier[T](f: () => T): Supplier[T] = {
108+
new Supplier[T] {
109+
override def get(): T = f.apply()
110+
}
111+
}
112+
113+
}

scala/sources/src/main/scala/io/cucumber/scala/DataTableDefinitionBody.scala

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -25,43 +25,3 @@ trait DataTableDefinitionBody[T] {
2525
def transform(dataTable: DataTable): T
2626

2727
}
28-
29-
object DataTableEntryDefinitionBody {
30-
31-
import scala.language.implicitConversions
32-
33-
implicit def function1AsDataTableEntryDefinitionBody[T](f: (Map[String, String]) => T): DataTableEntryDefinitionBody[T] = new DataTableEntryDefinitionBody[T] {
34-
override def transform(entry: Map[String, String]): T = f.apply(entry)
35-
}
36-
37-
}
38-
39-
object DataTableRowDefinitionBody {
40-
41-
import scala.language.implicitConversions
42-
43-
implicit def function1AsDataTableRowDefinitionBody[T](f: (Seq[String]) => T): DataTableRowDefinitionBody[T] = new DataTableRowDefinitionBody[T] {
44-
override def transform(row: Seq[String]): T = f.apply(row)
45-
}
46-
47-
}
48-
49-
object DataTableCellDefinitionBody {
50-
51-
import scala.language.implicitConversions
52-
53-
implicit def function1AsDataTableCellDefinitionBody[T](f: (String) => T): DataTableCellDefinitionBody[T] = new DataTableCellDefinitionBody[T] {
54-
override def transform(cell: String): T = f.apply(cell)
55-
}
56-
57-
}
58-
59-
object DataTableDefinitionBody {
60-
61-
import scala.language.implicitConversions
62-
63-
implicit def function1AsDataTableDefinitionBody[T](f: (DataTable) => T): DataTableDefinitionBody[T] = new DataTableDefinitionBody[T] {
64-
override def transform(dataTable: DataTable): T = f.apply(dataTable)
65-
}
66-
67-
}

scala/sources/src/main/scala/io/cucumber/scala/ScalaDataTableCellDefinition.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ trait ScalaDataTableCellDefinition[T] extends ScalaDataTableTypeDefinition {
1111

1212
override val location: StackTraceElement = new Exception().getStackTrace()(3)
1313

14-
private val transformer: TableCellTransformer[T] = new TableCellTransformer[T] {
15-
override def transform(cell: String): T = {
16-
details.body.transform(replaceEmptyPatternsWithEmptyString(cell))
17-
}
14+
private val transformer: TableCellTransformer[T] = (cell: String) => {
15+
details.body.transform(replaceEmptyPatternsWithEmptyString(cell))
1816
}
1917

2018
override val dataTableType = new DataTableType(details.tag.runtimeClass, transformer)

scala/sources/src/main/scala/io/cucumber/scala/ScalaDataTableDefinition.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ trait ScalaDataTableDefinition[T] extends ScalaDataTableTypeDefinition {
1111

1212
override val location: StackTraceElement = new Exception().getStackTrace()(3)
1313

14-
private val transformer: TableTransformer[T] = new TableTransformer[T] {
15-
override def transform(table: DataTable): T = {
16-
details.body.transform(replaceEmptyPatternsWithEmptyString(table))
17-
}
14+
private val transformer: TableTransformer[T] = (table: DataTable) => {
15+
details.body.transform(replaceEmptyPatternsWithEmptyString(table))
1816
}
1917

2018
override val dataTableType = new DataTableType(details.tag.runtimeClass, transformer)

scala/sources/src/main/scala/io/cucumber/scala/ScalaDataTableEntryDefinition.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,10 @@ trait ScalaDataTableEntryDefinition[T] extends ScalaDataTableTypeDefinition {
1515

1616
override val location: StackTraceElement = new Exception().getStackTrace()(3)
1717

18-
private val transformer: TableEntryTransformer[T] = new TableEntryTransformer[T] {
19-
override def transform(entry: JavaMap[String, String]): T = {
20-
replaceEmptyPatternsWithEmptyString(entry.asScala.toMap)
21-
.map(details.body.transform)
22-
.get
23-
}
18+
private val transformer: TableEntryTransformer[T] = (entry: JavaMap[String, String]) => {
19+
replaceEmptyPatternsWithEmptyString(entry.asScala.toMap)
20+
.map(details.body.transform)
21+
.get
2422
}
2523

2624
override val dataTableType = new DataTableType(details.tag.runtimeClass, transformer)

scala/sources/src/main/scala/io/cucumber/scala/ScalaDataTableRowDefinition.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@ trait ScalaDataTableRowDefinition[T] extends ScalaDataTableTypeDefinition {
1515

1616
override val location: StackTraceElement = new Exception().getStackTrace()(3)
1717

18-
private val transformer: TableRowTransformer[T] = new TableRowTransformer[T] {
19-
override def transform(row: JavaList[String]): T = {
20-
details.body.transform(replaceEmptyPatternsWithEmptyString(row.asScala.toSeq))
21-
}
18+
private val transformer: TableRowTransformer[T] = (row: JavaList[String]) => {
19+
details.body.transform(replaceEmptyPatternsWithEmptyString(row.asScala.toSeq))
2220
}
2321

2422
override val dataTableType = new DataTableType(details.tag.runtimeClass, transformer)

scala/sources/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableCellTransformerDefinition.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@ trait ScalaDefaultDataTableCellTransformerDefinition extends DefaultDataTableCel
1313

1414
override val location: StackTraceElement = new Exception().getStackTrace()(3)
1515

16-
override val tableCellByTypeTransformer: TableCellByTypeTransformer = new TableCellByTypeTransformer {
17-
override def transform(fromValue: String, toTypeValue: Type): AnyRef = {
18-
details.body.apply(replaceEmptyPatternsWithEmptyString(fromValue), toTypeValue)
19-
}
16+
override val tableCellByTypeTransformer: TableCellByTypeTransformer = (fromValue: String, toTypeValue: Type) => {
17+
details.body.apply(replaceEmptyPatternsWithEmptyString(fromValue), toTypeValue)
2018
}
2119

2220
}

scala/sources/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableEntryTransformerDefinition.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@ trait ScalaDefaultDataTableEntryTransformerDefinition extends DefaultDataTableEn
1616

1717
override val location: StackTraceElement = new Exception().getStackTrace()(3)
1818

19-
override val tableEntryByTypeTransformer: TableEntryByTypeTransformer = new TableEntryByTypeTransformer {
20-
override def transform(fromValue: JavaMap[String, String], toValueType: Type, tableCellByTypeTransformer: TableCellByTypeTransformer): AnyRef = {
21-
replaceEmptyPatternsWithEmptyString(fromValue.asScala.toMap)
22-
.map(details.body.apply(_, toValueType))
23-
.get
24-
}
19+
override val tableEntryByTypeTransformer: TableEntryByTypeTransformer = (fromValue: JavaMap[String, String], toValueType: Type, tableCellByTypeTransformer: TableCellByTypeTransformer) => {
20+
replaceEmptyPatternsWithEmptyString(fromValue.asScala.toMap)
21+
.map(details.body.apply(_, toValueType))
22+
.get
2523
}
2624

2725
override val headersToProperties: Boolean = true

0 commit comments

Comments
 (0)