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 children; private String moduleNameFilter; private List moduleNameFilterPatterns = new ArrayList<>(); private CoverageBuilder coverageBuilder; ModelledSTSSuite(String name, List 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 getChildren() { return children; } public List 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 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 getModuleNameFilterPatterns() { return moduleNameFilterPatterns; } }