epl context and fixed test, eunit module interface
diff --git a/plugins/org.eclipse.epsilon.epl.engine/META-INF/MANIFEST.MF b/plugins/org.eclipse.epsilon.epl.engine/META-INF/MANIFEST.MF
index 3193203..0818170 100644
--- a/plugins/org.eclipse.epsilon.epl.engine/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epsilon.epl.engine/META-INF/MANIFEST.MF
@@ -12,5 +12,6 @@
org.eclipse.epsilon.epl.combinations,
org.eclipse.epsilon.epl.dom,
org.eclipse.epsilon.epl.execute,
+ org.eclipse.epsilon.epl.execute.context,
org.eclipse.epsilon.epl.parse
Automatic-Module-Name: org.eclipse.epsilon.epl.engine
diff --git a/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/EplModule.java b/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/EplModule.java
index 231bbc9..46d4b05 100644
--- a/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/EplModule.java
+++ b/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/EplModule.java
@@ -12,6 +12,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Optional;
import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.Lexer;
@@ -24,14 +25,14 @@
import org.eclipse.epsilon.eol.dom.ExecutableBlock;
import org.eclipse.epsilon.eol.dom.Import;
import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
-import org.eclipse.epsilon.eol.execute.context.EolContext;
-import org.eclipse.epsilon.eol.execute.context.IEolContext;
import org.eclipse.epsilon.epl.dom.Cardinality;
import org.eclipse.epsilon.epl.dom.Domain;
import org.eclipse.epsilon.epl.dom.Pattern;
import org.eclipse.epsilon.epl.dom.Role;
import org.eclipse.epsilon.epl.execute.PatternMatchModel;
import org.eclipse.epsilon.epl.execute.PatternMatcher;
+import org.eclipse.epsilon.epl.execute.context.EplContext;
+import org.eclipse.epsilon.epl.execute.context.IEplContext;
import org.eclipse.epsilon.epl.parse.EplLexer;
import org.eclipse.epsilon.epl.parse.EplParser;
import org.eclipse.epsilon.erl.ErlModule;
@@ -53,6 +54,14 @@
module.execute();
}
+ public EplModule() {
+ this(null);
+ }
+
+ protected EplModule(IEplContext context) {
+ super(context != null ? context : new EplContext());
+ }
+
@Override
protected Lexer createLexer(ANTLRInputStream inputStream) {
return new EplLexer(inputStream);
@@ -132,7 +141,14 @@
public Object executeImpl() throws EolRuntimeException {
execute(getPre(), getContext());
- PatternMatcher patternMatcher = new PatternMatcher();
+ PatternMatcher patternMatcher = null;
+ if (getContext().getPatternMatcher() == null) {
+ patternMatcher = new PatternMatcher();
+ getContext().setPatternMatcher(patternMatcher);
+ } else {
+ patternMatcher = getContext().getPatternMatcher();
+ }
+
PatternMatchModel matchModel = null;
try {
int loops = 1;
@@ -154,6 +170,8 @@
execute(getPost(), getContext());
+ getContext().setPatternMatchTrace(matchModel);
+
return matchModel;
}
@@ -206,4 +224,9 @@
this.patternMatchModelName = patternMatchModelName;
}
+ @Override
+ public IEplContext getContext() {
+ return (IEplContext) super.getContext();
+ }
+
}
diff --git a/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/execute/context/EplContext.java b/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/execute/context/EplContext.java
new file mode 100644
index 0000000..2f397a1
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/execute/context/EplContext.java
@@ -0,0 +1,32 @@
+package org.eclipse.epsilon.epl.execute.context;
+
+import org.eclipse.epsilon.epl.execute.PatternMatchModel;
+import org.eclipse.epsilon.epl.execute.PatternMatcher;
+import org.eclipse.epsilon.erl.execute.context.ErlContext;
+
+public class EplContext extends ErlContext implements IEplContext {
+
+ protected PatternMatcher matcher;
+ protected PatternMatchModel matchModel;
+
+ @Override
+ public void setPatternMatcher(PatternMatcher matcher) {
+ this.matcher = matcher;
+ }
+
+ @Override
+ public void setPatternMatchTrace(PatternMatchModel model) {
+ this.matchModel = model;
+ }
+
+ @Override
+ public PatternMatcher getPatternMatcher() {
+ return this.matcher;
+ }
+
+ @Override
+ public PatternMatchModel getPatternMatchTrace() {
+ return this.matchModel;
+ }
+
+}
diff --git a/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/execute/context/IEplContext.java b/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/execute/context/IEplContext.java
new file mode 100644
index 0000000..db9388d
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.epl.engine/src/org/eclipse/epsilon/epl/execute/context/IEplContext.java
@@ -0,0 +1,16 @@
+package org.eclipse.epsilon.epl.execute.context;
+
+import org.eclipse.epsilon.epl.execute.PatternMatchModel;
+import org.eclipse.epsilon.epl.execute.PatternMatcher;
+import org.eclipse.epsilon.erl.execute.context.IErlContext;
+
+public interface IEplContext extends IErlContext {
+
+ void setPatternMatcher(PatternMatcher matcher);
+
+ PatternMatcher getPatternMatcher();
+
+ PatternMatchModel getPatternMatchTrace();
+
+ void setPatternMatchTrace(PatternMatchModel model);
+}
diff --git a/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/EUnitModule.java b/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/EUnitModule.java
index 9fafe04..7a0d2f0 100644
--- a/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/EUnitModule.java
+++ b/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/EUnitModule.java
@@ -39,7 +39,7 @@
import org.eclipse.epsilon.internal.eunit.util.Pair;
import org.eclipse.epsilon.internal.eunit.xml.EUnitXMLFormatter;
-public class EUnitModule extends EolModule {
+public class EUnitModule extends EolModule implements IEUnitModule {
private static final String MODEL_EXCLUSIVE_BINDING_ANNOTATION_NAME = "onlyWith";
private static final String MODEL_BINDING_ANNOTATION_NAME = "with";
@@ -67,30 +67,37 @@
this.getContext().getOperationContributorRegistry().add(new ExtraEUnitOperationContributor());
}
+ @Override
public ArrayList<Operation> getTests() {
return collectOperationsAnnotatedWith("Test", getOperationsAnnotatedWith("test"));
}
+ @Override
public ArrayList<Operation> getInlineModelOperations() {
return collectOperationsAnnotatedWith("Model", getOperationsAnnotatedWith("model"));
}
+ @Override
public ArrayList<Operation> getSetups() {
return collectOperationsAnnotatedWith("Before", getOperationsAnnotatedWith("setup"));
}
+ @Override
public ArrayList<Operation> getTeardowns() {
return collectOperationsAnnotatedWith("After", getOperationsAnnotatedWith("teardown"));
}
+ @Override
public ArrayList<Operation> getSuiteSetups() {
return collectOperationsAnnotatedWith("BeforeClass", getOperationsAnnotatedWith("suitesetup"));
}
+ @Override
public ArrayList<Operation> getSuiteTeardowns() {
return collectOperationsAnnotatedWith("AfterClass", getOperationsAnnotatedWith("suiteteardown"));
}
+ @Override
public List<Pair<Operation, String>> getDataVariableNames() {
final List<Pair<Operation, String>> results = new ArrayList<>();
for (Operation op : getOperations()) {
@@ -109,6 +116,7 @@
return results;
}
+ @Override
public boolean isAnnotatedAs(Operation operation, String annotation) {
try {
return operation.hasAnnotation(annotation);
@@ -130,6 +138,7 @@
return null;
}
+ @Override
public EUnitTest getSuiteRoot() throws EolRuntimeException {
// We're stricter when running EUnit than with the other E*L languages:
// we will abort test execution if the EUnit module had any parse problems
@@ -153,6 +162,7 @@
return suiteRoot;
}
+ @Override
public void runSuite(EUnitTest node) throws EolRuntimeException {
if (node.getResult().equals(EUnitTestResultType.SKIPPED)) {
// The test case is to be skipped
@@ -521,10 +531,12 @@
/* EVENT NOTIFICATION METHODS */
+ @Override
public boolean addTestListener(EUnitTestListener listener) {
return testListeners.add(listener);
}
+ @Override
public boolean removeTestListener(EUnitTestListener listener) {
return testListeners.remove(listener);
}
@@ -543,13 +555,13 @@
/* OPERATION FILTERING */
- @SuppressWarnings("rawtypes")
- public List getSelectedOperations() {
+ @Override
+ public List<?> getSelectedOperations() {
return selectedOperations;
}
- @SuppressWarnings("rawtypes")
- public void setSelectedOperations(List attribute) throws EolRuntimeException {
+ @Override
+ public void setSelectedOperations(List<?> attribute) throws EolRuntimeException {
this.selectedOperations = attribute;
// Scan the test tree and mark entries as skipped as necessary
@@ -597,6 +609,7 @@
* By default, it is the current directory. If <code>null</code>,
* no report will be written.
*/
+ @Override
public void setReportDirectory(File reportFile) {
this.reportDirectory = reportFile;
}
@@ -605,6 +618,7 @@
* Returns the destination directory for the JUnit-style XML report.
* For details about possible values, see {@link #setReportDirectory(File)}.
*/
+ @Override
public File getReportDirectory() {
return reportDirectory;
}
@@ -620,6 +634,7 @@
* Returns the "class name" to be used for this module in JUnit-style reports.
* It is the basename of the .eunit file, without the extension.
*/
+ @Override
public String getClassName() {
final String filename = EUnitModule.getBasename(this);
final int lastDot = filename.lastIndexOf('.');
@@ -629,6 +644,7 @@
/**
* Returns the package name to use in the reports. By default, it is {@link #DEFAULT_PACKAGE}.
*/
+ @Override
public String getPackage() {
return packageName;
}
@@ -636,6 +652,7 @@
/**
* Changes the package name to use in the reports. By default, it is {@link #DEFAULT_PACKAGE}.
*/
+ @Override
public void setPackage(String packageName) {
this.packageName = packageName;
}
@@ -643,6 +660,7 @@
/**
* Returns the logical name of this module as if it was a Java class, for the JUnit-style reports.
*/
+ @Override
public String getQualifiedName() {
return getPackage() + "." + getClassName();
}
diff --git a/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/IEUnitModule.java b/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/IEUnitModule.java
new file mode 100644
index 0000000..ce3d518
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.eunit.engine/src/org/eclipse/epsilon/eunit/IEUnitModule.java
@@ -0,0 +1,54 @@
+package org.eclipse.epsilon.eunit;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.epsilon.eol.IEolModule;
+import org.eclipse.epsilon.eol.dom.Operation;
+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.internal.eunit.util.Pair;
+
+public interface IEUnitModule extends IEolModule {
+
+ void runSuite(EUnitTest node) throws EolRuntimeException;
+
+ EUnitTest getSuiteRoot() throws EolRuntimeException;
+
+ boolean isAnnotatedAs(Operation operation, String annotation);
+
+ List<Pair<Operation, String>> getDataVariableNames();
+
+ ArrayList<Operation> getSuiteTeardowns();
+
+ ArrayList<Operation> getSuiteSetups();
+
+ ArrayList<Operation> getTeardowns();
+
+ ArrayList<Operation> getSetups();
+
+ ArrayList<Operation> getInlineModelOperations();
+
+ ArrayList<Operation> getTests();
+
+ String getQualifiedName();
+
+ void setPackage(String packageName);
+
+ String getPackage();
+
+ File getReportDirectory();
+
+ void setReportDirectory(File reportFile);
+
+ void setSelectedOperations(List<?> attribute) throws EolRuntimeException;
+
+ List<?> getSelectedOperations();
+
+ boolean removeTestListener(EUnitTestListener listener);
+
+ boolean addTestListener(EUnitTestListener listener);
+
+ String getClassName();
+
+}
diff --git a/tests/org.eclipse.epsilon.epl.engine.test.acceptance/src/org/eclipse/epsilon/epl/engine/test/acceptance/EplTests.java b/tests/org.eclipse.epsilon.epl.engine.test.acceptance/src/org/eclipse/epsilon/epl/engine/test/acceptance/EplTests.java
index 4a50b76..11012ad 100644
--- a/tests/org.eclipse.epsilon.epl.engine.test.acceptance/src/org/eclipse/epsilon/epl/engine/test/acceptance/EplTests.java
+++ b/tests/org.eclipse.epsilon.epl.engine.test.acceptance/src/org/eclipse/epsilon/epl/engine/test/acceptance/EplTests.java
@@ -20,7 +20,6 @@
import org.eclipse.epsilon.epl.execute.PatternMatchModel;
import org.junit.Test;
-@SuppressWarnings("unchecked")
public class EplTests {
protected PatternMatchModel patternMatchModel = null;
@@ -36,7 +35,7 @@
PlainXmlModel model = new PlainXmlModel();
model.setName("M");
- model.setFile(new File(EplTests.class.getResource("test.xml").toURI()));
+ model.setFile(new File(EplTests.class.getResource("test.xml").getFile()));
model.load();
module.getContext().getModelRepository().addModel(model);