+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());
+ }
+}