Skip to content

Commit f83316c

Browse files
committed
Can convert List<Object[]> to DataTable
1 parent 97b099c commit f83316c

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,13 @@ public DataTable toTable(List<?> objects, String... columnNames) {
173173
for (Object object : objects) {
174174
CellWriter writer;
175175
if (isListOfSingleValue(object)) {
176-
// XStream needs this
176+
// XStream needs an instance of ArrayList
177177
object = new ArrayList<Object>((List<Object>) object);
178178
writer = new ListOfSingleValueWriter();
179+
} else if (isArrayOfSingleValue(object)) {
180+
// XStream needs an instance of ArrayList
181+
object = new ArrayList<Object>(asList((Object[]) object));
182+
writer = new ListOfSingleValueWriter();
179183
} else {
180184
writer = new ComplexTypeWriter(asList(columnNames));
181185
}
@@ -220,10 +224,15 @@ public String map(String attributeName) {
220224
private boolean isListOfSingleValue(Object object) {
221225
if (object instanceof List) {
222226
List list = (List) object;
223-
boolean isSingleValue = xStream.getSingleValueConverter(list.get(0).getClass()) != null;
224-
if (list.size() > 0 && isSingleValue) {
225-
return true;
226-
}
227+
return list.size() > 0 && xStream.getSingleValueConverter(list.get(0).getClass()) != null;
228+
}
229+
return false;
230+
}
231+
232+
private boolean isArrayOfSingleValue(Object object) {
233+
if (object.getClass().isArray()) {
234+
Object[] array = (Object[]) object;
235+
return array.length > 0 && xStream.getSingleValueConverter(array[0].getClass()) != null;
227236
}
228237
return false;
229238
}

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ private DataTable personTableWithNull() {
113113
}
114114

115115
@Test
116-
public void converts_list_of_single_value_to_table() {
116+
public void converts_list_of_list_of_number_to_table() {
117117
List<? extends List<? extends Number>> lists = asList(asList(0.5, 1.5), asList(99.0, 1000.5));
118118
DataTable table = tc.toTable(lists);
119119
assertEquals("" +
@@ -126,6 +126,21 @@ public void converts_list_of_single_value_to_table() {
126126
assertEquals(lists, actual);
127127
}
128128

129+
@Test
130+
public void converts_list_of_array_of_string_to_table() {
131+
List<Object[]> arrays = asList(
132+
new Object[]{"name", "birthDate", "credits"},
133+
new Object[]{"Sid Vicious", "10/05/1957", "1000"},
134+
new Object[]{"Frank Zappa", "21/12/1940", "3000"}
135+
);
136+
DataTable table = tc.toTable(arrays, "name", "credits", "birthDate");
137+
assertEquals("" +
138+
" | name | birthDate | credits |\n" +
139+
" | Sid Vicious | 10/05/1957 | 1000 |\n" +
140+
" | Frank Zappa | 21/12/1940 | 3000 |\n" +
141+
"", table.toString());
142+
}
143+
129144
// No setters
130145
public static class UserPojo {
131146
public Integer credits;

0 commit comments

Comments
 (0)