function Application::run
Same name in this branch
- 11.1.x vendor/composer/composer/src/Composer/Console/Application.php \Composer\Console\Application::run()
- 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\TextUICode
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
}