diff options
author | Andrew Niefer | 2004-09-17 14:10:28 +0000 |
---|---|---|
committer | Andrew Niefer | 2004-09-17 14:10:28 +0000 |
commit | 0558ecc1c989dec8f76b39a807a2a109f0c6fcb4 (patch) | |
tree | 53ee97b4ab4ecd39e6371f7e1c421703d84ef4a0 /core/org.eclipse.cdt.core.tests | |
parent | 09dd8e4f222676e81affe65a0675536f1b1ba1bc (diff) | |
download | org.eclipse.cdt-0558ecc1c989dec8f76b39a807a2a109f0c6fcb4.tar.gz org.eclipse.cdt-0558ecc1c989dec8f76b39a807a2a109f0c6fcb4.tar.xz org.eclipse.cdt-0558ecc1c989dec8f76b39a807a2a109f0c6fcb4.zip |
fixing macros 72506.
Also make interface IMacro, change content assist to use it.
Diffstat (limited to 'core/org.eclipse.cdt.core.tests')
3 files changed, 64 insertions, 2 deletions
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java index 426f3894630..31d62c17cf5 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java @@ -80,7 +80,7 @@ public class IIncludeTests extends IntegratedCModelTest { new String("resync_after_bad_parse_3"), new String("invalid.h"), // C-spec does not allow this, but that's OK for our present purposes new String("myInclude1.h"), -// new String("vers2.h") + new String("vers2.h") }; assertEquals( getIncludeNameList.length, theIncludes.length ); for( int i=0; i<getIncludeNameList.length; i++ ) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParsePluginTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParsePluginTest.java index 624d60ae559..4d683ec34a0 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParsePluginTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParsePluginTest.java @@ -399,4 +399,30 @@ public class CompleteParsePluginTest extends TestCase { assertEquals( i.next(), CallbackTracker.EXIT_COMPILATION_UNIT ); assertFalse( i.hasNext() ); } + + public void testBug72506() throws Exception{ + String vers = "int i;\n"; //$NON-NLS-1$ + String code = "#define INCFILE(x) vers ## x\n" + //$NON-NLS-1$ + "#define xstr(x) str(x)\n" + //$NON-NLS-1$ + "#define str(x) #x\n" + //$NON-NLS-1$ + "#include xstr(INCFILE(2).h)\n"; //$NON-NLS-1$ + + importFile( "vers2.h", vers ); //$NON-NLS-1$ + IFile cpp = importFile( "code.cpp", code ); //$NON-NLS-1$ + + List calls = new ArrayList(); + + parse( cpp, calls ); + + Iterator i = calls.iterator(); + assertEquals( i.next(), CallbackTracker.ENTER_COMPILATION_UNIT ); + assertEquals( i.next(), CallbackTracker.ACCEPT_MACRO ); + assertEquals( i.next(), CallbackTracker.ACCEPT_MACRO ); + assertEquals( i.next(), CallbackTracker.ACCEPT_MACRO ); + assertEquals( i.next(), CallbackTracker.ENTER_INCLUSION ); + assertEquals( i.next(), CallbackTracker.ACCEPT_VARIABLE ); + assertEquals( i.next(), CallbackTracker.EXIT_INCLUSION ); + assertEquals( i.next(), CallbackTracker.EXIT_COMPILATION_UNIT ); + assertFalse( i.hasNext() ); + } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java index b1aac8adbb9..791b9743721 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java @@ -1770,6 +1770,42 @@ public class Scanner2Test extends BaseScanner2Test validateEOF(); assertTrue( callback.problems.isEmpty() ); } - } + + public void testBug72506() throws Exception{ + StringWriter writer = new StringWriter(); + writer.write("#define INCFILE(x) ver ## x\n"); //$NON-NLS-1$ + writer.write("#define xstr(x) str(x)\n"); //$NON-NLS-1$ + writer.write("#define str(x) #x\n"); //$NON-NLS-1$ + writer.write("xstr(INCFILE(2).h)\n"); //$NON-NLS-1$ + + initializeScanner( writer.toString() ); + validateString("ver2.h"); //$NON-NLS-1$ + validateEOF(); + } + + public void testBug72506_2() throws Exception{ + StringWriter writer = new StringWriter(); + writer.write("#define str(x) #x\n"); //$NON-NLS-1$ + writer.write("#define A B\n"); //$NON-NLS-1$ + writer.write("#define B A\n"); //$NON-NLS-1$ + writer.write("str(B)\n"); //$NON-NLS-1$ + + initializeScanner( writer.toString() ); + validateString( "B" ); //$NON-NLS-1$ + validateEOF(); + } + + public void testMacroPastingError() throws Exception{ + StringWriter writer = new StringWriter(); + writer.write("#define m(expr) \\\r\n"); //$NON-NLS-1$ + writer.write(" foo( #expr ) \r\n"); //$NON-NLS-1$ + + Callback callback = new Callback(ParserMode.COMPLETE_PARSE); + initializeScanner( writer.toString(), ParserMode.COMPLETE_PARSE, callback ); + validateEOF(); + assertTrue( callback.problems.isEmpty() ); + } + + } |