/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.vtype.io; import org.diirt.vtype.io.CSVIO; import java.io.InputStreamReader; import java.io.StringReader; import java.io.StringWriter; import java.time.Instant; import java.util.Arrays; import org.diirt.util.array.ArrayDouble; import org.diirt.util.array.ArrayInt; import org.diirt.util.array.ListNumber; import org.diirt.vtype.VEnum; import org.diirt.vtype.VEnumArray; import org.diirt.vtype.VNumber; import org.diirt.vtype.VString; import org.diirt.vtype.VStringArray; import org.diirt.vtype.VTable; import org.diirt.vtype.ValueFactory; import org.junit.Test; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import static org.diirt.vtype.ValueFactory.*; /** * * @author carcassi */ public class CSVIOTest { public CSVIOTest() { } // @Test public void exportVNumber1() { VNumber value = ValueFactory.newVDouble(1.0, newTime(Instant.ofEpochSecond(0, 0))); CSVIO io = new CSVIO(); exportTest(io, value, "\"1969/12/31 19:00:00.0 -0500\" NONE NONE 1.0"); } // @Test public void exportVNumber2() { VNumber value = ValueFactory.newVInt(10, alarmNone(), newTime(Instant.ofEpochSecond(90, 0)), displayNone()); CSVIO io = new CSVIO(); exportTest(io, value, "\"1969/12/31 19:01:30.0 -0500\" NONE NONE 10.0"); } // @Test public void exportVString1() { VString value = ValueFactory.newVString("Hello world!", alarmNone(), newTime(Instant.ofEpochSecond(133, 0))); CSVIO io = new CSVIO(); exportTest(io, value, "\"1969/12/31 19:02:13.0 -0500\" NONE NONE \"Hello world!\""); } // @Test public void exportVStringArray1() { VStringArray value = ValueFactory.newVStringArray(Arrays.asList("The first", "The second"), alarmNone(), newTime(Instant.ofEpochSecond(133, 0))); CSVIO io = new CSVIO(); exportTest(io, value, "\"1969/12/31 19:02:13.0 -0500\" NONE NONE \"The first\" \"The second\""); } // @Test public void exportVEnum1() { VEnum value = ValueFactory.newVEnum(1, Arrays.asList("One", "Two", "Three"), alarmNone(), newTime(Instant.ofEpochSecond(133, 0))); CSVIO io = new CSVIO(); exportTest(io, value, "\"1969/12/31 19:02:13.0 -0500\" NONE NONE \"Two\""); } // @Test public void exportVEnumArray() { VEnumArray value = ValueFactory.newVEnumArray(new ArrayInt(1,0,0,2), Arrays.asList("One", "Two", "Three"), alarmNone(), newTime(Instant.ofEpochSecond(133, 0))); CSVIO io = new CSVIO(); exportTest(io, value, "\"1969/12/31 19:02:13.0 -0500\" NONE NONE \"Two\" \"One\" \"One\" \"Three\""); } @Test public void exportVTable() { VTable value = ValueFactory.newVTable(Arrays.<Class<?>>asList(String.class, Double.TYPE, Integer.TYPE), Arrays.asList("Name", "Value", "Index"), Arrays.<Object>asList(Arrays.asList("A", "B", "C", "D", "E"), new ArrayDouble(0.234, 1.456, 234567891234.0, 0.000000123, 123), new ArrayInt(1,2,3,4,5))); CSVIO io = new CSVIO(); exportTest(io, value, "\"Name\" \"Value\" \"Index\"\n" + "\"A\" 0.234 1\n" + "\"B\" 1.456 2\n" + "\"C\" 2.34567891234E11 3\n" + "\"D\" 1.23E-7 4\n" + "\"E\" 123.0 5\n"); } // @Test public void exportVTable2() { VTable value = ValueFactory.newVTable(Arrays.<Class<?>>asList(String.class, Double.TYPE, Integer.TYPE, Instant.class), Arrays.asList("Name", "Value", "Index", "Time"), Arrays.<Object>asList(Arrays.asList("A", "B", "C", "D", "E"), new ArrayDouble(0.234, 1.456, 234567891234.0, 0.000000123, 123), new ArrayInt(1,2,3,4,5), Arrays.asList(Instant.ofEpochSecond(133, 0),Instant.ofEpochSecond(134, 0),Instant.ofEpochSecond(135, 0),Instant.ofEpochSecond(136, 0),Instant.ofEpochSecond(137, 0)))); CSVIO io = new CSVIO(); exportTest(io, value, "\"Name\" \"Value\" \"Index\" \"Time\"\n" + "\"A\" 0.234 1 \"1969/12/31 19:02:13.0 -0500\"\n" + "\"B\" 1.456 2 \"1969/12/31 19:02:14.0 -0500\"\n" + "\"C\" 2.34567891234E11 3 \"1969/12/31 19:02:15.0 -0500\"\n" + "\"D\" 1.23E-7 4 \"1969/12/31 19:02:16.0 -0500\"\n" + "\"E\" 123.0 5 \"1969/12/31 19:02:17.0 -0500\"\n"); } public static void exportTest(CSVIO io, Object value, String csv) { assertThat(io.canExport(value), equalTo(true)); StringWriter writer = new StringWriter(); io.export(value, writer); assertThat(writer.toString(), equalTo(csv)); } @Test public void importVTable1() { String inputText = "\"Name\" \"Value\" \"Index\"\n" + "\"A\" 0.234 1\n" + "\"B\" 1.456 2\n" + "\"C\" 2.34567891234E11 3\n" + "\"D\" 1.23E-7 4\n" + "\"E\" 123.0 5\n"; CSVIO io = new CSVIO(); VTable value = io.importVTable(new StringReader(inputText)); assertThat(value.getColumnCount(), equalTo(3)); assertThat(value.getColumnName(0), equalTo("Name")); assertThat(value.getColumnName(1), equalTo("Value")); assertThat(value.getColumnName(2), equalTo("Index")); assertThat((Object) value.getColumnType(0), equalTo((Object) String.class)); assertThat((Object) value.getColumnType(1), equalTo((Object) double.class)); assertThat((Object) value.getColumnType(2), equalTo((Object) double.class)); assertThat(value.getColumnData(0), equalTo((Object) Arrays.asList("A", "B", "C", "D", "E"))); assertThat(value.getColumnData(1), equalTo((Object) new ArrayDouble(0.234, 1.456, 234567891234.0, 0.000000123, 123))); assertThat(value.getColumnData(2), equalTo((Object) new ArrayDouble(1,2,3,4,5))); } @Test public void importFileTable1CSV() throws Exception { CSVIO io = new CSVIO(); VTable value = io.importVTable(new InputStreamReader(getClass().getResource("table1.csv").openStream())); assertThat(value.getColumnCount(), equalTo(3)); assertThat(value.getColumnName(0), equalTo("Name")); assertThat(value.getColumnName(1), equalTo("Value")); assertThat(value.getColumnName(2), equalTo("Index")); assertThat((Object) value.getColumnType(0), equalTo((Object) String.class)); assertThat((Object) value.getColumnType(1), equalTo((Object) double.class)); assertThat((Object) value.getColumnType(2), equalTo((Object) double.class)); assertThat(value.getColumnData(0), equalTo((Object) Arrays.asList("A", "B", "C", "D", "E"))); assertThat(value.getColumnData(1), equalTo((Object) new ArrayDouble(0.234, 1.456, 234567891234.0, 0.000000123, 123))); assertThat(value.getColumnData(2), equalTo((Object) new ArrayDouble(1,2,3,4,5))); } @Test public void importFileTable2CSV() throws Exception { CSVIO io = new CSVIO(); VTable value = io.importVTable(new InputStreamReader(getClass().getResource("table2.csv").openStream())); assertThat(value.getColumnCount(), equalTo(3)); assertThat(value.getColumnName(0), equalTo("Name")); assertThat(value.getColumnName(1), equalTo("Value")); assertThat(value.getColumnName(2), equalTo("Index")); assertThat((Object) value.getColumnType(0), equalTo((Object) String.class)); assertThat((Object) value.getColumnType(1), equalTo((Object) double.class)); assertThat((Object) value.getColumnType(2), equalTo((Object) double.class)); assertThat(value.getColumnData(0), equalTo((Object) Arrays.asList("A", "B", "C", "D", "E"))); assertThat(value.getColumnData(1), equalTo((Object) new ArrayDouble(0.234, 1.456, 234567891234.0, 0.000000123, 123))); assertThat(value.getColumnData(2), equalTo((Object) new ArrayDouble(1,2,3,4,5))); } @Test public void importFileTable4CSV() throws Exception { CSVIO io = new CSVIO(); VTable value = io.importVTable(new InputStreamReader(getClass().getResource("table4.csv").openStream())); assertThat(value.getColumnCount(), equalTo(13)); assertThat(value.getColumnName(0), equalTo("timestamp")); assertThat(value.getColumnName(1), equalTo("rta_MIN")); assertThat(value.getColumnName(2), equalTo("rta_MAX")); assertThat((Object) value.getColumnType(0), equalTo((Object) double.class)); assertThat((Object) value.getColumnType(1), equalTo((Object) double.class)); assertThat((Object) value.getColumnType(2), equalTo((Object) double.class)); assertThat(((ListNumber) value.getColumnData(0)).getDouble(0), equalTo(1390913220.0)); assertThat(((ListNumber) value.getColumnData(1)).getDouble(1), equalTo(0.28083333333)); assertThat(((ListNumber) value.getColumnData(2)).getDouble(2), equalTo(0.266825)); } }