Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Application.php

function Application::run

Same name in this branch
  1. 11.1.x vendor/composer/composer/src/Composer/Console/Application.php \Composer\Console\Application::run()
  2. 11.1.x vendor/symfony/console/Application.php \Symfony\Component\Console\Application::run()

File

vendor/phpunit/phpunit/src/TextUI/Application.php, line 88

Class

Application
@no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit

Namespace

PHPUnit\TextUI

Code

public function run(array $argv) : int {
    try {
        EventFacade::emitter()->applicationStarted();
        $cliConfiguration = $this->buildCliConfiguration($argv);
        $pathToXmlConfigurationFile = (new XmlConfigurationFileFinder())->find($cliConfiguration);
        $this->executeCommandsThatOnlyRequireCliConfiguration($cliConfiguration, $pathToXmlConfigurationFile);
        $xmlConfiguration = $this->loadXmlConfiguration($pathToXmlConfigurationFile);
        $configuration = Registry::init($cliConfiguration, $xmlConfiguration);
        (new PhpHandler())->handle($configuration->php());
        if ($configuration->hasBootstrap()) {
            $this->loadBootstrapScript($configuration->bootstrap());
        }
        $this->executeCommandsThatRequireCompleteConfiguration($configuration, $cliConfiguration);
        $testSuite = $this->buildTestSuite($configuration);
        $this->executeCommandsThatRequireCliConfigurationAndTestSuite($cliConfiguration, $testSuite);
        $this->executeHelpCommandWhenThereIsNothingElseToDo($configuration, $testSuite);
        $pharExtensions = null;
        $extensionRequiresCodeCoverageCollection = false;
        $extensionReplacesOutput = false;
        $extensionReplacesProgressOutput = false;
        $extensionReplacesResultOutput = false;
        $extensionRequiresExportOfObjects = false;
        if (!$configuration->noExtensions()) {
            if ($configuration->hasPharExtensionDirectory()) {
                $pharExtensions = (new PharLoader())->loadPharExtensionsInDirectory($configuration->pharExtensionDirectory());
            }
            $bootstrappedExtensions = $this->bootstrapExtensions($configuration);
            $extensionRequiresCodeCoverageCollection = $bootstrappedExtensions['requiresCodeCoverageCollection'];
            $extensionReplacesOutput = $bootstrappedExtensions['replacesOutput'];
            $extensionReplacesProgressOutput = $bootstrappedExtensions['replacesProgressOutput'];
            $extensionReplacesResultOutput = $bootstrappedExtensions['replacesResultOutput'];
            $extensionRequiresExportOfObjects = $bootstrappedExtensions['requiresExportOfObjects'];
        }
        if ($extensionRequiresExportOfObjects) {
            EventFacade::emitter()->exportObjects();
        }
        CodeCoverage::instance()->init($configuration, CodeCoverageFilterRegistry::instance(), $extensionRequiresCodeCoverageCollection);
        if (CodeCoverage::instance()->isActive()) {
            CodeCoverage::instance()->ignoreLines((new CodeCoverageMetadataApi())->linesToBeIgnored($testSuite));
        }
        $printer = OutputFacade::init($configuration, $extensionReplacesProgressOutput, $extensionReplacesResultOutput);
        if (!$configuration->debug() && !$extensionReplacesOutput) {
            $this->writeRuntimeInformation($printer, $configuration);
            $this->writePharExtensionInformation($printer, $pharExtensions);
            $this->writeRandomSeedInformation($printer, $configuration);
            $printer->print(PHP_EOL);
        }
        if ($configuration->debug()) {
            EventFacade::instance()->registerTracer(new EventLogger('php://stdout', false));
        }
        $this->registerLogfileWriters($configuration);
        $testDoxResultCollector = $this->testDoxResultCollector($configuration);
        TestResultFacade::init();
        $resultCache = $this->initializeTestResultCache($configuration);
        if ($configuration->controlGarbageCollector()) {
            new GarbageCollectionHandler(EventFacade::instance(), $configuration->numberOfTestsBeforeGarbageCollection());
        }
        $baselineGenerator = $this->configureBaseline($configuration);
        EventFacade::instance()->seal();
        $timer = new Timer();
        $timer->start();
        $runner = new TestRunner();
        $runner->run($configuration, $resultCache, $testSuite);
        $duration = $timer->stop();
        $testDoxResult = null;
        if (isset($testDoxResultCollector)) {
            $testDoxResult = $testDoxResultCollector->testMethodsGroupedByClass();
        }
        if ($testDoxResult !== null && $configuration->hasLogfileTestdoxHtml()) {
            try {
                OutputFacade::printerFor($configuration->logfileTestdoxHtml())
                    ->print((new TestDoxHtmlRenderer())->render($testDoxResult));
            } catch (DirectoryDoesNotExistException|InvalidSocketException $e) {
                EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot log test results in TestDox HTML format to "%s": %s', $configuration->logfileTestdoxHtml(), $e->getMessage()));
            }
        }
        if ($testDoxResult !== null && $configuration->hasLogfileTestdoxText()) {
            try {
                OutputFacade::printerFor($configuration->logfileTestdoxText())
                    ->print((new TestDoxTextRenderer())->render($testDoxResult));
            } catch (DirectoryDoesNotExistException|InvalidSocketException $e) {
                EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot log test results in TestDox plain text format to "%s": %s', $configuration->logfileTestdoxText(), $e->getMessage()));
            }
        }
        $result = TestResultFacade::result();
        if (!$extensionReplacesResultOutput && !$configuration->debug()) {
            OutputFacade::printResult($result, $testDoxResult, $duration);
        }
        CodeCoverage::instance()->generateReports($printer, $configuration);
        if (isset($baselineGenerator)) {
            (new Writer())->write($configuration->generateBaseline(), $baselineGenerator->baseline());
            $printer->print(sprintf(PHP_EOL . 'Baseline written to %s.' . PHP_EOL, realpath($configuration->generateBaseline())));
        }
        $shellExitCode = (new ShellExitCodeCalculator())->calculate($configuration->failOnDeprecation(), $configuration->failOnPhpunitDeprecation(), $configuration->failOnEmptyTestSuite(), $configuration->failOnIncomplete(), $configuration->failOnNotice(), $configuration->failOnRisky(), $configuration->failOnSkipped(), $configuration->failOnWarning(), $result);
        EventFacade::emitter()->applicationFinished($shellExitCode);
        return $shellExitCode;
        // @codeCoverageIgnoreStart
    } catch (Throwable $t) {
        $this->exitWithCrashMessage($t);
    }
    // @codeCoverageIgnoreEnd
}
RSS feed
Powered by Drupal