X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.tests.modelled%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Futils%2FModelledSTSSuite.java;h=87f95ca1f64b7112cf17382bcdeacad6ea0c4339;hp=b856787cfc560c4c634e471909cdc86e48d49bdb;hb=93e70f713558f9826b78ad54929f80e52d8c824b;hpb=7a7f73011a6364cbb80ce4ef04424472d345a65a 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 index b856787cf..87f95ca1f 100644 --- 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 @@ -1,10 +1,15 @@ package org.simantics.tests.modelled.utils; import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; 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; @@ -15,14 +20,18 @@ public class ModelledSTSSuite { private String name; private List children; + private int priority; private String moduleNameFilter; private List moduleNameFilterPatterns = new ArrayList<>(); private CoverageBuilder coverageBuilder; + private Map variables; - ModelledSTSSuite(String name, List children, String moduleNameFilter) { + ModelledSTSSuite(String name, List children, String moduleNameFilter, int priority, Map variables) { this.name = name; + this.priority = priority; this.children = children; + this.variables = variables; this.moduleNameFilter = moduleNameFilter; for (String s : moduleNameFilter.split(",")) { try { @@ -42,8 +51,46 @@ public class ModelledSTSSuite { return children; } + static Comparator comparator = (test1, test2) -> compareTests(test1, test2); + public List getSortedChildren() { - return new ArrayList<>(children).stream().sorted(ModelledSTSSuite::compareTests).collect(Collectors.toList()); + Set testsWithDeps = new HashSet<>(); + // This TreeMap sorts the tests with the comparator + TreeMap sortedTests = new TreeMap<>(comparator); + for (ModelledSTSTest test : getChildren()) { + Set testDependencies = test.getDependencies(); + if (testDependencies.isEmpty()) { + // First tests that have no dependencies + sortedTests.put(test, test.getName()); + } else { + // These are resolved later + testsWithDeps.add(test); + } + } + + // Construct a LinkedList that is returned as a result + LinkedList results = new LinkedList<>(sortedTests.keySet()); + +// Set temp = new HashSet<>(testsWithDeps); + // Now resolve tests with dependencies + for (ModelledSTSTest testWithDep : testsWithDeps) { + boolean satisfied = true; + for (String dep : testWithDep.getDependencies()) { + if (!sortedTests.containsValue(dep)) { + satisfied = false; + } else { + testWithDep.resolveDependency(dep); + } + } + if (satisfied) { + results.addLast(testWithDep); + sortedTests.put(testWithDep, testWithDep.getName()); + } else { + // Not satisfied + System.out.println(testWithDep.getName() + " not satisfied"); + } + } + return results; } private static int compareTests(ModelledSTSTest test1, ModelledSTSTest test2) { @@ -76,4 +123,8 @@ public class ModelledSTSSuite { return moduleNameFilterPatterns; } + public int getPriority() { + return priority; + } + }