diff --git a/core/org.eclipse.cdt.core.tests/.project b/core/org.eclipse.cdt.core.tests/.project
index a11a02c7c86..7a9fcbfb69c 100644
--- a/core/org.eclipse.cdt.core.tests/.project
+++ b/core/org.eclipse.cdt.core.tests/.project
@@ -36,5 +36,7 @@
org.eclipse.jdt.core.javanature
org.eclipse.pde.PluginNature
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.core.ccnature
diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog
index 0c2ba0c267b..397512048fc 100644
--- a/core/org.eclipse.cdt.core.tests/ChangeLog
+++ b/core/org.eclipse.cdt.core.tests/ChangeLog
@@ -1,6 +1,14 @@
2003-06-17 Brent Nicolle
Added Interface tests of IStructure.java.
+2003-06-17 Victor Mozgin
+ Added DeclaratorsTests.java (invocation in AllCoreTests).
+ Added DeclaratorsTests.cpp to org.eclipse.cdt.core.model.tests.resources.
+
+2003-06-16 Victor Mozgin
+ Added testOldKRFunctionDeclarations() to DOMTests.
+ Added testKRFunctionDeclarations() to TranslationUnitTests.
+
2003-06-16 Vladimir Hirsl
Added /build, /parser, /failures and /suite directories to the library.
Copied resources from /model/org.eclipse.cdt.core.model.tests.resources
@@ -8,10 +16,6 @@
Added class AISResultPrinter to format test results.
Class AutomatedIntegrationSuite now implements IPlatformRunnable.
-2003-06-17 Victor Mozgin
- Added DeclaratorsTests.java (invocation in AllCoreTests).
- Added DeclaratorsTests.cpp to org.eclipse.cdt.core.model.tests.resources.
-
2003-06-14 Victor Mozgin
Moved testBugSingleton192() from LokiFailures to DOMTests.
Added testPointersToMembers() and testPointersToMemberFunctions() to DOMTests.
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
index 6d536c6355c..90379db43a6 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
@@ -14,12 +14,12 @@ import junit.framework.TestSuite;
* AllTests.java
* This is the main entry point for running this suite of JUnit tests
* for all tests within the package "org.eclipse.cdt.core.model"
- *
+ *
* @author Judy N. Green
* @since Jul 19, 2002
*/
public class AllCoreTests {
-
+
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
@@ -27,7 +27,7 @@ public class AllCoreTests {
public static Test suite() {
TestSuite suite = new TestSuite(AllCoreTests.class.getName());
- // Just add more test cases here as you create them for
+ // Just add more test cases here as you create them for
// each class being tested
suite.addTest(AllLanguageInterfaceTests.suite());
suite.addTest(CModelTests.suite());
@@ -35,9 +35,10 @@ public class AllCoreTests {
suite.addTest(FlagTests.suite());
suite.addTest(ArchiveTests.suite());
suite.addTest(TranslationUnitTests.suite());
-
+ suite.addTest(DeclaratorsTests.suite());
+
return suite;
-
+
}
} // End of AllCoreTests.java
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java
index e7e5274bdf3..23684e8e0ba 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java
@@ -28,6 +28,7 @@ public class AllLanguageInterfaceTests {
suite.addTest(IIncludeTests.suite());
suite.addTest(IMacroTests.suite());
suite.addTest(IStructureTests.suite());
+ suite.addTest(ITemplateTests.suite());
return suite;
}
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java
index c9e69e96092..32f54eb9ff8 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java
@@ -304,6 +304,12 @@ public class CModelElementsTests extends TestCase {
assertEquals(var3.getElementName(), new String("vuShort"));
assertEquals(var3.getTypeName(), new String("unsigned short "));
checkLineNumbers((CElement)var3, 75, 75);
+
+ // MyPackage ---> function pointer: orig_malloc_hook
+ IVariable vDecl2 = (IVariable) nsVars.get(3);
+ assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook"));
+ assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)"));
+ checkLineNumbers((CElement)vDecl2, 81, 81);
}
private void checkVariableDeclarations(IParent namespace){
@@ -313,12 +319,6 @@ public class CModelElementsTests extends TestCase {
assertEquals(vDecl1.getElementName(), new String("evar"));
assertEquals(vDecl1.getTypeName(), new String("int"));
checkLineNumbers((CElement)vDecl1, 79, 79);
-
-// // MyPackage ---> function pointer: orig_malloc_hook
-// IVariableDeclaration vDecl2 = (IVariableDeclaration) nsVarDecls.get(1);
-// assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook"));
-// assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)"));
-// checkLineNumbers((CElement)vDecl2, 81, 81);
}
private void checkFunctions(IParent namespace){
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
new file mode 100644
index 00000000000..a7c7082d634
--- /dev/null
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
@@ -0,0 +1,212 @@
+/*
+ * Created on Jun 9, 2003
+ * by bnicolle
+ */
+package org.eclipse.cdt.core.model.tests;
+
+import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.IFunction;
+import org.eclipse.cdt.core.model.IFunctionDeclaration;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.core.model.ITypeDef;
+import org.eclipse.cdt.core.model.IVariable;
+
+
+import junit.framework.*;
+
+
+/**
+ * @author bnicolle
+ *
+ */
+public class DeclaratorsTests extends IntegratedCModelTest {
+ /**
+ * @param name
+ */
+ public DeclaratorsTests(String name) {
+ super(name);
+ }
+
+ /**
+ * @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
+ */
+ public String getSourcefileSubdir() {
+ return "resources/cmodel/";
+ }
+
+ /**
+ * @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
+ */
+ public String getSourcefileResource() {
+ return "DeclaratorsTests.cpp";
+ }
+
+ /**
+ * @returns a test suite named after this class
+ * containing all its public members named "test*"
+ */
+ public static Test suite() {
+ TestSuite suite= new TestSuite(DeclaratorsTests.class);
+ return suite;
+ }
+
+
+ public void testDeclarators_0001() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0001");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_FUNCTION_DECLARATION);
+ IFunctionDeclaration decl = (IFunctionDeclaration)element;
+ assertEquals(decl.getSignature(), "decl_0001(char)");
+ assertEquals(decl.getReturnType(), "void");
+ }
+
+ public void testDeclarators_0002() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0002");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_FUNCTION_DECLARATION);
+ IFunctionDeclaration decl = (IFunctionDeclaration)element;
+ assertEquals(decl.getSignature(), "decl_0002(char)");
+ assertEquals(decl.getReturnType(), "void");
+ }
+
+ public void testDeclarators_0003() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0003");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_FUNCTION_DECLARATION);
+ IFunctionDeclaration decl = (IFunctionDeclaration)element;
+ assertEquals(decl.getSignature(), "decl_0003(char)");
+ assertEquals(decl.getReturnType(), "void");
+ }
+
+ public void testDeclarators_0004() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0004");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_FUNCTION_DECLARATION);
+ IFunctionDeclaration decl = (IFunctionDeclaration)element;
+ assertEquals(decl.getSignature(), "decl_0004(char)");
+ assertEquals(decl.getReturnType(), "void*");
+ }
+
+ public void testDeclarators_0005() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0005");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_VARIABLE);
+ IVariable decl = (IVariable)element;
+ assertEquals(decl.getTypeName(), "void(*)(char)");
+ }
+
+ public void testDeclarators_0006() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0006");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_VARIABLE);
+ IVariable decl = (IVariable)element;
+ assertEquals(decl.getTypeName(), "void(*)(char)");
+ }
+
+ public void testDeclarators_0007() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0007");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_VARIABLE);
+ IVariable decl = (IVariable)element;
+ assertEquals(decl.getTypeName(), "void(*)(char)");
+ }
+
+ public void testDeclarators_0011() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0011");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void()(char)");
+ }
+
+ public void testDeclarators_0012() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0012");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void()(char)");
+ }
+
+ public void testDeclarators_0013() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0013");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void()(char)");
+ }
+
+ public void testDeclarators_0014() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0014");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void*()(char)");
+ }
+
+ public void testDeclarators_0015() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0015");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void(*)(char)");
+ }
+
+ public void testDeclarators_0016() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0016");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void(*)(char)");
+ }
+
+ public void testDeclarators_0017() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0017");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void(*)(char)");
+ }
+
+ public void testDeclarators_0023() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0023");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_FUNCTION);
+ IFunction decl = (IFunction)element;
+ assertEquals(decl.getSignature(), "decl_0023(int)");
+ assertEquals(decl.getReturnType(), "void(*(*))(char)");
+ }
+
+ public void testDeclarators_0024() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0024");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_VARIABLE);
+ IVariable decl = (IVariable)element;
+ assertEquals(decl.getTypeName(), "void(*(*(*)(int))(float))(char)");
+ }
+
+ public void testDeclarators_0031() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0031");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_VARIABLE);
+ IVariable decl = (IVariable)element;
+ assertEquals(decl.getTypeName(), "int(*)(char(*)(bool))");
+ }
+}
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/ITemplateTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/ITemplateTests.java
new file mode 100644
index 00000000000..aef7a2ece36
--- /dev/null
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/ITemplateTests.java
@@ -0,0 +1,247 @@
+/*
+ * Created on Jun 17, 2003
+ * by bnicolle
+ */
+package org.eclipse.cdt.core.model.tests;
+
+import org.eclipse.cdt.core.model.*;
+import junit.framework.*;
+import java.util.ArrayList;
+
+
+
+/**
+ * Class for testing ITemplate interface
+ * @author bnicolle
+ *
+ */
+public class ITemplateTests extends IntegratedCModelTest {
+ /**
+ * @param name
+ */
+ public ITemplateTests(String name) {
+ super(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.model.tests.IntegratedCModelTest#getSourcefileSubdir()
+ */
+ public String getSourcefileSubdir() {
+ return "resources/cmodel/";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.model.tests.IntegratedCModelTest#getSourcefileResource()
+ */
+ public String getSourcefileResource() {
+ return "ITemplate.cpp";
+ }
+ /**
+ * @returns a test suite named after this class
+ * containing all its public members named "test*"
+ */
+ public static Test suite() {
+ TestSuite suite= new TestSuite( IStructureTests.class.getName() );
+
+ // Interface tests:
+ suite.addTest( new ITemplateTests("testGetChildrenOfTypeTemplate"));
+ suite.addTest( new ITemplateTests("testGetNumberOfTemplateParameters"));
+ suite.addTest( new ITemplateTests("testGetTemplateParameterTypes"));
+ suite.addTest( new ITemplateTests("testGetTemplateSignature"));
+
+ // Language Specification tests:
+ // TBD.
+
+ return suite;
+ }
+
+ public ArrayList getTemplateMethods(ITranslationUnit tu)
+ {
+ IStructure myElem = null;
+ try {
+ myElem = (IStructure) tu.getElement("TemplateContainer");
+ }
+ catch( CModelException c ) {
+ assertNotNull( c );
+ }
+ assertNotNull(myElem);
+ return myElem.getChildrenOfType(ICElement.C_TEMPLATE_METHOD);
+ }
+
+ public void testGetChildrenOfTypeTemplate() {
+ ITranslationUnit tu = getTU();
+ {
+ ArrayList arrayElements = tu.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT);
+ String[] myExpectedValues = {
+ "Map"
+ };
+ assertEquals(myExpectedValues.length, arrayElements.size());
+ for(int i=0; i::first",
+ "IsGreaterThan",
"Foo::fum"
+ };
+ assertEquals(myExpectedValues.length, arrayElements.size());
+ for(int i=0; i::S_start_free"
+ };
+ assertEquals(myExpectedValues.length, arrayElements.size());
+ for(int i=0; i",
+ "nonVector",
+ "ArrayOverlay",
+ "fum(int) : void",
+ "scrum(void) : void", // TODO: deduce the rules of () versus (void), compare below.
+ "nonVector::first() : const T&", // TODO: where should be?
+ // TODO: shouldn't signature indicate const function as well?
+ "IsGreaterThan(X, X) : bool",
+ "Foo::fum(int) : void",
+ "default_alloc_template::S_start_free : char*",
+ };
+ assertEquals(myExpectedValues.length, arrayElements.size());
+ for(int i=0; i A::nested::operator int() {} ");
}
+ public void testOldKRFunctionDeclarations() throws Exception
+ {
+ // Parse and get the translaton unit
+ Writer code = new StringWriter();
+ code.write("bool myFunction( parm1, parm2, parm3 )\n");
+ code.write("const char* parm1;\n");
+ code.write("int (*parm2)(float);\n");
+ code.write("{}");
+ TranslationUnit translationUnit = parse(code.toString());
+
+ // Get the declaration
+ List declarations = translationUnit.getDeclarations();
+ assertEquals(1, declarations.size());
+ SimpleDeclaration simpleDeclaration = (SimpleDeclaration)declarations.get(0);
+ assertEquals( simpleDeclaration.getDeclSpecifier().getType(), DeclSpecifier.t_bool );
+ List declarators = simpleDeclaration.getDeclarators();
+ assertEquals( 1, declarators.size() );
+ Declarator functionDeclarator = (Declarator)declarators.get( 0 );
+ assertEquals( functionDeclarator.getName().toString(), "myFunction" );
+
+ ParameterDeclarationClause pdc = functionDeclarator.getParms();
+ assertNotNull( pdc );
+ List parameterDecls = pdc.getDeclarations();
+ assertEquals( 3, parameterDecls.size() );
+ ParameterDeclaration parm1 = (ParameterDeclaration)parameterDecls.get( 0 );
+ assertNotNull( parm1.getDeclSpecifier().getName() );
+ assertEquals( "parm1", parm1.getDeclSpecifier().getName().toString() );
+ List parm1Decls = parm1.getDeclarators();
+ assertEquals( 1, parm1Decls.size() );
+
+ ParameterDeclaration parm2 = (ParameterDeclaration)parameterDecls.get( 1 );
+ assertNotNull( parm2.getDeclSpecifier().getName() );
+ assertEquals( "parm2", parm2.getDeclSpecifier().getName().toString() );
+ List parm2Decls = parm2.getDeclarators();
+ assertEquals( 1, parm2Decls.size() );
+
+ ParameterDeclaration parm3 = (ParameterDeclaration)parameterDecls.get( 2 );
+ assertNotNull( parm3.getDeclSpecifier().getName() );
+ assertEquals( "parm3", parm3.getDeclSpecifier().getName().toString() );
+ List parm3Decls = parm3.getDeclarators();
+ assertEquals( 1, parm3Decls.size() );
+
+ OldKRParameterDeclarationClause clause = pdc.getOldKRParms();
+ assertNotNull( clause );
+ assertEquals( clause.getDeclarations().size(), 2 );
+ SimpleDeclaration decl1 = (SimpleDeclaration)clause.getDeclarations().get(0);
+ assertEquals( decl1.getDeclarators().size(), 1 );
+ assertTrue(decl1.getDeclSpecifier().isConst());
+ assertFalse(decl1.getDeclSpecifier().isVolatile());
+ assertEquals( decl1.getDeclSpecifier().getType(), DeclSpecifier.t_char);
+ Declarator declarator1 = (Declarator)decl1.getDeclarators().get( 0 );
+ assertEquals( declarator1.getName().toString(), "parm1" );
+ Expression initValue1 = declarator1.getExpression();
+ List ptrOps1 = declarator1.getPointerOperators();
+ assertNotNull( ptrOps1 );
+ assertEquals( 1, ptrOps1.size() );
+ PointerOperator po1 = (PointerOperator)ptrOps1.get(0);
+ assertNotNull( po1 );
+ assertFalse( po1.isConst() );
+ assertFalse( po1.isVolatile() );
+ assertEquals( po1.getType(), PointerOperator.t_pointer );
+
+ SimpleDeclaration declaration = (SimpleDeclaration)clause.getDeclarations().get(1);
+ assertEquals( declaration.getDeclSpecifier().getType(), DeclSpecifier.t_int );
+ assertEquals( declaration.getDeclarators().size(), 1);
+ assertNull( ((Declarator)declaration.getDeclarators().get(0)).getName() );
+ assertNotNull( ((Declarator)declaration.getDeclarators().get(0)).getDeclarator() );
+ assertEquals( ((Declarator)declaration.getDeclarators().get(0)).getDeclarator().getName().toString(), "parm2" );
+ ParameterDeclarationClause clause2 = ((Declarator)declaration.getDeclarators().get(0)).getParms();
+ assertEquals( clause2.getDeclarations().size(), 1 );
+ assertEquals( ((ParameterDeclaration)clause2.getDeclarations().get(0)).getDeclarators().size(), 1 );
+ assertNull( ((Declarator)((ParameterDeclaration)clause2.getDeclarations().get(0)).getDeclarators().get(0)).getName() );
+ assertEquals( ((ParameterDeclaration)clause2.getDeclarations().get(0)).getDeclSpecifier().getType(), DeclSpecifier.t_float );
+ }
}
diff --git a/core/org.eclipse.cdt.core.tests/resources/cfiles/TranslationUnits.c b/core/org.eclipse.cdt.core.tests/resources/cfiles/TranslationUnits.c
index b4f8bf60115..61326d05753 100644
--- a/core/org.eclipse.cdt.core.tests/resources/cfiles/TranslationUnits.c
+++ b/core/org.eclipse.cdt.core.tests/resources/cfiles/TranslationUnits.c
@@ -66,3 +66,9 @@ void func3()
{
printf("This is not really here\n");
}
+
+bool KRFunction( parm1, parm2, parm3 )
+const char* parm1;
+int (*parm2)(float);
+{
+}
diff --git a/core/org.eclipse.cdt.core.tests/resources/cmodel/DeclaratorsTests.cpp b/core/org.eclipse.cdt.core.tests/resources/cmodel/DeclaratorsTests.cpp
new file mode 100644
index 00000000000..f0d2c7e98c7
--- /dev/null
+++ b/core/org.eclipse.cdt.core.tests/resources/cmodel/DeclaratorsTests.cpp
@@ -0,0 +1,24 @@
+void decl_0001(char);
+void (decl_0002)(char);
+void ((decl_0003))(char);
+
+void *decl_0004(char);
+void (*decl_0005)(char);
+void (*(decl_0006))(char);
+void ((*decl_0007))(char);
+
+typedef void decl_0011(char);
+typedef void (decl_0012)(char);
+typedef void ((decl_0013))(char);
+
+typedef void *decl_0014(char);
+typedef void (*decl_0015)(char);
+typedef void (*(decl_0016))(char);
+typedef void ((*decl_0017))(char);
+
+typedef void decl_0021(char);
+void (*decl_0022)(char);
+void (*(*decl_0023(int a)))(char) { return &decl_0021; }
+void (*(*(*((decl_0024)))(int))(float))(char);
+
+int (*decl_0031)(char(*yyy)(bool));
diff --git a/core/org.eclipse.cdt.core.tests/resources/cmodel/IStructureTemplate.cpp b/core/org.eclipse.cdt.core.tests/resources/cmodel/IStructureTemplate.cpp
deleted file mode 100644
index fb283bc2847..00000000000
--- a/core/org.eclipse.cdt.core.tests/resources/cmodel/IStructureTemplate.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-int z;
-
-template class nonVector {
- public:
- int x;
- int y;
-
- T* head;
- vector() { head =new T(); }
- int length() { return 1; }
- T& first() { return *head; }
- const T& first() const { return *head; }
-};
-
-
diff --git a/core/org.eclipse.cdt.core.tests/resources/cmodel/ITemplate.cpp b/core/org.eclipse.cdt.core.tests/resources/cmodel/ITemplate.cpp
new file mode 100644
index 00000000000..367a36c7011
--- /dev/null
+++ b/core/org.eclipse.cdt.core.tests/resources/cmodel/ITemplate.cpp
@@ -0,0 +1,61 @@
+// TEMPLATE_STRUCT
+template
+struct Map
+{
+ Key* keys;
+ Value* values;
+ SortAlgorithm* sortAlgorithm;
+ Map();
+};
+
+// TEMPLATE_CLASS
+template class nonVector {
+ private:
+ T* head;
+
+ public:
+ nonVector() { head =new T(); }
+ int length() { return 1; }
+ T& first() { return *head; }
+ const T& first() const;
+};
+
+// TEMPLATE_UNION
+template
+union ArrayOverlay {
+ public:
+ X x[size];
+ Y y[size];
+
+ static int numArrays;
+};
+
+
+// TEMPLATE_METHODS
+class TemplateContainer {
+ // these are in an enclosing class
+ template void fum(int i);
+ template void scrum(void) {};
+};
+
+// TEMPLATE_FUNCTION
+template const T& nonVector::first() const
+{
+ return *head;
+}
+
+template bool IsGreaterThan(X,X);
+
+template void Foo::fum(int i) {}
+
+// TEMPLATE_VARIABLES
+template char* default_alloc_template::S_start_free = 0;
+
+// an instantiation, not a template:
+complex cf(0,0);
+//template >
+//Dictionary* TheSpellCheckDictionary;
+
+int success;
+
+