mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-03 21:53:39 +02:00
JUnit-tests and fixes for the image-locations.
This commit is contained in:
parent
74a6d68f29
commit
4f852d99c1
5 changed files with 135 additions and 1 deletions
|
@ -35,6 +35,7 @@ public class DOMParserTestSuite extends TestCase {
|
||||||
suite.addTest( CompleteParser2Tests.suite() );
|
suite.addTest( CompleteParser2Tests.suite() );
|
||||||
suite.addTest( DOMLocationTests.suite() );
|
suite.addTest( DOMLocationTests.suite() );
|
||||||
suite.addTestSuite( DOMLocationMacroTests.class );
|
suite.addTestSuite( DOMLocationMacroTests.class );
|
||||||
|
suite.addTest (ImageLocationTests.suite());
|
||||||
suite.addTest( DOMLocationInclusionTests.suite() );
|
suite.addTest( DOMLocationInclusionTests.suite() );
|
||||||
suite.addTestSuite( AST2KnRTests.class );
|
suite.addTestSuite( AST2KnRTests.class );
|
||||||
suite.addTestSuite( AST2UtilTests.class );
|
suite.addTestSuite( AST2UtilTests.class );
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 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 (Wind River Systems)
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.core.parser.tests.ast2;
|
||||||
|
|
||||||
|
import junit.framework.Test;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTImageLocation;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jcamelon
|
||||||
|
*/
|
||||||
|
public class ImageLocationTests extends AST2BaseTest {
|
||||||
|
|
||||||
|
private static final int CODE = IASTImageLocation.REGULAR_CODE;
|
||||||
|
private static final int MACRO = IASTImageLocation.MACRO_DEFINITION;
|
||||||
|
private static final int MACRO_ARG = IASTImageLocation.ARGUMENT_TO_MACRO_EXPANSION;
|
||||||
|
|
||||||
|
public static Test suite() {
|
||||||
|
return suite(ImageLocationTests.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImageLocationTests() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImageLocationTests(String name) {
|
||||||
|
setName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// int a;
|
||||||
|
public void testFileLocation() throws Exception {
|
||||||
|
String code= getContents(1)[0].toString();
|
||||||
|
IASTTranslationUnit tu = parse(code, ParserLanguage.CPP);
|
||||||
|
|
||||||
|
IASTDeclaration declaration = tu.getDeclarations()[0];
|
||||||
|
IASTName name= getName(declaration);
|
||||||
|
IASTImageLocation loc= name.getImageLocation();
|
||||||
|
assertLocation(CODE, code, "a", 0, loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
// #define M result1
|
||||||
|
// #define F() result2
|
||||||
|
// int M;
|
||||||
|
// int F();
|
||||||
|
public void testMacroLocation() throws Exception {
|
||||||
|
String code= getContents(1)[0].toString();
|
||||||
|
IASTTranslationUnit tu = parse(code, ParserLanguage.CPP);
|
||||||
|
|
||||||
|
IASTDeclaration declaration = tu.getDeclarations()[0];
|
||||||
|
IASTName name= getName(declaration);
|
||||||
|
IASTImageLocation loc= name.getImageLocation();
|
||||||
|
assertLocation(MACRO, code, "result1", 0, loc);
|
||||||
|
|
||||||
|
declaration = tu.getDeclarations()[1];
|
||||||
|
name= getName(declaration);
|
||||||
|
loc= name.getImageLocation();
|
||||||
|
assertLocation(MACRO, code, "result2", 0, loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
// #define M result
|
||||||
|
// #define F() M
|
||||||
|
// int F();
|
||||||
|
public void testIndirectMacroLocation() throws Exception {
|
||||||
|
String code= getContents(1)[0].toString();
|
||||||
|
IASTTranslationUnit tu = parse(code, ParserLanguage.CPP);
|
||||||
|
|
||||||
|
IASTDeclaration declaration = tu.getDeclarations()[0];
|
||||||
|
IASTName name= getName(declaration);
|
||||||
|
IASTImageLocation loc= name.getImageLocation();
|
||||||
|
assertLocation(MACRO, code, "result", 0, loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #define M result1
|
||||||
|
// #define F(x) x
|
||||||
|
// int F(result2);
|
||||||
|
// int F(M);
|
||||||
|
public void testMacroArgumentLocation() throws Exception {
|
||||||
|
String code= getContents(1)[0].toString();
|
||||||
|
IASTTranslationUnit tu = parse(code, ParserLanguage.CPP);
|
||||||
|
|
||||||
|
IASTDeclaration declaration = tu.getDeclarations()[0];
|
||||||
|
IASTName name= getName(declaration);
|
||||||
|
IASTImageLocation loc= name.getImageLocation();
|
||||||
|
assertLocation(MACRO_ARG, code, "result2", 0, loc);
|
||||||
|
|
||||||
|
declaration = tu.getDeclarations()[1];
|
||||||
|
name= getName(declaration);
|
||||||
|
loc= name.getImageLocation();
|
||||||
|
assertLocation(MACRO, code, "result1", 0, loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertLocation(int kind, String code, String name, int extra, IASTImageLocation loc) {
|
||||||
|
assertNotNull(loc);
|
||||||
|
assertEquals(kind, loc.getLocationKind());
|
||||||
|
assertEquals(code.indexOf(name), loc.getNodeOffset());
|
||||||
|
assertEquals(name.length()-extra, loc.getNodeLength());
|
||||||
|
}
|
||||||
|
|
||||||
|
private IASTName getName(IASTNode node) {
|
||||||
|
final IASTName[] result= {null};
|
||||||
|
node.accept(new ASTVisitor() {
|
||||||
|
{
|
||||||
|
shouldVisitNames= true;
|
||||||
|
}
|
||||||
|
public int visit(IASTName name) {
|
||||||
|
result[0]= name;
|
||||||
|
return PROCESS_ABORT;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result[0];
|
||||||
|
}
|
||||||
|
}
|
|
@ -245,7 +245,7 @@ public class MacroExpander {
|
||||||
private ImageLocationInfo createImageLocationInfo(Token t) {
|
private ImageLocationInfo createImageLocationInfo(Token t) {
|
||||||
final Object s= t.fSource;
|
final Object s= t.fSource;
|
||||||
if (s instanceof ObjectStyleMacro) {
|
if (s instanceof ObjectStyleMacro) {
|
||||||
return new MacroImageLocationInfo((ObjectStyleMacro) s, fEndOffset, fEndOffset);
|
return new MacroImageLocationInfo((ObjectStyleMacro) s, t.getOffset(), t.getEndOffset());
|
||||||
}
|
}
|
||||||
else if (s instanceof CPreprocessor) {
|
else if (s instanceof CPreprocessor) {
|
||||||
int sequenceNumber= fLocationMap.getSequenceNumberForOffset(t.getOffset());
|
int sequenceNumber= fLocationMap.getSequenceNumberForOffset(t.getOffset());
|
||||||
|
|
|
@ -136,8 +136,10 @@ class ObjectStyleMacro extends PreprocessorMacro {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSource(Token t) {
|
private void setSource(Token t) {
|
||||||
|
final int shift= -fExpansionOffset;
|
||||||
while (t != null) {
|
while (t != null) {
|
||||||
t.fSource= this;
|
t.fSource= this;
|
||||||
|
t.shiftOffset(shift);
|
||||||
t= (Token) t.getNext();
|
t= (Token) t.getNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,11 @@ public class Token implements IToken, Cloneable {
|
||||||
fEndOffset= endOffset;
|
fEndOffset= endOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void shiftOffset(int shift) {
|
||||||
|
fOffset+= shift;
|
||||||
|
fEndOffset+= shift;
|
||||||
|
}
|
||||||
|
|
||||||
public char[] getCharImage() {
|
public char[] getCharImage() {
|
||||||
return TokenUtil.getImage(getType());
|
return TokenUtil.getImage(getType());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue