package com.ricebridge.csvman.test;
import com.ricebridge.csvman.*;
import com.ricebridge.data.Text;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import java.util.*;
import java.io.*;
import java.sql.*;
public class CsvLoaderTest extends TestCase {
public CsvLoaderTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( CsvLoaderTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
public void testExample() throws Exception {
File csvFile = TestUtil.getTextCsvFile( "example" );
CsvManager csvManager = new CsvManager();
CsvLoader loader = csvManager.makeLoader( csvFile );
StringBuffer sb = new StringBuffer();
loader.begin();
int record = 0;
while( loader.hasNext() ) {
sb.append( "record: "+record+"\n" );
String[] fields = loader.next();
for( int field = 0; field < fields.length; field++ ) {
sb.append( "field "+field+" has value: "+fields[field]+"\n" );
}
record++;
}
loader.end();
String out = "record: 0\nfield 0 has value: r1\nfield 1 has value: f1\nfield 2 has value: b1\nrecord: 1\nfield 0 has value: r2\nfield 1 has value: f2\nfield 2 has value: b2\nrecord: 2\nfield 0 has value: r3\nfield 1 has value: f3\nfield 2 has value: b3\n";
assertEquals( out, sb.toString() );
}
public void testSingle() throws Exception {
String loadcanon = "[b1, q1], [b2, q2], ";
File csvFile = null;
csvFile = TestUtil.getTextCsvFile( "load01" );
CsvManager csvManager = new CsvManager();
List data = makeData( csvManager.makeLoader( csvFile ) );
assertEquals( loadcanon, canon(data) );
data = makeData( csvManager.makeLoader( csvFile.getAbsolutePath() ) );
assertEquals( loadcanon, canon(data) );
InputStream is = new FileInputStream( csvFile );
data = makeData( csvManager.makeLoader( is ) );
assertEquals( loadcanon, canon(data) );
is.close();
Reader fr = new FileReader( csvFile );
data = makeData( csvManager.makeLoader( fr ) );
assertEquals( loadcanon, canon(data) );
fr.close();
data = makeData ( csvManager.makeLoader( new Text( FileUtil.readFile(csvFile) ) ) );
assertEquals( loadcanon, canon(data) );
}
public void testRepeat() throws Exception {
File csvFile = null;
csvFile = TestUtil.getTextCsvFile( "load01" );
LineSpec fs = new LineSpec( new String[] {"Name","Que"} );
CsvManager csvManager = new CsvManager();
String loadcanon01 = "[b1, q1], [b2, q2], ";
String loadcanon02 = "[2b1, 2q1], [2b2, 2q2], [2b3, 2q3], ";
String loadcanon03 = "[3b1, 3q1], [3b2, 3q2], [3b3, 3q3], [3b4, 3q4], ";
List data = makeData( csvManager.makeLoader(csvFile) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
data = makeData( csvManager.makeLoader(csvFile) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load02" );
data = makeData( csvManager.makeLoader(csvFile) );
assertEquals( loadcanon02, canon(data) );
assertEquals( 3, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load03" );
data = makeData( csvManager.makeLoader(csvFile) );
assertEquals( loadcanon03, canon(data) );
assertEquals( 4, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load01" );
data = makeData( csvManager.makeLoader(csvFile.getAbsolutePath()) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
data = makeData( csvManager.makeLoader(csvFile.getAbsolutePath()) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load02" );
data = makeData( csvManager.makeLoader(csvFile.getAbsolutePath()) );
assertEquals( loadcanon02, canon(data) );
assertEquals( 3, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load03" );
data = makeData( csvManager.makeLoader(csvFile.getAbsolutePath()) );
assertEquals( loadcanon03, canon(data) );
assertEquals( 4, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load01" );
InputStream is = new FileInputStream( csvFile );
data = makeData( csvManager.makeLoader(is) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
is.close();
is = new FileInputStream( csvFile );
data = makeData( csvManager.makeLoader(is) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
is.close();
csvFile = TestUtil.getTextCsvFile( "load02" );
is = new FileInputStream( csvFile );
data = makeData( csvManager.makeLoader(is) );
assertEquals( loadcanon02, canon(data) );
assertEquals( 3, csvManager.getLineCount() );
is.close();
csvFile = TestUtil.getTextCsvFile( "load03" );
is = new FileInputStream( csvFile );
data = makeData( csvManager.makeLoader(is) );
assertEquals( loadcanon03, canon(data) );
assertEquals( 4, csvManager.getLineCount() );
is.close();
csvFile = TestUtil.getTextCsvFile( "load01" );
Reader fr = new FileReader( csvFile );
data = makeData( csvManager.makeLoader(fr) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
fr.close();
fr = new FileReader( csvFile );
data = makeData( csvManager.makeLoader(fr) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
fr.close();
csvFile = TestUtil.getTextCsvFile( "load02" );
fr = new FileReader( csvFile );
data = makeData( csvManager.makeLoader(fr) );
assertEquals( loadcanon02, canon(data) );
assertEquals( 3, csvManager.getLineCount() );
fr.close();
csvFile = TestUtil.getTextCsvFile( "load03" );
fr = new FileReader( csvFile );
data = makeData( csvManager.makeLoader(fr) );
assertEquals( loadcanon03, canon(data) );
assertEquals( 4, csvManager.getLineCount() );
fr.close();
csvFile = TestUtil.getTextCsvFile( "load01" );
data = makeData( csvManager.makeLoader( new Text( FileUtil.readFile(csvFile) ) ) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
data = makeData( csvManager.makeLoader( new Text( FileUtil.readFile(csvFile) ) ) );
assertEquals( loadcanon01, canon(data) );
assertEquals( 2, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load02" );
data = makeData( csvManager.makeLoader( new Text( FileUtil.readFile(csvFile) ) ) );
assertEquals( loadcanon02, canon(data) );
assertEquals( 3, csvManager.getLineCount() );
csvFile = TestUtil.getTextCsvFile( "load03" );
data = makeData( csvManager.makeLoader( new Text( FileUtil.readFile(csvFile) ) ) );
assertEquals( loadcanon03, canon(data) );
assertEquals( 4, csvManager.getLineCount() );
}
public void testArray() {
String csv = "a,b,c\nd,e\nf\n";
CsvManager cm = new CsvManager();
CsvLoader cl = cm.makeLoader( new Text(csv) );
StringBuffer sb = new StringBuffer();
cl.begin();
while( cl.hasNext() ) {
sb.append( Arrays.asList(cl.next()) );
}
cl.end();
assertEquals( "[a, b, c][d, e, ][f, , ]", sb.toString() );
cm.getCsvSpec().setNumFields(4);
cl = cm.makeLoader( new Text(csv) );
sb = new StringBuffer();
cl.begin();
while( cl.hasNext() ) {
sb.append( Arrays.asList(cl.next()) );
}
cl.end();
assertEquals( "[a, b, c, ][d, e, , ][f, , , ]", sb.toString() );
}
public void testEmptyLines() {
String csv = "1,a,AA\n\n\n2,b,BB\n3,c,CC\n\n";
CsvManager csvman = new CsvManager();
csvman.setIgnoreEmptyLines(true);
CsvLoader loader = csvman.makeLoader( new Text(csv) );
StringBuffer sb = new StringBuffer();
loader.begin();
while (loader.hasNext()) {
String[] fields = loader.next();
for (int field = 0; field < fields.length; field++) {
sb.append(fields[field] + ", ");
}
sb.append("~");
}
loader.end();
assertEquals("1, a, AA, ~2, b, BB, ~3, c, CC, ~",sb.toString());
}
private List makeData( CsvLoader pCsvLoader ) throws Exception {
ArrayList data = new ArrayList();
pCsvLoader.begin();
while( pCsvLoader.hasNext() ) {
String[] fields = pCsvLoader.next();
data.add( fields );
}
pCsvLoader.end();
return data;
}
private String canon( List pData ) throws Exception {
StringBuffer sb = new StringBuffer();
for( Iterator dI = pData.iterator(); dI.hasNext(); ) {
String[] da = (String[]) dI.next();
sb.append( Arrays.asList(da)+", " );
}
return sb.toString();
}
}