diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java index 4cf0d24a015..7fc8fbfb7c5 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java @@ -17,6 +17,7 @@ import junit.framework.TestSuite; import org.eclipse.cdt.refactoring.tests.RenameRegressionTests; import org.eclipse.cdt.ui.tests.callhierarchy.CallHierarchyTestSuite; +import org.eclipse.cdt.ui.tests.includebrowser.IncludeBrowserTestSuite; import org.eclipse.cdt.ui.tests.text.TextTestSuite; import org.eclipse.cdt.ui.tests.text.contentassist.ContentAssistTestSuite; import org.eclipse.cdt.ui.tests.viewsupport.ViewSupportTestSuite; @@ -47,7 +48,10 @@ public class AutomatedSuite extends TestSuite { // tests for package org.eclipse.cdt.ui.tests.callhierarchy addTest(CallHierarchyTestSuite.suite()); - + + // tests for package org.eclipse.cdt.ui.tests.callhierarchy + addTest(IncludeBrowserTestSuite.suite()); + // tests from package org.eclipse.cdt.ui.tests.text.contentAssist addTest(ContentAssistTestSuite.suite()); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java index 56a9f50d8ce..e8f30db338d 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java @@ -49,7 +49,15 @@ public class BaseUITestCase extends BaseTestCase { protected String readTaggedComment(final String tag) throws IOException { return TestSourceReader.readTaggedComment(CTestPlugin.getDefault().getBundle(), "ui", getClass(), tag); } - + + /** + * Reads multiple sections in comments from the source of the given class. + * @since 4.0 + */ + public StringBuffer[] getContentsForTest(int sections) throws IOException { + return TestSourceReader.getContentsForTest(CTestPlugin.getDefault().getBundle(), "ui", getClass(), getName(), sections); + } + protected IFile createFile(IContainer container, String fileName, String contents) throws Exception { return TestSourceReader.createFile(container, new Path(fileName), contents); } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java new file mode 100644 index 00000000000..aba33350341 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/BasicIncludeBrowserTest.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2006 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.tests.includebrowser; + +import junit.framework.Test; + +import org.eclipse.core.resources.IFile; +import org.eclipse.swt.widgets.Tree; + +import org.eclipse.cdt.core.testplugin.TestScannerProvider; + + +public class BasicIncludeBrowserTest extends IncludeBrowserBaseTest { + + public BasicIncludeBrowserTest(String name) { + super(name); + } + + public static Test suite() { + return suite(BasicIncludeBrowserTest.class); + } + + + // // source + // #include "user.h" + // #include + + public void testSimpleInclusion() throws Exception { + TestScannerProvider.sIncludes= new String[]{getProject().getProject().getLocation().toOSString()}; + + StringBuffer[] contents= getContentsForTest(1); + IFile user= createFile(getProject(), "user.h", ""); + IFile system= createFile(getProject(), "system.h", ""); + IFile source= createFile(getProject(), "source.cpp", contents[0].toString()); + waitForIndexer(fIndex, source, INDEXER_WAIT_TIME); + + openIncludeBrowser(source); + Tree tree = getIBTree(); + checkTreeNode(tree, 0, "source.cpp"); + checkTreeNode(tree, 0, 0, "user.h"); + checkTreeNode(tree, 0, 1, "system.h"); + + // the tree has to be reversed + openIncludeBrowser(user, true); + checkTreeNode(tree, 0, "user.h"); + checkTreeNode(tree, 0, 0, "source.cpp"); + + openIncludeBrowser(system); + checkTreeNode(tree, 0, "system.h"); + checkTreeNode(tree, 0, 0, "source.cpp"); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java new file mode 100644 index 00000000000..095b5674490 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserBaseTest.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2006 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.tests.includebrowser; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.index.IIndex; +import org.eclipse.cdt.core.model.CoreModelUtil; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.cdt.ui.tests.BaseUITestCase; + +import org.eclipse.cdt.internal.core.CCoreInternals; + +import org.eclipse.cdt.internal.ui.includebrowser.IBViewPart; + +public class IncludeBrowserBaseTest extends BaseUITestCase { + protected static final int INDEXER_WAIT_TIME = 8000; + protected static IProgressMonitor NPM= new NullProgressMonitor(); + + private ICProject fCProject; + protected IIndex fIndex; + + + public IncludeBrowserBaseTest(String name) { + super(name); + } + + protected void setUp() throws CoreException { + fCProject= CProjectHelper.createCCProject("__ibTest__", "bin", IPDOMManager.ID_FAST_INDEXER); + + // clear the index + CCoreInternals.getPDOMManager().reindex(fCProject); + fIndex= CCorePlugin.getIndexManager().getIndex(fCProject); + } + + protected void tearDown() throws CoreException { + if (fCProject != null) { + CProjectHelper.delete(fCProject); + } + } + + protected IProject getProject() { + return fCProject.getProject(); + } + + protected IBViewPart openIncludeBrowser(IFile file) throws PartInitException { + IBViewPart result = doOpenIncludeBrowser(file); + runEventQueue(200); + return result; + } + + protected IBViewPart openIncludeBrowser(IFile file, boolean includedBy) throws PartInitException { + IBViewPart result = doOpenIncludeBrowser(file); + result.onSetDirection(includedBy); + runEventQueue(200); + return result; + } + + private IBViewPart doOpenIncludeBrowser(IFile file) throws PartInitException { + ITranslationUnit tu= CoreModelUtil.findTranslationUnit(file); + if (tu == null) { + fail(file.getFullPath().toString() + " is no translation unit!"); + } + IWorkbenchPage page= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IBViewPart result= (IBViewPart)page.showView(CUIPlugin.ID_INCLUDE_BROWSER); + result.setInput(tu); + return result; + } + + protected Tree getIBTree() { + IWorkbenchPage page= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + runEventQueue(0); + IBViewPart ib= (IBViewPart)page.findView(CUIPlugin.ID_INCLUDE_BROWSER); + assertNotNull(ib); + Tree tree= ib.getTreeViewer().getTree(); + return tree; + } + + protected void checkTreeNode(Tree tree, int i0, String label) { + TreeItem root= null; + try { + for (int i=0; i<20; i++) { + root= tree.getItem(i0); + if (!"...".equals(root.getText())) { + break; + } + runEventQueue(50); + } + } + catch (IllegalArgumentException e) { + assertTrue("Tree node " + label + "{" + i0 + "} does not exist!", false); + } + assertEquals(label, root.getText()); + } + + protected void checkTreeNode(Tree tree, int i0, int i1, String label) { + try { + TreeItem root= tree.getItem(i0); + TreeItem item= root.getItem(i1); + for (int i=0; i<40; i++) { + if (!"...".equals(item.getText())) { + break; + } + runEventQueue(50); + } + assertEquals(label, item.getText()); + } + catch (IllegalArgumentException e) { + assertTrue("Tree node " + label + "{" + i0 + "," + i1 + "} does not exist!", false); + } + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserTestSuite.java new file mode 100644 index 00000000000..df1d62f692f --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/includebrowser/IncludeBrowserTestSuite.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2006 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.tests.includebrowser; + +import junit.framework.TestSuite; + +public class IncludeBrowserTestSuite extends TestSuite { + + public static TestSuite suite() { + return new IncludeBrowserTestSuite(); + } + + public IncludeBrowserTestSuite() { + super("Tests in package org.eclipse.cdt.ui.tests.inlucdebrowser"); + addTest(BasicIncludeBrowserTest.suite()); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java index e5f71601751..d7e84910bde 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java @@ -33,6 +33,7 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; @@ -45,7 +46,6 @@ import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Text; @@ -176,8 +176,12 @@ public class IBViewPart extends ViewPart fContentProvider.setComputeIncludedBy(isHeader); fIncludedByAction.setChecked(isHeader); fIncludesToAction.setChecked(!isHeader); + fIncludedByAction.setEnabled(false); updateSorter(); } + else { + fIncludedByAction.setEnabled(true); + } fTreeViewer.setInput(input); fPagebook.showPage(fViewerPage); updateHistory(input); @@ -609,7 +613,7 @@ public class IBViewPart extends ViewPart } } - protected void onSetDirection(boolean includedBy) { + public void onSetDirection(boolean includedBy) { if (includedBy != fContentProvider.getComputeIncludedBy()) { Object input= fTreeViewer.getInput(); fTreeViewer.setInput(null); @@ -734,8 +738,9 @@ public class IBViewPart extends ViewPart }; } - public Control getPageBook() { - return fPagebook; + // access for tests + public TreeViewer getTreeViewer() { + return fTreeViewer; } public ITranslationUnit[] getHistoryEntries() {