From 3b26dc26c474972bfb54793fd3db0368583300ae Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Wed, 30 Sep 2015 19:45:36 -0600 Subject: [PATCH] Set up QML parser tests using TestSourceReader. Change-Id: I40a3ef8dcf53d6189a980ae6ae7128746867c70f --- .../META-INF/MANIFEST.MF | 8 ++- .../qt/core/qml/tests/AbstractParserTest.java | 49 +++++-------------- .../cdt/qt/core/qml/tests/Activator.java | 25 ++++++++++ .../cdt/qt/core/qml/tests/QMLParserTest.java | 19 ++----- 4 files changed, 47 insertions(+), 54 deletions(-) create mode 100644 qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/Activator.java diff --git a/qt/org.eclipse.cdt.qt.core.tests/META-INF/MANIFEST.MF b/qt/org.eclipse.cdt.qt.core.tests/META-INF/MANIFEST.MF index 48f301dacd9..c974cf9a93c 100644 --- a/qt/org.eclipse.cdt.qt.core.tests/META-INF/MANIFEST.MF +++ b/qt/org.eclipse.cdt.qt.core.tests/META-INF/MANIFEST.MF @@ -4,7 +4,11 @@ Bundle-Name: QML Tests Bundle-SymbolicName: org.eclipse.cdt.qt.core.tests Bundle-Version: 2.0.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.junit, +Require-Bundle: org.eclipse.osgi;bundle-version="3.10.100", + org.junit, org.antlr.runtime;bundle-version="4.5.1", - org.eclipse.cdt.qt.core;bundle-version="2.0.0" + org.eclipse.cdt.qt.core;bundle-version="2.0.0", + org.eclipse.cdt.core.tests;bundle-version="5.4.0" Bundle-ClassPath: . +Bundle-Activator: org.eclipse.cdt.qt.core.qml.tests.Activator +Bundle-ActivationPolicy: lazy diff --git a/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/AbstractParserTest.java b/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/AbstractParserTest.java index 86e5b22e622..db06a625b74 100644 --- a/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/AbstractParserTest.java +++ b/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/AbstractParserTest.java @@ -1,46 +1,19 @@ package org.eclipse.cdt.qt.core.qml.tests; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.io.IOException; + +import org.eclipse.cdt.core.testplugin.util.TestSourceReader; +import org.junit.Rule; +import org.junit.rules.TestName; public class AbstractParserTest { - // TODO I don't think this really works especially on Hudson. - // cdt.core.tests has TestSourceReader that is more complete. - public static String extract() throws Exception { - StackTraceElement element = Thread.currentThread().getStackTrace()[2]; - String className = element.getClassName(); - int lineNumber = element.getLineNumber(); - Class cls = Class.forName(className); - String fqn = className.replace('.', '/'); - fqn = fqn.indexOf("$") == -1 ? fqn : fqn.substring(0, fqn.indexOf("$")); //$NON-NLS-1$ //$NON-NLS-2$ - String srcFile = "/" + fqn + ".java"; //$NON-NLS-1$ //$NON-NLS-2$ - StringBuffer code = new StringBuffer(); - Pattern pattern = Pattern.compile("\\s*//\\s*(.*)"); //$NON-NLS-1$ - boolean inComment = false; - try (BufferedReader reader = new BufferedReader(new InputStreamReader(cls.getResourceAsStream(srcFile)))) { - int n = 0; - for (String line = reader.readLine(); line != null; line = reader.readLine()) { - if (++n >= lineNumber) { - return code.toString(); - } else { - Matcher matcher = pattern.matcher(line); - if (matcher.matches()) { - if (!inComment) { - code = new StringBuffer(); - } - inComment = true; - code.append(matcher.group(1)); - code.append('\n'); - } else { - inComment = false; - } - } - } - } - return null; + @Rule + public TestName testName = new TestName(); + + protected CharSequence getComment() throws IOException { + return TestSourceReader.getContentsForTest(Activator.getBundle(), "src", getClass(), testName.getMethodName(), //$NON-NLS-1$ + 1)[0]; } } diff --git a/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/Activator.java b/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/Activator.java new file mode 100644 index 00000000000..19b27852459 --- /dev/null +++ b/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/Activator.java @@ -0,0 +1,25 @@ +package org.eclipse.cdt.qt.core.qml.tests; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class Activator implements BundleActivator { + + private static BundleContext context; + + @Override + public void start(BundleContext context) throws Exception { + Activator.context = context; + } + + @Override + public void stop(BundleContext context) throws Exception { + Activator.context = null; + } + + public static Bundle getBundle() { + return context != null ? context.getBundle() : null; + } + +} diff --git a/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/QMLParserTest.java b/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/QMLParserTest.java index 1428f6823e0..1dcb10d5fdb 100644 --- a/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/QMLParserTest.java +++ b/qt/org.eclipse.cdt.qt.core.tests/src/org/eclipse/cdt/qt/core/qml/tests/QMLParserTest.java @@ -21,11 +21,10 @@ import org.junit.Test; public class QMLParserTest extends AbstractParserTest { - public void runParser(String code, QMLListener listener) throws Exception { - ANTLRInputStream input = new ANTLRInputStream(code); + public void runParser(CharSequence code, QMLListener listener) throws Exception { + ANTLRInputStream input = new ANTLRInputStream(code.toString()); QMLLexer lexer = new QMLLexer(input); lexer.addErrorListener(new ANTLRErrorListener() { - @Override public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { @@ -35,22 +34,16 @@ public class QMLParserTest extends AbstractParserTest { @Override public void reportContextSensitivity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, int prediction, ATNConfigSet configs) { - // TODO Auto-generated method stub - } @Override public void reportAttemptingFullContext(Parser recognizer, DFA dfa, int startIndex, int stopIndex, BitSet conflictingAlts, ATNConfigSet configs) { - // TODO Auto-generated method stub - } @Override public void reportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, boolean exact, BitSet ambigAlts, ATNConfigSet configs) { - // TODO Auto-generated method stub - } }); CommonTokenStream tokens = new CommonTokenStream(lexer); @@ -81,15 +74,13 @@ public class QMLParserTest extends AbstractParserTest { parser.qmlProgram(); } - // testCode + // testCode; @Test - @Ignore + @Ignore // the test doesn't pass yet. public void testCodeExtract() throws Exception { - // see if you can use TestSourceReader out of the cdt.core.tests plugin - runParser(extract(), new AbstractQMLListener() { + runParser(getComment(), new AbstractQMLListener() { @Override public void exitQmlProgram(QmlProgramContext ctx) { - } }); }