package com.ricebridge.xmlman.test;
import com.ricebridge.xmlman.*;
import com.ricebridge.xmlman.in.*;
import com.ricebridge.xmlman.in.test.*;
import com.ricebridge.data.BeanSpec;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import org.xml.sax.InputSource;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import java.util.*;
import java.io.*;
public class XmlManagerTest extends TestCase {
public XmlManagerTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( XmlManagerTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
public void testSimple() throws Exception {
File xmlfile = null;
xmlfile = TestUtil.findFile( "com/ricebridge/xmlman/test/rss-rbnews.xml" );
XmlManager xmlman = new XmlManager();
RecordSpec rs = new RecordSpec("//item", new String[] { "/rss/channel/title", "title", "link" } );
List data = xmlman.load( xmlfile, rs );
System.out.println( TestUtil.dataToString(data) );
}
public void testBeans() throws Exception {
File xmlfile = null;
xmlfile = TestUtil.findFile( "com/ricebridge/xmlman/test/rss-rbnews.xml" );
XmlManager xmlman = new XmlManager();
RecordSpec rs = new RecordSpec("//item",
new String[] { "pubDate", "title", "link" },
new String[] { "PubDate", "Title", "Link" } );
List data = xmlman.loadBeans( xmlfile, rs, new BeanSpec(ItemBean.class) );
System.out.println( data );
}
private static String sAtomNS = "http://www.w3.org/2005/Atom";
private static String sAtomFilePath = "com/ricebridge/xmlman/test/atom.xml";
private static RecordSpec sAtomFeedRS
= new RecordSpec("/a:feed",
new String[] {
"'feed'",
"a:title", "a:link[not(@rel) or @rel='alternate']/@href",
"@xml:base",
"a:subtitle/@type",
"rb:xml(a:subtitle)",
} );
private static RecordSpec sAtomEntryRS
= new RecordSpec("/a:feed/a:entry",
new String[] {
"'entry'",
"a:title", "a:link[not(@rel) or @rel='alternate']/@href",
"a:summary/@type",
"rb:xml(a:summary)",
"a:content/@type",
"rb:xml(a:content)",
} );
public void testAtom() throws Exception {
XmlManager xmlman = new XmlManager();
XmlSpec xmlspec = xmlman.getXmlSpec();
xmlspec.addNamespace("a",sAtomNS);
xmlspec.addNamespace("xml","http://www.w3.org/XML/1998/namespace");
File xmlfile = TestUtil.findFile( sAtomFilePath );
List data = xmlman.load( xmlfile, new RecordSpec( sAtomFeedRS, sAtomEntryRS ) );
System.out.println( "data:"+TestUtil.dataToString(data) );
}
private static String sLoadFilePath = "com/ricebridge/xmlman/test/load.xml";
public void testLoad() throws Exception {
XmlManager xmlman = new XmlManager();
List data = null;
RecordSpec rs_bar = new RecordSpec("/foo/bar", new String[] { "@name", "que" } );
List data_bar = ListUtil.make( new String[] {"b1", "q1"},
new String[] {"b2", "q2"} );
RecordSpec rs_far = new RecordSpec("/foo/far", new String[] { "@name", "zoo" } );
List data_far = ListUtil.make( new String[] {"f1", "z1"} );
List data_barfar = new ArrayList();
data_barfar.addAll( data_bar );
data_barfar.addAll( data_far );
RecordSpec rs = new RecordSpec( rs_bar, rs_far );
File xmlfile = TestUtil.findFile( sLoadFilePath );
String xmlfilepath = xmlfile.getAbsolutePath();
data = xmlman.load( xmlfilepath, rs_bar );
assertEquals( rs_bar+TestUtil.dataToString(data_bar), rs_bar+TestUtil.dataToString(data) );
data = xmlman.load( xmlfilepath, rs );
assertEquals( rs_bar+TestUtil.dataToString(data_barfar), rs_bar+TestUtil.dataToString(data) );
data = xmlman.load( xmlfile, rs_bar );
assertEquals( rs_bar+TestUtil.dataToString(data_bar), rs_bar+TestUtil.dataToString(data) );
data = xmlman.load( xmlfile, rs );
assertEquals( rs_bar+TestUtil.dataToString(data_barfar), rs_bar+TestUtil.dataToString(data) );
InputStream is = new FileInputStream( xmlfile );
data = xmlman.load( is, rs_bar );
assertEquals( rs_bar+TestUtil.dataToString(data_bar), rs_bar+TestUtil.dataToString(data) );
is.close();
is = new FileInputStream( xmlfile );
data = xmlman.load( is, rs );
assertEquals( rs_bar+TestUtil.dataToString(data_barfar), rs_bar+TestUtil.dataToString(data) );
is.close();
is = new FileInputStream( xmlfile );
InputSource isrc = new InputSource(is);
data = xmlman.load( isrc, rs_bar );
assertEquals( rs_bar+TestUtil.dataToString(data_bar), rs_bar+TestUtil.dataToString(data) );
is.close();
is = new FileInputStream( xmlfile );
isrc = new InputSource(is);
data = xmlman.load( isrc, rs );
assertEquals( rs_bar+TestUtil.dataToString(data_barfar), rs_bar+TestUtil.dataToString(data) );
is.close();
String uri = xmlfile.getAbsolutePath();
if( !uri.startsWith("/") ) { uri = "/"+uri; }
uri = "file://"+uri;
uri = uri.replace('\\','/');
data = xmlman.loadFromURI( uri, rs_bar );
assertEquals( rs_bar+TestUtil.dataToString(data_bar), rs_bar+TestUtil.dataToString(data) );
data = xmlman.loadFromURI( uri, rs );
assertEquals( rs_bar+TestUtil.dataToString(data_barfar), rs_bar+TestUtil.dataToString(data) );
String xmlstring = FileUtil.readFile( xmlfile );
data = xmlman.loadFromString( xmlstring, rs_bar );
assertEquals( rs_bar+TestUtil.dataToString(data_bar), rs_bar+TestUtil.dataToString(data) );
data = xmlman.loadFromString( xmlstring, rs );
assertEquals( rs_bar+TestUtil.dataToString(data_barfar), rs_bar+TestUtil.dataToString(data) );
}
public static class ItemBean {
private String iTitle;
private String iLink;
private String iPubDate;
public void setTitle( String pTitle ) {
iTitle = pTitle;
}
public String getTitle() {
return iTitle;
}
public void setLink( String pLink ) {
iLink = pLink;
}
public String getLink() {
return iLink;
}
public void setPubDate( String pPubDate ) {
iPubDate = pPubDate;
}
public String getPubDate() {
return iPubDate;
}
public String toString() {
return "Item[t="+getTitle()+",l="+getLink()+",pd="+getPubDate()+"]";
}
}
}