package com.taobao.tddl.qatest.util; import java.lang.annotation.Annotation; import org.junit.runner.Description; import org.junit.runner.manipulation.Filter; import org.junit.runner.manipulation.NoTestsRemainException; import org.junit.runners.Parameterized; public class EclipseParameterized extends Parameterized { public EclipseParameterized(Class<?> klass) throws Throwable{ super(klass); } public void filter(Filter filter) throws NoTestsRemainException { super.filter(new FilterDecorator(filter)); } /** * see http://youtrack.jetbrains.com/issue/IDEA-65966 */ private static class FilterDecorator extends Filter { private final Filter delegate; private FilterDecorator(Filter delegate){ this.delegate = delegate; } @Override public boolean shouldRun(Description description) { return delegate.shouldRun(description) || delegate.shouldRun(wrap(description)); } @Override public String describe() { return delegate.describe(); } } private static Description wrap(Description description) { String name = description.getDisplayName(); String fixedName = deparametrizedName(name); Description clonedDescription = Description.createSuiteDescription(fixedName, description.getAnnotations() .toArray(new Annotation[0])); for (Description child : description.getChildren()) { clonedDescription.addChild(wrap(child)); } return clonedDescription; } private static String deparametrizedName(String name) { // Each parameter is named as [0], [1] etc if (name.startsWith("[")) { return name; } // Convert methodName[index](className) to // methodName(className) int indexOfOpenBracket = name.indexOf('['); int indexOfCloseBracket = name.indexOf(']') + 1; return name.substring(0, indexOfOpenBracket).concat(name.substring(indexOfCloseBracket)); } }