[
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