package org.simantics.tests.modelled.junit.v2; import java.io.BufferedReader; import java.io.StringReader; import org.junit.runner.Description; import org.junit.runner.Runner; import org.junit.runner.notification.RunNotifier; import org.simantics.scl.compiler.commands.CommandSession; import org.simantics.scl.compiler.commands.TestScriptExecutor; import org.simantics.scl.osgi.SCLOsgi; import org.simantics.scl.runtime.SCLContext; import org.simantics.scl.runtime.reporting.SCLReportingHandler; import org.simantics.tests.modelled.utils.ModelledSTSTest; import org.simantics.tests.modelled.utils.STSSuiteTestCollector; public class ModelledSTSTestRunner extends Runner { private Description description; private ModelledSTSTest test; public ModelledSTSTestRunner(ModelledSTSTest test) { this.test = test; } public String getName() { return test.getName(); } @Override public Description getDescription() { if (description == null) description = Description.createTestDescription(ModelledSTSTestRunner.class, getName()); return description; } /** * This method is called from ModelledSTSSuite (ParentRunner) with the same * CommandSession * * @param session */ public void run(CommandSession session) { try (BufferedReader reader = new BufferedReader(new StringReader(test.getCode()))) { SCLReportingHandler handler = (SCLReportingHandler) SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER); new TestScriptExecutor(session, reader, handler, true).execute(); STSSuiteTestCollector.setTestCoverage(test, session); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void run(RunNotifier notifier) { notifier.fireTestStarted(getDescription()); try { run(new CommandSession(SCLOsgi.MODULE_REPOSITORY, null)); } finally { notifier.fireTestFinished(getDescription()); } } public boolean isIgnored() { return test.isIgnored(); } public int getPriority() { return test.getPriority(); } public ModelledSTSTest getTest() { return test; } }