/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.jdbc.metadata.impl; import java.util.ArrayList; import java.util.List; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.core.runtime.IPath; import org.teiid.designer.jdbc.metadata.JdbcNode; import org.teiid.designer.jdbc.metadata.JdbcNodeVisitor; import org.teiid.designer.jdbc.metadata.impl.FakeJdbcDatabase; import org.teiid.designer.jdbc.metadata.impl.FakeJdbcNode; /** * TestJdbcNodeImpl */ public class TestJdbcNodeImpl extends TestCase { private final List expectedDepthZeroForRoot; private final List expectedDepthOneForRoot; private final List expectedDepthInfiniteForRoot; private final List expectedDepthZeroForA; private final List expectedDepthOneForA; private final List expectedDepthInfiniteForA; private final List expectedDepthZeroForB; private final List expectedDepthOneForB; private final List expectedDepthInfiniteForB; private FakeJdbcDatabase root; private FakeJdbcNode a; private FakeJdbcNode b; private FakeJdbcNode a_a; private FakeJdbcNode a_b; private FakeJdbcNode a_b_a; private FakeJdbcNode a_b_a_a; private FakeJdbcNode a_b_b; private FakeJdbcNode a_c; private AccumulatingVisitor visitor; protected class AccumulatingVisitor implements JdbcNodeVisitor { private List visitedNodes = new ArrayList(); @Override public boolean visit( JdbcNode node ) { visitedNodes.add(node); return true; } public List getVisitedNodes() { return visitedNodes; } } /** * Constructor for TestJdbcNodeImpl. * * @param name */ public TestJdbcNodeImpl( String name ) { super(name); expectedDepthOneForRoot = new ArrayList(); expectedDepthZeroForRoot = new ArrayList(); expectedDepthInfiniteForRoot = new ArrayList(); expectedDepthOneForA = new ArrayList(); expectedDepthZeroForA = new ArrayList(); expectedDepthInfiniteForA = new ArrayList(); expectedDepthOneForB = new ArrayList(); expectedDepthZeroForB = new ArrayList(); expectedDepthInfiniteForB = new ArrayList(); } /* * @see TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); visitor = new AccumulatingVisitor(); root = new FakeJdbcDatabase("Root Node"); //$NON-NLS-1$ a = new FakeJdbcNode("A", root); //$NON-NLS-1$ b = new FakeJdbcNode("B", root); //$NON-NLS-1$ a_a = new FakeJdbcNode("A.A", a); //$NON-NLS-1$ a_b = new FakeJdbcNode("A.B", a); //$NON-NLS-1$ a_b_a = new FakeJdbcNode("A.B.A", a_b); //$NON-NLS-1$ a_b_a_a = new FakeJdbcNode("A.B.A.A", a_b_a); //$NON-NLS-1$ a_b_b = new FakeJdbcNode("A.B.B", a_b); //$NON-NLS-1$ a_c = new FakeJdbcNode("A.C", a); //$NON-NLS-1$ root.addChildNode(a); root.addChildNode(b); a.addChildNode(a_a); a.addChildNode(a_b); a.addChildNode(a_c); a_b.addChildNode(a_b_a); a_b.addChildNode(a_b_b); a_b_a.addChildNode(a_b_a_a); refreshExpectedLists(); } /* * @see TestCase#tearDown() */ @Override protected void tearDown() throws Exception { super.tearDown(); } /** * Test suite, with one-time setup. */ public static Test suite() { TestSuite suite = new TestSuite("TestJdbcNodeImpl"); //$NON-NLS-1$ suite.addTestSuite(TestJdbcNodeImpl.class); // One-time setup and teardown return new TestSetup(suite) { @Override public void setUp() { } @Override public void tearDown() { } }; } // ========================================================================= // H E L P E R M E T H O D S // ========================================================================= public void refreshExpectedLists() { expectedDepthZeroForRoot.clear(); expectedDepthOneForRoot.clear(); expectedDepthInfiniteForRoot.clear(); expectedDepthZeroForA.clear(); expectedDepthOneForA.clear(); expectedDepthInfiniteForA.clear(); expectedDepthZeroForB.clear(); expectedDepthOneForB.clear(); expectedDepthInfiniteForB.clear(); expectedDepthZeroForRoot.add(root); expectedDepthOneForRoot.add(root); expectedDepthOneForRoot.add(a); expectedDepthOneForRoot.add(b); expectedDepthInfiniteForRoot.add(root); expectedDepthInfiniteForRoot.add(a); expectedDepthInfiniteForRoot.add(a_a); expectedDepthInfiniteForRoot.add(a_b); expectedDepthInfiniteForRoot.add(a_b_a); expectedDepthInfiniteForRoot.add(a_b_a_a); expectedDepthInfiniteForRoot.add(a_b_b); expectedDepthInfiniteForRoot.add(a_c); expectedDepthInfiniteForRoot.add(b); expectedDepthZeroForA.add(a); expectedDepthOneForA.add(a); expectedDepthOneForA.add(a_a); expectedDepthOneForA.add(a_b); expectedDepthOneForA.add(a_c); expectedDepthInfiniteForA.add(a); expectedDepthInfiniteForA.add(a_a); expectedDepthInfiniteForA.add(a_b); expectedDepthInfiniteForA.add(a_b_a); expectedDepthInfiniteForA.add(a_b_a_a); expectedDepthInfiniteForA.add(a_b_b); expectedDepthInfiniteForA.add(a_c); expectedDepthZeroForB.add(b); expectedDepthOneForB.add(b); expectedDepthInfiniteForB.add(b); } public void helpRefreshNodeA_B() throws Exception { a_b.refresh(); // deletes all children // So reconstruct children ... a_b_a = new FakeJdbcNode("A.B.A", a_b); //$NON-NLS-1$ a_b_a_a = new FakeJdbcNode("A.B.A.A", a_b_a); //$NON-NLS-1$ a_b_b = new FakeJdbcNode("A.B.B", a_b); //$NON-NLS-1$ a_b.addChildNode(a_b_a); a_b.addChildNode(a_b_b); a_b_a.addChildNode(a_b_a_a); } public void helpRefreshRoot() throws Exception { root.refresh(); // deletes all children // So reconstruct children ... a = new FakeJdbcNode("A", root); //$NON-NLS-1$ b = new FakeJdbcNode("B", root); //$NON-NLS-1$ a_a = new FakeJdbcNode("A.A", a); //$NON-NLS-1$ a_b = new FakeJdbcNode("A.B", a); //$NON-NLS-1$ a_b_a = new FakeJdbcNode("A.B.A", a_b); //$NON-NLS-1$ a_b_a_a = new FakeJdbcNode("A.B.A.A", a_b_a); //$NON-NLS-1$ a_b_b = new FakeJdbcNode("A.B.B", a_b); //$NON-NLS-1$ a_c = new FakeJdbcNode("A.C", a); //$NON-NLS-1$ root.addChildNode(a); root.addChildNode(b); a.addChildNode(a_a); a.addChildNode(a_b); a.addChildNode(a_c); a_b.addChildNode(a_b_a); a_b.addChildNode(a_b_b); a_b_a.addChildNode(a_b_a_a); } public void helpTestVisit( final JdbcNode node, final int depth, final List expectedNodes ) throws Exception { node.accept(visitor, depth); assertEquals(expectedNodes.size(), visitor.getVisitedNodes().size()); assertEquals(expectedNodes, visitor.getVisitedNodes()); } public void helpTestPath( final JdbcNode node, final String expectedStringifiedPath ) { assertNotNull(node); assertNotNull(expectedStringifiedPath); final IPath actualPath = node.getPath(); assertNotNull(actualPath); final String actualStringifiedPath = actualPath.toString(); assertEquals(expectedStringifiedPath, actualStringifiedPath); } // ========================================================================= // T E S T C A S E S // ========================================================================= public void testGetName() { } public void testGetType() { } public void testRefresh() { } /* * Test for String toString() */ public void testToString() { } public void testAcceptDepthZeroFromRoot() throws Exception { helpTestVisit(root, JdbcNode.DEPTH_ZERO, expectedDepthZeroForRoot); } public void testAcceptDepthOneFromRoot() throws Exception { helpTestVisit(root, JdbcNode.DEPTH_ONE, expectedDepthOneForRoot); } public void testAcceptDepthInfiniteFromRoot() throws Exception { helpTestVisit(root, JdbcNode.DEPTH_INFINITE, expectedDepthInfiniteForRoot); } public void testAcceptDepthZeroFromA() throws Exception { helpTestVisit(a, JdbcNode.DEPTH_ZERO, expectedDepthZeroForA); } public void testAcceptDepthOneFromA() throws Exception { helpTestVisit(a, JdbcNode.DEPTH_ONE, expectedDepthOneForA); } public void testAcceptDepthInfiniteFromA() throws Exception { helpTestVisit(a, JdbcNode.DEPTH_INFINITE, expectedDepthInfiniteForA); } public void testAcceptDepthZeroFromB() throws Exception { helpTestVisit(b, JdbcNode.DEPTH_ZERO, expectedDepthZeroForB); } public void testAcceptDepthOneFromB() throws Exception { helpTestVisit(b, JdbcNode.DEPTH_ONE, expectedDepthOneForB); } public void testAcceptDepthInfiniteFromB() throws Exception { helpTestVisit(b, JdbcNode.DEPTH_INFINITE, expectedDepthInfiniteForB); } public void testGetPathForRoot() { helpTestPath(root, "/"); //$NON-NLS-1$ } public void testGetPathForA() { helpTestPath(a, "/A"); //$NON-NLS-1$ } public void testGetPathForB() { helpTestPath(b, "/B"); //$NON-NLS-1$ } public void testGetPathForAA() { helpTestPath(a_a, "/A/A.A"); //$NON-NLS-1$ } public void testGetPathForAB() { helpTestPath(a_b, "/A/A.B"); //$NON-NLS-1$ } public void testGetPathForABA() { helpTestPath(a_b_a, "/A/A.B/A.B.A"); //$NON-NLS-1$ } public void testGetPathForABAA() { helpTestPath(a_b_a_a, "/A/A.B/A.B.A/A.B.A.A"); //$NON-NLS-1$ } public void testGetPathForABB() { helpTestPath(a_b_b, "/A/A.B/A.B.B"); //$NON-NLS-1$ } public void testGetPathForAC() { helpTestPath(a_c, "/A/A.C"); //$NON-NLS-1$ } public void testGetParentForRoot() { assertSame(null, root.getParent()); } public void testGetParentForA() { assertSame(root, a.getParent()); } public void testGetParentForB() { assertSame(root, b.getParent()); } public void testGetParentForAA() { assertSame(a, a_a.getParent()); } public void testGetParentForAB() { assertSame(a, a_b.getParent()); } public void testGetParentForABA() { assertSame(a_b, a_b_a.getParent()); } public void testGetParentForABAA() { assertSame(a_b_a, a_b_a_a.getParent()); } public void testGetParentForABB() { assertSame(a_b, a_b_b.getParent()); } public void testGetParentForAC() { assertSame(a, a_c.getParent()); } public void testGetNameForRoot() { assertSame("Root Node", root.getName()); //$NON-NLS-1$ } public void testGetNametForA() { assertSame("A", a.getName()); //$NON-NLS-1$ } public void testGetNameForB() { assertSame("B", b.getName()); //$NON-NLS-1$ } public void testGetNameForAA() { assertSame("A.A", a_a.getName()); //$NON-NLS-1$ } public void testGetNameForAB() { assertSame("A.B", a_b.getName()); //$NON-NLS-1$ } public void testGetNameForABA() { assertSame("A.B.A", a_b_a.getName()); //$NON-NLS-1$ } public void testGetNameForABAA() { assertSame("A.B.A.A", a_b_a_a.getName()); //$NON-NLS-1$ } public void testGetNameForABB() { assertSame("A.B.B", a_b_b.getName()); //$NON-NLS-1$ } public void testGetNameForAC() { assertSame("A.C", a_c.getName()); //$NON-NLS-1$ } public void testGetJdbcDatabaseForRoot() { assertSame(root, root.getJdbcDatabase()); } public void testGetJdbcDatabaseForA() { assertSame(root, a.getJdbcDatabase()); } public void testGetJdbcDatabaseForB() { assertSame(root, b.getJdbcDatabase()); } public void testGetJdbcDatabaseForAA() { assertSame(root, a_a.getJdbcDatabase()); } public void testGetJdbcDatabaseForAB() { assertSame(root, a_b.getJdbcDatabase()); } public void testGetJdbcDatabaseForABA() { assertSame(root, a_b_a.getJdbcDatabase()); } public void testGetJdbcDatabaseForABAA() { assertSame(root, a_b_a_a.getJdbcDatabase()); } public void testGetJdbcDatabaseForABB() { assertSame(root, a_b_b.getJdbcDatabase()); } public void testGetJdbcDatabaseForAC() { assertSame(root, a_c.getJdbcDatabase()); } // ------------------------------------------------------------------------- // Test the Selection Mode // ------------------------------------------------------------------------- public void testDefaultSelection() { assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); } public void testSelectionWhenAllUnselected1() { a_b_a.setSelected(true); assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); } public void testSelectionWhenAllUnselected2() { a.setSelected(true); assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_c.getSelectionMode()); } public void testSelectionOfRootWhenAllUnselected() { root.setSelected(true); assertEquals(JdbcNode.SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_c.getSelectionMode()); } public void testSelectionOfLeafWhenAllUnselected() { a_b_a_a.setSelected(true); assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); } public void testSelectionWhenRefreshingAfterSelection1() throws Exception { a.setSelected(true); assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_c.getSelectionMode()); helpRefreshNodeA_B(); // Perform the same tests assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_c.getSelectionMode()); } public void testSelectionWhenRefreshingAfterSelection2() throws Exception { a_b_a_a.setSelected(true); assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); helpRefreshNodeA_B(); // Perform the same tests assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); } public void testSelectionWhenRefreshingAfterSelection3() throws Exception { a_b_a_a.setSelected(true); assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); helpRefreshRoot(); // Perform the same tests assertEquals(JdbcNode.PARTIALLY_SELECTED, root.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_a.getSelectionMode()); assertEquals(JdbcNode.PARTIALLY_SELECTED, a_b.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a.getSelectionMode()); assertEquals(JdbcNode.SELECTED, a_b_a_a.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_b_b.getSelectionMode()); assertEquals(JdbcNode.UNSELECTED, a_c.getSelectionMode()); } }