--- /dev/null
+package org.simantics.tests.modelled;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.IOException;\r
+import java.io.StringReader;\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+import java.util.regex.Pattern;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.scl.compiler.commands.CommandSession;\r
+import org.simantics.scl.compiler.commands.TestScriptExecutor;\r
+import org.simantics.scl.compiler.module.Module;\r
+import org.simantics.scl.compiler.module.coverage.CombinedCoverage;\r
+import org.simantics.scl.compiler.module.coverage.CoverageUtils;\r
+import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;\r
+import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor;\r
+import org.simantics.scl.compiler.module.repository.ModuleRepository;\r
+import org.simantics.scl.compiler.runtime.RuntimeModule;\r
+import org.simantics.scl.osgi.SCLOsgi;\r
+import org.simantics.scl.runtime.reporting.SCLReportingHandler;\r
+import org.simantics.tests.modelled.ontology.TestsResource;\r
+\r
+public class TestsGraphUtils {\r
+\r
+ private static final String STS_TEST_PREFIX = "STSTest";\r
+ private static final String STS_SUITE_PREFIX = "STSSuite";\r
+ \r
+ private TestsGraphUtils() {}\r
+ \r
+ public static Resource createSTSTest(WriteGraph graph, Resource parent) throws DatabaseException {\r
+ String name = NameUtils.findFreshEscapedName(graph, STS_TEST_PREFIX, parent);\r
+ Resource stsTest = graph.newResource();\r
+ \r
+ Layer0 L0 = Layer0.getInstance(graph);\r
+ TestsResource TESTS = TestsResource.getInstance(graph);\r
+ \r
+ graph.claim(parent, L0.ConsistsOf, L0.PartOf, stsTest);\r
+ graph.claim(stsTest, L0.InstanceOf, TESTS.STSTest);\r
+ graph.claimLiteral(stsTest, L0.HasName, name, Bindings.STRING);\r
+ graph.claimLiteral(stsTest, TESTS.STSTest_definition, "", Bindings.STRING);\r
+ return stsTest;\r
+ }\r
+ \r
+ public static Resource createSTSSuite(WriteGraph graph, Resource parent) throws DatabaseException {\r
+ String name = NameUtils.findFreshEscapedName(graph, STS_SUITE_PREFIX, parent);\r
+ Resource stsSuite = graph.newResource();\r
+ \r
+ Layer0 L0 = Layer0.getInstance(graph);\r
+ TestsResource TESTS = TestsResource.getInstance(graph);\r
+ \r
+ graph.claim(parent, L0.ConsistsOf, L0.PartOf, stsSuite);\r
+ graph.claim(stsSuite, L0.InstanceOf, TESTS.STSSuite);\r
+ graph.claimLiteral(stsSuite, L0.HasName, name, Bindings.STRING);\r
+ return stsSuite;\r
+ }\r
+\r
+ public static CombinedCoverage runSTSTestDefinition(String definition, List<Pattern> moduleNameFilters, SCLReportingHandler handler) throws IOException {\r
+ \r
+// ModuleRepository repo = SCLOsgi.MODULE_REPOSITORY;\r
+ ModuleRepository repo = new ModuleRepository(SCLOsgi.SOURCE_REPOSITORY);\r
+ repo.setAdvisor(new ModuleCompilationOptionsAdvisor() {\r
+ \r
+ @Override\r
+ public ModuleCompilationOptions getOptions(String moduleName) {\r
+ boolean coverage = false;\r
+ for (Pattern p : moduleNameFilters) {\r
+ if (p.matcher(moduleName.toLowerCase()).find()) {\r
+ coverage = true;\r
+ break;\r
+ }\r
+ }\r
+ return new ModuleCompilationOptions(coverage);\r
+ }\r
+ });\r
+ \r
+ CommandSession session = new CommandSession(repo, handler);\r
+ TestScriptExecutor executor = new TestScriptExecutor(session, new BufferedReader(new StringReader(definition)), handler);\r
+ try {\r
+ executor.execute();\r
+ } catch (Throwable t) {\r
+ t.printStackTrace();\r
+ }\r
+ Collection<RuntimeModule> runtimeModules = session.getRuntimeEnvironment().getRuntimeModules();\r
+ List<Module> modules = new ArrayList<>(runtimeModules.size());\r
+ for (RuntimeModule module : runtimeModules) {\r
+ modules.add(module.getModule());\r
+ }\r
+ CombinedCoverage coverage = CoverageUtils.getCoverage(modules);\r
+ return coverage;\r
+ }\r
+}\r