/* * (c) Rob Gordon 2005 */ package org.oddjob.webapp.struts.forms; import junit.framework.TestCase; import org.oddjob.Iconic; import org.oddjob.Oddjob; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.images.IconHelper; import org.oddjob.images.IconListener; import org.oddjob.images.IconTip; import org.oddjob.monitor.context.ExplorerContext; import org.oddjob.monitor.model.MockExplorerContext; import org.oddjob.util.ThreadManager; import org.oddjob.webapp.model.IconRegistry; import org.oddjob.webapp.model.JobInfoLookup; public class TreeNodeBeanBuilderTest extends TestCase { class OurExplorerContext extends MockExplorerContext { @Override public ThreadManager getThreadManager() { return null; } @Override public Object getThisComponent() { return null; } @Override public ExplorerContext addChild(Object child) { return this; } } /** Test simply building a bean */ public void testBuildBean() { String xml = "<oddjob>" + " <job>" + " <echo>Hello World</echo>" + " </job>" + "</oddjob>"; Oddjob oj = new Oddjob(); oj.setConfiguration(new XMLConfiguration("XML", xml)); oj.setName("Test"); oj.run(); JobInfoLookup lookup = new JobInfoLookup(new IconRegistry()); lookup.setRoot(oj, new OurExplorerContext()); TreeNodeBeanBuilder builder = new TreeNodeBeanBuilder(lookup, "1"); TreeNodeBean bean = builder.buildRoot(); assertNotNull(bean); assertTrue(bean.getHasChildren()); assertEquals("Test", bean.getNodeName()); bean.getExpand(); assertEquals(1, bean.getChildCollection().size()); // check child. TreeNodeBean[] children = (TreeNodeBean[]) bean.getChildCollection().toArray(new TreeNodeBean[0]); TreeNodeBean child = children[0]; child.getExpand(); assertEquals(0, child.getChildCollection().size()); } /** More complicated bean - tracking down a bug where child displayed twice. */ public void testBuildBean2() { String xml = "<oddjob>" + " <job>" + " <sequential name='Child 1'>" + " <jobs>" + " <sequential name='Child 2'>" + " <jobs>" + " <echo name='Child 3'>Hello World</echo>" + " </jobs>" + " </sequential>" + " </jobs>" + " </sequential>" + " </job>" + "</oddjob>"; Oddjob oj = new Oddjob(); oj.setConfiguration(new XMLConfiguration("XML", xml)); oj.setName("Test"); oj.run(); JobInfoLookup lookup = new JobInfoLookup(new IconRegistry()); lookup.setRoot(oj, new OurExplorerContext()); TreeNodeBeanBuilder builder = new TreeNodeBeanBuilder(lookup, "1"); TreeNodeBean bean = builder.buildRoot(); bean.getExpand(); TreeNodeBean[] children; TreeNodeBean child; children = (TreeNodeBean[]) bean.getChildCollection().toArray(new TreeNodeBean[0]); child = children[0]; assertEquals("Child 1", child.getNodeName()); child.getExpand(); children = (TreeNodeBean[]) child.getChildCollection().toArray(new TreeNodeBean[0]); child = children[0]; assertEquals("Child 2", child.getNodeName()); child.getExpand(); children = (TreeNodeBean[]) child.getChildCollection().toArray(new TreeNodeBean[0]); child = children[0]; assertEquals("Child 3", child.getNodeName()); } public void testIcon() { class I implements Iconic { IconHelper ih = new IconHelper(this); boolean toggle; public void addIconListener(IconListener listener) { if (toggle) { ih.changeIcon(IconHelper.COMPLETE); } else { ih.changeIcon(IconHelper.EXCEPTION); } toggle = !toggle; ih.addIconListener(listener); } public IconTip iconForId(String id) { return ih.iconForId(id); } public void removeIconListener(IconListener listener) { ih.removeIconListener(listener); } } I i = new I(); JobInfoLookup lookup = new JobInfoLookup(new IconRegistry()); lookup.setRoot(i, null); TreeNodeBeanBuilder builder = new TreeNodeBeanBuilder(lookup, "1"); TreeNodeBean bean = builder.buildRoot(); String iconId; iconId = bean.getIconId(); assertEquals(IconHelper.EXCEPTION, iconId); bean = builder.buildRoot(); iconId = bean.getIconId(); assertEquals(IconHelper.COMPLETE, iconId); } }