blob: a1e7f55d261aa6a84443b468b3f46b1a5e3bd342 [file] [log] [blame]
package pack;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import junit.runner.Version;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
public class OrderedRunner extends BlockJUnit4ClassRunner {
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface Order {
public String[] value();
}
public OrderedRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected List<FrameworkMethod> computeTestMethods() {
List<FrameworkMethod> methods= new ArrayList<FrameworkMethod>(super.computeTestMethods());
Order order= getTestClass().getJavaClass().getAnnotation(Order.class);
final List<String> orderedNames= Arrays.asList(order.value());
Collections.sort(methods, new Comparator<FrameworkMethod>() {
public int compare(FrameworkMethod m1, FrameworkMethod m2) {
String n1= m1.getName();
String n2= m2.getName();
int i1= orderedNames.indexOf(n1);
int i2= orderedNames.indexOf(n2);
return i1 < i2 ? -1 : 1;
}
});
return methods;
}
}