public RunResult invoke()

in surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java [113:171]


    public RunResult invoke(Object forkTestSet) throws TestSetFailedException {
        ReporterFactory reporterFactory = providerParameters.getReporterFactory();
        JUnit4RunListener listener = createRunListener(reporterFactory);
        listener.setRunMode(NORMAL_RUN);
        ConsoleLogger logger = listener.getConsoleLogger();
        Notifier notifier = new Notifier(listener, getSkipAfterFailureCount());
        // startCapture() called in createRunListener() in prior to setTestsToRun()

        Filter filter = jUnit48Reflector.isJUnit48Available() ? createJUnit48Filter() : null;

        if (testsToRun == null) {
            setTestsToRun(forkTestSet);
        }

        // Add test failure listener
        JUnitTestFailureListener testFailureListener = new JUnitTestFailureListener();
        notifier.addListener(testFailureListener);

        if (isFailFast() && commandsReader != null) {
            registerPleaseStopJUnitListener(notifier);
        }

        final RunResult runResult;

        try {
            JUnitCoreWrapper core = new JUnitCoreWrapper(notifier, jUnitCoreParameters, logger);

            if (commandsReader != null) {
                registerShutdownListener(testsToRun);
                commandsReader.awaitStarted();
            }

            notifier.asFailFast(isFailFast());
            core.execute(testsToRun, createCustomListeners(customRunListeners), filter);
            notifier.asFailFast(false);

            // Rerun failing tests if rerunFailingTestsCount is larger than 0
            if (isRerunFailingTests()) {
                listener.setRunMode(RERUN_TEST_AFTER_FAILURE);
                Notifier rerunNotifier = pureNotifier();
                notifier.copyListenersTo(rerunNotifier);
                JUnitCoreWrapper rerunCore = new JUnitCoreWrapper(rerunNotifier, jUnitCoreParameters, logger);
                for (int i = 0;
                        i < rerunFailingTestsCount
                                && !testFailureListener.getAllFailures().isEmpty();
                        i++) {
                    Set<Description> failures = generateFailingTestDescriptions(testFailureListener.getAllFailures());
                    testFailureListener.reset();
                    FilterFactory filterFactory = new FilterFactory(testClassLoader);
                    Filter failureDescriptionFilter = filterFactory.createMatchAnyDescriptionFilter(failures);
                    rerunCore.execute(testsToRun, failureDescriptionFilter);
                }
            }
        } finally {
            runResult = reporterFactory.close();
            notifier.removeListeners();
        }
        return runResult;
    }