1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-13 19:25:38 +02:00

Fix 137821, header files were returning true as valid source unit names. This causes certain builders to try and build them.

This commit is contained in:
Doug Schaefer 2006-04-20 22:57:14 +00:00
parent 4a3202744a
commit cd284ca6ec
2 changed files with 177 additions and 151 deletions

View file

@ -17,6 +17,7 @@ import java.util.Stack;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IInclude; import org.eclipse.cdt.core.model.IInclude;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
@ -24,160 +25,173 @@ import org.eclipse.cdt.core.testplugin.CProjectHelper;
import org.eclipse.cdt.core.testplugin.util.ExpectedStrings; import org.eclipse.cdt.core.testplugin.util.ExpectedStrings;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
/** /**
* @author Peter Graves * @author Peter Graves
* *
* This file contains a set of generic tests for the core C model's TranslationUnit * This file contains a set of generic tests for the core C model's
* class. There is nothing exotic here, mostly just sanity type tests * TranslationUnit class. There is nothing exotic here, mostly just sanity type
* tests
* *
*/ */
public class TranslationUnitTests extends TranslationUnitBaseTest { public class TranslationUnitTests extends TranslationUnitBaseTest {
/* This is a list of elements in the test .c file. It will be used /*
* in a number of places in the tests * This is a list of elements in the test .c file. It will be used in a
*/ * number of places in the tests
String[] expectedStringList= {"stdio.h", "unistd.h", "func2p", */
"globalvar", "myenum", "mystruct", "mystruct_t", "myunion", "mytype", String[] expectedStringList = { "stdio.h", "unistd.h", "func2p",
"func1", "func2", "main", "func3" }; "globalvar", "myenum", "mystruct", "mystruct_t", "myunion",
int[] expectedLines={ 12,14,17,20,23,28,32,35,42,47,53,58,65,70}; "mytype", "func1", "func2", "main", "func3" };
/* This is a list of that the types of the above list of elements is
* expected to be.
*/
int[] expectedTypes= { ICElement.C_INCLUDE, ICElement.C_INCLUDE,
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};
int[] expectedLines = { 12, 14, 17, 20, 23, 28, 32, 35, 42, 47, 53, 58, 65,
70 };
/** /*
* Constructor for TranslationUnitTests * This is a list of that the types of the above list of elements is
* @param name * expected to be.
*/ */
public TranslationUnitTests(String name) { int[] expectedTypes = { ICElement.C_INCLUDE, ICElement.C_INCLUDE,
super(name); 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 };
public static TestSuite suite() { /**
TestSuite suite= new TestSuite(TranslationUnitTests.class.getName()); * Constructor for TranslationUnitTests
*
* @param name
*/
public TranslationUnitTests(String name) {
super(name);
}
public static TestSuite suite() {
TestSuite suite = new TestSuite(TranslationUnitTests.class.getName());
suite.addTest(new TranslationUnitTests("testIsTranslationUnit")); suite.addTest(new TranslationUnitTests("testIsTranslationUnit"));
suite.addTest(new TranslationUnitTests("testGetChildren")); suite.addTest(new TranslationUnitTests("testGetChildren"));
suite.addTest(new TranslationUnitTests("testGetElement")); suite.addTest(new TranslationUnitTests("testGetElement"));
suite.addTest(new TranslationUnitTests("testBug23478A")); suite.addTest(new TranslationUnitTests("testBug23478A"));
suite.addTest(new TranslationUnitTests("testBug23478B")); suite.addTest(new TranslationUnitTests("testBug23478B"));
// TODO: suite.addTest(new TranslationUnitTests("testGetElementAtLine")); suite.addTest(new TranslationUnitTests("testIsValidSourceUnitName"));
// TODO: suite.addTest(new
// TranslationUnitTests("testGetElementAtLine"));
return suite; return suite;
} }
public static void main (String[] args){ public static void main(String[] args) {
junit.textui.TestRunner.run(suite()); junit.textui.TestRunner.run(suite());
} }
/***************************************************************************
* Simple sanity test to make sure TranslationUnit.isTranslationUnit returns
* true
*
*/
public void testIsTranslationUnit() throws CoreException,
FileNotFoundException {
ITranslationUnit myTranslationUnit;
myTranslationUnit = CProjectHelper.findTranslationUnit(testProject,
"exetest.c");
assertTrue("A TranslationUnit", myTranslationUnit != null);
}
/*** /***************************************************************************
* Simple sanity test to make sure TranslationUnit.isTranslationUnit returns true * Simple sanity tests to make sure TranslationUnit.getChildren seems to
* * basicly work
*/ */
public void testIsTranslationUnit() throws CoreException,FileNotFoundException { public void testGetChildren() throws CModelException {
ITranslationUnit myTranslationUnit; ITranslationUnit myTranslationUnit;
ICElement[] elements;
int x;
myTranslationUnit=CProjectHelper.findTranslationUnit(testProject,"exetest.c"); ExpectedStrings expectedString = new ExpectedStrings(expectedStringList);
assertTrue("A TranslationUnit", myTranslationUnit != null);
} myTranslationUnit = CProjectHelper.findTranslationUnit(testProject,
"exetest.c");
/*** if (myTranslationUnit.hasChildren()) {
* Simple sanity tests to make sure TranslationUnit.getChildren seems to elements = myTranslationUnit.getChildren();
* basicly work for (x = 0; x < elements.length; x++) {
*/ expectedString.foundString(elements[x].getElementName());
public void testGetChildren() throws CModelException { }
ITranslationUnit myTranslationUnit; }
ICElement[] elements; assertTrue("PR:23603 " + expectedString.getMissingString(),
int x; expectedString.gotAll());
assertTrue(expectedString.getExtraString(), !expectedString.gotExtra());
ExpectedStrings expectedString=new ExpectedStrings(expectedStringList); }
myTranslationUnit=CProjectHelper.findTranslationUnit(testProject,"exetest.c"); /***************************************************************************
* Simple sanity tests for the getElement() call
*/
public void testGetElement() throws CModelException {
ITranslationUnit myTranslationUnit;
ICElement myElement;
Stack missing = new Stack();
int x;
myTranslationUnit = CProjectHelper.findTranslationUnit(testProject,
"exetest.c");
for (x = 0; x < expectedStringList.length; x++) {
myElement = myTranslationUnit.getElement(expectedStringList[x]);
if (myElement == null)
missing.push(expectedStringList[x]);
else {
assertTrue("Expected:" + expectedStringList[x] + " Got:"
+ myElement.getElementName(), expectedStringList[x]
.equals(myElement.getElementName()));
}
if (myTranslationUnit.hasChildren()) { }
elements=myTranslationUnit.getChildren(); if (!missing.empty()) {
for (x=0;x<elements.length;x++) { String output = new String("PR:23603 Could not get elements: ");
expectedString.foundString(elements[x].getElementName()); while (!missing.empty())
} output += missing.pop() + " ";
} assertTrue(output, false);
assertTrue("PR:23603 " +expectedString.getMissingString(),expectedString.gotAll()); }
assertTrue(expectedString.getExtraString(),!expectedString.gotExtra());
} }
/*** /***************************************************************************
* Simple sanity tests for the getElement() call
*/
public void testGetElement() throws CModelException {
ITranslationUnit myTranslationUnit;
ICElement myElement;
Stack missing=new Stack();
int x;
myTranslationUnit=CProjectHelper.findTranslationUnit(testProject,"exetest.c");
for (x=0;x<expectedStringList.length;x++) {
myElement=myTranslationUnit.getElement(expectedStringList[x]);
if (myElement==null)
missing.push(expectedStringList[x]);
else {
assertTrue("Expected:" + expectedStringList[x] + " Got:" + myElement.getElementName(),
expectedStringList[x].equals(myElement.getElementName()));
}
}
if (!missing.empty()) {
String output=new String("PR:23603 Could not get elements: ");
while (!missing.empty())
output+=missing.pop() + " ";
assertTrue(output, false);
}
}
/***
* Simple sanity tests for the getInclude call * Simple sanity tests for the getInclude call
*/ */
public void testBug23478A() throws CModelException { public void testBug23478A() throws CModelException {
IInclude myInclude; IInclude myInclude;
int x; int x;
String includes[]={"stdio.h", "unistd.h"}; String includes[] = { "stdio.h", "unistd.h" };
ITranslationUnit myTranslationUnit=CProjectHelper.findTranslationUnit(testProject,"exetest.c"); ITranslationUnit myTranslationUnit = CProjectHelper
.findTranslationUnit(testProject, "exetest.c");
for (x=0; x < includes.length; x++) { for (x = 0; x < includes.length; x++) {
myInclude=myTranslationUnit.getInclude(includes[x]); myInclude = myTranslationUnit.getInclude(includes[x]);
if (myInclude==null) if (myInclude == null)
fail("Unable to get include: " + includes[x]); fail("Unable to get include: " + includes[x]);
else { else {
// Failed test: Include.getIncludeName() always returns ""; // Failed test: Include.getIncludeName() always returns "";
// assertTrue // assertTrue
assertTrue("PR:23478 Expected:"+ new String("") +" Got:"+ myInclude.getIncludeName(), includes[x].equals(myInclude.getIncludeName())); assertTrue("PR:23478 Expected:" + new String("") + " Got:"
+ myInclude.getIncludeName(), includes[x]
.equals(myInclude.getIncludeName()));
} }
} }
} }
/***
/***************************************************************************
* Simple sanity tests for the getIncludes call * Simple sanity tests for the getIncludes call
*/ */
public void testBug23478B() throws CModelException { public void testBug23478B() throws CModelException {
IInclude myIncludes[]; IInclude myIncludes[];
String includes[]={"stdio.h", "unistd.h"}; String includes[] = { "stdio.h", "unistd.h" };
ExpectedStrings myExp= new ExpectedStrings(includes); ExpectedStrings myExp = new ExpectedStrings(includes);
int x; int x;
ITranslationUnit myTranslationUnit=CProjectHelper.findTranslationUnit(testProject,"exetest.c"); ITranslationUnit myTranslationUnit = CProjectHelper
.findTranslationUnit(testProject, "exetest.c");
myIncludes=myTranslationUnit.getIncludes(); myIncludes = myTranslationUnit.getIncludes();
for (x=0; x < myIncludes.length; x++) { for (x = 0; x < myIncludes.length; x++) {
myExp.foundString(myIncludes[x].getIncludeName()); myExp.foundString(myIncludes[x].getIncludeName());
} }
// Failed test: Include.getIncludeName() always returns ""; // Failed test: Include.getIncludeName() always returns "";
@ -186,40 +200,48 @@ public class TranslationUnitTests extends TranslationUnitBaseTest {
assertTrue(myExp.getExtraString(), !myExp.gotExtra()); assertTrue(myExp.getExtraString(), !myExp.gotExtra());
} }
/***************************************************************************
* Simple sanity tests for the getElementAtLine() call
*/
public void testGetElementAtLine() throws CoreException {
ITranslationUnit myTranslationUnit;
ICElement myElement;
Stack missing = new Stack();
int x;
myTranslationUnit = CProjectHelper.findTranslationUnit(testProject,
"exetest.c");
for (x = 0; x < expectedStringList.length; x++) {
myElement = myTranslationUnit.getElementAtLine(expectedLines[x]);
if (myElement == null)
missing.push(expectedStringList[x]);
else {
if (expectedStringList[x].equals("mystruct_t")) {
assertTrue("PR:23603 expected:" + expectedStringList[x]
+ " Got:" + myElement.getElementName(),
expectedStringList[x].equals(myElement
.getElementName()));
} else {
assertTrue("Expected:" + expectedStringList[x] + " Got:"
+ myElement.getElementName(), expectedStringList[x]
.equals(myElement.getElementName()));
}
/*** }
* Simple sanity tests for the getElementAtLine() call
*/
public void testGetElementAtLine() throws CoreException {
ITranslationUnit myTranslationUnit;
ICElement myElement;
Stack missing=new Stack();
int x;
myTranslationUnit=CProjectHelper.findTranslationUnit(testProject,"exetest.c");
for (x=0;x<expectedStringList.length;x++) { }
myElement=myTranslationUnit.getElementAtLine(expectedLines[x]); if (!missing.empty()) {
if (myElement==null) String output = new String("PR: 23603 Could not get elements: ");
missing.push(expectedStringList[x]); while (!missing.empty())
else { output += missing.pop() + " ";
if (expectedStringList[x].equals("mystruct_t")) { assertTrue(output, false);
assertTrue("PR:23603 expected:" + expectedStringList[x] + " Got:" + myElement.getElementName(), }
expectedStringList[x].equals(myElement.getElementName())); }
} else {
assertTrue("Expected:" + expectedStringList[x] + " Got:" + myElement.getElementName(),
expectedStringList[x].equals(myElement.getElementName()));
}
} public void testIsValidSourceUnitName() {
assertTrue(CoreModel.isValidSourceUnitName(testProject.getProject(), "test.c"));
} assertFalse(CoreModel.isValidSourceUnitName(testProject.getProject(), "test.h"));
if (!missing.empty()) { assertTrue(CoreModel.isValidSourceUnitName(testProject.getProject(), "test.cc"));
String output=new String("PR: 23603 Could not get elements: "); assertFalse(CoreModel.isValidSourceUnitName(testProject.getProject(), "test.hh"));
while (!missing.empty()) }
output+=missing.pop() + " ";
assertTrue(output, false);
}
}
} }

View file

@ -233,6 +233,10 @@ public class CoreModel {
IContentType contentType = CCorePlugin.getContentType(project, name); IContentType contentType = CCorePlugin.getContentType(project, name);
if (contentType != null) { if (contentType != null) {
String id = contentType.getId(); String id = contentType.getId();
if (CCorePlugin.CONTENT_TYPE_CHEADER.equals(id)
|| CCorePlugin.CONTENT_TYPE_CXXHEADER.equals(id))
return false;
return CCorePlugin.CONTENT_TYPE_CSOURCE.equals(id) return CCorePlugin.CONTENT_TYPE_CSOURCE.equals(id)
|| CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(id) || CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(id)
|| CCorePlugin.CONTENT_TYPE_ASMSOURCE.equals(id) || CCorePlugin.CONTENT_TYPE_ASMSOURCE.equals(id)