package org.incha.ui.classview; import java.io.File; import java.util.LinkedList; import java.util.List; import junit.framework.TestCase; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IMember; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.incha.TestUtils; import org.incha.compiler.dom.JavaDomBuilder; import org.incha.compiler.dom.JavaDomUtils; import org.incha.compiler.dom.JavaDomVisitorAdapter; import org.incha.core.JavaProject; import org.incha.core.jswingripples.eig.JSwingRipplesEIG; import org.incha.core.jswingripples.eig.JSwingRipplesEIGNode; import org.incha.ui.util.NullMonitor; public class MemberHierarchySupportTest extends TestCase { private List<JSwingRipplesEIGNode> members = new LinkedList<JSwingRipplesEIGNode>(); private final JSwingRipplesEIG eig = new JSwingRipplesEIG(new JavaProject("test")); //named member public static class TypeChildForTest { public int field; public void method() {} } //anonymous memeber public Runnable anotymousMember = new Runnable() { @Override public void run() {} }; /** * Default constructor. */ public MemberHierarchySupportTest() { super(); } /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { final File sourcePath = TestUtils.findSourceForClass(MemberHierarchySupportTest.class); final JavaDomBuilder builder = new JavaDomBuilder("test"); final ICompilationUnit unit = builder.build(sourcePath, new NullMonitor()); //get all members from compilation unit JavaDomUtils.visit(unit, new JavaDomVisitorAdapter(){ @Override public boolean startVisit(final IField e) { visitIMember(e); return true; } /* (non-Javadoc) * @see org.incha.compiler.dom.JavaDomVisitorAdapter#startVisit(org.eclipse.jdt.core.IMethod) */ @Override public boolean startVisit(final IMethod e) { visitIMember(e); return true; } /* (non-Javadoc) * @see org.incha.compiler.dom.JavaDomVisitorAdapter#startVisit(org.eclipse.jdt.core.IType) */ @Override public boolean startVisit(final IType e) { visitIMember(e); return true; } private void visitIMember(final IMember member) { final JSwingRipplesEIGNode node = new JSwingRipplesEIGNode(eig, member); members.add(node); } }); } /** * @param name test case name. */ public MemberHierarchySupportTest(final String name) { super(name); } public void testGetRootTypes() { final MemberHierarchySupport support = new MemberHierarchySupport(members); final JSwingRipplesEIGNode[] roots = support.getRootTypes(); assertEquals(1, roots.length); assertEquals(MemberHierarchySupportTest.class.getName(), ((IType) roots[0].getNodeIMember()).getFullyQualifiedName()); } /** * Tests get parent method. */ public void testGetParent() { final MemberHierarchySupport support = new MemberHierarchySupport(members); final JSwingRipplesEIGNode[] roots = support.getRootTypes(); final JSwingRipplesEIGNode root = roots[0]; assertNull(support.getParent(root)); final JSwingRipplesEIGNode[] children = support.getChildren(root); assertTrue(root == support.getParent(children[0])); } /** * Tests get depth method. */ public void testGetDepth() { final MemberHierarchySupport support = new MemberHierarchySupport(members); final JSwingRipplesEIGNode typeChildForTest = getMemberByName("TypeChildForTest"); final JSwingRipplesEIGNode methodRun = getMemberByName("run"); final JSwingRipplesEIGNode method = getMemberByName("method"); assertEquals(0, support.getHierarchyDepth(support.getRootTypes()[0])); assertEquals(1, support.getHierarchyDepth(typeChildForTest)); assertEquals(3, support.getHierarchyDepth(methodRun)); assertEquals(2, support.getHierarchyDepth(method)); } /** * @param string * @return */ private JSwingRipplesEIGNode getMemberByName(final String string) { final MemberHierarchySupport support = new MemberHierarchySupport(members); for (final JSwingRipplesEIGNode m : support.getMembers()) { if (string.equals(m.getNodeIMember().getElementName())) { return m; } } return null; } }