package dbfit.util; import static dbfit.util.MatchStatus.*; import static org.mockito.Mockito.*; import java.util.HashMap; import java.util.List; import java.util.LinkedList; import static java.util.Arrays.asList; public class DiffTestUtils { public static List<DataColumn> createColumns(RowStructure rowStructure) { List<DataColumn> columns = new LinkedList<DataColumn>(); for (String s: rowStructure.getColumnNames()) { columns.add(new DataColumn(s, s.getClass().getName(), "")); } return columns; } public static MatchResult createCellResultSuccess(String val) { return createCellResult(val, val, SUCCESS, null); } public static MatchResult createCellResultWrong(String s1, String s2) { return createCellResult(s1, s2, WRONG, null); } public static MatchResult createCellException(String s1, String s2, Exception e) { return createCellResult(s1, s2, EXCEPTION, e); } public static MatchResult createCellResult(String s, MatchStatus status) { return createCellResult(s, s, status, null); } public static MatchResult createCellResult(final String s1, final String s2, final MatchStatus status) { return createCellResult(s1, s2, status, null); } @SuppressWarnings("unchecked") public static MatchResult createCellResult(final String s1, final String s2, final MatchStatus status, final Exception ex) { DataCell o1 = fakeDataCell(s1); DataCell o2 = fakeDataCell(s2); MatchResult res = new MatchResult(o1, o2, status, DataCell.class, ex); return res; } public static MatchResult createNullRowResult(final MatchStatus status) { return createRowResult(null, null, status, null); } public static MatchResult createRowResult(String s, final MatchStatus status) { return createRowResult(s, s, status, null); } public static MatchResult createRowResult(final String s1, final String s2, final MatchStatus status) { return createRowResult(s1, s2, status, null); } @SuppressWarnings("unchecked") public static MatchResult createRowResult(final String s1, final String s2, final MatchStatus status, final Exception ex) { DataRow o1 = fakeDataRow(s1); DataRow o2 = fakeDataRow(s2); MatchResult res = new MatchResult(o1, o2, status, DataRow.class, ex); return res; } public static DataCell fakeDataCell(final String stringValue) { return new DataCell(null, null) { @Override public String toString() { return stringValue; } }; } public static DataRow fakeDataRow(final String stringValue) { return new DataRow(null) { @Override public String toString() { return stringValue; } }; } public static DataRowBuilder createDataRowBuilder() { return new DefaultDataRowBuilder(); } public static DataRowBuilder createDataRowBuilder(String... columns) { return new NamedDataRowBuilder(columns); } public static DataRowBuilder createDataRowBuilder(RowStructure rowStr) { return createDataRowBuilder(rowStr.getColumnNames()); } public static interface DataRowBuilder { public DataRow createRow(Integer... items); public DataRow createRow(List items); } public static DataTable createDataTable(RowStructure rs, DataRow... rows) { return new DataTable(asList(rows), createColumns(rs)); } public static abstract class AbstractDataRowBuilder implements DataRowBuilder { protected abstract String getColumnName(int index); @Override public DataRow createRow(Integer... items) { return createRow(asList(items)); } @Override public DataRow createRow(List items) { if (items == null) { return null; } HashMap<String, Object> rowValues = new HashMap<String, Object>(); int i = 0; for (Object item : items) { rowValues.put(getColumnName(i++), String.valueOf(item)); } return new DataRow(rowValues); } } public static class DefaultDataRowBuilder extends AbstractDataRowBuilder { private String prefix = "c"; @Override protected String getColumnName(int index) { return prefix + index; } } public static class NamedDataRowBuilder extends AbstractDataRowBuilder { private String[] columns; public NamedDataRowBuilder(final String... columnNames) { this.columns = columnNames; } @Override protected String getColumnName(int index) { return columns[index]; } } public static List<MatchStatus> statusesOf(List<? extends MatchResult> results) { List<MatchStatus> statuses = new LinkedList<>(); for (MatchResult res : results) { statuses.add(res.getStatus()); } return statuses; } }