use of org.junit.runner.manipulation.Filter in project intellij-community by JetBrains.
the class JUnit4TestRunnerUtil method getParameterizedRequest.
private static Request getParameterizedRequest(final String parameterString, final String methodName, Class clazz, RunWith clazzAnnotation) {
if (clazzAnnotation == null)
return null;
final Class runnerClass = clazzAnnotation.value();
if (Parameterized.class.isAssignableFrom(runnerClass)) {
try {
if (methodName != null) {
final Method method = clazz.getMethod(methodName, new Class[0]);
if (method != null && !method.isAnnotationPresent(Test.class) && TestCase.class.isAssignableFrom(clazz)) {
return Request.runner(JUnit45ClassesRequestBuilder.createIgnoreAnnotationAndJUnit4ClassRunner(clazz));
}
}
//ignore for junit4.4 and <
Class.forName("org.junit.runners.BlockJUnit4ClassRunner");
final Constructor runnerConstructor = runnerClass.getConstructor(new Class[] { Class.class });
return Request.runner((Runner) runnerConstructor.newInstance(new Object[] { clazz })).filterWith(new Filter() {
public boolean shouldRun(Description description) {
final String descriptionMethodName = description.getMethodName();
//filter by params
if (parameterString != null && descriptionMethodName != null && !descriptionMethodName.endsWith(parameterString)) {
return false;
}
//filter only selected method
if (methodName != null && descriptionMethodName != null && //valid for any parameter for current method
!descriptionMethodName.startsWith(methodName + "[") && !descriptionMethodName.equals(methodName)) {
//if fork mode used, parameter is included in the name itself
return false;
}
return true;
}
public String describe() {
if (parameterString == null) {
return methodName + " with any parameter";
}
if (methodName == null) {
return "Parameter " + parameterString + " for any method";
}
return methodName + " with parameter " + parameterString;
}
});
} catch (Throwable throwable) {
//return simple method runner
}
}
return null;
}
use of org.junit.runner.manipulation.Filter in project intellij-community by JetBrains.
the class JUnit4IdeaTestRunner method getFilteredDescription.
private static Description getFilteredDescription(Request request, Description description) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = FilterRequest.class.getDeclaredField("fFilter");
} catch (NoSuchFieldException e) {
field = FilterRequest.class.getDeclaredField("filter");
}
field.setAccessible(true);
final Filter filter = (Filter) field.get(request);
final String filterDescription = filter.describe();
if (filterDescription != null) {
boolean isMethodFilter = filterDescription.startsWith("Method");
if (isMethodFilter && canCompress(description))
return (Description) description.getChildren().get(0);
try {
final Description failedTestsDescription = Description.createSuiteDescription(filterDescription, null);
if (filterDescription.startsWith("Tests") || filterDescription.startsWith("Ignored")) {
for (Iterator iterator = description.getChildren().iterator(); iterator.hasNext(); ) {
final Description childDescription = (Description) iterator.next();
if (filter.shouldRun(childDescription)) {
failedTestsDescription.addChild(childDescription);
}
}
description = failedTestsDescription;
} else if (isMethodFilter && canCompress(failedTestsDescription)) {
description = (Description) failedTestsDescription.getChildren().get(0);
}
} catch (NoSuchMethodError e) {
//junit 4.0 doesn't have method createSuite(String, Annotation...) : skip it
}
}
return description;
}
use of org.junit.runner.manipulation.Filter in project dsl-devkit by dsldevkit.
the class FilterRegistry method parseFilters.
/**
* Parses and instantiates filters registered with the given system property.
*
* @param property
* the name of the system property to parse, must not be {@code null} or empty
* @return the list of filters, never {@code null}
*/
private List<Filter> parseFilters(final String property) {
final List<Filter> result = Lists.newArrayList();
final String filtersProperty = System.getProperty(property, EMPTY_STRING);
if (filtersProperty.length() == 0) {
return result;
}
final String[] filterNames = filtersProperty.split(FILTER_SEPARATOR);
for (final String splitSegment : filterNames) {
String splitSegmentTrimmed = splitSegment.trim();
if (splitSegmentTrimmed.isEmpty()) {
continue;
}
// Handle negation
boolean negated = splitSegmentTrimmed.startsWith(NEGATOR);
String filterClassOrLabel = splitSegmentTrimmed;
if (negated) {
filterClassOrLabel = splitSegmentTrimmed.substring(1);
}
// Try to find a Filter subclass with this name
String qualifiedClassName = filterClassOrLabel;
if (!filterClassOrLabel.contains(".")) {
qualifiedClassName = PACKAGE_PREFIX + filterClassOrLabel;
}
try {
Filter filter = null;
try {
Class<?> filterClass = Class.forName(qualifiedClassName);
if (Filter.class.isAssignableFrom(filterClass)) {
final Object filterInstance = filterClass.newInstance();
filter = (Filter) filterInstance;
}
} catch (ClassNotFoundException e) {
// If no class exists with this name, interpret the String as a label and create a label filter for it
filter = new TestLabelFilter(filterClassOrLabel);
}
if (filter != null) {
if (negated) {
result.add(new NegatedFilter(filter));
} else {
result.add(filter);
}
}
} catch (InstantiationException e) {
LOGGER.error(NLS.bind(MESSAGE_INVALID_FILTER, qualifiedClassName, property), e);
} catch (IllegalAccessException e) {
LOGGER.error(NLS.bind(MESSAGE_INVALID_FILTER, qualifiedClassName, property), e);
}
}
return result;
}
use of org.junit.runner.manipulation.Filter in project junit5 by junit-team.
the class OrFilterTests method evaluatesSingleFilter.
@Test
void evaluatesSingleFilter() {
Filter filter = mockFilter("foo", true);
OrFilter orFilter = new OrFilter(singleton(filter));
assertEquals("foo", orFilter.describe());
Description description = Description.createTestDescription(getClass(), "evaluatesSingleFilter");
assertTrue(orFilter.shouldRun(description));
verify(filter).shouldRun(same(description));
}
use of org.junit.runner.manipulation.Filter in project junit5 by junit-team.
the class TestClassRequestResolver method determineRunnerTestDescriptor.
private RunnerTestDescriptor determineRunnerTestDescriptor(Class<?> testClass, Runner runner, List<RunnerTestDescriptorAwareFilter> filters, UniqueId engineId) {
RunnerTestDescriptor runnerTestDescriptor = createCompleteRunnerTestDescriptor(testClass, runner, engineId);
if (!filters.isEmpty()) {
if (runner instanceof Filterable) {
Filter filter = createOrFilter(filters, runnerTestDescriptor);
Runner filteredRunner = runnerTestDescriptor.toRequest().filterWith(filter).getRunner();
runnerTestDescriptor = createCompleteRunnerTestDescriptor(testClass, filteredRunner, engineId);
} else {
Runner runnerToReport = (runner instanceof RunnerDecorator) ? ((RunnerDecorator) runner).getDecoratedRunner() : runner;
logger.warn(() -> //
"Runner " + runnerToReport.getClass().getName() + " (used on " + testClass.getName() + //
") does not support filtering" + " and will therefore be run completely.");
}
}
return runnerTestDescriptor;
}
Aggregations