package com.vaadin.v7.tests.server.component.tree; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; import java.util.HashSet; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.vaadin.v7.data.Container; import com.vaadin.v7.data.util.HierarchicalContainer; import com.vaadin.v7.data.util.IndexedContainer; import com.vaadin.v7.shared.ui.tree.TreeState; import com.vaadin.v7.ui.Tree; public class TreeTest { private Tree tree; private Tree tree2; private Tree tree3; private Tree tree4; @Before public void setUp() { tree = new Tree(); tree.addItem("parent"); tree.addItem("child"); tree.setChildrenAllowed("parent", true); tree.setParent("child", "parent"); tree2 = new Tree("Caption"); tree2.addItem("parent"); tree2.addItem("child"); tree2.setChildrenAllowed("parent", true); tree2.setParent("child", "parent"); tree3 = new Tree("Caption", null); tree3.addItem("parent"); tree3.addItem("child"); tree3.setChildrenAllowed("parent", true); tree3.setParent("child", "parent"); tree4 = new Tree("Caption", new IndexedContainer()); tree4.addItem("parent"); tree4.addItem("child"); tree4.setChildrenAllowed("parent", true); tree4.setParent("child", "parent"); } @Test public void testRemoveChildren() { assertTrue(tree.hasChildren("parent")); tree.removeItem("child"); assertFalse(tree.hasChildren("parent")); assertTrue(tree2.hasChildren("parent")); tree2.removeItem("child"); assertFalse(tree2.hasChildren("parent")); assertTrue(tree3.hasChildren("parent")); tree3.removeItem("child"); assertFalse(tree3.hasChildren("parent")); assertTrue(tree4.hasChildren("parent")); tree4.removeItem("child"); assertFalse(tree4.hasChildren("parent")); } @Test public void testContainerTypeIsHierarchical() { assertTrue(HierarchicalContainer.class .isAssignableFrom(tree.getContainerDataSource().getClass())); assertTrue(HierarchicalContainer.class .isAssignableFrom(tree2.getContainerDataSource().getClass())); assertTrue(HierarchicalContainer.class .isAssignableFrom(tree3.getContainerDataSource().getClass())); assertFalse(HierarchicalContainer.class .isAssignableFrom(tree4.getContainerDataSource().getClass())); assertTrue(Container.Hierarchical.class .isAssignableFrom(tree4.getContainerDataSource().getClass())); } @Test public void testRemoveExpandedItems() throws Exception { tree.expandItem("parent"); tree.expandItem("child"); Field expandedField = tree.getClass().getDeclaredField("expanded"); Field expandedItemIdField = tree.getClass() .getDeclaredField("expandedItemId"); expandedField.setAccessible(true); expandedItemIdField.setAccessible(true); HashSet<Object> expanded = (HashSet<Object>) expandedField.get(tree); Object expandedItemId = expandedItemIdField.get(tree); assertEquals(2, expanded.size()); assertTrue("Contains parent", expanded.contains("parent")); assertTrue("Contains child", expanded.contains("child")); assertEquals("child", expandedItemId); tree.removeItem("parent"); expanded = (HashSet<Object>) expandedField.get(tree); expandedItemId = expandedItemIdField.get(tree); assertEquals(1, expanded.size()); assertTrue("Contains child", expanded.contains("child")); assertEquals("child", expandedItemId); tree.removeItem("child"); expanded = (HashSet<Object>) expandedField.get(tree); expandedItemId = expandedItemIdField.get(tree); assertEquals(0, expanded.size()); assertNull(expandedItemId); } @Test public void testRemoveExpandedItemsOnContainerChange() throws Exception { tree.expandItem("parent"); tree.expandItem("child"); tree.setContainerDataSource(new HierarchicalContainer()); Field expandedField = tree.getClass().getDeclaredField("expanded"); Field expandedItemIdField = tree.getClass() .getDeclaredField("expandedItemId"); expandedField.setAccessible(true); expandedItemIdField.setAccessible(true); HashSet<Object> expanded = (HashSet<Object>) expandedField.get(tree); assertEquals(0, expanded.size()); Object expandedItemId = expandedItemIdField.get(tree); assertNull(expandedItemId); } @Test public void getState_treeHasCustomState() { TestTree table = new TestTree(); TreeState state = table.getState(); Assert.assertEquals("Unexpected state class", TreeState.class, state.getClass()); } @Test public void getPrimaryStyleName_treeHasCustomPrimaryStyleName() { Tree table = new Tree(); TreeState state = new TreeState(); Assert.assertEquals("Unexpected primary style name", state.primaryStyleName, table.getPrimaryStyleName()); } @Test public void treeStateHasCustomPrimaryStyleName() { TreeState state = new TreeState(); Assert.assertEquals("Unexpected primary style name", "v-tree", state.primaryStyleName); } private static class TestTree extends Tree { @Override public TreeState getState() { return super.getState(); } } }