mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-14 19:55:45 +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
|
2004-04-27 Hoda Amer
|
||||||
Partial fix for bug#57526 : [CModel] CModelElementsTest needs to test STRUCTURAL_PARSE mode as well
|
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,
|
Added StructuralCModelElementsTest to the suit with the same input as CModelElementsTest,
|
||||||
|
|
|
@ -26,9 +26,13 @@ public class AllLanguageInterfaceTests {
|
||||||
// each class being tested
|
// each class being tested
|
||||||
|
|
||||||
suite.addTest(IIncludeTests.suite());
|
suite.addTest(IIncludeTests.suite());
|
||||||
|
suite.addTest(StructuralIncludeTests.suite());
|
||||||
suite.addTest(IMacroTests.suite());
|
suite.addTest(IMacroTests.suite());
|
||||||
|
suite.addTest(StructuralMacroTests.suite());
|
||||||
suite.addTest(IStructureTests.suite());
|
suite.addTest(IStructureTests.suite());
|
||||||
|
suite.addTest(StructuralStructureTests.suite());
|
||||||
suite.addTest(ITemplateTests.suite());
|
suite.addTest(ITemplateTests.suite());
|
||||||
|
suite.addTest(StructuralTemplateTests.suite());
|
||||||
return 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);
|
List arrayElements = getTemplateMethods(tu);
|
||||||
|
arrayElements.addAll(tu.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION));
|
||||||
String[] myExpectedValues = {
|
String[] myExpectedValues = {
|
||||||
"fum",
|
"fum",
|
||||||
"scrum"
|
"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 = {
|
|
||||||
"nonVector<T>::first",
|
"nonVector<T>::first",
|
||||||
"IsGreaterThan",
"Foo::fum"
|
"IsGreaterThan",
|
||||||
|
"Foo::fum"
|
||||||
};
|
};
|
||||||
assertEquals(myExpectedValues.length, arrayElements.size());
|
assertEquals(myExpectedValues.length, arrayElements.size());
|
||||||
for(int i=0; i<myExpectedValues.length; i++) {
|
for(int i=0; i<myExpectedValues.length; i++) {
|
||||||
|
@ -197,7 +191,7 @@ public class ITemplateTests extends IntegratedCModelTest {
|
||||||
//"TemplateContainer::fum"
|
//"TemplateContainer::fum"
|
||||||
{"Bar"},
|
{"Bar"},
|
||||||
//"TemplateParameter::scrum"
|
//"TemplateParameter::scrum"
|
||||||
{"int"},
|
{"Foo"},
|
||||||
//"nonVector::first"
|
//"nonVector::first"
|
||||||
{"T"},
|
{"T"},
|
||||||
//"IsGreaterThan"
|
//"IsGreaterThan"
|
||||||
|
@ -237,7 +231,7 @@ public class ITemplateTests extends IntegratedCModelTest {
|
||||||
"nonVector<T>",
|
"nonVector<T>",
|
||||||
"ArrayOverlay<X, Y, int=16>",
|
"ArrayOverlay<X, Y, int=16>",
|
||||||
"fum<Bar>(int) : void",
|
"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?
|
"nonVector<T>::first<T>() : const T&", // TODO: where should <T> be?
|
||||||
// TODO: shouldn't signature indicate const function as well?
|
// TODO: shouldn't signature indicate const function as well?
|
||||||
"IsGreaterThan<X>(X, X) : bool",
|
"IsGreaterThan<X>(X, X) : bool",
|
||||||
|
|
|
@ -10,6 +10,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
||||||
|
@ -29,6 +30,7 @@ public abstract class IntegratedCModelTest extends TestCase {
|
||||||
private ICProject fCProject;
|
private ICProject fCProject;
|
||||||
private IFile sourceFile;
|
private IFile sourceFile;
|
||||||
private NullProgressMonitor monitor;
|
private NullProgressMonitor monitor;
|
||||||
|
private boolean structuralParse = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -78,8 +80,24 @@ public abstract class IntegratedCModelTest extends TestCase {
|
||||||
|
|
||||||
protected ITranslationUnit getTU() {
|
protected ITranslationUnit getTU() {
|
||||||
TranslationUnit tu = new TranslationUnit(fCProject, sourceFile);
|
TranslationUnit tu = new TranslationUnit(fCProject, sourceFile);
|
||||||
|
if(isStructuralParse()) {
|
||||||
|
CCorePlugin.getDefault().setStructuralParseMode(true);
|
||||||
|
}
|
||||||
// parse the translation unit to get the elements tree
|
// parse the translation unit to get the elements tree
|
||||||
Map newElement = tu.parse();
|
Map newElement = tu.parse();
|
||||||
|
CCorePlugin.getDefault().setStructuralParseMode(false);
|
||||||
return tu;
|
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);
|
checkStructs(namespace);
|
||||||
|
|
||||||
// checkTemplates(namespace);
|
checkTemplates(namespace);
|
||||||
|
|
||||||
checkArrays(tu);
|
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
|
#define size_t int
|
||||||
class B {
|
class A;
|
||||||
int b;
|
|
||||||
};
|
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_STRUCT
|
||||||
template<class Key, class Value, class SortAlgorithm=DefaultSort>
|
template<class Key, class Value, class SortAlgorithm=DefaultSort>
|
||||||
struct Map
|
struct Map
|
||||||
|
@ -16,8 +28,7 @@ template<class T> class nonVector {
|
||||||
public:
|
public:
|
||||||
nonVector() { head =new T(); }
|
nonVector() { head =new T(); }
|
||||||
int length() { return 1; }
|
int length() { return 1; }
|
||||||
T& first() { return *head; }
|
const T& first();
|
||||||
const T& first() const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// TEMPLATE_UNION
|
// TEMPLATE_UNION
|
||||||
|
@ -35,7 +46,7 @@ union ArrayOverlay {
|
||||||
class TemplateContainer {
|
class TemplateContainer {
|
||||||
// these are in an enclosing class
|
// these are in an enclosing class
|
||||||
template<class Bar> void fum(int i);
|
template<class Bar> void fum(int i);
|
||||||
template<int> void scrum(void) {};
|
template<class Foo> void scrum(void) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
// TEMPLATE_FUNCTION
|
// TEMPLATE_FUNCTION
|
||||||
|
|
|
@ -267,6 +267,19 @@ public class CModelBuilder {
|
||||||
ITemplate classTemplate = (ITemplate) element;
|
ITemplate classTemplate = (ITemplate) element;
|
||||||
classTemplate.setTemplateParameterTypes(parameterTypes);
|
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;
|
ITemplate template = null;
|
||||||
template = (ITemplate) createSimpleElement(parent, declaration, true);
|
template = (ITemplate) createSimpleElement(parent, declaration, true);
|
||||||
|
@ -289,6 +302,20 @@ public class CModelBuilder {
|
||||||
CElement element = createAbstractElement(parent, abstractDeclaration, false);
|
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{
|
private CElement createAbstractElement(Parent parent, IASTTypeSpecifierOwner abstractDeclaration, boolean isTemplate)throws ASTNotImplementedException, CModelException{
|
||||||
CElement element = null;
|
CElement element = null;
|
||||||
if(abstractDeclaration != null){
|
if(abstractDeclaration != null){
|
||||||
|
@ -302,15 +329,7 @@ public class CModelBuilder {
|
||||||
// IASTClassSpecifier
|
// IASTClassSpecifier
|
||||||
else if (typeSpec instanceof IASTClassSpecifier){
|
else if (typeSpec instanceof IASTClassSpecifier){
|
||||||
IASTClassSpecifier classSpecifier = (IASTClassSpecifier) typeSpec;
|
IASTClassSpecifier classSpecifier = (IASTClassSpecifier) typeSpec;
|
||||||
IParent classElement = createClass(parent, classSpecifier, isTemplate);
|
element = createClassSpecifierElement (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
|
|
||||||
} else if (typeSpec instanceof IASTElaboratedTypeSpecifier){
|
} else if (typeSpec instanceof IASTElaboratedTypeSpecifier){
|
||||||
// This is not a model element, so we don't create anything here.
|
// This is not a model element, so we don't create anything here.
|
||||||
// However, do we need to do anything else?
|
// 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)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||||
*/
|
*/
|
||||||
public void acceptFunctionDeclaration(IASTFunction function) {
|
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)
|
/* (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)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptAbstractTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration)
|
||||||
*/
|
*/
|
||||||
public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration) {
|
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)
|
/* (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)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
|
||||||
*/
|
*/
|
||||||
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
|
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
|
||||||
enterScope(compilationUnit);
|
enterScope(compilationUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||||
*/
|
*/
|
||||||
public void acceptMethodDeclaration(IASTMethod method) {
|
public void acceptMethodDeclaration(IASTMethod method) {
|
||||||
addElement(method);
|
if(method.getOwnerTemplateDeclaration() == null)
|
||||||
}
|
addElement(method);
|
||||||
/* (non-Javadoc)
|
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)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
|
||||||
*/
|
*/
|
||||||
public void acceptField(IASTField field) {
|
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)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||||
*/
|
*/
|
||||||
public void enterFunctionBody(IASTFunction function) {
|
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)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||||
*/
|
*/
|
||||||
public void enterMethodBody(IASTMethod method) {
|
public void enterMethodBody(IASTMethod method) {
|
||||||
addElement(method);
|
if(method.getOwnerTemplateDeclaration() == null)
|
||||||
}
|
addElement(method);
|
||||||
|
else if(method.getOwnerTemplateDeclaration() instanceof IASTTemplateDeclaration)
|
||||||
/* (non-Javadoc)
|
addElement((IASTTemplateDeclaration)method.getOwnerTemplateDeclaration());
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
|
|
||||||
*/
|
|
||||||
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) {
|
|
||||||
addElement(declaration);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue