config = $config; $this->taskRunner = $taskRunner; $this->eventDispatcher = $eventDispatcher; $this->asciiLocator = $asciiLocator; } public function run(OutputInterface $output, TaskRunnerContext $context): int { // Make sure to add some default event listeners before running. $this->registerEventListeners($output); if ($context->hasTestSuite()) { $output->writeln(sprintf( 'Running testsuite: %s', $context->getTestSuite()->getName() )); } $taskResults = $this->taskRunner->run($context); $warnings = $taskResults->filterByResultCode(TaskResult::NONBLOCKING_FAILED); if ($taskResults->isFailed()) { $failed = $taskResults->filterByResultCode(TaskResult::FAILED); return $this->returnErrorMessages($output, $failed->getAllMessages(), $warnings->getAllMessages()); } if ($context->skipSuccessOutput()) { $this->returnWarningMessages($output, $warnings->getAllMessages()); return self::CODE_SUCCESS; } return $this->returnSuccessMessage($output, $warnings->getAllMessages()); } private function registerEventListeners(OutputInterface $output): void { if ($output instanceof ConsoleOutputInterface) { $output = $output->getErrorOutput(); } $this->eventDispatcher->addSubscriber(new ProgressSubscriber($output)); } private function returnErrorMessages(OutputInterface $output, array $errorMessages, array $warnings): int { $failed = $this->asciiLocator->locate('failed'); if ($failed) { $output->writeln(''.$failed.''); } $this->returnWarningMessages($output, $warnings); foreach ($errorMessages as $errorMessage) { $output->writeln(''.$errorMessage.''); } if (!$this->config->hideCircumventionTip()) { $output->writeln( 'To skip commit checks, add -n or --no-verify flag to commit command' ); } $this->returnAdditionalInfo($output); return self::CODE_ERROR; } private function returnSuccessMessage(OutputInterface $output, array $warnings): int { $succeeded = $this->asciiLocator->locate('succeeded'); if ($succeeded) { $output->write(''.$succeeded.''); } $this->returnWarningMessages($output, $warnings); $this->returnAdditionalInfo($output); return self::CODE_SUCCESS; } private function returnWarningMessages(OutputInterface $output, array $warningMessages): void { foreach ($warningMessages as $warningMessage) { $output->writeln(''.$warningMessage.''); } } /** * @param OutputInterface $output */ private function returnAdditionalInfo(OutputInterface $output): void { if (null !== $this->config->getAdditionalInfo()) { $output->writeln($this->config->getAdditionalInfo()); } } /** * {@inheritdoc} */ public function getName(): string { return self::HELPER_NAME; } }