X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.tests.modelled.ui%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Fui%2FSTSTestSuiteModel.java;fp=bundles%2Forg.simantics.tests.modelled.ui%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Fui%2FSTSTestSuiteModel.java;h=976efa2c2d2a0aab10b40125ed664672c2b4f9d9;hp=569f6fbdc7a6d8df1d11fb63876624cf79f97175;hb=f03893d9b643eae3f03debf7a656edbfa5b9b501;hpb=51006ffec13cbf8e0d9c8b07212d69478e4bdd4e diff --git a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestSuiteModel.java b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestSuiteModel.java index 569f6fbdc..976efa2c2 100644 --- a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestSuiteModel.java +++ b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestSuiteModel.java @@ -3,15 +3,13 @@ package org.simantics.tests.modelled.ui; import java.io.BufferedReader; import java.io.StringReader; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; +import java.util.stream.Collectors; import org.eclipse.swt.graphics.Image; import org.simantics.Simantics; -import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.ReadRequest; @@ -19,57 +17,49 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.layer0.Layer0; import org.simantics.scl.compiler.commands.CommandSession; import org.simantics.scl.compiler.commands.TestScriptExecutor; -import org.simantics.scl.compiler.module.Module; import org.simantics.scl.compiler.module.coverage.CombinedCoverage; -import org.simantics.scl.compiler.module.coverage.CoverageBuilder; -import org.simantics.scl.compiler.module.coverage.CoverageUtils; import org.simantics.scl.compiler.module.options.ModuleCompilationOptions; import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor; import org.simantics.scl.compiler.module.repository.ModuleRepository; -import org.simantics.scl.compiler.runtime.RuntimeModule; import org.simantics.scl.osgi.SCLOsgi; import org.simantics.scl.runtime.reporting.AbstractSCLReportingHandler; import org.simantics.tests.modelled.ontology.TestsResource; -import org.simantics.utils.strings.AlphanumComparator; +import org.simantics.tests.modelled.utils.ModelledSTSSuite; +import org.simantics.tests.modelled.utils.ModelledSTSTest; +import org.simantics.tests.modelled.utils.STSSuiteTestCollector; public class STSTestSuiteModel { static class STSTest { - private final Resource test; + private final ModelledSTSTest test; + private final STSSuite parent; - private final String definition; - private final String name; private boolean executed = false; private long duration; private boolean failed = false; private boolean isRunning = false; private List output = new ArrayList<>(); - private CombinedCoverage coverage; - private int priority; - public STSTest(Resource test, STSSuite parent, String definition, String name, int executionPrioprity) { + public STSTest(ModelledSTSTest test, STSSuite parent) { this.test = test; this.parent = parent; - this.definition = definition; - this.name = name; - this.priority = executionPrioprity; } public String getName() { - return name; + return test.getName(); } public String getLabel() { StringBuilder sb = new StringBuilder(); - sb.append(name); + sb.append(getName()); if (executed || failed) sb.append(" (").append(duration).append(" ms)"); return sb.toString(); } public String getDefinition() { - return definition; + return test.getCode(); } public STSSuite getParent() { @@ -79,7 +69,7 @@ public class STSTestSuiteModel { public void execute(CommandSession session) { isRunning = true; - TestScriptExecutor executor = new TestScriptExecutor(session, new BufferedReader(new StringReader(definition)), new AbstractSCLReportingHandler() { + TestScriptExecutor executor = new TestScriptExecutor(session, new BufferedReader(new StringReader(getDefinition())), new AbstractSCLReportingHandler() { @Override public void print(String text) { @@ -95,7 +85,7 @@ public class STSTestSuiteModel { public void printError(String error) { appendOutput(error + "\n"); } - }); + }, true); long start = System.currentTimeMillis(); try { if (parent != null) @@ -124,61 +114,56 @@ public class STSTestSuiteModel { } public void setCoverage(CombinedCoverage coverage) { - this.coverage = coverage; + test.setCoverage(coverage); } public CombinedCoverage getCoverage() { - return coverage; + return test.getCoverage(); } - + + public int getPriority() { + return test.getPriority(); + } + @Override public String toString() { - return name + " [priority=" + priority + ", executed=" + executed + ", duration=" + duration + "]"; + return getName() + " [priority=" + getPriority() + ", executed=" + executed + ", duration=" + duration + "]"; + } + + public boolean isIgnored() { + return test.isIgnored(); } } static class STSSuite { - - private List moduleNameFilterPatterns = new ArrayList<>(); - private final Resource suite; - private final String name; + + private ModelledSTSSuite suite; private STSTest[] children; private int startedCount; private int errorCount; private int failureCount; - private CoverageBuilder coverageBuilder; + public int ignoredCount; - public STSSuite(Resource suite, String name, String moduleNameFilter) { + public STSSuite(ModelledSTSSuite suite) { this.suite = suite; - this.name = name; - for (String s : moduleNameFilter.split(",")) { - try { - s = s.trim().replaceAll("\\*", "\\\\w*").toLowerCase(); - moduleNameFilterPatterns.add(Pattern.compile(s)); - } catch (PatternSyntaxException e) { - e.printStackTrace(); - } - } - } - - public void children(STSTest[] children) { - this.children = children; } public STSTest[] getChildren() { + if (children == null) + children = suite.getSortedChildren().stream().map(modelledTest -> new STSTest(modelledTest, this)).collect(Collectors.toList()).toArray(new STSTest[suite.getChildren().size()]); return children; } public String getName() { - return name; + return suite.getName(); } public String getLabel() { StringBuilder sb = new StringBuilder(); - sb.append(name); + sb.append(getName()); long totalTime = 0; - if (children != null) { - for (STSTest test : children) { + if (getChildren() != null) { + for (STSTest test : getChildren()) { if (test.executed || test.failed) { totalTime += test.duration; } @@ -190,56 +175,40 @@ public class STSTestSuiteModel { } public boolean isRunning() { - boolean running = false; - if (children != null) { - for (STSTest test: children) { + if (getChildren() != null) { + for (STSTest test: getChildren()) { if (test.isRunning) { - running = true; - break; + return true; } } } - return running; + return false; } public boolean executed() { - boolean executed = true; - if (children != null) { - for (STSTest test: children) { + if (getChildren() != null) { + for (STSTest test: getChildren()) { if (!test.executed) { - executed = false; - break; + return false; } } } - return executed; + return true; } public boolean failed() { - boolean failed = false; - if (children != null) { - for (STSTest test: children) { + if (getChildren() != null) { + for (STSTest test: getChildren()) { if (test.failed) { - failed = true; - break; + return true; } } } - return failed; - } - - public void addCoverage(List modules) { - if (coverageBuilder == null) { - coverageBuilder = new CoverageBuilder(); - } - for (Module module : modules) - coverageBuilder.addCoverage(module, true); + return false; } public CombinedCoverage getCoverage() { - if (coverageBuilder == null) - return null; - return coverageBuilder.getCoverage(); + return suite.getCoverage(); } } @@ -276,7 +245,7 @@ public class STSTestSuiteModel { @Override public ModuleCompilationOptions getOptions(String moduleName) { boolean coverage = false; - for (Pattern p : suite.moduleNameFilterPatterns) { + for (Pattern p : suite.suite.getModuleNameFilterPatterns()) { if (p.matcher(moduleName.toLowerCase()).find()) { coverage = true; break; @@ -301,45 +270,23 @@ public class STSTestSuiteModel { } private void executeSuite(CommandSession session) { - for (STSTest test : suite.getChildren()) { - test.execute(session); - - Collection runtimeModules = session.getRuntimeEnvironment().getRuntimeModules(); - List modules = new ArrayList<>(runtimeModules.size()); - for (RuntimeModule module : runtimeModules) { - for (Pattern p : suite.moduleNameFilterPatterns) { - if (p.matcher(module.getModule().getName().toLowerCase()).find()) { - modules.add(module.getModule()); - } - } + if (test.isIgnored()) { + testExecuted(); + test.getParent().ignoredCount++; + continue; } - test.setCoverage(CoverageUtils.getCoverage(modules)); - suite.addCoverage(modules); - - CoverageUtils.resetCoverage(modules); - + test.execute(session); + STSSuiteTestCollector.setSuiteCoverage(test.test, suite.suite, session); testExecuted(); } - } - + private void executeTest(CommandSession session) { - test.execute(session); testExecuted(); - - Collection runtimeModules = session.getRuntimeEnvironment().getRuntimeModules(); - List modules = new ArrayList<>(runtimeModules.size()); - for (RuntimeModule module : runtimeModules) { - modules.add(module.getModule()); - } - test.setCoverage(CoverageUtils.getCoverage(modules)); - - CoverageUtils.resetCoverage(modules); - + STSSuiteTestCollector.setTestCoverage(test.test, session); } - public boolean hasChildren(Object element) { if (element instanceof STSTest) { @@ -418,29 +365,13 @@ public class STSTestSuiteModel { Layer0 L0 = Layer0.getInstance(graph); TestsResource TESTS = TestsResource.getInstance(graph); if (graph.isInstanceOf(root, TESTS.STSTest)) { - String testName = graph.getRelatedValue2(root, L0.HasName, Bindings.STRING); - String definition = graph.getRelatedValue2(root, TESTS.STSTest_definition, Bindings.STRING); - Integer executionPrioprity = graph.getRelatedValue2(root, TESTS.STSTest_executionPriority, Bindings.INTEGER); - test = new STSTest(root, null, definition, testName, executionPrioprity); + test = new STSTest(STSSuiteTestCollector.toModelledTest(graph, root), null); } else if (graph.isInstanceOf(root, TESTS.STSSuite)) { - String suiteName = graph.getRelatedValue2(root, L0.HasName, Bindings.STRING); - String moduleNameFilter = graph.getPossibleRelatedValue2(root, TESTS.STSSuite_moduleNameFilter, Bindings.STRING); - suite = new STSSuite(root, suiteName, moduleNameFilter); - List tests = new ArrayList<>(); - for (Resource test : graph.getObjects(root, L0.ConsistsOf)) { - String testName = graph.getRelatedValue2(test, L0.HasName, Bindings.STRING); - String definition = graph.getRelatedValue2(test, TESTS.STSTest_definition, Bindings.STRING); - Integer executionPrioprity = graph.getRelatedValue2(test, TESTS.STSTest_executionPriority, Bindings.INTEGER); - tests.add(new STSTest(test, suite, definition, testName, executionPrioprity)); - } - Collections.sort(tests, (o1, o2) -> { - if (o1.priority < o2.priority) - return -1; - else if (o1.priority > o2.priority) - return 1; - else return AlphanumComparator.COMPARATOR.compare(o1.name, o2.name); - }); - suite.children(tests.toArray(new STSTest[tests.size()])); + List tests = new ArrayList<>(); + for (Resource test : graph.getObjects(root, L0.ConsistsOf)) + tests.add(STSSuiteTestCollector.toModelledTest(graph, test)); + + suite = new STSSuite(STSSuiteTestCollector.toModelledSuite(graph, root, tests)); } else { throw new IllegalArgumentException(root.toString()); } @@ -467,6 +398,8 @@ public class STSTestSuiteModel { } public int getIgnoredCount() { + if (suite != null) + return suite.ignoredCount; return 0; }