package org.org.model; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import junit.framework.TestCase; /** * @author pagregoire */ public class ModelItemsTest extends TestCase { private static List<ModelItemEvent> EVENT_MONITOR = new ArrayList<ModelItemEvent>(); public void testRootModelItem() { final String rootModelItem_UID = "rootModelItem_UID"; final String itemLevel1_1UID = "itemLevel1_1UID"; final String itemLevel1_2UID = "itemLevel1_2UID"; final String itemLevel2_1UID = "itemLevel2_1UID"; // final String itemLevel2_2UID = "itemLevel2_2UID"; PhonyModelItemLevel1 itemLevel1_1 = new PhonyModelItemLevel1(itemLevel1_1UID); PhonyModelItemLevel1 itemLevel1_2 = new PhonyModelItemLevel1(itemLevel1_2UID); // TEST SINGLETON AND ROOT ITEM BEHAVIOUR assertFalse(RootModelItem.isInstanciated(rootModelItem_UID)); RootModelItem.getInstance(rootModelItem_UID); assertTrue(RootModelItem.isInstanciated(rootModelItem_UID)); assertTrue(RootModelItem.getInstance(rootModelItem_UID) instanceof RootModelItem); assertTrue(RootModelItem.getInstance(rootModelItem_UID) instanceof IModelItem); RootModelItem<PhonyModelItemLevel1> rootModelItem = RootModelItem.<PhonyModelItemLevel1>getInstance(rootModelItem_UID); assertNull(rootModelItem.getParent()); try { rootModelItem.setParent(itemLevel1_1); fail("This should throw a ModelException as you should never set a Parent to the root model item"); } catch (ModelException me) { } // TEST UID assertEquals(rootModelItem_UID, rootModelItem.getUID()); // TEST EMPTY STATUS assertFalse(rootModelItem.hasChildren()); // TEST CHILDS' ADDING rootModelItem.addChild(itemLevel1_1); rootModelItem.addChild(itemLevel1_2); assertTrue(rootModelItem.hasChildren()); assertTrue(rootModelItem.hasChild(itemLevel1_1UID)); assertFalse(rootModelItem.hasChild(itemLevel2_1UID)); // TEST CHILDREN GETTERS assertEquals(itemLevel1_1, rootModelItem.getChild(itemLevel1_1UID)); Set<PhonyModelItemLevel1> children = rootModelItem.getChildren(); assertEquals(2, children.size()); for (Iterator<?> it = rootModelItem.getChildren().iterator(); it.hasNext();) { Object next = it.next(); assertTrue(next instanceof IModelItem); assertTrue(next.equals(itemLevel1_1) || next.equals(itemLevel1_2)); } // TEST CHILDS' REMOVING rootModelItem.removeChild(itemLevel1_1UID); assertFalse(rootModelItem.hasChild(itemLevel1_1UID)); assertTrue(rootModelItem.hasChildren()); // TEST TOSTRING() BROWSING assertTrue("RootModelItem should have an UID starting with:"+rootModelItem_UID,rootModelItem.toString().startsWith(rootModelItem_UID)); // TEST CHILDS' COMPLETE CLEARING rootModelItem.clearChildren(); assertFalse(rootModelItem.hasChildren()); assertEquals(rootModelItem_UID, rootModelItem.toString()); class ModelItemListener implements IModelItemListener { /** * @see org.org.model.IModelItemListener#changeOccured(ModelItemEvent) */ public void changeOccured(ModelItemEvent modelItemEvent) { ModelItemsTest.EVENT_MONITOR.add(modelItemEvent); } } ModelItemListener modelItemListener = new ModelItemListener(); rootModelItem.addListener(modelItemListener); assertEquals(0,ModelItemsTest.EVENT_MONITOR.size()); rootModelItem.addChild(itemLevel1_1); assertEquals(2,ModelItemsTest.EVENT_MONITOR.size()); ModelItemEvent testEvent = (ModelItemEvent) ModelItemsTest.EVENT_MONITOR.get(0); assertEquals(ModelItemEvent.EventType.PRE_ADD_CHILD, testEvent.getEventType()); assertEquals(rootModelItem, testEvent.getSourceItem()); assertEquals(itemLevel1_1, testEvent.getTargetItem()); testEvent = (ModelItemEvent) ModelItemsTest.EVENT_MONITOR.get(1); assertEquals(ModelItemEvent.EventType.POST_ADD_CHILD, testEvent.getEventType()); assertEquals(rootModelItem, testEvent.getSourceItem()); assertEquals(itemLevel1_1, testEvent.getTargetItem()); ModelItemsTest.EVENT_MONITOR.clear(); modelItemListener = new ModelItemListener(); assertEquals(0,ModelItemsTest.EVENT_MONITOR.size()); rootModelItem.addChild(itemLevel1_1); assertEquals(2,ModelItemsTest.EVENT_MONITOR.size()); testEvent = (ModelItemEvent) ModelItemsTest.EVENT_MONITOR.get(0); assertEquals(ModelItemEvent.EventType.PRE_UPDATE_CHILD, testEvent.getEventType()); assertEquals(rootModelItem, testEvent.getSourceItem()); assertEquals(itemLevel1_1, testEvent.getTargetItem()); testEvent = (ModelItemEvent) ModelItemsTest.EVENT_MONITOR.get(1); assertEquals(ModelItemEvent.EventType.POST_UPDATE_CHILD, testEvent.getEventType()); assertEquals(rootModelItem, testEvent.getSourceItem()); assertEquals(itemLevel1_1, testEvent.getTargetItem()); ModelItemsTest.EVENT_MONITOR.clear(); rootModelItem.removeChild(itemLevel1_1UID); int size = ModelItemsTest.EVENT_MONITOR.size(); assertTrue(size == 2); testEvent = (ModelItemEvent) ModelItemsTest.EVENT_MONITOR.get(0); assertEquals(ModelItemEvent.EventType.PRE_REMOVE_CHILD, testEvent.getEventType()); assertEquals(rootModelItem, testEvent.getSourceItem()); assertEquals(itemLevel1_1, testEvent.getTargetItem()); testEvent = (ModelItemEvent) ModelItemsTest.EVENT_MONITOR.get(1); assertEquals(ModelItemEvent.EventType.POST_REMOVE_CHILD, testEvent.getEventType()); assertEquals(rootModelItem, testEvent.getSourceItem()); assertEquals(itemLevel1_1, testEvent.getTargetItem()); ModelItemsTest.EVENT_MONITOR.clear(); rootModelItem.toggleListenersOff(); rootModelItem.addChild(itemLevel1_1); assertEquals(0,ModelItemsTest.EVENT_MONITOR.size()); rootModelItem.toggleListenersOn(); rootModelItem.addChild(itemLevel1_2); assertEquals(2,ModelItemsTest.EVENT_MONITOR.size()); ModelItemsTest.EVENT_MONITOR.clear(); rootModelItem.removeListener(modelItemListener); rootModelItem.removeChild(itemLevel1_1UID); assertEquals(1,rootModelItem.getChildren().size()); } public void testAbstractModelItem() { final String rootModelItem_UID = "rootModelItem_UID2"; final String itemLevel1_1UID = "itemLevel1_1UID"; final String itemLevel1_2UID = "itemLevel1_2UID"; final String itemLevel2_1UID = "itemLevel2_1UID"; final String itemLevel2_2UID = "itemLevel2_2UID"; PhonyModelItemLevel1 itemLevel1_1 = new PhonyModelItemLevel1(itemLevel1_1UID); PhonyModelItemLevel1 itemLevel1_2 = new PhonyModelItemLevel1(itemLevel1_2UID); PhonyModelItemLevel2 itemLevel2_1 = new PhonyModelItemLevel2(itemLevel2_1UID); PhonyModelItemLevel2 itemLevel2_2 = new PhonyModelItemLevel2(itemLevel2_2UID); // TEST UID assertEquals(itemLevel1_1UID, itemLevel1_1.getUID()); // TEST EMPTY STATUS assertFalse(itemLevel1_1.hasChildren()); // TEST CHILDS' ADDING itemLevel1_1.addChild(itemLevel2_1); itemLevel1_1.addChild(itemLevel2_2); assertTrue(itemLevel1_1.hasChildren()); assertTrue(itemLevel1_1.hasChild(itemLevel2_1UID)); assertFalse(itemLevel1_1.hasChild(itemLevel1_2UID)); // TEST CHILDREN GETTERS assertEquals(itemLevel2_1, itemLevel1_1.getChild(itemLevel2_1UID)); Set<PhonyModelItemLevel2> children = itemLevel1_1.getChildren(); assertEquals(2, children.size()); for (Iterator<?> it = itemLevel1_1.getChildren().iterator(); it.hasNext();) { Object next = it.next(); assertTrue(next instanceof IModelItem); assertTrue(next.equals(itemLevel2_1) || next.equals(itemLevel2_2)); } // TEST CHILDS' REMOVING assertTrue(itemLevel1_1.hasChild(itemLevel2_2UID)); itemLevel1_1.removeChild(itemLevel2_2UID); assertFalse(itemLevel1_1.hasChild(itemLevel2_2UID)); // TEST PARENT SETTER/GETTER itemLevel1_1.setParent(RootModelItem.getInstance(rootModelItem_UID)); assertEquals(RootModelItem.getInstance(rootModelItem_UID), itemLevel1_1.getParent()); // TEST CHILDS' COMPLETE CLEARING itemLevel1_1.clearChildren(); assertFalse(itemLevel1_1.hasChildren()); // TEST TOSTRING() BROWSING assertEquals("[\nUID=" + itemLevel1_1UID + ";\n]", itemLevel1_1.toString()); itemLevel1_1.addChild(itemLevel2_1); assertEquals("[\nUID=" + itemLevel1_1UID + ";\n\tUID=" + itemLevel2_1UID + ";\n]", itemLevel1_1.toString()); assertFalse(itemLevel1_2.hasChild(itemLevel2_2UID)); itemLevel2_2.setParent(itemLevel1_2); assertEquals(itemLevel1_2, itemLevel2_2.getParent()); assertTrue(itemLevel1_2.hasChild(itemLevel2_2UID)); assertTrue(itemLevel1_1.compareTo(itemLevel1_1) == 0); assertTrue(itemLevel1_2.compareTo(itemLevel1_1) > 0); assertTrue(itemLevel1_1.compareTo(itemLevel1_2) < 0); } }