package com.ricebridge.xmlman.test;
import com.ricebridge.xmlman.*;
import com.ricebridge.xmlman.in.*;
import com.ricebridge.xmlman.in.test.*;
import com.ricebridge.xmlman.log.*;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import java.util.*;
import java.io.*;
import javax.swing.table.TableModel;
import java.sql.ResultSet;
public class BackgroundTest extends TestCase {
public BackgroundTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( BackgroundTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
public void testLoad() throws Exception {
File xmlFile = TestUtil.findFile( "com/ricebridge/xmlman/test/example.xml" );
XmlManager xmlManager = new XmlManager();
RecordSpec rs = new RecordSpec( "/root/record", new String[] {"@name","foo","bar"} );
boolean waited = false;
xmlManager.getXmlSpec().setBackground(true);
xmlManager.getXmlSpec().setProperty("test.delay",""+100);
waited = false;
xmlManager.getXmlManagerStore().setStringArrayRecordListenerClass( DelayedStringArrayRecordListener.class );
List stringarray = xmlManager.load( xmlFile, rs );
assertEquals( 0, stringarray.size() );
while( !xmlManager.isLoadFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( "[r1, f1, b1]\n[r2, f2, b2]\n[r3, f3, b3]\n", TestUtil.dataToString(stringarray) );
waited = false;
xmlManager.getXmlManagerStore().setStringListRecordListenerClass( DelayedStringListRecordListener.class );
List stringlist = xmlManager.loadAsLists( xmlFile, rs );
assertEquals( 0, stringlist.size() );
while( !xmlManager.isLoadFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( "[[r1, f1, b1], [r2, f2, b2], [r3, f3, b3]]", stringlist.toString() );
waited = false;
xmlManager.getXmlManagerStore().setTableModelRecordListenerClass( DelayedTableModelRecordListener.class );
TableModel tm = xmlManager.loadTableModel( xmlFile, rs );
assertEquals( 0, tm.getRowCount() );
while( !xmlManager.isLoadFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( "XmlTableModel[head:false,edit:false, data:[|r1|f1|b1|\n|r2|f2|b2|\n|r3|f3|b3|\n]]", tm.toString() );
waited = false;
xmlManager.getXmlManagerStore().setResultSetRecordListenerClass( DelayedResultSetRecordListener.class );
ResultSet resultset = xmlManager.loadResultSet( xmlFile, rs );
assertEquals( 0, ((XmlResultSet)resultset).getRowCount() );
while( !xmlManager.isLoadFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( "XmlResultSet[head:false, data:[r1 f1 b1|r2 f2 b2|r3 f3 b3|]]", resultset.toString() );
waited = false;
DelayedStringArrayRecordListener drl = new DelayedStringArrayRecordListener();
xmlManager.load( xmlFile, rs, drl );
stringarray = drl.getRecords();
assertEquals( 0, stringarray.size() );
while( !xmlManager.isLoadFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( "[r1, f1, b1]\n[r2, f2, b2]\n[r3, f3, b3]\n", TestUtil.dataToString(stringarray) );
}
public void testSave() throws Exception {
String xmlcanon = "<root><record name=\"r1\"><foo>f1</foo><bar>b1</bar></record><record name=\"r2\"><foo>f2</foo><bar>b2</bar></record><record name=\"r3\"><foo>f3</foo><bar>b3</bar></record></root>";
File xmlFile = TestUtil.findFile( "com/ricebridge/xmlman/test/save.xml" );
XmlManager xmlManager = new XmlManager();
RecordSpec rs = new RecordSpec( "/root/record", new String[] {"@name","foo","bar"} );
boolean waited = false;
xmlManager.getXmlSpec().setIndent(false);
xmlManager.getXmlSpec().setBackground(true);
xmlManager.getXmlSpec().setProperty("test.delay",""+500);
List data = new ArrayList();
data.add( new String[]{"r1", "f1", "b1"} );
data.add( new String[]{"r2", "f2", "b2"} );
data.add( new String[]{"r3", "f3", "b3"} );
waited = false;
xmlManager.getXmlManagerStore().setStringArrayRecordProviderClass( DelayedStringArrayRecordProvider.class );
FileUtil.writeFile(xmlFile,"");
xmlManager.save( xmlFile, rs, data );
assertEquals( "", FileUtil.readFile(xmlFile) );
while( !xmlManager.isSaveFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( xmlcanon, FileUtil.readFile(xmlFile) );
waited = false;
xmlManager.getXmlManagerStore().setStringListRecordProviderClass( DelayedStringListRecordProvider.class );
FileUtil.writeFile(xmlFile,"");
xmlManager.save( xmlFile, rs, data );
assertEquals( "", FileUtil.readFile(xmlFile) );
while( !xmlManager.isSaveFinished() ) { try { Thread.sleep(50); waited=true; } catch( Exception e ) {} }
assertTrue( waited );
assertEquals( xmlcanon, FileUtil.readFile(xmlFile) );
}
public static class DelayedStringArrayRecordListener extends StringArrayRecordListener {
Delayer iDelayer;
protected void setXmlSpecImpl( XmlSpec pXmlSpec ) { iDelayer = new Delayer( pXmlSpec ); }
protected void startProcessImpl() { iDelayer.delay(); }
}
public static class DelayedStringListRecordListener extends StringListRecordListener {
Delayer iDelayer;
protected void setXmlSpecImpl( XmlSpec pXmlSpec ) { iDelayer = new Delayer( pXmlSpec ); }
protected void startProcessImpl() { iDelayer.delay(); }
}
public static class DelayedTableModelRecordListener extends TableModelRecordListener {
Delayer iDelayer;
protected void setXmlSpecImpl( XmlSpec pXmlSpec ) { iDelayer = new Delayer( pXmlSpec ); }
protected void startProcessImpl() { iDelayer.delay(); }
}
public static class DelayedResultSetRecordListener extends ResultSetRecordListener {
Delayer iDelayer;
protected void setXmlSpecImpl( XmlSpec pXmlSpec ) { iDelayer = new Delayer( pXmlSpec ); }
protected void startProcessImpl() { iDelayer.delay(); }
}
public static class DelayedStringArrayRecordProvider extends StringArrayRecordProvider {
Delayer iDelayer;
protected void setXmlSpecImpl( XmlSpec pXmlSpec ) { iDelayer = new Delayer( pXmlSpec ); }
protected void startProcessImpl() { iDelayer.delay(); }
}
public static class DelayedStringListRecordProvider extends StringListRecordProvider {
Delayer iDelayer;
protected void setXmlSpecImpl( XmlSpec pXmlSpec ) { iDelayer = new Delayer( pXmlSpec ); }
protected void startProcessImpl() { iDelayer.delay(); }
}
public static class Delayer {
private long iMillis = 0;
public Delayer( XmlSpec pXmlSpec ) {
iMillis = Integer.parseInt( pXmlSpec.getProperty("test.delay") );
}
public Delayer( long pMillis ) {
iMillis = pMillis;
}
public void delay() {
long end = new Date().getTime() + iMillis ;
long now;
while( (now = new Date().getTime()) < end ) {
try { Thread.sleep( end-now ); } catch( Exception e ) {}
}
}
}
}