Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] ITemplate tests, cdt.core.tests double-check


I added JUnit tests for ITemplate.

Because it was a result of my testing re-org clashing with his new tests,
I also propagated Victor's test changes into their new place in cdt.core.tests:
        DeclaratorsTest
        testKRFunctionDeclarations
Also some binary library files got lost in the move; see attached zip.

I also added C and C++ Natures to the cdt.core.tests' project file.
(While it is not intended to be compilable, it makes inspecting the
C/C++ source files by Outline View much more convenient.)
Please let me know if this gets in anyone's way.

Cheers,

- Brent
Index: .project
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/.project,v
retrieving revision 1.1
diff -u -r1.1 .project
--- .project	18 Jun 2003 21:29:47 -0000	1.1
+++ .project	19 Jun 2003 23:06:05 -0000
@@ -36,5 +36,7 @@
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
 	</natures>
 </projectDescription>
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.1
diff -u -r1.1 ChangeLog
--- ChangeLog	18 Jun 2003 21:29:47 -0000	1.1
+++ ChangeLog	19 Jun 2003 23:06:05 -0000
@@ -1,16 +1,20 @@
 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
 	                 to /model/org/clipse/cdt/core/model/tests/resources/cmodel.
 	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.
Index: model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java,v
retrieving revision 1.1
diff -u -r1.1 AllCoreTests.java
--- model/org/eclipse/cdt/core/model/tests/AllCoreTests.java	18 Jun 2003 21:29:47 -0000	1.1
+++ model/org/eclipse/cdt/core/model/tests/AllCoreTests.java	19 Jun 2003 23:06:05 -0000
@@ -14,12 +14,12 @@
  * 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 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 @@
         suite.addTest(FlagTests.suite());
         suite.addTest(ArchiveTests.suite());
         suite.addTest(TranslationUnitTests.suite());
-		
+		suite.addTest(DeclaratorsTests.suite());
+
         return suite;
-        
+
     }
 } // End of AllCoreTests.java
 
Index: model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java,v
retrieving revision 1.1
diff -u -r1.1 AllLanguageInterfaceTests.java
--- model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java	18 Jun 2003 21:29:47 -0000	1.1
+++ model/org/eclipse/cdt/core/model/tests/AllLanguageInterfaceTests.java	19 Jun 2003 23:06:05 -0000
@@ -28,6 +28,7 @@
 		suite.addTest(IIncludeTests.suite());
 		suite.addTest(IMacroTests.suite());
 		suite.addTest(IStructureTests.suite());
+		suite.addTest(ITemplateTests.suite());
 		return suite;
         
 	}
