b856787cfc560c4c634e471909cdc86e48d49bdb
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / utils / ModelledSTSSuite.java
1 package org.simantics.tests.modelled.utils;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.regex.Pattern;
6 import java.util.regex.PatternSyntaxException;
7 import java.util.stream.Collectors;
8
9 import org.simantics.scl.compiler.module.Module;
10 import org.simantics.scl.compiler.module.coverage.CombinedCoverage;
11 import org.simantics.scl.compiler.module.coverage.CoverageBuilder;
12 import org.simantics.utils.strings.AlphanumComparator;
13
14 public class ModelledSTSSuite {
15
16     private String name;
17     private List<ModelledSTSTest> children;
18     private String moduleNameFilter;
19     private List<Pattern> moduleNameFilterPatterns = new ArrayList<>();
20
21     private CoverageBuilder coverageBuilder;
22
23     ModelledSTSSuite(String name, List<ModelledSTSTest> children, String moduleNameFilter) {
24         this.name = name;
25         this.children = children;
26         this.moduleNameFilter = moduleNameFilter;
27         for (String s : moduleNameFilter.split(",")) {
28             try {
29                 s = s.trim().replaceAll("\\*", "\\\\w*").toLowerCase();
30                 getModuleNameFilterPatterns().add(Pattern.compile(s));
31             } catch (PatternSyntaxException e) {
32                 e.printStackTrace();
33             }
34         }
35     }
36
37     public String getName() {
38         return name;
39     }
40
41     public List<ModelledSTSTest> getChildren() {
42         return children;
43     }
44
45     public List<ModelledSTSTest> getSortedChildren() {
46         return new ArrayList<>(children).stream().sorted(ModelledSTSSuite::compareTests).collect(Collectors.toList());
47     }
48
49     private static int compareTests(ModelledSTSTest test1, ModelledSTSTest test2) {
50         if (test1.getPriority() < test2.getPriority())
51             return -1;
52         else if (test1.getPriority() > test2.getPriority())
53             return 1;
54         else
55             return AlphanumComparator.COMPARATOR.compare(test1.getName(), test2.getName());
56     }
57
58     public String getModuleNameFilter() {
59         return moduleNameFilter;
60     }
61
62     public void addCoverage(List<Module> modules) {
63         if (coverageBuilder == null)
64             coverageBuilder = new CoverageBuilder();
65         for (Module module : modules)
66             coverageBuilder.addCoverage(module, true);
67     }
68
69     public CombinedCoverage getCoverage() {
70         if (coverageBuilder == null)
71             return null;
72         return coverageBuilder.getCoverage();
73     }
74
75     public List<Pattern> getModuleNameFilterPatterns() {
76         return moduleNameFilterPatterns;
77     }
78
79 }