]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/RegressionFilter.java
Added missing org.simantics.db.{tests,testing} plug-ins.
[simantics/platform.git] / bundles / org.simantics.db.testing / src / org / simantics / db / testing / common / RegressionFilter.java
diff --git a/bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/RegressionFilter.java b/bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/RegressionFilter.java
new file mode 100644 (file)
index 0000000..cd2b4b2
--- /dev/null
@@ -0,0 +1,109 @@
+package org.simantics.db.testing.common;
+
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Test;
+import org.junit.runner.Description;
+import org.junit.runner.manipulation.Filter;
+import org.simantics.db.testing.annotation.Always;
+import org.simantics.db.testing.annotation.Fails;
+import org.simantics.db.testing.annotation.Obsolete;
+import org.simantics.utils.FileUtils;
+
+public class RegressionFilter extends Filter {
+
+       public static final String CLASSIFICATION_KEY = "regressionFilterClassification";
+       public static final String CLASSIFICATION_KEY_1 = "1";
+       public static final String CLASSIFICATION_KEY_2 = "2";
+       public static final String CLASSIFICATION_KEY_3 = "3";
+       public static final String CLASSIFICATION_KEY_4 = "4";
+       
+       private Failures tests;
+       
+    public RegressionFilter() {
+        super();
+        getTestCaseNames();
+    }
+
+    public String describe() {
+        return "Filters out all failing tests.";
+    }
+
+    enum Classification {
+       REGRESSION1,REGRESSION2,REGRESSION3,REGRESSION4,ALWAYS
+    }
+    
+    EnumSet<Classification> ALWAYS_CLASSES = EnumSet.of(Classification.REGRESSION1, Classification.REGRESSION2, Classification.ALWAYS);
+    
+    public Classification classify(Description d) {
+       
+       String testName = d.getDisplayName();
+//     System.err.println("classify " + testName);
+
+       Always a = d.getAnnotation(Always.class);
+       if(a != null) return Classification.ALWAYS;
+       
+       Obsolete o = d.getAnnotation(Obsolete.class);
+       if(o != null) return Classification.REGRESSION4;
+
+       Fails f = d.getAnnotation(Fails.class); 
+       if(f != null) return Classification.REGRESSION3;
+
+       Test t = d.getAnnotation(Test.class);
+       if(t == null) return Classification.ALWAYS;
+       
+        if (tests == null) return Classification.REGRESSION1;
+
+        for (int i = 0; i < tests.names.length; i++)
+            if (testName.contains(tests.names[i]))
+                return Classification.REGRESSION2;
+        
+        return Classification.REGRESSION1;
+       
+    }
+    
+    private Classification getPass() {
+       String s = System.getProperty(CLASSIFICATION_KEY);
+       if(CLASSIFICATION_KEY_1.equals(s)) return Classification.REGRESSION1;
+       else if(CLASSIFICATION_KEY_2.equals(s)) return Classification.REGRESSION2;
+       else if(CLASSIFICATION_KEY_3.equals(s)) return Classification.REGRESSION3;
+       else if(CLASSIFICATION_KEY_4.equals(s)) return Classification.REGRESSION4;
+       else return null;
+    }
+    
+    public boolean shouldRun(Description d) {
+       Classification cls = classify(d);
+//     System.err.println("-" + cls);
+       if(Classification.ALWAYS == cls) return true;
+       Classification pass = getPass();
+       if(pass == null && ALWAYS_CLASSES.contains(cls)) return true;
+       return pass == cls;
+    }
+
+    private void getTestCaseNames() {
+
+       if(tests != null) return;
+       
+       try {
+               
+            String csv = FileUtils.getContents("failures.dat").replace("\r", "");
+            tests = new Failures();
+            Set<String> ss = new HashSet<String>();
+            for(String s : csv.split("\n"))
+               if(!s.isEmpty()) ss.add(s);
+            tests.names = ss.toArray(new String[ss.size()]);
+            
+//            System.err.println("tests.names = " + Arrays.toString(tests.names));
+               
+       } catch (Exception e) {
+               
+               tests = new Failures();
+               tests.names = new String[] { };
+               
+       }
+       
+    }
+    
+}