Skip to content

Commit 3ea5401

Browse files
authored
[Datatable] Support boolean parsing in Datatables (#2614)
1 parent fe56287 commit 3ea5401

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
## [Unreleased]
1313

14+
### Added
15+
- [Datatable] Support parsing Booleans in Datatables ([#2614](https://github.com/cucumber/cucumber-jvm/pull/2614) G. Jourdan-Weil)
16+
1417
## [7.7.0] - 2022-09-08
1518
### Added
1619
- [JUnit Platform] Enable parallel execution of features ([#2604](https://github.com/cucumber/cucumber-jvm/pull/2604) Sambathkumar Sekar)

datatable/src/main/java/io/cucumber/datatable/DataTableTypeRegistry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ public DataTableTypeRegistry(Locale locale) {
6262
TableCellTransformer<Double> doubleTableCellTransformer = applyIfPresent(numberParser::parseDouble);
6363
defineDataTableType(new DataTableType(Double.class, doubleTableCellTransformer));
6464
defineDataTableType(new DataTableType(double.class, doubleTableCellTransformer));
65+
66+
TableCellTransformer<Boolean> booleanTableCellTransformer = applyIfPresent(Boolean::parseBoolean);
67+
defineDataTableType(new DataTableType(Boolean.class, booleanTableCellTransformer, true));
68+
defineDataTableType(new DataTableType(boolean.class, booleanTableCellTransformer, true));
6569
}
6670

6771
private static <R> TableCellTransformer<R> applyIfPresent(Function<String, R> f) {

datatable/src/test/java/io/cucumber/datatable/DataTableTypeRegistryTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class DataTableTypeRegistryTest {
2929
private static final Type LIST_OF_LIST_OF_FLOAT = aListOf(aListOf(Float.class));
3030
private static final Type LIST_OF_LIST_OF_DOUBLE = aListOf(aListOf(Double.class));
3131
private static final Type LIST_OF_LIST_OF_STRING = aListOf(aListOf(String.class));
32+
private static final Type LIST_OF_LIST_OF_BOOLEAN = aListOf(aListOf(Boolean.class));
3233
private static final Type LIST_OF_LIST_OF_OBJECT = aListOf(aListOf(Object.class));
3334

3435
private static final TableCellByTypeTransformer PLACE_TABLE_CELL_TRANSFORMER = (value,
@@ -244,4 +245,28 @@ void object_transformer_is_replaceable() {
244245
singletonList(singletonList("")),
245246
dataTableType.transform(singletonList(singletonList("[blank]"))));
246247
}
248+
249+
@Test
250+
void parse_boolean() {
251+
DataTableTypeRegistry registry = new DataTableTypeRegistry(Locale.ENGLISH);
252+
DataTableType dataTableType = registry.lookupTableTypeByType(LIST_OF_LIST_OF_BOOLEAN);
253+
assertEquals(
254+
singletonList(singletonList(Boolean.TRUE)),
255+
dataTableType.transform(singletonList(singletonList("true"))));
256+
assertEquals(
257+
singletonList(singletonList(Boolean.FALSE)),
258+
dataTableType.transform(singletonList(singletonList("false"))));
259+
}
260+
261+
@Test
262+
void boolean_transformer_is_replaceable() {
263+
DataTableTypeRegistry registry = new DataTableTypeRegistry(Locale.ENGLISH);
264+
registry.defineDataTableType(
265+
new DataTableType(Boolean.class, (String cell) -> "yes".equals(cell)));
266+
DataTableType dataTableType = registry.lookupTableTypeByType(LIST_OF_LIST_OF_BOOLEAN);
267+
assertEquals(
268+
singletonList(singletonList(Boolean.TRUE)),
269+
dataTableType.transform(singletonList(singletonList("yes"))));
270+
}
271+
247272
}

0 commit comments

Comments
 (0)