]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/TestsGraphUtils.java
Simantics integration STS
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / TestsGraphUtils.java
1 package org.simantics.tests.modelled;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.StringReader;
6 import java.nio.charset.StandardCharsets;
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.List;
10 import java.util.regex.Pattern;
11
12 import org.simantics.databoard.Bindings;
13 import org.simantics.db.ReadGraph;
14 import org.simantics.db.Resource;
15 import org.simantics.db.WriteGraph;
16 import org.simantics.db.common.utils.NameUtils;
17 import org.simantics.db.exception.DatabaseException;
18 import org.simantics.layer0.Layer0;
19 import org.simantics.scl.compiler.commands.CommandSession;
20 import org.simantics.scl.compiler.commands.TestScriptExecutor;
21 import org.simantics.scl.compiler.module.Module;
22 import org.simantics.scl.compiler.module.coverage.CombinedCoverage;
23 import org.simantics.scl.compiler.module.coverage.CoverageUtils;
24 import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
25 import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor;
26 import org.simantics.scl.compiler.module.repository.ModuleRepository;
27 import org.simantics.scl.compiler.runtime.RuntimeModule;
28 import org.simantics.scl.osgi.SCLOsgi;
29 import org.simantics.scl.runtime.reporting.SCLReportingHandler;
30 import org.simantics.tests.modelled.ontology.TestsResource;
31
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 public class TestsGraphUtils {
36
37     private static final Logger LOGGER = LoggerFactory.getLogger(TestsGraphUtils.class);
38
39     private static final String STS_TEST_PREFIX = "STSTest";
40     private static final String STS_SUITE_PREFIX = "STSSuite";
41     private static final String STS_VARIABLE_PREFIX = "STSVariable";
42
43     private TestsGraphUtils() {}
44
45     public static Resource createSTSVariable(WriteGraph graph, Resource parent) throws DatabaseException {
46         String name = NameUtils.findFreshEscapedName(graph, STS_VARIABLE_PREFIX, parent);
47         Resource stsVariable = graph.newResource();
48
49         Layer0 L0 = Layer0.getInstance(graph);
50         TestsResource TESTS = TestsResource.getInstance(graph);
51
52         graph.claim(parent, L0.ConsistsOf, L0.PartOf, stsVariable);
53         graph.claim(stsVariable, L0.InstanceOf, TESTS.STSVariable);
54         graph.claimLiteral(stsVariable, L0.HasName, name, Bindings.STRING);
55         graph.claimLiteral(stsVariable, TESTS.STSVariable_definition, "", Bindings.STRING);
56         return stsVariable;
57     }
58
59     public static Resource createSTSTest(WriteGraph graph, Resource parent) throws DatabaseException {
60         String name = NameUtils.findFreshEscapedName(graph, STS_TEST_PREFIX, parent);
61         Resource stsTest = graph.newResource();
62
63         Layer0 L0 = Layer0.getInstance(graph);
64         TestsResource TESTS = TestsResource.getInstance(graph);
65
66         graph.claim(parent, L0.ConsistsOf, L0.PartOf, stsTest);
67         graph.claim(stsTest, L0.InstanceOf, TESTS.STSTest);
68         graph.claimLiteral(stsTest, L0.HasName, name, Bindings.STRING);
69         graph.claimLiteral(stsTest, TESTS.STSTest_definition, "", Bindings.STRING);
70         return stsTest;
71     }
72
73     public static Resource createSTSSuite(WriteGraph graph, Resource parent) throws DatabaseException {
74         String name = NameUtils.findFreshEscapedName(graph, STS_SUITE_PREFIX, parent);
75         Resource stsSuite = graph.newResource();
76
77         Layer0 L0 = Layer0.getInstance(graph);
78         TestsResource TESTS = TestsResource.getInstance(graph);
79
80         graph.claim(parent, L0.ConsistsOf, L0.PartOf, stsSuite);
81         graph.claim(stsSuite, L0.InstanceOf, TESTS.STSSuite);
82         graph.claimLiteral(stsSuite, L0.HasName, name, Bindings.STRING);
83         return stsSuite;
84     }
85
86     public static CombinedCoverage runSTSTestDefinition(String definition, List<Pattern> moduleNameFilters, SCLReportingHandler handler) throws IOException {
87
88 //        ModuleRepository repo = SCLOsgi.MODULE_REPOSITORY;
89         ModuleRepository repo = new ModuleRepository(SCLOsgi.SOURCE_REPOSITORY);
90         repo.setAdvisor(new ModuleCompilationOptionsAdvisor() {
91
92             @Override
93             public ModuleCompilationOptions getOptions(String moduleName) {
94                 boolean coverage = false;
95                 for (Pattern p : moduleNameFilters) {
96                     if (p.matcher(moduleName.toLowerCase()).find()) {
97                         coverage = true;
98                         break;
99                     }
100                 }
101                 return new ModuleCompilationOptions(coverage);
102             }
103         });
104
105         CommandSession session = new CommandSession(repo, handler);
106         TestScriptExecutor executor = new TestScriptExecutor(session, new BufferedReader(new StringReader(definition)), handler);
107         try {
108             executor.execute();
109         } catch (Throwable t) {
110             LOGGER.error("Failed to execute test definition:\n{}", definition, t);
111         }
112         Collection<RuntimeModule> runtimeModules = session.getRuntimeEnvironment().getRuntimeModules();
113         List<Module> modules = new ArrayList<>(runtimeModules.size());
114         for (RuntimeModule module : runtimeModules) {
115             modules.add(module.getModule());
116         }
117         CombinedCoverage coverage = CoverageUtils.getCoverage(modules);
118         return coverage;
119     }
120
121     public static byte[] stsTestContentDump(ReadGraph graph, Resource test) throws DatabaseException {
122         TestsResource TESTS = TestsResource.getInstance(graph);
123         String def = graph.getRelatedValue(test, TESTS.STSTest_definition, Bindings.STRING);
124         return def.getBytes(StandardCharsets.UTF_8);
125     }
126
127 }