Skip to content

Commit

Permalink
Can convert List<Object[]> to DataTable
Browse files Browse the repository at this point in the history
  • Loading branch information
aslakhellesoy committed Dec 5, 2012
1 parent 97b099c commit f83316c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
19 changes: 14 additions & 5 deletions core/src/main/java/cucumber/runtime/table/TableConverter.java
Expand Up @@ -173,9 +173,13 @@ public DataTable toTable(List<?> objects, String... columnNames) {
for (Object object : objects) {
CellWriter writer;
if (isListOfSingleValue(object)) {
// XStream needs this
// XStream needs an instance of ArrayList
object = new ArrayList<Object>((List<Object>) object);
writer = new ListOfSingleValueWriter();
} else if (isArrayOfSingleValue(object)) {
// XStream needs an instance of ArrayList
object = new ArrayList<Object>(asList((Object[]) object));
writer = new ListOfSingleValueWriter();
} else {
writer = new ComplexTypeWriter(asList(columnNames));
}
Expand Down Expand Up @@ -220,10 +224,15 @@ public String map(String attributeName) {
private boolean isListOfSingleValue(Object object) {
if (object instanceof List) {
List list = (List) object;
boolean isSingleValue = xStream.getSingleValueConverter(list.get(0).getClass()) != null;
if (list.size() > 0 && isSingleValue) {
return true;
}
return list.size() > 0 && xStream.getSingleValueConverter(list.get(0).getClass()) != null;
}
return false;
}

private boolean isArrayOfSingleValue(Object object) {
if (object.getClass().isArray()) {
Object[] array = (Object[]) object;
return array.length > 0 && xStream.getSingleValueConverter(array[0].getClass()) != null;
}
return false;
}
Expand Down
17 changes: 16 additions & 1 deletion core/src/test/java/cucumber/runtime/table/ToDataTableTest.java
Expand Up @@ -113,7 +113,7 @@ private DataTable personTableWithNull() {
}

@Test
public void converts_list_of_single_value_to_table() {
public void converts_list_of_list_of_number_to_table() {
List<? extends List<? extends Number>> lists = asList(asList(0.5, 1.5), asList(99.0, 1000.5));
DataTable table = tc.toTable(lists);
assertEquals("" +
Expand All @@ -126,6 +126,21 @@ public void converts_list_of_single_value_to_table() {
assertEquals(lists, actual);
}

@Test
public void converts_list_of_array_of_string_to_table() {
List<Object[]> arrays = asList(
new Object[]{"name", "birthDate", "credits"},
new Object[]{"Sid Vicious", "10/05/1957", "1000"},
new Object[]{"Frank Zappa", "21/12/1940", "3000"}
);
DataTable table = tc.toTable(arrays, "name", "credits", "birthDate");
assertEquals("" +
" | name | birthDate | credits |\n" +
" | Sid Vicious | 10/05/1957 | 1000 |\n" +
" | Frank Zappa | 21/12/1940 | 3000 |\n" +
"", table.toString());
}

// No setters
public static class UserPojo {
public Integer credits;
Expand Down

0 comments on commit f83316c

Please sign in to comment.