/* * testXMLIO.java * JUnit based test * * Created on July 15, 2002, 11:16 AM */ package org.freehep.xml.io.test; import junit.framework.*; import java.util.*; import org.freehep.xml.io.*; import org.jdom.*; /** * * @author turri */ public class testXMLIO extends TestCase { protected XMLIOManager xmlioManager = new XMLIOManager("testXMLIO.xml"); private Vector saveVect = new Vector(); private Vector restoreVect = new Vector(); private Vector createdVect = new Vector(); private Random r; private int nAvailableObjs = 6; private int maxNumberObjs = 10; private int maxNDaughters = 7; public testXMLIO(java.lang.String testName) { super(testName); xmlioManager.setClassId( ObjA.class, "arbor"); xmlioManager.getXMLIORegistry().register( new ObjAFactory() ); xmlioManager.getXMLIORegistry().register( new ObjBCDEFactory() ); xmlioManager.getXMLIORegistry().register( new ObjDProxy() ); xmlioManager.getXMLIORegistry().register( (XMLIOProxy) new ObjEFProxyFFactory() ); r = new Random(); xmlioManager.setClassId( ObjD.class, "dusk"); } public static void main(java.lang.String[] args) { for ( int i = 0; i < 30; i++ ) junit.textui.TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite(testXMLIO.class); return suite; } public void testSaveRestore() { int startObjs = r.nextInt(maxNumberObjs) + 1; for ( int i = 0; i < startObjs; i++ ) { Object obj = createObject(r.nextInt(nAvailableObjs), r.nextInt(), 0); saveVect.add( obj ); } Element saveEl = new Element("testXMLIO"); xmlioManager.saveToXML( saveVect.toArray(), saveEl ); Object[] objs = xmlioManager.restoreFromXML(); for ( int i = 0; i < objs.length; i++ ) restoreVect.add(objs[i]); assertEquals(saveVect.size(), startObjs); assertEquals(saveVect.size(), restoreVect.size()); for ( int i = 0; i < startObjs; i++ ) { assertTrue( ((AbstractObj)saveVect.get(i)).equalsObj( restoreVect.get(i) ) ); } } private Object createObject( int index, int status, int treeLevel ) { Object obj; int nCreatedObjs = createdVect.size(); if ( r.nextDouble() < .2 && nCreatedObjs > 0 ) obj = createdVect.get( r.nextInt( nCreatedObjs ) ); else { switch ( index ) { case 0 : obj = new ObjA(status); break; case 1 : obj = new ObjB(status); break; case 2 : obj = new ObjC(status); break; case 3 : obj = new ObjD(status); break; case 4 : obj = new ObjE(status); break; case 5 : obj = new ObjF(status); break; default : throw new RuntimeException("Wrong index for object creation"); } createdVect.add( obj ); int daus = r.nextInt(maxNDaughters-treeLevel); for ( int j = 0; j<daus; j++ ) ((AbstractObj)obj).addObject(createObject(r.nextInt(nAvailableObjs), r.nextInt(), treeLevel+1)); } return obj; } }