diff --git a/composer.json b/composer.json index 9f4ffa85..846dc188 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "require": { "php": "^8.3.0", "brianium/paratest": "^7.19.0", - "nunomaduro/collision": "^8.9.0", + "nunomaduro/collision": "^8.9.1", "nunomaduro/termwind": "^2.4.0", "pestphp/pest-plugin": "^4.0.0", "pestphp/pest-plugin-arch": "^4.0.0", @@ -58,7 +58,7 @@ "pestphp/pest-dev-tools": "^4.1.0", "pestphp/pest-plugin-browser": "^4.3.0", "pestphp/pest-plugin-type-coverage": "^4.0.3", - "psy/psysh": "^0.12.20" + "psy/psysh": "^0.12.21" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/overrides/Logging/JUnit/JunitXmlLogger.php b/overrides/Logging/JUnit/JunitXmlLogger.php index b7362b1f..1fc237a6 100644 --- a/overrides/Logging/JUnit/JunitXmlLogger.php +++ b/overrides/Logging/JUnit/JunitXmlLogger.php @@ -14,6 +14,9 @@ namespace PHPUnit\Logging\JUnit; use DOMDocument; use DOMElement; +use Pest\Logging\Converter; +use Pest\Support\Container; +use Pest\TestSuite; use PHPUnit\Event\Code\Test; use PHPUnit\Event\Code\TestMethod; use PHPUnit\Event\EventFacadeIsSealedException; @@ -50,7 +53,7 @@ final class JunitXmlLogger { private readonly Printer $printer; - private readonly \Pest\Logging\Converter $converter; // pest-added + private readonly Converter $converter; // pest-added private DOMDocument $document; @@ -108,7 +111,7 @@ final class JunitXmlLogger public function __construct(Printer $printer, Facade $facade) { $this->printer = $printer; - $this->converter = new \Pest\Logging\Converter(\Pest\Support\Container::getInstance()->get(\Pest\TestSuite::class)->rootPath); // pest-added + $this->converter = new Converter(Container::getInstance()->get(TestSuite::class)->rootPath); // pest-added $this->registerSubscribers($facade); $this->createDocument(); diff --git a/src/Concerns/Pipeable.php b/src/Concerns/Pipeable.php index 63ab0b7d..4e44f8db 100644 --- a/src/Concerns/Pipeable.php +++ b/src/Concerns/Pipeable.php @@ -66,6 +66,6 @@ trait Pipeable */ private function pipes(string $name, object $context, string $scope): array { - return array_map(fn (Closure $pipe): \Closure => $pipe->bindTo($context, $scope), self::$pipes[$name] ?? []); + return array_map(fn (Closure $pipe): Closure => $pipe->bindTo($context, $scope), self::$pipes[$name] ?? []); } } diff --git a/src/Concerns/Testable.php b/src/Concerns/Testable.php index 767a7c69..7ed0887d 100644 --- a/src/Concerns/Testable.php +++ b/src/Concerns/Testable.php @@ -129,7 +129,7 @@ trait Testable */ public function __addBeforeAll(?Closure $hook): void { - if (! $hook instanceof \Closure) { + if (! $hook instanceof Closure) { return; } @@ -143,7 +143,7 @@ trait Testable */ public function __addAfterAll(?Closure $hook): void { - if (! $hook instanceof \Closure) { + if (! $hook instanceof Closure) { return; } @@ -173,7 +173,7 @@ trait Testable */ private function __addHook(string $property, ?Closure $hook): void { - if (! $hook instanceof \Closure) { + if (! $hook instanceof Closure) { return; } diff --git a/src/Expectation.php b/src/Expectation.php index 50729d7a..d9ce935a 100644 --- a/src/Expectation.php +++ b/src/Expectation.php @@ -136,7 +136,7 @@ final class Expectation /** * Dump the expectation value when the result of the condition is truthy. * - * @param (\Closure(TValue): bool)|bool $condition + * @param (Closure(TValue): bool)|bool $condition * @return self */ public function ddWhen(Closure|bool $condition, mixed ...$arguments): Expectation @@ -153,7 +153,7 @@ final class Expectation /** * Dump the expectation value when the result of the condition is falsy. * - * @param (\Closure(TValue): bool)|bool $condition + * @param (Closure(TValue): bool)|bool $condition * @return self */ public function ddUnless(Closure|bool $condition, mixed ...$arguments): Expectation diff --git a/src/Factories/TestCaseFactory.php b/src/Factories/TestCaseFactory.php index 0d2a0978..3349d03d 100644 --- a/src/Factories/TestCaseFactory.php +++ b/src/Factories/TestCaseFactory.php @@ -17,6 +17,7 @@ use Pest\Factories\Concerns\HigherOrderable; use Pest\Support\Reflection; use Pest\Support\Str; use Pest\TestSuite; +use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; use RuntimeException; @@ -135,7 +136,7 @@ final class TestCaseFactory $this->attributes = [ new Attribute( - \PHPUnit\Framework\Attributes\TestDox::class, + TestDox::class, [$this->filename], ), ...$this->attributes, diff --git a/src/Factories/TestCaseMethodFactory.php b/src/Factories/TestCaseMethodFactory.php index c88db44d..9438f837 100644 --- a/src/Factories/TestCaseMethodFactory.php +++ b/src/Factories/TestCaseMethodFactory.php @@ -9,10 +9,14 @@ use Pest\Evaluators\Attributes; use Pest\Exceptions\ShouldNotHappen; use Pest\Factories\Concerns\HigherOrderable; use Pest\Repositories\DatasetsRepository; +use Pest\Support\Description; use Pest\Support\Str; use Pest\TestSuite; use PHPUnit\Framework\Assert; use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Depends; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; /** @@ -32,7 +36,7 @@ final class TestCaseMethodFactory /** * The test's describing, if any. * - * @var array + * @var array */ public array $describing = []; @@ -192,11 +196,11 @@ final class TestCaseMethodFactory $this->attributes = [ new Attribute( - \PHPUnit\Framework\Attributes\Test::class, + Test::class, [], ), new Attribute( - \PHPUnit\Framework\Attributes\TestDox::class, + TestDox::class, [str_replace('*/', '{@*}', $this->description)], ), ...$this->attributes, @@ -206,7 +210,7 @@ final class TestCaseMethodFactory $depend = Str::evaluable($this->describing === [] ? $depend : Str::describe($this->describing, $depend)); $this->attributes[] = new Attribute( - \PHPUnit\Framework\Attributes\Depends::class, + Depends::class, [$depend], ); } diff --git a/src/Functions.php b/src/Functions.php index 0ed631f3..42331a56 100644 --- a/src/Functions.php +++ b/src/Functions.php @@ -140,7 +140,7 @@ if (! function_exists('test')) { */ function test(?string $description = null, ?Closure $closure = null): HigherOrderTapProxy|TestCall { - if ($description === null && TestSuite::getInstance()->test instanceof \PHPUnit\Framework\TestCase) { + if ($description === null && TestSuite::getInstance()->test instanceof TestCase) { return new HigherOrderTapProxy(TestSuite::getInstance()->test); } @@ -236,7 +236,7 @@ if (! function_exists('covers')) { /** @var MutationTestRunner $runner */ $runner = Container::getInstance()->get(MutationTestRunner::class); - /** @var \Pest\Mutate\Repositories\ConfigurationRepository $configurationRepository */ + /** @var ConfigurationRepository $configurationRepository */ $configurationRepository = Container::getInstance()->get(ConfigurationRepository::class); $everything = $configurationRepository->cliConfiguration->toArray()['everything'] ?? false; $classes = $configurationRepository->cliConfiguration->toArray()['classes'] ?? false; @@ -263,7 +263,7 @@ if (! function_exists('mutates')) { /** @var MutationTestRunner $runner */ $runner = Container::getInstance()->get(MutationTestRunner::class); - /** @var \Pest\Mutate\Repositories\ConfigurationRepository $configurationRepository */ + /** @var ConfigurationRepository $configurationRepository */ $configurationRepository = Container::getInstance()->get(ConfigurationRepository::class); $everything = $configurationRepository->cliConfiguration->toArray()['everything'] ?? false; $classes = $configurationRepository->cliConfiguration->toArray()['classes'] ?? false; @@ -320,7 +320,7 @@ if (! function_exists('visit')) { */ function visit(array|string $url, array $options = []): ArrayablePendingAwaitablePage|PendingAwaitablePage { - if (! class_exists(\Pest\Browser\Configuration::class)) { + if (! class_exists(Pest\Browser\Configuration::class)) { PluginBrowser::install(); exit(0); diff --git a/src/Logging/Converter.php b/src/Logging/Converter.php index 50a42d1a..e0b69bb0 100644 --- a/src/Logging/Converter.php +++ b/src/Logging/Converter.php @@ -151,7 +151,7 @@ final readonly class Converter { if ($testSuite instanceof TestSuiteForTestMethodWithDataProvider) { $firstTest = $this->getFirstTest($testSuite); - if ($firstTest instanceof \PHPUnit\Event\Code\TestMethod) { + if ($firstTest instanceof TestMethod) { return $this->getTestMethodNameWithoutDatasetSuffix($firstTest); } } @@ -179,7 +179,7 @@ final readonly class Converter public function getTestSuiteLocation(TestSuite $testSuite): ?string { $firstTest = $this->getFirstTest($testSuite); - if (! $firstTest instanceof \PHPUnit\Event\Code\TestMethod) { + if (! $firstTest instanceof TestMethod) { return null; } $path = $firstTest->testDox()->prettifiedClassName(); diff --git a/src/Logging/TeamCity/TeamCityLogger.php b/src/Logging/TeamCity/TeamCityLogger.php index 19a7be69..cbbf0347 100644 --- a/src/Logging/TeamCity/TeamCityLogger.php +++ b/src/Logging/TeamCity/TeamCityLogger.php @@ -200,7 +200,7 @@ final class TeamCityLogger public function testFinished(Finished $event): void { - if (! $this->time instanceof \PHPUnit\Event\Telemetry\HRTime) { + if (! $this->time instanceof HRTime) { throw ShouldNotHappen::fromMessage('Start time has not been set.'); } diff --git a/src/Mixins/Expectation.php b/src/Mixins/Expectation.php index 09974787..f235c748 100644 --- a/src/Mixins/Expectation.php +++ b/src/Mixins/Expectation.php @@ -9,6 +9,7 @@ use Closure; use Countable; use DateTimeInterface; use Error; +use Illuminate\Testing\TestResponse; use InvalidArgumentException; use JsonSerializable; use Pest\Exceptions\InvalidExpectationValue; @@ -842,7 +843,7 @@ final class Expectation is_object($this->value) && method_exists($this->value, 'toSnapshot') => $this->value->toSnapshot(), is_object($this->value) && method_exists($this->value, '__toString') => $this->value->__toString(), is_object($this->value) && method_exists($this->value, 'toString') => $this->value->toString(), - $this->value instanceof \Illuminate\Testing\TestResponse => $this->value->getContent(), // @phpstan-ignore-line + $this->value instanceof TestResponse => $this->value->getContent(), // @phpstan-ignore-line is_array($this->value) => json_encode($this->value, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT), $this->value instanceof Traversable => json_encode(iterator_to_array($this->value), JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT), $this->value instanceof JsonSerializable => json_encode($this->value->jsonSerialize(), JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT), @@ -983,7 +984,7 @@ final class Expectation */ private function export(mixed $value): string { - if (! $this->exporter instanceof \Pest\Support\Exporter) { + if (! $this->exporter instanceof Exporter) { $this->exporter = Exporter::default(); } diff --git a/src/PendingCalls/Concerns/Describable.php b/src/PendingCalls/Concerns/Describable.php index 0208ea4b..cac2fb0b 100644 --- a/src/PendingCalls/Concerns/Describable.php +++ b/src/PendingCalls/Concerns/Describable.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Pest\PendingCalls\Concerns; +use Pest\Support\Description; + /** * @internal */ @@ -12,14 +14,14 @@ trait Describable /** * Note: this is property is not used; however, it gets added automatically by rector php. * - * @var array + * @var array */ public array $__describing; /** * The describing of the test case. * - * @var array + * @var array */ public array $describing = []; } diff --git a/src/PendingCalls/DescribeCall.php b/src/PendingCalls/DescribeCall.php index 08ebc15e..712aedcb 100644 --- a/src/PendingCalls/DescribeCall.php +++ b/src/PendingCalls/DescribeCall.php @@ -73,7 +73,7 @@ final class DescribeCall { $filename = Backtrace::file(); - if (! $this->currentBeforeEachCall instanceof \Pest\PendingCalls\BeforeEachCall) { + if (! $this->currentBeforeEachCall instanceof BeforeEachCall) { $this->currentBeforeEachCall = new BeforeEachCall(TestSuite::getInstance(), $filename); $this->currentBeforeEachCall->describing[] = $this->description; diff --git a/src/PendingCalls/TestCall.php b/src/PendingCalls/TestCall.php index a65c8bb5..79264596 100644 --- a/src/PendingCalls/TestCall.php +++ b/src/PendingCalls/TestCall.php @@ -22,6 +22,10 @@ use Pest\Support\NullClosure; use Pest\Support\Str; use Pest\TestSuite; use PHPUnit\Framework\AssertionFailedError; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\CoversFunction; +use PHPUnit\Framework\Attributes\CoversTrait; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; /** @@ -211,7 +215,7 @@ final class TestCall // @phpstan-ignore-line { foreach ($groups as $group) { $this->testCaseMethod->attributes[] = new Attribute( - \PHPUnit\Framework\Attributes\Group::class, + Group::class, [$group], ); } @@ -604,7 +608,7 @@ final class TestCall // @phpstan-ignore-line { foreach ($classes as $class) { $this->testCaseFactoryAttributes[] = new Attribute( - \PHPUnit\Framework\Attributes\CoversClass::class, + CoversClass::class, [$class], ); } @@ -627,7 +631,7 @@ final class TestCall // @phpstan-ignore-line { foreach ($traits as $trait) { $this->testCaseFactoryAttributes[] = new Attribute( - \PHPUnit\Framework\Attributes\CoversTrait::class, + CoversTrait::class, [$trait], ); } @@ -650,7 +654,7 @@ final class TestCall // @phpstan-ignore-line { foreach ($functions as $function) { $this->testCaseFactoryAttributes[] = new Attribute( - \PHPUnit\Framework\Attributes\CoversFunction::class, + CoversFunction::class, [$function], ); } diff --git a/src/Plugins/Parallel/Handlers/Laravel.php b/src/Plugins/Parallel/Handlers/Laravel.php index f634be56..30063d5f 100644 --- a/src/Plugins/Parallel/Handlers/Laravel.php +++ b/src/Plugins/Parallel/Handlers/Laravel.php @@ -7,6 +7,7 @@ namespace Pest\Plugins\Parallel\Handlers; use Closure; use Composer\InstalledVersions; use Illuminate\Testing\ParallelRunner; +use Orchestra\Testbench\TestCase; use ParaTest\Options; use ParaTest\RunnerInterface; use Pest\Contracts\Plugins\HandlesArguments; @@ -39,13 +40,13 @@ final class Laravel implements HandlesArguments * Executes the given closure when running Laravel. * * @param array $arguments - * @param CLosure(array): array $closure + * @param Closure(array): array $closure * @return array */ private function whenUsingLaravel(array $arguments, Closure $closure): array { $isLaravelApplication = InstalledVersions::isInstalled('laravel/framework', false); - $isLaravelPackage = class_exists(\Orchestra\Testbench\TestCase::class); + $isLaravelPackage = class_exists(TestCase::class); if ($isLaravelApplication && ! $isLaravelPackage) { return $closure($arguments); diff --git a/src/Support/Closure.php b/src/Support/Closure.php index e447903f..bf715780 100644 --- a/src/Support/Closure.php +++ b/src/Support/Closure.php @@ -19,14 +19,14 @@ final class Closure */ public static function bind(?BaseClosure $closure, ?object $newThis, object|string|null $newScope = 'static'): BaseClosure { - if (! $closure instanceof \Closure) { + if (! $closure instanceof BaseClosure) { throw ShouldNotHappen::fromMessage('Could not bind null closure.'); } // @phpstan-ignore-next-line $closure = BaseClosure::bind($closure, $newThis, $newScope); - if (! $closure instanceof \Closure) { + if (! $closure instanceof BaseClosure) { throw ShouldNotHappen::fromMessage('Could not bind closure.'); } diff --git a/src/Support/Container.php b/src/Support/Container.php index 241825f5..d43c22be 100644 --- a/src/Support/Container.php +++ b/src/Support/Container.php @@ -28,7 +28,7 @@ final class Container */ public static function getInstance(): self { - if (! self::$instance instanceof \Pest\Support\Container) { + if (! self::$instance instanceof Container) { self::$instance = new self; } diff --git a/src/Support/Reflection.php b/src/Support/Reflection.php index d4f5f133..ac1a4273 100644 --- a/src/Support/Reflection.php +++ b/src/Support/Reflection.php @@ -8,6 +8,7 @@ use Closure; use InvalidArgumentException; use Pest\Exceptions\ShouldNotHappen; use Pest\TestSuite; +use PHPUnit\Framework\TestCase; use ReflectionClass; use ReflectionException; use ReflectionFunction; @@ -66,7 +67,7 @@ final class Reflection { $test = TestSuite::getInstance()->test; - if (! $test instanceof \PHPUnit\Framework\TestCase) { + if (! $test instanceof TestCase) { return self::bindCallable($callable); } @@ -221,7 +222,7 @@ final class Reflection { $getProperties = fn (ReflectionClass $reflectionClass): array => array_filter( array_map( - fn (ReflectionProperty $property): \ReflectionProperty => $property, + fn (ReflectionProperty $property): ReflectionProperty => $property, $reflectionClass->getProperties(), ), fn (ReflectionProperty $property): bool => $property->getDeclaringClass()->getName() === $reflectionClass->getName(), ); @@ -256,7 +257,7 @@ final class Reflection { $getMethods = fn (ReflectionClass $reflectionClass): array => array_filter( array_map( - fn (ReflectionMethod $method): \ReflectionMethod => $method, + fn (ReflectionMethod $method): ReflectionMethod => $method, $reflectionClass->getMethods($filter), ), fn (ReflectionMethod $method): bool => $method->getDeclaringClass()->getName() === $reflectionClass->getName(), ); diff --git a/tests/Autoload.php b/tests/Autoload.php index 2d3ce530..5bd3c23b 100644 --- a/tests/Autoload.php +++ b/tests/Autoload.php @@ -1,5 +1,7 @@ bar = 0; beforeAll(function () use ($foo) { diff --git a/tests/Features/Coverage.php b/tests/Features/Coverage.php index 974568e6..55ce4164 100644 --- a/tests/Features/Coverage.php +++ b/tests/Features/Coverage.php @@ -17,7 +17,7 @@ it('adds coverage if --coverage exist', function () { $arguments = $plugin->handleArguments(['--coverage']); expect($arguments)->toEqual(['--coverage-php', Coverage::getPath()]) ->and($plugin->coverage)->toBeTrue(); -})->skip(! \Pest\Support\Coverage::isAvailable() || ! function_exists('xdebug_info') || ! in_array('coverage', xdebug_info('mode'), true), 'Coverage is not available'); +})->skip(! Coverage::isAvailable() || ! function_exists('xdebug_info') || ! in_array('coverage', xdebug_info('mode'), true), 'Coverage is not available'); it('adds coverage if --min exist', function () { $plugin = new CoveragePlugin(new ConsoleOutput); diff --git a/tests/Features/Helpers.php b/tests/Features/Helpers.php index e32faffa..d2ea9485 100644 --- a/tests/Features/Helpers.php +++ b/tests/Features/Helpers.php @@ -39,7 +39,7 @@ it('allows to call underlying protected/private methods', function () { it('throws error if method do not exist', function () { test()->foo(); -})->throws(\ReflectionException::class, 'Call to undefined method PHPUnit\Framework\TestCase::foo()'); +})->throws(ReflectionException::class, 'Call to undefined method PHPUnit\Framework\TestCase::foo()'); it('can forward unexpected calls to any global function')->_assertThat(); diff --git a/tests/Helpers.php b/tests/Helpers.php index 7a7be690..f7870f38 100644 --- a/tests/Helpers.php +++ b/tests/Helpers.php @@ -1,7 +1,9 @@ use(Tests\CustomTestCase\CustomTestCase::class)->in(__DIR__); +use Tests\CustomTestCase\CustomTestCase; + +pest()->use(CustomTestCase::class)->in(__DIR__); test('closure was bound to CustomTestCase', function () { $this->assertCustomTrue(); diff --git a/tests/PHPUnit/CustomTestCaseInSubFolders/SubFolder2/UsesPerFile.php b/tests/PHPUnit/CustomTestCaseInSubFolders/SubFolder2/UsesPerFile.php index 676e80f4..edce0fe6 100644 --- a/tests/PHPUnit/CustomTestCaseInSubFolders/SubFolder2/UsesPerFile.php +++ b/tests/PHPUnit/CustomTestCaseInSubFolders/SubFolder2/UsesPerFile.php @@ -1,5 +1,7 @@ printer(); - expect($theme)->toBeInstanceOf(Pest\Configuration\Printer::class); + expect($theme)->toBeInstanceOf(Printer::class); }); diff --git a/tests/Visual/Collision.php b/tests/Visual/Collision.php index 7812fc0d..99870cac 100644 --- a/tests/Visual/Collision.php +++ b/tests/Visual/Collision.php @@ -1,8 +1,10 @@ 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true', 'COLLISION_TEST' => true] diff --git a/tests/Visual/Help.php b/tests/Visual/Help.php index eea3fd99..35b25989 100644 --- a/tests/Visual/Help.php +++ b/tests/Visual/Help.php @@ -1,8 +1,10 @@ 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'])); + $process = (new Process(['php', 'bin/pest', '--help'], null, ['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'])); $process->run(); diff --git a/tests/Visual/Success.php b/tests/Visual/Success.php index d87ad304..16d49a38 100644 --- a/tests/Visual/Success.php +++ b/tests/Visual/Success.php @@ -1,5 +1,7 @@ 'integration', '--exclude-group' => 'integration', 'REBUILD_SNAPSHOTS' => false, 'PARATEST' => 0, 'COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'], diff --git a/tests/Visual/TeamCity.php b/tests/Visual/TeamCity.php index c02ee21e..926f3957 100644 --- a/tests/Visual/TeamCity.php +++ b/tests/Visual/TeamCity.php @@ -1,5 +1,7 @@ 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'])); + $process = (new Process(['php', 'bin/pest', '--version'], null, ['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'])); $process->run();