diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.cpp b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.cpp new file mode 100644 index 00000000000..efaa2b62b45 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.cpp @@ -0,0 +1 @@ +int x = ONE; \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.cpp.expected b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.cpp.expected new file mode 100644 index 00000000000..7b5054edfce --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.cpp.expected @@ -0,0 +1,2 @@ +#include "Macro.h" +int x = ONE; \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.h b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.h new file mode 100644 index 00000000000..9b7992eb6b9 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Macro.h @@ -0,0 +1 @@ +#define ONE 1 \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/Other.cpp b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Other.cpp new file mode 100644 index 00000000000..92a28645d3f --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/Other.cpp @@ -0,0 +1,5 @@ +#include "A.h" +#include "Macro.h" +#include "OverloadedFunction.h" +#include "VariableType.h" + diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.cpp b/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.cpp new file mode 100644 index 00000000000..bea184ef480 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.cpp @@ -0,0 +1,9 @@ +#include "A.h" + +namespace ns3 { + +void test() { + func(0); +} + +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.cpp.expected b/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.cpp.expected new file mode 100644 index 00000000000..0637a84feed --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.cpp.expected @@ -0,0 +1,10 @@ +#include "A.h" +#include "OverloadedFunction.h" + +namespace ns3 { + +void test() { + func(0); +} + +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.h b/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.h new file mode 100644 index 00000000000..1b11e3170b0 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/OverloadedFunction.h @@ -0,0 +1,6 @@ +namespace ns3 { + +void func(int p); +void func(char* p); + +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.cpp b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.cpp new file mode 100644 index 00000000000..68805e09715 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.cpp @@ -0,0 +1,9 @@ +#include "VariableTypeHelper.h" + +namespace ns2 { + +void VT::method() { + a_->m(); +} + +} diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.cpp.expected b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.cpp.expected new file mode 100644 index 00000000000..d5dfa667cc5 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.cpp.expected @@ -0,0 +1,12 @@ +#include "VariableTypeHelper.h" +#include "VariableType.h" + +using ns1::A; + +namespace ns2 { + +void VT::method() { + a_->m(); +} + +} diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.h b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.h new file mode 100644 index 00000000000..960b5507802 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableType.h @@ -0,0 +1,10 @@ +namespace ns1 { + +class A { + A(int x); + A(int x, int y); + ~A(); + void m(); +}; + +} diff --git a/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableTypeHelper.h b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableTypeHelper.h new file mode 100644 index 00000000000..cafee9f8af7 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/addInclude/VariableTypeHelper.h @@ -0,0 +1,10 @@ +namespace ns1 { class A; } + +namespace ns2 { + +class VT { + void method(); + ns1::A* a_; +}; + +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AddIncludeTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AddIncludeTest.java new file mode 100644 index 00000000000..8fe48b17d8e --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AddIncludeTest.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (c) 2009 Google, 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: + * Sergey Prigogin (Google) - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.ui.tests.text; + +import java.util.ListResourceBundle; + +import junit.extensions.TestSetup; +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.source.SourceViewer; + +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.model.IWorkingCopy; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.ui.CUIPlugin; + +import org.eclipse.cdt.internal.ui.editor.AddIncludeOnSelectionAction; +import org.eclipse.cdt.internal.ui.editor.CEditor; + +/** + * Tests the AddIncludeOnSelectionAction. + */ +public class AddIncludeTest extends TestCase { + private static final String PROJECT= "AddIncludeTests"; + + private static final class EmptyBundle extends ListResourceBundle { + protected Object[][] getContents() { + return new Object[0][]; + } + } + + protected static class AddIncludeTestSetup extends TestSetup { + private ICProject fCProject; + + public AddIncludeTestSetup(Test test) { + super(test); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + fCProject= EditorTestHelper.createCProject(PROJECT, "resources/addInclude"); + CCorePlugin.getIndexManager().setIndexerId(fCProject, IPDOMManager.ID_FAST_INDEXER); + // Wait until the indexer is done + assertTrue(CCorePlugin.getIndexManager().joinIndexer(10000, new NullProgressMonitor())); + } + + @Override + protected void tearDown() throws Exception { + if (fCProject != null) + CProjectHelper.delete(fCProject); + super.tearDown(); + } + } + + public static Test suite() { + return new AddIncludeTestSetup(new TestSuite(AddIncludeTest.class)); + } + + private CEditor fEditor; + private SourceViewer fSourceViewer; + private IDocument fDocument; + + @Override + protected void setUp() throws Exception { + String filename= createFileName(""); + fEditor= (CEditor) EditorTestHelper.openInEditor(ResourceTestHelper.findFile(filename), true); + fSourceViewer= EditorTestHelper.getSourceViewer(fEditor); + fDocument= fSourceViewer.getDocument(); + IWorkingCopy tu = CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(fEditor.getEditorInput()); + tu.makeConsistent(new NullProgressMonitor(), true); + } + + @Override + protected void tearDown() throws Exception { + EditorTestHelper.closeEditor(fEditor); + } + + private void assertAddIncludeResult() throws Exception { + new AddIncludeOnSelectionAction(fEditor).run(); + + String file= createFileName(".expected"); + String expected= ResourceTestHelper.read(file).toString(); + assertEquals(expected, fDocument.get()); + } + + private String createFileName(String suffix) { + String name= getName(); + name= name.substring(4); // Strip "test" prefix. + return "/" + PROJECT + "/src/" + name + ".cpp" + suffix; + } + + private void select(String name) { + final int offset = fDocument.get().indexOf(name); + assertTrue(offset >= 0); + fSourceViewer.setSelectedRange(offset, name.length()); + } + + public void testVariableType() throws Exception { + select("a_"); + assertAddIncludeResult(); + } + + public void testOverloadedFunction() throws Exception { + select("func"); + assertAddIncludeResult(); + } + + public void testMacro() throws Exception { + select("ONE"); + assertAddIncludeResult(); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java index 9f6451d35c3..03a27cbcc00 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java @@ -8,6 +8,7 @@ * Contributors: * Markus Schorn - initial API and implementation * Andrew Ferguson (Symbian) + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.ui.tests.text; @@ -74,5 +75,8 @@ public class TextTestSuite extends TestSuite { // block comment tests addTest(AddBlockCommentTest.suite()); addTest(RemoveBlockCommentTest.suite()); + + // add include + addTest(AddIncludeTest.suite()); } }