001 package nl.cwi.sen1.visplugin.csvexport;
002
003 import java.io.ByteArrayOutputStream;
004 import java.io.IOException;
005 import java.nio.charset.Charset;
006
007 import junit.framework.TestCase;
008 import nl.cwi.sen1.relationstores.Factory;
009 import nl.cwi.sen1.relationstores.types.RTuple;
010 import nl.cwi.sen1.visplugin.VisualizationFactorySingleton;
011
012 import com.csvreader.CsvWriter;
013
014
015 /**
016 * JUnit Testcase used to test the Exporter class
017 * @author Chris Woolderink
018 * @author Antoine Savelkoul
019 * @date 12-03-2007
020 */
021 public class ExporterTest extends TestCase {
022
023 private Factory m_factory;
024
025 /**
026 * This method is executed before the start of a test
027 * @author Chris Woolderink
028 * @author Antoine Savelkoul
029 * @date 12-03-2007
030 */
031 protected void setUp() throws Exception {
032 super.setUp();
033
034 m_factory = VisualizationFactorySingleton.getFactoryInstance();
035 }
036
037 /**
038 * This method is executed after the end of a test
039 * @author Chris Woolderink
040 * @author Antoine Savelkoul
041 * @date 12-03-2007
042 */
043 protected void tearDown() throws Exception {
044 super.tearDown();
045 }
046
047 /**
048 * Export from a RTuple with "String String"-relation
049 */
050 public void testExportFromRTupleStrStr() {
051 // Setup the relation type and relation themselves.
052 String relStrStr = "rtuple(\"STRING_TABLE\"," +
053 "relation([str,str])," +
054 "set([" +
055 "tuple([str(\"Row 1, Column 1\"),str(\"Row 1, Column 2\")])," +
056 "tuple([str(\"Row 2, Column 1\"),str(\"Row 2, Column 2\")])," +
057 "tuple([str(\"Row 3, Column 1\"),str(\"Row 3, Column 2\")])" +
058 "]))";
059 RTuple tupleRelStrStr = m_factory.RTupleFromString(relStrStr);
060
061 String csvExpected =
062 "\"Row 1, Column 1\",\"Row 1, Column 2\"\n" +
063 "\"Row 2, Column 1\",\"Row 2, Column 2\"\n" +
064 "\"Row 3, Column 1\",\"Row 3, Column 2\"\n";
065
066 String result = rTupleToCsv(tupleRelStrStr, Exporter.ExportSelection.DATA_ONLY);
067
068 assertEquals(csvExpected, result);
069 }
070
071 /**
072 * Export from a RTuple with "String Integer"-relation
073 */
074 public void testExportFromRTupleStrInt() {
075 // Setup the relation type and relation themselves.
076 String relStrInt = "rtuple(\"STRING_TABLE\"," +
077 "relation([str,int])," +
078 "set([" +
079 "tuple([str(\"Row 1, Column 1\"),int(nat-con(1))])," +
080 "tuple([str(\"Row 2, Column 1\"),int(nat-con(2))])," +
081 "tuple([str(\"Row 3, Column 1\"),int(nat-con(3))])" +
082 "]))";
083 RTuple tupleRelStrInt = m_factory.RTupleFromString(relStrInt);
084
085 String csvExpectedWithoutHeader =
086 "\"Row 1, Column 1\",1\n" +
087 "\"Row 2, Column 1\",2\n" +
088 "\"Row 3, Column 1\",3\n";
089
090 String result1 = rTupleToCsv(tupleRelStrInt, Exporter.ExportSelection.DATA_ONLY);
091 assertEquals(csvExpectedWithoutHeader, result1);
092
093 String csvExpectedWithHeader =
094 "str,int\n" +
095 "\"Row 1, Column 1\",1\n" +
096 "\"Row 2, Column 1\",2\n" +
097 "\"Row 3, Column 1\",3\n";
098
099 String result2 = rTupleToCsv(tupleRelStrInt, Exporter.ExportSelection.DATA_WITH_HEADERS);
100 assertEquals(csvExpectedWithHeader, result2);
101 }
102
103 /**
104 * Converts a RTuple to CSV formatted text by calling:
105 * Exporter.export(rTuple, csvWriter)
106 * @param rTuple The RTuple to export
107 * @return a String with the CSV formatted output
108 * @author Antoine Savelkoul
109 * @author Chris Woolderink
110 * @date 13-03-2007
111 */
112 private String rTupleToCsv(RTuple rTuple, Exporter.ExportSelection selection) {
113 ByteArrayOutputStream byteArrayOutputStreamSimple = new ByteArrayOutputStream();
114 CsvWriter csvWriter = new CsvWriter(byteArrayOutputStreamSimple,',',Charset.forName("UTF-8"));
115 String csvOutput = null;
116
117 try {
118 Exporter.export(rTuple, csvWriter, selection);
119 csvWriter.close();
120 byteArrayOutputStreamSimple.close();
121 csvOutput = byteArrayOutputStreamSimple.toString();
122 }
123 catch( IOException e ) {
124 fail();
125 }
126
127 return csvOutput;
128 }
129
130 }