package com.ricebridge.csvman.test;
import com.ricebridge.csvman.*;
import com.ricebridge.data.Text;
import junit.framework.*;
import junit.textui.*;
import java.util.*;
public class CsvLoaderBadLineTest extends TestCase {
public CsvLoaderBadLineTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( CsvLoaderBadLineTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
public void testFailModes() throws Exception {
String badcsv = "1,a\n2,\"b\"b\n3,\"c\"";
CsvManager csvManager = new CsvManager();
CsvLoader loader = csvManager.makeLoader( new Text(badcsv) );
loader.begin();
assertTrue( loader.hasNext() );
assertEquals( "[1, a]", Arrays.asList(loader.next()).toString() );
assertTrue( loader.hasNext() );
try {
loader.next();
fail();
}
catch( Exception e ) {
assertEquals( "An incorrectly formatted line caused processing to halt. The line was: '2,\"b\"b'. The parse error was: 'unexpected token: b'.", e.toString() );
CsvManagerException ce = (CsvManagerException) e;
BadLine badline = ce.getBadLine();
assertEquals( "[CSV:BadLine:2:unexpected token: b:SYNTAX:2,\"b\"b]", badline.toString() );
}
loader.end();
csvManager.setIgnoreBadLines(true);
loader = csvManager.makeLoader( new Text(badcsv) );
loader.begin();
assertTrue( loader.hasNext() );
assertEquals( "[1, a]", Arrays.asList(loader.next()).toString() );
assertTrue( loader.hasNext() );
try {
loader.next();
fail();
}
catch( Exception e ) {
assertEquals( "An incorrectly formatted line caused processing to halt. The line was: '2,\"b\"b'. The parse error was: 'unexpected token: b'.", e.toString() );
}
assertTrue( loader.hasNext() );
assertEquals( "[3, c]", Arrays.asList(loader.next()).toString() );
assertTrue( !loader.hasNext() );
loader.end();
}
public void testContinueAttempt() {
String badcsv = "1,a\n2,\"b\"b\n3,\"c\"";
CsvManager csvManager = new CsvManager();
CsvLoader loader = csvManager.makeLoader( new Text(badcsv) );
ArrayList lines = new ArrayList();
Exception nextE = null;
Exception hasNextE = null;
int numlines = 0;
loader.begin();
try {
while( loader.hasNext() ) {
try {
numlines++;
lines.add( Arrays.asList( loader.next() ) );
}
catch( Exception e ) {
if( null != nextE ) {
fail();
}
else {
nextE = e;
}
}
}
}
catch( Exception e ) {
if( null != hasNextE ) {
fail();
}
else {
hasNextE = e;
}
}
loader.end();
assertEquals( 2, numlines );
assertEquals( "An incorrectly formatted line caused processing to halt. The line was: '2,\"b\"b'. The parse error was: 'unexpected token: b'.", nextE.toString() );
assertEquals( "An incorrectly formatted line caused processing to halt. The line was: '2,\"b\"b'. The parse error was: 'unexpected token: b'.", hasNextE.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;
}
}