]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSSuite.java
Ignore multiple modelled tests via context menu action
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / utils / ModelledSTSSuite.java
index b856787cfc560c4c634e471909cdc86e48d49bdb..87f95ca1f64b7112cf17382bcdeacad6ea0c4339 100644 (file)
@@ -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<ModelledSTSTest> children;
+    private int priority;
     private String moduleNameFilter;
     private List<Pattern> moduleNameFilterPatterns = new ArrayList<>();
 
     private CoverageBuilder coverageBuilder;
+    private Map<String, String> variables;
 
-    ModelledSTSSuite(String name, List<ModelledSTSTest> children, String moduleNameFilter) {
+    ModelledSTSSuite(String name, List<ModelledSTSTest> children, String moduleNameFilter, int priority, Map<String, String> 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<ModelledSTSTest> comparator = (test1, test2) -> compareTests(test1, test2);
+    
     public List<ModelledSTSTest> getSortedChildren() {
-        return new ArrayList<>(children).stream().sorted(ModelledSTSSuite::compareTests).collect(Collectors.toList());
+        Set<ModelledSTSTest> testsWithDeps = new HashSet<>();
+        // This TreeMap sorts the tests with the comparator 
+        TreeMap<ModelledSTSTest, String> sortedTests = new TreeMap<>(comparator);
+        for (ModelledSTSTest test : getChildren()) {
+            Set<String> 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<ModelledSTSTest> results = new LinkedList<>(sortedTests.keySet());
+        
+//        Set<ModelledSTSTest> 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;
+    }
+
 }