diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java index 72652445592..40ef0254769 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java @@ -16,6 +16,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import junit.framework.AssertionFailedError; + import org.eclipse.cdt.core.dom.ast.ASTSignatureUtil; import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; import org.eclipse.cdt.core.dom.ast.DOMException; @@ -411,8 +413,10 @@ public class AST2BaseTest extends BaseTestCase { } protected StringBuffer[] getContents(int sections) throws IOException { - return TestSourceReader.getContentsForTest( - CTestPlugin.getDefault().getBundle(), "parser", getClass(), getName(), sections); + CTestPlugin plugin = CTestPlugin.getDefault(); + if(plugin == null) + throw new AssertionFailedError("This test must be run as a JUnit plugin test"); + return TestSourceReader.getContentsForTest(plugin.getBundle(), "parser", getClass(), getName(), sections); } protected static T assertInstance(Object o, Class clazz, Class... cs) { diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTNodeSelectorTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTNodeSelectorTest.java index 5214f4bc272..00514d9e301 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTNodeSelectorTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTNodeSelectorTest.java @@ -34,9 +34,9 @@ public class ASTNodeSelectorTest extends AST2BaseTest { return suite(ASTNodeSelectorTest.class); } - private String fCode; - private IASTTranslationUnit fTu; - private IASTNodeSelector fSelector; + protected String fCode; + protected IASTTranslationUnit fTu; + protected IASTNodeSelector fSelector; public ASTNodeSelectorTest() { } @@ -51,7 +51,7 @@ public class ASTNodeSelectorTest extends AST2BaseTest { createTranslationUnit(); } - private void createTranslationUnit() throws IOException { + protected void createTranslationUnit() throws IOException { fCode= getContents(1)[0].toString(); CodeReader codeReader = new CodeReader(fCode.toCharArray()); ScannerInfo scannerInfo = new ScannerInfo(); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMPreprocessorInformationTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMPreprocessorInformationTest.java index 7e992968a13..501b1676007 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMPreprocessorInformationTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMPreprocessorInformationTest.java @@ -188,7 +188,7 @@ public class DOMPreprocessorInformationTest extends AST2BaseTest { // #endif public void testElifWithoutCondition_bug185324() throws Exception { StringBuffer code= getContents(1)[0]; - IASTTranslationUnit tu = parse(code.toString(), ParserLanguage.CPP, false, false, true); + IASTTranslationUnit tu = parse(code.toString(), ParserLanguage.CPP, false, false); IASTPreprocessorStatement[] st = tu.getAllPreprocessorStatements(); assertEquals(3, st.length); assertTrue(st[0] instanceof IASTPreprocessorIfdefStatement); diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecFailingTest.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecFailingTest.java index b9a17971b2a..2ca06bdf816 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecFailingTest.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecFailingTest.java @@ -44,6 +44,13 @@ public class LRCPPSpecFailingTest extends AST2CPPSpecFailingTest { return ParseHelper.parse(code, language, true, checkBindings, expectedProblemBindings ); } + @Override + protected IASTTranslationUnit parse(String code, ParserLanguage lang, String[] problems) throws ParserException { + ILanguage language = lang.isCPP() ? getCPPLanguage() : getCLanguage(); + return ParseHelper.parse(code, language, problems); + } + + protected BaseExtensibleLanguage getCLanguage() { return C99Language.getDefault(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecTest.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecTest.java index 7aebd9bf17c..bc2477fecd8 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecTest.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCPPSpecTest.java @@ -44,6 +44,12 @@ public class LRCPPSpecTest extends AST2CPPSpecTest { return ParseHelper.parse(code, language, true, checkBindings, expectedProblemBindings ); } + @Override + protected IASTTranslationUnit parse(String code, ParserLanguage lang, String[] problems) throws ParserException { + ILanguage language = lang.isCPP() ? getCPPLanguage() : getCLanguage(); + return ParseHelper.parse(code, language, problems); + } + protected BaseExtensibleLanguage getCLanguage() { return C99Language.getDefault(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecFailingTest.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecFailingTest.java index 316f66a0cae..8d942aa60ed 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecFailingTest.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecFailingTest.java @@ -44,6 +44,12 @@ public class LRCSpecFailingTest extends AST2CSpecFailingTest { return ParseHelper.parse(code, language, true, checkBindings, expectedProblemBindings ); } + @Override + protected IASTTranslationUnit parse(String code, ParserLanguage lang, String[] problems) throws ParserException { + ILanguage language = lang.isCPP() ? getCPPLanguage() : getCLanguage(); + return ParseHelper.parse(code, language, problems); + } + protected BaseExtensibleLanguage getCLanguage() { return C99Language.getDefault(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecTests.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecTests.java index 5788342de39..6c3833ff6f5 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecTests.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRCSpecTests.java @@ -43,6 +43,12 @@ public class LRCSpecTests extends AST2CSpecTest { ILanguage language = lang.isCPP() ? getCPPLanguage() : getCLanguage(); return ParseHelper.parse(code, language, true, checkBindings, expectedProblemBindings ); } + + @Override + protected IASTTranslationUnit parse(String code, ParserLanguage lang, String[] problems) throws ParserException { + ILanguage language = lang.isCPP() ? getCPPLanguage() : getCLanguage(); + return ParseHelper.parse(code, language, problems); + } protected ILanguage getCLanguage() { return C99Language.getDefault(); diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRNodeSelectorTest.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRNodeSelectorTest.java index 001c04f6faf..9e47a0dc9f7 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRNodeSelectorTest.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRNodeSelectorTest.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.cdt.core.lrparser.tests; +import java.io.IOException; + import junit.framework.TestSuite; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; @@ -37,6 +39,14 @@ public class LRNodeSelectorTest extends ASTNodeSelectorTest { return ParseHelper.parse(code, language, expectNoProblems); } + @Override + protected void createTranslationUnit() throws IOException { + fCode= getContents(1)[0].toString(); + fTu = ParseHelper.parse(fCode, getCPPLanguage(), false); + fSelector= fTu.getNodeSelector(null); + } + + protected ILanguage getC99Language() { return C99Language.getDefault(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRSelectionParseTest.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRSelectionParseTest.java index efe349389a7..49f82cd7613 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRSelectionParseTest.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRSelectionParseTest.java @@ -74,7 +74,7 @@ public class LRSelectionParseTest extends AST2SelectionParseTest { String fileName = file.getLocation().toOSString(); ICodeReaderFactory fileCreator = SavedCodeReaderFactory.getInstance(); CodeReader reader = fileCreator.createCodeReaderForTranslationUnit(fileName); - return ParseHelper.parse(reader, language, scanInfo, fileCreator, expectNoProblems, true, 0); + return ParseHelper.parse(reader, language, scanInfo, fileCreator, expectNoProblems, true, 0, null); } @Override diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTaskParserTest.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTaskParserTest.java index ced82ae72d6..1882fc7a1ed 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTaskParserTest.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTaskParserTest.java @@ -35,6 +35,10 @@ public class LRTaskParserTest extends TaskParserTest { return ParseHelper.parse(code, language, expectNoProblems); } + @Override + protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, @SuppressWarnings("unused") boolean parseComments) throws ParserException { + return parse(code,lang, useGNUExtensions, expectNoProblems ); + } protected ILanguage getC99Language() { return C99Language.getDefault(); diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTests.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTests.java index 302632d0f98..72442aa4891 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTests.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/LRTests.java @@ -47,6 +47,10 @@ public class LRTests extends AST2Tests { return ParseHelper.parse(code, language, expectNoProblems); } + @Override + protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, @SuppressWarnings("unused") boolean parseComments) throws ParserException { + return parse(code,lang, useGNUExtensions, expectNoProblems ); + } protected ILanguage getC99Language() { return C99Language.getDefault(); diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/ParseHelper.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/ParseHelper.java index f3c18ea5f84..68a8c2b628b 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/ParseHelper.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/ParseHelper.java @@ -10,6 +10,9 @@ *******************************************************************************/ package org.eclipse.cdt.core.lrparser.tests; +import java.util.ArrayList; +import java.util.List; + import junit.framework.AssertionFailedError; import org.eclipse.cdt.core.dom.ICodeReaderFactory; @@ -32,54 +35,69 @@ import org.eclipse.core.runtime.CoreException; * * @author Mike Kucera */ -@SuppressWarnings("restriction") +@SuppressWarnings({"restriction", "nls"}) public class ParseHelper { static int testsRun = 0; - private static class NameResolver extends ASTVisitor { + + + static protected class NameResolver extends ASTVisitor { { shouldVisitNames = true; } - public int numProblemBindings = 0; + + public List nameList = new ArrayList(); + public List problemBindings = new ArrayList(); public int numNullBindings = 0; + @Override - public int visit( IASTName name ){ - //System.out.println("Visit Name: '" + name.toString() + "'"); + public int visit(IASTName name) { + nameList.add(name); IBinding binding = name.resolveBinding(); - if (binding instanceof IProblemBinding) { - numProblemBindings++; - //System.out.println("Problem Binding: " + name); - } - if (binding == null) { + if (binding instanceof IProblemBinding) + problemBindings.add(name.toString()); + if (binding == null) numNullBindings++; - //System.out.println("Null Binding: " + name); - } return PROCESS_CONTINUE; } + + public IASTName getName(int idx) { + if(idx < 0 || idx >= nameList.size()) + return null; + return nameList.get(idx); + } + + public int size() { + return nameList.size(); + } } public static IASTTranslationUnit parse(char[] code, ILanguage lang, boolean expectNoProblems, boolean checkBindings, int expectedProblemBindings) { CodeReader codeReader = new CodeReader(code); - return parse(codeReader, lang, new ScannerInfo(), null, expectNoProblems, checkBindings, expectedProblemBindings); + return parse(codeReader, lang, new ScannerInfo(), null, expectNoProblems, checkBindings, expectedProblemBindings, null); } public static IASTTranslationUnit parse(String code, ILanguage lang, boolean expectNoProblems, boolean checkBindings, int expectedProblemBindings) { return parse(code.toCharArray(), lang, expectNoProblems, checkBindings, expectedProblemBindings); } - public static IASTTranslationUnit parse(String code, ILanguage lang, boolean expectNoProblems) { return parse(code, lang, expectNoProblems, false, 0); } + public static IASTTranslationUnit parse(String code, ILanguage lang, String[] problems) { + CodeReader codeReader = new CodeReader(code.toCharArray()); + return parse(codeReader, lang, new ScannerInfo(), null, true, true, problems.length, problems); + } - + public static IASTTranslationUnit parse(CodeReader codeReader, ILanguage language, IScannerInfo scanInfo, - ICodeReaderFactory fileCreator, boolean expectNoProblems, boolean checkBindings, int expectedProblemBindings) { + ICodeReaderFactory fileCreator, boolean expectNoProblems, + boolean checkBindings, int expectedProblemBindings, String[] problems) { testsRun++; IASTTranslationUnit tu; @@ -90,26 +108,32 @@ public class ParseHelper { } // should parse correctly first before we look at the bindings - if(expectNoProblems ) - { - if (CVisitor.getProblems(tu).length != 0) { - throw new AssertionFailedError(" CVisitor has AST Problems " ); //$NON-NLS-1$ + if(expectNoProblems) { + + // this should work for C++ also, CVisitor.getProblems() and CPPVisitor.getProblems() are exactly the same code! + if (CVisitor.getProblems(tu).length != 0) { + throw new AssertionFailedError(" CVisitor has AST Problems " ); } - - // TODO: actually collect preprocessor problems if (tu.getPreprocessorProblems().length != 0) { - throw new AssertionFailedError(" C TranslationUnit has Preprocessor Problems " ); //$NON-NLS-1$ + throw new AssertionFailedError(" C TranslationUnit has Preprocessor Problems " ); } } // resolve all bindings if (checkBindings) { - NameResolver res = new NameResolver(); tu.accept( res ); - if (res.numProblemBindings != expectedProblemBindings ) - throw new AssertionFailedError("Expected " + expectedProblemBindings + " problem(s), encountered " + res.numProblemBindings ); //$NON-NLS-1$ //$NON-NLS-2$ + if(res.problemBindings.size() != expectedProblemBindings) + throw new AssertionFailedError("Expected " + expectedProblemBindings + " problem(s), encountered " + res.problemBindings.size()); + if(problems != null) { + for(int i = 0; i < problems.length; i++) { + String expected = problems[i]; + String actual = res.problemBindings.get(i); + if(!expected.equals(actual)) + throw new AssertionFailedError(String.format("Problem binding not equal, expected: %s, got: %s", expected, actual)); + } + } } return tu;