]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSSuiteRunner.java
Enhancements to modelled STS-tests
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / junit / v2 / ModelledSTSSuiteRunner.java
diff --git a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSSuiteRunner.java b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSSuiteRunner.java
new file mode 100644 (file)
index 0000000..a568976
--- /dev/null
@@ -0,0 +1,77 @@
+package org.simantics.tests.modelled.junit.v2;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.junit.runner.Description;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.ParentRunner;
+import org.simantics.scl.compiler.commands.CommandSession;
+import org.simantics.scl.compiler.module.coverage.CombinedCoverage;
+import org.simantics.scl.osgi.SCLOsgi;
+import org.simantics.tests.modelled.utils.ModelledSTSSuite;
+import org.simantics.tests.modelled.utils.STSSuiteTestCollector;
+
+public class ModelledSTSSuiteRunner extends ParentRunner<ModelledSTSTestRunner> {
+
+    private final ModelledSTSSuite suite;
+    private CommandSession commandSession;
+
+    public ModelledSTSSuiteRunner(ModelledSTSSuite suite) throws Exception {
+        super(ModelledSTSSuiteRunner.class);
+        this.suite = suite;
+    }
+
+    @Override
+    protected String getName() {
+        return suite.getName();
+    }
+
+    @Override
+    protected List<ModelledSTSTestRunner> getChildren() {
+        return suite.getChildren().stream().map(test -> new ModelledSTSTestRunner(test)).collect(Collectors.toList());
+    }
+
+    @Override
+    protected Description describeChild(ModelledSTSTestRunner child) {
+        return child.getDescription();
+    }
+
+    @Override
+    protected void runChild(ModelledSTSTestRunner child, RunNotifier notifier) {
+        Description description = describeChild(child);
+        if (isIgnored(child)) {
+            notifier.fireTestIgnored(description);
+        } else {
+            notifier.fireTestStarted(description);
+            try {
+                child.run(getCommandSession());
+                notifier.fireTestFinished(description);
+                STSSuiteTestCollector.setSuiteCoverage(child.getTest(), suite, getCommandSession());
+            } catch (Throwable e) {
+                notifier.fireTestFailure(new Failure(description, e));
+            }
+        }
+    }
+
+    @Override
+    protected boolean isIgnored(ModelledSTSTestRunner child) {
+        return child.isIgnored();
+    }
+
+    public void setCommandSesssion(CommandSession commandSession) {
+        this.commandSession = commandSession;
+    }
+
+    public CommandSession getCommandSession() {
+        if (commandSession == null)
+            commandSession = new CommandSession(SCLOsgi.MODULE_REPOSITORY, null);
+        return commandSession;
+    }
+
+    public CombinedCoverage getCoverage() {
+        return suite.getCoverage();
+    }
+
+}