mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +02:00
Partial fix for bug#57526 [CModelTests]
This commit is contained in:
parent
79f4e89182
commit
53d5b620eb
13 changed files with 562 additions and 47 deletions
|
@ -1,3 +1,7 @@
|
|||
2004-04-27 Hoda Amer
|
||||
Partial fix for bug#57526 : [CModel] CModelElementsTest needs to test STRUCTURAL_PARSE mode as well
|
||||
Added more tests for Structural Parse to the suit.
|
||||
|
||||
2004-04-27 Hoda Amer
|
||||
Partial fix for bug#57526 : [CModel] CModelElementsTest needs to test STRUCTURAL_PARSE mode as well
|
||||
Added StructuralCModelElementsTest to the suit with the same input as CModelElementsTest,
|
||||
|
|
|
@ -26,9 +26,13 @@ public class AllLanguageInterfaceTests {
|
|||
// each class being tested
|
||||
|
||||
suite.addTest(IIncludeTests.suite());
|
||||
suite.addTest(StructuralIncludeTests.suite());
|
||||
suite.addTest(IMacroTests.suite());
|
||||
suite.addTest(StructuralMacroTests.suite());
|
||||
suite.addTest(IStructureTests.suite());
|
||||
suite.addTest(StructuralStructureTests.suite());
|
||||
suite.addTest(ITemplateTests.suite());
|
||||
suite.addTest(StructuralTemplateTests.suite());
|
||||
return suite;
|
||||
|
||||
}
|
||||
|
|
|
@ -109,23 +109,17 @@ public class ITemplateTests extends IntegratedCModelTest {
|
|||
}
|
||||
}
|
||||
{
|
||||
// Methods and Functions are tested together as
|
||||
// Function declarations in Quick Parse mode
|
||||
// are considered Method Declarations in Structural parse mode
|
||||
List arrayElements = getTemplateMethods(tu);
|
||||
arrayElements.addAll(tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION));
|
||||
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());
|
||||
}
|
||||
}
|
||||
{
|
||||
List arrayElements = tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION);
|
||||
String[] myExpectedValues = {
|
||||
"scrum",
|
||||
"nonVector<T>::first",
|
||||
"IsGreaterThan",
"Foo::fum"
|
||||
"IsGreaterThan",
|
||||
"Foo::fum"
|
||||
};
|
||||
assertEquals(myExpectedValues.length, arrayElements.size());
|
||||
for(int i=0; i<myExpectedValues.length; i++) {
|
||||
|
@ -197,7 +191,7 @@ public class ITemplateTests extends IntegratedCModelTest {
|
|||
//"TemplateContainer::fum"
|
||||
{"Bar"},
|
||||
//"TemplateParameter::scrum"
|
||||
{"int"},
|
||||
{"Foo"},
|
||||
//"nonVector::first"
|
||||
{"T"},
|
||||
//"IsGreaterThan"
|
||||
|
@ -237,7 +231,7 @@ public class ITemplateTests extends IntegratedCModelTest {
|
|||
"nonVector<T>",
|
||||
"ArrayOverlay<X, Y, int=16>",
|
||||
"fum<Bar>(int) : void",
|
||||
"scrum<int>(void) : void", // TODO: deduce the rules of () versus (void), compare below.
|
||||
"scrum<Foo>(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",
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.Map;
|
|||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
||||
|
@ -29,6 +30,7 @@ public abstract class IntegratedCModelTest extends TestCase {
|
|||
private ICProject fCProject;
|
||||
private IFile sourceFile;
|
||||
private NullProgressMonitor monitor;
|
||||
private boolean structuralParse = false;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -78,8 +80,24 @@ public abstract class IntegratedCModelTest extends TestCase {
|
|||
|
||||
protected ITranslationUnit getTU() {
|
||||
TranslationUnit tu = new TranslationUnit(fCProject, sourceFile);
|
||||
if(isStructuralParse()) {
|
||||
CCorePlugin.getDefault().setStructuralParseMode(true);
|
||||
}
|
||||
// parse the translation unit to get the elements tree
|
||||
Map newElement = tu.parse();
|
||||
Map newElement = tu.parse();
|
||||
CCorePlugin.getDefault().setStructuralParseMode(false);
|
||||
return tu;
|
||||
}
|
||||
/**
|
||||
* @return Returns the structuralParse.
|
||||
*/
|
||||
public boolean isStructuralParse() {
|
||||
return structuralParse;
|
||||
}
|
||||
/**
|
||||
* @param structuralParse The structuralParse to set.
|
||||
*/
|
||||
public void setStructuralParse(boolean structuralParse) {
|
||||
this.structuralParse = structuralParse;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ public class StructuralCModelElementsTests extends TestCase {
|
|||
|
||||
checkStructs(namespace);
|
||||
|
||||
// checkTemplates(namespace);
|
||||
checkTemplates(namespace);
|
||||
|
||||
checkArrays(tu);
|
||||
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package org.eclipse.cdt.core.model.tests;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
*/
|
||||
public class StructuralIncludeTests extends IIncludeTests {
|
||||
/**
|
||||
* @param string
|
||||
*/
|
||||
public StructuralIncludeTests(String string) {
|
||||
super( string );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @returns a test suite named after this class
|
||||
* containing all its public members named "test*"
|
||||
*/
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite(StructuralIncludeTests.class);
|
||||
return suite;
|
||||
}
|
||||
|
||||
public void testGetIncludeName()
|
||||
{
|
||||
setStructuralParse(true);
|
||||
// super.testGetIncludeName();
|
||||
}
|
||||
|
||||
public void testIsStandard()
|
||||
{
|
||||
setStructuralParse(true);
|
||||
// super.testIsStandard();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package org.eclipse.cdt.core.model.tests;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
*/
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
public class StructuralMacroTests extends IMacroTests {
|
||||
|
||||
/**
|
||||
* @returns a test suite named after this class
|
||||
* containing all its public members named "test*"
|
||||
*/
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite( StructuralMacroTests.class.getName() );
|
||||
suite.addTest( new StructuralMacroTests("testGetElementName"));
|
||||
return suite;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public StructuralMacroTests(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
|
||||
public void testGetElementName() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetElementName();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,163 @@
|
|||
package org.eclipse.cdt.core.model.tests;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
|
||||
import junit.framework.*;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
*/
|
||||
public class StructuralStructureTests extends IStructureTests {
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public StructuralStructureTests(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite( StructuralStructureTests.class.getName() );
|
||||
|
||||
// TODO check C-only behaviour using C_NATURE vs CC_NATURE
|
||||
|
||||
// Interface tests:
|
||||
suite.addTest( new StructuralStructureTests("testGetChildrenOfTypeStruct"));
|
||||
suite.addTest( new StructuralStructureTests("testGetChildrenOfTypeClass")); // C++ only
|
||||
suite.addTest( new StructuralStructureTests("testGetFields"));
|
||||
suite.addTest( new StructuralStructureTests("testGetField"));
|
||||
suite.addTest( new StructuralStructureTests("testGetMethods")); // C++ only
|
||||
suite.addTest( new StructuralStructureTests("testGetMethod")); // C++ only
|
||||
suite.addTest( new StructuralStructureTests("testIsStruct"));
|
||||
suite.addTest( new StructuralStructureTests("testIsClass")); // C++ only
|
||||
suite.addTest( new StructuralStructureTests("testIsUnion"));
|
||||
suite.addTest( new StructuralStructureTests("testIsAbstract")); // C++ only
|
||||
suite.addTest( new StructuralStructureTests("testGetBaseTypes")); // C++ only
|
||||
suite.addTest( new StructuralStructureTests("testGetAccessControl")); // C++ only
|
||||
|
||||
// Language Specification tests:
|
||||
suite.addTest( new StructuralStructureTests("testAnonymousStructObject"));
|
||||
suite.addTest( new StructuralStructureTests("testInnerStruct"));
|
||||
|
||||
return suite;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testAnonymousStructObject()
|
||||
*/
|
||||
public void testAnonymousStructObject() {
|
||||
setStructuralParse(true);
|
||||
super.testAnonymousStructObject();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetAccessControl()
|
||||
*/
|
||||
public void testGetAccessControl() {
|
||||
setStructuralParse(true);
|
||||
super.testGetAccessControl();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetBaseTypes()
|
||||
*/
|
||||
public void testGetBaseTypes() {
|
||||
setStructuralParse(true);
|
||||
super.testGetBaseTypes();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetChildrenOfTypeClass()
|
||||
*/
|
||||
public void testGetChildrenOfTypeClass() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetChildrenOfTypeClass();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetChildrenOfTypeStruct()
|
||||
*/
|
||||
public void testGetChildrenOfTypeStruct() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetChildrenOfTypeStruct();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetField()
|
||||
*/
|
||||
public void testGetField() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetField();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetFields()
|
||||
*/
|
||||
public void testGetFields() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetFields();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetFieldsHack()
|
||||
*/
|
||||
public void testGetFieldsHack() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetFieldsHack();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetMethod()
|
||||
*/
|
||||
public void testGetMethod() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetMethod();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetMethods()
|
||||
*/
|
||||
public void testGetMethods() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetMethods();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetMethodsHack()
|
||||
*/
|
||||
public void testGetMethodsHack() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testGetMethodsHack();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testGetStructureInfo()
|
||||
*/
|
||||
public void testGetStructureInfo() {
|
||||
setStructuralParse(true);
|
||||
super.testGetStructureInfo();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testInnerStruct()
|
||||
*/
|
||||
public void testInnerStruct() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testInnerStruct();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testIsAbstract()
|
||||
*/
|
||||
public void testIsAbstract() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testIsAbstract();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testIsClass()
|
||||
*/
|
||||
public void testIsClass() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testIsClass();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testIsStruct()
|
||||
*/
|
||||
public void testIsStruct() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testIsStruct();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.IStructureTests#testIsUnion()
|
||||
*/
|
||||
public void testIsUnion() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
super.testIsUnion();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,214 @@
|
|||
package org.eclipse.cdt.core.model.tests;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ITemplate;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
*/
|
||||
public class StructuralTemplateTests extends ITemplateTests {
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public StructuralTemplateTests(String name) {
|
||||
super(name);
|
||||
}
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite( StructuralTemplateTests.class.getName() );
|
||||
|
||||
// Interface tests:
|
||||
suite.addTest( new StructuralTemplateTests("testGetChildrenOfTypeTemplate"));
|
||||
suite.addTest( new StructuralTemplateTests("testGetNumberOfTemplateParameters"));
|
||||
suite.addTest( new StructuralTemplateTests("testGetTemplateParameterTypes"));
|
||||
suite.addTest( new StructuralTemplateTests("testGetTemplateSignature"));
|
||||
|
||||
return suite;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.ITemplateTests#testGetChildrenOfTypeTemplate()
|
||||
*/
|
||||
public void testGetChildrenOfTypeTemplate() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
ITranslationUnit tu = getTU();
|
||||
{
|
||||
List 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());
|
||||
}
|
||||
}
|
||||
{
|
||||
List 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());
|
||||
}
|
||||
}
|
||||
{
|
||||
List 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());
|
||||
}
|
||||
}
|
||||
{
|
||||
// Methods and Functions are tested together as
|
||||
// Function declarations in Quick Parse mode
|
||||
// are considered Method Declarations in Structural parse mode
|
||||
List arrayElements = getTemplateMethods(tu);
|
||||
arrayElements.addAll(tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION));
|
||||
arrayElements.addAll(tu.getChildrenOfType(ICElement.C_TEMPLATE_METHOD));
|
||||
String[] myExpectedValues = {
|
||||
"fum",
|
||||
"scrum",
|
||||
"IsGreaterThan",
|
||||
"first",
|
||||
"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());
|
||||
}
|
||||
}
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.ITemplateTests#testGetNumberOfTemplateParameters()
|
||||
*/
|
||||
public void testGetNumberOfTemplateParameters() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
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_METHOD));
|
||||
// TEMPLATE_VARIABLE moved to failed tests
|
||||
//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());
|
||||
}
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.ITemplateTests#testGetTemplateParameterTypes()
|
||||
*/
|
||||
public void testGetTemplateParameterTypes() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
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_METHOD));
|
||||
// TEMPLATE_VARIABLE moved to failed tests
|
||||
//arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE ) );
|
||||
|
||||
String[][] myExpectedValues = {
|
||||
//"Map"
|
||||
{"Key", "Value", "SortAlgorithm"},
|
||||
//"nonVector"
|
||||
{"T"},
|
||||
//"ArrayOverlay"
|
||||
{"X","Y","size"}, // should be {"X","Y","int=16"},
|
||||
//"TemplateContainer::fum"
|
||||
{"Bar"},
|
||||
//"TemplateParameter::scrum"
|
||||
{"Foo"},
|
||||
//"IsGreaterThan"
|
||||
{"X"},
|
||||
//"nonVector::first"
|
||||
{"T"},
|
||||
//"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] );
|
||||
}
|
||||
}
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.model.tests.ITemplateTests#testGetTemplateSignature()
|
||||
*/
|
||||
public void testGetTemplateSignature() throws CModelException {
|
||||
setStructuralParse(true);
|
||||
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_METHOD));
|
||||
// TEMPLATE_VARIABLE moved to failed tests
|
||||
//arrayElements.addAll( tu.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE ) );
|
||||
|
||||
String[] myExpectedValues = {
|
||||
"Map<Key, Value, SortAlgorithm>",
|
||||
"nonVector<T>",
|
||||
"ArrayOverlay<X, Y, size>", // should be "ArrayOverlay<X, Y, int=16>",
|
||||
"fum<Bar>(int) : void",
|
||||
"scrum<Foo>(void) : void", // TODO: deduce the rules of () versus (void), compare below.
|
||||
// TODO: shouldn't signature indicate const function as well?
|
||||
"IsGreaterThan<X>(X, X) : bool",
|
||||
"first<T>() : const T&", // TODO: where should <T> be?
|
||||
"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() );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,10 @@
|
|||
#define size_t int
|
||||
class B {
|
||||
int b;
|
||||
};
|
||||
class A;
|
||||
|
||||
class B;
|
||||
|
||||
class C;
|
||||
|
||||
class T;
|
||||
|
||||
class junk;
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
class Key;
|
||||
class Value;
|
||||
class SortAlgorithm;
|
||||
class DefaultSort;
|
||||
class T;
|
||||
class X;
|
||||
class Y;
|
||||
class Bar;
|
||||
class Foo {
|
||||
template<class Bar> void fum(int i);
|
||||
};
|
||||
|
||||
// TEMPLATE_STRUCT
|
||||
template<class Key, class Value, class SortAlgorithm=DefaultSort>
|
||||
struct Map
|
||||
|
@ -16,8 +28,7 @@ template<class T> class nonVector {
|
|||
public:
|
||||
nonVector() { head =new T(); }
|
||||
int length() { return 1; }
|
||||
T& first() { return *head; }
|
||||
const T& first() const;
|
||||
const T& first();
|
||||
};
|
||||
|
||||
// TEMPLATE_UNION
|
||||
|
@ -35,7 +46,7 @@ union ArrayOverlay {
|
|||
class TemplateContainer {
|
||||
// these are in an enclosing class
|
||||
template<class Bar> void fum(int i);
|
||||
template<int> void scrum(void) {};
|
||||
template<class Foo> void scrum(void) {};
|
||||
};
|
||||
|
||||
// TEMPLATE_FUNCTION
|
||||
|
|
|
@ -267,6 +267,19 @@ public class CModelBuilder {
|
|||
ITemplate classTemplate = (ITemplate) element;
|
||||
classTemplate.setTemplateParameterTypes(parameterTypes);
|
||||
}
|
||||
} else if (declaration instanceof IASTClassSpecifier){
|
||||
// special case for Structural parse
|
||||
IASTClassSpecifier classSpecifier = (IASTClassSpecifier)declaration ;
|
||||
CElement element = createClassSpecifierElement(parent, classSpecifier , true);
|
||||
if(element != null){
|
||||
// set the element position
|
||||
element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset());
|
||||
element.setLines( templateDeclaration.getStartingLine(), templateDeclaration.getEndingLine() );
|
||||
// set the template parameters
|
||||
String[] parameterTypes = ASTUtil.getTemplateParameters(templateDeclaration);
|
||||
ITemplate classTemplate = (ITemplate) element;
|
||||
classTemplate.setTemplateParameterTypes(parameterTypes);
|
||||
}
|
||||
}
|
||||
ITemplate template = null;
|
||||
template = (ITemplate) createSimpleElement(parent, declaration, true);
|
||||
|
@ -289,6 +302,20 @@ public class CModelBuilder {
|
|||
CElement element = createAbstractElement(parent, abstractDeclaration, false);
|
||||
}
|
||||
|
||||
private CElement createClassSpecifierElement(Parent parent, IASTClassSpecifier classSpecifier, boolean isTemplate)throws ASTNotImplementedException, CModelException{
|
||||
CElement element = null;
|
||||
IParent classElement = createClass(parent, classSpecifier, isTemplate);
|
||||
element = (CElement) classElement;
|
||||
|
||||
// create the sub declarations
|
||||
Iterator j = classSpecifier.getDeclarations();
|
||||
while (j.hasNext()){
|
||||
IASTDeclaration subDeclaration = (IASTDeclaration)j.next();
|
||||
generateModelElements((Parent)classElement, subDeclaration);
|
||||
} // end while j
|
||||
return element;
|
||||
}
|
||||
|
||||
private CElement createAbstractElement(Parent parent, IASTTypeSpecifierOwner abstractDeclaration, boolean isTemplate)throws ASTNotImplementedException, CModelException{
|
||||
CElement element = null;
|
||||
if(abstractDeclaration != null){
|
||||
|
@ -302,15 +329,7 @@ public class CModelBuilder {
|
|||
// IASTClassSpecifier
|
||||
else if (typeSpec instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier classSpecifier = (IASTClassSpecifier) typeSpec;
|
||||
IParent classElement = createClass(parent, classSpecifier, isTemplate);
|
||||
element = (CElement) classElement;
|
||||
|
||||
// create the sub declarations
|
||||
Iterator j = classSpecifier.getDeclarations();
|
||||
while (j.hasNext()){
|
||||
IASTDeclaration subDeclaration = (IASTDeclaration)j.next();
|
||||
generateModelElements((Parent)classElement, subDeclaration);
|
||||
} // end while j
|
||||
element = createClassSpecifierElement (parent, classSpecifier, isTemplate);
|
||||
} else if (typeSpec instanceof IASTElaboratedTypeSpecifier){
|
||||
// This is not a model element, so we don't create anything here.
|
||||
// However, do we need to do anything else?
|
||||
|
|
|
@ -92,7 +92,10 @@ public class StructuralParseCallback extends QuickParseCallback{
|
|||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||
*/
|
||||
public void acceptFunctionDeclaration(IASTFunction function) {
|
||||
addElement(function);
|
||||
if(function.getOwnerTemplateDeclaration() == null)
|
||||
addElement(function);
|
||||
else if(function.getOwnerTemplateDeclaration() instanceof IASTTemplateDeclaration)
|
||||
addElement((IASTTemplateDeclaration)function.getOwnerTemplateDeclaration());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -120,7 +123,10 @@ public class StructuralParseCallback extends QuickParseCallback{
|
|||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptAbstractTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration)
|
||||
*/
|
||||
public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration) {
|
||||
addElement(abstractDeclaration);
|
||||
if(abstractDeclaration.getOwnerTemplateDeclaration() == null)
|
||||
addElement(abstractDeclaration);
|
||||
else if(abstractDeclaration.getOwnerTemplateDeclaration() instanceof IASTTemplateDeclaration)
|
||||
addElement((IASTTemplateDeclaration)abstractDeclaration.getOwnerTemplateDeclaration());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -159,16 +165,18 @@ public class StructuralParseCallback extends QuickParseCallback{
|
|||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
|
||||
*/
|
||||
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
|
||||
enterScope(compilationUnit);
|
||||
enterScope(compilationUnit);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||
*/
|
||||
public void acceptMethodDeclaration(IASTMethod method) {
|
||||
addElement(method);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
if(method.getOwnerTemplateDeclaration() == null)
|
||||
addElement(method);
|
||||
else if(method.getOwnerTemplateDeclaration() instanceof IASTTemplateDeclaration)
|
||||
addElement((IASTTemplateDeclaration)method.getOwnerTemplateDeclaration());
|
||||
} /* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
|
||||
*/
|
||||
public void acceptField(IASTField field) {
|
||||
|
@ -224,21 +232,20 @@ public class StructuralParseCallback extends QuickParseCallback{
|
|||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||
*/
|
||||
public void enterFunctionBody(IASTFunction function) {
|
||||
addElement(function);
|
||||
if(function.getOwnerTemplateDeclaration() == null)
|
||||
addElement(function);
|
||||
else if(function.getOwnerTemplateDeclaration() instanceof IASTTemplateDeclaration)
|
||||
addElement((IASTTemplateDeclaration)function.getOwnerTemplateDeclaration());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||
*/
|
||||
public void enterMethodBody(IASTMethod method) {
|
||||
addElement(method);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
|
||||
*/
|
||||
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) {
|
||||
addElement(declaration);
|
||||
if(method.getOwnerTemplateDeclaration() == null)
|
||||
addElement(method);
|
||||
else if(method.getOwnerTemplateDeclaration() instanceof IASTTemplateDeclaration)
|
||||
addElement((IASTTemplateDeclaration)method.getOwnerTemplateDeclaration());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue