Skip to content

Commit 479b3b0

Browse files
committed
Extract TableConverter interface
TableConverter is not part of the public api but is used by DataTable. By extracting the interface we can hide the details of how a data table converts its data. This will also be usefull once we start moving away from xstream as we can introduce an XStreamTableConverter and SomeOtherTableConverter.
1 parent 2f35907 commit 479b3b0

File tree

6 files changed

+31
-6
lines changed

6 files changed

+31
-6
lines changed

core/src/main/java/cucumber/api/DataTable.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import cucumber.runtime.CucumberException;
44
import cucumber.runtime.ParameterInfo;
55
import cucumber.runtime.table.DiffableRow;
6-
import cucumber.runtime.table.TableConverter;
76
import cucumber.runtime.table.TableDiffException;
87
import cucumber.runtime.table.TableDiffer;
98
import cucumber.runtime.table.TablePrinter;
@@ -42,7 +41,7 @@ public static DataTable create(List<?> raw, Locale locale, String... columnNames
4241

4342
private static DataTable create(List<?> raw, Locale locale, String format, String... columnNames) {
4443
ParameterInfo parameterInfo = new ParameterInfo(null, format, null, null);
45-
TableConverter tableConverter = new TableConverter(new LocalizedXStreams(Thread.currentThread().getContextClassLoader()).get(locale), parameterInfo);
44+
TableConverter tableConverter = new cucumber.runtime.table.TableConverter(new LocalizedXStreams(Thread.currentThread().getContextClassLoader()).get(locale), parameterInfo);
4645
return tableConverter.toTable(raw, columnNames);
4746
}
4847

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package cucumber.api;
2+
3+
import java.lang.reflect.Type;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
public interface TableConverter {
8+
<T> T convert(DataTable dataTable, Type type, boolean transposed);
9+
10+
<T> List<T> toList(DataTable dataTable, Type itemType);
11+
12+
<T> List<List<T>> toLists(DataTable dataTable, Type itemType);
13+
14+
<K, V> Map<K, V> toMap(DataTable dataTable, Type keyType, Type valueType);
15+
16+
<K, V> List<Map<K, V>> toMaps(DataTable dataTable, Type keyType, Type valueType);
17+
18+
DataTable toTable(List<?> objects, String... columnNames);
19+
}

core/src/main/java/cucumber/runtime/StepDefinitionMatch.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import cucumber.api.DataTable;
44
import cucumber.api.Scenario;
5-
import cucumber.runtime.table.TableConverter;
5+
import cucumber.api.TableConverter;
66
import cucumber.runtime.xstream.LocalizedXStreams;
77
import cucumber.util.Mapper;
88
import gherkin.pickles.PickleCell;
@@ -100,7 +100,7 @@ private ParameterInfo getParameterType(int n, Type argumentType) {
100100

101101
private Object tableArgument(PickleTable stepArgument, int argIndex, LocalizedXStreams.LocalizedXStream xStream) {
102102
ParameterInfo parameterInfo = getParameterType(argIndex, DataTable.class);
103-
TableConverter tableConverter = new TableConverter(xStream, parameterInfo);
103+
TableConverter tableConverter = new cucumber.runtime.table.TableConverter(xStream, parameterInfo);
104104
DataTable table = new DataTable(stepArgument, tableConverter);
105105
Type type = parameterInfo.getType();
106106
return tableConverter.convert(table, type, parameterInfo.isTransposed());

core/src/main/java/cucumber/runtime/table/DataTableDiff.java

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cucumber.runtime.table;
22

33
import cucumber.api.DataTable;
4+
import cucumber.api.TableConverter;
45
import gherkin.pickles.PickleRow;
56
import gherkin.pickles.PickleTable;
67

core/src/main/java/cucumber/runtime/table/TableConverter.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
/**
3535
* This class converts a {@link cucumber.api.DataTable} to various other types.
3636
*/
37-
public class TableConverter {
37+
public class TableConverter implements cucumber.api.TableConverter {
3838
private final LocalizedXStreams.LocalizedXStream xStream;
3939
private final ParameterInfo parameterInfo;
4040

@@ -55,6 +55,7 @@ public TableConverter(LocalizedXStreams.LocalizedXStream xStream, ParameterInfo
5555
* @param transposed whether the table should be transposed first.
5656
* @return the transformed object.
5757
*/
58+
@Override
5859
public <T> T convert(DataTable dataTable, Type type, boolean transposed) {
5960
if (transposed) {
6061
dataTable = dataTable.transpose();
@@ -117,6 +118,7 @@ private <T> List<T> toListOfComplexType(DataTable dataTable, Class<T> itemType)
117118
}
118119
}
119120

121+
@Override
120122
public <T> List<T> toList(DataTable dataTable, Type itemType) {
121123
SingleValueConverter itemConverter = xStream.getSingleValueConverter(itemType);
122124
if (itemConverter != null) {
@@ -141,6 +143,7 @@ private <T> List<T> toList(DataTable dataTable, SingleValueConverter itemConvert
141143
return Collections.unmodifiableList(result);
142144
}
143145

146+
@Override
144147
public <T> List<List<T>> toLists(DataTable dataTable, Type itemType) {
145148
try {
146149
xStream.setParameterInfo(parameterInfo);
@@ -163,6 +166,7 @@ public <T> List<List<T>> toLists(DataTable dataTable, Type itemType) {
163166
}
164167
}
165168

169+
@Override
166170
public <K, V> Map<K, V> toMap(DataTable dataTable, Type keyType, Type valueType) {
167171
try {
168172
xStream.setParameterInfo(parameterInfo);
@@ -188,6 +192,7 @@ public <K, V> Map<K, V> toMap(DataTable dataTable, Type keyType, Type valueType)
188192
}
189193
}
190194

195+
@Override
191196
public <K, V> List<Map<K, V>> toMaps(DataTable dataTable, Type keyType, Type valueType) {
192197
try {
193198
xStream.setParameterInfo(parameterInfo);
@@ -227,6 +232,7 @@ public <K, V> List<Map<K, V>> toMaps(DataTable dataTable, Type keyType, Type val
227232
* @param columnNames an explicit list of column names
228233
* @return a DataTable
229234
*/
235+
@Override
230236
public DataTable toTable(List<?> objects, String... columnNames) {
231237
try {
232238
xStream.setParameterInfo(parameterInfo);

core/src/test/java/cucumber/runtime/table/ToDataTableTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
public class ToDataTableTest {
2727
private static final String DD_MM_YYYY = "dd/MM/yyyy";
2828
private static final ParameterInfo PARAMETER_INFO = new ParameterInfo(null, DD_MM_YYYY, null, null);
29-
private TableConverter tc;
29+
private cucumber.api.TableConverter tc;
3030

3131
@Before
3232
public void createTableConverterWithDateFormat() {

0 commit comments

Comments
 (0)