From 08c7d24d037e9e0c7e3fba839e91dc9705bb8fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Fr=C3=A9mont?= Date: Tue, 3 Jun 2025 14:17:40 +0200 Subject: [PATCH] Bump package versions and fix errors --- .github/workflows/build.yml | 10 ++-- .php-version | 1 + composer.json | 16 +++--- psalm.xml | 52 ++++++++++++++++--- ...riendsOfBehatSymfonyExtensionExtension.php | 2 + .../ContextServiceEnvironmentHandler.php | 12 ++++- ...InitializedSymfonyExtensionEnvironment.php | 10 ++++ ...initializedSymfonyExtensionEnvironment.php | 3 ++ src/Driver/Factory/SymfonyDriverFactory.php | 4 ++ src/Driver/SymfonyDriver.php | 2 +- src/Listener/KernelOrchestrator.php | 1 + src/Mink/Mink.php | 1 + src/Mink/MinkParameters.php | 6 +++ src/ServiceContainer/SymfonyExtension.php | 5 ++ 14 files changed, 102 insertions(+), 23 deletions(-) create mode 100644 .php-version diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b9bba79..ab9c55a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,15 +17,15 @@ jobs: fail-fast: false matrix: php-version: - - '8.1' - '8.2' + - '8.3' + - '8.4' symfony-version: - - '6.2.*' - - '6.4.*' - '7.0.*' - exclude: + - '7.3.*' + include: - php-version: '8.1' - symfony-version: '7.0.*' + symfony-version: '6.4.*' steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.php-version b/.php-version new file mode 100644 index 0000000..cf02201 --- /dev/null +++ b/.php-version @@ -0,0 +1 @@ +8.3 diff --git a/composer.json b/composer.json index 8c1ccfd..1c8dc48 100644 --- a/composer.json +++ b/composer.json @@ -12,9 +12,9 @@ ], "require": { "php": "^8.1", - "behat/behat": "^3.6.1", - "symfony/dependency-injection": "^6.2 || ^7.0", - "symfony/http-kernel": "^6.2 || ^7.0" + "behat/behat": "^3.22", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0" }, "require-dev": { "behat/mink-browserkit-driver": "^2.0", @@ -24,11 +24,11 @@ "friends-of-behat/page-object-extension": "^0.3.2", "friends-of-behat/service-container-extension": "^1.1", "sylius-labs/coding-standard": ">=4.1.1, <=4.2.1", - "symfony/browser-kit": "^6.2 || ^7.0", - "symfony/framework-bundle": "^6.2 || ^7.0", - "symfony/process": "^6.2 || ^7.0", - "symfony/yaml": "^6.2 || ^7.0", - "vimeo/psalm": "4.30.0" + "symfony/browser-kit": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/process": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "vimeo/psalm": "^6.0" }, "suggest": { "behat/mink-browserkit-driver": "^2.0", diff --git a/psalm.xml b/psalm.xml index f560e5f..f9a714b 100644 --- a/psalm.xml +++ b/psalm.xml @@ -14,24 +14,62 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php b/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php index 3a9c36f..8196a59 100644 --- a/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php +++ b/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php @@ -22,6 +22,7 @@ use Symfony\Component\HttpKernel\KernelInterface; final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements CompilerPassInterface { + #[\Override] public function load(array $configs, ContainerBuilder $container): void { $this->provideMinkIntegration($container); @@ -31,6 +32,7 @@ final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements $container->registerForAutoconfiguration(Context::class)->addTag('fob.context'); } + #[\Override] public function process(ContainerBuilder $container): void { $this->provideBrowserKitIntegration($container); diff --git a/src/Context/Environment/Handler/ContextServiceEnvironmentHandler.php b/src/Context/Environment/Handler/ContextServiceEnvironmentHandler.php index 77f4309..b67b7ca 100644 --- a/src/Context/Environment/Handler/ContextServiceEnvironmentHandler.php +++ b/src/Context/Environment/Handler/ContextServiceEnvironmentHandler.php @@ -51,11 +51,13 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler $this->contextInitializers[] = $contextInitializer; } + #[\Override] public function supportsSuite(Suite $suite): bool { return $suite->hasSetting('contexts'); } + #[\Override] public function buildEnvironment(Suite $suite): Environment { $symfonyContexts = []; @@ -65,7 +67,6 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler continue; } - /** @var object $service */ $service = $this->getContainer()->get($serviceId); $symfonyContexts[$serviceId] = get_class($service); @@ -79,6 +80,7 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler return new UninitializedSymfonyExtensionEnvironment($suite, $symfonyContexts, $delegatedEnvironment); } + #[\Override] public function supportsEnvironmentAndSubject(Environment $environment, $testSubject = null): bool { return $environment instanceof UninitializedSymfonyExtensionEnvironment; @@ -87,6 +89,7 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler /** * @throws EnvironmentIsolationException */ + #[\Override] public function isolateEnvironment(Environment $environment, $testSubject = null): Environment { $this->assertEnvironmentCanBeIsolated($environment, $testSubject); @@ -158,7 +161,12 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler return new GenericSuite($suite->getName(), array_merge($suite->getSettings(), ['contexts' => $contexts])); } - private function normalizeContext($context): string + /** + * @return (int|string)|false + * + * @psalm-return array-key|false + */ + private function normalizeContext($context) { if (is_array($context)) { return current(array_keys($context)); diff --git a/src/Context/Environment/InitializedSymfonyExtensionEnvironment.php b/src/Context/Environment/InitializedSymfonyExtensionEnvironment.php index 8a40dd2..e83b1a7 100644 --- a/src/Context/Environment/InitializedSymfonyExtensionEnvironment.php +++ b/src/Context/Environment/InitializedSymfonyExtensionEnvironment.php @@ -43,11 +43,13 @@ final class InitializedSymfonyExtensionEnvironment implements SymfonyExtensionEn $this->contexts[get_class($context)] = $context; } + #[\Override] public function getSuite(): Suite { return $this->suite; } + #[\Override] public function bindCallee(Callee $callee): callable { $callable = $callee->getCallable(); @@ -59,16 +61,24 @@ final class InitializedSymfonyExtensionEnvironment implements SymfonyExtensionEn return $callable; } + #[\Override] public function hasContexts(): bool { return count($this->contexts) > 0; } + #[\Override] + /** + * @return key-of[] + * + * @psalm-return list>> + */ public function getContextClasses(): array { return array_keys($this->contexts); } + #[\Override] public function hasContextClass($class): bool { return isset($this->contexts[$class]); diff --git a/src/Context/Environment/UninitializedSymfonyExtensionEnvironment.php b/src/Context/Environment/UninitializedSymfonyExtensionEnvironment.php index db1504e..28bad54 100644 --- a/src/Context/Environment/UninitializedSymfonyExtensionEnvironment.php +++ b/src/Context/Environment/UninitializedSymfonyExtensionEnvironment.php @@ -42,16 +42,19 @@ final class UninitializedSymfonyExtensionEnvironment extends StaticEnvironment i return array_keys($this->contexts); } + #[\Override] public function hasContexts(): bool { return count($this->contexts) > 0 || $this->delegatedEnvironment->hasContexts(); } + #[\Override] public function getContextClasses(): array { return array_merge(array_values($this->contexts), $this->delegatedEnvironment->getContextClasses()); } + #[\Override] public function hasContextClass($class): bool { return in_array($class, $this->contexts, true) || $this->delegatedEnvironment->hasContextClass($class); diff --git a/src/Driver/Factory/SymfonyDriverFactory.php b/src/Driver/Factory/SymfonyDriverFactory.php index a09b539..b148570 100644 --- a/src/Driver/Factory/SymfonyDriverFactory.php +++ b/src/Driver/Factory/SymfonyDriverFactory.php @@ -25,20 +25,24 @@ final class SymfonyDriverFactory implements DriverFactory $this->kernel = $kernel; } + #[\Override] public function getDriverName(): string { return $this->name; } + #[\Override] public function supportsJavascript(): bool { return false; } + #[\Override] public function configure(ArrayNodeDefinition $builder): void { } + #[\Override] public function buildDriver(array $config): Definition { if (!class_exists(BrowserKitDriver::class)) { diff --git a/src/Driver/SymfonyDriver.php b/src/Driver/SymfonyDriver.php index 77adad9..e7abf06 100644 --- a/src/Driver/SymfonyDriver.php +++ b/src/Driver/SymfonyDriver.php @@ -34,6 +34,7 @@ final class SymfonyDriver extends BrowserKitDriver parent::__construct($this->createBrowser(), $this->baseUrl); } + #[\Override] public function reset() { parent::reset(); @@ -61,7 +62,6 @@ final class SymfonyDriver extends BrowserKitDriver private function createBrowser(): AbstractBrowser { - /** @var object $testClient */ $testClient = $this->kernel->getContainer()->get('test.client'); if (!$testClient instanceof AbstractBrowser) { diff --git a/src/Listener/KernelOrchestrator.php b/src/Listener/KernelOrchestrator.php index 6daaaa5..dbd9fb0 100644 --- a/src/Listener/KernelOrchestrator.php +++ b/src/Listener/KernelOrchestrator.php @@ -28,6 +28,7 @@ final class KernelOrchestrator implements EventSubscriberInterface $this->behatContainer = $behatContainer; } + #[\Override] public static function getSubscribedEvents(): array { return [ diff --git a/src/Mink/Mink.php b/src/Mink/Mink.php index e8f7ac9..5c8fb87 100644 --- a/src/Mink/Mink.php +++ b/src/Mink/Mink.php @@ -18,6 +18,7 @@ class Mink extends BaseMink * in an invalid state. Therefore, not stopping all the sessions while destructing Mink * saves our sanity. */ + #[\Override] public function __destruct() { // Intentionally left empty diff --git a/src/Mink/MinkParameters.php b/src/Mink/MinkParameters.php index 28ae204..7f79d95 100644 --- a/src/Mink/MinkParameters.php +++ b/src/Mink/MinkParameters.php @@ -17,11 +17,13 @@ class MinkParameters implements \Countable, \IteratorAggregate, \ArrayAccess $this->minkParameters = $minkParameters; } + #[\Override] public function getIterator(): \Traversable { return new \ArrayIterator($this->minkParameters); } + #[\Override] public function offsetExists($offset): bool { return array_key_exists($offset, $this->minkParameters); @@ -30,22 +32,26 @@ class MinkParameters implements \Countable, \IteratorAggregate, \ArrayAccess /** * @return mixed */ + #[\Override] #[ReturnTypeWillChange] public function offsetGet($offset) { return $this->minkParameters[$offset] ?? null; } + #[\Override] public function offsetSet($offset, $value): void { throw new \BadMethodCallException(sprintf('"%s" is immutable.', self::class)); } + #[\Override] public function offsetUnset($offset): void { throw new \BadMethodCallException(sprintf('"%s" is immutable.', self::class)); } + #[\Override] public function count(): int { return count($this->minkParameters); diff --git a/src/ServiceContainer/SymfonyExtension.php b/src/ServiceContainer/SymfonyExtension.php index 259ac8a..714dbd4 100644 --- a/src/ServiceContainer/SymfonyExtension.php +++ b/src/ServiceContainer/SymfonyExtension.php @@ -40,16 +40,19 @@ final class SymfonyExtension implements Extension /** @var bool */ private $minkExtensionFound = false; + #[\Override] public function getConfigKey(): string { return 'fob_symfony'; } + #[\Override] public function initialize(ExtensionManager $extensionManager): void { $this->registerMinkDriver($extensionManager); } + #[\Override] public function configure(ArrayNodeDefinition $builder): void { $builder @@ -69,6 +72,7 @@ final class SymfonyExtension implements Extension ; } + #[\Override] public function load(ContainerBuilder $container, array $config): void { $this->setupTestEnvironment($config['kernel']['environment'] ?? 'test'); @@ -89,6 +93,7 @@ final class SymfonyExtension implements Extension } } + #[\Override] public function process(ContainerBuilder $container): void { $this->processEnvironmentHandler($container);