Index: model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java,v
retrieving revision 1.1
diff -u -r1.1 CModelElementsTests.java
--- model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java	18 Jun 2003 21:29:47 -0000	1.1
+++ model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java	19 Jun 2003 23:06:05 -0000
@@ -304,6 +304,12 @@
 		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 @@
 		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){
Index: model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
===================================================================
RCS file: model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
diff -N model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java	19 Jun 2003 23:06:06 -0000
@@ -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))");
+    }
+}
Index: model/org/eclipse/cdt/core/model/tests/ITemplateTests.java
===================================================================
RCS file: model/org/eclipse/cdt/core/model/tests/ITemplateTests.java
diff -N model/org/eclipse/cdt/core/model/tests/ITemplateTests.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ model/org/eclipse/cdt/core/model/tests/ITemplateTests.java	19 Jun 2003 23:06:06 -0000
@@ -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<myExpectedValues.length; i++) {
+				ITemplate myITemplate = (ITemplate) arrayElements.get(i);
+				assertNotNull( "Failed on "+i, myITemplate);
+				assertEquals("Failed on "+i, myExpectedValues[i], myITemplate.getElementName());
+			}
+		}
+		{
+			ArrayList arrayElements = tu.getChildrenOfType(ICElement.C_TEMPLATE_CLASS);
+			String[] myExpectedValues = {
+				"nonVector"
+			};
+			assertEquals(myExpectedValues.length, arrayElements.size());
+			for(int i=0; i<myExpectedValues.length; i++) {
+				ITemplate myITemplate = (ITemplate) arrayElements.get(i);
+				assertNotNull( "Failed on "+i, myITemplate);
+				assertEquals("Failed on "+i, myExpectedValues[i], myITemplate.getElementName());
+			}
+		}
+		{
+			ArrayList arrayElements = tu.getChildrenOfType(ICElement.C_TEMPLATE_UNION);
+			String[] myExpectedValues = {
+				"ArrayOverlay"
+			};
+			assertEquals(myExpectedValues.length, arrayElements.size());
+			for(int i=0; i<myExpectedValues.length; i++) {
+				ITemplate myITemplate = (ITemplate) arrayElements.get(i);
+				assertNotNull( "Failed on "+i, myITemplate);
+				assertEquals("Failed on "+i, myExpectedValues[i], myITemplate.getElementName());
+			}
+		}
+		{
+			ArrayList arrayElements = getTemplateMethods(tu);
+			String[] myExpectedValues = {
+				"fum",
+				"scrum"
+			};
+			assertEquals(myExpectedValues.length, arrayElements.size());
+			for(int i=0; i<myExpectedValues.length; i++) {
+				ITemplate myITemplate = (ITemplate) arrayElements.get(i);
+				assertNotNull( "Failed on "+i, myITemplate);
+				assertEquals("Failed on "+i, myExpectedValues[i], myITemplate.getElementName());
+			}
+		}
+		{
+			ArrayList arrayElements = tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION);
+			String[] myExpectedValues = {
+				"nonVector<T>::first",
+				"IsGreaterThan",
				"Foo::fum"
+			};
+			assertEquals(myExpectedValues.length, arrayElements.size());
+			for(int i=0; i<myExpectedValues.length; i++) {
+				ITemplate myITemplate = (ITemplate) arrayElements.get(i);
+				assertNotNull( "Failed on "+i, myITemplate);
+				assertEquals("Failed on "+i, myExpectedValues[i], myITemplate.getElementName());
+			}
+		}
+		{
+			ArrayList arrayElements = tu.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE);
+			String[] myExpectedValues = {
+				"default_alloc_template<threads,inst>::S_start_free"
+			};
+			assertEquals(myExpectedValues.length, arrayElements.size());
+			for(int i=0; i<myExpectedValues.length; i++) {
+				ITemplate myITemplate = (ITemplate) arrayElements.get(i);
+				assertNotNull( "Failed on "+i, myITemplate);
+				assertEquals("Failed on "+i, myExpectedValues[i], myITemplate.getElementName());
+			}
+		}
+	}
+
+
+	public void testGetNumberOfTemplateParameters()
+	{
+		ITranslationUnit tu = getTU();
+		ArrayList arrayElements = new ArrayList();
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_CLASS ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_UNION ) );
+		arrayElements.addAll( getTemplateMethods(tu) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE ) );
+		
+		int[] myExpectedNumbers = {
+//			3,1,3,1,1,3
+			3,1,3,1,1,1,1,1,2
+		};
+		assertEquals(myExpectedNumbers.length, arrayElements.size());
+		for(int i=0; i<myExpectedNumbers.length; i++) {
+			ITemplate myTemplate = (ITemplate) arrayElements.get(i);
+			assertNotNull( "Failed on "+i, myTemplate );
+			assertEquals( "Failed on "+i, myExpectedNumbers[i],
+				myTemplate.getNumberOfTemplateParameters());
+		}
+	}
+	public void testGetTemplateParameterTypes()
+	{
+		ITranslationUnit tu = getTU();
+		ArrayList arrayElements = new ArrayList();
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_CLASS ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_UNION ) );
+		arrayElements.addAll( getTemplateMethods(tu) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE ) );
+		
+		String[][] myExpectedValues = {
+			//"Map"
+			{"Key", "Value", "SortAlgorithm"},
+			//"nonVector"
+			{"T"},
+			//"ArrayOverlay"
+			{"X","Y","int"},
+			//"TemplateContainer::fum"
+			{"Bar"},
+		  	//"TemplateParameter::scrum"
+			{"int"},
+			//"nonVector::first"
+			{"T"},
+			//"IsGreaterThan"
+			{"X"},
+			//"Foo::fum"
+			{"Bar"},
+			//"default_alloc_template::S_start_free"
+			{"bool", "int"},
+		};
+		assertEquals(myExpectedValues.length, arrayElements.size());
+		for(int i=0; i<myExpectedValues.length; i++) {
+			ITemplate myTemplate = (ITemplate) arrayElements.get(i);
+			assertNotNull( "Failed on "+i, myTemplate );
+			String[] myExpectedParams = myExpectedValues[i];
+			String[] myParams = myTemplate.getTemplateParameterTypes();
+			assertEquals( "Failed on "+i, myExpectedParams.length, myParams.length );
+			for(int j=0; j<myExpectedParams.length; j++) {
+				assertEquals( "Failed on "+i+","+j, myExpectedParams[j], myParams[j] );
+			}
+		}
+	}
+	public void testGetTemplateSignature()
+	{
+		ITranslationUnit tu = getTU();
+		ArrayList arrayElements = new ArrayList();
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_CLASS ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_UNION ) );
+		arrayElements.addAll( getTemplateMethods(tu) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION ) );
+		arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE ) );
+		
+		String[] myExpectedValues = {
+			"Map<Key, Value, SortAlgorithm>",
+			"nonVector<T>",
+			"ArrayOverlay<X, Y, int>",
+			"fum<Bar>(int) : void",
+			"scrum<int>(void) : void", // TODO: deduce the rules of () versus (void), compare below.
+			"nonVector<T>::first<T>() : const T&", // TODO: where should <T> be?
+			// TODO: shouldn't signature indicate const function as well?
+			"IsGreaterThan<X>(X, X) : bool",
+			"Foo::fum<Bar>(int) : void",
+			"default_alloc_template<threads,inst>::S_start_free<bool, int> : char*",
+		};
+		assertEquals(myExpectedValues.length, arrayElements.size());
+		for(int i=0; i<myExpectedValues.length; i++) {
+			ITemplate myTemplate = (ITemplate) arrayElements.get(i);
+			assertNotNull( "Failed on "+i, myTemplate );
+			assertEquals( "Failed on "+i, myExpectedValues[i],
+				myTemplate.getTemplateSignature() );
+		}
+	}
+}
Index: model/org/eclipse/cdt/core/model/tests/TranslationUnitTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/TranslationUnitTests.java,v
retrieving revision 1.1
diff -u -r1.1 TranslationUnitTests.java
--- model/org/eclipse/cdt/core/model/tests/TranslationUnitTests.java	18 Jun 2003 21:29:47 -0000	1.1
+++ model/org/eclipse/cdt/core/model/tests/TranslationUnitTests.java	19 Jun 2003 23:06:06 -0000
@@ -16,6 +16,7 @@
 import org.eclipse.cdt.core.model.CModelException;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IFunction;
 import org.eclipse.cdt.core.model.IInclude;
 import org.eclipse.cdt.core.model.ITranslationUnit;
 import org.eclipse.cdt.testplugin.CProjectHelper;
