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