public void testBasic() throws IOException, SAXException {
// Configure the digester as required
digester.addObjectCreate("arraylist", ArrayList.class);
// Test adding a variety of objects
digester.addCallMethod("arraylist/A", "add", 1);
ObjectParamRule opr = new ObjectParamRule(0, new Integer(-9));
digester.addRule("arraylist/A", opr);
digester.addCallMethod("arraylist/B", "add", 1);
opr = new ObjectParamRule(0, new Float(3.14159));
digester.addRule("arraylist/B", opr);
digester.addCallMethod("arraylist/C", "add", 1);
opr = new ObjectParamRule(0, new Long(999999999));
digester.addRule("arraylist/C", opr);
digester.addCallMethod("arraylist/D", "add", 1);
opr = new ObjectParamRule(0, "desc", new String("foobarbazbing"));
digester.addRule("arraylist/D", opr);
// note that this will add a null parameter to the method call and will
// not be added to the arraylist.
digester.addCallMethod("arraylist/E", "add", 1);
opr = new ObjectParamRule(0, "nonexistentattribute", new String("ignore"));
digester.addRule("arraylist/E", opr);
//Parse it and obtain the ArrayList
ArrayList al = (ArrayList)digester.parse(new StringReader(sb.toString()));
this.assertNotNull(al);
this.assertEquals(al.size(), 4);
this.assertTrue(al.contains(new Integer(-9)));
this.assertTrue(al.contains(new Float(3.14159)));
this.assertTrue(al.contains(new Long(999999999)));
this.assertTrue(al.contains(new String("foobarbazbing")));
this.assertTrue(!(al.contains(new String("ignore"))));
}
Test method calls with the ObjectParamRule rule. It should be possible to
pass any subclass of Object as a parameter, provided that either the element
or the element + attribute has been matched. |