1 package org.simantics.tests.modelled.utils;
3 import java.util.ArrayList;
4 import java.util.Comparator;
5 import java.util.HashSet;
6 import java.util.LinkedList;
10 import java.util.TreeMap;
11 import java.util.regex.Pattern;
12 import java.util.regex.PatternSyntaxException;
14 import org.simantics.scl.compiler.module.Module;
15 import org.simantics.scl.compiler.module.coverage.CombinedCoverage;
16 import org.simantics.scl.compiler.module.coverage.CoverageBuilder;
17 import org.simantics.utils.strings.AlphanumComparator;
19 public class ModelledSTSSuite {
22 private List<ModelledSTSTest> children;
24 private String moduleNameFilter;
25 private List<Pattern> moduleNameFilterPatterns = new ArrayList<>();
27 private CoverageBuilder coverageBuilder;
28 private Map<String, String> variables;
30 ModelledSTSSuite(String name, List<ModelledSTSTest> children, String moduleNameFilter, int priority, Map<String, String> variables) {
32 this.priority = priority;
33 this.children = children;
34 this.variables = variables;
35 this.moduleNameFilter = moduleNameFilter;
36 for (String s : moduleNameFilter.split(",")) {
38 s = s.trim().replaceAll("\\*", "\\\\w*").toLowerCase();
39 getModuleNameFilterPatterns().add(Pattern.compile(s));
40 } catch (PatternSyntaxException e) {
46 public String getName() {
50 public List<ModelledSTSTest> getChildren() {
54 static Comparator<ModelledSTSTest> comparator = (test1, test2) -> compareTests(test1, test2);
56 public List<ModelledSTSTest> getSortedChildren() {
57 Set<ModelledSTSTest> testsWithDeps = new HashSet<>();
58 // This TreeMap sorts the tests with the comparator
59 TreeMap<ModelledSTSTest, String> sortedTests = new TreeMap<>(comparator);
60 for (ModelledSTSTest test : getChildren()) {
61 Set<String> testDependencies = test.getDependencies();
62 if (testDependencies.isEmpty()) {
63 // First tests that have no dependencies
64 sortedTests.put(test, test.getName());
66 // These are resolved later
67 testsWithDeps.add(test);
71 // Construct a LinkedList that is returned as a result
72 LinkedList<ModelledSTSTest> results = new LinkedList<>(sortedTests.keySet());
74 // Set<ModelledSTSTest> temp = new HashSet<>(testsWithDeps);
75 // Now resolve tests with dependencies
76 for (ModelledSTSTest testWithDep : testsWithDeps) {
77 boolean satisfied = true;
78 for (String dep : testWithDep.getDependencies()) {
79 if (!sortedTests.containsValue(dep)) {
82 testWithDep.resolveDependency(dep);
86 results.addLast(testWithDep);
87 sortedTests.put(testWithDep, testWithDep.getName());
90 System.out.println(testWithDep.getName() + " not satisfied");
96 private static int compareTests(ModelledSTSTest test1, ModelledSTSTest test2) {
97 if (test1.getPriority() < test2.getPriority())
99 else if (test1.getPriority() > test2.getPriority())
102 return AlphanumComparator.COMPARATOR.compare(test1.getName(), test2.getName());
105 public String getModuleNameFilter() {
106 return moduleNameFilter;
109 public void addCoverage(List<Module> modules) {
110 if (coverageBuilder == null)
111 coverageBuilder = new CoverageBuilder();
112 for (Module module : modules)
113 coverageBuilder.addCoverage(module, true);
116 public CombinedCoverage getCoverage() {
117 if (coverageBuilder == null)
119 return coverageBuilder.getCoverage();
122 public List<Pattern> getModuleNameFilterPatterns() {
123 return moduleNameFilterPatterns;
126 public int getPriority() {