Author: tchemit Date: 2011-12-09 11:55:25 +0100 (Fri, 09 Dec 2011) New Revision: 2254 Url: http://nuiton.org/repositories/revision/nuiton-utils/2254 Log: - clean unique test (avoid use external test resources for a one snapshot) - use Iterable instead of Collection in that is called Model classes :) Removed: trunk/nuiton-csv/src/test/resources/org/ Modified: trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/Export.java trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ExportModel.java trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ImportModel.java trunk/nuiton-csv/src/test/java/org/nuiton/util/csv/ImportTest.java Modified: trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/Export.java =================================================================== --- trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/Export.java 2011-12-08 10:06:54 UTC (rev 2253) +++ trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/Export.java 2011-12-09 10:55:25 UTC (rev 2254) @@ -48,14 +48,14 @@ protected ExportModel<E> model; - protected Collection<E> data; + protected Iterable<E> data; public static <E> Export<E> newExport(ExportModel<E> model, - Collection<E> data) { + Iterable<E> data) { return new Export<E>(model, data); } - protected Export(ExportModel<E> model, Collection<E> data) { + protected Export(ExportModel<E> model, Iterable<E> data) { this.model = model; this.data = data; } @@ -74,10 +74,12 @@ if (log.isDebugEnabled()) { log.debug("headers for export are '" + headersLine + "'"); - log.debug("will export " + data.size() + " lines"); + if (data instanceof Collection) { + log.debug("will export " + ((Collection<E>)data).size() + " lines"); + } } - Collection<ExportableColumn<E, Object>> columnsForExport = + Iterable<ExportableColumn<E, Object>> columnsForExport = model.getColumnsForExport(); for (E object : data) { Modified: trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ExportModel.java =================================================================== --- trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ExportModel.java 2011-12-08 10:06:54 UTC (rev 2253) +++ trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ExportModel.java 2011-12-09 10:55:25 UTC (rev 2254) @@ -24,8 +24,6 @@ */ package org.nuiton.util.csv; -import java.util.Collection; - /** * TODO * @@ -37,6 +35,6 @@ char getSeparator(); - Collection<ExportableColumn<E, Object>> getColumnsForExport(); + Iterable<ExportableColumn<E, Object>> getColumnsForExport(); } Modified: trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ImportModel.java =================================================================== --- trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ImportModel.java 2011-12-08 10:06:54 UTC (rev 2253) +++ trunk/nuiton-csv/src/main/java/org/nuiton/util/csv/ImportModel.java 2011-12-09 10:55:25 UTC (rev 2254) @@ -24,7 +24,6 @@ */ package org.nuiton.util.csv; -import java.util.Collection; import java.util.List; /** @@ -42,5 +41,5 @@ E newEmptyInstance(); - Collection<ImportableColumn<E, Object>> getColumnsForImport(); + Iterable<ImportableColumn<E, Object>> getColumnsForImport(); } Modified: trunk/nuiton-csv/src/test/java/org/nuiton/util/csv/ImportTest.java =================================================================== --- trunk/nuiton-csv/src/test/java/org/nuiton/util/csv/ImportTest.java 2011-12-08 10:06:54 UTC (rev 2253) +++ trunk/nuiton-csv/src/test/java/org/nuiton/util/csv/ImportTest.java 2011-12-09 10:55:25 UTC (rev 2254) @@ -24,6 +24,7 @@ */ package org.nuiton.util.csv; +import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -32,10 +33,9 @@ import org.nuiton.util.csv.Common.BeanProperty; import java.io.IOException; -import java.io.InputStream; -import java.text.DateFormat; +import java.io.Reader; +import java.io.StringReader; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -50,32 +50,27 @@ */ public class ImportTest { - private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - /** - * Test with {@link SimpleImportModel} that directly implements necessary {@link ImportableColumn} - * with a empty file (says the file has only the header definition but no row - * - * @throws Exception for errors - */ @Test - public void testSimpleImportWithEmptyFile() throws Exception { - ImportModel<Row> model = new SimpleImportModel(dateFormat); - List<Row> rows = importFile(model, "emptyImportTest.csv"); + public void testSimpleImportWithNoData() throws Exception { + String content = "DATE;NUMBER;TITLE"; + + List<Row> rows; + rows = importContent(new SimpleImportModel(), content); Assert.assertEquals(0, rows.size()); + + content = "DATE;NUMBER;TITLE\n"; + rows = importContent(new SimpleImportModel(), content); + Assert.assertEquals(0, rows.size()); } - /** - * Test with {@link SimpleImportModel} that directly implements necessary {@link ImportableColumn} - * with a empty file (says the file has only the header definition but no row - * - * @throws Exception for errors - */ @Test - public void testSimpleImportWithEmptyFile2() throws Exception { - ImportModel<Row> model = new SimpleImportModel(dateFormat); - List<Row> rows = importFile(model, "emptyImport2Test.csv"); - Assert.assertEquals(0, rows.size()); + public void testSimpleImportWithOneLine() throws Exception { + String content = "DATE;NUMBER;TITLE\n2011-12-05;18;\"1ère ligne\""; + + List<Row> rows = importContent(new SimpleImportModel(), content); + Assert.assertEquals(1, rows.size()); + assertRowEquals(rows.get(0), DateUtil.createDate(5, 12, 2011), 18, "1ère ligne"); } /** @@ -85,9 +80,14 @@ */ @Test public void testSimpleImport() throws Exception { - ImportModel<Row> model = new SimpleImportModel(dateFormat); - List<Row> rows = importFile(model, "importTest.csv"); - checkImportTestResult(rows); + String content = "DATE;NUMBER;TITLE\n" + + "2011-12-05;18;\"1ère ligne\"\n" + + "2011-12-06;19;\"2ème ligne\"\n" + + "2011-12-07;21;\"3ème ligne\""; + List<Row> rows = importContent(new SimpleImportModel(), content); + assertRowEquals(rows.get(0), DateUtil.createDate(5, 12, 2011), 18, "1ère ligne"); + assertRowEquals(rows.get(1), DateUtil.createDate(6, 12, 2011), 19, "2ème ligne"); + assertRowEquals(rows.get(2), DateUtil.createDate(7, 12, 2011), 21, "3ème ligne"); } /** @@ -97,15 +97,22 @@ */ @Test public void testColumnImport() throws Exception { - ImportModel<Row> model = new ColumnImportModel(dateFormat); - List<Row> rows = importFile(model, "importTest.csv"); - checkImportTestResult(rows); + String content = "DATE;NUMBER;TITLE\n" + + "2011-12-05;18;\"1ère ligne\"\n" + + "2011-12-06;19;\"2ème ligne\"\n" + + "2011-12-07;21;\"3ème ligne\""; + List<Row> rows = importContent(new ColumnImportModel(), content); + assertRowEquals(rows.get(0), DateUtil.createDate(5, 12, 2011), 18, "1ère ligne"); + assertRowEquals(rows.get(1), DateUtil.createDate(6, 12, 2011), 19, "2ème ligne"); + assertRowEquals(rows.get(2), DateUtil.createDate(7, 12, 2011), 21, "3ème ligne"); + } - protected List<Row> importFile(ImportModel<Row> model, String filePath) throws IOException { - InputStream csvStream = getClass().getResourceAsStream(filePath); + protected List<Row> importContent(ImportModel<Row> model, + String content) throws IOException { + Reader reader = new StringReader(content); try { - Import<Row> rowImport = Import.newImport(model, csvStream); + Import<Row> rowImport = Import.newImport(model, reader); try { List<Row> result = new ArrayList<Row>(); for (Row row : rowImport) { @@ -116,25 +123,14 @@ rowImport.close(); } } finally { - csvStream.close(); + reader.close(); } } - private void checkImportTestResult(List<Row> rows) { - - Assert.assertEquals(3, rows.size()); - Row row1 = rows.get(0); - Assert.assertEquals(DateUtil.createDate(5, 12, 2011), row1.getDate()); - Assert.assertEquals(new Integer(18), row1.getNumber()); - Assert.assertEquals("1ère ligne", row1.getTitle()); - Row row2 = rows.get(1); - Assert.assertEquals(DateUtil.createDate(6, 12, 2011), row2.getDate()); - Assert.assertEquals(new Integer(19), row2.getNumber()); - Assert.assertEquals("2ème ligne", row2.getTitle()); - Row row3 = rows.get(2); - Assert.assertEquals(DateUtil.createDate(7, 12, 2011), row3.getDate()); - Assert.assertEquals(new Integer(21), row3.getNumber()); - Assert.assertEquals("3ème ligne", row3.getTitle()); + private void assertRowEquals(Row row, Date date, Integer number, String title) { + Assert.assertEquals(date, row.getDate()); + Assert.assertEquals(number, row.getNumber()); + Assert.assertEquals(title, row.getTitle()); } public static class Row { @@ -145,6 +141,15 @@ private Integer number; + public Row() { + } + + public Row(Date date, String title, Integer number) { + this.date = date; + this.title = title; + this.number = number; + } + public Date getDate() { return date; } @@ -168,17 +173,32 @@ public void setNumber(Integer number) { this.number = number; } - } - private static class ColumnImportModel implements ImportModel<Row> { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Row)) return false; - private DateFormat dateFormat; + Row row = (Row) o; - private ColumnImportModel(DateFormat dateFormat) { - this.dateFormat = dateFormat; + if (!date.equals(row.date)) return false; + if (!number.equals(row.number)) return false; + return title.equals(row.title); + } @Override + public int hashCode() { + int result = date.hashCode(); + result = 31 * result + title.hashCode(); + result = 31 * result + number.hashCode(); + return result; + } + } + + private static class ColumnImportModel implements ImportModel<Row> { + + @Override public char getSeparator() { return ';'; } @@ -242,7 +262,7 @@ @Override public Date parse(String value) throws ParseException { - return dateFormat.parse(value); + return DateUtils.parseDate(value, "yyyy-MM-dd"); } }; } @@ -252,12 +272,6 @@ private Log log = LogFactory.getLog(SimpleImportModel.class); - private DateFormat dateFormat; - - private SimpleImportModel(DateFormat dateFormat) { - this.dateFormat = dateFormat; - } - @Override public char getSeparator() { return ';'; @@ -337,7 +351,7 @@ @Override public Date parseValue(String value) throws ParseException { - return dateFormat.parse(value); + return DateUtils.parseDate(value, "yyyy-MM-dd"); } @Override