package test.xui.data;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import junit.framework.TestCase;
import net.xoetrope.awt.XApplet;
import net.xoetrope.data.XDataSource;
import net.xoetrope.xml.XmlElement;
import net.xoetrope.xml.XmlSource;
import net.xoetrope.xui.XProject;
import net.xoetrope.xui.XProjectManager;
import net.xoetrope.xui.data.XBaseModel;
import net.xoetrope.xui.data.XModel;
public class TestXBaseModel extends TestCase
{
XBaseModel xBaseModel = null;
public TestXBaseModel( String name )
{
super( name );
}
protected void setUp() throws Exception
{
super.setUp();
xBaseModel = new XBaseModel();
XApplet so = new XApplet();
XProject project = XProjectManager.getCurrentProject( so );
XDataSource ds = new XDataSource( project );
InputStream is = ds.getClass().getClassLoader().getResourceAsStream( "test/xui/data/people.xml" );
XmlElement src = XmlSource.read( new BufferedReader( new InputStreamReader( is ) ) );
src.setName( "people" );
ds.loadTable( src, xBaseModel );
xBaseModel.setId( "TextXBaseModel" );
xBaseModel.setTagName( "TestNode" );
xBaseModel.setNumAttributes( 3 );
xBaseModel.setAttribValue( 0, "extraData", "testValue" );
xBaseModel.setAttribValue( 2, "extraData", "moreInfo" );
XBaseModel child = new XBaseModel();
child.setId( "family" );
child.setTagName( "family" );
child.setAttribValue( 0, null, "doe" );
xBaseModel.append( child );
}
protected void tearDown() throws Exception
{
xBaseModel = null;
super.tearDown();
}
public void testSetup()
{
Object expectedReturn = "testValue";
Object actualReturn = xBaseModel.get();
assertEquals( "return value", expectedReturn, actualReturn );
expectedReturn = "value";
actualReturn = xBaseModel.getAttribName( 0 );
assertEquals( "value attribute", expectedReturn, actualReturn );
expectedReturn = "extraData";
actualReturn = xBaseModel.getAttribName( 2 );
assertEquals( "extra attribute", expectedReturn, actualReturn );
expectedReturn = "moreInfo";
actualReturn = xBaseModel.getAttribValue( 2 );
assertEquals( "extra attribute", expectedReturn, actualReturn );
}
public void testGet()
{
String expectedReturn = "doe";
XModel model = ((XModel)xBaseModel.get( "families/family@nationality=irish" ));
String actualReturn = model.getAttribValueAsString( XBaseModel.VALUE_ATTRIBUTE );
assertEquals( "get child value", expectedReturn, actualReturn );
XModel secondModel = ((XModel)xBaseModel.get( "families/family@nationality=unknown" ));
String actualReturn2 = secondModel.getAttribValueAsString( XBaseModel.VALUE_ATTRIBUTE );
assertEquals( "get child value 1", expectedReturn, actualReturn2 );
assertNotSame( model, secondModel );
XModel childModel = ((XModel)xBaseModel.get( "families/family@nationality=irish/jane" ));
assertEquals( childModel.getNumChildren(), 3 );
actualReturn = secondModel.getAttribValueAsString( XBaseModel.VALUE_ATTRIBUTE );
assertEquals( "get child value 2", expectedReturn, actualReturn2 );
assertNotSame( model, secondModel );
XModel childModel2 = ((XModel)xBaseModel.get( "families/family@nationality=irish/jane/brother@age=2" ));
actualReturn = childModel2.getAttribValueAsString( childModel2.getAttribute( "value" ));
assertEquals( "get child value 3", "james", actualReturn );
// This is an invalid path
XModel childModel3 = ((XModel)xBaseModel.get( "families/family@nationality=irish/jane/james@age=2" ));
actualReturn = childModel3.getAttribValueAsString( childModel3.getAttribute( "value" ));
assertNotSame( "get child value 4", "james", actualReturn );
}
}