package com.ricebridge.xmlman.in.test;
import com.ricebridge.xmlman.RecordSpec;
import com.ricebridge.xmlman.in.*;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import java.util.*;
import java.io.*;
public class XmlOutputHandlerTest extends TestCase {
public XmlOutputHandlerTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( XmlOutputHandlerTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
public OutNode makeNodeTree01() {
OutNode root = new OutNode("root",1);
OutNode a = new OutNode("a",1);
root.addChild(a);
OutNode b = new OutNode("b",1);
a.addChild(b);
OutNode c = new OutNode("c",1);
b.addChild(c);
OutNode d = new OutNode("d",1);
b.addChild(d);
OutNode e = new OutNode("e",1);
d.addChild(e);
return root;
}
public void testTraverse() throws Exception {
System.out.println( );
OutNode root = makeNodeTree01();
XmlOutputHandler oh = new XmlOutputHandler();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmlWriter xw = new XmlWriter();
xw.setOutput(baos,"UTF-8");
xw.setIndent(true);
xw.startDocument("");
xw.startElement("root",new ArrayList(),null);
oh.setXmlWriter(xw);
oh.traverse( root, false );
oh.traverse( root, false );
oh.traverse( root, false );
xw.endElement("root");
xw.endDocument("");
System.out.println( baos.toString("UTF-8") );
}
public void testFindSubNode() throws Exception {
OutNode root = makeNodeTree01();
XmlOutputHandler oh = new XmlOutputHandler();
OutNode f = oh.findSubNode( root, "a" );
assertEquals( "a", f.getName() );
f = oh.findSubNode( root, "d" );
assertEquals( "d", f.getName() );
}
public void testCreateNodeTree() throws Exception {
XmlOutputHandler oh = new XmlOutputHandler();
ArrayList opl = new ArrayList();
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("an") ), true, "a", OutPath.CHILD ) );
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("bn") ), true, "a", OutPath.CHILD, "b", OutPath.CHILD ) );
opl.add( new TestOutPath( new OutData(true), true, "a", OutPath.CHILD, "b", OutPath.CHILD, "d", OutPath.CHILD ) );
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("dn") ), true, "d", OutPath.DESCEND ) );
TestOutPath rec = new TestOutPath( new OutData(), true, "a", OutPath.CHILD, "b", OutPath.CHILD, "c", OutPath.CHILD );
rec.setIsRecord(true);
opl.add( rec );
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("foo") ), false ) );
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("en") ), false, "e", OutPath.CHILD ) );
opl.add( new TestOutPath( new OutData(true), false, "e", OutPath.CHILD, "f", OutPath.CHILD ) );
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("fn") ), false, "f", OutPath.DESCEND ) );
opl.add( new TestOutPath( new OutData( TestUtil.makeNameInfo("gn") ), false, "g", OutPath.DESCEND ) );
OutNode recn = oh.createNodeTree( opl );
oh.makeChangeLists( recn );
OutNode r = oh.findRoot(recn);
System.out.println( r.debugString() );
}
public void testWrite() {
XmlOutputHandler oh = new XmlOutputHandler();
RecordSpec rs = new RecordSpec( "/a/b/c", new String[] {"@cn","d/@dn","e","//f/@fn","/a/b/@bn", "/a/b/g/@gn"} );
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmlWriter xw = new XmlWriter();
xw.setOutput(baos,"UTF-8");
oh.setXmlWriter(xw);
oh.prepare(rs);
OutNode r = oh.findRoot();
System.out.println( r.debugString() );
oh.startWrite();
oh.writeRecord( new String[] {"c1","d1","e1","fn1","b1","g1"} );
oh.writeRecord( new String[] {"c2","d2","e2","fn1","b1","g1"} );
oh.writeRecord( new String[] {"c3","d3","e3","fn2","b1","g1"} );
oh.writeRecord( new String[] {"c4","d4","e4","fn2","b1","g1"} );
oh.writeRecord( new String[] {"c5","d5","e5","fn2","b1","g2"} );
oh.writeRecord( new String[] {"c6","d6","e6","fn2","b1","g2"} );
oh.writeRecord( new String[] {"c7","d7","e7","fn2","b2","g2"} );
oh.writeRecord( new String[] {"c8","d8","e8","fn2","b2","g2"} );
oh.writeRecord( new String[] {"c9","d9","e9","fn2","b2","g2"} );
oh.endWrite(true);
System.out.println( baos.toString() );
}
public void testNoRecords() {
XmlOutputHandler oh = new XmlOutputHandler();
RecordSpec rs = new RecordSpec( "/a/b/c", new String[] {"@cn","d/@dn","e","//f/@fn","/a/b/@bn", "/a/b/g/@gn"} );
XmlWriter xw = new XmlWriter();
oh.setXmlWriter(xw);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
xw.setOutput(baos,"UTF-8");
oh.prepare(rs);
oh.startWrite();
oh.endWrite(true);
System.out.println( rs+":NORECORDS:"+baos.toString() );
baos = new ByteArrayOutputStream();
xw.setOutput(baos,"UTF-8");
rs = new RecordSpec( "/a/b/c", new String[] {"@c"} );
oh.prepare(rs);
oh.startWrite();
oh.endWrite(true);
System.out.println( rs+":NORECORDS:"+baos.toString() );
baos = new ByteArrayOutputStream();
xw.setOutput(baos,"UTF-8");
rs = new RecordSpec( "/a/b", new String[] {"@b"} );
oh.prepare(rs);
oh.startWrite();
oh.endWrite(true);
System.out.println( rs+":NORECORDS:"+baos.toString() );
}
public void testValidRecordPath() {
XmlOutputHandler oh = new XmlOutputHandler();
RecordSpec rs = new RecordSpec( "", new String[] {"b"} );
try {
oh.prepare(rs);
fail();
}
catch( Exception e ) {
System.out.println( e );
}
}
}