Search in sources :

Example 21 with Filter

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;
}
Also used : Runner(org.junit.runner.Runner) Description(org.junit.runner.Description) Test(org.junit.Test) TestCase(junit.framework.TestCase) Filter(org.junit.runner.manipulation.Filter) Constructor(java.lang.reflect.Constructor) Method(java.lang.reflect.Method)

Example 22 with Filter

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;
}
Also used : Field(java.lang.reflect.Field) Filter(org.junit.runner.manipulation.Filter) FilterRequest(org.junit.internal.requests.FilterRequest) Iterator(java.util.Iterator)

Example 23 with Filter

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;
}
Also used : Filter(org.junit.runner.manipulation.Filter)

Example 24 with Filter

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));
}
Also used : Description(org.junit.runner.Description) Filter(org.junit.runner.manipulation.Filter) Test(org.junit.jupiter.api.Test)

Example 25 with Filter

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;
}
Also used : RunnerTestDescriptor(org.junit.vintage.engine.descriptor.RunnerTestDescriptor) Runner(org.junit.runner.Runner) Filter(org.junit.runner.manipulation.Filter) Filterable(org.junit.runner.manipulation.Filterable)

Aggregations

Filter (org.junit.runner.manipulation.Filter)34 Test (org.junit.Test)14 Description (org.junit.runner.Description)14 Runner (org.junit.runner.Runner)8 Request (org.junit.runner.Request)7 NoTestsRemainException (org.junit.runner.manipulation.NoTestsRemainException)7 Filterable (org.junit.runner.manipulation.Filterable)4 ArrayList (java.util.ArrayList)3 LinkedList (java.util.LinkedList)3 RunNotifier (org.junit.runner.notification.RunNotifier)3 RegExTestCaseFilter (com.google.testing.junit.junit4.runner.RegExTestCaseFilter)2 SuiteTrimmingFilter (com.google.testing.junit.junit4.runner.SuiteTrimmingFilter)2 IOException (java.io.IOException)2 Method (java.lang.reflect.Method)2 TestSelectionMatcher (org.gradle.api.internal.tasks.testing.filter.TestSelectionMatcher)2 Test (org.junit.jupiter.api.Test)2 JUnitCore (org.junit.runner.JUnitCore)2 Result (org.junit.runner.Result)2 RunListener (org.junit.runner.notification.RunListener)2 MethodGlobFilter (com.carrotsearch.randomizedtesting.MethodGlobFilter)1