]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSSuite.java
Enhancements to modelled STS-tests
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / utils / ModelledSTSSuite.java
diff --git a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSSuite.java b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSSuite.java
new file mode 100644 (file)
index 0000000..b856787
--- /dev/null
@@ -0,0 +1,79 @@
+package org.simantics.tests.modelled.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+import java.util.stream.Collectors;
+
+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.utils.strings.AlphanumComparator;
+
+public class ModelledSTSSuite {
+
+    private String name;
+    private List<ModelledSTSTest> children;
+    private String moduleNameFilter;
+    private List<Pattern> moduleNameFilterPatterns = new ArrayList<>();
+
+    private CoverageBuilder coverageBuilder;
+
+    ModelledSTSSuite(String name, List<ModelledSTSTest> children, String moduleNameFilter) {
+        this.name = name;
+        this.children = children;
+        this.moduleNameFilter = moduleNameFilter;
+        for (String s : moduleNameFilter.split(",")) {
+            try {
+                s = s.trim().replaceAll("\\*", "\\\\w*").toLowerCase();
+                getModuleNameFilterPatterns().add(Pattern.compile(s));
+            } catch (PatternSyntaxException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public List<ModelledSTSTest> getChildren() {
+        return children;
+    }
+
+    public List<ModelledSTSTest> getSortedChildren() {
+        return new ArrayList<>(children).stream().sorted(ModelledSTSSuite::compareTests).collect(Collectors.toList());
+    }
+
+    private static int compareTests(ModelledSTSTest test1, ModelledSTSTest test2) {
+        if (test1.getPriority() < test2.getPriority())
+            return -1;
+        else if (test1.getPriority() > test2.getPriority())
+            return 1;
+        else
+            return AlphanumComparator.COMPARATOR.compare(test1.getName(), test2.getName());
+    }
+
+    public String getModuleNameFilter() {
+        return moduleNameFilter;
+    }
+
+    public void addCoverage(List<Module> modules) {
+        if (coverageBuilder == null)
+            coverageBuilder = new CoverageBuilder();
+        for (Module module : modules)
+            coverageBuilder.addCoverage(module, true);
+    }
+
+    public CombinedCoverage getCoverage() {
+        if (coverageBuilder == null)
+            return null;
+        return coverageBuilder.getCoverage();
+    }
+
+    public List<Pattern> getModuleNameFilterPatterns() {
+        return moduleNameFilterPatterns;
+    }
+
+}