1 package org.simantics.db.testing.common;
3 import java.util.EnumSet;
4 import java.util.HashSet;
8 import org.junit.runner.Description;
9 import org.junit.runner.manipulation.Filter;
10 import org.simantics.db.testing.annotation.Always;
11 import org.simantics.db.testing.annotation.Fails;
12 import org.simantics.db.testing.annotation.Obsolete;
13 import org.simantics.utils.FileUtils;
15 public class RegressionFilter extends Filter {
17 public static final String CLASSIFICATION_KEY = "regressionFilterClassification";
18 public static final String CLASSIFICATION_KEY_1 = "1";
19 public static final String CLASSIFICATION_KEY_2 = "2";
20 public static final String CLASSIFICATION_KEY_3 = "3";
21 public static final String CLASSIFICATION_KEY_4 = "4";
23 private Failures tests;
25 public RegressionFilter() {
30 public String describe() {
31 return "Filters out all failing tests.";
35 REGRESSION1,REGRESSION2,REGRESSION3,REGRESSION4,ALWAYS
38 EnumSet<Classification> ALWAYS_CLASSES = EnumSet.of(Classification.REGRESSION1, Classification.REGRESSION2, Classification.ALWAYS);
40 public Classification classify(Description d) {
42 String testName = d.getDisplayName();
43 // System.err.println("classify " + testName);
45 Always a = d.getAnnotation(Always.class);
46 if(a != null) return Classification.ALWAYS;
48 Obsolete o = d.getAnnotation(Obsolete.class);
49 if(o != null) return Classification.REGRESSION4;
51 Fails f = d.getAnnotation(Fails.class);
52 if(f != null) return Classification.REGRESSION3;
54 Test t = d.getAnnotation(Test.class);
55 if(t == null) return Classification.ALWAYS;
57 if (tests == null) return Classification.REGRESSION1;
59 for (int i = 0; i < tests.names.length; i++)
60 if (testName.contains(tests.names[i]))
61 return Classification.REGRESSION2;
63 return Classification.REGRESSION1;
67 private Classification getPass() {
68 String s = System.getProperty(CLASSIFICATION_KEY);
69 if(CLASSIFICATION_KEY_1.equals(s)) return Classification.REGRESSION1;
70 else if(CLASSIFICATION_KEY_2.equals(s)) return Classification.REGRESSION2;
71 else if(CLASSIFICATION_KEY_3.equals(s)) return Classification.REGRESSION3;
72 else if(CLASSIFICATION_KEY_4.equals(s)) return Classification.REGRESSION4;
76 public boolean shouldRun(Description d) {
77 Classification cls = classify(d);
78 // System.err.println("-" + cls);
79 if(Classification.ALWAYS == cls) return true;
80 Classification pass = getPass();
81 if(pass == null && ALWAYS_CLASSES.contains(cls)) return true;
85 private void getTestCaseNames() {
87 if(tests != null) return;
91 String csv = FileUtils.getContents("failures.dat").replace("\r", "");
92 tests = new Failures();
93 Set<String> ss = new HashSet<String>();
94 for(String s : csv.split("\n"))
95 if(!s.isEmpty()) ss.add(s);
96 tests.names = ss.toArray(new String[ss.size()]);
98 // System.err.println("tests.names = " + Arrays.toString(tests.names));
100 } catch (Exception e) {
102 tests = new Failures();
103 tests.names = new String[] { };