]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSTestRunner.java
Enhancements to modelled STS-tests
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / junit / v2 / ModelledSTSTestRunner.java
diff --git a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSTestRunner.java b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSTestRunner.java
new file mode 100644 (file)
index 0000000..a2acbfc
--- /dev/null
@@ -0,0 +1,74 @@
+package org.simantics.tests.modelled.junit.v2;
+
+import java.io.BufferedReader;
+import java.io.StringReader;
+
+import org.junit.runner.Description;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunNotifier;
+import org.simantics.scl.compiler.commands.CommandSession;
+import org.simantics.scl.compiler.commands.TestScriptExecutor;
+import org.simantics.scl.osgi.SCLOsgi;
+import org.simantics.scl.runtime.SCLContext;
+import org.simantics.scl.runtime.reporting.SCLReportingHandler;
+import org.simantics.tests.modelled.utils.ModelledSTSTest;
+import org.simantics.tests.modelled.utils.STSSuiteTestCollector;
+
+public class ModelledSTSTestRunner extends Runner {
+
+    private Description description;
+    private ModelledSTSTest test;
+
+    public ModelledSTSTestRunner(ModelledSTSTest test) {
+        this.test = test;
+    }
+
+    public String getName() {
+        return test.getName();
+    }
+
+    @Override
+    public Description getDescription() {
+        if (description == null)
+            description = Description.createTestDescription(ModelledSTSTestRunner.class, getName());
+        return description;
+    }
+
+    /**
+     * This method is called from ModelledSTSSuite (ParentRunner) with the same
+     * CommandSession
+     * 
+     * @param session
+     */
+    public void run(CommandSession session) {
+        try (BufferedReader reader = new BufferedReader(new StringReader(test.getCode()))) {
+            SCLReportingHandler handler = (SCLReportingHandler) SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER);
+            new TestScriptExecutor(session, reader, handler, true).execute();
+            STSSuiteTestCollector.setTestCoverage(test, session);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public void run(RunNotifier notifier) {
+        notifier.fireTestStarted(getDescription());
+        try {
+            run(new CommandSession(SCLOsgi.MODULE_REPOSITORY, null));
+        } finally {
+            notifier.fireTestFinished(getDescription());
+        }
+    }
+
+    public boolean isIgnored() {
+        return test.isIgnored();
+    }
+
+    public int getPriority() {
+        return test.getPriority();
+    }
+
+    public ModelledSTSTest getTest() {
+        return test;
+    }
+}