From 349e2f45df493fe1464c83eefd712d4d2c03f9b8 Mon Sep 17 00:00:00 2001 From: Nuno Maduro Date: Wed, 11 Jan 2023 20:11:36 +0000 Subject: [PATCH] chore: style changes --- bin/pest | 4 +- src/Bootstrappers/BootSubscribers.php | 7 ++- .../AddsAnnotations.php} | 6 +-- src/Factories/Annotations/CoversNothing.php | 8 ++-- src/Factories/Annotations/Depends.php | 8 ++-- src/Factories/Annotations/Groups.php | 8 ++-- src/Factories/Annotations/TestDox.php | 9 ++-- src/Factories/TestCaseFactory.php | 4 +- src/Factories/TestCaseMethodFactory.php | 4 +- src/Logging/TeamCity/Converter.php | 45 +++++++++++++++---- src/Logging/TeamCity/ServiceMessage.php | 3 ++ .../TeamCity/Subscriber/Subscriber.php | 6 +++ src/Subscribers/EnsureTeamCityEnabled.php | 3 ++ src/Support/Str.php | 3 ++ 14 files changed, 78 insertions(+), 40 deletions(-) rename src/{Factories/Annotations/AddsAnnotation.php => Contracts/AddsAnnotations.php} (73%) diff --git a/bin/pest b/bin/pest index 16fcaeb5..b3a522e2 100755 --- a/bin/pest +++ b/bin/pest @@ -44,10 +44,10 @@ use Symfony\Component\Console\Output\OutputInterface; } // Used when Pest is required using composer. - $vendorPath = dirname(__DIR__, 4) . '/vendor/autoload.php'; + $vendorPath = dirname(__DIR__, 4).'/vendor/autoload.php'; // Used when Pest maintainers are running Pest tests. - $localPath = dirname(__DIR__) . '/vendor/autoload.php'; + $localPath = dirname(__DIR__).'/vendor/autoload.php'; if (file_exists($vendorPath)) { include_once $vendorPath; diff --git a/src/Bootstrappers/BootSubscribers.php b/src/Bootstrappers/BootSubscribers.php index 35a46696..8c21c35d 100644 --- a/src/Bootstrappers/BootSubscribers.php +++ b/src/Bootstrappers/BootSubscribers.php @@ -29,6 +29,9 @@ final class BootSubscribers implements Bootstrapper Subscribers\EnsureTeamCityEnabled::class, ]; + /** + * Creates a new Subscriber instance. + */ public function __construct( private readonly Container $container, ) { @@ -40,8 +43,10 @@ final class BootSubscribers implements Bootstrapper public function boot(): void { foreach (self::SUBSCRIBERS as $subscriber) { - /** @var Subscriber $instance */ $instance = $this->container->get($subscriber); + + assert($instance instanceof Subscriber); + Event\Facade::registerSubscriber( $instance ); diff --git a/src/Factories/Annotations/AddsAnnotation.php b/src/Contracts/AddsAnnotations.php similarity index 73% rename from src/Factories/Annotations/AddsAnnotation.php rename to src/Contracts/AddsAnnotations.php index 1c92ae1f..3abc77d5 100644 --- a/src/Factories/Annotations/AddsAnnotation.php +++ b/src/Contracts/AddsAnnotations.php @@ -2,17 +2,17 @@ declare(strict_types=1); -namespace Pest\Factories\Annotations; +namespace Pest\Contracts; use Pest\Factories\TestCaseMethodFactory; /** * @interal */ -interface AddsAnnotation +interface AddsAnnotations { /** - * Adds annotations to method + * Adds annotations to the given test case method. * * @param array $annotations * @return array diff --git a/src/Factories/Annotations/CoversNothing.php b/src/Factories/Annotations/CoversNothing.php index 05bb64ef..76f03368 100644 --- a/src/Factories/Annotations/CoversNothing.php +++ b/src/Factories/Annotations/CoversNothing.php @@ -4,19 +4,17 @@ declare(strict_types=1); namespace Pest\Factories\Annotations; +use Pest\Contracts\AddsAnnotations; use Pest\Factories\Covers\CoversNothing as CoversNothingFactory; use Pest\Factories\TestCaseMethodFactory; /** * @internal */ -final class CoversNothing implements AddsAnnotation +final class CoversNothing implements AddsAnnotations { /** - * Adds annotations regarding the "depends" feature. - * - * @param array $annotations - * @return array + * {@inheritdoc} */ public function __invoke(TestCaseMethodFactory $method, array $annotations): array { diff --git a/src/Factories/Annotations/Depends.php b/src/Factories/Annotations/Depends.php index 09e38977..24fb03cc 100644 --- a/src/Factories/Annotations/Depends.php +++ b/src/Factories/Annotations/Depends.php @@ -4,19 +4,17 @@ declare(strict_types=1); namespace Pest\Factories\Annotations; +use Pest\Contracts\AddsAnnotations; use Pest\Factories\TestCaseMethodFactory; use Pest\Support\Str; /** * @internal */ -final class Depends implements AddsAnnotation +final class Depends implements AddsAnnotations { /** - * Adds annotations regarding the "depends" feature. - * - * @param array $annotations - * @return array + * {@inheritdoc} */ public function __invoke(TestCaseMethodFactory $method, array $annotations): array { diff --git a/src/Factories/Annotations/Groups.php b/src/Factories/Annotations/Groups.php index 80641123..6c54afd7 100644 --- a/src/Factories/Annotations/Groups.php +++ b/src/Factories/Annotations/Groups.php @@ -4,18 +4,16 @@ declare(strict_types=1); namespace Pest\Factories\Annotations; +use Pest\Contracts\AddsAnnotations; use Pest\Factories\TestCaseMethodFactory; /** * @internal */ -final class Groups implements AddsAnnotation +final class Groups implements AddsAnnotations { /** - * Adds annotations regarding the "groups" feature. - * - * @param array $annotations - * @return array + * {@inheritdoc} */ public function __invoke(TestCaseMethodFactory $method, array $annotations): array { diff --git a/src/Factories/Annotations/TestDox.php b/src/Factories/Annotations/TestDox.php index 33689395..227e2f7a 100644 --- a/src/Factories/Annotations/TestDox.php +++ b/src/Factories/Annotations/TestDox.php @@ -4,19 +4,16 @@ declare(strict_types=1); namespace Pest\Factories\Annotations; +use Pest\Contracts\AddsAnnotations; use Pest\Factories\TestCaseMethodFactory; -final class TestDox implements AddsAnnotation +final class TestDox implements AddsAnnotations { /** - * Add metadata via test dox for TeamCity - * - * @param array $annotations - * @return array + * {@inheritdoc} */ public function __invoke(TestCaseMethodFactory $method, array $annotations): array { - // First test dox on class overrides the method name. $annotations[] = "@testdox $method->description"; return $annotations; diff --git a/src/Factories/TestCaseFactory.php b/src/Factories/TestCaseFactory.php index be73592a..91210e8d 100644 --- a/src/Factories/TestCaseFactory.php +++ b/src/Factories/TestCaseFactory.php @@ -6,12 +6,12 @@ namespace Pest\Factories; use ParseError; use Pest\Concerns; +use Pest\Contracts\AddsAnnotations; use Pest\Contracts\HasPrintableTestCaseName; use Pest\Exceptions\DatasetMissing; use Pest\Exceptions\ShouldNotHappen; use Pest\Exceptions\TestAlreadyExist; use Pest\Exceptions\TestDescriptionMissing; -use Pest\Factories\Annotations\AddsAnnotation; use Pest\Factories\Concerns\HigherOrderable; use Pest\Plugins\Environment; use Pest\Support\Reflection; @@ -30,7 +30,7 @@ final class TestCaseFactory /** * The list of annotations. * - * @var array> + * @var array> */ private const ANNOTATIONS = [ Annotations\Depends::class, diff --git a/src/Factories/TestCaseMethodFactory.php b/src/Factories/TestCaseMethodFactory.php index 1eb5a6d4..1d3c9da7 100644 --- a/src/Factories/TestCaseMethodFactory.php +++ b/src/Factories/TestCaseMethodFactory.php @@ -5,8 +5,8 @@ declare(strict_types=1); namespace Pest\Factories; use Closure; +use Pest\Contracts\AddsAnnotations; use Pest\Exceptions\ShouldNotHappen; -use Pest\Factories\Annotations\AddsAnnotation; use Pest\Factories\Concerns\HigherOrderable; use Pest\Plugins\Retry; use Pest\Repositories\DatasetsRepository; @@ -113,7 +113,7 @@ final class TestCaseMethodFactory /** * Creates a PHPUnit method as a string ready for evaluation. * - * @param array> $annotationsToUse + * @param array> $annotationsToUse * @param array> $attributesToUse */ public function buildForEvaluation(string $classFQN, array $annotationsToUse, array $attributesToUse): string diff --git a/src/Logging/TeamCity/Converter.php b/src/Logging/TeamCity/Converter.php index e62d4d61..31495162 100644 --- a/src/Logging/TeamCity/Converter.php +++ b/src/Logging/TeamCity/Converter.php @@ -26,16 +26,19 @@ use PHPUnit\TestRunner\TestResult\TestResult as PhpUnitTestResult; */ final class Converter { - /** - * @var string - */ private const PREFIX = 'P\\'; + /** + * Creates a new instance of the Converter. + */ public function __construct( private readonly string $rootPath, ) { } + /** + * Gets the test case method name. + */ public function getTestCaseMethodName(Test $test): string { if (! $test instanceof TestMethod) { @@ -45,21 +48,27 @@ final class Converter return $test->testDox()->prettifiedMethodName(); } + /** + * Gets the test case location. + */ public function getTestCaseLocation(Test $test): string { if (! $test instanceof TestMethod) { throw ShouldNotHappen::fromMessage('Not an instance of TestMethod'); } - $fileName = $test->testDox()->prettifiedClassName(); - $fileName = $this->cleanPath($fileName); + $path = $test->testDox()->prettifiedClassName(); + $relativePath = $this->toRelativePath($path); // TODO: Get the description without the dataset. $description = $test->testDox()->prettifiedMethodName(); - return "$fileName::$description"; + return "$relativePath::$description"; } + /** + * Gets the exception messsage. + */ public function getExceptionMessage(Throwable $throwable): string { if (is_a($throwable->className(), FrameworkException::class, true)) { @@ -76,6 +85,9 @@ final class Converter return $buffer; } + /** + * Gets the exception details. + */ public function getExceptionDetails(Throwable $throwable): string { $buffer = $this->getStackTrace($throwable); @@ -93,6 +105,9 @@ final class Converter return $buffer; } + /** + * Gets the stack trace. + */ public function getStackTrace(Throwable $throwable): string { $stackTrace = $throwable->stackTrace(); @@ -105,7 +120,7 @@ final class Converter // clean the paths of each frame. $frames = array_map( - fn (string $frame): string => $this->cleanPath($frame), + fn (string $frame): string => $this->toRelativePath($frame), $frames ); @@ -118,6 +133,9 @@ final class Converter return implode("\n", $frames); } + /** + * Gets the test suite name. + */ public function getTestSuiteName(TestSuite $testSuite): string { $name = $testSuite->name(); @@ -129,6 +147,9 @@ final class Converter return Str::after($name, self::PREFIX); } + /** + * Gets the test suite location. + */ public function getTestSuiteLocation(TestSuite $testSuite): string|null { $tests = $testSuite->tests()->asArray(); @@ -145,15 +166,21 @@ final class Converter $path = $firstTest->testDox()->prettifiedClassName(); - return $this->cleanPath($path); + return $this->toRelativePath($path); } - private function cleanPath(string $path): string + /** + * Transforms the given path in relative path. + */ + private function toRelativePath(string $path): string { // Remove cwd from the path. return str_replace("$this->rootPath/", '', $path); } + /** + * Get the test result. + */ public function getStateFromResult(PhpUnitTestResult $result): State { $state = new State(); diff --git a/src/Logging/TeamCity/ServiceMessage.php b/src/Logging/TeamCity/ServiceMessage.php index 61be652e..a089cd55 100644 --- a/src/Logging/TeamCity/ServiceMessage.php +++ b/src/Logging/TeamCity/ServiceMessage.php @@ -4,6 +4,9 @@ declare(strict_types=1); namespace Pest\Logging\TeamCity; +/** + * @internal + */ final class ServiceMessage { private static int|null $flowId = null; diff --git a/src/Logging/TeamCity/Subscriber/Subscriber.php b/src/Logging/TeamCity/Subscriber/Subscriber.php index 1ea92483..cc14cfa0 100644 --- a/src/Logging/TeamCity/Subscriber/Subscriber.php +++ b/src/Logging/TeamCity/Subscriber/Subscriber.php @@ -11,10 +11,16 @@ use Pest\Logging\TeamCity\TeamCityLogger; */ abstract class Subscriber { + /** + * Creates a new Subscriber instance. + */ public function __construct(private readonly TeamCityLogger $logger) { } + /** + * Creates a new TeamCityLogger instance. + */ final protected function logger(): TeamCityLogger { return $this->logger; diff --git a/src/Subscribers/EnsureTeamCityEnabled.php b/src/Subscribers/EnsureTeamCityEnabled.php index 8e1f5d6e..5da91a70 100644 --- a/src/Subscribers/EnsureTeamCityEnabled.php +++ b/src/Subscribers/EnsureTeamCityEnabled.php @@ -17,6 +17,9 @@ use Symfony\Component\Console\Output\OutputInterface; */ final class EnsureTeamCityEnabled implements ConfiguredSubscriber { + /** + * Creates a new Configured Subscriber instance. + */ public function __construct( private readonly OutputInterface $output, private readonly InputInterface $input, diff --git a/src/Support/Str.php b/src/Support/Str.php index 1ad98a77..16145898 100644 --- a/src/Support/Str.php +++ b/src/Support/Str.php @@ -77,6 +77,9 @@ final class Str return substr($subject, 0, $pos); } + /** + * Returns the content after the given "search". + */ public static function after(string $subject, string $search): string { return $search === '' ? $subject : array_reverse(explode($search, $subject, 2))[0];