]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/junit/v2/ModelledSTSRunner.java
Fixing exclude filter bug & adding query cache flushing
[simantics/platform.git] / bundles / org.simantics.tests.modelled / src / org / simantics / tests / modelled / junit / v2 / ModelledSTSRunner.java
index e77224b58c72caa59b1e290831e817803844368e..393174906afeb46e7530a71cdef4091c818507ec 100644 (file)
@@ -3,6 +3,7 @@ package org.simantics.tests.modelled.junit.v2;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.junit.runner.Description;
@@ -12,21 +13,55 @@ import org.junit.runner.notification.RunNotifier;
 import org.junit.runners.ParentRunner;
 import org.junit.runners.model.InitializationError;
 import org.simantics.Simantics;
+import org.simantics.db.layer0.util.Layer0Utils;
 import org.simantics.db.testing.common.AcornTests;
 import org.simantics.tests.modelled.utils.ModelledSTSSuite;
 import org.simantics.tests.modelled.utils.STSSuiteTestCollector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ModelledSTSRunner extends ParentRunner<ModelledSTSSuiteRunner> {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(ModelledSTSRunner.class);
+    
+    public static final String INCLUSION_FILTER = "org.simantics.tests.modelled.singleTestIncludeFilter";
+    public static final String EXCLUSION_FILTER = "org.simantics.tests.modelled.excludeFilter";
+    
     private final List<ModelledSTSSuiteRunner> children;
 
     public ModelledSTSRunner(Class<?> testClass) throws InitializationError {
         super(testClass);
+
         try {
             initialize0();
             Collection<ModelledSTSSuite> suites = STSSuiteTestCollector.collectTests();
-            children = new ArrayList<>(suites.size());
-            for (ModelledSTSSuite suite : suites) {
+            
+            // Filter exclusions
+            String exclusionFilter = System.getProperty(EXCLUSION_FILTER);
+            Collection<ModelledSTSSuite> filtered;
+            if (exclusionFilter != null) {
+                String[] filters = exclusionFilter.split(",");
+                filtered = suites.stream().filter(s -> !startsWithAny(s, filters)).collect(Collectors.toList());
+            } else {
+                filtered = suites;
+            }
+            // Filter inclusions
+//            String inclusionFilter = System.getProperty(INCLUSION_FILTER);
+//            Collection<ModelledSTSSuite> included;
+//            if (inclusionFilter != null) {
+//                String[] filters = inclusionFilter.split(",");
+//                included = filtered.stream().filter(s -> startsWithAny(s, filters)).collect(Collectors.toList());
+//            } else {
+//                included = filtered;
+//            }
+            
+            // Sort by priority
+//            List<ModelledSTSSuite> sorted = included.stream().sorted((o1, o2) -> Integer.compare(o1.getPriority(), o2.getPriority())).collect(Collectors.toList());
+            List<ModelledSTSSuite> sorted = filtered.stream().sorted((o1, o2) -> Integer.compare(o1.getPriority(), o2.getPriority())).collect(Collectors.toList());
+            
+            
+            children = new ArrayList<>(sorted.size());
+            for (ModelledSTSSuite suite : sorted) {
                 children.add(new ModelledSTSSuiteRunner(suite));
             }
         } catch (Exception e) {
@@ -34,6 +69,15 @@ public class ModelledSTSRunner extends ParentRunner<ModelledSTSSuiteRunner> {
         }
     }
 
+    private static boolean startsWithAny(ModelledSTSSuite suite, String[] filters) {
+        for (String filter : filters) {
+            if (suite.getName().contains(filter)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     @Override
     protected List<ModelledSTSSuiteRunner> getChildren() {
         return children;
@@ -58,7 +102,12 @@ public class ModelledSTSRunner extends ParentRunner<ModelledSTSSuiteRunner> {
 
     @Override
     protected void runChild(ModelledSTSSuiteRunner child, RunNotifier notifier) {
-        child.run(notifier);
+        try {
+            child.run(notifier);
+        } finally {
+            // Clear query cache
+            Layer0Utils.queryDebugSupport("QueryControl.flush");
+        }
         // TODO: Add coverage reporting to ModelledSTSRunner
 //        CombinedCoverage cover = child.getCoverage();
 //        CoverageBuilder b = new CoverageBuilder();
@@ -72,11 +121,13 @@ public class ModelledSTSRunner extends ParentRunner<ModelledSTSSuiteRunner> {
 
     private void initialize0() throws Exception {
         AcornTests.newSimanticsWorkspace(null, null);
+        org.simantics.debug.browser.internal.Activator.getDefault().startDebugServer();
         initialize();
     }
 
     private void deinitialize0() throws Exception {
         deinitialize();
+        org.simantics.debug.browser.internal.Activator.getDefault().stopDebugServer();
         Simantics.shutdown(new NullProgressMonitor());
     }
 }