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;
}
}