package com.ricebridge.xmlman.in.test;
import com.ricebridge.xmlman.*;
import com.ricebridge.xmlman.XmlManagerException;
import com.ricebridge.xmlman.in.*;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import java.util.*;
import java.io.*;
public class AxisTest extends TestCase {
public AxisTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( AxisTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
private static ArrayList sRecordSpecList = new ArrayList();
private static ArrayList sRecordDataList = new ArrayList();
static {
ArrayList records;
sRecordSpecList.add( new RecordSpec( "/descendant::que", new String[] { "@name", "/foo/@name", "rb:trim(/foo)" } ) );
records = new ArrayList();
records.add( new String[] { "que1", "foo1", "ft1\n ft2" } );
records.add( new String[] { "que2", "foo1", "ft1\n ft2" } );
records.add( new String[] { "que3", "foo1", "ft1\n ft2" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/foo/bar", new String[] { "@name",
".//que//noo/@name",
".//que[@color='green']//noo/@name",
".//que[//noo]//noo/@name",
".//que[//noo//boo]//noo/@name",
} ) );
sRecordDataList.add( ListUtil.make( new String[] { "bar1", "noo1", "noo1", "noo1", "noo1" },
new String[] { "bar2", "", "", "", "" },
new String[] { "bar3", "", "", "", "" } ) );
sRecordSpecList.add( new RecordSpec( "/foo/bar", new String[] { "//noo/@name",
".//noo/@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "noo1", "noo1" },
new String[] { "noo1", "" },
new String[] { "noo1", "" } ) );
sRecordSpecList.add( new RecordSpec( "/foo/bar", new String[] { "//que/@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "que1" },
new String[] { "que2" },
new String[] { "que2" } ) );
sRecordSpecList.add( new RecordSpec( "/foo/bar", new String[] { ".//que/@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "que1" },
new String[] { "que2" },
new String[] { "" } ) );
sRecordSpecList.add( new RecordSpec( "//foo//bar//que", new String[] { "@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "que1" },
new String[] { "que2" } ) );
sRecordSpecList.add( new RecordSpec( "//foo//bar", new String[] { "@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "bar1" },
new String[] { "bar2" },
new String[] { "bar3" } ) );
sRecordSpecList.add( new RecordSpec( "//foo", new String[] { "@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "foo2" },
new String[] { "foo1" } ) );
sRecordSpecList.add( new RecordSpec( "/foo/entry", new String[] { "@name",
"/foo/link[not(@rel)]/@href",
"/foo/link[@rel]/@href",
"//que/@name",
"/foo/que/@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "e1", "href1", "href2", "que3", "que3" } ) );
sRecordSpecList.add( new RecordSpec( "/foo/bar/que", new String[] { "@name", "/foo/bar/@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "que1", "bar1" },
new String[] { "que2", "bar2" } ) );
sRecordSpecList.add( new RecordSpec( "/*", new String[] { "@name" } ) );
sRecordDataList.add( ListUtil.make( new String[] { "foo1" } ) );
sRecordSpecList.add( new RecordSpec( "//*", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "foo2" } );
records.add( new String[] { "boo1" } );
records.add( new String[] { "noo1" } );
records.add( new String[] { "que1" } );
records.add( new String[] { "bar1" } );
records.add( new String[] { "que2" } );
records.add( new String[] { "bar2" } );
records.add( new String[] { "bar3" } );
records.add( new String[] { "que4" } );
records.add( new String[] { "que3" } );
records.add( new String[] { "" } ); records.add( new String[] { "" } );
records.add( new String[] { "e1" } );
records.add( new String[] { "foo1" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/foo/*", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "foo2" } );
records.add( new String[] { "bar1" } );
records.add( new String[] { "bar2" } );
records.add( new String[] { "bar3" } );
records.add( new String[] { "que3" } );
records.add( new String[] { "" } ); records.add( new String[] { "" } );
records.add( new String[] { "e1" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/*/bar", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "bar1" } );
records.add( new String[] { "bar2" } );
records.add( new String[] { "bar3" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/foo/bar/que", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "que1" } );
records.add( new String[] { "que2" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/foo/*/que", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "que1" } );
records.add( new String[] { "que2" } );
records.add( new String[] { "que4" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/foo", new String[] { "@*", "name(@*)", "namespace-uri(@*)" } ) );
records = new ArrayList();
records.add( new String[] { "foo1", "name", "" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "//bar", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "bar1" } );
records.add( new String[] { "bar2" } );
records.add( new String[] { "bar3" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/descendant::bar", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "bar1" } );
records.add( new String[] { "bar2" } );
records.add( new String[] { "bar3" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "//bar[1]", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "bar1" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/descendant::bar[1]", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "bar1" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "//que", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "que1" } );
records.add( new String[] { "que2" } );
records.add( new String[] { "que4" } );
records.add( new String[] { "que3" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/que", new String[] { "@name" } ) );
records = new ArrayList();
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/descendant::que", new String[] { "@name", "/foo/@name", "rb:trim(/foo/text()[1])" } ) );
records = new ArrayList();
records.add( new String[] { "que1", "foo1", "ft1" } );
records.add( new String[] { "que2", "foo1", "ft1" } );
records.add( new String[] { "que3", "foo1", "ft1" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "//que[1]", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "que1" } );
records.add( new String[] { "que2" } );
records.add( new String[] { "que4" } );
records.add( new String[] { "que3" } );
sRecordDataList.add( records );
sRecordSpecList.add( new RecordSpec( "/descendant::que[1]", new String[] { "@name" } ) );
records = new ArrayList();
records.add( new String[] { "que1" } );
records.add( new String[] { "que2" } );
records.add( new String[] { "que3" } );
sRecordDataList.add( records );
}
public void testUnsupAxis() {
String[] parents = new String[] { "..",
"../foo", "foo/..",
"/../foo", "/foo/..",
"/foo/bar/..", "/foo/../bar" };
for( int pI = 0; pI < parents.length; pI++ ) {
try {
TestUtil.testRecordSpec( new RecordSpec( parents[pI], new String[]{} ) );
fail( parents[pI] );
}
catch( XmlManagerException xme ) {
System.out.println( xme );
assertEquals( XmlManagerException.CODE_unsup_axis, xme.getCode() );
}
}
String[] unsupaxis = new String[] { "parent",
"ancestor", "ancestor-or-self",
"following-sibling", "preceding-sibling",
"following",
"preceding" };
for( int aI = 0; aI < unsupaxis.length; aI++ ) {
try {
TestUtil.testRecordSpec( new RecordSpec( "/"+unsupaxis[aI]+"::foo", new String[]{} ) );
fail( unsupaxis[aI] );
}
catch( XmlManagerException xme ) {
System.out.println( xme );
assertEquals( XmlManagerException.CODE_unsup_axis, xme.getCode() );
}
}
try {
String parenexpr = "(//foo)[1]";
TestUtil.testRecordSpec( new RecordSpec( parenexpr, new String[]{} ) );
fail( parenexpr );
}
catch( XmlManagerException xme ) {
assertEquals( XmlManagerException.CODE_filter_expr, xme.getCode() );
}
}
public void testAxis() throws Exception {
TestUtil.testRecords( "com/ricebridge/xmlman/in/test/axis.xml", sRecordSpecList, sRecordDataList, this );
}
}