1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 06:05:24 +02:00

Ported tests for navigation and reenabled them.

This commit is contained in:
Markus Schorn 2006-12-19 13:20:19 +00:00
parent 9adf9270de
commit e5576bf5b7
15 changed files with 1339 additions and 3936 deletions

View file

@ -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;

View file

@ -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());
}
}

View file

@ -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);
}
}

View file

@ -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<int> 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<int>"); //$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);
}
}

View file

@ -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
}

View file

@ -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);
}
}

View file

@ -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<int>"); //$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);

View file

@ -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);
}
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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() );
}
}

View file

@ -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();
}
}
});
}