package org.bifrost.xmlio.test;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import junit.framework.TestCase;
import junit.textui.TestRunner;
import org.bifrost.xmlio.XmlReader;
import org.bifrost.xmlio.XmlException;
import org.bifrost.xmlio.config.DateConverter;
import org.bifrost.xmlio.config.NamespaceMap;
import org.bifrost.xmlio.config.ObjectMap;
import org.bifrost.xmlio.config.PropertyMap;
import org.bifrost.xmlio.config.TimestampConverter;
import org.bifrost.xmlio.config.XmlIOConfig;
import org.bifrost.xmlio.impl.ReaderContentHandler;
import org.bifrost.xmlio.test.helpers.*;
import org.bifrost.xmlio.test.helpers.inheritance.*;
import org.bifrost.xmlio.test.helpers.subpackage.TestHelperOther;
/**
* <p>Unit tests to validate the XmlReader package.</p>
* <p>
* Created: Feb 22, 2003<br/>
* Copyright: Copyright (c) 2003<br/>
* Assumptions: none<br/>
* Requires: TestHelperSimple, TestHelperComplex<br/>
* Required by: nothing<br/>
* Revision History:<br/>
* </p>
* @author Donald Kittle <donald@bifrost.org>
* @version 1.0
*/
public class FunctionalTestXmlReader extends TestCase {
private static final int TEST_SIMPLE = 0;
private static final int TEST_SIMPLE_ATTRIBUTES = 1;
private static final int TEST_COMPLEX = 2;
private static final int TEST_INHERITANCE = 3;
private static final int TEST_SIMPLE_NO_ATTRIBUTE = 4;
private static final int TEST_NO_OBJECT = 5;
private static final int TEST_SIMPLE_ARRAY = 6;
private static final int TEST_COMPLEX_ARRAY = 7;
private static final int TEST_BOOLEAN = 8;
private static final int TEST_MULTI_PACKAGE = 9;
private static final int TEST_EMPTY = 10;
private static final int TEST_DATE_SIMPLE = 11;
private static final int TEST_EMPTY_ELEMENT = 12;
private static final int TEST_EMPTY_ELEMENT_NOT_CALLED = 13;
private static final int TEST_NULL = 14;
private static final int TEST_EMPTY_STRING = 15;
private static final int TEST_FULL_PACKAGE_NAME = 16;
private static final int TEST_SIMPLE_NAMESPACES = 17;
private static final int TEST_ALL_TYPES = 18;
private static final int TEST_SECOND_NAMESPACES = 19;
private static final int TEST_OBJECT_PROPERTY_MAPPING = 20;
private static final int TEST_OBJECT_MAPPING = 21;
private static final int TEST_PROPERTY_MAPPING = 22;
private static final int TEST_DATE_COMPLEX = 23;
private static final int TEST_COLLECTIONS = 24;
private static final int TEST_AMP = 25;
private static final int TEST_BRACKETS = 26;
private static final int TEST_SIMPLE_CHILD = 27;
private static final int TEST_DEEP_CHILD = 28;
private static final int TEST_LOWER_FIRST_CHAR = 29;
private static final int TEST_SIMPLE_DASHES = 30;
private static final int TEST_VEHICLE_INHERITANCE = 31;
/**
* Runs all tests (test* methods) using a console based user interface.
*/
public static void main(String args[])
{
TestRunner.run(FunctionalTestXmlReader.class);
} // end main()
/**
* Constructor for TestCase
*/
public FunctionalTestXmlReader(String s) {
super(s);
}
/**
* Sets up the tests.
*/
public void setUp()
{
// Reset to default configuration between each test
XmlIOConfig.getInstance().reset();
}
/**
* Removes the test information from the system.
*/
public void tearDown()
{
}
/**
* Creates a string which is sample XML describing objects.
* @param type the specific xml file type to return
* @return String the xml
*/
public String createXml(int type)
{
StringBuffer result = new StringBuffer();
switch (type) {
case TEST_SIMPLE:
// Simple, one object test.
result.append("<TestHelperSimple>");
result.append(" <number>123</number>");
result.append(" <string>abc</string>");
result.append("</TestHelperSimple>");
break;
case TEST_AMP:
// Simple, one object test.
result.append("<TestHelperSimple>");
result.append(" <number>123</number>");
result.append(" <string>a&b</string>");
result.append("</TestHelperSimple>");
break;
case TEST_BRACKETS:
// Simple, one object test.
result.append("<TestHelperSimple>");
result.append(" <number>123</number>");
result.append(" <string>a<b>c</string>");
result.append("</TestHelperSimple>");
break;
case TEST_SIMPLE_ATTRIBUTES:
// Test an object where properties are set using xml attributes
// instead of sub-elements.
result.append("<TestHelperSimple number=\"234\" string=\"bcd\"/>");
break;
case TEST_COMPLEX:
// Complex test, several objects wrapped inside one.
result.append("<TestHelperComplex>");
result.append(" <TestHelperSimple number=\"345\" string=\"cde\"/>");
result.append(" <TestHelperSimple>");
result.append(" <number>456</number>");
result.append(" <string>def</string>");
result.append(" </TestHelperSimple>");
result.append("</TestHelperComplex>");
break;
case TEST_INHERITANCE:
// Complex test, several objects that extend a superclass.
result.append("<TestHelperSalesLot>");
result.append(" <TestHelperBoat>");
result.append(" <vin>123</vin>");
result.append(" <kms>1000</kms>");
result.append(" <topSpeedInKnots>60</topSpeedInKnots>");
result.append(" </TestHelperBoat>");
result.append(" <TestHelperCar>");
result.append(" <vin>i222g4</vin>");
result.append(" <kms>10000</kms>");
result.append(" <numberDoors>4</numberDoors>");
result.append(" </TestHelperCar>");
result.append(" <TestHelperCar>");
result.append(" <vin>i387g6</vin>");
result.append(" <kms>28000</kms>");
result.append(" <numberDoors>2</numberDoors>");
result.append(" </TestHelperCar>");
result.append("</TestHelperSalesLot>");
break;
case TEST_SIMPLE_NO_ATTRIBUTE:
// Test where an attribute will not be found in object.
result.append("<TestHelperSimple>");
result.append(" <aNumber>123</aNumber>");
result.append(" <string>abc</string>");
result.append("</TestHelperSimple>");
break;
case TEST_NO_OBJECT:
// Test where an object cannot be found.
result.append("<FooClass>");
result.append(" <number>123</number>");
result.append("</FooClass>");
break;
case TEST_SIMPLE_ARRAY:
// Test where an object has an array of primatives
result.append("<TestHelperArray>");
result.append(" <number>123</number>");
result.append(" <string>aaa</string>");
result.append(" <string>bbb</string>");
result.append(" <string>ccc</string>");
result.append("</TestHelperArray>");
break;
case TEST_COMPLEX_ARRAY:
result.append("<TestHelperComplexArray>");
result.append(" <number>123</number>");
result.append(" <TestHelperSimple>");
result.append(" <string>aaa</string>");
result.append(" <number>222</number>");
result.append(" </TestHelperSimple>");
result.append(" <TestHelperSimple>");
result.append(" <string>bbb</string>");
result.append(" <number>333</number>");
result.append(" </TestHelperSimple>");
result.append(" <TestHelperSimple>");
result.append(" <string>ccc</string>");
result.append(" <number>444</number>");
result.append(" </TestHelperSimple>");
result.append("</TestHelperComplexArray>");
break;
case TEST_BOOLEAN:
// Simple, one object test.
result.append("<TestHelperBoolean>");
result.append(" <fooled>true</fooled>");
result.append(" <rich>abc</rich>");
result.append("</TestHelperBoolean>");
break;
case TEST_MULTI_PACKAGE:
// Simple, one object test.
result.append("<TestHelperTwoPackages>");
result.append(" <TestHelperSimple>");
result.append(" <string>aaa</string>");
result.append(" <number>222</number>");
result.append(" </TestHelperSimple>");
result.append(" <TestHelperOther>");
result.append(" <letter>ccc</letter>");
result.append(" <number>123</number>");
result.append(" </TestHelperOther>");
result.append("</TestHelperTwoPackages>");
break;
case TEST_EMPTY:
// Simple, one object test.
result.append("<TestHelperEmpty>");
result.append("</TestHelperEmpty>");
break;
case TEST_DATE_SIMPLE:
// Simple, one object test.
result.append("<TestHelperDate>");
result.append(" <created>2003-10-20 10:32</created>");
result.append(" <startDate>2002-06-16</startDate>");
result.append(" <calendar>2002-09-21 23:47:34</calendar>");
result.append("</TestHelperDate>");
break;
case TEST_EMPTY_ELEMENT_NOT_CALLED:
// Test to make sure that a setter is not called if the corresponding
// tag does not appear in the XML.
result.append("<TestHelperEmptyElement>");
result.append(" <!-- called/ -->");
result.append(" <string>abc</string>");
result.append("</TestHelperEmptyElement>");
break;
case TEST_EMPTY_ELEMENT:
// Simple, one object test.
result.append("<TestHelperEmptyElement>");
result.append(" <called/>");
result.append(" <string>abc</string>");
result.append("</TestHelperEmptyElement>");
break;
case TEST_NULL:
// Test an object where an attribute is specifically set to null.
result.append("<TestHelperSimple>");
result.append(" <number>123</number>");
result.append(" <string><null/></string>");
result.append("</TestHelperSimple>");
break;
case TEST_EMPTY_STRING:
// Test object with empty attribute elements.
// The number will NOT default to 0, it must be explicitly set,
// the string WILL default to an empty string (NOT a null string).
result.append("<TestHelperSimple>");
result.append(" <number>0</number>");
result.append(" <string></string>");
result.append("</TestHelperSimple>");
break;
case TEST_FULL_PACKAGE_NAME:
// Test an object test whose elements use the fully qualified
// classnames.
result.append("<org.bifrost.xmlio.test.helpers.TestHelperSimple>");
result.append(" <number>123</number>");
result.append(" <string>abc</string>");
result.append("</org.bifrost.xmlio.test.helpers.TestHelperSimple>");
break;
case TEST_SIMPLE_NAMESPACES:
// Test an object test whose elements use namespaces.
result.append("<TestHelperSimple xmlns=\"http://www.bifrost.org/xmlio\">");
result.append(" <number>123</number>");
result.append(" <string>abc</string>");
result.append("</TestHelperSimple>");
break;
case TEST_SECOND_NAMESPACES:
// Test an object test whose elements use namespaces.
result.append("<TestHelperSimple xmlns=\"http://www.bifrost.org/xmlio\">");
result.append(" <number>123</number>");
result.append(" <string>abc</string>");
result.append("</TestHelperSimple>");
break;
case TEST_ALL_TYPES:
// Test an object that contains all of the types that the framework
// considers to be 'primative'.
result.append("<TestHelperTypes>");
result.append(" <string>mdk</string><pint>1</pint><integer>2</integer>");
result.append(" <plong>3</plong><olong>4</olong><pbool>true</pbool>");
result.append(" <obool>true</obool><pfloat>5.2</pfloat>");
result.append(" <ofloat>6.2</ofloat><pshort>7</pshort>");
result.append(" <oshort>8</oshort><pbyte>9</pbyte><obyte>10</obyte>");
result.append(" <pchar>a</pchar><ochar>b</ochar>");
result.append(" <pdouble>11.2</pdouble><odouble>12.2</odouble>");
result.append(" <date>2003-10-20 10:32:53</date>");
result.append("</TestHelperTypes>");
break;
case TEST_OBJECT_PROPERTY_MAPPING:
// An object that wraps a collection of inner objects. The tags for
// the inner are mapped from their xml names to their actual java
// names.
result.append("<TestHelperComplex>");
result.append(" <obj>");
result.append(" <a>aaa</a>");
result.append(" <b>222</b>");
result.append(" </obj>");
result.append(" <obj>");
result.append(" <a>bbb</a>");
result.append(" <b>333</b>");
result.append(" </obj>");
result.append(" <obj>");
result.append(" <a>ccc</a>");
result.append(" <b>444</b>");
result.append(" </obj>");
result.append("</TestHelperComplex>");
break;
case TEST_OBJECT_MAPPING:
// An object that wraps a collection of inner objects. The tags for
// the inner are mapped from their xml names to their actual java
// names.
result.append("<TestHelperComplex>");
result.append(" <obj>");
result.append(" <string>aaa</string>");
result.append(" <number>222</number>");
result.append(" </obj>");
result.append(" <obj>");
result.append(" <string>bbb</string>");
result.append(" <number>333</number>");
result.append(" </obj>");
result.append(" <obj>");
result.append(" <string>ccc</string>");
result.append(" <number>444</number>");
result.append(" </obj>");
result.append("</TestHelperComplex>");
break;
case TEST_PROPERTY_MAPPING:
// An object that wraps a collection of inner objects. The tags for
// the inner are mapped from their xml names to their actual java
// names.
result.append("<TestHelperComplex>");
result.append(" <TestHelperSimple>");
result.append(" <a>aaa</a>");
result.append(" <b>222</b>");
result.append(" </TestHelperSimple>");
result.append(" <TestHelperSimple>");
result.append(" <a>bbb</a>");
result.append(" <b>333</b>");
result.append(" </TestHelperSimple>");
result.append(" <TestHelperSimple>");
result.append(" <a>ccc</a>");
result.append(" <b>444</b>");
result.append(" </TestHelperSimple>");
result.append("</TestHelperComplex>");
break;
case TEST_DATE_COMPLEX:
// Test dates where each attribute uses a different format.
result.append("<TestHelperDate>");
result.append(" <created>2003-10-20 10:32</created>");
result.append(" <startDate>2002-06-16</startDate>");
result.append(" <startTime>10:32:54</startTime>");
result.append(" <endTime>23:04:47</endTime>");
result.append("</TestHelperDate>");
break;
case TEST_COLLECTIONS:
// Test where an object full of collections of various types.
result.append("<TestHelperCollection>");
result.append(" <widget>waazoo</widget>");
result.append(" <widget>wizbang</widget>");
result.append(" <widget>hugug</widget>");
result.append(" <cheese>cheddar</cheese>");
result.append(" <cheese>swiss</cheese>");
result.append(" <book>Dantes Inferno</book>");
result.append(" <book>Cantebury Tales</book>");
result.append(" <movie>LotR</movie>");
result.append(" <movie>Fight Club</movie>");
result.append("</TestHelperCollection>");
break;
case TEST_SIMPLE_CHILD:
// Test where an object is a child of an object of the same type
result.append("<TestHelperParent>");
result.append(" <variable>hello world</variable>");
result.append(" <TestHelperParent>");
result.append(" <variable>salut le monde</variable>");
result.append(" </TestHelperParent>");
result.append("</TestHelperParent>");
break;
case TEST_DEEP_CHILD:
// Test where an object is a child of an object of the same type
result.append("<TestHelperParent>");
result.append(" <variable>a1</variable>");
result.append(" <TestHelperParent>");
result.append(" <variable>b2</variable>");
result.append(" <TestHelperParent>");
result.append(" <variable>c3</variable>");
result.append(" <TestHelperParent>");
result.append(" <variable>d4</variable>");
result.append(" </TestHelperParent>");
result.append(" <TestHelperParent>");
result.append(" <variable>d5</variable>");
result.append(" </TestHelperParent>");
result.append(" <TestHelperParent>");
result.append(" <variable>d6</variable>");
result.append(" </TestHelperParent>");
result.append(" </TestHelperParent>");
result.append(" </TestHelperParent>");
result.append("</TestHelperParent>");
break;
case TEST_LOWER_FIRST_CHAR:
// Simple, one object test.
result.append("<testHelperSimple>\n");
result.append(" <number>123</number>\n");
result.append(" <string>abc</string>\n");
result.append("</testHelperSimple>\n");
break;
case TEST_SIMPLE_DASHES:
// Simple, one object test.
result.append("<test-helper-simple>");
result.append(" <number>123</number>");
result.append(" <string>abc</string>");
result.append("</test-helper-simple>");
break;
case TEST_VEHICLE_INHERITANCE:
// Simple, one object test.
result.append("<test-helper-owner>\n");
result.append(" <name>Jane Smith</name>\n");
result.append(" <test-helper-car>\n");
result.append(" <vin>A880BBC64</vin>\n");
result.append(" <kms>18768</kms>\n");
result.append(" <number-doors>5</number-doors>\n");
result.append(" </test-helper-car>\n");
result.append(" <test-helper-boat>\n");
result.append(" <vin>6674C</vin>\n");
result.append(" <kms>7248</kms>\n");
result.append(" <top-speed-in-knots>54</top-speed-in-knots>\n");
result.append(" </test-helper-boat>\n");
result.append("</test-helper-owner>\n");
break;
}
return result.toString();
} // end createXml()
/**
* Test reading from a file that does not exist. Make sure the file
* <code>/foobardpath/foobarfile.xml</code> does not exist.
*/
public void testInvalidFile()
{
XmlReader config = null;
try
{
String packageName = nameOfPackage(this.getClass().getName());
config = new XmlReader("/foobardpath/foobarfile.xml", packageName);
assertNotNull(config);
}
catch (XmlException e)
{
String test = e.toString().toLowerCase();
assertTrue(test.indexOf("error reading file") >= 0);
return;
}
fail("A file IO exception should have been thrown.");
} // end testInvalidFile()
/**
* Test reading from a url that cannot be connected to. Make sure the url
* <code>http://foobardhost/foobarfile.xml</code> is invalid.
*/
public void testInvalidUrl()
{
XmlReader config = null;
try
{
String packageName = nameOfPackage(this.getClass().getName());
URL url = new URL("http://foobardhost/foobarfile.xml");
config = new XmlReader(url, packageName);
assertNotNull(config);
}
catch (XmlException e)
{
String test = e.toString().toLowerCase();
assertTrue("Got " + e, test.indexOf("error reading url") >= 0);
return;
}
catch (Exception e)
{
fail("Unexpected exception: " + e.toString());
}
fail("A file IO exception should have been thrown.");
} // end testInvalidUrl()
/**
* Test reading a simple object with 'primative' properties expressed in sub-elements.
*/
public void testSimpleObject()
{
String configString = createXml(TEST_SIMPLE);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue("abc".equals(helper.getString()));
} // end testSimpleObject()
/**
* Test reading a simple parent/child relationship where both parent and
* child class are of the same type.
*/
public void testSimpleChild()
{
String configString = createXml(TEST_SIMPLE_CHILD);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperParent helper = (TestHelperParent)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue("Got " + helper.getVariable(), "hello world".equals(helper.getVariable()));
assertNotNull(helper.getTestHelperParent());
assertTrue(helper.getTestHelperParent().size() == 1);
Iterator iter = helper.getTestHelperParent().iterator();
TestHelperParent child = null;
if (iter.hasNext())
child = (TestHelperParent)iter.next();
assertNotNull(child);
assertTrue("Got " + child.getVariable(), "salut le monde".equals(child.getVariable()));
} // end testSimpleChild()
/**
* Test reading a simple parent/child relationship where both parent and
* child class are of the same type.
*/
public void testDeepChild()
{
String configString = createXml(TEST_DEEP_CHILD);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperParent helper = (TestHelperParent)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue("Got " + helper.getVariable(), "a1".equals(helper.getVariable()));
assertNotNull(helper.getTestHelperParent());
assertTrue(helper.getTestHelperParent().size() == 1);
Iterator iter = helper.getTestHelperParent().iterator();
TestHelperParent child = null;
if (iter.hasNext())
child = (TestHelperParent)iter.next();
assertNotNull(child);
assertTrue("Got " + child.getVariable(), "b2".equals(child.getVariable()));
iter = child.getTestHelperParent().iterator();
child = null;
if (iter.hasNext())
child = (TestHelperParent)iter.next();
assertNotNull(child);
assertTrue("Got " + child.getVariable(), "c3".equals(child.getVariable()));
iter = child.getTestHelperParent().iterator();
child = null;
if (iter.hasNext())
child = (TestHelperParent)iter.next();
assertNotNull(child);
assertTrue("Got " + child.getVariable(), "d4".equals(child.getVariable()));
if (iter.hasNext())
child = (TestHelperParent)iter.next();
assertNotNull(child);
assertTrue("Got " + child.getVariable(), "d5".equals(child.getVariable()));
if (iter.hasNext())
child = (TestHelperParent)iter.next();
assertNotNull(child);
assertTrue("Got " + child.getVariable(), "d6".equals(child.getVariable()));
} // end testDeepChild()
/**
* Test reading a simple object with 'primative' properties expressed in sub-elements.
*/
public void testSimpleWithAmpersand()
{
String configString = createXml(TEST_AMP);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue("a&b".equals(helper.getString()));
} // end testSimpleWithAmpersand()
/**
* Test reading a simple object with 'primative' properties expressed in sub-elements.
*/
public void testSimpleWithXmlBrackets()
{
String configString = createXml(TEST_BRACKETS);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue("a<b>c".equals(helper.getString()));
} // end testSimpleWithAmpersand()
/**
* Test reading a simple object and define it's package using namespaces,
* rather than using fully qualified classnames in the xml itself..
*/
public void testSimpleNamespaces()
{
String configString = createXml(TEST_SIMPLE_NAMESPACES);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
XmlIOConfig config = XmlIOConfig.getInstance();
try
{
NamespaceMap map = new NamespaceMap();
map.setUri("http://www.bifrost.org/xmlio");
map.setPrefix("helpers");
map.setPackageName("org.bifrost.xmlio.test.helpers");
config.addNamespaceMap(map);
xmlReader = new XmlReader(reader, "");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue("abc".equals(helper.getString()));
} // end testSimpleObject()
/**
* Test reading a an object where the full package name is used as the tag
* name.
*/
public void testFullPackageName()
{
String configString = createXml(TEST_FULL_PACKAGE_NAME);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue("Got " + helper.getNumber(), helper.getNumber() == 123);
assertTrue("Got '" + helper.getString() + "'", "abc".equals(helper.getString()));
} // end testFullPackageName()
/**
* Test reading a simple object with an object property that is null.
*/
public void testObjectWithNullAttribute()
{
String configString = createXml(TEST_NULL);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue(helper.getString() == null);
} // end testObjectWithNullAttribute()
/**
* Test reading a simple object where an object property has no text node.
* This should result in a default instance of the object being created, not
* in a null pointer.
*/
public void testObjectWithEmptyAttributes()
{
String configString = createXml(TEST_EMPTY_STRING);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 0);
assertTrue("".equals(helper.getString()));
} // end testObjectWithNullAttribute()
/**
* Test to make sure that a setter is not called if the corresponding
* tag does not appear in the XML.
*/
public void testEmptyElementElementNotCalled()
{
String configString = createXml(TEST_EMPTY_ELEMENT_NOT_CALLED);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperEmptyElement helper = (TestHelperEmptyElement)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.isCalled() == false);
assertTrue("abc".equals(helper.getString()));
} // end testEmptyElementElementNotCalled()
/**
* Test to make sure that a setter is called if the corresponding
* tag does appear in the XML.
*/
public void testEmptyElementElement()
{
String configString = createXml(TEST_EMPTY_ELEMENT);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperEmptyElement helper = (TestHelperEmptyElement)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.isCalled() == true);
assertTrue("abc".equals(helper.getString()));
} // end testEmptyElementElement()
/**
* Test reading an object with no sub-elements or attributes in the xml stream.
*/
public void testEmptyObject()
{
String configString = createXml(TEST_EMPTY);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperEmpty helper = (TestHelperEmpty)xmlReader.getRootObject();
assertNotNull(helper);
} // end testSimpleObject()
/**
* Test reading a simple object with 'primative boolean' properties expressed in sub-elements.
*/
public void testBooleanObject()
{
String configString = createXml(TEST_BOOLEAN);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperBoolean helper = (TestHelperBoolean)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.isFooled() == true);
assertTrue(helper.isRich() == false);
} // end testBooleanObject()
/**
* Test reading an object with lots of different types of collections.
*/
public void testCollections()
{
String configString = createXml(TEST_COLLECTIONS);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperCollection helper = (TestHelperCollection)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getWidget());
// Test to make sure all widgets are present
List results = new LinkedList();
results.add("waazoo");
results.add("wizbang");
results.add("hugug");
for (Iterator i = helper.getWidget().iterator(); i.hasNext();)
{
// There should be 3 elements
String temp = (String)i.next();
assertTrue(inResults(results, temp));
temp = (String)i.next();
assertTrue(inResults(results, temp));
temp = (String)i.next();
assertTrue(inResults(results, temp));
assertFalse(inResults(results, temp));
}
// Test to make sure all cheeses are present
results = new LinkedList();
results.add("cheddar");
results.add("swiss");
for (Iterator i = helper.getCheese().iterator(); i.hasNext();)
{
// There should be 2 elements
String temp = (String)i.next();
assertTrue(inResults(results, temp));
temp = (String)i.next();
assertTrue(inResults(results, temp));
assertFalse(inResults(results, temp));
}
// Test to make sure all books are present
results = new LinkedList();
results.add("Dantes Inferno");
results.add("Cantebury Tales");
for (Iterator i = helper.getBook().iterator(); i.hasNext();)
{
// There should be 2 elements
String temp = (String)i.next();
assertTrue(inResults(results, temp));
temp = (String)i.next();
assertTrue(inResults(results, temp));
assertFalse(inResults(results, temp));
}
// Test to make sure all movies are present
results = new LinkedList();
results.add("LotR");
results.add("Fight Club");
for (Iterator i = helper.getMovie().iterator(); i.hasNext();)
{
// There should be 2 elements
String temp = (String)i.next();
assertTrue(inResults(results, temp));
temp = (String)i.next();
assertTrue(inResults(results, temp));
assertFalse(inResults(results, temp));
}
} // end testCollections()
private boolean inResults(List results, String string)
{
if (results == null || string == null)
return false;
if (results.contains(string))
{
results.remove(string);
return true;
}
return false;
} // end inResults()
/**
* Test reading a simple object with 'primative' properties expressed in attributes.
*/
public void testSimpleObjectAttributes()
{
String configString = createXml(TEST_SIMPLE_ATTRIBUTES);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 234);
assertTrue("bcd".equals(helper.getString()));
} // end testSimpleObject()
/**
* Test reading in a more complex object which is a wrapper around a list of
* more simple objects.
*/
public void testComplexObject()
{
String configString = createXml(TEST_COMPLEX);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperComplex helper = (TestHelperComplex)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperSimple());
Iterator i = helper.getTestHelperSimple().iterator();
assertTrue(i.hasNext());
TestHelperSimple simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 345);
assertTrue("cde".equals(simple.getString()));
assertTrue(i.hasNext());
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 456);
assertTrue("def".equals(simple.getString()));
} // end testComplexObject()
/**
* Test reading in a more complex object which is a wrapper around a list of
* more simple objects where the tag names of the simple objects and simple
* object attributes are mapped from xml names to their actual java names.
*/
public void testObjectPropertyMapping()
{
String configString = createXml(TEST_OBJECT_PROPERTY_MAPPING);
XmlIOConfig config = XmlIOConfig.getInstance();
// Set up mapping
List list = new LinkedList();
list.add(new PropertyMap("a", "string"));
list.add(new PropertyMap("b", "number"));
ObjectMap oMap = new ObjectMap("obj", "TestHelperSimple", list);
config.addObjectMap(oMap);
list = new LinkedList();
list.add(new PropertyMap("obj", "TestHelperSimple"));
oMap = new ObjectMap("TestHelperComplex", "TestHelperComplex", list);
config.addObjectMap(oMap);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperComplex helper = (TestHelperComplex)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperSimple());
Iterator i = helper.getTestHelperSimple().iterator();
assertTrue(i.hasNext());
TestHelperSimple simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 222);
assertTrue("aaa".equals(simple.getString()));
assertTrue(i.hasNext());
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 333);
assertTrue("bbb".equals(simple.getString()));
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 444);
assertTrue("ccc".equals(simple.getString()));
} // end testObjectPropertyMapping()
/**
* Test reading in a more complex object which is a wrapper around a list of
* more simple objects where the tag names of the simple objects and simple
* object attributes are mapped from xml names to their actual java names.
*/
public void testObjectMapping()
{
String configString = createXml(TEST_OBJECT_MAPPING);
XmlIOConfig config = XmlIOConfig.getInstance();
// Set up mapping
List list = new LinkedList();
list.add(new PropertyMap("obj", "TestHelperSimple"));
ObjectMap oMap = new ObjectMap("TestHelperComplex", "TestHelperComplex", list);
config.addObjectMap(oMap);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperComplex helper = (TestHelperComplex)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperSimple());
Iterator i = helper.getTestHelperSimple().iterator();
assertTrue(i.hasNext());
TestHelperSimple simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 222);
assertTrue("aaa".equals(simple.getString()));
assertTrue(i.hasNext());
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 333);
assertTrue("bbb".equals(simple.getString()));
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 444);
assertTrue("ccc".equals(simple.getString()));
} // end testObjectMapping()
/**
* Test reading in a more complex object which is a wrapper around a list of
* more simple objects where the tag names of the simple objects and simple
* object attributes are mapped from xml names to their actual java names.
*/
public void testPropertyMapping()
{
String configString = createXml(TEST_PROPERTY_MAPPING);
XmlIOConfig config = XmlIOConfig.getInstance();
// Set up mapping
List list = new LinkedList();
list.add(new PropertyMap("a", "string"));
list.add(new PropertyMap("b", "number"));
ObjectMap oMap = new ObjectMap("TestHelperSimple", "TestHelperSimple", list);
config.addObjectMap(oMap);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperComplex helper = (TestHelperComplex)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperSimple());
Iterator i = helper.getTestHelperSimple().iterator();
assertTrue(i.hasNext());
TestHelperSimple simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 222);
assertTrue("aaa".equals(simple.getString()));
assertTrue(i.hasNext());
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 333);
assertTrue("bbb".equals(simple.getString()));
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 444);
assertTrue("ccc".equals(simple.getString()));
} // end testPropertyMapping()
/**
* Test reading in a more complex object which is a wrapper around a list of
* more simple objects where the tag names of the simple objects and simple
* object attributes are mapped from xml names to their actual java names.
*/
public void testGlobalPropertyMapping()
{
String configString = createXml(TEST_PROPERTY_MAPPING);
XmlIOConfig config = XmlIOConfig.getInstance();
// Set up mapping
config.addPropertyMap(new PropertyMap("a", "string"));
config.addPropertyMap(new PropertyMap("b", "number"));
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperComplex helper = (TestHelperComplex)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperSimple());
Iterator i = helper.getTestHelperSimple().iterator();
assertTrue(i.hasNext());
TestHelperSimple simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 222);
assertTrue("aaa".equals(simple.getString()));
assertTrue(i.hasNext());
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 333);
assertTrue("bbb".equals(simple.getString()));
simple = (TestHelperSimple)i.next();
assertNotNull(simple);
assertTrue(simple.getNumber() == 444);
assertTrue("ccc".equals(simple.getString()));
} // end testGlobalPropertyMapping()
/**
* Test reading an object that has a setter named after a base class, rather than the
* name of the class actually being instantiated.
*/
public void testIneritedObjects()
{
String configString = createXml(TEST_INHERITANCE);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers:org.bifrost.xmlio.test.helpers.inheritance");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSalesLot helper = (TestHelperSalesLot)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperVehicle());
Iterator i = helper.getTestHelperVehicle().iterator();
// Boat
assertTrue(i.hasNext());
TestHelperVehicle superClass = (TestHelperVehicle)i.next();
assertNotNull(superClass);
assertTrue("123".equals(superClass.getVin()));
assertTrue(superClass.getKms() == 1000);
assertTrue(superClass instanceof TestHelperBoat);
TestHelperBoat boat = (TestHelperBoat)superClass;
assertTrue("60".equals(boat.getTopSpeedInKnots()));
// Car number 1
assertTrue(i.hasNext());
superClass = (TestHelperVehicle)i.next();
assertNotNull(superClass);
assertTrue("i222g4".equals(superClass.getVin()));
assertTrue(superClass.getKms() == 10000);
assertTrue(superClass instanceof TestHelperCar);
TestHelperCar car = (TestHelperCar)superClass;
assertTrue("4".equals(car.getNumberDoors()));
// Car number 2
assertTrue(i.hasNext());
superClass = (TestHelperVehicle)i.next();
assertNotNull(superClass);
assertTrue("i387g6".equals(superClass.getVin()));
assertTrue(superClass.getKms() == 28000);
assertTrue(superClass instanceof TestHelperCar);
car = (TestHelperCar)superClass;
assertTrue("2".equals(car.getNumberDoors()));
} // end testInheritedObjects()
/**
* Test reading a simple object with 'primative' properties expressed in sub-elements.
*/
public void testSimpleArray()
{
String configString = createXml(TEST_SIMPLE_ARRAY);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperArray helper = (TestHelperArray)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue("Got " + helper.getNumber(), helper.getNumber() == 123);
assertTrue(helper.getString().getClass().isArray());
String[] array = (String[])helper.getString();
assertNotNull(array);
assertTrue(array.length == 3);
assertTrue("aaa".equals(array[0]));
assertTrue("bbb".equals(array[1]));
assertTrue("ccc".equals(array[2]));
} // end testSimpleArray()
/**
* Test reading a simple object with 'primative' properties expressed in sub-elements.
*/
public void testComplexArray()
{
String configString = createXml(TEST_COMPLEX_ARRAY);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperComplexArray helper = (TestHelperComplexArray)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue(helper.getTestHelperSimple().getClass().isArray());
TestHelperSimple[] array = (TestHelperSimple[])helper.getTestHelperSimple();
assertNotNull(array);
assertTrue(array.length == 3);
TestHelperSimple test = array[0];
assertNotNull(test);
assertTrue(test.getNumber() == 222);
assertTrue("aaa".equals(test.getString()));
test = array[1];
assertNotNull(test);
assertTrue(test.getNumber() == 333);
assertTrue("bbb".equals(test.getString()));
test = array[2];
assertNotNull(test);
assertTrue(test.getNumber() == 444);
assertTrue("ccc".equals(test.getString()));
} // end testSimpleArray()
/**
* Test reading an object that has a setter named after a base class, rather than the
* name of the class actually being instantiated.
*/
public void testMultiplePackagesSimple()
{
String configString = createXml(TEST_MULTI_PACKAGE);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader,
"org.bifrost.xmlio.test.helpers:org.bifrost.xmlio.test.helpers.subpackage");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperTwoPackages helper = (TestHelperTwoPackages)xmlReader.getRootObject();
assertNotNull(helper);
assertNotNull(helper.getTestHelperSimple());
Iterator i = helper.getTestHelperSimple().iterator();
assertTrue(i.hasNext());
TestHelperSimple simpleHelper = (TestHelperSimple)i.next();
assertEquals(simpleHelper.getNumber(), 222l);
assertEquals(simpleHelper.getString(), "aaa");
assertTrue(i.hasNext());
TestHelperOther otherHelper = (TestHelperOther)i.next();
assertEquals(otherHelper.getNumber(), 123l);
assertEquals(otherHelper.getLetter(), "ccc");
} // end testAbstractObject()
/**
* Test reading an object with 'Date' and 'Timestamp' properties.
*/
public void testDateSimple()
{
String configString = createXml(TEST_DATE_SIMPLE);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
// Configure date/timestamp formats
XmlIOConfig config = XmlIOConfig.getInstance();
DateConverter dconv = new DateConverter("yyyy-MM-dd");
config.addConverter(dconv);
TimestampConverter tconv = new TimestampConverter("yyyy-MM-dd HH:mm");
config.addConverter(tconv);
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperDate helper = (TestHelperDate)xmlReader.getRootObject();
assertNotNull(helper);
Calendar cal = new GregorianCalendar();
// Validate that the date property was set correctly
// Note: month numbers start from 0!
cal.setTime(helper.getCreated());
assertTrue(cal.get(Calendar.YEAR) == 2003);
assertTrue(cal.get(Calendar.MONTH) == 9);
assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 20);
assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 10);
assertTrue(cal.get(Calendar.MINUTE) == 32);
assertTrue(cal.get(Calendar.SECOND) == 0);
// Validate that the timestamp property was set correctly
cal.setTime(helper.getStartDate());
assertTrue(cal.get(Calendar.YEAR) == 2002);
assertTrue(cal.get(Calendar.MONTH) == 5);
assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 16);
// Validate that the calendar property was set correctly
cal = helper.getCalendar();
assertTrue(cal.get(Calendar.YEAR) == 2002);
assertTrue(cal.get(Calendar.MONTH) == 8);
assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 21);
assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 23);
assertTrue(cal.get(Calendar.MINUTE) == 47);
assertTrue(cal.get(Calendar.SECOND) == 34);
} // end testDateSimple()
/**
* Test reading an object with 'Date' and 'Timestamp' properties. The Date
* properties use a couple of different date formats.
*/
public void testDateComplex()
{
String configString = createXml(TEST_DATE_COMPLEX);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
// Configure date/timestamp formats
XmlIOConfig config = XmlIOConfig.getInstance();
DateConverter dconv = new DateConverter("yyyy-MM-dd");
config.addConverter(dconv);
TimestampConverter tconv = new TimestampConverter("yyyy-MM-dd HH:mm");
config.addConverter(tconv);
List plist = new LinkedList();
PropertyMap pmap = new PropertyMap("created");
plist.add(pmap);
pmap = new PropertyMap("startDate");
plist.add(pmap);
pmap = new PropertyMap("startTime");
dconv = new DateConverter("HH:mm:ss");
pmap.setConverter(dconv);
plist.add(pmap);
pmap = new PropertyMap("endTime");
pmap.setConverter(dconv);
plist.add(pmap);
ObjectMap omap = new ObjectMap("TestHelperDate", "TestHelperDate", plist);
config.addObjectMap(omap);
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperDate helper = (TestHelperDate)xmlReader.getRootObject();
assertNotNull(helper);
Calendar cal = new GregorianCalendar();
// Validate that the timestamp property was set correctly
cal.setTime(helper.getCreated());
assertTrue(cal.get(Calendar.YEAR) == 2003);
assertTrue(cal.get(Calendar.MONTH) == 9);
assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 20);
assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 10);
assertTrue(cal.get(Calendar.MINUTE) == 32);
assertTrue(cal.get(Calendar.SECOND) == 0);
// Validate that the date property was set correctly
cal.setTime(helper.getStartDate());
assertTrue(cal.get(Calendar.YEAR) == 2002);
assertTrue(cal.get(Calendar.MONTH) == 5);
assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 16);
// Validate that the first time property was set correctly
cal.setTime(helper.getStartTime());
assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 10);
assertTrue(cal.get(Calendar.MINUTE) == 32);
assertTrue(cal.get(Calendar.SECOND) == 54);
// Validate that the first time property was set correctly
cal.setTime(helper.getEndTime());
assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 23);
assertTrue(cal.get(Calendar.MINUTE) == 4);
assertTrue(cal.get(Calendar.SECOND) == 47);
} // end testDateObject()
/**
* Test the case where the xml has an attribute not found in the object.
*/
public void testSimpleInvalidAttributeName()
{
String configString = createXml(TEST_SIMPLE_NO_ATTRIBUTE);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
assertNotNull(xmlReader) ;
}
catch (XmlException e)
{
String test = e.toString().toLowerCase();
assertTrue("Got " + test, test.indexOf(ReaderContentHandler.EX_SETTER_NAME.toLowerCase()) >= 0);
return;
}
catch (Exception e)
{
fail("Unexpected exception: " + e.toString());
}
fail("An attribute not found exception should have been thrown.");
} // end testSimpleInvalidAttributeName()
/**
* Test the case where the xml has an object that cannot be instantiated.
*/
public void testObjectNotFound()
{
String configString = createXml(TEST_NO_OBJECT);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
assertNotNull(xmlReader) ;
}
catch (XmlException e)
{
String test = e.toString().toLowerCase();
assertTrue(test.indexOf(ReaderContentHandler.EX_CREATE_OBJECT.toLowerCase()) >= 0);
return;
}
catch (Exception e)
{
fail("Unexpected exception: " + e.toString());
}
fail("An attribute not found exception should have been thrown.");
} // end testObjectNotFound()
/**
* Test an object that contains all of the types that the framework
* considers to be 'primative'.
*/
public void testAllTypes()
{
String configString = createXml(TEST_ALL_TYPES);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperTypes helper = (TestHelperTypes)xmlReader.getRootObject();
assertNotNull(helper);
assertEquals(helper.getPint(), 1);
assertEquals(helper.getInteger(), new Integer(2));
assertTrue(helper.getString().equals("mdk"));
assertEquals(helper.getPlong(), 3l);
assertEquals(helper.getOlong(), new Long(4));
assertEquals(helper.isPbool(), true);
assertEquals(helper.getObool(), new Boolean(true));
assertTrue(helper.getPfloat() == 5.2f);
assertEquals(helper.getOfloat(), new Float(6.2));
assertEquals(helper.getPshort(), (short)7);
assertEquals(helper.getOshort(), new Short((short)8));
assertEquals(helper.getPbyte(), (byte)9);
assertEquals(helper.getObyte(), new Byte((byte)10));
assertEquals(helper.getPchar(), 'a');
assertEquals(helper.getOchar(), new Character('b'));
assertTrue(helper.getPdouble() == 11.2d);
assertEquals(helper.getOdouble(), new Double(12.2));
Calendar cal = new GregorianCalendar();
cal.setTime(helper.getDate());
assertTrue("Got " + cal.get(Calendar.YEAR), cal.get(Calendar.YEAR) == 2003);
assertTrue(cal.get(Calendar.MONTH) == 9);
assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 20);
assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 10);
assertTrue(cal.get(Calendar.MINUTE) == 32);
assertTrue(cal.get(Calendar.SECOND) == 53);
} // end testAllTypes()
/**
* Test reading a simple object with the object name starting with a lower
* case letter in the XML (similar to how attribute names appear).
*/
public void testLowerCaseFirstCharacter()
{
String configString = createXml(TEST_LOWER_FIRST_CHAR);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue("abc".equals(helper.getString()));
} // end testLowerCaseFirstCharacter()
/**
* Test reading a simple object with each 'word' separated with dashes and
* the whole name in lower case.
*/
public void testSimpleDashes()
{
String configString = createXml(TEST_SIMPLE_DASHES);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperSimple helper = (TestHelperSimple)xmlReader.getRootObject();
assertNotNull(helper);
assertTrue(helper.getNumber() == 123);
assertTrue("abc".equals(helper.getString()));
} // end testSimpleDashes()
/**
* Test reading a more complicated object with each 'word' in the object name
* and in some attributes separated with dashes and the names in lower case.
* This test also involves inheritance.
*/
public void testDashesAndInheritance()
{
String configString = createXml(TEST_VEHICLE_INHERITANCE);
InputStream reader = new ByteArrayInputStream(configString.getBytes());
XmlReader xmlReader = null;
try
{
xmlReader = new XmlReader(reader,
"org.bifrost.xmlio.test.helpers.inheritance");
}
catch (XmlException e)
{
fail("Unexpected error: " + e.toString());
}
assertNotNull(xmlReader);
TestHelperOwner owner = (TestHelperOwner)xmlReader.getRootObject();
assertNotNull(owner);
assertTrue("Jane Smith".equals(owner.getName()));
Collection vehicles = owner.getTestHelperVehicle();
assertNotNull(vehicles);
assertTrue(vehicles.size() == 2);
for (Iterator iter = vehicles.iterator(); iter.hasNext();)
{
TestHelperVehicle obj = (TestHelperVehicle) iter.next();
if (obj instanceof TestHelperCar)
{
TestHelperCar car = (TestHelperCar)obj;
assertTrue("A880BBC64".equals(car.getVin()));
assertTrue(car.getKms() == 18768);
}
if (obj instanceof TestHelperBoat)
{
TestHelperBoat boat = (TestHelperBoat)obj;
assertTrue("6674C".equals(boat.getVin()));
assertTrue(boat.getKms() == 7248);
}
}
} // end testDashesAndInheritance()
/**
* Test reading a object which has another object (non-primative) as an
* attribute and that attribute is null.
*/
// public void testNullObject()
// {
// String configString = createXml(TEST_NULL_OBJECT);
// InputStream reader = new ByteArrayInputStream(configString.getBytes());
// XmlReader xmlReader = null;
// try
// {
// xmlReader = new XmlReader(reader, "org.bifrost.xmlio.test.helpers");
// }
// catch (XmlException e)
// {
// fail("Unexpected error: " + e.toString());
// }
// assertNotNull(xmlReader);
// TestHelperCompany helper = (TestHelperCompany)xmlReader.getRootObject();
// assertNotNull(helper);
// assertTrue("Company Name".equals(helper.getName()));
// assertNull(helper.getTestHelperPerson());
// } // end testNullObject()
/**
* Strips the class name and returns the package
* @param String the full classname
* @returns String the package name
*/
private String nameOfPackage(String source) {
String result = new String(source);
int index = source.lastIndexOf(".");
if (index > -1)
result = source.substring(0, index + 1);
return result;
} // end nameOfPackage()
} // end FunctionalTestXmlReader Class