package org.concord.otrunk.test2; import java.util.Random; import junit.framework.TestCase; import org.concord.framework.otrunk.OTChangeEvent; import org.concord.framework.otrunk.OTChangeListener; import org.concord.framework.otrunk.OTrunk; import org.concord.otrunk.view.OTFolderObject; import org.concord.otrunk.view.OTViewerHelper; import org.concord.otrunk.xml.XMLDatabase; public class OTObjectInternalTest extends TestCase { OTFolderObject folder; OTFolderObject item; OTChangeListener listener; Thread changeObjectThread; Thread changeListenersThread; boolean noExceptionThrown; // run test for 500 ms final long endTime = System.currentTimeMillis() + 500; /** * If OTObjectInternal believes it has listeners when an otObject is * being changed, and another removes the last listener during the * change event, OTObjectInternal should handle it gracefully. */ public void testListenersNotNull(){ OTViewerHelper viewerHelper = new OTViewerHelper(); // create an empty database XMLDatabase db = new XMLDatabase(); noExceptionThrown = true; try { viewerHelper.loadOTrunk2(null, db); OTrunk otrunk = viewerHelper.getOtrunk(); folder = otrunk.createObject(OTFolderObject.class); item = otrunk.createObject(OTFolderObject.class); otrunk.setRoot(folder); changeObjectThread = new Thread(){ public void run(){ while(System.currentTimeMillis() < endTime){ try { if (folder.getChildCount() == 0){ folder.addChild(item); } else { folder.removeAllChildren(); } } catch (java.lang.NullPointerException e){ noExceptionThrown = false; } } } }; changeListenersThread = new Thread(){ public void run(){ listener = new OTChangeListener() { public void stateChanged(OTChangeEvent e){} }; boolean added = false; while(System.currentTimeMillis() < endTime){ if (!added){ folder.addOTChangeListener(listener); added = true; } else { folder.removeOTChangeListener(listener); added = false; } } } }; changeListenersThread.setPriority(Thread.MAX_PRIORITY); changeObjectThread.setPriority(Thread.MIN_PRIORITY); changeObjectThread.start(); changeListenersThread.start(); // FIXME we should automatically check if the id is actually saved in the string. } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // System.out.println(noExceptionThrown); // assertTrue(noExceptionThrown); while (System.currentTimeMillis() < (endTime)){ assertTrue(noExceptionThrown); } } }