]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSRunner.java
Enhancements to modelled STS-tests
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / junit / v2 / ModelledSTSRunner.java
diff --git a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSRunner.java b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSRunner.java
new file mode 100644 (file)
index 0000000..c74f6ef
--- /dev/null
@@ -0,0 +1,81 @@
+package org.simantics.tests.modelled.junit.v2;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.RunListener;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.ParentRunner;
+import org.junit.runners.model.InitializationError;
+import org.simantics.Simantics;
+import org.simantics.db.testing.common.AcornTests;
+import org.simantics.scl.compiler.commands.CommandSession;
+import org.simantics.scl.osgi.SCLOsgi;
+import org.simantics.tests.modelled.utils.STSSuiteTestCollector;
+
+public class ModelledSTSRunner extends ParentRunner<ModelledSTSSuiteRunner> {
+
+    private CommandSession commandSession;
+
+    public ModelledSTSRunner(Class<?> testClass) throws Exception {
+        super(testClass);
+        initialize0();
+    }
+
+    @Override
+    protected List<ModelledSTSSuiteRunner> getChildren() {
+        return STSSuiteTestCollector.collectTests().stream().map(suite -> {
+            try {
+                return new ModelledSTSSuiteRunner(suite);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    protected Description describeChild(ModelledSTSSuiteRunner child) {
+        return child.getDescription();
+    }
+
+    @Override
+    public void run(RunNotifier notifier) {
+        notifier.addListener(new RunListener() {
+
+            @Override
+            public void testRunFinished(Result result) throws Exception {
+                deinitialize0();
+            }
+        });
+        super.run(notifier);
+    }
+
+    @Override
+    protected void runChild(ModelledSTSSuiteRunner child, RunNotifier notifier) {
+        child.setCommandSesssion(commandSession);
+        child.run(notifier);
+        // TODO: Add coverage reporting to ModelledSTSRunner
+//        CombinedCoverage cover = child.getCoverage();
+//        CoverageBuilder b = new CoverageBuilder();
+    }
+
+    public void initialize() throws InitializationError {
+    }
+
+    public void deinitialize() throws Exception {
+    }
+
+    private void initialize0() throws Exception {
+        AcornTests.newSimanticsWorkspace(null, null);
+        this.commandSession = new CommandSession(SCLOsgi.MODULE_REPOSITORY, null);
+        initialize();
+    }
+
+    private void deinitialize0() throws Exception {
+        deinitialize();
+        Simantics.shutdown(new NullProgressMonitor());
+    }
+}