@@ -51,8 +52,8 @@
      */
     String[] expectedStringList= {"stdio.h", "unistd.h", "func2p", 
         "globalvar", "myenum", "mystruct", "mystruct_t", "myunion", "mytype", 
-        "func1", "func2", "main", "func3"};
-    int[]  expectedLines={ 12,14,17,20,23,28,32,35,42,47,53,58,65};
+		"func1", "func2", "main", "func3", "KRFunction"};
+	int[]  expectedLines={ 12,14,17,20,23,28,32,35,42,47,53,58,65,70};
     /* This is a list of that the types of the above list of elements is 
      * expected to be.
      */
@@ -60,7 +61,8 @@
         ICElement.C_FUNCTION_DECLARATION, ICElement.C_VARIABLE, 
         ICElement.C_ENUMERATION, ICElement.C_STRUCT, ICElement.C_TYPEDEF, 
         ICElement.C_UNION, ICElement.C_TYPEDEF, ICElement.C_FUNCTION,
-        ICElement.C_FUNCTION, ICElement.C_FUNCTION,ICElement.C_FUNCTION};
+		ICElement.C_FUNCTION, ICElement.C_FUNCTION,ICElement.C_FUNCTION,
+		ICElement.C_FUNCTION};
     
 
     /**
@@ -163,6 +165,7 @@
 		suite.addTest(new TranslationUnitTests("testGetElement"));
 		suite.addTest(new TranslationUnitTests("testBug23478A"));
 		suite.addTest(new TranslationUnitTests("testBug23478B"));
+		suite.addTest(new TranslationUnitTests("testKRFunctionDeclarations"));
 		// TODO: suite.addTest(new TranslationUnitTests("testGetElementAtLine"));
 		return suite;
     }
@@ -359,4 +362,15 @@
         assertTrue(myExp.getExtraString(), !myExp.gotExtra());
     }
 */      
