diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java index bfe2fe20c62..c6645b09718 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/BaseTestCase.java @@ -50,11 +50,13 @@ public class BaseTestCase extends TestCase { private static Test getFailingTests(Class clazz, String prefix) { TestSuite suite= new TestSuite("Failing Tests"); Vector names= new Vector(); - if (Test.class.isAssignableFrom(clazz)) { - Method[] methods= clazz.getDeclaredMethods(); + Class superClass= clazz; + while (Test.class.isAssignableFrom(superClass) && !TestCase.class.equals(superClass)) { + Method[] methods= superClass.getDeclaredMethods(); for (int i= 0; i < methods.length; i++) { addFailingMethod(suite, methods[i], clazz, prefix); } + superClass= superClass.getSuperclass(); } if (suite.countTestCases() == 0) { return null; 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 7fc8fbfb7c5..ff26a1afc8f 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 @@ -20,6 +20,7 @@ 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.text.selection.SelectionTestSuite; import org.eclipse.cdt.ui.tests.viewsupport.ViewSupportTestSuite; /** @@ -62,8 +63,7 @@ public class AutomatedSuite extends TestSuite { // addTest(ContentAssist2TestSuite.suite()); // tests from package org.eclipse.cdt.ui.tests.text.selection - // commented out because they are failing pretty badly - // addTest(SelectionTestSuite.suite()); + addTest(SelectionTestSuite.suite()); } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/BaseSelectionTestsIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/BaseSelectionTestsIndexer.java index 7ebb9842408..0fb37c58488 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/BaseSelectionTestsIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/BaseSelectionTestsIndexer.java @@ -15,8 +15,6 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; -import junit.framework.TestCase; - import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; @@ -31,6 +29,10 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.TextSelection; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.search.ui.ISearchResult; +import org.eclipse.search.ui.NewSearchUI; +import org.eclipse.search.ui.text.AbstractTextSearchResult; +import org.eclipse.search2.internal.ui.SearchView; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; @@ -48,20 +50,19 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.testplugin.FileManager; +import org.eclipse.cdt.ui.tests.BaseUITestCase; import org.eclipse.cdt.internal.core.parser.ParserException; import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction; -import org.eclipse.cdt.internal.ui.search.actions.OpenDefinitionAction; /** * Base test class for testing Ctrl_F3/F3 with the indexers. * * @author dsteffle */ -public class BaseSelectionTestsIndexer extends TestCase { - public static final int TIMEOUT = 50; +public class BaseSelectionTestsIndexer extends BaseUITestCase { protected boolean fileIndexed; protected IProject project; static FileManager fileManager = new FileManager(); @@ -72,12 +73,7 @@ public class BaseSelectionTestsIndexer extends TestCase { } public void waitForIndex(int maxSec) throws Exception { - int delay = 0; - while (fileIndexed != true && delay < (maxSec * 1000)) - { - Thread.sleep(TIMEOUT); - delay += TIMEOUT; - } + assertTrue(CCorePlugin.getIndexManager().joinIndexer(maxSec*1000, new NullProgressMonitor())); } protected String getMessage(IStatus status) { @@ -173,7 +169,7 @@ public class BaseSelectionTestsIndexer extends TestCase { return folder; } - public void resetIndexState() { + protected void resetIndexState() { fileIndexed = false; } @@ -264,95 +260,7 @@ public class BaseSelectionTestsIndexer extends TestCase { return null; } - - protected IASTNode testCtrl_F3(IFile file, int offset) throws ParserException, CoreException { - return testCtrl_F3(file, offset, 0); - } - - protected IASTNode testCtrl_F3(IFile file, int offset, int length) throws ParserException, CoreException { - if (offset < 0) - throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ - - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IEditorPart part = null; - try { - part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$ - } catch (PartInitException e) { - assertFalse(true); - } - - if (part instanceof AbstractTextEditor) { - ((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,length)); - final OpenDefinitionAction action = (OpenDefinitionAction) ((AbstractTextEditor)part).getAction("OpenDefinition"); //$NON-NLS-1$ - action.runSync(); - - // update the file/part to point to the newly opened IFile/IEditorPart - part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); - IEditorInput input = part.getEditorInput(); - if (input instanceof FileEditorInput) { - file = ((FileEditorInput)input).getFile(); - } else { - assertFalse(true); // bail! - } - - // the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU - ISelection sel = ((AbstractTextEditor)part).getSelectionProvider().getSelection(); - - if (sel instanceof TextSelection) { - ITextSelection textSel = (ITextSelection)sel; - ITranslationUnit tu = (ITranslationUnit)CoreModel.getDefault().create(file); - IASTTranslationUnit ast = tu.getAST(); - IASTName[] names = tu.getLanguage().getSelectedNames(ast, textSel.getOffset(), textSel.getLength()); - - if (names == null || names.length == 0) - return null; - - return names[0]; - } - } - - return null; - } - - protected ISelection testCtrl_F3Selection(IFile file, int offset) throws ParserException { - return testCtrl_F3Selection(file, offset, 0); - } - - protected ISelection testCtrl_F3Selection(IFile file, int offset, int length) throws ParserException { - if (offset < 0) - throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ - - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IEditorPart part = null; - try { - part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$ - } catch (PartInitException e) { - assertFalse(true); - } - - if (part instanceof AbstractTextEditor) { - ((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,length)); - - final OpenDefinitionAction action = (OpenDefinitionAction) ((AbstractTextEditor)part).getAction("OpenDefinition"); //$NON-NLS-1$ - action.runSync(); - - // update the file/part to point to the newly opened IFile/IEditorPart - part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); - IEditorInput input = part.getEditorInput(); - if (input instanceof FileEditorInput) { - file = ((FileEditorInput)input).getFile(); - } else { - assertFalse(true); // bail! - } - - // the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU - return ((AbstractTextEditor)part).getSelectionProvider().getSelection(); - } - - return null; - } - protected void testSimple_Ctrl_G_Selection(IFile file, int offset, int length, int numOccurrences) throws ParserException { if (offset < 0) throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ @@ -373,11 +281,23 @@ public class BaseSelectionTestsIndexer extends TestCase { action.run(); // update the file/part to point to the newly opened IFile/IEditorPart -// IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("org.eclipse.search.ui.views.SearchView"); - -// String title = view.getTitle(); - -// assertTrue( title.indexOf(numOccurrences + " Occurrences") >= 0 ); //$NON-NLS-1$ + int occurs= 0; + for (int i = 0; i < 20; i++) { + SearchView view = (SearchView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("org.eclipse.search.ui.views.SearchView"); + if (view != null) { + ISearchResult result= view.getCurrentSearchResult(); + if (!NewSearchUI.isQueryRunning(result.getQuery())) { + if (result instanceof AbstractTextSearchResult) { + AbstractTextSearchResult ar= (AbstractTextSearchResult) result; + occurs= ar.getMatchCount(); + if (occurs > 0) + break; + } + } + } + runEventQueue(50); + } + assertEquals(numOccurrences, occurs); } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java new file mode 100644 index 00000000000..eb89d07f624 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java @@ -0,0 +1,767 @@ +/******************************************************************************* + * 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.text.selection; + +import java.io.IOException; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.dom.ast.IASTFileLocation; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.index.IIndex; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.util.TestSourceReader; +import org.eclipse.cdt.ui.testplugin.CTestPlugin; + +import org.eclipse.cdt.internal.core.dom.parser.ASTNode; + +/** + * Test Ctrl_F3/F3 with the DOM Indexer for a C++ project. + */ +public abstract class CPPSelectionTestsAnyIndexer extends BaseSelectionTestsIndexer { + private static final int MAX_WAIT_TIME = 8000; + private IFile file; + private IFile hfile; + private NullProgressMonitor monitor; + + private String sourceIndexerID; + private IIndex index; + + public CPPSelectionTestsAnyIndexer(String name, String indexerID) { + super(name); + sourceIndexerID= indexerID; + } + + protected void setUp() throws Exception { + super.setUp(); + + //Create temp project + ICProject cproject = createProject("CPPSelectionTestsDOMIndexerProject"); //$NON-NLS-1$ + assertNotNull("Unable to create project", cproject); +// MakeProjectNature.addNature(project, new NullProgressMonitor()); +// ScannerConfigNature.addScannerConfigNature(project); +// PerProjectSICollector.calculateCompilerBuiltins(project); + + CCorePlugin.getPDOMManager().setIndexerId(cproject, sourceIndexerID); + project= cproject.getProject(); + index= CCorePlugin.getIndexManager().getIndex(cproject); + } + + protected void tearDown() { + try { + super.tearDown(); + } catch (Exception e1) { + } + //Delete project + if (project.exists()) { + try { + System.gc(); + System.runFinalization(); + project.delete(true, monitor); + } catch (CoreException e) { + fail(getMessage(e.getStatus())); + } + } + } + + private ICProject createProject(String projectName) throws CoreException { + ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ + return cPrj; + } + + protected StringBuffer[] getContents(int sections) throws IOException { + return TestSourceReader.getContentsForTest( + CTestPlugin.getDefault().getBundle(), "ui", CPPSelectionTestsAnyIndexer.class, getName(), sections); + } + + private void assertNode(String name, int offset, IASTNode node) { + assertNotNull(node); + assertEquals(name, node.toString()); + IASTFileLocation loc= node.getFileLocation(); + assertEquals(offset, loc.getNodeOffset()); + assertEquals(name.length(), loc.getNodeLength()); + } + + // // header + // class Point{ + // public: + // Point(): xCoord(0){} + // Point& operator=(const Point &rhs){return *this;} + // void* operator new [ ] (unsigned int); + // private: + // int xCoord; + // }; + + // // source + // #incluce "test93281.h" + // static const Point zero; + // int main(int argc, char **argv) { + // Point *p2 = new Point(); + // p2-> operator // /* operator */ // F3 in the middle + // // of "operator" should work + // // \ + // /* */ + // =(zero); // line B + // p2->operator /* oh yeah */ new // F3 in the middle of "operator" + // // should work + // // + // [ /* sweet */ ] // + // (2); + // return (0); + // } + public void testBug93281() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("test93281.h", hcode); + file = importFile("test93281.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int offset = scode.indexOf("p2->operator") + 6; //$NON-NLS-1$ + IASTNode node = testF3(file, offset); + + assertTrue(node instanceof IASTName); + assertEquals("operator new[]", ((IASTName)node).toString()); //$NON-NLS-1$ + assertEquals(hcode.indexOf("operator new"), ((ASTNode)node).getOffset()); + assertEquals(16, ((ASTNode)node).getLength()); + + offset = scode.indexOf("p2-> operator") + 11; //$NON-NLS-1$ + node = testF3(file, offset); + + assertTrue(node instanceof IASTName); + assertEquals("operator =", ((IASTName)node).toString()); //$NON-NLS-1$ + assertEquals(hcode.indexOf("operator="), ((ASTNode)node).getOffset()); + assertEquals(9, ((ASTNode)node).getLength()); + } + + // // the header + // extern int MyInt; // MyInt is in another file + // extern const int MyConst; // MyConst is in another file + // void MyFunc(int); // often used in header files + // struct MyStruct; // often used in header files + // typedef int NewInt; // a normal typedef statement + // class MyClass; // often used in header files + + // #include "basicDefinition.h" + // int MyInt; + // extern const int MyConst = 42; + // void MyFunc(int a) { cout << a << endl; } + // struct MyStruct { int Member1; int Member2; }; + // class MyClass { int MemberVar; }; + public void testBasicDefinition() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("basicDefinition.h", hcode); + file = importFile("testBasicDefinition.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int hoffset= hcode.indexOf("MyInt"); + int soffset = scode.indexOf("MyInt"); + IASTNode decl = testF3(file, soffset+2); + IASTNode def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ + assertEquals(((ASTNode)decl).getOffset(), hoffset); + assertEquals(((ASTNode)decl).getLength(), 5); + assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 5); + + hoffset= hcode.indexOf("MyConst"); + soffset = scode.indexOf("MyConst"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 7); + assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 7); + + hoffset= hcode.indexOf("MyFunc"); + soffset = scode.indexOf("MyFunc"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 6); + assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 6); + + hoffset= hcode.indexOf("MyStruct"); + soffset = scode.indexOf("MyStruct"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 8); + assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 8); + + hoffset= hcode.indexOf("MyClass"); + soffset = scode.indexOf("MyClass"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyClass"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 7); + assertEquals(((IASTName)def).toString(), "MyClass"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 7); + } + + // // the header + // namespace N { + // template < class T > class AAA { T _t; }; + // }; + + // #include "testBasicTemplateInstance.h" + // N::AAA a; + public void _testBasicTemplateInstance() throws Exception{ + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBasicTemplateInstance.h", hcode); + file = importFile("testBasicTemplateInstance.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + + int hoffset= hcode.indexOf("AAA"); + int soffset = scode.indexOf("AAA"); //$NON-NLS-1$ + IASTNode decl1 = testF3(file, soffset, 3); + assertTrue(decl1 instanceof IASTName); + assertEquals(((IASTName)decl1).toString(), "AAA"); //$NON-NLS-1$ + assertEquals(hoffset, decl1.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)decl1).getLength(), 3); + + IASTNode decl2 = testF3(file, soffset, 8); + assertEquals(((IASTName)decl2).toString(), "AAA"); //$NON-NLS-1$ + assertEquals(hoffset, decl2.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)decl2).getLength(), 3); + } + + // // the header + // class X { + // public: + // X(int); // openReferences fails to find the constructor in g() + // }; + + // #include "testBug86829A.h" + // X f(X); + // void g() + // { + // X b = f(X(2)); // openDeclarations on X(int) shall find constructor + // } + public void testBug86829A() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug86829A.h", hcode); + file = importFile("testBug86829A.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int offset = scode.indexOf("X(2)"); + int doffset= hcode.indexOf("X(int)"); + IASTNode decl = testF3(file, offset); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ + assertEquals(doffset, decl.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)decl).getLength(), 1); + } + + // // the header + // class X { + // public: + // operator int(); + // }; + // class Y { + // public: + // operator X(); + // }; + + // #include "testBug86829B.h" + // Y a; + // int c = X(a); // OK: a.operator X().operator int() + public void _testBug86829B() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug86829B.h", hcode); + file = importFile("testBug86829B.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + + int offset = scode.indexOf("X(a)"); + int doffset = hcode.indexOf("X()"); + IASTNode decl = testF3(file, offset); + assertTrue(decl instanceof IASTName); + assertEquals("X", decl.toString()); + assertEquals(doffset, decl.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)decl).getLength(), 1); + } + + // // the header + // extern int a; // declares + // extern const int c = 1; // defines + // struct S {int a; int b;}; // defines + // struct X { // defines + // int x; // defines nonstatic data member + // static int y; // declares static data member + // X(): x(0) { } // defines a constructor of + // }; + // enum E {up, down}; // defines + // namespace N {int d;} // defines + // namespace N1 = N; // defines + // int f(int); // declares + // extern X anotherX; // declares + + // #include "testCPPSpecDeclsDefs.h" + // int a; // defines + // int X::y = 1; // defines + // X anX; // defines + // extern const int c; // declares + // int f(int x) {return x+a;} // defines + // struct S; // declares + // typedef int Int; // declares + // using N::d; // declares + // S s; + // Int lhs= s.a+s.b+up+down+anX+0; + public void testCPPSpecDeclsDefs() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testCPPSpecDeclsDefs.h", hcode); + file = importFile("testCPPSpecDeclsDefs.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int offset0= hcode.indexOf("a;"); + int offset1= scode.indexOf("a;"); + IASTNode decl= testF3(hfile, offset0); + assertNode("a", offset1, decl); + decl= testF3(file, offset1); + assertNode("a", offset0, decl); + + offset0= hcode.indexOf("int c") + 4; + offset1= scode.indexOf("int c") + 4; + decl= testF3(hfile, offset0); + assertNode("c", offset1, decl); + decl= testF3(file, offset1); + assertNode("c", offset0, decl); + + offset0= hcode.indexOf("f(int"); + offset1= scode.indexOf("f(int"); + decl= testF3(hfile, offset0); + assertNode("f", offset1, decl); + decl= testF3(file, offset1); + assertNode("f", offset0, decl); + + offset0= scode.indexOf("x)"); + decl= testF3(file, offset0); + assertNode("x", offset0, decl); + + offset1= scode.indexOf("x+a"); + decl= testF3(file, offset1); + assertNode("x", offset0, decl); + + offset0= scode.indexOf("a;"); + offset1= scode.indexOf("a;}"); + decl= testF3(file, offset1); + assertNode("a", offset0, decl); + + offset0= hcode.indexOf("S"); + offset1= scode.indexOf("S;"); + int offset2= scode.indexOf("S", offset1); + decl= testF3(hfile, offset0); + assertNode("S", offset1, decl); + decl= testF3(file, offset1); + assertNode("S", offset0, decl); + decl= testF3(file, offset2); + assertNode("S", offset0, decl); + + offset0 = hcode.indexOf("a; int b;};"); + offset1 = scode.indexOf("a+s.b"); + decl= testF3(hfile, offset0); + assertNode("a", offset0, decl); + decl= testF3(file, offset1); + assertNode("a", offset0, decl); + + offset0= hcode.indexOf("b;};"); + offset1= scode.indexOf("s.b") + 2; + decl= testF3(hfile, offset0); + assertNode("b", offset0, decl); + decl= testF3(file, offset1); + assertNode("b", offset0, decl); + + offset0= hcode.indexOf("X"); + offset1= scode.indexOf("X"); + offset2= scode.indexOf("X", offset1+1); + decl= testF3(hfile, offset0); + assertNode("X", offset0, decl); + decl= testF3(file, offset1); + assertNode("X", offset0, decl); + decl= testF3(file, offset2); + assertNode("X", offset0, decl); + + offset0= hcode.indexOf("x;"); + offset1= hcode.indexOf("x", offset0+1); + decl= testF3(hfile, offset0); + assertNode("x", offset0, decl); + decl= testF3(hfile, offset1); + assertNode("x", offset0, decl); + + offset0= hcode.indexOf("y;"); + offset1= scode.indexOf("y"); + decl= testF3(hfile, offset0); + assertNode("y", offset1, decl); + decl= testF3(file, offset1); + assertNode("y", offset0, decl); + + offset0= hcode.indexOf("X()"); + decl = testF3(hfile, offset0); + assertNode("X", offset0, decl); + + offset0= hcode.indexOf("up"); + offset1= scode.indexOf("up"); + decl= testF3(hfile, offset0); + assertNode("up", offset0, decl); + decl= testF3(file, offset1); + assertNode("up", offset0, decl); + + offset0= hcode.indexOf("down"); + offset1= scode.indexOf("down"); + decl= testF3(hfile, offset0); + assertNode("down", offset0, decl); + decl= testF3(file, offset1); + assertNode("down", offset0, decl); + + offset0= hcode.indexOf("N"); + offset1= hcode.indexOf("N;", offset0+1); + offset2= scode.indexOf("N"); + decl= testF3(hfile, offset0); + assertNode("N", offset0, decl); + decl= testF3(hfile, offset1); + assertNode("N", offset0, decl); + decl= testF3(file, offset2); + assertNode("N", offset0, decl); + + offset0= hcode.indexOf("d;"); + offset1= scode.indexOf("d;"); + decl= testF3(hfile, offset0); + assertNode("d", offset0, decl); +// does not work, created separate testcase +// decl= testF3(file, offset1); +// assertNode("d", offset0, decl); + + offset0= hcode.indexOf("N1"); + decl= testF3(hfile, offset0); + assertNode("N1", offset0, decl); + + offset0= scode.indexOf("anX"); + offset1= scode.indexOf("anX", offset0+1); + decl= testF3(file, offset0); + assertNode("anX", offset0, decl); + decl= testF3(file, offset1); + assertNode("anX", offset0, decl); + + offset0= scode.indexOf("Int"); + offset1= scode.indexOf("Int", offset0+1); + decl= testF3(file, offset0); + assertNode("Int", offset0, decl); + decl= testF3(file, offset1); + assertNode("Int", offset0, decl); + } + + // // the header + // namespace N {int d;} // defines + + // #include "testBug168533.h" + // using N::d; // declares + // int a= d; + public void _testBug168533() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug168533.h", hcode); + file = importFile("testBug168533.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int offset0= hcode.indexOf("d;"); + int offset1= scode.indexOf("d;"); + int offset2= scode.indexOf("d", offset1); + IASTNode decl= testF3(hfile, offset0); + assertNode("d", offset0, decl); + decl= testF3(file, offset1); + assertNode("d", offset0, decl); + decl= testF3(file, offset2); + assertNode("d", offset0, decl); + } + + // class Overflow { + // public: + // Overflow(char,double,double); + // }; + + // #include "testBug95225.h" + // void f(double x) { + // throw Overflow('+',x,3.45e107); + // } + // int foo() { + // try { + // f(1.2); + // } + // catch(Overflow& oo) { + // // handle exceptions of type Overflow here + // } + // } + public void testBug95225() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug95225.h", hcode); + file = importFile("testBug95225.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0= hcode.indexOf("Overflow"); + offset1= scode.indexOf("rflow&"); + decl = testF3(file, offset1); + assertNode("Overflow", offset0, decl); + decl = testF3(hfile, offset0); + assertNode("Overflow", offset0, decl); + + offset0= hcode.indexOf("Overflow("); + offset1= scode.indexOf("rflow('+'"); + decl = testF3(file, offset1); + assertNode("Overflow", offset0, decl); + decl = testF3(hfile, offset0); + assertNode("Overflow", offset0, decl); + + offset0= scode.indexOf("x"); + offset1= scode.indexOf("x", offset0); + decl = testF3(file, offset0); + assertNode("x", offset0, decl); + decl = testF3(file, offset1); + assertNode("x", offset0, decl); + } + + // struct A { }; // implicitlydeclared A::operator= + // struct B : A { + // B& operator=(const B &); + // }; + + // #include "testBug95202.h" + // B& B::operator=(const B& s) { + // this->B::operator=(s); // wellformed + // return *this; + // } + public void testBug95202() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug95202.h", hcode); + file = importFile("testBug95202.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0= scode.indexOf("s)"); + offset1= scode.indexOf("s);", offset0+1); + decl = testF3(file, offset0); + assertNode("s", offset0, decl); + decl = testF3(file, offset1); + assertNode("s", offset0, decl); + } + + // extern int abc; + + // #include "testBug101287.h" + // int main(int argc, char **argv) { + // abc + // } + public void _testBug101287() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug101287.h", hcode); + file = importFile("testBug101287.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("abc"); + offset1 = scode.indexOf("abc"); + decl = testF3(hfile, offset0); + assertNode("abc", offset0, decl); + decl = testF3(file, offset1); + assertNode("abc", offset0, decl); + } + + // struct RTBindingEnd + // { + // int index; + // }; + + // #include "testBug102258.h" + // void f(RTBindingEnd & end) { + // } + public void testBug102258() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug102258.h", hcode); + file = importFile("testBug102258.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("RTBindingEnd"); + offset1 = scode.indexOf("RTBindingEnd"); + decl = testF3(hfile, offset0); + assertNode("RTBindingEnd", offset0, decl); + decl = testF3(file, offset1); + assertNode("RTBindingEnd", offset0, decl); + } + + // namespace foo { + // int g() { + // return 0; + // } + // } + + // #include "testBug103323.h" + // int f() { + // return foo::g(); + // } + public void testBug103323() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug103323.h", hcode); + file = importFile("testBug103323.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("g()"); + offset1 = scode.indexOf("g()"); + decl = testF3(hfile, offset0); + assertNode("g", offset0, decl); + decl = testF3(file, offset1); + assertNode("g", offset0, decl); + + testSimple_Ctrl_G_Selection(file, offset1, 1, 1); + } + + // typedef int TestTypeOne; + // typedef int TestTypeTwo; + + // #include "testBug78354.h" + // main() + // { + // TestTypeOne myFirstLink = 5; + // TestTypeTwo mySecondLink = 6; + // return 0; + // } + public void testBug78354() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug78354.h", hcode); + file = importFile("testBug78354.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("TestTypeOne"); + offset1 = scode.indexOf("TestTypeOne"); + decl = testF3(hfile, offset0); + assertNode("TestTypeOne", offset0, decl); + decl = testF3(file, offset1); + assertNode("TestTypeOne", offset0, decl); + + offset0 = hcode.indexOf("TestTypeTwo"); + offset1 = scode.indexOf("TestTypeTwo"); + decl = testF3(hfile, offset0); + assertNode("TestTypeTwo", offset0, decl); + decl = testF3(file, offset1); + assertNode("TestTypeTwo", offset0, decl); + } + + // int x; + + // #include "testBug103697.h" + // int foo() { + // return x; + // } + public void testBug103697() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFileWithLink("testBug103697.h", hcode); + file = importFileWithLink("testBug103697.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("x"); + offset1 = scode.indexOf("x"); + decl = testF3(hfile, offset0); + assertNode("x", offset0, decl); + decl = testF3(file, offset1); + assertNode("x", offset0, decl); + } + + // class __attribute__((visibility("default"))) FooClass + // { + // int foo(); + // }; + + // #include "testBug108202.h" + // int FooClass::foo() { + // return 0; + // } + public void testBug108202() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug108202.h", hcode); + file = importFile("testBug108202.cpp", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("foo"); + offset1 = scode.indexOf("foo"); + decl = testF3(hfile, offset0); + assertNode("foo", offset1, decl); + decl = testF3(file, offset1); + assertNode("foo", offset0, decl); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsCTagsIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsCTagsIndexer.java deleted file mode 100644 index b5e8343131f..00000000000 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsCTagsIndexer.java +++ /dev/null @@ -1,721 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation 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: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.ui.tests.text.selection; - -import java.io.File; - -import junit.framework.AssertionFailedError; -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.text.TextSelection; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.cdt.core.CCProjectNature; -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.IPDOMManager; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.core.testplugin.CProjectHelper; -import org.eclipse.cdt.make.core.MakeProjectNature; -import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature; -import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector; - -import org.eclipse.cdt.internal.core.dom.parser.ASTNode; - -/** - * Test Ctrl_F3/F3 with the CTags Indexer for a CPP project. - * - * @author dsteffle - */ -public class CPPSelectionTestsCTagsIndexer extends BaseSelectionTestsIndexer { - - private static final String INDEX_TAG = "3931153591.index"; //$NON-NLS-1$ - IFile file; - NullProgressMonitor monitor; - - static final String sourceIndexerID = "org.eclipse.cdt.core.ctagsindexer"; //$NON-NLS-1$ - - public CPPSelectionTestsCTagsIndexer(String name) { - super(name); - } - - protected void setUp() throws Exception { - super.setUp(); - - //Create temp project - project = createProject("CPPSelectionTestsCTagsIndexerProject"); //$NON-NLS-1$ - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - - File indexFile = new File(pathLoc.append(INDEX_TAG).toOSString()); - if (indexFile.exists()) - indexFile.delete(); - - if (project==null) fail("Unable to create project"); //$NON-NLS-1$ - IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName()); - CCProjectNature.addCCNature(project,monitor); - MakeProjectNature.addNature(project, new NullProgressMonitor()); - ScannerConfigNature.addScannerConfigNature(project); - PerProjectSICollector.calculateCompilerBuiltins(project); - - resetIndexer(sourceIndexerID); // set indexer - - //indexManager.reset(); - //Get the indexer used for the test project - } - - protected void tearDown() { - try { - super.tearDown(); - } catch (Exception e1) { - } - //Delete project - if (project.exists()) { - try { - System.gc(); - System.runFinalization(); - project.delete(true, monitor); - } catch (CoreException e) { - fail(getMessage(e.getStatus())); - } - } - } - - public static Test suite() { - TestSuite suite = new TestSuite(CPPSelectionTestsCTagsIndexer.class.getName()); - - suite.addTest(new CPPSelectionTestsCTagsIndexer("testBug78354")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testSimpleOpenDeclaration")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testSimpleOpenDeclaration2")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testBasicDefinition")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testCPPSpecDeclsDefs")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testNoDefinitions")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testOpenFileDiffDir")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testBug101287")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testBug103697")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsCTagsIndexer("testBug76043")); //$NON-NLS-1$ - - return suite; - } - - private IProject createProject(String projectName) throws CoreException { - ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ - return cPrj.getProject(); - } - - public void testSimpleOpenDeclaration() throws Exception { - String header = "char c; /* comment */ \n // comment \nint x;\n"; //$NON-NLS-1$ - importFile("test.h", header); //$NON-NLS-1$ - String code = "#include \"test.h\"\nint foo() { \n return x;\n}\n"; //$NON-NLS-1$ - IFile file = importFile("test.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("x;\n}\n"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - assertTrue(def instanceof IASTName); - assertEquals(((ASTNode)def).getOffset(), header.indexOf("x;\n")); - assertEquals(((ASTNode)def).getLength(), "x".length()); - IASTNode decl = testF3(file, offset); - if (decl instanceof IASTName); - assertEquals(((ASTNode)decl).getOffset(), header.indexOf("x;\n")); - assertEquals(((ASTNode)decl).getLength(), "x".length()); - } - - public void testSimpleOpenDeclaration2() throws Exception { - String header = "int x;\r\n // comment \r\nint y;\r\n /* comment */ \r\n int z;\r\n"; //$NON-NLS-1$ - importFile("testSimpleOpenDeclaration2.h", header); //$NON-NLS-1$ - String code = "#include \"testSimpleOpenDeclaration2.h\"\r\nint foo() { \r\n return y;\r\n}\r\n"; //$NON-NLS-1$ - IFile file = importFile("testSimpleOpenDeclaration2.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("y;"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - assertTrue(def instanceof IASTName); - assertEquals(((ASTNode)def).getOffset(), header.indexOf("y;")); - assertEquals(((ASTNode)def).getLength(), "y".length()); - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((ASTNode)decl).getOffset(), header.indexOf("y;")); - assertEquals(((ASTNode)decl).getLength(), "y".length()); - } - - // perform the tests from CSelectionTestsNoIndexer and make sure they work with an indexer as well: - public void testBasicDefinition() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$ - buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$ - buffer.append("int MyInt;\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst = 42;\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int a) { cout << a << endl; }\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct { int Member1; int Member2; };\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBasicDefinition.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 5); - assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 276); - assertEquals(((ASTNode)def).getLength(), 5); - - offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 69); - assertEquals(((ASTNode)decl).getLength(), 7); - assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 300); - assertEquals(((ASTNode)def).getLength(), 7); - - offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 115); - assertEquals(((ASTNode)decl).getLength(), 6); - assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 319); - assertEquals(((ASTNode)def).getLength(), 6); - - offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 171); - assertEquals(((ASTNode)decl).getLength(), 8); - assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 363); - assertEquals(((ASTNode)def).getLength(), 8); - } - - // taken from C++ spec 3.1-3: - /* - // all but one of the following are definitions: - int a; // defines a - extern const int c = 1; // defines c - int f(int x) { return x+a; } // defines f and defines x - struct S { int a; int b; }; // defines S, S::a, and S::b - struct X { // defines X - int x; // defines nonstatic data member x - }; - enum { up, down }; // defines up and down - struct X anX; // defines anX - // whereas these are just declarations: - extern int a; // declares a - extern const int c; // declares c - int f(int); // declares f - struct S; // declares S - typedef int Int; // declares Int - extern struct X anotherX; // declares anotherX - */ - public void testCPPSpecDeclsDefs() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int a; // defines a\n"); //$NON-NLS-1$ - buffer.append("extern const int c = 1; // defines c\n"); //$NON-NLS-1$ - buffer.append("int f(int x) { return x+a; } // defines f and defines x\n"); //$NON-NLS-1$ - buffer.append("struct S { int a; int b; }; // defines S, S::a, and S::b\n"); //$NON-NLS-1$ - buffer.append("struct X { // defines X\n"); //$NON-NLS-1$ - buffer.append("int x; // defines nonstatic data member x\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("enum { up, down }; // defines up and down\n"); //$NON-NLS-1$ - buffer.append("struct X anX; // defines anX\n"); //$NON-NLS-1$ - buffer.append("extern int a; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - buffer.append("extern struct X anotherX; // declares anotherX\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testCPPSpecDeclsDefs.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("a; // defines a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c = 1; // defines c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S { int a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 135); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 135); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X { // defines X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x; // defines nonstatic data member x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 198); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("up, down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 246); - assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 246); - assertEquals(((ASTNode)def).getLength(), 2); - - offset = code.indexOf("down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 250); - assertEquals(((ASTNode)decl).getLength(), 4); - assertEquals(((IASTName)def).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 250); - assertEquals(((ASTNode)def).getLength(), 4); - - offset = code.indexOf("X anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 290); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 290); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("a; // declares a"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 434); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 434); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("X anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anotherX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 471); - assertEquals(((ASTNode)decl).getLength(), 8); - } - - public void testNoDefinitions() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int a1; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c1; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f1(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S1; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testNoDefinitions.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("a1; // declares a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("c1; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 46); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("f1(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 68); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("S1; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96690 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 98); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 3); - } - - public void testOpenFileDiffDir() throws Exception { - importFolder("test"); //$NON-NLS-1$ - String header = "int x;\r\n // comment \r\n int y; /* comment */ \r\n int z; \r\n"; //$NON-NLS-1$ - importFile("test/test.h", header); //$NON-NLS-1$ - String code = "#include \"test\\test.h\"\r\nint foo() { \r\n return y;\r\n}\n"; //$NON-NLS-1$ - IFile file = importFile("test.cpp", code); - - int offset = code.indexOf("y;"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - assertTrue(def instanceof IASTName); - assertEquals(((ASTNode)def).getOffset(), header.indexOf("y;")); - assertEquals(((ASTNode)def).getLength(), "y".length()); - IASTNode decl = testF3(file, offset); - if (decl instanceof IASTName); - assertEquals(((ASTNode)decl).getOffset(), header.indexOf("y;")); - assertEquals(((ASTNode)decl).getLength(), "y".length()); - - } - - public void testBug101287() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int abc;\n"); //$NON-NLS-1$ - buffer.append("int main(int argc, char **argv) {\n"); //$NON-NLS-1$ - buffer.append("abc\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug101287.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("abc\n"); //$NON-NLS-1$ - - ISelection decl = testF3Selection(file, offset); - if (decl instanceof TextSelection) { - assertEquals(((TextSelection)decl).getOffset(), code.indexOf("int abc;\n")); - assertEquals(((TextSelection)decl).getLength(), "int abc;\n".length()); - } - } - - public void testBug78354() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("typedef int TestTypeOne;\n"); //$NON-NLS-1$ - buffer.append("typedef int TestTypeTwo;\n"); //$NON-NLS-1$ - buffer.append("main()\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("TestTypeOne myFirstLink = 5;\n"); //$NON-NLS-1$ - buffer.append("TestTypeTwo mySecondLink = 6;\n"); //$NON-NLS-1$ - buffer.append("return 0;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug78354.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("TestTypeOne myFirstLink = 5;"); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "TestTypeOne"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 12); - assertEquals(((ASTNode)decl).getLength(), 11); - } - - public void testBug103697() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug103697.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug76043() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - String code = buffer.toString(); - - IFile file = importFileInsideLinkedFolder("testBug76043.c", code, "folder"); //$NON-NLS-1$ //$NON-NLS-2$ - - assertFalse(file.isLinked()); // I'm not sure why the IResource#isLinked() returns false if it's contained within a linked folder - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - // REMINDER: see CSelectionTestsCTagsIndexer#suite() when appending new tests to this suite - -} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsDOMIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsDOMIndexer.java index f292a82e208..3b515d10cbb 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsDOMIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsDOMIndexer.java @@ -11,1152 +11,21 @@ *******************************************************************************/ package org.eclipse.cdt.ui.tests.text.selection; -import java.io.File; -import java.io.StringWriter; -import java.io.Writer; - -import junit.framework.AssertionFailedError; import junit.framework.Test; -import junit.framework.TestSuite; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.NullProgressMonitor; - -import org.eclipse.cdt.core.CCProjectNature; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.core.testplugin.CProjectHelper; -import org.eclipse.cdt.make.core.MakeProjectNature; -import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature; -import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector; - -import org.eclipse.cdt.internal.core.dom.parser.ASTNode; /** * Test Ctrl_F3/F3 with the DOM Indexer for a C++ project. * * @author dsteffle */ -public class CPPSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer { - private static final String INDEX_TAG = "1196338025.index"; //$NON-NLS-1$ - IFile file; - NullProgressMonitor monitor; - - static final String sourceIndexerID = IPDOMManager.ID_FULL_INDEXER; //$NON-NLS-1$ - +public class CPPSelectionTestsDOMIndexer extends CPPSelectionTestsAnyIndexer { public CPPSelectionTestsDOMIndexer(String name) { - super(name); + super(name, IPDOMManager.ID_FULL_INDEXER); } - protected void setUp() throws Exception { - super.setUp(); - - //Create temp project - project = createProject("CPPSelectionTestsDOMIndexerProject"); //$NON-NLS-1$ - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - - File indexFile = new File(pathLoc.append(INDEX_TAG).toOSString()); - if (indexFile.exists()) - indexFile.delete(); - - //Set the id of the source indexer extension point as a session property to allow - //index manager to instantiate it - - //Enable indexing on test project - - if (project==null) fail("Unable to create project"); //$NON-NLS-1$ - IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName()); - CCProjectNature.addCCNature(project,monitor); - MakeProjectNature.addNature(project, new NullProgressMonitor()); - ScannerConfigNature.addScannerConfigNature(project); - PerProjectSICollector.calculateCompilerBuiltins(project); - - resetIndexer(sourceIndexerID); // set indexer - - //indexManager.reset(); - //Get the indexer used for the test project - } - - protected void tearDown() { - try { - super.tearDown(); - } catch (Exception e1) { - } - //Delete project - if (project.exists()) { - try { - System.gc(); - System.runFinalization(); - project.delete(true, monitor); - } catch (CoreException e) { - fail(getMessage(e.getStatus())); - } - } - } - public static Test suite() { - TestSuite suite = new TestSuite(CPPSelectionTestsDOMIndexer.class.getName()); - - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug78354")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug93281")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBasicDefinition")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug95224")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBasicTemplateInstance")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug86829A")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug86829B")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testCPPSpecDeclsDefs")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug95225")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testNoDefinitions")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug95202")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug95229")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug101287")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug102258")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug103323")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug103697")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug76043")); //$NON-NLS-1$ - suite.addTest(new CPPSelectionTestsDOMIndexer("testBug108202")); //$NON-NLS-1$ - - return suite; + return suite(CPPSelectionTestsDOMIndexer.class); } - - private IProject createProject(String projectName) throws CoreException { - ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ - return cPrj.getProject(); - } - - public void testBug93281() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("class Point{ \n"); //$NON-NLS-1$ - buffer.append("public: \n"); //$NON-NLS-1$ - buffer.append("Point(): xCoord(0){} \n"); //$NON-NLS-1$ - buffer.append("Point& operator=(const Point &rhs){return *this;} // line A\n"); //$NON-NLS-1$ - buffer.append("void* operator new [ ] (unsigned int);\n"); //$NON-NLS-1$ - buffer.append("private: \n"); //$NON-NLS-1$ - buffer.append("int xCoord; \n"); //$NON-NLS-1$ - buffer.append("}; \n"); //$NON-NLS-1$ - buffer.append("static const Point zero;\n"); //$NON-NLS-1$ - buffer.append("int main(int argc, char **argv) { \n"); //$NON-NLS-1$ - buffer.append("Point *p2 = new Point(); \n"); //$NON-NLS-1$ - buffer.append("p2-> operator // /* operator */ // F3 in the middle \n"); //$NON-NLS-1$ - buffer.append("//of \"operator\" should work\n"); //$NON-NLS-1$ - buffer.append("// \\n"); //$NON-NLS-1$ - buffer.append("/* */\n"); //$NON-NLS-1$ - buffer.append("=(zero); // line B\n"); //$NON-NLS-1$ - buffer.append("p2->operator /* oh yeah */ new // F3 in the middle of \"operator\"\n"); //$NON-NLS-1$ - buffer.append("// should work\n"); //$NON-NLS-1$ - buffer.append("//\n"); //$NON-NLS-1$ - buffer.append("[ /* sweet */ ] //\n"); //$NON-NLS-1$ - buffer.append("(2);\n"); //$NON-NLS-1$ - buffer.append("return (0); \n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("test93281.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("p2->operator") + 6; //$NON-NLS-1$ - IASTNode node = testF3(file, offset); - - assertTrue(node instanceof IASTName); - assertEquals(((IASTName)node).toString(), "operator new[]"); //$NON-NLS-1$ - assertEquals(((ASTNode)node).getOffset(), 183); - assertEquals(((ASTNode)node).getLength(), 16); - - offset = code.indexOf("p2-> operator") + 11; //$NON-NLS-1$ - node = testF3(file, offset); - - assertTrue(node instanceof IASTName); - assertEquals(((IASTName)node).toString(), "operator ="); //$NON-NLS-1$ - assertEquals(((ASTNode)node).getOffset(), 121); - assertEquals(((ASTNode)node).getLength(), 9); - - } - - public void testBasicDefinition() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$ - buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$ - buffer.append("class MyClass; // often used in header files\n"); //$NON-NLS-1$ - buffer.append("int MyInt;\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst = 42;\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int a) { cout << a << endl; }\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct { int Member1; int Member2; };\n"); //$NON-NLS-1$ - buffer.append("class MyClass { int MemberVar; };\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBasicDefinition.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 5); - assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 330); - assertEquals(((ASTNode)def).getLength(), 5); - - offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 69); - assertEquals(((ASTNode)decl).getLength(), 7); - assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 354); - assertEquals(((ASTNode)def).getLength(), 7); - - offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 115); - assertEquals(((ASTNode)decl).getLength(), 6); - assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 373); - assertEquals(((ASTNode)def).getLength(), 6); - - offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 171); - assertEquals(((ASTNode)decl).getLength(), 8); - assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 417); - assertEquals(((ASTNode)def).getLength(), 8); - - offset = code.indexOf("MyClass {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyClass"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 278); - assertEquals(((ASTNode)decl).getLength(), 7); - assertEquals(((IASTName)def).toString(), "MyClass"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 463); - assertEquals(((ASTNode)def).getLength(), 7); - } - - public void testBug95224() throws Exception{ - Writer writer = new StringWriter(); - writer.write( "class A{\n"); //$NON-NLS-1$ - writer.write( "A();\n"); //$NON-NLS-1$ - writer.write( "A(const A&); // open definition on A finds class A\n"); //$NON-NLS-1$ - writer.write( "~A(); // open definition on A finds nothing\n"); //$NON-NLS-1$ - writer.write( "};\n"); //$NON-NLS-1$ - - String code = writer.toString(); - IFile file = importFile("testBug95224.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("A(); // open definition "); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "~A"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 65); - assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "A"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 6); - assertEquals(((ASTNode)def).getLength(), 1); - } - - public void testBasicTemplateInstance() throws Exception{ - Writer writer = new StringWriter(); - writer.write( "namespace N{ \n"); //$NON-NLS-1$ - writer.write( " template < class T > class AAA { T _t; };\n"); //$NON-NLS-1$ - writer.write( "}; \n"); //$NON-NLS-1$ - writer.write( "N::AAA a; \n"); //$NON-NLS-1$ - - String code = writer.toString(); - IFile file = importFile("testBasicTemplateInstance.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("AAA"); //$NON-NLS-1$ - IASTNode def1 = testCtrl_F3(file, offset, 3); - IASTNode decl1 = testF3(file, offset, 3); - assertTrue(def1 instanceof IASTName); - assertTrue(decl1 instanceof IASTName); - assertEquals(((IASTName)decl1).toString(), "AAA"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl1).getOffset(), 74); - assertEquals(((ASTNode)decl1).getLength(), 3); - assertEquals(((IASTName)def1).toString(), "AAA"); //$NON-NLS-1$ - assertEquals(((ASTNode)def1).getOffset(), 74); - assertEquals(((ASTNode)def1).getLength(), 3); - - IASTNode deCtrl_F3 = testCtrl_F3(file, offset, 8); - IASTNode decl2 = testF3(file, offset, 8); - assertTrue(deCtrl_F3 instanceof IASTName); - assertTrue(decl2 instanceof IASTName); - assertEquals(((IASTName)decl2).toString(), "AAA"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl2).getOffset(), 74); - assertEquals(((ASTNode)decl2).getLength(), 3); - assertEquals(((IASTName)deCtrl_F3).toString(), "AAA"); //$NON-NLS-1$ - assertEquals(((ASTNode)deCtrl_F3).getOffset(), 74); - assertEquals(((ASTNode)deCtrl_F3).getLength(), 3); - } - - public void testBug86829A() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("class X {\n"); //$NON-NLS-1$ - buffer.append("public:\n"); //$NON-NLS-1$ - buffer.append("X(int); // openReferences fails to find the constructor in g()\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("X f(X);\n"); //$NON-NLS-1$ - buffer.append("void g()\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("X b = f(X(2)); // openDeclarations on X(int) finds the class and not \n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug86829A.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("X(2)"); //$NON-NLS-1$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 18); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug86829B() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("class X {\n"); //$NON-NLS-1$ - buffer.append("public:\n"); //$NON-NLS-1$ - buffer.append("operator int();\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("class Y {\n"); //$NON-NLS-1$ - buffer.append("public:\n"); //$NON-NLS-1$ - buffer.append("operator X();\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("Y a;\n"); //$NON-NLS-1$ - buffer.append("int c = X(a); // OK: a.operator X().operator int()\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug86829B.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("X(a);"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 6); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 6); - assertEquals(((ASTNode)def).getLength(), 1); - } - - // taken from C++ spec 3.1-3: - /* - // all but one of the following are definitions: - int a; // defines a - extern const int c = 1; // defines c - int f(int x) { return x+a; } // defines f and defines x - struct S { int a; int b; }; // defines S, S::a, and S::b - struct X { // defines X - int x; // defines nonstatic data member x - static int y; // declares static data member y - X(): x(0) { } // defines a constructor of X - }; - int X::y = 1; // defines X::y - enum { up, down }; // defines up and down - namespace N { int d; } // defines N and N::d - namespace N1 = N; // defines N1 - X anX; // defines anX - // whereas these are just declarations: - extern int a; // declares a - extern const int c; // declares c - int f(int); // declares f - struct S; // declares S - typedef int Int; // declares Int - extern X anotherX; // declares anotherX - using N::d; // declares N::d - */ - public void testCPPSpecDeclsDefs() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int a; // defines a\n"); //$NON-NLS-1$ - buffer.append("extern const int c = 1; // defines c\n"); //$NON-NLS-1$ - buffer.append("int f(int x) { return x+a; } // defines f and defines x\n"); //$NON-NLS-1$ - buffer.append("struct S { int a; int b; }; // defines S, S::a, and S::b\n"); //$NON-NLS-1$ - buffer.append("struct X { // defines X\n"); //$NON-NLS-1$ - buffer.append("int x; // defines nonstatic data member x\n"); //$NON-NLS-1$ - buffer.append("static int y; // declares static data member y\n"); //$NON-NLS-1$ - buffer.append("X(): x(0) { } // defines a constructor of X\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("int X::y = 1; // defines X::y\n"); //$NON-NLS-1$ - buffer.append("enum { up, down }; // defines up and down\n"); //$NON-NLS-1$ - buffer.append("namespace N { int d; } // defines N and N::d\n"); //$NON-NLS-1$ - buffer.append("namespace N1 = N; // defines N1\n"); //$NON-NLS-1$ - buffer.append("X anX; // defines anX\n"); //$NON-NLS-1$ - buffer.append("extern int a; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - buffer.append("extern X anotherX; // declares anotherX\n"); //$NON-NLS-1$ - buffer.append("using N::d; // declares N::d\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testCPPSpecDeclsDefs.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("a; // defines a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c = 1; // defines c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S { int a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 135); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 135); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X { // defines X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x; // defines nonstatic data member x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 198); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("y; // declares static data member y"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "y"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 247); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "y"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 337); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X(): x(0) { } // defines a constructor of X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 283); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 283); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x(0) { } // defines a constructor of X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 198); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X::y = 1; // defines X::y"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("y = 1; // defines X::y"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "y"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 247); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "y"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 337); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("up, down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 367); - assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 367); - assertEquals(((ASTNode)def).getLength(), 2); - - offset = code.indexOf("down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 371); - assertEquals(((ASTNode)decl).getLength(), 4); - assertEquals(((IASTName)def).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 371); - assertEquals(((ASTNode)def).getLength(), 4); - - offset = code.indexOf("N { int d; } // defines N and N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 412); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 412); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("d; } // defines N and N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "d"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 420); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "d"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 420); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("N1 = N; // defines N1"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "N1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 457); - assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "N1"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 457); - assertEquals(((ASTNode)def).getLength(), 2); - - offset = code.indexOf("N; // defines N1"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 412); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 412); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 481); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 481); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("a; // declares a"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 625); - assertEquals(((ASTNode)decl).getLength(), 3); - - offset = code.indexOf("X anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anotherX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 655); - assertEquals(((ASTNode)decl).getLength(), 8); - - offset = code.indexOf("N::d; // declares N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 412); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 412); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("d; // declares N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "d"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 420); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "d"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 420); - assertEquals(((ASTNode)def).getLength(), 1); - } - - public void testBug95225() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("class Overflow {\n"); //$NON-NLS-1$ - buffer.append("public:\n"); //$NON-NLS-1$ - buffer.append("Overflow(char,double,double);\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("void f(double x)\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("throw Overflow('+',x,3.45e107);\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append("try {\n"); //$NON-NLS-1$ - buffer.append("f(1.2);\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - buffer.append("catch(Overflow& oo) {\n"); //$NON-NLS-1$ - buffer.append(" // handle exceptions of type Overflow here\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug95225.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("rflow('+',x,3.45e107);"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Overflow"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 25); - assertEquals(((ASTNode)decl).getLength(), 8); - assertEquals(((IASTName)def).toString(), "Overflow"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 6); - assertEquals(((ASTNode)def).getLength(), 8); - - offset = code.indexOf("x,3.45e107);"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 72); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 72); - assertEquals(((ASTNode)def).getLength(), 1); - } - - public void testNoDefinitions() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int a1; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c1; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f1(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S1; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testNoDefinitions.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("a1; // declares a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("c1; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96694 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 46); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("f1(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 68); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("S1; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 98); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - try { - assertNull(def); // TODO raised bug 96689 - assertTrue(false); // try/catch/assertTrue(false) added to alert the tester when this test passes! - } catch (AssertionFailedError e) {} - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 3); - } - - public void testBug95202() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("struct A { }; // implicitlydeclared A::operator=\n"); //$NON-NLS-1$ - buffer.append("struct B : A {\n"); //$NON-NLS-1$ - buffer.append("B& operator=(const B &);\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("B& B::operator=(const B& s) {\n"); //$NON-NLS-1$ - buffer.append("this->B::operator=(s); // wellformed\n"); //$NON-NLS-1$ - buffer.append("return *this;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug95202.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("s); // wellformed"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "s"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 117); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "s"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 117); - assertEquals(((ASTNode)def).getLength(), 1); - - } - - public void testBug95229() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("struct A {\n"); //$NON-NLS-1$ - buffer.append("operator short(); // F3 on operator causes an infinite loop\n"); //$NON-NLS-1$ - buffer.append("} a;\n"); //$NON-NLS-1$ - buffer.append("int f(int);\n"); //$NON-NLS-1$ - buffer.append("int f(float);\n"); //$NON-NLS-1$ - buffer.append("int i = f(a); // Calls f(int), because short -> int is\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug95229.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("rator short(); // F3"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "operator short"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 14); - } - - public void testBug101287() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int abc;\n"); //$NON-NLS-1$ - buffer.append("int main(int argc, char **argv) {\n"); //$NON-NLS-1$ - buffer.append("abc\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug101287.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("abc\n"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "abc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 3); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "abc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 3); - } - - public void testBug102258() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("struct RTBindingEnd\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("int index;\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - - importFile("testBug102258.h", buffer.toString()); //$NON-NLS-1$ - - buffer = new StringBuffer(); - buffer.append("#include \"testBug102258.h\"\n"); //$NON-NLS-1$ - buffer.append("void f(RTBindingEnd & end) {\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - String code = buffer.toString(); - IFile file = importFile("testBug102258.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("RTBindingEnd"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "RTBindingEnd"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 7); - assertEquals(((ASTNode)decl).getLength(), 12); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "RTBindingEnd"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 7); - assertEquals(((ASTNode)decl).getLength(), 12); - } - - public void testBug103323() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("namespace foo {\n"); //$NON-NLS-1$ - buffer.append("int g() {\n"); //$NON-NLS-1$ - buffer.append("return 0;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - buffer.append("int f() {\n"); //$NON-NLS-1$ - buffer.append("return foo::g();\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug103323.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("g();\n"); //$NON-NLS-1$ - int length = "g()".length(); //$NON-NLS-1$ - - testSimple_Ctrl_G_Selection(file, offset, length, 1); - - } - - public void testBug78354() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("typedef int TestTypeOne;\n"); //$NON-NLS-1$ - buffer.append("typedef int TestTypeTwo;\n"); //$NON-NLS-1$ - buffer.append("main()\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("TestTypeOne myFirstLink = 5;\n"); //$NON-NLS-1$ - buffer.append("TestTypeTwo mySecondLink = 6;\n"); //$NON-NLS-1$ - buffer.append("return 0;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug78354.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("TestTypeOne myFirstLink = 5;"); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "TestTypeOne"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 12); - assertEquals(((ASTNode)decl).getLength(), 11); - } - - public void testBug103697() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug103697.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug76043() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - String code = buffer.toString(); - - IFile file = importFileInsideLinkedFolder("testBug76043.c", code, "folder"); //$NON-NLS-1$ //$NON-NLS-2$ - - assertFalse(file.isLinked()); // I'm not sure why the IResource#isLinked() returns false if it's contained within a linked folder - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug108202() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("class __attribute__((visibility(\"default\"))) FooClass\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("int foo();\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("int FooClass::foo() {\n"); //$NON-NLS-1$ - buffer.append("return 0;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - - IFile file = importFile("testBug108202.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("foo();\n"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "foo"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 84); - assertEquals(((ASTNode)def).getLength(), 3); - } - - // REMINDER: see CPPSelectionTestsDomIndexer#suite() when appending new tests to this suite } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsFastIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsFastIndexer.java new file mode 100644 index 00000000000..b8c3ee7a790 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsFastIndexer.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.text.selection; + +import junit.framework.Test; + +import org.eclipse.cdt.core.dom.IPDOMManager; + +public class CPPSelectionTestsFastIndexer extends CPPSelectionTestsAnyIndexer { + public CPPSelectionTestsFastIndexer(String name) { + super(name, IPDOMManager.ID_FAST_INDEXER); + } + + public static Test suite() { + return suite(CPPSelectionTestsFastIndexer.class); + } +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java index 6f7896c2737..30c36d06b98 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java @@ -18,7 +18,6 @@ import java.io.StringWriter; import java.io.Writer; import junit.framework.Test; -import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.core.resources.IFile; @@ -51,12 +50,12 @@ 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.core.testplugin.FileManager; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.parser.ParserException; import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction; -import org.eclipse.cdt.internal.ui.search.actions.OpenDefinitionAction; /** * It is required to test the selection performance independent of the indexer to make sure that the DOM is functioning properly. @@ -65,7 +64,7 @@ import org.eclipse.cdt.internal.ui.search.actions.OpenDefinitionAction; * * @author dsteffle */ -public class CPPSelectionTestsNoIndexer extends TestCase { +public class CPPSelectionTestsNoIndexer extends BaseTestCase { private static final String INDEX_FILE_ID = "2946365241"; //$NON-NLS-1$ static NullProgressMonitor monitor; @@ -111,7 +110,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { } public static Test suite() { - TestSuite suite = new TestSuite( CPPSelectionTestsNoIndexer.class ); + TestSuite suite= suite(CPPSelectionTestsNoIndexer.class, "_"); suite.addTest( new CPPSelectionTestsNoIndexer("cleanupProject") ); //$NON-NLS-1$ return suite; } @@ -214,8 +213,6 @@ public class CPPSelectionTestsNoIndexer extends TestCase { } protected IASTNode testF3(IFile file, int offset, int length) throws ParserException, CoreException { - disableIndex(); - if (offset < 0) throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ @@ -252,57 +249,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { return null; } - - protected IASTNode testCtrl_F3(IFile file, int offset) throws ParserException, CoreException { - return testCtrl_F3(file, offset, 0); - } - - protected IASTNode testCtrl_F3(IFile file, int offset, int length) throws ParserException, CoreException { - disableIndex(); - - if (offset < 0) - throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ - - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IEditorPart part = null; - try { - part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$ - } catch (PartInitException e) { - assertFalse(true); - } - - if (part instanceof AbstractTextEditor) { - ((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,length)); - - final OpenDefinitionAction action = (OpenDefinitionAction) ((AbstractTextEditor)part).getAction("OpenDefinition"); //$NON-NLS-1$ - action.runSync(); - - // the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU - ISelection sel = ((AbstractTextEditor)part).getSelectionProvider().getSelection(); - - if (sel instanceof TextSelection) { - ITextSelection textSel = (ITextSelection)sel; - ITranslationUnit tu = (ITranslationUnit)CoreModel.getDefault().create(file); - IASTTranslationUnit ast = tu.getAST(); - IASTName[] names = tu.getLanguage().getSelectedNames(ast, textSel.getOffset(), textSel.getLength()); - - if (names == null || names.length == 0) - return null; - - return names[0]; - } - } - - return null; - } - - private void disableIndex() { - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - File indexFile = new File(pathLoc.append(INDEX_FILE_ID + ".index").toOSString()); //$NON-NLS-1$ - if (indexFile.exists()) - indexFile.delete(); - } - + public void testBug93281() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("class Point{ \n"); //$NON-NLS-1$ @@ -352,8 +299,8 @@ public class CPPSelectionTestsNoIndexer extends TestCase { public void testBasicDefinition() throws Exception { StringBuffer buffer = new StringBuffer(); - buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$ + buffer.append("extern int MyInt; // def is in another file \n"); //$NON-NLS-1$ + buffer.append("extern const int MyConst; // def is in another file \n"); //$NON-NLS-1$ buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$ buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$ buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$ @@ -367,9 +314,10 @@ public class CPPSelectionTestsNoIndexer extends TestCase { String code = buffer.toString(); IFile file = importFile("testBasicDefinition.cpp", code); //$NON-NLS-1$ - int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); + int offset = code.indexOf("MyInt") + 2; //$NON-NLS-1$ + int defOffset = code.indexOf("MyInt", offset) + 2; //$NON-NLS-1$ + IASTNode def = testF3(file, offset); + IASTNode decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ @@ -379,9 +327,10 @@ public class CPPSelectionTestsNoIndexer extends TestCase { assertEquals(((ASTNode)def).getOffset(), 330); assertEquals(((ASTNode)def).getLength(), 5); - offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyConst") + 2; + defOffset= code.indexOf("MyConst", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ @@ -391,9 +340,10 @@ public class CPPSelectionTestsNoIndexer extends TestCase { assertEquals(((ASTNode)def).getOffset(), 354); assertEquals(((ASTNode)def).getLength(), 7); - offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyFunc") + 2; + defOffset= code.indexOf("MyFunc", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ @@ -403,9 +353,10 @@ public class CPPSelectionTestsNoIndexer extends TestCase { assertEquals(((ASTNode)def).getOffset(), 373); assertEquals(((ASTNode)def).getLength(), 6); - offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyStruct") + 2; + defOffset= code.indexOf("MyStruct", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ @@ -415,9 +366,10 @@ public class CPPSelectionTestsNoIndexer extends TestCase { assertEquals(((ASTNode)def).getOffset(), 417); assertEquals(((ASTNode)def).getLength(), 8); - offset = code.indexOf("MyClass {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyClass") + 2; + defOffset= code.indexOf("MyClass", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyClass"); //$NON-NLS-1$ @@ -440,16 +392,11 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testBug95224.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("A(); // open definition "); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "~A"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 65); assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "A"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 6); - assertEquals(((ASTNode)def).getLength(), 1); } public void testBasicTemplateInstance() throws Exception{ @@ -463,27 +410,17 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testBasicTemplateInstance.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("AAA"); //$NON-NLS-1$ - IASTNode def1 = testCtrl_F3(file, offset, 3); IASTNode decl1 = testF3(file, offset, 3); - assertTrue(def1 instanceof IASTName); assertTrue(decl1 instanceof IASTName); assertEquals(((IASTName)decl1).toString(), "AAA"); //$NON-NLS-1$ assertEquals(((ASTNode)decl1).getOffset(), 74); assertEquals(((ASTNode)decl1).getLength(), 3); - assertEquals(((IASTName)def1).toString(), "AAA"); //$NON-NLS-1$ - assertEquals(((ASTNode)def1).getOffset(), 74); - assertEquals(((ASTNode)def1).getLength(), 3); - IASTNode deCtrl_F3 = testCtrl_F3(file, offset, 8); IASTNode decl2 = testF3(file, offset, 8); - assertTrue(deCtrl_F3 instanceof IASTName); assertTrue(decl2 instanceof IASTName); assertEquals(((IASTName)decl2).toString(), "AAA"); //$NON-NLS-1$ assertEquals(((ASTNode)decl2).getOffset(), 74); assertEquals(((ASTNode)decl2).getLength(), 3); - assertEquals(((IASTName)deCtrl_F3).toString(), "AAA"); //$NON-NLS-1$ - assertEquals(((ASTNode)deCtrl_F3).getOffset(), 74); - assertEquals(((ASTNode)deCtrl_F3).getLength(), 3); } public void testBug86829A() throws Exception { @@ -509,7 +446,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { assertEquals(((ASTNode)decl).getLength(), 1); } - public void testBug86829B() throws Exception { + public void _testBug86829B() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("class X {\n"); //$NON-NLS-1$ buffer.append("public:\n"); //$NON-NLS-1$ @@ -526,16 +463,11 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testBug86829B.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("X(a);"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 6); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 6); - assertEquals(((ASTNode)def).getLength(), 1); } // taken from C++ spec 3.1-3: @@ -582,7 +514,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { buffer.append("X anX; // defines anX\n"); //$NON-NLS-1$ buffer.append("extern int a; // declares a\n"); //$NON-NLS-1$ buffer.append("extern const int c; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f(int); // declares f\n"); //$NON-NLS-1$ + buffer.append("int f(int y); // declar f\n"); //$NON-NLS-1$ buffer.append("struct S; // declares S\n"); //$NON-NLS-1$ buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ buffer.append("extern X anotherX; // declares anotherX\n"); //$NON-NLS-1$ @@ -590,405 +522,241 @@ public class CPPSelectionTestsNoIndexer extends TestCase { String code = buffer.toString(); IFile file = importFile("testCPPSpecDeclsDefs.cpp", code); //$NON-NLS-1$ - int offset = code.indexOf("a; // defines a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); + assertEquals(((ASTNode)decl).getOffset(), 512); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("c = 1; // defines c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); + assertEquals(((ASTNode)decl).getOffset(), 546); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("f(int x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); + assertEquals(((ASTNode)decl).getOffset(), 567); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 67); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 67); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 67); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 4); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("S { int a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); + assertEquals(((ASTNode)decl).getOffset(), 596); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 128); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "b"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 135); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 135); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("X { // defines X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 177); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x; // defines nonstatic data member x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 198); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - + + IASTNode def; offset = code.indexOf("y; // declares static data member y"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "y"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 247); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "y"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 337); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("X(): x(0) { } // defines a constructor of X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 283); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 283); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x(0) { } // defines a constructor of X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 198); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("X::y = 1; // defines X::y"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 177); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("y = 1; // defines X::y"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "y"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 247); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "y"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 337); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("up, down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "up"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 367); assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 367); - assertEquals(((ASTNode)def).getLength(), 2); offset = code.indexOf("down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "down"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 371); assertEquals(((ASTNode)decl).getLength(), 4); - assertEquals(((IASTName)def).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 371); - assertEquals(((ASTNode)def).getLength(), 4); offset = code.indexOf("N { int d; } // defines N and N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "N"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 412); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 412); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("d; } // defines N and N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "d"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 420); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "d"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 420); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("N1 = N; // defines N1"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "N1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 457); assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "N1"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 457); - assertEquals(((ASTNode)def).getLength(), 2); offset = code.indexOf("N; // defines N1"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 412); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "N"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 412); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("X anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 177); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "anX"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 481); assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 481); - assertEquals(((ASTNode)def).getLength(), 3); offset = code.indexOf("a; // declares a"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 4); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("c; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 37); assertEquals(((ASTNode)def).getLength(), 1); - offset = code.indexOf("f(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset = code.indexOf("f(int y); // declar f"); //$NON-NLS-1$ + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 61); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("S; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 120); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 625); assertEquals(((ASTNode)decl).getLength(), 3); offset = code.indexOf("X anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 177); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "anotherX"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 655); assertEquals(((ASTNode)decl).getLength(), 8); offset = code.indexOf("N::d; // declares N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "N"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 412); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "N"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 412); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("d; // declares N::d"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "d"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 420); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "d"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 420); assertEquals(((ASTNode)def).getLength(), 1); @@ -1017,28 +785,18 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testBug95225.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("rflow('+',x,3.45e107);"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "Overflow"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 25); assertEquals(((ASTNode)decl).getLength(), 8); - assertEquals(((IASTName)def).toString(), "Overflow"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 6); - assertEquals(((ASTNode)def).getLength(), 8); offset = code.indexOf("x,3.45e107);"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 72); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 72); - assertEquals(((ASTNode)def).getLength(), 1); } public void testNoDefinitions() throws Exception { @@ -1053,45 +811,35 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testNoDefinitions.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("a1; // declares a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 11); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("c1; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "c1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 46); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("f1(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "f1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 68); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("S1; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "S1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 98); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 128); @@ -1113,17 +861,11 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testBug95202.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("s); // wellformed"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "s"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 117); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "s"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 117); - assertEquals(((ASTNode)def).getLength(), 1); - } public void testBug95229() throws Exception { @@ -1139,9 +881,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testBug95229.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("rator short(); // F3"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "operator short"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 11); @@ -1181,12 +921,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { IFile file = importFileWithLink("testBug103697.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 4); @@ -1206,12 +941,7 @@ public class CPPSelectionTestsNoIndexer extends TestCase { assertFalse(file.isLinked()); // I'm not sure why the IResource#isLinked() returns false if it's contained within a linked folder int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 4); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsAnyIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsAnyIndexer.java new file mode 100644 index 00000000000..bf6c590a007 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsAnyIndexer.java @@ -0,0 +1,377 @@ +/******************************************************************************* + * 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.text.selection; + +import java.io.IOException; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.dom.ast.IASTFileLocation; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.index.IIndex; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.util.TestSourceReader; +import org.eclipse.cdt.ui.testplugin.CTestPlugin; + +import org.eclipse.cdt.internal.core.dom.parser.ASTNode; + +public abstract class CSelectionTestsAnyIndexer extends BaseSelectionTestsIndexer { + + private static final int MAX_WAIT_TIME = 8000; + private IFile file; + private IFile hfile; + private NullProgressMonitor monitor; + + private String sourceIndexerID; + private IIndex index; + + public CSelectionTestsAnyIndexer(String name, String indexerID) { + super(name); + sourceIndexerID= indexerID; + } + + protected void setUp() throws Exception { + super.setUp(); + + //Create temp project + ICProject cproject = createProject("CSelectionTestsDOMIndexerProject"); //$NON-NLS-1$ + assertNotNull("Unable to create project", cproject); + + CCorePlugin.getPDOMManager().setIndexerId(cproject, sourceIndexerID); + project= cproject.getProject(); + index= CCorePlugin.getIndexManager().getIndex(cproject); + } + + protected void tearDown() { + try { + super.tearDown(); + } catch (Exception e1) { + } + //Delete project + if (project.exists()) { + try { + System.gc(); + System.runFinalization(); + project.delete(true, monitor); + } catch (CoreException e) { + fail(getMessage(e.getStatus())); + } + } + } + + private ICProject createProject(String projectName) throws CoreException { + ICProject cPrj = CProjectHelper.createCProject(projectName, "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ + return cPrj; + } + + protected StringBuffer[] getContents(int sections) throws IOException { + return TestSourceReader.getContentsForTest( + CTestPlugin.getDefault().getBundle(), "ui", CSelectionTestsAnyIndexer.class, getName(), sections); + } + + private void assertNode(String name, int offset, IASTNode node) { + assertNotNull(node); + assertEquals(name, node.toString()); + IASTFileLocation loc= node.getFileLocation(); + assertEquals(offset, loc.getNodeOffset()); + assertEquals(name.length(), loc.getNodeLength()); + } + + // // the header + // extern int MyInt; // MyInt is in another file + // extern const int MyConst; // MyConst is in another file + // void MyFunc(int); // often used in header files + // struct MyStruct; // often used in header files + // typedef int NewInt; // a normal typedef statement + + // #include "basicDefinition.h" + // int MyInt; + // extern const int MyConst = 42; + // void MyFunc(int a) { cout << a << endl; } + // struct MyStruct { int Member1; int Member2; }; + public void testBasicDefinition() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("basicDefinition.h", hcode); + file = importFile("testBasicDefinition.c", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int hoffset= hcode.indexOf("MyInt"); + int soffset = scode.indexOf("MyInt"); + IASTNode decl = testF3(file, soffset+2); + IASTNode def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ + assertEquals(((ASTNode)decl).getOffset(), hoffset); + assertEquals(((ASTNode)decl).getLength(), 5); + assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 5); + + hoffset= hcode.indexOf("MyConst"); + soffset = scode.indexOf("MyConst"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 7); + assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 7); + + hoffset= hcode.indexOf("MyFunc"); + soffset = scode.indexOf("MyFunc"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 6); + assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 6); + + hoffset= hcode.indexOf("MyStruct"); + soffset = scode.indexOf("MyStruct"); + decl = testF3(file, soffset+2); + def = testF3(hfile, hoffset+2); + assertTrue(def instanceof IASTName); + assertTrue(decl instanceof IASTName); + assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ + assertEquals(hoffset, ((ASTNode)decl).getOffset()); + assertEquals(((ASTNode)decl).getLength(), 8); + assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ + assertEquals(soffset, def.getFileLocation().getNodeOffset()); + assertEquals(((ASTNode)def).getLength(), 8); + } + + + // // the header + // extern int a; // declares + // extern const int c = 1; // defines + // struct S {int a; int b;}; // defines + // struct X { // defines + // int x; // defines nonstatic data member + // }; + // enum E {up, down}; // defines + // int f(int); // declares + // extern X anotherX; // declares + + // #include "testCPPSpecDeclsDefs.h" + // int a; // defines + // X anX; // defines + // extern const int c; // declares + // int f(int x) {return x+a;} // defines + // struct S; // declares + // typedef int Int; // declares + // S s; + // Int lhs= s.a+s.b+up+down+anX+0; + public void testCPPSpecDeclsDefs() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testCPPSpecDeclsDefs.h", hcode); + file = importFile("testCPPSpecDeclsDefs.c", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + + int offset0= hcode.indexOf("a;"); + int offset1= scode.indexOf("a;"); + IASTNode decl= testF3(hfile, offset0); + assertNode("a", offset1, decl); + decl= testF3(file, offset1); + assertNode("a", offset0, decl); + + offset0= hcode.indexOf("int c") + 4; + offset1= scode.indexOf("int c") + 4; + decl= testF3(hfile, offset0); + assertNode("c", offset1, decl); + decl= testF3(file, offset1); + assertNode("c", offset0, decl); + + offset0= hcode.indexOf("f(int"); + offset1= scode.indexOf("f(int"); + decl= testF3(hfile, offset0); + assertNode("f", offset1, decl); + decl= testF3(file, offset1); + assertNode("f", offset0, decl); + + offset0= scode.indexOf("x)"); + decl= testF3(file, offset0); + assertNode("x", offset0, decl); + + offset1= scode.indexOf("x+a"); + decl= testF3(file, offset1); + assertNode("x", offset0, decl); + + offset0= scode.indexOf("a;"); + offset1= scode.indexOf("a;}"); + decl= testF3(file, offset1); + assertNode("a", offset0, decl); + + offset0= hcode.indexOf("S"); + offset1= scode.indexOf("S;"); + int offset2= scode.indexOf("S", offset1); + decl= testF3(hfile, offset0); + assertNode("S", offset1, decl); + decl= testF3(file, offset1); + assertNode("S", offset0, decl); + decl= testF3(file, offset2); + assertNode("S", offset0, decl); + + offset0 = hcode.indexOf("a; int b;};"); + offset1 = scode.indexOf("a+s.b"); + decl= testF3(hfile, offset0); + assertNode("a", offset0, decl); + decl= testF3(file, offset1); + assertNode("a", offset0, decl); + + offset0= hcode.indexOf("b;};"); + offset1= scode.indexOf("s.b") + 2; + decl= testF3(hfile, offset0); + assertNode("b", offset0, decl); + decl= testF3(file, offset1); + assertNode("b", offset0, decl); + + offset0= hcode.indexOf("X"); + offset1= scode.indexOf("X"); + decl= testF3(hfile, offset0); + assertNode("X", offset0, decl); + decl= testF3(file, offset1); + assertNode("X", offset0, decl); + + offset0= hcode.indexOf("x;"); + decl= testF3(hfile, offset0); + assertNode("x", offset0, decl); + + offset0= hcode.indexOf("up"); + offset1= scode.indexOf("up"); + decl= testF3(hfile, offset0); + assertNode("up", offset0, decl); + decl= testF3(file, offset1); + assertNode("up", offset0, decl); + + offset0= hcode.indexOf("down"); + offset1= scode.indexOf("down"); + decl= testF3(hfile, offset0); + assertNode("down", offset0, decl); + decl= testF3(file, offset1); + assertNode("down", offset0, decl); + + offset0= scode.indexOf("anX"); + offset1= scode.indexOf("anX", offset0+1); + decl= testF3(file, offset0); + assertNode("anX", offset0, decl); + decl= testF3(file, offset1); + assertNode("anX", offset0, decl); + + offset0= scode.indexOf("Int"); + offset1= scode.indexOf("Int", offset0+1); + decl= testF3(file, offset0); + assertNode("Int", offset0, decl); + decl= testF3(file, offset1); + assertNode("Int", offset0, decl); + } + + // extern int abc; + + // #include "testBug101287.h" + // int main(int argc, char **argv) { + // abc + // } + public void _testBug101287() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug101287.h", hcode); + file = importFile("testBug101287.c", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("abc"); + offset1 = scode.indexOf("abc"); + decl = testF3(hfile, offset0); + assertNode("abc", offset0, decl); + decl = testF3(file, offset1); + assertNode("abc", offset0, decl); + } + + // int x; + + // #include "testBug103697.h" + // int foo() { + // return x; + // } + public void testBug103697() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFileWithLink("testBug103697.h", hcode); + file = importFileWithLink("testBug103697.c", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("x"); + offset1 = scode.indexOf("x"); + decl = testF3(hfile, offset0); + assertNode("x", offset0, decl); + decl = testF3(file, offset1); + assertNode("x", offset0, decl); + } + + // typedef int TestTypeOne; + // typedef int TestTypeTwo; + + // #include "testBug78354.h" + // main() + // { + // TestTypeOne myFirstLink = 5; + // TestTypeTwo mySecondLink = 6; + // return 0; + // } + public void testBug78354() throws Exception { + StringBuffer[] buffers= getContents(2); + String hcode= buffers[0].toString(); + String scode= buffers[1].toString(); + hfile = importFile("testBug78354.h", hcode); + file = importFile("testBug78354.c", scode); + TestSourceReader.waitUntilFileIsIndexed(index, file, MAX_WAIT_TIME); + IASTNode decl; + int offset0, offset1; + + offset0 = hcode.indexOf("TestTypeOne"); + offset1 = scode.indexOf("TestTypeOne"); + decl = testF3(hfile, offset0); + assertNode("TestTypeOne", offset0, decl); + decl = testF3(file, offset1); + assertNode("TestTypeOne", offset0, decl); + + offset0 = hcode.indexOf("TestTypeTwo"); + offset1 = scode.indexOf("TestTypeTwo"); + decl = testF3(hfile, offset0); + assertNode("TestTypeTwo", offset0, decl); + decl = testF3(file, offset1); + assertNode("TestTypeTwo", offset0, decl); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsCTagsIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsCTagsIndexer.java deleted file mode 100644 index 0a54cbcaae9..00000000000 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsCTagsIndexer.java +++ /dev/null @@ -1,717 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation 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: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.ui.tests.text.selection; - -import java.io.File; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.text.TextSelection; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.IPDOMManager; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.core.testplugin.CProjectHelper; -import org.eclipse.cdt.make.core.MakeProjectNature; -import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature; -import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector; - -import org.eclipse.cdt.internal.core.dom.parser.ASTNode; - -/** - * Test Ctrl_F3/F3 with the CTags Indexer for a C project. - * - * @author dsteffle - */ -public class CSelectionTestsCTagsIndexer extends BaseSelectionTestsIndexer { - - private static final String INDEX_TAG = "3931153591.index"; //$NON-NLS-1$ - IFile file; - NullProgressMonitor monitor; - - static final String sourceIndexerID = "org.eclipse.cdt.core.ctagsindexer"; //$NON-NLS-1$ - - public CSelectionTestsCTagsIndexer(String name) { - super(name); - } - - protected void setUp() throws Exception { - super.setUp(); - - //Create temp project - project = createProject("CSelectionTestsCTagsIndexerProject"); //$NON-NLS-1$ - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - - File indexFile = new File(pathLoc.append(INDEX_TAG).toOSString()); - if (indexFile.exists()) - indexFile.delete(); - - //Set the id of the source indexer extension point as a session property to allow - //index manager to instantiate it - - //Enable indexing on test project - - if (project==null) fail("Unable to create project"); //$NON-NLS-1$ - IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName()); - MakeProjectNature.addNature(project, new NullProgressMonitor()); - ScannerConfigNature.addScannerConfigNature(project); - PerProjectSICollector.calculateCompilerBuiltins(project); - - - resetIndexer(sourceIndexerID); // set indexer - - //indexManager.reset(); - //Get the indexer used for the test project - } - - protected void tearDown() { - try { - super.tearDown(); - } catch (Exception e1) { - } - //Delete project - if (project.exists()) { - try { - System.gc(); - System.runFinalization(); - project.delete(true, monitor); - } catch (CoreException e) { - fail(getMessage(e.getStatus())); - } - } - } - - public static Test suite() { - TestSuite suite = new TestSuite(CSelectionTestsCTagsIndexer.class.getName()); - - suite.addTest(new CSelectionTestsCTagsIndexer("testBug78354")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testSimpleOpenDeclaration")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testSimpleOpenDeclaration2")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testBasicDefinition")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testCPPSpecDeclsDefs")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testNoDefinitions")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testOpenFileDiffDir")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testBug101287")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testBug103697")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsCTagsIndexer("testBug76043")); //$NON-NLS-1$ - - return suite; - } - - private IProject createProject(String projectName) throws CoreException { - ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ - return cPrj.getProject(); - } - - public void testSimpleOpenDeclaration() throws Exception { - String header = "char c; /* comment */ \n // comment \nint x() { return 1; }\n"; //$NON-NLS-1$ - importFile("test.h", header); //$NON-NLS-1$ - String code = "int foo() { \n return x();\n}\n"; //$NON-NLS-1$ - IFile file = importFile("test.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("x();\n}\n"); //$NON-NLS-1$ - ISelection def = testCtrl_F3Selection(file, offset); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (def instanceof TextSelection) { - assertEquals(((TextSelection)def).getOffset(), header.indexOf("int x() { return 1; }\n")); - assertEquals(((TextSelection)def).getLength(), "int x() { return 1; }\n".length()); - } - ISelection decl = testF3Selection(file, offset); - if (decl instanceof TextSelection) { - assertEquals(((TextSelection)decl).getOffset(), header.indexOf("int x() { return 1; }\n")); - assertEquals(((TextSelection)decl).getLength(), "int x() { return 1; }\n".length()); - } - } - - public void testSimpleOpenDeclaration2() throws Exception { - String header = "int x;\r\n // comment \r\nint y() { return 1; }\r\n /* comment */ \r\n int z;\r\n"; //$NON-NLS-1$ - importFile("testSimpleOpenDeclaration2.h", header); //$NON-NLS-1$ - String code = "int foo() { \n return y();\n}\n"; //$NON-NLS-1$ - IFile file = importFile("testSimpleOpenDeclaration2.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("y();\n}\n"); //$NON-NLS-1$ - ISelection def = testCtrl_F3Selection(file, offset); - if (def instanceof TextSelection) { - assertEquals(((TextSelection)def).getOffset(), header.indexOf("int y() { return 1; }\r\n")); - assertEquals(((TextSelection)def).getLength(), "int y() { return 1; }\r\n".length()); - } - ISelection decl = testF3Selection(file, offset); - if (decl instanceof TextSelection) { - assertEquals(((TextSelection)decl).getOffset(), header.indexOf("int y() { return 1; }\r\n")); - assertEquals(((TextSelection)decl).getLength(), "int y() { return 1; }\r\n".length()); - } - } - - // perform the tests from CSelectionTestsNoIndexer and make sure they work with an indexer as well: - public void testBasicDefinition() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$ - buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$ - buffer.append("int MyInt;\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst = 42;\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int a) { cout << a << endl; }\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct { int Member1; int Member2; };\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBasicDefinition.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 5); - assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 276); - assertEquals(((ASTNode)def).getLength(), 5); - - offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 69); - assertEquals(((ASTNode)decl).getLength(), 7); - assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 300); - assertEquals(((ASTNode)def).getLength(), 7); - - offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 115); - assertEquals(((ASTNode)decl).getLength(), 6); - assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 319); - assertEquals(((ASTNode)def).getLength(), 6); - - offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 171); - assertEquals(((ASTNode)decl).getLength(), 8); - assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 363); - assertEquals(((ASTNode)def).getLength(), 8); - } - - // taken from C++ spec 3.1-3: - /* - // all but one of the following are definitions: - int a; // defines a - extern const int c = 1; // defines c - int f(int x) { return x+a; } // defines f and defines x - struct S { int a; int b; }; // defines S, S::a, and S::b - struct X { // defines X - int x; // defines nonstatic data member x - }; - enum { up, down }; // defines up and down - struct X anX; // defines anX - // whereas these are just declarations: - extern int a; // declares a - extern const int c; // declares c - int f(int); // declares f - struct S; // declares S - typedef int Int; // declares Int - extern struct X anotherX; // declares anotherX - */ - public void testCPPSpecDeclsDefs() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int a; // defines a\n"); //$NON-NLS-1$ - buffer.append("extern const int c = 1; // defines c\n"); //$NON-NLS-1$ - buffer.append("int f(int x) { return x+a; } // defines f and defines x\n"); //$NON-NLS-1$ - buffer.append("struct S { int a; int b; }; // defines S, S::a, and S::b\n"); //$NON-NLS-1$ - buffer.append("struct X { // defines X\n"); //$NON-NLS-1$ - buffer.append("int x; // defines nonstatic data member x\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("enum { up, down }; // defines up and down\n"); //$NON-NLS-1$ - buffer.append("struct X anX; // defines anX\n"); //$NON-NLS-1$ - buffer.append("extern int a; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - buffer.append("extern struct X anotherX; // declares anotherX\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testCPPSpecDeclsDefs.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("a; // defines a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c = 1; // defines c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S { int a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 135); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 135); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X { // defines X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x; // defines nonstatic data member x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 198); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("up, down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 246); - assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 246); - assertEquals(((ASTNode)def).getLength(), 2); - - offset = code.indexOf("down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 250); - assertEquals(((ASTNode)decl).getLength(), 4); - assertEquals(((IASTName)def).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 250); - assertEquals(((ASTNode)def).getLength(), 4); - - offset = code.indexOf("X anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 290); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 290); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("a; // declares a"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 434); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 434); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("X anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anotherX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 471); - assertEquals(((ASTNode)decl).getLength(), 8); - } - - public void testNoDefinitions() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int a1; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c1; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f1(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S1; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testNoDefinitions.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("a1; // declares a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertNull(def); - - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("c1; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 46); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("f1(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 68); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("S1; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 98); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 3); - } - - public void testOpenFileDiffDir() throws Exception { - importFolder("test"); //$NON-NLS-1$ - String header = "int x;\r\n // comment \r\n int y() { return 1; } /* comment */ \r\n int z; \r\n"; //$NON-NLS-1$ - importFile("test/test.h", header); //$NON-NLS-1$ - String code = "int foo() { \n return y();\n}\n"; //$NON-NLS-1$ - IFile file = importFile("test.c", code); - - int offset = code.indexOf("y();\n}\n"); //$NON-NLS-1$ - ISelection def = testCtrl_F3Selection(file, offset); - if (def instanceof TextSelection) { - assertEquals(((TextSelection)def).getOffset(), header.indexOf(" int y() { return 1; } /* comment */ \r\n")); //$NON-NLS-1$ - assertEquals(((TextSelection)def).getLength(), " int y() { return 1; } /* comment */ \r\n".length()); //$NON-NLS-1$ - } - ISelection decl = testF3Selection(file, offset); - if (decl instanceof TextSelection) { - assertEquals(((TextSelection)decl).getOffset(), header.indexOf(" int y() { return 1; } /* comment */ \r\n")); - assertEquals(((TextSelection)decl).getLength(), " int y() { return 1; } /* comment */ \r\n".length()); - } - } - - public void testBug101287() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int abc;\n"); //$NON-NLS-1$ - buffer.append("int main(int argc, char **argv) {\n"); //$NON-NLS-1$ - buffer.append("abc\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug101287.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("abc\n"); //$NON-NLS-1$ - - ISelection decl = testF3Selection(file, offset); - if (decl instanceof TextSelection) { - assertEquals(((TextSelection)decl).getOffset(), code.indexOf("int abc;\n")); - assertEquals(((TextSelection)decl).getLength(), "int abc;\n".length()); - } - } - - public void testBug78354() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("typedef int TestTypeOne;\n"); //$NON-NLS-1$ - buffer.append("typedef int TestTypeTwo;\n"); //$NON-NLS-1$ - buffer.append("main()\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("TestTypeOne myFirstLink = 5;\n"); //$NON-NLS-1$ - buffer.append("TestTypeTwo mySecondLink = 6;\n"); //$NON-NLS-1$ - buffer.append("return 0;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug78354.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("TestTypeOne myFirstLink = 5;"); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "TestTypeOne"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 12); - assertEquals(((ASTNode)decl).getLength(), 11); - } - - public void testBug103697() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug103697.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug76043() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - String code = buffer.toString(); - - IFile file = importFileInsideLinkedFolder("testBug76043.c", code, "folder"); //$NON-NLS-1$ //$NON-NLS-2$ - - assertFalse(file.isLinked()); // I'm not sure why the IResource#isLinked() returns false if it's contained within a linked folder - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - // REMINDER: see CSelectionTestsCTagsIndexer#suite() when appending new tests to this suite - -} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsDOMIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsDOMIndexer.java index ad78e8d8544..bbedef476d6 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsDOMIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsDOMIndexer.java @@ -11,703 +11,21 @@ *******************************************************************************/ package org.eclipse.cdt.ui.tests.text.selection; -import java.io.File; - import junit.framework.Test; -import junit.framework.TestSuite; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.NullProgressMonitor; - -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.core.testplugin.CProjectHelper; -import org.eclipse.cdt.make.core.MakeProjectNature; -import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature; -import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector; - -import org.eclipse.cdt.internal.core.dom.parser.ASTNode; /** * Test Ctrl_F3/F3 with the DOM Indexer for a C project. * * @author dsteffle */ -public class CSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer { - private static final String INDEX_TAG = "1161844423.index"; //$NON-NLS-1$ - IFile file; - NullProgressMonitor monitor; - - static final String sourceIndexerID = IPDOMManager.ID_FULL_INDEXER; - +public class CSelectionTestsDOMIndexer extends CSelectionTestsAnyIndexer { public CSelectionTestsDOMIndexer(String name) { - super(name); + super(name, IPDOMManager.ID_FULL_INDEXER); } - protected void setUp() throws Exception { - super.setUp(); - - //Create temp project - project = createProject("CSelectionTestsDOMIndexerProject"); //$NON-NLS-1$ - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - - File indexFile = new File(pathLoc.append(INDEX_TAG).toOSString()); - if (indexFile.exists()) - indexFile.delete(); - - //Set the id of the source indexer extension point as a session property to allow - //index manager to instantiate it - - //Enable indexing on test project - - if (project==null) fail("Unable to create project"); //$NON-NLS-1$ - IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName()); - MakeProjectNature.addNature(project, new NullProgressMonitor()); - ScannerConfigNature.addScannerConfigNature(project); - PerProjectSICollector.calculateCompilerBuiltins(project); - - resetIndexer(sourceIndexerID); // set indexer - - //indexManager.reset(); - //Get the indexer used for the test project - } - - protected void tearDown() { - try { - super.tearDown(); - } catch (Exception e1) { - } - //Delete project - if (project.exists()) { - try { - System.gc(); - System.runFinalization(); - project.delete(true, monitor); - } catch (CoreException e) { - fail(getMessage(e.getStatus())); - } - } - } - public static Test suite() { - TestSuite suite = new TestSuite(CSelectionTestsDOMIndexer.class.getName()); - - suite.addTest(new CSelectionTestsDOMIndexer("testBug78354")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testSimpleOpenDeclaration")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testSimpleOpenDeclaration2")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testBasicDefinition")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testCPPSpecDeclsDefs")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testNoDefinitions")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testOpenFileDiffDir")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testBug101287")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testBug103697")); //$NON-NLS-1$ - suite.addTest(new CSelectionTestsDOMIndexer("testBug76043")); //$NON-NLS-1$ - - return suite; + return suite(CSelectionTestsDOMIndexer.class); } - - private IProject createProject(String projectName) throws CoreException { - ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ - return cPrj.getProject(); - } - - public void testSimpleOpenDeclaration() throws Exception { - String header = "int x() { return 1; }"; //$NON-NLS-1$ - importFile("test.h", header); //$NON-NLS-1$ - String code = "int foo() { \n return x();\n}\n"; //$NON-NLS-1$ - IFile file = importFile("test.c", code); - - int offset = code.indexOf("x();\n}\n"); - IASTNode def = testCtrl_F3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((ASTNode)def).getOffset(), header.indexOf("x")); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getLength(), "x".length()); //$NON-NLS-1$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((ASTNode)decl).getOffset(), header.indexOf("x")); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getLength(), "x".length()); //$NON-NLS-1$ - - } - - public void testSimpleOpenDeclaration2() throws Exception { - String header = "int x;\r\n // comment \r\n int y() { return 1; } /* comment */ \r\n int z; \r\n"; //$NON-NLS-1$ - importFile("testSimpleOpenDeclaration2.h", header); //$NON-NLS-1$ - String code = "int foo() { \n return y();\n}\n"; //$NON-NLS-1$ - IFile file = importFile("testSimpleOpenDeclaration2.c", code); - - int offset = code.indexOf("y();\n}\n"); - IASTNode def = testCtrl_F3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((ASTNode)def).getOffset(), header.indexOf("y")); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getLength(), "y".length()); //$NON-NLS-1$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((ASTNode)decl).getOffset(), header.indexOf("y")); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getLength(), "y".length()); //$NON-NLS-1$ - - } - - // perform the tests from CSelectionTestsNoIndexer and make sure they work with an indexer as well: - public void testBasicDefinition() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$ - buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$ - buffer.append("int MyInt;\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst = 42;\n"); //$NON-NLS-1$ - buffer.append("void MyFunc(int a) { cout << a << endl; }\n"); //$NON-NLS-1$ - buffer.append("struct MyStruct { int Member1; int Member2; };\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBasicDefinition.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 5); - assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 276); - assertEquals(((ASTNode)def).getLength(), 5); - - offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 69); - assertEquals(((ASTNode)decl).getLength(), 7); - assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 300); - assertEquals(((ASTNode)def).getLength(), 7); - - offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 115); - assertEquals(((ASTNode)decl).getLength(), 6); - assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 319); - assertEquals(((ASTNode)def).getLength(), 6); - - offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 171); - assertEquals(((ASTNode)decl).getLength(), 8); - assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 363); - assertEquals(((ASTNode)def).getLength(), 8); - } - - // taken from C++ spec 3.1-3: - /* - // all but one of the following are definitions: - int a; // defines a - extern const int c = 1; // defines c - int f(int x) { return x+a; } // defines f and defines x - struct S { int a; int b; }; // defines S, S::a, and S::b - struct X { // defines X - int x; // defines nonstatic data member x - }; - enum { up, down }; // defines up and down - struct X anX; // defines anX - // whereas these are just declarations: - extern int a; // declares a - extern const int c; // declares c - int f(int); // declares f - struct S; // declares S - typedef int Int; // declares Int - extern struct X anotherX; // declares anotherX - */ - public void testCPPSpecDeclsDefs() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int a; // defines a\n"); //$NON-NLS-1$ - buffer.append("extern const int c = 1; // defines c\n"); //$NON-NLS-1$ - buffer.append("int f(int x) { return x+a; } // defines f and defines x\n"); //$NON-NLS-1$ - buffer.append("struct S { int a; int b; }; // defines S, S::a, and S::b\n"); //$NON-NLS-1$ - buffer.append("struct X { // defines X\n"); //$NON-NLS-1$ - buffer.append("int x; // defines nonstatic data member x\n"); //$NON-NLS-1$ - buffer.append("};\n"); //$NON-NLS-1$ - buffer.append("enum { up, down }; // defines up and down\n"); //$NON-NLS-1$ - buffer.append("struct X anX; // defines anX\n"); //$NON-NLS-1$ - buffer.append("extern int a; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - buffer.append("extern struct X anotherX; // declares anotherX\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testCPPSpecDeclsDefs.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("a; // defines a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c = 1; // defines c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 67); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S { int a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 135); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 135); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("X { // defines X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("x; // defines nonstatic data member x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 198); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("up, down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 246); - assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 246); - assertEquals(((ASTNode)def).getLength(), 2); - - offset = code.indexOf("down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 250); - assertEquals(((ASTNode)decl).getLength(), 4); - assertEquals(((IASTName)def).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 250); - assertEquals(((ASTNode)def).getLength(), 4); - - offset = code.indexOf("X anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 290); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 290); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("a; // declares a"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("c; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("f(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("S; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 434); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 434); - assertEquals(((ASTNode)def).getLength(), 3); - - offset = code.indexOf("X anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); - - offset = code.indexOf("anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "anotherX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 471); - assertEquals(((ASTNode)decl).getLength(), 8); - } - - public void testNoDefinitions() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("extern int a1; // declares a\n"); //$NON-NLS-1$ - buffer.append("extern const int c1; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f1(int); // declares f\n"); //$NON-NLS-1$ - buffer.append("struct S1; // declares S\n"); //$NON-NLS-1$ - buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testNoDefinitions.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("a1; // declares a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertNull(def); - - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 11); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("c1; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 46); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("f1(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 68); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("S1; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertNull(def); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S1"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 98); - assertEquals(((ASTNode)decl).getLength(), 2); - - offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 128); - assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 3); - } - - public void testOpenFileDiffDir() throws Exception { - importFolder("test"); //$NON-NLS-1$ - String header = "int x;\r\n // comment \r\n int y(){ return 1; } /* comment */ \r\n int z; \r\n"; //$NON-NLS-1$ - importFile("test/test.h", header); //$NON-NLS-1$ - String code = "int foo() { \n return y();\n}\n"; //$NON-NLS-1$ - IFile file = importFile("test.c", code); - - int offset = code.indexOf("y();\n}\n"); - IASTNode def = testCtrl_F3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((ASTNode)def).getOffset(), header.indexOf("y")); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getLength(), "y".length()); //$NON-NLS-1$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((ASTNode)decl).getOffset(), header.indexOf("y")); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getLength(), "y".length()); //$NON-NLS-1$ - - } - - public void testBug101287() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int abc;\n"); //$NON-NLS-1$ - buffer.append("int main(int argc, char **argv) {\n"); //$NON-NLS-1$ - buffer.append("abc\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFile("testBug101287.c", code); //$NON-NLS-1$ - - int offset = code.indexOf("abc\n"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "abc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 3); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "abc"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 3); - } - - public void testBug103697() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug103697.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug76043() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("int x;\n"); //$NON-NLS-1$ - buffer.append("int foo() {\n"); //$NON-NLS-1$ - buffer.append(" return x;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - String code = buffer.toString(); - - IFile file = importFileInsideLinkedFolder("testBug76043.c", code, "folder"); //$NON-NLS-1$ //$NON-NLS-2$ - - assertFalse(file.isLinked()); // I'm not sure why the IResource#isLinked() returns false if it's contained within a linked folder - - int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); - } - - public void testBug78354() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("typedef int TestTypeOne;\n"); //$NON-NLS-1$ - buffer.append("typedef int TestTypeTwo;\n"); //$NON-NLS-1$ - buffer.append("main()\n"); //$NON-NLS-1$ - buffer.append("{\n"); //$NON-NLS-1$ - buffer.append("TestTypeOne myFirstLink = 5;\n"); //$NON-NLS-1$ - buffer.append("TestTypeTwo mySecondLink = 6;\n"); //$NON-NLS-1$ - buffer.append("return 0;\n"); //$NON-NLS-1$ - buffer.append("}\n"); //$NON-NLS-1$ - - String code = buffer.toString(); - IFile file = importFileWithLink("testBug78354.cpp", code); //$NON-NLS-1$ - - int offset = code.indexOf("TestTypeOne myFirstLink = 5;"); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode decl = testF3(file, offset); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "TestTypeOne"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 12); - assertEquals(((ASTNode)decl).getLength(), 11); - } - - // REMINDER: see CSelectionTestsDomIndexer#suite() when appending new tests to this suite } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsFastIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsFastIndexer.java new file mode 100644 index 00000000000..0a8734a8d90 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsFastIndexer.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.text.selection; + +import junit.framework.Test; + +import org.eclipse.cdt.core.dom.IPDOMManager; + +public class CSelectionTestsFastIndexer extends CSelectionTestsAnyIndexer { + public CSelectionTestsFastIndexer(String name) { + super(name, IPDOMManager.ID_FAST_INDEXER); + } + + public static Test suite() { + return suite(CSelectionTestsFastIndexer.class); + } +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsNoIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsNoIndexer.java index 240924d0686..1e8d047e983 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsNoIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CSelectionTestsNoIndexer.java @@ -39,7 +39,6 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.AbstractTextEditor; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; @@ -54,7 +53,6 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.parser.ParserException; import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction; -import org.eclipse.cdt.internal.ui.search.actions.OpenDefinitionAction; /** * It is required to test the selection performance independent of the indexer to make sure that the DOM is functioning properly. @@ -80,13 +78,7 @@ public class CSelectionTestsNoIndexer extends TestCase { try { cPrj = CProjectHelper.createCProject("CSelectionTestsNoIndexerProject", "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ //$NON-NLS-2$ - project = cPrj.getProject(); - - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - File indexFile = new File(pathLoc.append(INDEX_FILE_ID + ".index").toOSString()); //$NON-NLS-1$ - if (indexFile.exists()) - indexFile.delete(); } catch ( CoreException e ) { /*boo*/ } @@ -244,30 +236,12 @@ public class CSelectionTestsNoIndexer extends TestCase { return folder; } - - // TODO Devin remove this commented method -// protected IFolder importFolderWithLink(String folderName) throws Exception { -// // create the folder that will be linked -// IFolder folder = project.getProject().getFolder(folderName); -// -// // create the linked folder -// IFolder linkedFolder = project.getProject().getFolder(folderName + "linked"); //$NON-NLS-1$ -// if (!linkedFolder.exists()) -// linkedFolder.create(true, true, null); -// -// // make the link -// folder.createLink(linkedFolder.getLocation(), IResource.ALLOW_MISSING_LOCAL, null); -// -// return folder; -// } protected IASTNode testF3(IFile file, int offset) throws ParserException, CoreException { return testF3(file, offset, 0); } protected IASTNode testF3(IFile file, int offset, int length) throws ParserException, CoreException { - disableIndex(); - if (offset < 0) throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ @@ -303,64 +277,15 @@ public class CSelectionTestsNoIndexer extends TestCase { return null; } - - protected IASTNode testCtrl_F3(IFile file, int offset) throws ParserException, CoreException { - return testCtrl_F3(file, offset, 0); - } - - protected IASTNode testCtrl_F3(IFile file, int offset, int length) throws ParserException, CoreException { - disableIndex(); - - if (offset < 0) - throw new ParserException("offset can not be less than 0 and was " + offset); //$NON-NLS-1$ - - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IEditorPart part = null; - try { - part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$ - } catch (PartInitException e) { - assertFalse(true); - } - - if (part instanceof AbstractTextEditor) { - ((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,length)); - - final OpenDefinitionAction action = (OpenDefinitionAction) ((AbstractTextEditor)part).getAction("OpenDefinition"); //$NON-NLS-1$ - action.runSync(); - - // the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU - ISelection sel = ((AbstractTextEditor)part).getSelectionProvider().getSelection(); - - if (sel instanceof TextSelection) { - ITextSelection textSel = (ITextSelection)sel; - ITranslationUnit tu = (ITranslationUnit)CoreModel.getDefault().create(file); - IASTTranslationUnit ast = tu.getAST(); - IASTName[] names = tu.getLanguage().getSelectedNames(ast, textSel.getOffset(), textSel.getLength()); - - if (names == null || names.length == 0) - return null; - - return names[0]; - } - } - - return null; - } - - private void disableIndex() { - IPath pathLoc = CCorePlugin.getDefault().getStateLocation(); - File indexFile = new File(pathLoc.append(INDEX_FILE_ID + ".index").toOSString()); //$NON-NLS-1$ - if (indexFile.exists()) - indexFile.delete(); - } - + public void testBasicDefinition() throws Exception { StringBuffer buffer = new StringBuffer(); - buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$ - buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$ + buffer.append("extern int MyInt; // def is in another file \n"); //$NON-NLS-1$ + buffer.append("extern const int MyConst; // def is in another file \n"); //$NON-NLS-1$ buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$ buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$ buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$ + buffer.append(" \n"); //$NON-NLS-1$ buffer.append("int MyInt;\n"); //$NON-NLS-1$ buffer.append("extern const int MyConst = 42;\n"); //$NON-NLS-1$ buffer.append("void MyFunc(int a) { cout << a << endl; }\n"); //$NON-NLS-1$ @@ -369,52 +294,56 @@ public class CSelectionTestsNoIndexer extends TestCase { String code = buffer.toString(); IFile file = importFile("testBasicDefinition.c", code); //$NON-NLS-1$ - int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); - IASTNode decl = testF3(file, offset); + int offset = code.indexOf("MyInt") + 2; //$NON-NLS-1$ + int defOffset = code.indexOf("MyInt", offset) + 2; //$NON-NLS-1$ + IASTNode def = testF3(file, offset); + IASTNode decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 11); assertEquals(((ASTNode)decl).getLength(), 5); assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 276); + assertEquals(((ASTNode)def).getOffset(), 330); assertEquals(((ASTNode)def).getLength(), 5); - offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyConst") + 2; + defOffset= code.indexOf("MyConst", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 69); assertEquals(((ASTNode)decl).getLength(), 7); assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 300); + assertEquals(((ASTNode)def).getOffset(), 354); assertEquals(((ASTNode)def).getLength(), 7); - offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyFunc") + 2; + defOffset= code.indexOf("MyFunc", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 115); assertEquals(((ASTNode)decl).getLength(), 6); assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 319); + assertEquals(((ASTNode)def).getOffset(), 373); assertEquals(((ASTNode)def).getLength(), 6); - offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset= code.indexOf("MyStruct") + 2; + defOffset= code.indexOf("MyStruct", offset) + 2; + def = testF3(file, offset); + decl = testF3(file, defOffset); assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 171); assertEquals(((ASTNode)decl).getLength(), 8); assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 363); + assertEquals(((ASTNode)def).getOffset(), 417); assertEquals(((ASTNode)def).getLength(), 8); } @@ -446,12 +375,17 @@ public class CSelectionTestsNoIndexer extends TestCase { buffer.append("struct S { int a; int b; }; // defines S, S::a, and S::b\n"); //$NON-NLS-1$ buffer.append("struct X { // defines X\n"); //$NON-NLS-1$ buffer.append("int x; // defines nonstatic data member x\n"); //$NON-NLS-1$ + buffer.append(" \n"); //$NON-NLS-1$ + buffer.append(" \n"); //$NON-NLS-1$ buffer.append("};\n"); //$NON-NLS-1$ + buffer.append(" "); //$NON-NLS-1$ buffer.append("enum { up, down }; // defines up and down\n"); //$NON-NLS-1$ + buffer.append(" \n"); //$NON-NLS-1$ + buffer.append(" \n"); //$NON-NLS-1$ buffer.append("struct X anX; // defines anX\n"); //$NON-NLS-1$ buffer.append("extern int a; // declares a\n"); //$NON-NLS-1$ buffer.append("extern const int c; // declares c\n"); //$NON-NLS-1$ - buffer.append("int f(int); // declares f\n"); //$NON-NLS-1$ + buffer.append("int f(int y); // declar f\n"); //$NON-NLS-1$ buffer.append("struct S; // declares S\n"); //$NON-NLS-1$ buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$ buffer.append("extern struct X anotherX; // declares anotherX\n"); //$NON-NLS-1$ @@ -460,278 +394,167 @@ public class CSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testCPPSpecDeclsDefs.c", code); //$NON-NLS-1$ int offset = code.indexOf("a; // defines a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); + assertEquals(((ASTNode)decl).getOffset(), 512); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("c = 1; // defines c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); + assertEquals(((ASTNode)decl).getOffset(), 546); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 37); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("f(int x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); + assertEquals(((ASTNode)decl).getOffset(), 567); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 61); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x) { return x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 67); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 67); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x+a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 67); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 67); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("a; } // defines f and defines x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 4); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("S { int a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); + assertEquals(((ASTNode)decl).getOffset(), 596); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 120); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("a; int b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 128); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("b; }; // defines S, S::a, and S::b"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "b"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 135); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "b"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 135); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("X { // defines X"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 177); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 177); - assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("x; // defines nonstatic data member x"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 198); assertEquals(((ASTNode)decl).getLength(), 1); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 198); - assertEquals(((ASTNode)def).getLength(), 1); - + offset = code.indexOf("up, down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 246); + assertEquals(((ASTNode)decl).getOffset(), 367); assertEquals(((ASTNode)decl).getLength(), 2); - assertEquals(((IASTName)def).toString(), "up"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 246); - assertEquals(((ASTNode)def).getLength(), 2); offset = code.indexOf("down }; // defines up and down"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 250); + assertEquals(((ASTNode)decl).getOffset(), 371); assertEquals(((ASTNode)decl).getLength(), 4); - assertEquals(((IASTName)def).toString(), "down"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 250); - assertEquals(((ASTNode)def).getLength(), 4); - + + IASTNode def; offset = code.indexOf("X anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 177); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("anX; // defines anX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 290); + assertEquals(((ASTNode)decl).getOffset(), 481); assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "anX"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 290); - assertEquals(((ASTNode)def).getLength(), 3); offset = code.indexOf("a; // declares a"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "a"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 4); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "a"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 4); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("c; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "c"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 37); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "c"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 37); assertEquals(((ASTNode)def).getLength(), 1); - offset = code.indexOf("f(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + offset = code.indexOf("f(int y); // declar f"); //$NON-NLS-1$ + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "f"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 61); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "f"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 61); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("S; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "S"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 120); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "S"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 120); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 434); + assertEquals(((ASTNode)decl).getOffset(), 625); assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 434); - assertEquals(((ASTNode)def).getLength(), 3); offset = code.indexOf("X anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); - decl = testF3(file, offset); + def = testF3(file, offset); assertTrue(def instanceof IASTName); - assertTrue(decl instanceof IASTName); - assertEquals(((IASTName)decl).toString(), "X"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 177); - assertEquals(((ASTNode)decl).getLength(), 1); assertEquals(((IASTName)def).toString(), "X"); //$NON-NLS-1$ assertEquals(((ASTNode)def).getOffset(), 177); assertEquals(((ASTNode)def).getLength(), 1); offset = code.indexOf("anotherX; // declares anotherX"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "anotherX"); //$NON-NLS-1$ - assertEquals(((ASTNode)decl).getOffset(), 471); + assertEquals(((ASTNode)decl).getOffset(), 662); assertEquals(((ASTNode)decl).getLength(), 8); - } + } public void testNoDefinitions() throws Exception { StringBuffer buffer = new StringBuffer(); @@ -745,52 +568,39 @@ public class CSelectionTestsNoIndexer extends TestCase { IFile file = importFile("testNoDefinitions.c", code); //$NON-NLS-1$ int offset = code.indexOf("a1; // declares a"); //$NON-NLS-1$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "a1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 11); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("c1; // declares c"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "c1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 46); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("f1(int); // declares f"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "f1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 68); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("S1; // declares S"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertNull(def); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "S1"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 98); assertEquals(((ASTNode)decl).getLength(), 2); offset = code.indexOf("Int; // declares Int"); //$NON-NLS-1$ - def = testCtrl_F3(file, offset); decl = testF3(file, offset); - assertTrue(def instanceof IASTName); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "Int"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 128); assertEquals(((ASTNode)decl).getLength(), 3); - assertEquals(((IASTName)def).toString(), "Int"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 128); - assertEquals(((ASTNode)def).getLength(), 3); } public void testBug103697() throws Exception { @@ -804,12 +614,7 @@ public class CSelectionTestsNoIndexer extends TestCase { IFile file = importFileWithLink("testBug103697.cpp", code); //$NON-NLS-1$ int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 4); @@ -829,12 +634,7 @@ public class CSelectionTestsNoIndexer extends TestCase { assertFalse(file.isLinked()); // I'm not sure why the IResource#isLinked() returns false if it's contained within a linked folder int offset = code.indexOf("return x;\n") + "return ".length(); //$NON-NLS-1$ //$NON-NLS-2$ - IASTNode def = testCtrl_F3(file, offset); IASTNode decl = testF3(file, offset); - assertTrue(def instanceof IASTName); - assertEquals(((IASTName)def).toString(), "x"); //$NON-NLS-1$ - assertEquals(((ASTNode)def).getOffset(), 4); - assertEquals(((ASTNode)def).getLength(), 1); assertTrue(decl instanceof IASTName); assertEquals(((IASTName)decl).toString(), "x"); //$NON-NLS-1$ assertEquals(((ASTNode)decl).getOffset(), 4); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/SelectionTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/SelectionTestSuite.java index def1a8bed2a..6d8076d3858 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/SelectionTestSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/SelectionTestSuite.java @@ -26,9 +26,9 @@ public class SelectionTestSuite extends TestSuite { addTest( ResolveBindingTests.suite() ); addTest( CPPSelectionTestsNoIndexer.suite() ); addTest( CSelectionTestsNoIndexer.suite() ); + addTest( CPPSelectionTestsFastIndexer.suite() ); + addTest( CSelectionTestsFastIndexer.suite() ); addTest( CPPSelectionTestsDOMIndexer.suite() ); addTest( CSelectionTestsDOMIndexer.suite() ); - addTest( CPPSelectionTestsCTagsIndexer.suite() ); - addTest( CSelectionTestsCTagsIndexer.suite() ); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTreeContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTreeContentProvider.java index f668c4c9b21..6275f169c5a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTreeContentProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTreeContentProvider.java @@ -7,6 +7,7 @@ * * Contributors: * QNX - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.ui.search; @@ -30,6 +31,7 @@ import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.PlatformUI; /** * @author Doug Schaefer @@ -121,7 +123,7 @@ public class PDOMSearchTreeContentProvider implements ITreeContentProvider, IPDO } public void elementsChanged(Object[] elements) { - if (elements != null) + if (elements != null) { for (int i = 0; i < elements.length; ++i) { PDOMSearchElement element = (PDOMSearchElement)elements[i]; if (result.getMatchCount(element) > 0) @@ -129,10 +131,14 @@ public class PDOMSearchTreeContentProvider implements ITreeContentProvider, IPDO else remove(element); } + } - Display.getDefault().asyncExec(new Runnable() { + Display d= PlatformUI.getWorkbench().getDisplay(); + d.asyncExec(new Runnable() { public void run() { - viewer.refresh(); + if (!viewer.getTree().isDisposed()) { + viewer.refresh(); + } } }); }