blob: 3633488b1532fb7437a4ec926b131458a1157f7c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.tests.typehierarchy;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.testplugin.CProjectHelper;
import org.eclipse.cdt.core.testplugin.TestScannerProvider;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import junit.framework.Test;
public class TypeHierarchyAcrossProjectsTest extends TypeHierarchyBaseTest {
private ICProject fCProject2;
public TypeHierarchyAcrossProjectsTest(String name) {
super(name);
}
public static Test suite() {
return suite(TypeHierarchyAcrossProjectsTest.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
fCProject2 = CProjectHelper.createCCProject("__thTest_2__", "bin", IPDOMManager.ID_FAST_INDEXER);
IProjectDescription desc = fCProject2.getProject().getDescription();
desc.setReferencedProjects(new IProject[] { fCProject.getProject() });
fCProject2.getProject().setDescription(desc, new NullProgressMonitor());
CCorePlugin.getIndexManager().reindex(fCProject2);
fIndex = CCorePlugin.getIndexManager().getIndex(new ICProject[] { fCProject, fCProject2 });
TestScannerProvider.sIncludes = new String[] { fCProject.getProject().getLocation().toOSString(),
fCProject2.getProject().getLocation().toOSString() };
}
@Override
protected void tearDown() throws Exception {
if (fCProject2 != null) {
CProjectHelper.delete(fCProject2);
}
super.tearDown();
}
// class Simple1 {
// public:
// int field1;
// int method1();
// };
// class Simple2 : public Simple1 {
// public:
// int field2;
// int method2();
// };
// #include "simpleHeader.h"
// class Simple3 : public Simple2 {
// public:
// int field3;
// int method3();
// };
// class Simple4 : public Simple1 {
// public:
// int field4;
// int method4();
// };
public void testSimpleInheritanceAcross() throws Exception {
CharSequence[] content = getContentsForTest(2);
String header = content[0].toString();
String source = content[1].toString();
IFile headerFile = createFile(fCProject.getProject(), "simpleHeader.h", header);
waitUntilFileIsIndexed(fIndex, headerFile);
IFile sourceFile = createFile(fCProject2.getProject(), "simple.cpp", source);
waitUntilFileIsIndexed(fIndex, sourceFile);
CEditor editor = openEditor(sourceFile);
Tree tree;
TreeItem item1, item2, item3, item4;
editor.selectAndReveal(source.indexOf("Simple1"), 1);
openTypeHierarchy(editor);
getHierarchyViewer().expandAll();
tree = getHierarchyViewer().getTree();
item1 = checkTreeNode(tree, 0, "Simple1");
assertEquals(1, tree.getItemCount());
item2 = checkTreeNode(item1, 0, "Simple2");
item4 = checkTreeNode(item1, 1, "Simple4");
assertEquals(2, item1.getItemCount());
item3 = checkTreeNode(item2, 0, "Simple3");
assertEquals(1, item2.getItemCount());
assertEquals(0, item3.getItemCount());
assertEquals(0, item4.getItemCount());
checkMethodTable(new String[] { "field1 : int", "method1() : int" });
editor.selectAndReveal(source.indexOf("Simple2"), 1);
openTypeHierarchy(editor);
tree = getHierarchyViewer().getTree();
item1 = checkTreeNode(tree, 0, "Simple1");
assertEquals(1, tree.getItemCount());
item2 = checkTreeNode(item1, 0, "Simple2");
assertEquals(1, item1.getItemCount());
item3 = checkTreeNode(item2, 0, "Simple3");
assertEquals(1, item2.getItemCount());
assertEquals(0, item3.getItemCount());
checkMethodTable(new String[] { "field2 : int", "method2() : int" });
editor.selectAndReveal(source.indexOf("Simple3"), 1);
openTypeHierarchy(editor);
tree = getHierarchyViewer().getTree();
item1 = checkTreeNode(tree, 0, "Simple1");
assertEquals(1, tree.getItemCount());
item2 = checkTreeNode(item1, 0, "Simple2");
assertEquals(1, item1.getItemCount());
item3 = checkTreeNode(item2, 0, "Simple3");
assertEquals(1, item2.getItemCount());
assertEquals(0, item3.getItemCount());
checkMethodTable(new String[] { "field3 : int", "method3() : int" });
editor.selectAndReveal(source.indexOf("Simple4"), 1);
openTypeHierarchy(editor);
tree = getHierarchyViewer().getTree();
item1 = checkTreeNode(tree, 0, "Simple1");
assertEquals(1, tree.getItemCount());
item4 = checkTreeNode(item1, 0, "Simple4");
assertEquals(1, item1.getItemCount());
assertEquals(0, item4.getItemCount());
checkMethodTable(new String[] { "field4 : int", "method4() : int" });
}
}