+	/***
+	 * Simple sanity test for old K&R-style C function declaration
+	 */
+	public void testKRFunctionDeclarations() throws CModelException {
+		ITranslationUnit myTranslationUnit = CProjectHelper.findTranslationUnit(testProject,"exetest.c");
+        
+		assertTrue(myTranslationUnit.getElement("KRFunction") instanceof IFunction);            
+		IFunction myKRFunction = (IFunction)myTranslationUnit.getElement("KRFunction"); 
+		assertEquals(myKRFunction.getSignature(), "KRFunction(const char*, int(*)(float), parm3)");
+		assertEquals(myKRFunction.getReturnType(), "bool");
+	}      
 }
Index: parser/org/eclipse/cdt/core/parser/tests/DOMTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java,v
retrieving revision 1.1
diff -u -r1.1 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	18 Jun 2003 21:29:47 -0000	1.1
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	19 Jun 2003 23:06:06 -0000
@@ -29,6 +29,7 @@
 import org.eclipse.cdt.internal.core.dom.LinkageSpecification;
 import org.eclipse.cdt.internal.core.dom.Macro;
 import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
+import org.eclipse.cdt.internal.core.dom.OldKRParameterDeclarationClause;
 import org.eclipse.cdt.internal.core.dom.ParameterDeclaration;
 import org.eclipse.cdt.internal.core.dom.ParameterDeclarationClause;
 import org.eclipse.cdt.internal.core.dom.PointerOperator;
@@ -2159,4 +2160,78 @@
         parse("template <class B,C> 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 );          
+	}
 }
Index: resources/cfiles/TranslationUnits.c
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/resources/cfiles/TranslationUnits.c,v
retrieving revision 1.1
diff -u -r1.1 TranslationUnits.c
--- resources/cfiles/TranslationUnits.c	18 Jun 2003 21:29:47 -0000	1.1
+++ resources/cfiles/TranslationUnits.c	19 Jun 2003 23:06:06 -0000
@@ -66,3 +66,9 @@
 {
 	printf("This is not really here\n");
 }
+
+bool KRFunction( parm1, parm2, parm3 )
+const char* parm1;
+int (*parm2)(float);
+{
+}
Index: resources/cmodel/DeclaratorsTests.cpp
===================================================================
RCS file: resources/cmodel/DeclaratorsTests.cpp
diff -N resources/cmodel/DeclaratorsTests.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ resources/cmodel/DeclaratorsTests.cpp	19 Jun 2003 23:06:06 -0000
@@ -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));
Index: resources/cmodel/IStructureTemplate.cpp
===================================================================
RCS file: resources/cmodel/IStructureTemplate.cpp
diff -N resources/cmodel/IStructureTemplate.cpp
--- resources/cmodel/IStructureTemplate.cpp	18 Jun 2003 21:29:47 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-int z;
-
-template<T> class nonVector {
-	public:
-	int x;
-	int y;
-	
-	T* head;
-	vector<T>() { head =new T(); }
-	int length() { return 1; }
-	T& first() { return *head; }
-	const T& first() const { return *head; }
-};
-
-
Index: resources/cmodel/ITemplate.cpp
===================================================================
RCS file: resources/cmodel/ITemplate.cpp
diff -N resources/cmodel/ITemplate.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ resources/cmodel/ITemplate.cpp	19 Jun 2003 23:06:06 -0000
@@ -0,0 +1,62 @@
+// TEMPLATE_STRUCT
+template<class Key, class Value, class SortAlgorithm=DefaultSort>
+struct Map
+{
+	Key* keys;
+	Value* values;
+	SortAlgorithm* sortAlgorithm;
+	Map();
+};
+
+// TEMPLATE_CLASS
+template<class T> 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<class X, class Y, int size=16>
+union ArrayOverlay {
+	public:
+	X x[size];
+	Y y[size];
+	
+	static int<X,Y> numArrays;
+};
+
+
+// TEMPLATE_METHODS
+class TemplateContainer {
+	// these are in an enclosing class
+	template<class Bar> void fum(int i);
+	template<int> void scrum(void) {};
+};
+
+// TEMPLATE_FUNCTION
+template<class T> const T& nonVector<T>::first() const
+{
+	return *head;
+}
+
+template<class X> bool IsGreaterThan(X,X);
+
+template<class Bar> void Foo::fum(int i) {}
+
+// TEMPLATE_VARIABLES
+template <bool threads, int inst> char* default_alloc_template<threads, inst>::S_start_free = 0;
+
+// an instantiation, not a template:
+complex<float> cf(0,0);
+//template<class Language, class CharacterSet, class SortAlgorithm<CharacterSet> >
+//Dictionary* TheSpellCheckDictionary;
+
+int success;
+
+
+

Attachment: CDTCoreTests.zip
Description: Zip archive


Back to the top