diff --git a/phpstan.neon b/phpstan.neon index e133d425..546d1683 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -21,3 +21,12 @@ parameters: - "# with null as default value#" - "#has parameter \\$closure with default value.#" - "#has parameter \\$description with default value.#" + - + message: '#Call to an undefined method PHPUnit\\Framework\\Test::getName\(\)#' + path: src/TeamCity.php + - + message: '#invalid typehint type Pest\\Concerns\\TestCase#' + path: src/TeamCity.php + - + message: '#is not subtype of native type PHPUnit\\Framework\\Test#' + path: src/TeamCity.php diff --git a/src/Actions/AddsDefaults.php b/src/Actions/AddsDefaults.php index b13cdc52..1372b638 100644 --- a/src/Actions/AddsDefaults.php +++ b/src/Actions/AddsDefaults.php @@ -12,6 +12,11 @@ use Pest\TeamCity; */ final class AddsDefaults { + /** + * @var string + */ + private const PRINTER = 'printer'; + /** * Adds default arguments to the given `arguments` array. * @@ -21,12 +26,12 @@ final class AddsDefaults */ public static function to(array $arguments): array { - if (!array_key_exists('printer', $arguments)) { - $arguments['printer'] = new Printer(null, $arguments['verbose'] ?? false, $arguments['colors'] ?? 'always'); + if (!array_key_exists(self::PRINTER, $arguments)) { + $arguments[self::PRINTER] = new Printer(null, $arguments['verbose'] ?? false, $arguments['colors'] ?? 'always'); } - if ($arguments['printer'] === \PHPUnit\Util\Log\TeamCity::class) { - $arguments['printer'] = new TeamCity(null, $arguments['verbose'] ?? false, $arguments['colors'] ?? 'always'); + if ($arguments[self::PRINTER] === \PHPUnit\Util\Log\TeamCity::class) { + $arguments[self::PRINTER] = new TeamCity(null, $arguments['verbose'] ?? false, $arguments['colors'] ?? 'always'); } return $arguments; diff --git a/src/TeamCity.php b/src/TeamCity.php index e7e5acd1..1432b83d 100644 --- a/src/TeamCity.php +++ b/src/TeamCity.php @@ -1,5 +1,7 @@ phpunitTeamCity = new \PHPUnit\Util\Log\TeamCity( $out, $verbose, $colors, - $debug, - $numberOfColumns, - $reverse + false, + 80, + false ); } @@ -40,6 +50,7 @@ class TeamCity extends DefaultResultPrinter $this->printFooter($result); } + /** @phpstan-ignore-next-line */ public function startTestSuite(TestSuite $suite): void { $this->flowId = getmypid(); @@ -56,8 +67,8 @@ class TeamCity extends DefaultResultPrinter if (file_exists($suiteName)) { $this->printEvent('testSuiteStarted', [ - 'name' => $suiteName, - 'locationHint' => self::PROTOCOL . $suiteName, + self::NAME => $suiteName, + self::LOCATION_HINT => self::PROTOCOL . $suiteName, ]); return; @@ -66,26 +77,27 @@ class TeamCity extends DefaultResultPrinter $fileName = $suite->getName()::__getFileName(); $this->printEvent('testSuiteStarted', [ - 'name' => substr($suiteName, 2), - 'locationHint' => self::PROTOCOL . $fileName, + self::NAME => substr($suiteName, 2), + self::LOCATION_HINT => self::PROTOCOL . $fileName, ]); } + /** @phpstan-ignore-next-line */ public function endTestSuite(TestSuite $suite): void { $suiteName = $suite->getName(); if (file_exists($suiteName)) { $this->printEvent('testSuiteFinished', [ - 'name' => $suiteName, - 'locationHint' => self::PROTOCOL . $suiteName, + self::NAME => $suiteName, + self::LOCATION_HINT => self::PROTOCOL . $suiteName, ]); return; } $this->printEvent('testSuiteFinished', [ - 'name' => substr($suiteName, 2), + self::NAME => substr($suiteName, 2), ]); } @@ -101,8 +113,9 @@ class TeamCity extends DefaultResultPrinter } $this->printEvent('testStarted', [ - 'name' => $test->getName(), - 'locationHint' => self::PROTOCOL . $test->toString(), + self::NAME => $test->getName(), + /* @phpstan-ignore-next-line */ + self::LOCATION_HINT => self::PROTOCOL . $test->toString(), ]); } @@ -118,8 +131,8 @@ class TeamCity extends DefaultResultPrinter } $this->printEvent('testFinished', [ - 'name' => $test->getName(), - 'duration' => self::toMilliseconds($time), + self::NAME => $test->getName(), + self::DURATION => self::toMilliseconds($time), ]); } @@ -128,21 +141,38 @@ class TeamCity extends DefaultResultPrinter */ public function addError(Test $test, \Throwable $t, float $time): void { + if (!TeamCity::isPestTest($test)) { + $this->phpunitTeamCity->addError($test, $t, $time); + + return; + } + $this->printEvent('testFailed', [ - 'name' => $test->getName(), - 'message' => $t->getMessage(), - 'details' => $t->getTraceAsString(), - 'duration' => self::toMilliseconds($time), + self::NAME => $test->getName(), + 'message' => $t->getMessage(), + 'details' => $t->getTraceAsString(), + self::DURATION => self::toMilliseconds($time), ]); } + /** + * @phpstan-ignore-next-line + * + * @param Test|TestCase $test + */ public function addWarning(Test $test, Warning $e, float $time): void { + if (!TeamCity::isPestTest($test)) { + $this->phpunitTeamCity->addWarning($test, $e, $time); + + return; + } + $this->printEvent('testFailed', [ - 'name' => $test->getName(), - 'message' => $e->getMessage(), - 'details' => $e->getTraceAsString(), - 'duration' => self::toMilliseconds($time), + self::NAME => $test->getName(), + 'message' => $e->getMessage(), + 'details' => $e->getTraceAsString(), + self::DURATION => self::toMilliseconds($time), ]); } @@ -155,11 +185,14 @@ class TeamCity extends DefaultResultPrinter { } + /** + * @param array $params + */ private function printEvent(string $eventName, array $params = []): void { $this->write("\n##teamcity[{$eventName}"); - if ($this->flowId) { + if ($this->flowId !== 0) { $params['flowId'] = $this->flowId; } @@ -185,8 +218,8 @@ class TeamCity extends DefaultResultPrinter return (int) round($time * 1000); } - private static function isPestTest($test): bool + private static function isPestTest(Test $test): bool { - return in_array(TestCase::class, class_uses($test)); + return in_array(TestCase::class, class_uses($test), true); } }