Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2004-09-17 14:10:28 +0000
committerAndrew Niefer2004-09-17 14:10:28 +0000
commit0558ecc1c989dec8f76b39a807a2a109f0c6fcb4 (patch)
tree53ee97b4ab4ecd39e6371f7e1c421703d84ef4a0 /core/org.eclipse.cdt.core.tests
parent09dd8e4f222676e81affe65a0675536f1b1ba1bc (diff)
downloadorg.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')
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java2
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParsePluginTest.java26
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java38
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() );
+ }
+
+
}

Back to the top