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:
parent
9adf9270de
commit
e5576bf5b7
15 changed files with 1339 additions and 3936 deletions
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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() );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue