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