From 93ee57b48a86137546a715cf60774ee77f71a5f2 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 24 Apr 2024 10:49:08 +0200 Subject: [PATCH 01/61] convert empty CSV header names into numeric keys --- .../Component/Serializer/Encoder/CsvEncoder.php | 14 ++++++++++---- .../Serializer/Tests/Encoder/CsvEncoderTest.php | 8 +++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php b/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php index 55f78b1d0e013..a2d4df909dce8 100644 --- a/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php @@ -181,18 +181,24 @@ public function decode(string $data, string $format, array $context = []) $depth = $headerCount[$i]; $arr = &$item; for ($j = 0; $j < $depth; ++$j) { + $headerName = $headers[$i][$j]; + + if ('' === $headerName) { + $headerName = $i; + } + // Handle nested arrays if ($j === ($depth - 1)) { - $arr[$headers[$i][$j]] = $cols[$i]; + $arr[$headerName] = $cols[$i]; continue; } - if (!isset($arr[$headers[$i][$j]])) { - $arr[$headers[$i][$j]] = []; + if (!isset($arr[$headerName])) { + $arr[$headerName] = []; } - $arr = &$arr[$headers[$i][$j]]; + $arr = &$arr[$headerName]; } } diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php index 06cf6a0617d86..3d2163c06e923 100644 --- a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php +++ b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php @@ -218,7 +218,13 @@ public function testDecodeEmptyData() { $data = $this->encoder->decode("\n\n", 'csv'); - $this->assertSame([['' => null]], $data); + $this->assertSame([[0 => null]], $data); + } + + public function testMultipleEmptyHeaderNamesWithSeparator() + { + $this->encoder->decode(',. +,', 'csv'); } public function testEncodeVariableStructure() From f456e75ec836277b16c90f522c88a1bf2e3eb808 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 29 Apr 2024 10:23:08 +0200 Subject: [PATCH 02/61] better distinguish URL schemes and windows drive letters --- src/Symfony/Component/Filesystem/Path.php | 2 +- src/Symfony/Component/Filesystem/Tests/PathTest.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Filesystem/Path.php b/src/Symfony/Component/Filesystem/Path.php index 858e1623eb2cd..eb6d8ea080e8e 100644 --- a/src/Symfony/Component/Filesystem/Path.php +++ b/src/Symfony/Component/Filesystem/Path.php @@ -368,7 +368,7 @@ public static function isAbsolute(string $path): bool } // Strip scheme - if (false !== $schemeSeparatorPosition = strpos($path, '://')) { + if (false !== ($schemeSeparatorPosition = strpos($path, '://')) && 1 !== $schemeSeparatorPosition) { $path = substr($path, $schemeSeparatorPosition + 3); } diff --git a/src/Symfony/Component/Filesystem/Tests/PathTest.php b/src/Symfony/Component/Filesystem/Tests/PathTest.php index 77b9f2a2d0576..17c6142c3572e 100644 --- a/src/Symfony/Component/Filesystem/Tests/PathTest.php +++ b/src/Symfony/Component/Filesystem/Tests/PathTest.php @@ -375,6 +375,8 @@ public static function provideIsAbsolutePathTests(): \Generator yield ['C:/css/style.css', true]; yield ['D:/', true]; + yield ['C:///windows', true]; + yield ['C://test', true]; yield ['E:\\css\\style.css', true]; yield ['F:\\', true]; From 9f7fc26f3c72225ae30cb45fc175d0d917232529 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 29 Apr 2024 13:21:23 +0200 Subject: [PATCH 03/61] Bump Symfony version to 5.4.40 --- src/Symfony/Component/HttpKernel/Kernel.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index d4fe96b6b7b56..c51f96e861e40 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -78,12 +78,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static $freshCache = []; - public const VERSION = '5.4.39'; - public const VERSION_ID = 50439; + public const VERSION = '5.4.40-DEV'; + public const VERSION_ID = 50440; public const MAJOR_VERSION = 5; public const MINOR_VERSION = 4; - public const RELEASE_VERSION = 39; - public const EXTRA_VERSION = ''; + public const RELEASE_VERSION = 40; + public const EXTRA_VERSION = 'DEV'; public const END_OF_MAINTENANCE = '11/2024'; public const END_OF_LIFE = '11/2025'; From ca2040e11960a0d583461f4ebaf42a57efa6f4e4 Mon Sep 17 00:00:00 2001 From: Ivan Mezinov Date: Tue, 23 Apr 2024 02:07:40 +0300 Subject: [PATCH 04/61] show overridden vars too --- .../Component/Dotenv/Command/DebugCommand.php | 95 ++++++++++--------- .../Dotenv/Tests/Command/DebugCommandTest.php | 5 +- 2 files changed, 56 insertions(+), 44 deletions(-) diff --git a/src/Symfony/Component/Dotenv/Command/DebugCommand.php b/src/Symfony/Component/Dotenv/Command/DebugCommand.php index 0585043cd9463..237d7b7cfd228 100644 --- a/src/Symfony/Component/Dotenv/Command/DebugCommand.php +++ b/src/Symfony/Component/Dotenv/Command/DebugCommand.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Dotenv\Command; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; @@ -49,97 +50,105 @@ protected function execute(InputInterface $input, OutputInterface $output): int return 1; } - $envFiles = $this->getEnvFiles(); - $availableFiles = array_filter($envFiles, function (string $file) { - return is_file($this->getFilePath($file)); - }); + $filePath = $this->projectDirectory.\DIRECTORY_SEPARATOR.'.env'; + $envFiles = $this->getEnvFiles($filePath); + $availableFiles = array_filter($envFiles, 'is_file'); - if (\in_array('.env.local.php', $availableFiles, true)) { + if (\in_array(sprintf('%s.local.php', $filePath), $availableFiles, true)) { $io->warning('Due to existing dump file (.env.local.php) all other dotenv files are skipped.'); } - if (is_file($this->getFilePath('.env')) && is_file($this->getFilePath('.env.dist'))) { - $io->warning('The file .env.dist gets skipped due to the existence of .env.'); + if (is_file($filePath) && is_file(sprintf('%s.dist', $filePath))) { + $io->warning(sprintf('The file %s.dist gets skipped due to the existence of %1$s.', $this->getRelativeName($filePath))); } $io->section('Scanned Files (in descending priority)'); - $io->listing(array_map(static function (string $envFile) use ($availableFiles) { + $io->listing(array_map(function (string $envFile) use ($availableFiles) { return \in_array($envFile, $availableFiles, true) - ? sprintf('✓ %s', $envFile) - : sprintf('⨯ %s', $envFile); + ? sprintf('✓ %s', $this->getRelativeName($envFile)) + : sprintf('⨯ %s', $this->getRelativeName($envFile)); }, $envFiles)); + $variables = $this->getVariables($availableFiles); + $io->section('Variables'); $io->table( - array_merge(['Variable', 'Value'], $availableFiles), - $this->getVariables($availableFiles) + array_merge(['Variable', 'Value'], array_map([$this, 'getRelativeName'], $availableFiles)), + $variables ); - $io->comment('Note real values might be different between web and CLI.'); + $io->comment('Note that values might be different between web and CLI.'); return 0; } private function getVariables(array $envFiles): array { - $dotenvVars = $_SERVER['SYMFONY_DOTENV_VARS'] ?? ''; + $variables = []; + $fileValues = []; + $dotenvVars = array_flip(explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? '')); - if ('' === $dotenvVars) { - return []; + foreach ($envFiles as $envFile) { + $fileValues[$envFile] = $this->loadValues($envFile); + $variables += $fileValues[$envFile]; } - $vars = explode(',', $dotenvVars); - sort($vars); + foreach ($variables as $var => $varDetails) { + $realValue = $_SERVER[$var] ?? ''; + $varDetails = [$var, ''.OutputFormatter::escape($realValue).'']; + $varSeen = !isset($dotenvVars[$var]); - $output = []; - $fileValues = []; - foreach ($vars as $var) { - $realValue = $_SERVER[$var]; - $varDetails = [$var, $realValue]; foreach ($envFiles as $envFile) { - $values = $fileValues[$envFile] ?? $fileValues[$envFile] = $this->loadValues($envFile); - - $varString = $values[$var] ?? 'n/a'; - $shortenedVar = $this->getHelper('formatter')->truncate($varString, 30); - $varDetails[] = $varString === $realValue ? ''.$shortenedVar.'' : $shortenedVar; + if (null === $value = $fileValues[$envFile][$var] ?? null) { + $varDetails[] = 'n/a'; + continue; + } + + $shortenedValue = OutputFormatter::escape($this->getHelper('formatter')->truncate($value, 30)); + $varDetails[] = $value === $realValue && !$varSeen ? ''.$shortenedValue.'' : $shortenedValue; + $varSeen = $varSeen || $value === $realValue; } - $output[] = $varDetails; + $variables[$var] = $varDetails; } - return $output; + ksort($variables); + + return $variables; } - private function getEnvFiles(): array + private function getEnvFiles(string $filePath): array { $files = [ - '.env.local.php', - sprintf('.env.%s.local', $this->kernelEnvironment), - sprintf('.env.%s', $this->kernelEnvironment), + sprintf('%s.local.php', $filePath), + sprintf('%s.%s.local', $filePath, $this->kernelEnvironment), + sprintf('%s.%s', $filePath, $this->kernelEnvironment), ]; if ('test' !== $this->kernelEnvironment) { - $files[] = '.env.local'; + $files[] = sprintf('%s.local', $filePath); } - if (!is_file($this->getFilePath('.env')) && is_file($this->getFilePath('.env.dist'))) { - $files[] = '.env.dist'; + if (!is_file($filePath) && is_file(sprintf('%s.dist', $filePath))) { + $files[] = sprintf('%s.dist', $filePath); } else { - $files[] = '.env'; + $files[] = $filePath; } return $files; } - private function getFilePath(string $file): string + private function getRelativeName(string $filePath): string { - return $this->projectDirectory.\DIRECTORY_SEPARATOR.$file; + if (str_starts_with($filePath, $this->projectDirectory)) { + return substr($filePath, \strlen($this->projectDirectory) + 1); + } + + return basename($filePath); } - private function loadValues(string $file): array + private function loadValues(string $filePath): array { - $filePath = $this->getFilePath($file); - if (str_ends_with($filePath, '.php')) { return include $filePath; } diff --git a/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php index b8b7e39008607..001baec0c2539 100644 --- a/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php @@ -52,8 +52,11 @@ public function testEmptyDotEnvVarsList() ---------- ------- ------------ ------%S Variable Value .env.local .env%S ---------- ------- ------------ ------%S + FOO baz bar%S + TEST123 n/a true%S + ---------- ------- ------------ ------%S - // Note real values might be different between web and CLI.%S + // Note that values might be different between web and CLI.%S %a OUTPUT; From 4d2679de7a0760391d6be33928d775e599897c89 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 29 Apr 2024 21:38:17 +0200 Subject: [PATCH 05/61] accept AbstractAsset instances when filtering schemas --- .../Bridge/Doctrine/Transport/Connection.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php index 100058d240fcd..6980a2e6b03fb 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php @@ -21,6 +21,7 @@ use Doctrine\DBAL\Platforms\OraclePlatform; use Doctrine\DBAL\Query\QueryBuilder; use Doctrine\DBAL\Result; +use Doctrine\DBAL\Schema\AbstractAsset; use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Schema\Comparator; use Doctrine\DBAL\Schema\Schema; @@ -289,7 +290,17 @@ public function setup(): void { $configuration = $this->driverConnection->getConfiguration(); $assetFilter = $configuration->getSchemaAssetsFilter(); - $configuration->setSchemaAssetsFilter(function (string $tableName) { return $tableName === $this->configuration['table_name']; }); + $configuration->setSchemaAssetsFilter(function ($tableName) { + if ($tableName instanceof AbstractAsset) { + $tableName = $tableName->getName(); + } + + if (!\is_string($tableName)) { + throw new \TypeError(sprintf('The table name must be an instance of "%s" or a string ("%s" given).', AbstractAsset::class, get_debug_type($tableName))); + } + + return $tableName === $this->configuration['table_name']; + }); $this->updateSchema(); $configuration->setSchemaAssetsFilter($assetFilter); $this->autoSetup = false; From 3d174a96ff253a877f81fe7216e1e72eae9d1d0e Mon Sep 17 00:00:00 2001 From: Arend Hummeling Date: Mon, 29 Apr 2024 23:27:03 +0200 Subject: [PATCH 06/61] fix: remove unwanted type cast --- src/Symfony/Component/Cache/Traits/RedisTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php index af6390b9bcfa5..33f37d828ea81 100644 --- a/src/Symfony/Component/Cache/Traits/RedisTrait.php +++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php @@ -499,7 +499,7 @@ protected function doClear(string $namespace) } $this->doDelete($keys); } - } while ($cursor = (int) $cursor); + } while ($cursor); } return $cleared; From 4118849d868e0a228a83fac2c4b0c339e4b9fcfc Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Fri, 26 Apr 2024 13:35:27 +0200 Subject: [PATCH 07/61] Remove calls to `onConsecutiveCalls()` --- ...ineOpenTransactionLoggerMiddlewareTest.php | 2 +- .../Tests/Handler/ConsoleHandlerTest.php | 5 +- .../Tests/Translation/TranslatorTest.php | 2 +- .../Config/Tests/Loader/FileLoaderTest.php | 16 ++-- .../Config/Tests/Util/XmlUtilsTest.php | 3 +- .../EventListener/SessionListenerTest.php | 20 ++--- .../Fragment/InlineFragmentRendererTest.php | 15 +++- .../HttpKernel/Tests/HttpCache/EsiTest.php | 2 +- .../HttpKernel/Tests/HttpCache/SsiTest.php | 2 +- src/Symfony/Component/Lock/Tests/LockTest.php | 43 ++++++----- .../Tests/Transport/FailoverTransportTest.php | 73 ++++++++++++------ .../Transport/RoundRobinTransportTest.php | 12 ++- .../Tests/Transport/AmazonSqsSenderTest.php | 6 +- .../Amqp/Tests/Transport/AmqpSenderTest.php | 10 +-- .../Amqp/Tests/Transport/ConnectionTest.php | 66 ++++++++-------- .../Tests/Transport/BeanstalkdSenderTest.php | 4 +- .../Tests/Transport/DoctrineSenderTest.php | 4 +- .../Redis/Tests/Transport/ConnectionTest.php | 2 +- .../Redis/Tests/Transport/RedisSenderTest.php | 2 +- .../Command/SetupTransportsCommandTest.php | 12 ++- .../DispatchAfterCurrentBusMiddlewareTest.php | 76 ++++++++++--------- .../Tests/Transport/FailoverTransportTest.php | 43 +++++++---- .../Tests/Hasher/UserPasswordHasherTest.php | 2 +- .../Tests/Encoder/UserPasswordEncoderTest.php | 2 +- .../AbstractObjectNormalizerTest.php | 15 ++-- .../Mapping/Loader/PropertyInfoLoaderTest.php | 13 ++-- 26 files changed, 257 insertions(+), 195 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php b/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php index 626c19eb4ceae..3682ad00d5085 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php @@ -52,7 +52,7 @@ public function testMiddlewareWrapsInTransactionAndFlushes() { $this->connection->expects($this->exactly(1)) ->method('isTransactionActive') - ->will($this->onConsecutiveCalls(true, true, false)) + ->willReturn(true, true, false) ; $this->middleware->handle(new Envelope(new \stdClass()), $this->getStackMock()); diff --git a/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php b/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php index 4ddaddbde1218..f83599244a298 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php @@ -117,10 +117,7 @@ public function testVerbosityChanged() $output ->expects($this->exactly(2)) ->method('getVerbosity') - ->willReturnOnConsecutiveCalls( - OutputInterface::VERBOSITY_QUIET, - OutputInterface::VERBOSITY_DEBUG - ) + ->willReturn(OutputInterface::VERBOSITY_QUIET, OutputInterface::VERBOSITY_DEBUG) ; $handler = new ConsoleHandler($output); $this->assertFalse($handler->isHandling(['level' => Logger::NOTICE]), diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php index dc00ef99e8210..c13d50bd23f73 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php @@ -271,7 +271,7 @@ protected function getLoader() $loader ->expects($this->exactly(7)) ->method('load') - ->willReturnOnConsecutiveCalls( + ->willReturn( $this->getCatalogue('fr', [ 'foo' => 'foo (FR)', ]), diff --git a/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php b/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php index cae46ca8f9adf..7503dd196d7d6 100644 --- a/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php +++ b/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php @@ -25,13 +25,15 @@ public function testImportWithFileLocatorDelegation() $locatorMock = $this->createMock(FileLocatorInterface::class); $locatorMockForAdditionalLoader = $this->createMock(FileLocatorInterface::class); - $locatorMockForAdditionalLoader->expects($this->any())->method('locate')->will($this->onConsecutiveCalls( - ['path/to/file1'], // Default - ['path/to/file1', 'path/to/file2'], // First is imported - ['path/to/file1', 'path/to/file2'], // Second is imported - ['path/to/file1'], // Exception - ['path/to/file1', 'path/to/file2'] // Exception - )); + $locatorMockForAdditionalLoader->expects($this->any()) + ->method('locate') + ->willReturn( + ['path/to/file1'], + ['path/to/file1', 'path/to/file2'], + ['path/to/file1', 'path/to/file2'], + ['path/to/file1'], + ['path/to/file1', 'path/to/file2'] + ); $fileLoader = new TestFileLoader($locatorMock); $fileLoader->setSupports(false); diff --git a/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php b/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php index 8c1cd8543be19..be8c53155f0ff 100644 --- a/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php +++ b/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php @@ -76,7 +76,8 @@ public function testLoadFile() } $mock = $this->createMock(Validator::class); - $mock->expects($this->exactly(2))->method('validate')->will($this->onConsecutiveCalls(false, true)); + $mock->expects($this->exactly(2))->method('validate') + ->willReturn(false, true); try { XmlUtils::loadFile($fixtures.'valid.xml', [$mock, 'validate']); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php index f3265823a5765..1934af66247dd 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php @@ -45,7 +45,7 @@ class SessionListenerTest extends TestCase public function testSessionCookieOptions(array $phpSessionOptions, array $sessionOptions, array $expectedSessionOptions) { $session = $this->createMock(Session::class); - $session->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->method('getUsageIndex')->willReturn(0, 1); $session->method('getId')->willReturn('123456'); $session->method('getName')->willReturn('PHPSESSID'); $session->method('save'); @@ -398,7 +398,7 @@ public function testSessionUsesFactory() public function testResponseIsPrivateIfSessionStarted() { $session = $this->createMock(Session::class); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $container = new Container(); $container->set('initialized_session', $session); @@ -423,7 +423,7 @@ public function testResponseIsPrivateIfSessionStarted() public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent() { $session = $this->createMock(Session::class); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $container = new Container(); $container->set('initialized_session', $session); @@ -450,7 +450,7 @@ public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent() public function testSessionSaveAndResponseHasSessionCookie() { $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock(); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $session->expects($this->exactly(1))->method('getId')->willReturn('123456'); $session->expects($this->exactly(1))->method('getName')->willReturn('PHPSESSID'); $session->expects($this->exactly(1))->method('save'); @@ -535,7 +535,7 @@ public function testUninitializedSessionWithoutInitializedSession() public function testResponseHeadersMaxAgeAndExpiresNotBeOverridenIfSessionStarted() { $session = $this->createMock(Session::class); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $container = new Container(); $container->set('initialized_session', $session); @@ -565,7 +565,7 @@ public function testResponseHeadersMaxAgeAndExpiresNotBeOverridenIfSessionStarte public function testResponseHeadersMaxAgeAndExpiresDefaultValuesIfSessionStarted() { $session = $this->createMock(Session::class); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $container = new Container(); $container->set('initialized_session', $session); @@ -618,7 +618,7 @@ public function testSurrogateMainRequestIsPublic() { $session = $this->createMock(Session::class); $session->expects($this->exactly(1))->method('getName')->willReturn('PHPSESSID'); - $session->expects($this->exactly(4))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1, 1, 1)); + $session->expects($this->exactly(4))->method('getUsageIndex')->willReturn(0, 1, 1, 1); $container = new Container(); $container->set('initialized_session', $session); @@ -715,7 +715,7 @@ public function testGetSessionSetsSessionOnMainRequest() public function testSessionUsageExceptionIfStatelessAndSessionUsed() { $session = $this->createMock(Session::class); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $container = new Container(); $container->set('initialized_session', $session); @@ -734,7 +734,7 @@ public function testSessionUsageExceptionIfStatelessAndSessionUsed() public function testSessionUsageLogIfStatelessAndSessionUsed() { $session = $this->createMock(Session::class); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $logger = $this->createMock(LoggerInterface::class); $logger->expects($this->exactly(1))->method('warning'); @@ -759,7 +759,7 @@ public function testSessionIsSavedWhenUnexpectedSessionExceptionThrown() $session->expects($this->exactly(1))->method('getId')->willReturn('123456'); $session->expects($this->exactly(1))->method('getName')->willReturn('PHPSESSID'); $session->method('isStarted')->willReturn(true); - $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); + $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1); $session->expects($this->exactly(1))->method('save'); $container = new Container(); diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index 69bd7445acfd6..fb22a1a0942b2 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -102,10 +102,17 @@ public function testRenderExceptionIgnoreErrors() public function testRenderExceptionIgnoreErrorsWithAlt() { - $strategy = new InlineFragmentRenderer($this->getKernel($this->onConsecutiveCalls( - $this->throwException(new \RuntimeException('foo')), - $this->returnValue(new Response('bar')) - ))); + $strategy = new InlineFragmentRenderer($this->getKernel($this->returnCallback(function () { + static $firstCall = true; + + if ($firstCall) { + $firstCall = false; + + throw new \RuntimeException('foo'); + } + + return new Response('bar'); + }))); $this->assertEquals('bar', $strategy->render('/', Request::create('/'), ['ignore_errors' => true, 'alt' => '/foo'])->getContent()); } diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php index e876f28189087..677d38be62896 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php @@ -245,7 +245,7 @@ protected function getCache($request, $response) if (\is_array($response)) { $cache->expects($this->any()) ->method('handle') - ->will($this->onConsecutiveCalls(...$response)) + ->willReturn(...$response) ; } else { $cache->expects($this->any()) diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php index 97cc8fccd03d0..15e6ebcaee5c6 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php @@ -201,7 +201,7 @@ protected function getCache($request, $response) if (\is_array($response)) { $cache->expects($this->any()) ->method('handle') - ->will($this->onConsecutiveCalls(...$response)) + ->willReturn(...$response) ; } else { $cache->expects($this->any()) diff --git a/src/Symfony/Component/Lock/Tests/LockTest.php b/src/Symfony/Component/Lock/Tests/LockTest.php index ee019a1d8db51..0b0349e81b5dd 100644 --- a/src/Symfony/Component/Lock/Tests/LockTest.php +++ b/src/Symfony/Component/Lock/Tests/LockTest.php @@ -39,7 +39,7 @@ public function testAcquireNoBlocking() ->method('save'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquire(false)); } @@ -55,7 +55,7 @@ public function testAcquireNoBlockingWithPersistingStoreInterface() ->method('save'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquire(false)); } @@ -71,7 +71,7 @@ public function testAcquireBlockingWithPersistingStoreInterface() ->method('save'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquire(true)); } @@ -93,7 +93,7 @@ public function testAcquireBlockingRetryWithPersistingStoreInterface() }); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquire(true)); } @@ -110,7 +110,7 @@ public function testAcquireReturnsFalse() ->willThrowException(new LockConflictedException()); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertFalse($lock->acquire(false)); } @@ -127,7 +127,7 @@ public function testAcquireReturnsFalseStoreInterface() ->willThrowException(new LockConflictedException()); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertFalse($lock->acquire(false)); } @@ -146,7 +146,7 @@ public function testAcquireBlockingWithBlockingStoreInterface() ->method('waitAndSave'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquire(true)); } @@ -166,7 +166,7 @@ public function testAcquireSetsTtl() ->with($key, 10); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $lock->acquire(); } @@ -183,7 +183,7 @@ public function testRefresh() ->with($key, 10); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $lock->refresh(); } @@ -200,7 +200,7 @@ public function testRefreshCustom() ->with($key, 20); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $lock->refresh(20); } @@ -214,7 +214,7 @@ public function testIsAquired() $store ->method('exists') ->with($key) - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->isAcquired()); } @@ -267,8 +267,8 @@ public function testReleaseOnDestruction() $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false) - ; + ->willReturn(true, false); + $store ->expects($this->once()) ->method('delete') @@ -286,8 +286,8 @@ public function testNoAutoReleaseWhenNotConfigured() $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false) - ; + ->willReturn(true, false); + $store ->expects($this->never()) ->method('delete') @@ -313,7 +313,8 @@ public function testReleaseThrowsExceptionWhenDeletionFail() $store ->expects($this->never()) ->method('exists') - ->with($key); + ->with($key) + ->willReturn(true); $lock->release(); } @@ -426,7 +427,7 @@ public function testAcquireReadNoBlockingWithSharedLockStoreInterface() ->method('saveRead'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquireRead(false)); } @@ -534,7 +535,7 @@ public function testAcquireReadBlockingWithBlockingSharedLockStoreInterface() ->method('waitAndSaveRead'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquireRead(true)); } @@ -556,7 +557,7 @@ public function testAcquireReadBlockingWithSharedLockStoreInterface() }); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquireRead(true)); } @@ -572,7 +573,7 @@ public function testAcquireReadBlockingWithBlockingLockStoreInterface() ->method('waitAndSave'); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquireRead(true)); } @@ -594,7 +595,7 @@ public function testAcquireReadBlockingWithPersistingStoreInterface() }); $store ->method('exists') - ->willReturnOnConsecutiveCalls(true, false); + ->willReturn(true, false); $this->assertTrue($lock->acquireRead(true)); } diff --git a/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php index 99be0e01e6e87..21a5b72238927 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php @@ -85,16 +85,30 @@ public function testSendOneDead() public function testSendOneDeadAndRecoveryWithinRetryPeriod() { $t1 = $this->createMock(TransportInterface::class); - $t1->method('send')->willReturnOnConsecutiveCalls($this->throwException(new TransportException())); + + $t1Matcher = $this->any(); + $t1->expects($t1Matcher) + ->method('send') + ->willReturnCallback(function () use ($t1Matcher) { + if (1 === $t1Matcher->getInvocationCount()) { + throw new TransportException(); + } + + return null; + }); + $t2 = $this->createMock(TransportInterface::class); - $t2->expects($this->exactly(4)) + $t2Matcher = $this->exactly(4); + $t2->expects($t2Matcher) ->method('send') - ->willReturnOnConsecutiveCalls( - null, - null, - null, - $this->throwException(new TransportException()) - ); + ->willReturnCallback(function () use ($t2Matcher) { + if (4 === $t2Matcher->getInvocationCount()) { + throw new TransportException(); + } + + return null; + }); + $t = new FailoverTransport([$t1, $t2], 6); $t->send(new RawMessage('')); // t1>fail - t2>sent $this->assertTransports($t, 0, [$t1]); @@ -115,16 +129,19 @@ public function testSendOneDeadAndRecoveryWithinRetryPeriod() public function testSendAllDeadWithinRetryPeriod() { $t1 = $this->createMock(TransportInterface::class); - $t1->method('send')->will($this->throwException(new TransportException())); + $t1->method('send')->willThrowException(new TransportException()); $t1->expects($this->once())->method('send'); $t2 = $this->createMock(TransportInterface::class); - $t2->expects($this->exactly(3)) + $matcher = $this->exactly(3); + $t2->expects($matcher) ->method('send') - ->willReturnOnConsecutiveCalls( - null, - null, - $this->throwException(new TransportException()) - ); + ->willReturnCallback(function () use ($matcher) { + if (3 === $matcher->getInvocationCount()) { + throw new TransportException(); + } + + return null; + }); $t = new FailoverTransport([$t1, $t2], 40); $t->send(new RawMessage('')); sleep(4); @@ -137,15 +154,27 @@ public function testSendAllDeadWithinRetryPeriod() public function testSendOneDeadButRecover() { + $t1Matcher = $this->any(); $t1 = $this->createMock(TransportInterface::class); - $t1->method('send')->willReturnOnConsecutiveCalls($this->throwException(new TransportException())); + $t1->expects($t1Matcher)->method('send')->willReturnCallback(function () use ($t1Matcher) { + if (1 === $t1Matcher->getInvocationCount()) { + throw new TransportException(); + } + + return null; + }); + $t2 = $this->createMock(TransportInterface::class); - $t2->expects($this->exactly(3)) - ->method('send')->willReturnOnConsecutiveCalls( - null, - null, - $this->throwException(new TransportException()) - ); + $matcher = $this->exactly(3); + $t2->expects($matcher) + ->method('send') + ->willReturnCallback(function () use ($matcher) { + if (3 === $matcher->getInvocationCount()) { + throw new TransportException(); + } + + return null; + }); $t = new FailoverTransport([$t1, $t2], 1); $t->send(new RawMessage('')); sleep(1); diff --git a/src/Symfony/Component/Mailer/Tests/Transport/RoundRobinTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/RoundRobinTransportTest.php index 08edb245a0df9..bac1ce152a8de 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/RoundRobinTransportTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/RoundRobinTransportTest.php @@ -120,10 +120,18 @@ public function testSendOneDeadAndRecoveryWithinRetryPeriod() { $t1 = $this->createMock(TransportInterface::class); $t1->expects($this->exactly(3))->method('send'); + + $matcher = $this->exactly(2); $t2 = $this->createMock(TransportInterface::class); - $t2->expects($this->exactly(2)) + $t2->expects($matcher) ->method('send') - ->willReturnOnConsecutiveCalls($this->throwException(new TransportException())); + ->willReturnCallback(function () use ($matcher) { + if (1 === $matcher->getInvocationCount()) { + throw new TransportException(); + } + + return null; + }); $t = new RoundRobinTransport([$t1, $t2], 3); $p = new \ReflectionProperty($t, 'cursor'); $p->setAccessible(true); diff --git a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php index a3269841e4dda..80840c859cb05 100644 --- a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php +++ b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php @@ -31,7 +31,7 @@ public function testSend() $connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers']); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new AmazonSqsSender($connection, $serializer); $sender->send($envelope); @@ -49,7 +49,7 @@ public function testSendWithAmazonSqsFifoStamp() ->with($encoded['body'], $encoded['headers'], 0, $stamp->getMessageGroupId(), $stamp->getMessageDeduplicationId()); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new AmazonSqsSender($connection, $serializer); $sender->send($envelope); @@ -67,7 +67,7 @@ public function testSendWithAmazonSqsXrayTraceHeaderStamp() ->with($encoded['body'], $encoded['headers'], 0, null, null, $stamp->getTraceId()); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new AmazonSqsSender($connection, $serializer); $sender->send($envelope); diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php index 9949a0d59413f..b1dda969fb49b 100644 --- a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php @@ -31,7 +31,7 @@ public function testItSendsTheEncodedMessage() $encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class]]; $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $connection = $this->createMock(Connection::class); $connection->expects($this->once())->method('publish')->with($encoded['body'], $encoded['headers']); @@ -61,7 +61,7 @@ public function testItSendsTheEncodedMessageWithoutHeaders() $encoded = ['body' => '...']; $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $connection = $this->createMock(Connection::class); $connection->expects($this->once())->method('publish')->with($encoded['body'], []); @@ -76,7 +76,7 @@ public function testContentTypeHeaderIsMovedToAttribute() $encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class, 'Content-Type' => 'application/json']]; $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $connection = $this->createMock(Connection::class); unset($encoded['headers']['Content-Type']); @@ -93,7 +93,7 @@ public function testContentTypeHeaderDoesNotOverwriteAttribute() $encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class, 'Content-Type' => 'application/json']]; $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $connection = $this->createMock(Connection::class); unset($encoded['headers']['Content-Type']); @@ -110,7 +110,7 @@ public function testItThrowsATransportExceptionIfItCannotSendTheMessage() $encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class]]; $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $connection = $this->createMock(Connection::class); $connection->method('publish')->with($encoded['body'], $encoded['headers'])->willThrowException(new \AMQPException()); diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php index 32abfd58438be..9de6fa8ca0919 100644 --- a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php @@ -306,7 +306,10 @@ public function testItSetupsTheConnection() $factory->method('createConnection')->willReturn($amqpConnection); $factory->method('createChannel')->willReturn($amqpChannel); $factory->method('createExchange')->willReturn($amqpExchange); - $factory->method('createQueue')->will($this->onConsecutiveCalls($amqpQueue0, $amqpQueue1)); + + $factory + ->method('createQueue') + ->willReturn($amqpQueue0, $amqpQueue1); $amqpExchange->expects($this->once())->method('declareExchange'); $amqpExchange->expects($this->once())->method('publish')->with('body', 'routing_key', \AMQP_NOPARAM, ['headers' => [], 'delivery_mode' => 2, 'timestamp' => time()]); @@ -358,7 +361,9 @@ public function testItSetupsTheTTLConnection() $factory->method('createConnection')->willReturn($amqpConnection); $factory->method('createChannel')->willReturn($amqpChannel); $factory->method('createExchange')->willReturn($amqpExchange); - $factory->method('createQueue')->will($this->onConsecutiveCalls($amqpQueue0, $amqpQueue1)); + $factory + ->method('createQueue') + ->willReturn($amqpQueue0, $amqpQueue1); $amqpExchange->expects($this->once())->method('declareExchange'); $amqpExchange->expects($this->once())->method('publish')->with('body', 'routing_key', \AMQP_NOPARAM, ['headers' => [], 'delivery_mode' => 2, 'timestamp' => time()]); @@ -495,14 +500,15 @@ public function testAutoSetupWithDelayDeclaresExchangeQueuesAndDelay() $factory = $this->createMock(AmqpFactory::class); $factory->method('createConnection')->willReturn($amqpConnection); $factory->method('createChannel')->willReturn($amqpChannel); - $factory->method('createQueue')->will($this->onConsecutiveCalls( - $amqpQueue = $this->createMock(\AMQPQueue::class), - $delayQueue = $this->createMock(\AMQPQueue::class) - )); - $factory->method('createExchange')->will($this->onConsecutiveCalls( - $amqpExchange = $this->createMock(\AMQPExchange::class), - $delayExchange = $this->createMock(\AMQPExchange::class) - )); + + $amqpQueue = $this->createMock(\AMQPQueue::class); + $factory + ->method('createQueue') + ->willReturn($amqpQueue, $this->createMock(\AMQPQueue::class)); + + $amqpExchange = $this->createMock(\AMQPExchange::class); + $delayExchange = $this->createMock(\AMQPExchange::class); + $factory->method('createExchange')->willReturn($amqpExchange, $delayExchange); $amqpExchange->expects($this->once())->method('setName')->with(self::DEFAULT_EXCHANGE_NAME); $amqpExchange->expects($this->once())->method('declareExchange'); @@ -553,14 +559,12 @@ public function testItDelaysTheMessageWithADifferentRoutingKeyAndTTLs() $factory = $this->createMock(AmqpFactory::class); $factory->method('createConnection')->willReturn($amqpConnection); $factory->method('createChannel')->willReturn($amqpChannel); - $factory->method('createQueue')->will($this->onConsecutiveCalls( - $this->createMock(\AMQPQueue::class), - $delayQueue = $this->createMock(\AMQPQueue::class) - )); - $factory->method('createExchange')->will($this->onConsecutiveCalls( - $this->createMock(\AMQPExchange::class), - $delayExchange = $this->createMock(\AMQPExchange::class) - )); + + $delayQueue = $this->createMock(\AMQPQueue::class); + $factory->method('createQueue')->willReturn($this->createMock(\AMQPQueue::class), $delayQueue); + + $delayExchange = $this->createMock(\AMQPExchange::class); + $factory->method('createExchange')->willReturn($this->createMock(\AMQPExchange::class), $delayExchange); $connectionOptions = [ 'retry' => [ @@ -693,14 +697,12 @@ public function testItDelaysTheMessageWithTheInitialSuppliedRoutingKeyAsArgument $factory = $this->createMock(AmqpFactory::class); $factory->method('createConnection')->willReturn($amqpConnection); $factory->method('createChannel')->willReturn($amqpChannel); - $factory->method('createQueue')->will($this->onConsecutiveCalls( - $this->createMock(\AMQPQueue::class), - $delayQueue = $this->createMock(\AMQPQueue::class) - )); - $factory->method('createExchange')->will($this->onConsecutiveCalls( - $this->createMock(\AMQPExchange::class), - $delayExchange = $this->createMock(\AMQPExchange::class) - )); + + $delayQueue = $this->createMock(\AMQPQueue::class); + $factory->method('createQueue')->willReturn($this->createMock(\AMQPQueue::class), $delayQueue); + + $delayExchange = $this->createMock(\AMQPExchange::class); + $factory->method('createExchange')->willReturn($this->createMock(\AMQPExchange::class), $delayExchange); $connectionOptions = [ 'retry' => [ @@ -819,14 +821,10 @@ private function createDelayOrRetryConnection(\AMQPExchange $delayExchange, stri $factory = $this->createMock(AmqpFactory::class); $factory->method('createConnection')->willReturn($amqpConnection); $factory->method('createChannel')->willReturn($amqpChannel); - $factory->method('createQueue')->will($this->onConsecutiveCalls( - $this->createMock(\AMQPQueue::class), - $delayQueue = $this->createMock(\AMQPQueue::class) - )); - $factory->method('createExchange')->will($this->onConsecutiveCalls( - $this->createMock(\AMQPExchange::class), - $delayExchange - )); + + $delayQueue = $this->createMock(\AMQPQueue::class); + $factory->method('createQueue')->willReturn($this->createMock(\AMQPQueue::class), $delayQueue); + $factory->method('createExchange')->willReturn($this->createMock(\AMQPExchange::class), $delayExchange); $delayQueue->expects($this->once())->method('setName')->with($delayQueueName); $delayQueue->expects($this->once())->method('setArguments')->with([ diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php index cfc5b8fdba84f..89ac3449f3a4b 100644 --- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php @@ -30,7 +30,7 @@ public function testSend() $connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'], 0); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new BeanstalkdSender($connection, $serializer); $sender->send($envelope); @@ -45,7 +45,7 @@ public function testSendWithDelay() $connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'], 500); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new BeanstalkdSender($connection, $serializer); $sender->send($envelope); diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php index 8505e3dee0481..1f769533e7165 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php @@ -31,7 +31,7 @@ public function testSend() $connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'])->willReturn('15'); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new DoctrineSender($connection, $serializer); $actualEnvelope = $sender->send($envelope); @@ -51,7 +51,7 @@ public function testSendWithDelay() $connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'], 500); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new DoctrineSender($connection, $serializer); $sender->send($envelope); diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php index 2e5c7bf0b043e..b1bff95fe4b67 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php @@ -408,7 +408,7 @@ public function testLastErrorGetsCleared() $redis->expects($this->once())->method('xadd')->willReturn('0'); $redis->expects($this->once())->method('xack')->willReturn(0); - $redis->method('getLastError')->willReturnOnConsecutiveCalls('xadd error', 'xack error'); + $redis->method('getLastError')->willReturn('xadd error', 'xack error'); $redis->expects($this->exactly(2))->method('clearLastError'); $connection = Connection::fromDsn('redis://localhost/messenger-clearlasterror', ['auto_setup' => false, 'delete_after_ack' => true], $redis); diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php index 3a4d817acc140..925a7292a7e3a 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php @@ -29,7 +29,7 @@ public function testSend() $connection->expects($this->once())->method('add')->with($encoded['body'], $encoded['headers']); $serializer = $this->createMock(SerializerInterface::class); - $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded); + $serializer->method('encode')->with($envelope)->willReturn($encoded); $sender = new RedisSender($connection, $serializer); $sender->send($envelope); diff --git a/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php b/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php index e0a57563915a4..0d1f1111b0b90 100644 --- a/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php +++ b/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php @@ -30,10 +30,10 @@ public function testReceiverNames() // get method must be call twice and will return consecutively a setup-able transport and a non setup-able transport $serviceLocator->expects($this->exactly(2)) ->method('get') - ->will($this->onConsecutiveCalls( + ->willReturn( $this->createMock(SetupableTransportInterface::class), $this->createMock(TransportInterface::class) - )); + ); $serviceLocator ->method('has') ->willReturn(true); @@ -53,12 +53,10 @@ public function testReceiverNameArgument() /** @var MockObject&ServiceLocator $serviceLocator */ $serviceLocator = $this->createMock(ServiceLocator::class); // get method must be call twice and will return consecutively a setup-able transport and a non setup-able transport - $serviceLocator->expects($this->exactly(1)) + $serviceLocator->expects($this->once()) ->method('get') - ->will($this->onConsecutiveCalls( - $this->createMock(SetupableTransportInterface::class) - )); - $serviceLocator->expects($this->exactly(1)) + ->willReturn($this->createMock(SetupableTransportInterface::class)); + $serviceLocator->expects($this->once()) ->method('has') ->willReturn(true); diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php index b0cc4c4f2ed87..cd65ab046f0c6 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Messenger\Tests\Middleware; +use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Constraint\Callback; use PHPUnit\Framework\MockObject\Stub\ReturnCallback; use PHPUnit\Framework\TestCase; @@ -67,12 +68,7 @@ public function testEventsInNewTransactionAreHandledAfterMainMessage() ->with($this->callback(function (Envelope $envelope) use (&$series) { return $envelope->getMessage() === array_shift($series); })) - ->willReturnOnConsecutiveCalls( - $this->willHandleMessage(), - $this->willHandleMessage(), - $this->willHandleMessage(), - $this->willHandleMessage() - ); + ->will($this->willHandleMessage()); $messageBus->dispatch($message); } @@ -110,16 +106,19 @@ public function testThrowingEventsHandlingWontStopExecution() $secondEvent, ]; - $handlingMiddleware->expects($this->exactly(3)) + $matcher = $this->exactly(3); + $handlingMiddleware->expects($matcher) ->method('handle') ->with($this->callback(function (Envelope $envelope) use (&$series) { return $envelope->getMessage() === array_shift($series); })) - ->willReturnOnConsecutiveCalls( - $this->willHandleMessage(), - $this->throwException(new \RuntimeException('Some exception while handling first event')), - $this->willHandleMessage() - ); + ->willReturnCallback(function ($envelope, StackInterface $stack) use ($matcher) { + if (2 === $matcher->getInvocationCount()) { + throw new \RuntimeException('Some exception while handling first event'); + } + + return $stack->next()->handle($envelope, $stack); + }); $this->expectException(DelayedMessageHandlingException::class); $this->expectExceptionMessage('RuntimeException: Some exception while handling first event'); @@ -176,34 +175,39 @@ public function testLongChainWithExceptions() // Note: $eventL3a should not be handled. ]; - $handlingMiddleware->expects($this->exactly(7)) + $matcher = $this->exactly(7); + $handlingMiddleware->expects($matcher) ->method('handle') ->with($this->callback(function (Envelope $envelope) use (&$series) { return $envelope->getMessage() === array_shift($series); })) - ->willReturnOnConsecutiveCalls( - $this->willHandleMessage(), - $this->willHandleMessage(), - $this->returnCallback(function ($envelope, StackInterface $stack) use ($eventBus, $eventL2a, $eventL2b) { - $envelope1 = new Envelope($eventL2a, [new DispatchAfterCurrentBusStamp()]); - $eventBus->dispatch($envelope1); - $eventBus->dispatch(new Envelope($eventL2b, [new DispatchAfterCurrentBusStamp()])); - - return $stack->next()->handle($envelope, $stack); - }), - $this->willHandleMessage(), - $this->returnCallback(function () use ($eventBus, $eventL3a) { - $eventBus->dispatch(new Envelope($eventL3a, [new DispatchAfterCurrentBusStamp()])); - - throw new \RuntimeException('Some exception while handling Event level 2a'); - }), - $this->returnCallback(function ($envelope, StackInterface $stack) use ($eventBus, $eventL3b) { - $eventBus->dispatch(new Envelope($eventL3b, [new DispatchAfterCurrentBusStamp()])); - - return $stack->next()->handle($envelope, $stack); - }), - $this->willHandleMessage() - ); + ->willReturnCallback(function ($envelope, StackInterface $stack) use ($eventBus, $eventL2a, $eventL2b, $eventL3a, $eventL3b, $matcher) { + switch ($matcher->getInvocationCount()) { + case 1: + case 2: + case 4: + case 7: + return $stack->next()->handle($envelope, $stack); + + case 3: + $envelope1 = new Envelope($eventL2a, [new DispatchAfterCurrentBusStamp()]); + $eventBus->dispatch($envelope1); + $eventBus->dispatch(new Envelope($eventL2b, [new DispatchAfterCurrentBusStamp()])); + + return $stack->next()->handle($envelope, $stack); + + case 5: + $eventBus->dispatch(new Envelope($eventL3a, [new DispatchAfterCurrentBusStamp()])); + + throw new \RuntimeException('Some exception while handling Event level 2a'); + case 6: + $eventBus->dispatch(new Envelope($eventL3b, [new DispatchAfterCurrentBusStamp()])); + + return $stack->next()->handle($envelope, $stack); + } + + throw new AssertionFailedError('Unexpected call to handle'); + }); $this->expectException(DelayedMessageHandlingException::class); $this->expectExceptionMessage('RuntimeException: Some exception while handling Event level 2a'); diff --git a/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php b/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php index 2b48c20e20ff0..07d4720459b4d 100644 --- a/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php +++ b/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php @@ -121,13 +121,17 @@ public function testSendAllDeadWithinRetryPeriod() $t1->expects($this->once())->method('send'); $t2 = $this->createMock(TransportInterface::class); $t2->method('supports')->with($message)->willReturn(true); - $t2->expects($this->exactly(3)) + + $matcher = $this->exactly(3); + $t2->expects($matcher) ->method('send') - ->willReturnOnConsecutiveCalls( - new SentMessage($message, 't2'), - new SentMessage($message, 't2'), - $this->throwException($this->createMock(TransportExceptionInterface::class)) - ); + ->willReturnCallback(function () use ($matcher, $message) { + if (3 === $matcher->getInvocationCount()) { + throw $this->createMock(TransportExceptionInterface::class); + } + + return new SentMessage($message, 't2'); + }); $t = new FailoverTransport([$t1, $t2], 40); $t->send($message); sleep(4); @@ -146,16 +150,27 @@ public function testSendOneDeadButRecover() $t1 = $this->createMock(TransportInterface::class); $t1->method('supports')->with($message)->willReturn(true); - $t1->expects($this->exactly(2))->method('send')->willReturnOnConsecutiveCalls( - $this->throwException($this->createMock(TransportExceptionInterface::class)), - new SentMessage($message, 't1') - ); + + $t1Matcher = $this->exactly(2); + $t1->expects($t1Matcher)->method('send') + ->willReturnCallback(function () use ($t1Matcher, $message) { + if (1 === $t1Matcher->getInvocationCount()) { + throw $this->createMock(TransportExceptionInterface::class); + } + + return new SentMessage($message, 't1'); + }); $t2 = $this->createMock(TransportInterface::class); $t2->method('supports')->with($message)->willReturn(true); - $t2->expects($this->exactly(2))->method('send')->willReturnOnConsecutiveCalls( - new SentMessage($message, 't2'), - $this->throwException($this->createMock(TransportExceptionInterface::class)) - ); + + $t2Matcher = $this->exactly(2); + $t2->expects($t2Matcher)->method('send')->willReturnCallback(function () use ($t2Matcher, $message) { + if (1 === $t2Matcher->getInvocationCount()) { + return new SentMessage($message, 't1'); + } + + throw $this->createMock(TransportExceptionInterface::class); + }); $t = new FailoverTransport([$t1, $t2], 1); diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php index 32805b1917ec7..c8f057cf85ec2 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php @@ -154,7 +154,7 @@ public function testNeedsRehash() $mockPasswordHasherFactory->expects($this->any()) ->method('getPasswordHasher') ->with($user) - ->will($this->onConsecutiveCalls($hasher, $hasher, new NativePasswordHasher(5, 20000, 5), $hasher)); + ->willReturn($hasher, $hasher, new NativePasswordHasher(5, 20000, 5), $hasher); $passwordHasher = new UserPasswordHasher($mockPasswordHasherFactory); diff --git a/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php b/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php index 6f52fbf1b22d9..9fca415024e12 100644 --- a/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php @@ -86,7 +86,7 @@ public function testNeedsRehash() $mockEncoderFactory->expects($this->any()) ->method('getEncoder') ->with($user) - ->will($this->onConsecutiveCalls($encoder, $encoder, new NativePasswordEncoder(5, 20000, 5), $encoder)); + ->willReturn($encoder, $encoder, new NativePasswordEncoder(5, 20000, 5), $encoder); $passwordEncoder = new UserPasswordEncoder($mockEncoderFactory); diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 2ca7d79fef075..a6477e97ad331 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -172,10 +172,10 @@ private function getDenormalizerForDummyCollection() { $extractor = $this->createMock(PhpDocExtractor::class); $extractor->method('getTypes') - ->will($this->onConsecutiveCalls( + ->willReturn( [new Type('array', false, null, true, new Type('int'), new Type('object', false, DummyChild::class))], null - )); + ); $denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor); $arrayDenormalizer = new ArrayDenormalizerDummy(); @@ -227,10 +227,10 @@ private function getDenormalizerForStringCollection() { $extractor = $this->createMock(PhpDocExtractor::class); $extractor->method('getTypes') - ->will($this->onConsecutiveCalls( + ->willReturn( [new Type('array', false, null, true, new Type('int'), new Type('string'))], null - )); + ); $denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor); $arrayDenormalizer = new ArrayDenormalizerDummy(); @@ -417,7 +417,7 @@ private function getDenormalizerForObjectWithBasicProperties() { $extractor = $this->createMock(PhpDocExtractor::class); $extractor->method('getTypes') - ->will($this->onConsecutiveCalls( + ->willReturn( [new Type('bool')], [new Type('bool')], [new Type('bool')], @@ -430,7 +430,7 @@ private function getDenormalizerForObjectWithBasicProperties() [new Type('float')], [new Type('float')], [new Type('float')] - )); + ); $denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor); $arrayDenormalizer = new ArrayDenormalizerDummy(); @@ -663,8 +663,7 @@ protected function createChildContext(array $parentContext, string $attribute, ? public function testDenormalizeXmlScalar() { - $normalizer = new class () extends AbstractObjectNormalizer - { + $normalizer = new class() extends AbstractObjectNormalizer { public function __construct() { parent::__construct(null, new MetadataAwareNameConverter(new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())))); diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php index ee0f5fb97e60b..ab43246fe7f65 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php @@ -54,9 +54,10 @@ public function testLoadClassMetadata() 'noAutoMapping', ]) ; + $propertyInfoStub ->method('getTypes') - ->will($this->onConsecutiveCalls( + ->willReturn( [new Type(Type::BUILTIN_TYPE_STRING, true)], [new Type(Type::BUILTIN_TYPE_STRING)], [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_BOOL)], @@ -69,11 +70,12 @@ public function testLoadClassMetadata() [new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true, null, new Type(Type::BUILTIN_TYPE_FLOAT))], [new Type(Type::BUILTIN_TYPE_STRING)], [new Type(Type::BUILTIN_TYPE_STRING)] - )) + ) ; + $propertyInfoStub ->method('isWritable') - ->will($this->onConsecutiveCalls( + ->willReturn( true, true, true, @@ -86,7 +88,7 @@ public function testLoadClassMetadata() true, false, true - )) + ) ; $propertyInfoLoader = new PropertyInfoLoader($propertyInfoStub, $propertyInfoStub, $propertyInfoStub, '{.*}'); @@ -222,9 +224,10 @@ public function testClassNoAutoMapping() ->method('getProperties') ->willReturn(['string', 'autoMappingExplicitlyEnabled']) ; + $propertyInfoStub ->method('getTypes') - ->willReturnOnConsecutiveCalls( + ->willReturn( [new Type(Type::BUILTIN_TYPE_STRING)], [new Type(Type::BUILTIN_TYPE_BOOL)] ); From 03c61315498c4633adf7e9448d4f0507814ce8f5 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 30 Apr 2024 11:14:43 +0200 Subject: [PATCH 08/61] move Process component dep to require-dev --- src/Symfony/Component/Filesystem/composer.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Filesystem/composer.json b/src/Symfony/Component/Filesystem/composer.json index 95e9f3f035ee8..5811ef5907e44 100644 --- a/src/Symfony/Component/Filesystem/composer.json +++ b/src/Symfony/Component/Filesystem/composer.json @@ -19,7 +19,9 @@ "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { "symfony/process": "^5.4|^6.4" }, "autoload": { From 518bc283a0793868584d1624900d8c8752839c6c Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 30 Apr 2024 15:47:22 +0200 Subject: [PATCH 09/61] move wiring of the property info extractor to the ObjectNormalizer The PropertyNormalizer does not handle a property info extractor. It looks like the argument was accidentally added to instead of the ObjectNormalizer in #52917. --- .../DependencyInjection/FrameworkExtension.php | 13 +++++++------ .../FrameworkBundle/Resources/config/serializer.php | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 731c6e7ee4b3e..f7ab7e3ed5835 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1854,18 +1854,19 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder $container->setParameter('serializer.default_context', $defaultContext); } + $arguments = $container->getDefinition('serializer.normalizer.object')->getArguments(); + $context = []; + if (isset($config['circular_reference_handler']) && $config['circular_reference_handler']) { - $arguments = $container->getDefinition('serializer.normalizer.object')->getArguments(); - $context = ($arguments[6] ?? $defaultContext) + ['circular_reference_handler' => new Reference($config['circular_reference_handler'])]; + $context += ($arguments[6] ?? $defaultContext) + ['circular_reference_handler' => new Reference($config['circular_reference_handler'])]; $container->getDefinition('serializer.normalizer.object')->setArgument(5, null); - $container->getDefinition('serializer.normalizer.object')->setArgument(6, $context); } if ($config['max_depth_handler'] ?? false) { - $arguments = $container->getDefinition('serializer.normalizer.object')->getArguments(); - $context = ($arguments[6] ?? $defaultContext) + ['max_depth_handler' => new Reference($config['max_depth_handler'])]; - $container->getDefinition('serializer.normalizer.object')->setArgument(6, $context); + $context += ($arguments[6] ?? $defaultContext) + ['max_depth_handler' => new Reference($config['max_depth_handler'])]; } + + $container->getDefinition('serializer.normalizer.object')->setArgument(6, $context); } private function registerPropertyInfoConfiguration(ContainerBuilder $container, PhpFileLoader $loader) diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php index 63964f34f5599..7762e5a64ca86 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php @@ -125,6 +125,8 @@ service('property_info')->ignoreOnInvalid(), service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(), null, + null, + service('property_info')->ignoreOnInvalid(), ]) ->tag('serializer.normalizer', ['priority' => -1000]) @@ -138,7 +140,6 @@ service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(), null, [], - service('property_info')->ignoreOnInvalid(), ]) ->alias(PropertyNormalizer::class, 'serializer.normalizer.property') From 18e06a8e2b3efb8b4e9caa19163e6bd96ef34d68 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 29 Apr 2024 11:20:22 +0200 Subject: [PATCH 10/61] handle union and intersection types for cascaded validations --- .../Validator/Mapping/ClassMetadata.php | 31 +++++++++++++++- .../Fixtures/CascadingEntityIntersection.php | 17 +++++++++ .../Tests/Fixtures/CascadingEntityUnion.php | 25 +++++++++++++ .../Tests/Mapping/ClassMetadataTest.php | 36 +++++++++++++++++++ 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php create mode 100644 src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php diff --git a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php index a7209d5377d85..957000274b2f3 100644 --- a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php +++ b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php @@ -210,7 +210,7 @@ public function addConstraint(Constraint $constraint) $this->cascadingStrategy = CascadingStrategy::CASCADE; foreach ($this->getReflectionClass()->getProperties() as $property) { - if ($property->hasType() && (('array' === $type = $property->getType()->getName()) || class_exists($type))) { + if ($this->canCascade($property->getType())) { $this->addPropertyConstraint($property->getName(), new Valid()); } } @@ -511,4 +511,33 @@ private function checkConstraint(Constraint $constraint) } } } + + private function canCascade(?\ReflectionType $type = null): bool + { + if (null === $type) { + return false; + } + + if ($type instanceof \ReflectionIntersectionType) { + foreach ($type->getTypes() as $nestedType) { + if ($this->canCascade($nestedType)) { + return true; + } + } + + return false; + } + + if ($type instanceof \ReflectionUnionType) { + foreach ($type->getTypes() as $nestedType) { + if (!$this->canCascade($nestedType)) { + return false; + } + } + + return true; + } + + return $type instanceof \ReflectionNamedType && (\in_array($type->getName(), ['array', 'null'], true) || class_exists($type->getName())); + } } diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php new file mode 100644 index 0000000000000..9478f647c4b5d --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +class CascadingEntityIntersection +{ + public CascadedChild&\stdClass $classes; +} diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php new file mode 100644 index 0000000000000..03c808fca330f --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +class CascadingEntityUnion +{ + public CascadedChild|\stdClass $classes; + public CascadedChild|array $classAndArray; + public CascadedChild|null $classAndNull; + public array|null $arrayAndNull; + public CascadedChild|array|null $classAndArrayAndNull; + public int|string $scalars; + public int|null $scalarAndNull; + public CascadedChild|int $classAndScalar; + public array|int $arrayAndScalar; +} diff --git a/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php b/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php index a9f942319af83..4e0bca845a2cb 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php @@ -25,6 +25,8 @@ use Symfony\Component\Validator\Tests\Fixtures\Annotation\EntityParent; use Symfony\Component\Validator\Tests\Fixtures\Annotation\GroupSequenceProviderEntity; use Symfony\Component\Validator\Tests\Fixtures\CascadingEntity; +use Symfony\Component\Validator\Tests\Fixtures\CascadingEntityIntersection; +use Symfony\Component\Validator\Tests\Fixtures\CascadingEntityUnion; use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; use Symfony\Component\Validator\Tests\Fixtures\ConstraintB; @@ -361,6 +363,40 @@ public function testCascadeConstraint() 'children', ], $metadata->getConstrainedProperties()); } + + /** + * @requires PHP 8.0 + */ + public function testCascadeConstraintWithUnionTypeProperties() + { + $metadata = new ClassMetadata(CascadingEntityUnion::class); + $metadata->addConstraint(new Cascade()); + + $this->assertSame(CascadingStrategy::CASCADE, $metadata->getCascadingStrategy()); + $this->assertCount(5, $metadata->properties); + $this->assertSame([ + 'classes', + 'classAndArray', + 'classAndNull', + 'arrayAndNull', + 'classAndArrayAndNull', + ], $metadata->getConstrainedProperties()); + } + + /** + * @requires PHP 8.1 + */ + public function testCascadeConstraintWithIntersectionTypeProperties() + { + $metadata = new ClassMetadata(CascadingEntityIntersection::class); + $metadata->addConstraint(new Cascade()); + + $this->assertSame(CascadingStrategy::CASCADE, $metadata->getCascadingStrategy()); + $this->assertCount(1, $metadata->properties); + $this->assertSame([ + 'classes', + ], $metadata->getConstrainedProperties()); + } } class ClassCompositeConstraint extends Composite From d1c0fb64c684adc8df9492acd396e37f6ad18f5a Mon Sep 17 00:00:00 2001 From: Tim Porter Date: Tue, 30 Apr 2024 23:58:54 +0100 Subject: [PATCH 11/61] [Strings][EnglishInflector] Fix incorrect pluralisation of 'Album' --- src/Symfony/Component/String/Inflector/EnglishInflector.php | 3 +++ .../Component/String/Tests/Inflector/EnglishInflectorTest.php | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/Symfony/Component/String/Inflector/EnglishInflector.php b/src/Symfony/Component/String/Inflector/EnglishInflector.php index 60eace3c9b283..d9eff19b9a950 100644 --- a/src/Symfony/Component/String/Inflector/EnglishInflector.php +++ b/src/Symfony/Component/String/Inflector/EnglishInflector.php @@ -238,6 +238,9 @@ final class EnglishInflector implements InflectorInterface // teeth (tooth) ['htoot', 5, true, true, 'teeth'], + // albums (album) + ['mubla', 5, true, true, 'albums'], + // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) ['mu', 2, true, true, 'a'], diff --git a/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php b/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php index 51849fd42540a..ba8d6d797c4d0 100644 --- a/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php +++ b/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php @@ -24,6 +24,7 @@ public static function singularizeProvider() ['accesses', 'access'], ['addresses', 'address'], ['agendas', 'agenda'], + ['albums', 'album'], ['alumnae', 'alumna'], ['alumni', 'alumnus'], ['analyses', ['analys', 'analyse', 'analysis']], @@ -179,6 +180,7 @@ public static function pluralizeProvider() ['address', 'addresses'], ['agenda', 'agendas'], ['aircraft', 'aircraft'], + ['album', 'albums'], ['alumnus', 'alumni'], ['analysis', 'analyses'], ['antenna', 'antennas'], // antennae From ca9f2a521a21ec918dfb3b1aa60cdb271edaa872 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Wed, 1 May 2024 22:12:44 +0200 Subject: [PATCH 12/61] [PhpUnitBridge] Fix `DeprecationErrorHandler` with PhpUnit 10 --- src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php index adddfe6f76995..05c67b7b37e6e 100644 --- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php +++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php @@ -368,6 +368,12 @@ private static function getPhpUnitErrorHandler() if ('PHPUnit\Util\ErrorHandler::handleError' === $eh) { return $eh; + } elseif (ErrorHandler::class === $eh) { + return function (int $errorNumber, string $errorString, string $errorFile, int $errorLine) { + ErrorHandler::instance()($errorNumber, $errorString, $errorFile, $errorLine); + + return true; + }; } foreach (debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT | \DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) { From a4190b569225daeff4dba146ea4c6e7c9f04ce4f Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 2 May 2024 09:44:03 +0200 Subject: [PATCH 13/61] fix compatibility with Twig 3.10 --- .../Tests/Twig/WebProfilerExtensionTest.php | 12 ++---------- .../WebProfilerBundle/Twig/WebProfilerExtension.php | 7 +++++++ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php index 37438ed560206..f0cf4f36a196f 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php @@ -15,6 +15,7 @@ use Symfony\Bundle\WebProfilerBundle\Twig\WebProfilerExtension; use Symfony\Component\VarDumper\Cloner\VarCloner; use Twig\Environment; +use Twig\Loader\ArrayLoader; class WebProfilerExtensionTest extends TestCase { @@ -23,7 +24,7 @@ class WebProfilerExtensionTest extends TestCase */ public function testDumpHeaderIsDisplayed(string $message, array $context, bool $dump1HasHeader, bool $dump2HasHeader) { - $twigEnvironment = $this->mockTwigEnvironment(); + $twigEnvironment = new Environment(new ArrayLoader()); $varCloner = new VarCloner(); $webProfilerExtension = new WebProfilerExtension(); @@ -44,13 +45,4 @@ public static function provideMessages(): iterable yield ['Some message {foo}', ['foo' => 'foo', 'bar' => 'bar'], true, false]; yield ['Some message {foo}', ['bar' => 'bar'], false, true]; } - - private function mockTwigEnvironment() - { - $twigEnvironment = $this->createMock(Environment::class); - - $twigEnvironment->expects($this->any())->method('getCharset')->willReturn('UTF-8'); - - return $twigEnvironment; - } } diff --git a/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php b/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php index 2a4e975760426..82352f5996122 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php @@ -17,6 +17,7 @@ use Twig\Extension\EscaperExtension; use Twig\Extension\ProfilerExtension; use Twig\Profiler\Profile; +use Twig\Runtime\EscaperRuntime; use Twig\TwigFunction; /** @@ -114,6 +115,12 @@ public function getName() private static function escape(Environment $env, string $s): string { + // Twig 3.10 and above + if (class_exists(EscaperRuntime::class)) { + return $env->getRuntime(EscaperRuntime::class)->escape($s); + } + + // Twig 3.9 if (method_exists(EscaperExtension::class, 'escape')) { return EscaperExtension::escape($env, $s); } From f77f78ebb5090a9c24fd38d55047baeb60fd89fb Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 2 May 2024 10:49:46 +0200 Subject: [PATCH 14/61] add missing assertion --- .../Component/Serializer/Tests/Encoder/CsvEncoderTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php index 3d2163c06e923..9b1bbfb281672 100644 --- a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php +++ b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php @@ -223,8 +223,8 @@ public function testDecodeEmptyData() public function testMultipleEmptyHeaderNamesWithSeparator() { - $this->encoder->decode(',. -,', 'csv'); + $this->assertSame([['', [1 => '']]], $this->encoder->decode(',. +,', 'csv')); } public function testEncodeVariableStructure() From 64f020f6385adbc5bc45475e46d5d82d122c3bf9 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 2 May 2024 11:21:14 +0200 Subject: [PATCH 15/61] separate the property info and write info extractors --- .../Serializer/Normalizer/ObjectNormalizer.php | 13 +++++++++++-- .../Tests/Normalizer/ObjectNormalizerTest.php | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index a1ab11177482e..6a5413f69d317 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -36,6 +36,7 @@ class ObjectNormalizer extends AbstractObjectNormalizer protected $propertyAccessor; protected $propertyInfoExtractor; + private $writeInfoExtractor; private $objectClassResolver; @@ -54,6 +55,7 @@ public function __construct(?ClassMetadataFactoryInterface $classMetadataFactory }; $this->propertyInfoExtractor = $propertyInfoExtractor ?: new ReflectionExtractor(); + $this->writeInfoExtractor = new ReflectionExtractor(); } /** @@ -195,8 +197,15 @@ protected function isAllowedAttribute($classOrObject, string $attribute, ?string return $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute); } - return $this->propertyInfoExtractor->isWritable($class, $attribute) - || ($writeInfo = $this->propertyInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType(); + if ($this->propertyInfoExtractor->isWritable($class, $attribute)) { + return true; + } + + if (($writeInfo = $this->writeInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType()) { + return true; + } + + return false; } private function hasAttributeAccessorMethod(string $class, string $attribute): bool diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 830817b8b673b..5f88844974cd9 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -274,6 +274,22 @@ public function testConstructorWithObjectDenormalize() $this->assertEquals('bar', $obj->bar); } + public function testConstructorWithObjectDenormalizeUsingPropertyInfoExtractor() + { + $serializer = $this->createMock(ObjectSerializerNormalizer::class); + $normalizer = new ObjectNormalizer(null, null, null, null, null, null, [], new PropertyInfoExtractor()); + $normalizer->setSerializer($serializer); + + $data = new \stdClass(); + $data->foo = 'foo'; + $data->bar = 'bar'; + $data->baz = true; + $data->fooBar = 'foobar'; + $obj = $normalizer->denormalize($data, ObjectConstructorDummy::class, 'any'); + $this->assertEquals('foo', $obj->getFoo()); + $this->assertEquals('bar', $obj->bar); + } + public function testConstructorWithObjectTypeHintDenormalize() { $data = [ From 5ab2d9053f7f3fc21d91342e0b33af2ca3b8bed4 Mon Sep 17 00:00:00 2001 From: mfettig Date: Fri, 24 Mar 2023 15:07:33 -0400 Subject: [PATCH 16/61] [Cache] Fix support for predis/predis:^2.0 --- composer.json | 2 +- src/Symfony/Component/Cache/Traits/RedisTrait.php | 10 ++++++---- src/Symfony/Component/Cache/composer.json | 2 +- .../Handler/PredisClusterSessionHandlerTest.php | 5 ++++- src/Symfony/Component/HttpFoundation/composer.json | 2 +- src/Symfony/Component/Lock/composer.json | 2 +- src/Symfony/Component/Semaphore/composer.json | 2 +- 7 files changed, 15 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index 9bc012d6cee49..ba4ebe8ed6dff 100644 --- a/composer.json +++ b/composer.json @@ -138,7 +138,7 @@ "php-http/httplug": "^1.0|^2.0", "php-http/message-factory": "^1.0", "phpstan/phpdoc-parser": "^1.0", - "predis/predis": "~1.1", + "predis/predis": "^1.1|^2.0", "psr/http-client": "^1.0", "psr/simple-cache": "^1.0|^2.0", "egulias/email-validator": "^2.1.10|^3.1|^4", diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php index 33f37d828ea81..518a563060240 100644 --- a/src/Symfony/Component/Cache/Traits/RedisTrait.php +++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php @@ -15,6 +15,8 @@ use Predis\Connection\Aggregate\ClusterInterface; use Predis\Connection\Aggregate\RedisCluster; use Predis\Connection\Aggregate\ReplicationInterface; +use Predis\Connection\Cluster\ClusterInterface as Predis2ClusterInterface; +use Predis\Connection\Cluster\RedisCluster as Predis2RedisCluster; use Predis\Response\ErrorInterface; use Predis\Response\Status; use Symfony\Component\Cache\Exception\CacheException; @@ -414,7 +416,7 @@ protected function doFetch(array $ids) $result = []; - if ($this->redis instanceof \Predis\ClientInterface && $this->redis->getConnection() instanceof ClusterInterface) { + if ($this->redis instanceof \Predis\ClientInterface && ($this->redis->getConnection() instanceof ClusterInterface || $this->redis->getConnection() instanceof Predis2ClusterInterface)) { $values = $this->pipeline(function () use ($ids) { foreach ($ids as $id) { yield 'get' => [$id]; @@ -511,7 +513,7 @@ protected function doDelete(array $ids) return true; } - if ($this->redis instanceof \Predis\ClientInterface && $this->redis->getConnection() instanceof ClusterInterface) { + if ($this->redis instanceof \Predis\ClientInterface && ($this->redis->getConnection() instanceof ClusterInterface || $this->redis->getConnection() instanceof Predis2ClusterInterface)) { static $del; $del = $del ?? (class_exists(UNLINK::class) ? 'unlink' : 'del'); @@ -569,7 +571,7 @@ private function pipeline(\Closure $generator, ?object $redis = null): \Generato $ids = []; $redis = $redis ?? $this->redis; - if ($redis instanceof RedisClusterProxy || $redis instanceof \RedisCluster || ($redis instanceof \Predis\ClientInterface && $redis->getConnection() instanceof RedisCluster)) { + if ($redis instanceof RedisClusterProxy || $redis instanceof \RedisCluster || ($redis instanceof \Predis\ClientInterface && ($redis->getConnection() instanceof RedisCluster || $redis->getConnection() instanceof Predis2RedisCluster))) { // phpredis & predis don't support pipelining with RedisCluster // see https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#pipelining // see https://github.com/nrk/predis/issues/267#issuecomment-123781423 @@ -631,7 +633,7 @@ private function getHosts(): array $hosts = [$this->redis]; if ($this->redis instanceof \Predis\ClientInterface) { $connection = $this->redis->getConnection(); - if ($connection instanceof ClusterInterface && $connection instanceof \Traversable) { + if (($connection instanceof ClusterInterface || $connection instanceof Predis2ClusterInterface) && $connection instanceof \Traversable) { $hosts = []; foreach ($connection as $c) { $hosts[] = new \Predis\Client($c); diff --git a/src/Symfony/Component/Cache/composer.json b/src/Symfony/Component/Cache/composer.json index e3526bb8158b4..fdf794fb3b368 100644 --- a/src/Symfony/Component/Cache/composer.json +++ b/src/Symfony/Component/Cache/composer.json @@ -35,7 +35,7 @@ "cache/integration-tests": "dev-master", "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.13.1|^3|^4", - "predis/predis": "^1.1", + "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0", "symfony/config": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php index 4990b1a1fc091..1712dcc491fc6 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php @@ -23,6 +23,9 @@ class PredisClusterSessionHandlerTest extends AbstractRedisSessionHandlerTestCas */ protected function createRedisClient(string $host): object { - return new Client([array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379])]); + return new Client( + [array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379])], + ['cluster' => 'redis'] + ); } } diff --git a/src/Symfony/Component/HttpFoundation/composer.json b/src/Symfony/Component/HttpFoundation/composer.json index cb8d59ffed0d5..a2e43a99cfaae 100644 --- a/src/Symfony/Component/HttpFoundation/composer.json +++ b/src/Symfony/Component/HttpFoundation/composer.json @@ -22,7 +22,7 @@ "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "predis/predis": "~1.0", + "predis/predis": "^1.0|^2.0", "symfony/cache": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", diff --git a/src/Symfony/Component/Lock/composer.json b/src/Symfony/Component/Lock/composer.json index b7e2d0c0d87ea..f2558dbb7459a 100644 --- a/src/Symfony/Component/Lock/composer.json +++ b/src/Symfony/Component/Lock/composer.json @@ -23,7 +23,7 @@ }, "require-dev": { "doctrine/dbal": "^2.13|^3|^4", - "predis/predis": "~1.0" + "predis/predis": "^1.0|^2.0" }, "conflict": { "doctrine/dbal": "<2.13" diff --git a/src/Symfony/Component/Semaphore/composer.json b/src/Symfony/Component/Semaphore/composer.json index cbbd11c7ffcb4..3927cb71d964d 100644 --- a/src/Symfony/Component/Semaphore/composer.json +++ b/src/Symfony/Component/Semaphore/composer.json @@ -24,7 +24,7 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "predis/predis": "~1.0" + "predis/predis": "^1.1|^2.0" }, "autoload": { "psr-4": { "Symfony\\Component\\Semaphore\\": "" }, From a6fe93c707f2c7fa2fe0139e2ba8abbc00d3cac4 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Thu, 2 May 2024 13:02:31 +0200 Subject: [PATCH 17/61] Fix various warnings across components test suite --- .../Tests/Functional/AbstractWebTestCase.php | 2 +- ...ContainerParametersResourceCheckerTest.php | 8 ++-- .../Tests/Loader/PhpFileLoaderTest.php | 2 + .../Dumper/CompiledUrlGeneratorDumperTest.php | 2 + .../Features/CallbacksTestTrait.php | 48 +++++++++---------- .../Features/CircularReferenceTestTrait.php | 2 +- .../SkipUninitializedValuesTestTrait.php | 2 +- 7 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php index f9363e8290dc0..51d4d781fc233 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php @@ -33,7 +33,7 @@ public static function tearDownAfterClass(): void static::deleteTmpDir(); } - public function provideSecuritySystems() + public static function provideSecuritySystems() { yield [['enable_authenticator_manager' => true]]; yield [['enable_authenticator_manager' => false]]; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php b/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php index f13acc8f140e2..a5efc89a7c710 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php @@ -46,7 +46,7 @@ public function testSupports() */ public function testIsFresh(callable $mockContainer, $expected) { - $mockContainer($this->container); + $mockContainer($this->container, $this); $this->assertSame($expected, $this->resourceChecker->isFresh($this->resource, time())); } @@ -61,9 +61,9 @@ public static function isFreshProvider() $container->method('getParameter')->with('locales')->willReturn(['nl', 'es']); }, false]; - yield 'fresh on every identical parameters' => [function (MockObject $container) { - $container->expects(self::exactly(2))->method('hasParameter')->willReturn(true); - $container->expects(self::exactly(2))->method('getParameter') + yield 'fresh on every identical parameters' => [function (MockObject $container, TestCase $testCase) { + $container->expects($testCase->exactly(2))->method('hasParameter')->willReturn(true); + $container->expects($testCase->exactly(2))->method('getParameter') ->willReturnCallback(function (...$args) { static $series = [ [['locales'], ['fr', 'en']], diff --git a/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php b/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php index 8b141d2577ee3..6f15b22b95cab 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php @@ -194,6 +194,8 @@ public function testNestedBundleConfigNotAllowed() */ public function testWhenEnv() { + $this->expectNotToPerformAssertions(); + $fixtures = realpath(__DIR__.'/../Fixtures'); $container = new ContainerBuilder(); $loader = new PhpFileLoader($container, new FileLocator(), 'dev', new ConfigBuilderGenerator(sys_get_temp_dir())); diff --git a/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php b/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php index 64e47438386d4..ef3061db7b9ec 100644 --- a/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php +++ b/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php @@ -63,10 +63,12 @@ protected function tearDown(): void parent::tearDown(); @unlink($this->testTmpFilepath); + @unlink($this->largeTestTmpFilepath); $this->routeCollection = null; $this->generatorDumper = null; $this->testTmpFilepath = null; + $this->largeTestTmpFilepath = null; } public function testDumpWithRoutes() diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php index db7b226c3e14b..e573c8c227001 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php @@ -126,13 +126,13 @@ public function testUncallableCallbacks($callbacks) $normalizer->normalize($obj, null, ['callbacks' => $callbacks]); } - public function provideNormalizeCallbacks() + public static function provideNormalizeCallbacks() { return [ 'Change a string' => [ [ 'bar' => function ($bar) { - $this->assertEquals('baz', $bar); + static::assertEquals('baz', $bar); return 'baz'; }, @@ -143,11 +143,11 @@ public function provideNormalizeCallbacks() 'Null an item' => [ [ 'bar' => function ($value, $object, $attributeName, $format, $context) { - $this->assertSame('baz', $value); - $this->assertInstanceOf(CallbacksObject::class, $object); - $this->assertSame('bar', $attributeName); - $this->assertSame('any', $format); - $this->assertArrayHasKey('circular_reference_limit_counters', $context); + static::assertSame('baz', $value); + static::assertInstanceOf(CallbacksObject::class, $object); + static::assertSame('bar', $attributeName); + static::assertSame('any', $format); + static::assertArrayHasKey('circular_reference_limit_counters', $context); }, ], 'baz', @@ -156,7 +156,7 @@ public function provideNormalizeCallbacks() 'Format a date' => [ [ 'bar' => function ($bar) { - $this->assertInstanceOf(\DateTime::class, $bar); + static::assertInstanceOf(\DateTime::class, $bar); return $bar->format('d-m-Y H:i:s'); }, @@ -190,13 +190,13 @@ public function provideNormalizeCallbacks() ]; } - public function provideDenormalizeCallbacks(): array + public static function provideDenormalizeCallbacks(): array { return [ 'Change a string' => [ [ 'bar' => function ($bar) { - $this->assertEquals('bar', $bar); + static::assertEquals('bar', $bar); return $bar; }, @@ -207,11 +207,11 @@ public function provideDenormalizeCallbacks(): array 'Null an item' => [ [ 'bar' => function ($value, $object, $attributeName, $format, $context) { - $this->assertSame('baz', $value); - $this->assertTrue(is_a($object, CallbacksObject::class, true)); - $this->assertSame('bar', $attributeName); - $this->assertSame('any', $format); - $this->assertIsArray($context); + static::assertSame('baz', $value); + static::assertTrue(is_a($object, CallbacksObject::class, true)); + static::assertSame('bar', $attributeName); + static::assertSame('any', $format); + static::assertIsArray($context); }, ], 'baz', @@ -220,7 +220,7 @@ public function provideDenormalizeCallbacks(): array 'Format a date' => [ [ 'bar' => function ($bar) { - $this->assertIsString($bar); + static::assertIsString($bar); return \DateTime::createFromFormat('d-m-Y H:i:s', $bar); }, @@ -254,13 +254,13 @@ public function provideDenormalizeCallbacks(): array ]; } - public function providerDenormalizeCallbacksWithTypedProperty(): array + public static function providerDenormalizeCallbacksWithTypedProperty(): array { return [ 'Change a typed string' => [ [ 'foo' => function ($foo) { - $this->assertEquals('foo', $foo); + static::assertEquals('foo', $foo); return $foo; }, @@ -271,11 +271,11 @@ public function providerDenormalizeCallbacksWithTypedProperty(): array 'Null an typed item' => [ [ 'foo' => function ($value, $object, $attributeName, $format, $context) { - $this->assertSame('fool', $value); - $this->assertTrue(is_a($object, CallbacksObject::class, true)); - $this->assertSame('foo', $attributeName); - $this->assertSame('any', $format); - $this->assertIsArray($context); + static::assertSame('fool', $value); + static::assertTrue(is_a($object, CallbacksObject::class, true)); + static::assertSame('foo', $attributeName); + static::assertSame('any', $format); + static::assertIsArray($context); }, ], 'fool', @@ -284,7 +284,7 @@ public function providerDenormalizeCallbacksWithTypedProperty(): array ]; } - public function provideInvalidCallbacks() + public static function provideInvalidCallbacks() { return [ [['bar' => null]], diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php index 1996e80e98a38..ffbddf2ab3f29 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php @@ -23,7 +23,7 @@ abstract protected function getNormalizerForCircularReference(array $defaultCont abstract protected function getSelfReferencingModel(); - public function provideUnableToNormalizeCircularReference(): array + public static function provideUnableToNormalizeCircularReference(): array { return [ [[], [], 1], diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php index 596b3404b7e24..02707768fc880 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php @@ -44,7 +44,7 @@ public function testSkipUninitializedValues(array $context) $this->assertSame('value', $objectToPopulate->getUninitialized()); } - public function skipUninitializedValuesFlagProvider(): iterable + public static function skipUninitializedValuesFlagProvider(): iterable { yield 'passed manually' => [['skip_uninitialized_values' => true, 'groups' => ['foo']]]; yield 'using default context value' => [['groups' => ['foo']]]; From 74bc0ebb2f3e47b80eac4da5de0f12a8c13a5701 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Thu, 2 May 2024 22:30:26 +0200 Subject: [PATCH 18/61] [Serializer] Fix `GetSetMethodNormalizer` not working with setters with optional args --- .../Normalizer/GetSetMethodNormalizer.php | 2 +- .../Normalizer/GetSetMethodNormalizerTest.php | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php index 9aaac706f2133..619500828d506 100644 --- a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php @@ -107,7 +107,7 @@ private function isSetMethod(\ReflectionMethod $method): bool { return !$method->isStatic() && (\PHP_VERSION_ID < 80000 || !$method->getAttributes(Ignore::class)) - && 1 === $method->getNumberOfRequiredParameters() + && 0 < $method->getNumberOfParameters() && str_starts_with($method->name, 'set'); } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index e7c23cf58a574..424dd215e7952 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -538,6 +538,18 @@ public function testSupportsAndDenormalizeWithOnlyParentSetter() $obj = $this->normalizer->denormalize(['foo' => 'foo'], GetSetDummyChild::class); $this->assertSame('foo', $obj->getFoo()); } + + /** + * @testWith [{"foo":"foo"}, "getFoo", "foo"] + * [{"bar":"bar"}, "getBar", "bar"] + */ + public function testSupportsAndDenormalizeWithOptionalSetterArgument(array $data, string $method, string $expected) + { + $this->assertTrue($this->normalizer->supportsDenormalization($data, GetSetDummyWithOptionalAndMultipleSetterArgs::class)); + + $obj = $this->normalizer->denormalize($data, GetSetDummyWithOptionalAndMultipleSetterArgs::class); + $this->assertSame($expected, $obj->$method()); + } } class GetSetDummy @@ -861,3 +873,29 @@ public function setFoo($foo) $this->foo = $foo; } } + +class GetSetDummyWithOptionalAndMultipleSetterArgs +{ + private $foo; + private $bar; + + public function getFoo() + { + return $this->foo; + } + + public function setFoo($foo = null) + { + $this->foo = $foo; + } + + public function getBar() + { + return $this->bar; + } + + public function setBar($bar = null, $other = true) + { + $this->bar = $bar; + } +} From cc0b95749fe9fd4a628bba9a048d44bd020447ee Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Fri, 3 May 2024 10:27:17 +0200 Subject: [PATCH 19/61] [HttpClient] Fix cURL default options --- src/Symfony/Component/HttpClient/Response/CurlResponse.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Symfony/Component/HttpClient/Response/CurlResponse.php b/src/Symfony/Component/HttpClient/Response/CurlResponse.php index 633b74a1256ed..f36a05f9d6ae2 100644 --- a/src/Symfony/Component/HttpClient/Response/CurlResponse.php +++ b/src/Symfony/Component/HttpClient/Response/CurlResponse.php @@ -174,10 +174,6 @@ public function __construct(CurlClientState $multi, $ch, ?array $options = null, curl_multi_remove_handle($multi->handle, $ch); curl_setopt_array($ch, [ \CURLOPT_NOPROGRESS => true, - \CURLOPT_PROGRESSFUNCTION => null, - \CURLOPT_HEADERFUNCTION => null, - \CURLOPT_WRITEFUNCTION => null, - \CURLOPT_READFUNCTION => null, \CURLOPT_INFILE => null, ]); From 2c845fab1f23518ba3a19e558eebf87b92f4d8fe Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Fri, 3 May 2024 13:18:44 +0200 Subject: [PATCH 20/61] [Validator] Check `Locale` class existence before using it --- .../Validator/Test/ConstraintValidatorTestCase.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php b/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php index 89f8d0008e75a..0e89e78b1a039 100644 --- a/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php +++ b/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php @@ -80,8 +80,10 @@ protected function setUp(): void $this->validator = $this->createValidator(); $this->validator->initialize($this->context); - $this->defaultLocale = \Locale::getDefault(); - \Locale::setDefault('en'); + if (class_exists(\Locale::class)) { + $this->defaultLocale = \Locale::getDefault(); + \Locale::setDefault('en'); + } $this->expectedViolations = []; $this->call = 0; @@ -93,7 +95,9 @@ protected function tearDown(): void { $this->restoreDefaultTimezone(); - \Locale::setDefault($this->defaultLocale); + if (class_exists(\Locale::class)) { + \Locale::setDefault($this->defaultLocale); + } } protected function setDefaultTimezone(?string $defaultTimezone) From 8ac181831fe8323c270bd8ad91604798cb92bd3f Mon Sep 17 00:00:00 2001 From: PHAS Developer <110562019+phasdev@users.noreply.github.com> Date: Sat, 4 May 2024 06:25:40 +0000 Subject: [PATCH 21/61] Fix exception thrown during `LDAP_MODIFY_BATCH_REMOVE_ALL` batch operations --- .../Ldap/Adapter/ExtLdap/UpdateOperation.php | 9 +++++++-- .../Tests/Adapter/ExtLdap/LdapManagerTest.php | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php b/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php index cb57c1d6296ea..dc98896ab82e6 100644 --- a/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php +++ b/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php @@ -48,10 +48,15 @@ public function __construct(int $operationType, string $attribute, ?array $value public function toArray(): array { - return [ + $op = [ 'attrib' => $this->attribute, 'modtype' => $this->operationType, - 'values' => $this->values, ]; + + if (\LDAP_MODIFY_BATCH_REMOVE_ALL !== $this->operationType) { + $op['values'] = $this->values; + } + + return $op; } } diff --git a/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php b/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php index f849b4bf25f23..21737afda3c2a 100644 --- a/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php +++ b/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php @@ -266,6 +266,23 @@ public function testLdapAddAttributeValuesError() $entryManager->addAttributeValues($entry, 'mail', $entry->getAttribute('mail')); } + public function testLdapApplyOperationsRemoveAll() + { + $entryManager = $this->adapter->getEntryManager(); + + $result = $this->executeSearchQuery(1); + $entry = $result[0]; + + $entryManager->applyOperations($entry->getDn(), [new UpdateOperation(\LDAP_MODIFY_BATCH_REMOVE_ALL, 'mail', null)]); + + $result = $this->executeSearchQuery(1); + $entry = $result[0]; + + $this->assertNull($entry->getAttribute('mail')); + + $entryManager->addAttributeValues($entry, 'mail', ['fabpot@symfony.com', 'fabien@potencier.com']); + } + public function testLdapApplyOperationsRemoveAllWithArrayError() { $entryManager = $this->adapter->getEntryManager(); From 4d5065ddd9732f55d25b7a8bc9caccd9a412ec09 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Mon, 29 Apr 2024 16:31:15 +0200 Subject: [PATCH 22/61] Remove calls to `TestCase::iniSet()` and calls to deprecated methods of `MockBuilder` --- .../Tests/Fixtures/MockableRepository.php | 21 +++++++ .../Constraints/UniqueEntityValidatorTest.php | 11 ++-- .../Extension/HttpKernelExtensionTest.php | 14 +++-- .../Tests/Extension/RuntimeLoaderProvider.php | 4 +- .../Console/Tests/ApplicationTest.php | 5 +- .../MockableAppliationWithTerminalWidth.php | 22 +++++++ .../Test/Traits/ValidatorExtensionTrait.php | 4 +- ...teTimeToLocalizedStringTransformerTest.php | 51 ++++++++++----- .../Storage/NativeSessionStorageTest.php | 63 ++++++++++++------- .../Storage/PhpBridgeSessionStorageTest.php | 10 ++- .../Tests/EventListener/ErrorListenerTest.php | 30 +++++---- .../KernelForTestWithLoadClassCache.php | 19 ++++++ .../MockableUploadFileWithClientSize.php | 22 +++++++ .../Tests/Fragment/FragmentHandlerTest.php | 8 +-- .../Fragment/InlineFragmentRendererTest.php | 17 +++-- .../Tests/HttpKernelBrowserTest.php | 6 +- .../Component/HttpKernel/Tests/KernelTest.php | 11 ++-- .../HttpKernel/Tests/UriSignerTest.php | 21 ++++--- .../Process/Tests/ExecutableFinderTest.php | 25 +++++--- .../Routing/Tests/Loader/ObjectLoaderTest.php | 10 ++- .../UserAuthenticationProviderTest.php | 5 +- ...MockableUsernamePasswordTokenWithRoles.php | 22 +++++++ .../UriSafeTokenGeneratorTest.php | 4 +- .../Tests/GuardAuthenticatorHandlerTest.php | 9 ++- .../Tests/Firewall/ContextListenerTest.php | 7 ++- .../Command/Descriptor/HtmlDescriptorTest.php | 2 +- 26 files changed, 304 insertions(+), 119 deletions(-) create mode 100644 src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php create mode 100644 src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php create mode 100644 src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php create mode 100644 src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php new file mode 100644 index 0000000000000..4ca59949345c3 --- /dev/null +++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Doctrine\Tests\Fixtures; + +use Doctrine\ORM\EntityRepository; + +class MockableRepository extends EntityRepository +{ + public function findByCustom() + { + } +} diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php index 75eae2c311d9f..bcfced4771e6f 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -28,6 +28,7 @@ use Symfony\Bridge\Doctrine\Tests\Fixtures\DoubleNameEntity; use Symfony\Bridge\Doctrine\Tests\Fixtures\DoubleNullableNameEntity; use Symfony\Bridge\Doctrine\Tests\Fixtures\Employee; +use Symfony\Bridge\Doctrine\Tests\Fixtures\MockableRepository; use Symfony\Bridge\Doctrine\Tests\Fixtures\Person; use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntity; use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity; @@ -97,14 +98,10 @@ protected function createRegistryMock($em = null) protected function createRepositoryMock() { - $repository = $this->getMockBuilder(EntityRepository::class) + return $this->getMockBuilder(MockableRepository::class) ->disableOriginalConstructor() - ->onlyMethods(['find', 'findAll', 'findOneBy', 'findBy', 'getClassName']) - ->addMethods(['findByCustom']) - ->getMock() - ; - - return $repository; + ->onlyMethods(['find', 'findAll', 'findOneBy', 'findBy', 'getClassName', 'findByCustom']) + ->getMock(); } protected function createEntityManagerMock($repositoryMock) diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php index 9a7f9cd5257b7..29c68c0bcd8d0 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php @@ -31,14 +31,14 @@ class HttpKernelExtensionTest extends TestCase public function testFragmentWithError() { $this->expectException(\Twig\Error\RuntimeError::class); - $renderer = $this->getFragmentHandler($this->throwException(new \Exception('foo'))); + $renderer = $this->getFragmentHandler(new \Exception('foo')); $this->renderTemplate($renderer); } public function testRenderFragment() { - $renderer = $this->getFragmentHandler($this->returnValue(new Response('html'))); + $renderer = $this->getFragmentHandler(new Response('html')); $response = $this->renderTemplate($renderer); @@ -87,11 +87,17 @@ public function testGenerateFragmentUri() $this->assertSame('/_fragment?_hash=PP8%2FeEbn1pr27I9wmag%2FM6jYGVwUZ0l2h0vhh2OJ6CI%3D&_path=template%3Dfoo.html.twig%26_format%3Dhtml%26_locale%3Den%26_controller%3DSymfonyBundleFrameworkBundleControllerTemplateController%253A%253AtemplateAction', $twig->render('index')); } - protected function getFragmentHandler($return) + protected function getFragmentHandler($returnOrException): FragmentHandler { $strategy = $this->createMock(FragmentRendererInterface::class); $strategy->expects($this->once())->method('getName')->willReturn('inline'); - $strategy->expects($this->once())->method('render')->will($return); + + $mocker = $strategy->expects($this->once())->method('render'); + if ($returnOrException instanceof \Exception) { + $mocker->willThrowException($returnOrException); + } else { + $mocker->willReturn($returnOrException); + } $context = $this->createMock(RequestStack::class); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php b/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php index dea148192475a..b0dbf86a840cb 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php @@ -20,9 +20,9 @@ trait RuntimeLoaderProvider protected function registerTwigRuntimeLoader(Environment $environment, FormRenderer $renderer) { $loader = $this->createMock(RuntimeLoaderInterface::class); - $loader->expects($this->any())->method('load')->will($this->returnValueMap([ + $loader->expects($this->any())->method('load')->willReturnMap([ ['Symfony\Component\Form\FormRenderer', $renderer], - ])); + ]); $environment->addRuntimeLoader($loader); } } diff --git a/src/Symfony/Component/Console/Tests/ApplicationTest.php b/src/Symfony/Component/Console/Tests/ApplicationTest.php index bf5652ccc47f2..d58f283585e35 100644 --- a/src/Symfony/Component/Console/Tests/ApplicationTest.php +++ b/src/Symfony/Component/Console/Tests/ApplicationTest.php @@ -41,6 +41,7 @@ use Symfony\Component\Console\SignalRegistry\SignalRegistry; use Symfony\Component\Console\Terminal; use Symfony\Component\Console\Tester\ApplicationTester; +use Symfony\Component\Console\Tests\Fixtures\MockableAppliationWithTerminalWidth; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\EventDispatcherInterface; @@ -876,7 +877,9 @@ public function testRenderExceptionEscapesLines() public function testRenderExceptionLineBreaks() { - $application = $this->getMockBuilder(Application::class)->addMethods(['getTerminalWidth'])->getMock(); + $application = $this->getMockBuilder(MockableAppliationWithTerminalWidth::class) + ->onlyMethods(['getTerminalWidth']) + ->getMock(); $application->setAutoExit(false); $application->expects($this->any()) ->method('getTerminalWidth') diff --git a/src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php b/src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php new file mode 100644 index 0000000000000..7f094ff3c5946 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Tests\Fixtures; + +use Symfony\Component\Console\Application; + +class MockableAppliationWithTerminalWidth extends Application +{ + public function getTerminalWidth(): int + { + return 0; + } +} diff --git a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php index 721371996996b..70240fc3e4088 100644 --- a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php +++ b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php @@ -36,8 +36,8 @@ protected function getValidatorExtension(): ValidatorExtension $this->validator = $this->createMock(ValidatorInterface::class); $metadata = $this->getMockBuilder(ClassMetadata::class)->setConstructorArgs([''])->onlyMethods(['addPropertyConstraint'])->getMock(); - $this->validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); - $this->validator->expects($this->any())->method('validate')->will($this->returnValue(new ConstraintViolationList())); + $this->validator->expects($this->any())->method('getMetadataFor')->willReturn($metadata); + $this->validator->expects($this->any())->method('validate')->willReturn(new ConstraintViolationList()); return new ValidatorExtension($this->validator, false); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php index a29873a26779e..8a37707e7cf97 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php @@ -25,14 +25,17 @@ class DateTimeToLocalizedStringTransformerTest extends BaseDateTimeTransformerTe protected $dateTimeWithoutSeconds; private $defaultLocale; + private $initialTestCaseUseException; + private $initialTestCaseErrorLevel; + protected function setUp(): void { parent::setUp(); // Normalize intl. configuration settings. if (\extension_loaded('intl')) { - $this->iniSet('intl.use_exceptions', 0); - $this->iniSet('intl.error_level', 0); + $this->initialTestCaseUseException = ini_set('intl.use_exceptions', 0); + $this->initialTestCaseErrorLevel = ini_set('intl.error_level', 0); } // Since we test against "de_AT", we need the full implementation @@ -50,6 +53,11 @@ protected function tearDown(): void $this->dateTime = null; $this->dateTimeWithoutSeconds = null; \Locale::setDefault($this->defaultLocale); + + if (\extension_loaded('intl')) { + ini_set('intl.use_exceptions', $this->initialTestCaseUseException); + ini_set('intl.error_level', $this->initialTestCaseUseException); + } } public static function dataProvider() @@ -339,11 +347,15 @@ public function testReverseTransformWrapsIntlErrorsWithErrorLevel() $this->markTestSkipped('intl extension is not loaded'); } - $this->iniSet('intl.error_level', \E_WARNING); + $errorLevel = ini_set('intl.error_level', \E_WARNING); - $this->expectException(TransformationFailedException::class); - $transformer = new DateTimeToLocalizedStringTransformer(); - $transformer->reverseTransform('12345'); + try { + $this->expectException(TransformationFailedException::class); + $transformer = new DateTimeToLocalizedStringTransformer(); + $transformer->reverseTransform('12345'); + } finally { + ini_set('intl.error_level', $errorLevel); + } } public function testReverseTransformWrapsIntlErrorsWithExceptions() @@ -352,11 +364,15 @@ public function testReverseTransformWrapsIntlErrorsWithExceptions() $this->markTestSkipped('intl extension is not loaded'); } - $this->iniSet('intl.use_exceptions', 1); + $initialUseExceptions = ini_set('intl.use_exceptions', 1); - $this->expectException(TransformationFailedException::class); - $transformer = new DateTimeToLocalizedStringTransformer(); - $transformer->reverseTransform('12345'); + try { + $this->expectException(TransformationFailedException::class); + $transformer = new DateTimeToLocalizedStringTransformer(); + $transformer->reverseTransform('12345'); + } finally { + ini_set('intl.use_exceptions', $initialUseExceptions); + } } public function testReverseTransformWrapsIntlErrorsWithExceptionsAndErrorLevel() @@ -365,12 +381,17 @@ public function testReverseTransformWrapsIntlErrorsWithExceptionsAndErrorLevel() $this->markTestSkipped('intl extension is not loaded'); } - $this->iniSet('intl.use_exceptions', 1); - $this->iniSet('intl.error_level', \E_WARNING); + $initialUseExceptions = ini_set('intl.use_exceptions', 1); + $initialErrorLevel = ini_set('intl.error_level', \E_WARNING); - $this->expectException(TransformationFailedException::class); - $transformer = new DateTimeToLocalizedStringTransformer(); - $transformer->reverseTransform('12345'); + try { + $this->expectException(TransformationFailedException::class); + $transformer = new DateTimeToLocalizedStringTransformer(); + $transformer->reverseTransform('12345'); + } finally { + ini_set('intl.use_exceptions', $initialUseExceptions); + ini_set('intl.error_level', $initialErrorLevel); + } } protected function createDateTimeTransformer(?string $inputTimezone = null, ?string $outputTimezone = null): BaseDateTimeTransformer diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php index adf074e36a03c..c67b1391d1058 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php @@ -34,10 +34,14 @@ class NativeSessionStorageTest extends TestCase { private $savePath; + private $initialSessionSaveHandler; + private $initialSessionSavePath; + protected function setUp(): void { - $this->iniSet('session.save_handler', 'files'); - $this->iniSet('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest'); + $this->initialSessionSaveHandler = ini_set('session.save_handler', 'files'); + $this->initialSessionSavePath = ini_set('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest'); + if (!is_dir($this->savePath)) { mkdir($this->savePath); } @@ -52,6 +56,8 @@ protected function tearDown(): void } $this->savePath = null; + ini_set('session.save_handler', $this->initialSessionSaveHandler); + ini_set('session.save_path', $this->initialSessionSavePath); } protected function getStorage(array $options = []): NativeSessionStorage @@ -154,18 +160,26 @@ public function testRegenerationFailureDoesNotFlagStorageAsStarted() public function testDefaultSessionCacheLimiter() { - $this->iniSet('session.cache_limiter', 'nocache'); + $initialLimiter = ini_set('session.cache_limiter', 'nocache'); - new NativeSessionStorage(); - $this->assertEquals('', \ini_get('session.cache_limiter')); + try { + new NativeSessionStorage(); + $this->assertEquals('', \ini_get('session.cache_limiter')); + } finally { + ini_set('session.cache_limiter', $initialLimiter); + } } public function testExplicitSessionCacheLimiter() { - $this->iniSet('session.cache_limiter', 'nocache'); + $initialLimiter = ini_set('session.cache_limiter', 'nocache'); - new NativeSessionStorage(['cache_limiter' => 'public']); - $this->assertEquals('public', \ini_get('session.cache_limiter')); + try { + new NativeSessionStorage(['cache_limiter' => 'public']); + $this->assertEquals('public', \ini_get('session.cache_limiter')); + } finally { + ini_set('session.cache_limiter', $initialLimiter); + } } public function testCookieOptions() @@ -208,20 +222,25 @@ public function testSessionOptions() public function testSetSaveHandler() { - $this->iniSet('session.save_handler', 'files'); - $storage = $this->getStorage(); - $storage->setSaveHandler(); - $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); - $storage->setSaveHandler(null); - $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); - $storage->setSaveHandler(new SessionHandlerProxy(new NativeFileSessionHandler())); - $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); - $storage->setSaveHandler(new NativeFileSessionHandler()); - $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); - $storage->setSaveHandler(new SessionHandlerProxy(new NullSessionHandler())); - $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); - $storage->setSaveHandler(new NullSessionHandler()); - $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + $initialSaveHandler = ini_set('session.save_handler', 'files'); + + try { + $storage = $this->getStorage(); + $storage->setSaveHandler(); + $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + $storage->setSaveHandler(null); + $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + $storage->setSaveHandler(new SessionHandlerProxy(new NativeFileSessionHandler())); + $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + $storage->setSaveHandler(new NativeFileSessionHandler()); + $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + $storage->setSaveHandler(new SessionHandlerProxy(new NullSessionHandler())); + $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + $storage->setSaveHandler(new NullSessionHandler()); + $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler()); + } finally { + ini_set('session.save_handler', $initialSaveHandler); + } } public function testStarted() diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php index e2fb93ebcc000..80d65651868ed 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php @@ -30,10 +30,14 @@ class PhpBridgeSessionStorageTest extends TestCase { private $savePath; + private $initialSessionSaveHandler; + private $initialSessionSavePath; + protected function setUp(): void { - $this->iniSet('session.save_handler', 'files'); - $this->iniSet('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest'); + $this->initialSessionSaveHandler = ini_set('session.save_handler', 'files'); + $this->initialSessionSavePath = ini_set('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest'); + if (!is_dir($this->savePath)) { mkdir($this->savePath); } @@ -48,6 +52,8 @@ protected function tearDown(): void } $this->savePath = null; + ini_set('session.save_handler', $this->initialSessionSaveHandler); + ini_set('session.save_path', $this->initialSessionSavePath); } protected function getStorage(): PhpBridgeSessionStorage diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php index 623b50cd0cd44..e0505f7f4115d 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php @@ -54,21 +54,25 @@ public function testConstruct() */ public function testHandleWithoutLogger($event, $event2) { - $this->iniSet('error_log', file_exists('/dev/null') ? '/dev/null' : 'nul'); - - $l = new ErrorListener('foo'); - $l->logKernelException($event); - $l->onKernelException($event); - - $this->assertEquals(new Response('foo'), $event->getResponse()); + $initialErrorLog = ini_set('error_log', file_exists('/dev/null') ? '/dev/null' : 'nul'); try { - $l->logKernelException($event2); - $l->onKernelException($event2); - $this->fail('RuntimeException expected'); - } catch (\RuntimeException $e) { - $this->assertSame('bar', $e->getMessage()); - $this->assertSame('foo', $e->getPrevious()->getMessage()); + $l = new ErrorListener('foo'); + $l->logKernelException($event); + $l->onKernelException($event); + + $this->assertEquals(new Response('foo'), $event->getResponse()); + + try { + $l->logKernelException($event2); + $l->onKernelException($event2); + $this->fail('RuntimeException expected'); + } catch (\RuntimeException $e) { + $this->assertSame('bar', $e->getMessage()); + $this->assertSame('foo', $e->getPrevious()->getMessage()); + } + } finally { + ini_set('error_log', $initialErrorLog); } } diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php new file mode 100644 index 0000000000000..080953fe02afd --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Fixtures; + +class KernelForTestWithLoadClassCache extends KernelForTest +{ + public function doLoadClassCache(): void + { + } +} diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php new file mode 100644 index 0000000000000..406f07a283fd3 --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Fixtures; + +use Symfony\Component\HttpFoundation\File\UploadedFile; + +class MockableUploadFileWithClientSize extends UploadedFile +{ + public function getClientSize(): int + { + return 0; + } +} diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php index 1d0eb90bf6fdb..8e083e14a2b1f 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php @@ -43,14 +43,14 @@ public function testRenderWhenRendererDoesNotExist() public function testRenderWithUnknownRenderer() { $this->expectException(\InvalidArgumentException::class); - $handler = $this->getHandler($this->returnValue(new Response('foo'))); + $handler = $this->getHandler(new Response('foo')); $handler->render('/', 'bar'); } public function testDeliverWithUnsuccessfulResponse() { - $handler = $this->getHandler($this->returnValue(new Response('foo', 404))); + $handler = $this->getHandler(new Response('foo', 404)); try { $handler->render('/', 'foo'); $this->fail('->render() throws a \RuntimeException exception if response is not successful'); @@ -70,7 +70,7 @@ public function testRender() { $expectedRequest = Request::create('/'); $handler = $this->getHandler( - $this->returnValue(new Response('foo')), + new Response('foo'), [ '/', $this->callback(function (Request $request) use ($expectedRequest) { @@ -97,7 +97,7 @@ protected function getHandler($returnValue, $arguments = []) $e = $renderer ->expects($this->any()) ->method('render') - ->will($returnValue) + ->willReturn($returnValue) ; if ($arguments) { diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index fb22a1a0942b2..168957c1c089a 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -33,14 +33,14 @@ class InlineFragmentRendererTest extends TestCase { public function testRender() { - $strategy = new InlineFragmentRenderer($this->getKernel($this->returnValue(new Response('foo')))); + $strategy = new InlineFragmentRenderer($this->getKernel(new Response('foo'))); $this->assertEquals('foo', $strategy->render('/', Request::create('/'))->getContent()); } public function testRenderWithControllerReference() { - $strategy = new InlineFragmentRenderer($this->getKernel($this->returnValue(new Response('foo')))); + $strategy = new InlineFragmentRenderer($this->getKernel(new Response('foo'))); $this->assertEquals('foo', $strategy->render(new ControllerReference('main_controller', [], []), Request::create('/'))->getContent()); } @@ -81,7 +81,7 @@ public function testRenderExceptionNoIgnoreErrors() $dispatcher = $this->createMock(EventDispatcherInterface::class); $dispatcher->expects($this->never())->method('dispatch'); - $strategy = new InlineFragmentRenderer($this->getKernel($this->throwException(new \RuntimeException('foo'))), $dispatcher); + $strategy = new InlineFragmentRenderer($this->getKernel(new \RuntimeException('foo')), $dispatcher); $this->assertEquals('foo', $strategy->render('/', Request::create('/'))->getContent()); } @@ -89,7 +89,7 @@ public function testRenderExceptionNoIgnoreErrors() public function testRenderExceptionIgnoreErrors() { $exception = new \RuntimeException('foo'); - $kernel = $this->getKernel($this->throwException($exception)); + $kernel = $this->getKernel($exception); $request = Request::create('/'); $expectedEvent = new ExceptionEvent($kernel, $request, $kernel::SUB_REQUEST, $exception); $dispatcher = $this->createMock(EventDispatcherInterface::class); @@ -120,12 +120,17 @@ public function testRenderExceptionIgnoreErrorsWithAlt() private function getKernel($returnValue) { $kernel = $this->createMock(HttpKernelInterface::class); - $kernel + $mocker = $kernel ->expects($this->any()) ->method('handle') - ->will($returnValue) ; + if ($returnValue instanceof \Exception) { + $mocker->willThrowException($returnValue); + } else { + $mocker->willReturn(...(\is_array($returnValue) ? $returnValue : [$returnValue])); + } + return $kernel; } diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php index 55963a16c391e..9092c3bf4663d 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php @@ -18,6 +18,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\HttpKernelBrowser; +use Symfony\Component\HttpKernel\Tests\Fixtures\MockableUploadFileWithClientSize; use Symfony\Component\HttpKernel\Tests\Fixtures\TestClient; /** @@ -153,10 +154,9 @@ public function testUploadedFileWhenSizeExceedsUploadMaxFileSize() $client = new HttpKernelBrowser($kernel); $file = $this - ->getMockBuilder(UploadedFile::class) + ->getMockBuilder(MockableUploadFileWithClientSize::class) ->setConstructorArgs([$source, 'original', 'mime/original', \UPLOAD_ERR_OK, true]) - ->onlyMethods(['getSize']) - ->addMethods(['getClientSize']) + ->onlyMethods(['getSize', 'getClientSize']) ->getMock() ; /* should be modified when the getClientSize will be removed */ diff --git a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php index 74cd34cde3131..0092b786fc827 100644 --- a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTest; +use Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTestWithLoadClassCache; use Symfony\Component\HttpKernel\Tests\Fixtures\KernelWithoutBundles; use Symfony\Component\HttpKernel\Tests\Fixtures\ResettableService; @@ -148,7 +149,7 @@ public function testBootSetsTheBootedFlagToTrue() public function testClassCacheIsNotLoadedByDefault() { - $kernel = $this->getKernel(['initializeBundles'], [], false, ['doLoadClassCache']); + $kernel = $this->getKernel(['initializeBundles', 'doLoadClassCache'], [], false, KernelForTestWithLoadClassCache::class); $kernel->expects($this->never()) ->method('doLoadClassCache'); @@ -663,20 +664,16 @@ protected function getBundle($dir = null, $parent = null, $className = null, $bu * @param array $methods Additional methods to mock (besides the abstract ones) * @param array $bundles Bundles to register */ - protected function getKernel(array $methods = [], array $bundles = [], bool $debug = false, array $methodsToAdd = []): Kernel + protected function getKernel(array $methods = [], array $bundles = [], bool $debug = false, string $kernelClass = KernelForTest::class): Kernel { $methods[] = 'registerBundles'; $kernelMockBuilder = $this - ->getMockBuilder(KernelForTest::class) + ->getMockBuilder($kernelClass) ->onlyMethods($methods) ->setConstructorArgs(['test', $debug]) ; - if (0 !== \count($methodsToAdd)) { - $kernelMockBuilder->addMethods($methodsToAdd); - } - $kernel = $kernelMockBuilder->getMock(); $kernel->expects($this->any()) ->method('registerBundles') diff --git a/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php b/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php index 4801776cce146..8359918815daa 100644 --- a/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php @@ -43,14 +43,19 @@ public function testCheck() public function testCheckWithDifferentArgSeparator() { - $this->iniSet('arg_separator.output', '&'); - $signer = new UriSigner('foobar'); - - $this->assertSame( - 'http://example.com/foo?_hash=rIOcC%2FF3DoEGo%2FvnESjSp7uU9zA9S%2F%2BOLhxgMexoPUM%3D&baz=bay&foo=bar', - $signer->sign('http://example.com/foo?foo=bar&baz=bay') - ); - $this->assertTrue($signer->check($signer->sign('http://example.com/foo?foo=bar&baz=bay'))); + $initialSeparatorOutput = ini_set('arg_separator.output', '&'); + + try { + $signer = new UriSigner('foobar'); + + $this->assertSame( + 'http://example.com/foo?_hash=rIOcC%2FF3DoEGo%2FvnESjSp7uU9zA9S%2F%2BOLhxgMexoPUM%3D&baz=bay&foo=bar', + $signer->sign('http://example.com/foo?foo=bar&baz=bay') + ); + $this->assertTrue($signer->check($signer->sign('http://example.com/foo?foo=bar&baz=bay'))); + } finally { + ini_set('arg_separator.output', $initialSeparatorOutput); + } } public function testCheckWithRequest() diff --git a/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php b/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php index 5c63cf0f91c47..6d089def27ad1 100644 --- a/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php +++ b/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php @@ -109,12 +109,16 @@ public function testFindWithOpenBaseDir() $this->markTestSkipped('Cannot test when open_basedir is set'); } - $this->iniSet('open_basedir', \dirname(\PHP_BINARY).\PATH_SEPARATOR.'/'); + $initialOpenBaseDir = ini_set('open_basedir', \dirname(\PHP_BINARY).\PATH_SEPARATOR.'/'); - $finder = new ExecutableFinder(); - $result = $finder->find($this->getPhpBinaryName()); + try { + $finder = new ExecutableFinder(); + $result = $finder->find($this->getPhpBinaryName()); - $this->assertSamePath(\PHP_BINARY, $result); + $this->assertSamePath(\PHP_BINARY, $result); + } finally { + ini_set('open_basedir', $initialOpenBaseDir); + } } /** @@ -130,12 +134,17 @@ public function testFindProcessInOpenBasedir() } $this->setPath(''); - $this->iniSet('open_basedir', \PHP_BINARY.\PATH_SEPARATOR.'/'); - $finder = new ExecutableFinder(); - $result = $finder->find($this->getPhpBinaryName(), false); + $initialOpenBaseDir = ini_set('open_basedir', \PHP_BINARY.\PATH_SEPARATOR.'/'); - $this->assertSamePath(\PHP_BINARY, $result); + try { + $finder = new ExecutableFinder(); + $result = $finder->find($this->getPhpBinaryName(), false); + + $this->assertSamePath(\PHP_BINARY, $result); + } finally { + ini_set('open_basedir', $initialOpenBaseDir); + } } public function testFindBatchExecutableOnWindows() diff --git a/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php b/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php index 51f7045a12163..62cb6b9f843c1 100644 --- a/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php +++ b/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php @@ -81,9 +81,8 @@ public function testExceptionOnBadMethod() public function testExceptionOnMethodNotReturningCollection() { $this->expectException(\LogicException::class); - $service = $this->getMockBuilder(\stdClass::class) - ->addMethods(['loadRoutes']) - ->getMock(); + + $service = $this->createMock(CustomRouteLoader::class); $service->expects($this->once()) ->method('loadRoutes') ->willReturn('NOT_A_COLLECTION'); @@ -109,6 +108,11 @@ protected function getObject(string $id): object } } +interface CustomRouteLoader +{ + public function loadRoutes(); +} + class TestObjectLoaderRouteService { private $collection; diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php index 8eaf3bb15f378..fbdd58c7e3fc6 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php @@ -22,6 +22,7 @@ use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\CredentialsExpiredException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; +use Symfony\Component\Security\Core\Tests\Fixtures\MockableUsernamePasswordTokenWithRoles; use Symfony\Component\Security\Core\User\InMemoryUser; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserInterface; @@ -232,7 +233,9 @@ public function testAuthenticatePreservesOriginalToken() protected function getSupportedToken() { - $mock = $this->getMockBuilder(UsernamePasswordToken::class)->onlyMethods(['getCredentials', 'getFirewallName'])->addMethods(['getRoles'])->disableOriginalConstructor()->getMock(); + $mock = $this->getMockBuilder(MockableUsernamePasswordTokenWithRoles::class) + ->onlyMethods(['getCredentials', 'getFirewallName', 'getRoles']) + ->disableOriginalConstructor()->getMock(); $mock ->expects($this->any()) ->method('getFirewallName') diff --git a/src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php b/src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php new file mode 100644 index 0000000000000..94fd47fdc1a83 --- /dev/null +++ b/src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Core\Tests\Fixtures; + +use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; + +class MockableUsernamePasswordTokenWithRoles extends UsernamePasswordToken +{ + public function getRoles(): array + { + return []; + } +} diff --git a/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php b/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php index dd86f43ebc65a..46cdb282bcd47 100644 --- a/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php +++ b/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php @@ -53,9 +53,7 @@ public function testGenerateToken() $token = $this->generator->generateToken(); $this->assertTrue(ctype_print($token), 'is printable'); - $this->assertStringNotMatchesFormat('%S+%S', $token, 'is URI safe'); - $this->assertStringNotMatchesFormat('%S/%S', $token, 'is URI safe'); - $this->assertStringNotMatchesFormat('%S=%S', $token, 'is URI safe'); + $this->assertDoesNotMatchRegularExpression('#.+([+/=]).+#', $token, 'is URI safe'); } /** diff --git a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php index 4f39ad61f6f3a..3e56c7b885717 100644 --- a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php +++ b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php @@ -159,12 +159,11 @@ public function testSessionStrategyIsNotCalledWhenStateless() public function testSessionIsNotInstantiatedOnStatelessFirewall() { - $sessionFactory = $this->getMockBuilder(\stdClass::class) - ->addMethods(['__invoke']) - ->getMock(); + $this->expectNotToPerformAssertions(); - $sessionFactory->expects($this->never()) - ->method('__invoke'); + $sessionFactory = static function (): void { + throw new \LogicException('This should not be called'); + }; $this->request->setSessionFactory($sessionFactory); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php index 4d748592aad5f..5389e54ac690f 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php @@ -366,8 +366,11 @@ public function testWithPreviousNotStartedSession() public function testSessionIsNotReported() { - $usageReporter = $this->getMockBuilder(\stdClass::class)->addMethods(['__invoke'])->getMock(); - $usageReporter->expects($this->never())->method('__invoke'); + $this->expectNotToPerformAssertions(); + + $usageReporter = static function (): void { + throw new \LogicException('This should not be called'); + }; $session = new Session(new MockArraySessionStorage(), null, null, $usageReporter); diff --git a/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php b/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php index 09acf149a877b..156b0a829a888 100644 --- a/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php @@ -45,7 +45,7 @@ public function testItOutputsStylesAndScriptsOnFirstDescribeCall() $descriptor->describe($output, new Data([[123]]), ['timestamp' => 1544804268.3668], 1); - $this->assertStringNotMatchesFormat('%A', $output->fetch(), 'styles & scripts are output only once'); + $this->assertDoesNotMatchRegularExpression('#(.*)#', $output->fetch(), 'styles & scripts are output only once'); } /** From 754a637a6e71d5c07de46c1768d78caa3d755651 Mon Sep 17 00:00:00 2001 From: Sherin Bloemendaal Date: Mon, 6 May 2024 15:21:58 +0200 Subject: [PATCH 23/61] [Validator] Update Dutch (nl) translation --- .../Validator/Resources/translations/validators.nl.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf index 7596799d0d904..aa4a3e2151f18 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Deze URL mist een top-level domein. + Deze URL mist een top-level domein. From 365f7b43dc4d7a3429cd46a33c2c3fbe6191769b Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Tue, 7 May 2024 16:40:24 +0200 Subject: [PATCH 24/61] [HttpClient] Revert fixing curl default options --- src/Symfony/Component/HttpClient/Response/CurlResponse.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/HttpClient/Response/CurlResponse.php b/src/Symfony/Component/HttpClient/Response/CurlResponse.php index f36a05f9d6ae2..633b74a1256ed 100644 --- a/src/Symfony/Component/HttpClient/Response/CurlResponse.php +++ b/src/Symfony/Component/HttpClient/Response/CurlResponse.php @@ -174,6 +174,10 @@ public function __construct(CurlClientState $multi, $ch, ?array $options = null, curl_multi_remove_handle($multi->handle, $ch); curl_setopt_array($ch, [ \CURLOPT_NOPROGRESS => true, + \CURLOPT_PROGRESSFUNCTION => null, + \CURLOPT_HEADERFUNCTION => null, + \CURLOPT_WRITEFUNCTION => null, + \CURLOPT_READFUNCTION => null, \CURLOPT_INFILE => null, ]); From 247182a7c051e082d609fba02a9582022ffc7619 Mon Sep 17 00:00:00 2001 From: acoulton Date: Fri, 10 May 2024 09:52:29 +0100 Subject: [PATCH 25/61] [Filesystem] Fix dumpFile `stat failed` error hitting custom handler Since #54471, dumpFile will trigger a `fileperms(): stat failed` error when writing to a filename that does not yet exist. This was silenced from PHP's default handler with the `@` operator. However, the error is still passed to any custom handler that the application has registered, and can therefore cause exceptions or spurious logging depending on the implementation of the handler. The better solution, which is consistent with all other calls to native functions in this class, would be to use `self::box` to catch and ignore the potential error so that it never leaks outside this class. --- src/Symfony/Component/Filesystem/Filesystem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index c5cfa47140052..700311d5843fc 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -691,7 +691,7 @@ public function dumpFile(string $filename, $content) throw new IOException(sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); } - self::box('chmod', $tmpFile, @fileperms($filename) ?: 0666 & ~umask()); + self::box('chmod', $tmpFile, self::box('fileperms', $filename) ?: 0666 & ~umask()); $this->rename($tmpFile, $filename, true); } finally { From 30de18b659e331828df1618b6734fe4348a9ae63 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Tue, 7 May 2024 10:04:19 +0200 Subject: [PATCH 26/61] [PasswordHasher] Make bcrypt nul byte hash test tolerant to PHP related failures --- .../Tests/Hasher/NativePasswordHasherTest.php | 36 ++++++++++++++++-- .../Tests/Hasher/SodiumPasswordHasherTest.php | 38 ++++++++++++++++--- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php index 4cf708b806296..9895910ce8804 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php @@ -98,16 +98,44 @@ public function testBcryptWithLongPassword() $this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword)); } - public function testBcryptWithNulByte() + /** + * @requires PHP < 8.4 + */ + public function testBcryptWithNulByteWithNativePasswordHash() { $hasher = new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT); $plainPassword = "a\0b"; - if (\PHP_VERSION_ID < 80218 || \PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80305) { - // password_hash() does not accept passwords containing NUL bytes since PHP 8.2.18 and 8.3.5 - $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword)); + try { + $hash = password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]); + } catch (\Throwable $throwable) { + // we skip the test in case the current PHP version does not support NUL bytes in passwords + // with bcrypt + // + // @see https://github.com/php/php-src/commit/11f2568767660ffe92fbc6799800e01203aad73a + if (str_contains($throwable->getMessage(), 'Bcrypt password must not contain null character')) { + $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.'); + } + + throw $throwable; } + if (null === $hash) { + // we also skip the test in case password_hash() returns null as + // implemented in security patches backports + // + // @see https://github.com/shivammathur/php-src-backports/commit/d22d9ebb29dce86edd622205dd1196a2796c08c7 + $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.'); + } + + $this->assertTrue($hasher->verify($hash, $plainPassword)); + } + + public function testPasswordNulByteGracefullyHandled() + { + $hasher = new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT); + $plainPassword = "a\0b"; + $this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword)); } diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php index 101c09fc46ed3..2931635e46d79 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php @@ -73,17 +73,45 @@ public function testBcryptWithLongPassword() $this->assertTrue($hasher->verify((new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT))->hash($plainPassword), $plainPassword)); } - public function testBcryptWithNulByte() + /** + * @requires PHP < 8.4 + */ + public function testBcryptWithNulByteWithNativePasswordHash() { $hasher = new SodiumPasswordHasher(null, null); $plainPassword = "a\0b"; - if (\PHP_VERSION_ID < 80218 || \PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80305) { - // password_hash() does not accept passwords containing NUL bytes since PHP 8.2.18 and 8.3.5 - $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword)); + try { + $hash = password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]); + } catch (\Throwable $throwable) { + // we skip the test in case the current PHP version does not support NUL bytes in passwords + // with bcrypt + // + // @see https://github.com/php/php-src/commit/11f2568767660ffe92fbc6799800e01203aad73a + if (str_contains($throwable->getMessage(), 'Bcrypt password must not contain null character')) { + $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.'); + } + + throw $throwable; } - $this->assertTrue($hasher->verify((new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT))->hash($plainPassword), $plainPassword)); + if (null === $hash) { + // we also skip the test in case password_hash() returns null as + // implemented in security patches backports + // + // @see https://github.com/shivammathur/php-src-backports/commit/d22d9ebb29dce86edd622205dd1196a2796c08c7 + $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.'); + } + + $this->assertTrue($hasher->verify($hash, $plainPassword)); + } + + public function testPasswordNulByteGracefullyHandled() + { + $hasher = new SodiumPasswordHasher(null, null); + $plainPassword = "a\0b"; + + $this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword)); } public function testUserProvidedSaltIsNotUsed() From 29d5c19e8568b28ee4efa63a0721fa303e4ce96b Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 10 May 2024 22:18:15 +0200 Subject: [PATCH 27/61] replace wurstmeister Docker images for Kafka and Zookeeper --- .github/workflows/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index cd2bc859ef2a3..b7985b698b11a 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -99,9 +99,9 @@ jobs: ports: - 4566:4566 zookeeper: - image: wurstmeister/zookeeper:3.4.6 + image: zookeeper kafka: - image: wurstmeister/kafka:2.12-2.0.1 + image: bitnami/kafka:3.7 ports: - 9092:9092 env: From 5c372772e2a9000c2eec6f5e5b9bb5cc3a8746df Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 13 May 2024 16:58:31 +0200 Subject: [PATCH 28/61] add test for JSON response with null as content --- .../Component/HttpFoundation/Tests/JsonResponseTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php index 47facb7762ba6..6a1402fedcfd1 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php @@ -294,6 +294,14 @@ public function testConstructorWithObjectWithoutToStringMethodThrowsAnException( new JsonResponse(new \stdClass(), 200, [], true); } + + public function testSetDataWithNull() + { + $response = new JsonResponse(); + $response->setData(null); + + $this->assertSame('null', $response->getContent()); + } } class JsonSerializableObject implements \JsonSerializable From 5de877133481a08733f127177caf58b929c54047 Mon Sep 17 00:00:00 2001 From: ElisDN Date: Mon, 13 May 2024 19:37:09 +0300 Subject: [PATCH 29/61] [Serializer] Fix type for missing property --- .../Serializer/Normalizer/AbstractNormalizer.php | 2 +- .../Component/Serializer/Tests/SerializerTest.php | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index 2192f8ac23c97..256be49ebca00 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -418,7 +418,7 @@ protected function instantiateObject(array &$data, string $class, array &$contex $exception = NotNormalizableValueException::createForUnexpectedDataType( sprintf('Failed to create object because the class misses the "%s" property.', $constructorParameter->name), - $data, + null, [$constructorParameterType], $context['deserialization_path'], true diff --git a/src/Symfony/Component/Serializer/Tests/SerializerTest.php b/src/Symfony/Component/Serializer/Tests/SerializerTest.php index 1fa299682dd3f..639d14e0d6664 100644 --- a/src/Symfony/Component/Serializer/Tests/SerializerTest.php +++ b/src/Symfony/Component/Serializer/Tests/SerializerTest.php @@ -1045,7 +1045,7 @@ public function testCollectDenormalizationErrors(?ClassMetadataFactory $classMet 'message' => 'The type of the "string" attribute for class "Symfony\Component\Serializer\Tests\Fixtures\Php74Full" must be one of "string" ("null" given).', ], [ - 'currentType' => 'array', + 'currentType' => 'null', 'expectedTypes' => [ 'unknown', ], @@ -1306,7 +1306,7 @@ public function testCollectDenormalizationErrorsWithConstructor(?ClassMetadataFa 'message' => 'The type of the "bool" attribute for class "Symfony\\Component\\Serializer\\Tests\\Fixtures\\Php80WithPromotedTypedConstructor" must be one of "bool" ("string" given).', ], [ - 'currentType' => 'array', + 'currentType' => 'null', 'expectedTypes' => [ 'string', ], @@ -1315,7 +1315,7 @@ public function testCollectDenormalizationErrorsWithConstructor(?ClassMetadataFa 'message' => 'Failed to create object because the class misses the "string" property.', ], [ - 'currentType' => 'array', + 'currentType' => 'null', 'expectedTypes' => [ 'int', ], @@ -1420,7 +1420,7 @@ public function testCollectDenormalizationErrorsWithEnumConstructor() $expected = [ [ - 'currentType' => 'array', + 'currentType' => 'null', 'useMessageForUser' => true, 'message' => 'Failed to create object because the class misses the "get" property.', ], @@ -1546,7 +1546,7 @@ public function testPartialDenormalizationWithMissingConstructorTypes() $expected = [ [ - 'currentType' => 'array', + 'currentType' => 'null', 'expectedTypes' => [ 'string', ], From 82a9502bf15b3c1a1645f453d93faa4fc9a81a3b Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 14 May 2024 09:05:11 +0200 Subject: [PATCH 30/61] fix tests --- .../PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php | 2 +- .../PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php index 9895910ce8804..324e1dc65b9ca 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php @@ -128,7 +128,7 @@ public function testBcryptWithNulByteWithNativePasswordHash() $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.'); } - $this->assertTrue($hasher->verify($hash, $plainPassword)); + $this->assertFalse($hasher->verify($hash, $plainPassword)); } public function testPasswordNulByteGracefullyHandled() diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php index 2931635e46d79..ed04b5e097c58 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php @@ -103,7 +103,7 @@ public function testBcryptWithNulByteWithNativePasswordHash() $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.'); } - $this->assertTrue($hasher->verify($hash, $plainPassword)); + $this->assertFalse($hasher->verify($hash, $plainPassword)); } public function testPasswordNulByteGracefullyHandled() From a8114fee4640a9c2a159cc450eaf859e7b6c21bc Mon Sep 17 00:00:00 2001 From: Florent Mata Date: Tue, 14 May 2024 11:08:10 +0200 Subject: [PATCH 31/61] [ErrorHandler] Do not call xdebug_get_function_stack() with xdebug >= 3.0 when not in develop mode --- src/Symfony/Component/ErrorHandler/Error/FatalError.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/ErrorHandler/Error/FatalError.php b/src/Symfony/Component/ErrorHandler/Error/FatalError.php index 73fa3aaa0e6b8..210daba8658cc 100644 --- a/src/Symfony/Component/ErrorHandler/Error/FatalError.php +++ b/src/Symfony/Component/ErrorHandler/Error/FatalError.php @@ -33,7 +33,7 @@ public function __construct(string $message, int $code, array $error, ?int $trac } } } elseif (null !== $traceOffset) { - if (\function_exists('xdebug_get_function_stack') && $trace = @xdebug_get_function_stack()) { + if (\function_exists('xdebug_get_function_stack') && \in_array(\ini_get('xdebug.mode'), ['develop', false], true) && $trace = @xdebug_get_function_stack()) { if (0 < $traceOffset) { array_splice($trace, -$traceOffset); } From a1843f310e126de8039f756e02e852c15626663e Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Fri, 26 Apr 2024 10:58:17 +0200 Subject: [PATCH 32/61] Remove calls to `getMockForAbstractClass()` --- .../Security/User/EntityUserProviderTest.php | 9 +-- .../Security/Factory/AbstractFactoryTest.php | 7 +- .../Config/Tests/Definition/BaseNodeTest.php | 31 +++++++- .../Console/Tests/Question/QuestionTest.php | 4 +- .../Storage/Proxy/AbstractProxyTest.php | 2 +- .../EventListener/SessionListenerTest.php | 9 ++- .../EventListener/TestSessionListenerTest.php | 18 ++++- .../Fragment/RoutableFragmentRendererTest.php | 2 +- .../Component/HttpKernel/Tests/KernelTest.php | 11 ++- .../Transport/Smtp/SmtpTransportTest.php | 2 +- .../AbstractAnnotationLoaderTestCase.php | 10 ++- .../Matcher/RedirectableUrlMatcherTest.php | 5 +- .../UserAuthenticationProviderTest.php | 5 +- .../AccessDecisionManagerTest.php | 15 ++-- .../Voter/TraceableVoterTest.php | 26 +++---- .../Core/Tests/User/ChainUserProviderTest.php | 4 +- .../PasswordMigratingListenerTest.php | 4 +- .../AbstractPreAuthenticatedListenerTest.php | 74 +++++++++++-------- .../AbstractRememberMeServicesTest.php | 9 ++- .../Templating/Tests/DelegatingEngineTest.php | 2 +- .../Tests/Constraints/UuidValidatorTest.php | 2 +- .../Tests/Mapping/Loader/FilesLoaderTest.php | 4 +- 22 files changed, 165 insertions(+), 90 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php b/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php index f3a78dfe9226b..04c3b7f3d31fd 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php @@ -233,14 +233,11 @@ private function getManager($em, $name = null) private function getObjectManager($repository) { - $em = $this->getMockBuilder(ObjectManager::class) - ->onlyMethods(['getClassMetadata', 'getRepository']) - ->getMockForAbstractClass(); - $em->expects($this->any()) - ->method('getRepository') + $objectManager = $this->createMock(ObjectManager::class); + $objectManager->method('getRepository') ->willReturn($repository); - return $em; + return $objectManager; } private function createSchema($em) diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php index e46a36a44fbe4..f8c35cf9ece58 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php @@ -145,7 +145,12 @@ public static function getSuccessHandlers() protected function callFactory($id, $config, $userProviderId, $defaultEntryPointId) { - $factory = $this->getMockForAbstractClass(AbstractFactory::class); + $factory = $this->getMockBuilder(AbstractFactory::class)->onlyMethods([ + 'createAuthProvider', + 'getListenerId', + 'getKey', + 'getPosition', + ])->getMock(); $factory ->expects($this->once()) diff --git a/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php b/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php index 4ea8469ef3c14..d2f0593ccda38 100644 --- a/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php +++ b/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php @@ -36,7 +36,36 @@ public function testGetPathForChildNode(string $expected, array $params) } } - $node = $this->getMockForAbstractClass(BaseNode::class, $constructorArgs); + $node = new class(...$constructorArgs) extends BaseNode { + protected function validateType($value): void + { + } + + protected function normalizeValue($value) + { + return null; + } + + protected function mergeValues($leftSide, $rightSide) + { + return null; + } + + protected function finalizeValue($value) + { + return null; + } + + public function hasDefaultValue(): bool + { + return true; + } + + public function getDefaultValue() + { + return null; + } + }; $this->assertSame($expected, $node->getPath()); } diff --git a/src/Symfony/Component/Console/Tests/Question/QuestionTest.php b/src/Symfony/Component/Console/Tests/Question/QuestionTest.php index e6b6fbee0ed10..bf2763d779af3 100644 --- a/src/Symfony/Component/Console/Tests/Question/QuestionTest.php +++ b/src/Symfony/Component/Console/Tests/Question/QuestionTest.php @@ -157,7 +157,7 @@ public function testSetAutocompleterValuesInvalid($values) public function testSetAutocompleterValuesWithTraversable() { $question1 = new Question('Test question 1'); - $iterator1 = $this->getMockForAbstractClass(\IteratorAggregate::class); + $iterator1 = $this->createMock(\IteratorAggregate::class); $iterator1 ->expects($this->once()) ->method('getIterator') @@ -165,7 +165,7 @@ public function testSetAutocompleterValuesWithTraversable() $question1->setAutocompleterValues($iterator1); $question2 = new Question('Test question 2'); - $iterator2 = $this->getMockForAbstractClass(\IteratorAggregate::class); + $iterator2 = $this->createMock(\IteratorAggregate::class); $iterator2 ->expects($this->once()) ->method('getIterator') diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php index fde7a4a0aef71..742779c50e5a7 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php @@ -29,7 +29,7 @@ class AbstractProxyTest extends TestCase protected function setUp(): void { - $this->proxy = $this->getMockForAbstractClass(AbstractProxy::class); + $this->proxy = new class() extends AbstractProxy {}; } protected function tearDown(): void diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php index 1934af66247dd..7b3cc8159257b 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php @@ -21,6 +21,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\SessionFactory; +use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage; use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory; use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorageFactory; @@ -338,7 +339,13 @@ public function testSessionCookieSetWhenOtherNativeVariablesSet() public function testOnlyTriggeredOnMainRequest() { - $listener = $this->getMockForAbstractClass(AbstractSessionListener::class); + $listener = new class() extends AbstractSessionListener { + protected function getSession(): ?SessionInterface + { + return null; + } + }; + $event = $this->createMock(RequestEvent::class); $event->expects($this->once())->method('isMainRequest')->willReturn(false); $event->expects($this->never())->method('getRequest'); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php index 7e42653dffb69..fa95e67ed141b 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php @@ -45,11 +45,21 @@ class TestSessionListenerTest extends TestCase protected function setUp(): void { - $this->listener = $this->getMockForAbstractClass(AbstractTestSessionListener::class); $this->session = $this->getSession(); - $this->listener->expects($this->any()) - ->method('getSession') - ->willReturn($this->session); + $this->listener = new class($this->session) extends AbstractTestSessionListener { + private $session; + + public function __construct($session) + { + parent::__construct(); + $this->session = $session; + } + + public function getSession(): ?SessionInterface + { + return $this->session; + } + }; } public function testShouldSaveMainRequestSession() diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php index 937c23d869d8c..05c6325915668 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php @@ -75,7 +75,7 @@ public static function getGenerateFragmentUriDataWithNonScalar() private function callGenerateFragmentUriMethod(ControllerReference $reference, Request $request, $absolute = false) { - $renderer = $this->getMockForAbstractClass(RoutableFragmentRenderer::class); + $renderer = $this->createStub(RoutableFragmentRenderer::class); $r = new \ReflectionObject($renderer); $m = $r->getMethod('generateFragmentUri'); $m->setAccessible(true); diff --git a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php index 74cd34cde3131..a254f8af0759f 100644 --- a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php @@ -400,7 +400,7 @@ public function testLocateResourceOnDirectories() $kernel ->expects($this->exactly(2)) ->method('getBundle') - ->willReturn($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, null, 'Bundle1Bundle')) + ->willReturn($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, 'Bundle1Bundle')) ; $this->assertEquals( @@ -417,8 +417,8 @@ public function testInitializeBundleThrowsExceptionWhenRegisteringTwoBundlesWith { $this->expectException(\LogicException::class); $this->expectExceptionMessage('Trying to register two bundles with the same name "DuplicateName"'); - $fooBundle = $this->getBundle(__DIR__.'/Fixtures/FooBundle', null, 'FooBundle', 'DuplicateName'); - $barBundle = $this->getBundle(__DIR__.'/Fixtures/BarBundle', null, 'BarBundle', 'DuplicateName'); + $fooBundle = $this->getBundle(__DIR__.'/Fixtures/FooBundle', 'FooBundle', 'DuplicateName'); + $barBundle = $this->getBundle(__DIR__.'/Fixtures/BarBundle', 'BarBundle', 'DuplicateName'); $kernel = $this->getKernel([], [$fooBundle, $barBundle]); $kernel->boot(); @@ -628,11 +628,10 @@ public function getContainerClass(): string /** * Returns a mock for the BundleInterface. */ - protected function getBundle($dir = null, $parent = null, $className = null, $bundleName = null): BundleInterface + protected function getBundle($dir = null, $className = null, $bundleName = null): BundleInterface { $bundle = $this ->getMockBuilder(BundleInterface::class) - ->onlyMethods(['getPath', 'getName']) ->disableOriginalConstructor() ; @@ -640,7 +639,7 @@ protected function getBundle($dir = null, $parent = null, $className = null, $bu $bundle->setMockClassName($className); } - $bundle = $bundle->getMockForAbstractClass(); + $bundle = $bundle->getMock(); $bundle ->expects($this->any()) diff --git a/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php index c54b050b92963..7d435dcaed5fb 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php @@ -158,7 +158,7 @@ public function testAssertResponseCodeWithNotValidCode() private function invokeAssertResponseCode(string $response, array $codes): void { - $transport = new SmtpTransport($this->getMockForAbstractClass(AbstractStream::class)); + $transport = new SmtpTransport($this->createStub(AbstractStream::class)); $m = new \ReflectionMethod($transport, 'assertResponseCode'); $m->setAccessible(true); $m->invoke($transport, $response, $codes); diff --git a/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php b/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php index e743ef2e35d50..c081f5e6cbbd7 100644 --- a/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php +++ b/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php @@ -13,6 +13,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Routing\Loader\AnnotationClassLoader; +use Symfony\Component\Routing\Route; abstract class AbstractAnnotationLoaderTestCase extends TestCase { @@ -26,9 +27,10 @@ public function getReader() public function getClassLoader($reader) { - return $this->getMockBuilder(AnnotationClassLoader::class) - ->setConstructorArgs([$reader]) - ->getMockForAbstractClass() - ; + return new class($reader) extends AnnotationClassLoader { + protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, object $annot): void + { + } + }; } } diff --git a/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php index d1fd035d12aed..e5093a749b8dc 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php @@ -211,6 +211,9 @@ public function testTrailingRequirementWithDefaultA() protected function getUrlMatcher(RouteCollection $routes, ?RequestContext $context = null) { - return $this->getMockForAbstractClass(RedirectableUrlMatcher::class, [$routes, $context ?? new RequestContext()]); + return $this->getMockBuilder(RedirectableUrlMatcher::class) + ->setConstructorArgs([$routes, $context ?? new RequestContext()]) + ->onlyMethods(['redirect']) + ->getMock(); } } diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php index 8eaf3bb15f378..8274d754c37eb 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php @@ -250,6 +250,9 @@ protected function getProvider($userChecker = false, $hide = true) $userChecker = $this->createMock(UserCheckerInterface::class); } - return $this->getMockForAbstractClass(UserAuthenticationProvider::class, [$userChecker, 'key', $hide]); + return $this->getMockBuilder(UserAuthenticationProvider::class) + ->setConstructorArgs([$userChecker, 'key', $hide]) + ->onlyMethods(['retrieveUser', 'checkAuthentication']) + ->getMock(); } } diff --git a/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php b/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php index aa75671c8e344..6aa99ef3177f5 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php @@ -179,7 +179,8 @@ public static function getStrategyTests(): array public function testCacheableVoters() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); + $voter ->expects($this->once()) ->method('supportsAttribute') @@ -203,7 +204,7 @@ public function testCacheableVoters() public function testCacheableVotersIgnoresNonStringAttributes() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); $voter ->expects($this->never()) ->method('supportsAttribute'); @@ -225,7 +226,7 @@ public function testCacheableVotersIgnoresNonStringAttributes() public function testCacheableVotersWithMultipleAttributes() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); $voter ->expects($this->exactly(2)) ->method('supportsAttribute') @@ -258,7 +259,7 @@ public function testCacheableVotersWithMultipleAttributes() public function testCacheableVotersWithEmptyAttributes() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); $voter ->expects($this->never()) ->method('supportsAttribute'); @@ -280,7 +281,7 @@ public function testCacheableVotersWithEmptyAttributes() public function testCacheableVotersSupportsMethodsCalledOnce() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); $voter ->expects($this->once()) ->method('supportsAttribute') @@ -305,7 +306,7 @@ public function testCacheableVotersSupportsMethodsCalledOnce() public function testCacheableVotersNotCalled() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); $voter ->expects($this->once()) ->method('supportsAttribute') @@ -325,7 +326,7 @@ public function testCacheableVotersNotCalled() public function testCacheableVotersWithMultipleAttributesAndNonString() { $token = $this->createMock(TokenInterface::class); - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); $voter ->expects($this->once()) ->method('supportsAttribute') diff --git a/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php b/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php index d0f8ae08f97db..1d8c86490de4e 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php @@ -23,18 +23,18 @@ class TraceableVoterTest extends TestCase { public function testGetDecoratedVoterClass() { - $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createStub(VoterInterface::class); - $sut = new TraceableVoter($voter, $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass()); + $sut = new TraceableVoter($voter, $this->createStub(EventDispatcherInterface::class)); $this->assertSame($voter, $sut->getDecoratedVoter()); } public function testVote() { - $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(VoterInterface::class); - $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass(); - $token = $this->getMockBuilder(TokenInterface::class)->getMockForAbstractClass(); + $eventDispatcher = $this->createMock(EventDispatcherInterface::class); + $token = $this->createStub(TokenInterface::class); $voter ->expects($this->once()) @@ -55,8 +55,8 @@ public function testVote() public function testSupportsAttributeOnCacheable() { - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); - $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); + $eventDispatcher = $this->createStub(EventDispatcherInterface::class); $voter ->expects($this->once()) @@ -71,8 +71,8 @@ public function testSupportsAttributeOnCacheable() public function testSupportsTypeOnCacheable() { - $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass(); - $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass(); + $voter = $this->createMock(CacheableVoterInterface::class); + $eventDispatcher = $this->createStub(EventDispatcherInterface::class); $voter ->expects($this->once()) @@ -87,8 +87,8 @@ public function testSupportsTypeOnCacheable() public function testSupportsAttributeOnNonCacheable() { - $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass(); - $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass(); + $voter = $this->createStub(VoterInterface::class); + $eventDispatcher = $this->createStub(EventDispatcherInterface::class); $sut = new TraceableVoter($voter, $eventDispatcher); @@ -97,8 +97,8 @@ public function testSupportsAttributeOnNonCacheable() public function testSupportsTypeOnNonCacheable() { - $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass(); - $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass(); + $voter = $this->createStub(VoterInterface::class); + $eventDispatcher = $this->createStub(EventDispatcherInterface::class); $sut = new TraceableVoter($voter, $eventDispatcher); diff --git a/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php b/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php index a5a74f0b05651..c44402bdfe05d 100644 --- a/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php @@ -252,14 +252,14 @@ public function testPasswordUpgrades() { $user = new InMemoryUser('user', 'pwd'); - $provider1 = $this->getMockForAbstractClass(MigratingProvider::class); + $provider1 = $this->createMock(MigratingProvider::class); $provider1 ->expects($this->once()) ->method('upgradePassword') ->willThrowException(new UnsupportedUserException('unsupported')) ; - $provider2 = $this->getMockForAbstractClass(MigratingProvider::class); + $provider2 = $this->createMock(MigratingProvider::class); $provider2 ->expects($this->once()) ->method('upgradePassword') diff --git a/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php b/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php index 8cc200bd99517..4e8ca62a2f036 100644 --- a/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php @@ -108,7 +108,7 @@ public function testUnsupportedPassport() public function testUpgradeWithUpgrader() { - $passwordUpgrader = $this->getMockForAbstractClass(TestMigratingUserProvider::class); + $passwordUpgrader = $this->createMock(TestMigratingUserProvider::class); $passwordUpgrader->expects($this->once()) ->method('upgradePassword') ->with($this->user, 'new-hash') @@ -120,7 +120,7 @@ public function testUpgradeWithUpgrader() public function testUpgradeWithoutUpgrader() { - $userLoader = $this->getMockForAbstractClass(TestMigratingUserProvider::class); + $userLoader = $this->createMock(TestMigratingUserProvider::class); $userLoader->expects($this->any())->method('loadUserByIdentifier')->willReturn($this->user); $userLoader->expects($this->exactly(2)) diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php index 673ae997061d5..c32bd7181f3f8 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php @@ -56,11 +56,15 @@ public function testHandleWithValidValues() ->willReturn($token) ; - $listener = $this->getMockForAbstractClass(AbstractPreAuthenticatedListener::class, [ - $tokenStorage, - $authenticationManager, - 'TheProviderKey', - ]); + $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class) + ->setConstructorArgs([ + $tokenStorage, + $authenticationManager, + 'TheProviderKey', + ]) + ->onlyMethods(['getPreAuthenticatedData']) + ->getMock(); + $listener ->expects($this->once()) ->method('getPreAuthenticatedData') @@ -95,12 +99,15 @@ public function testHandleWhenAuthenticationFails() ->willThrowException($exception) ; - $listener = $this->getMockForAbstractClass( - AbstractPreAuthenticatedListener::class, [ - $tokenStorage, - $authenticationManager, - 'TheProviderKey', - ]); + $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class) + ->setConstructorArgs([ + $tokenStorage, + $authenticationManager, + 'TheProviderKey', + ]) + ->onlyMethods(['getPreAuthenticatedData']) + ->getMock(); + $listener ->expects($this->once()) ->method('getPreAuthenticatedData') @@ -137,12 +144,15 @@ public function testHandleWhenAuthenticationFailsWithDifferentToken() ->willThrowException($exception) ; - $listener = $this->getMockForAbstractClass( - AbstractPreAuthenticatedListener::class, [ - $tokenStorage, - $authenticationManager, - 'TheProviderKey', - ]); + $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class) + ->setConstructorArgs([ + $tokenStorage, + $authenticationManager, + 'TheProviderKey', + ]) + ->onlyMethods(['getPreAuthenticatedData']) + ->getMock(); + $listener ->expects($this->once()) ->method('getPreAuthenticatedData') @@ -174,12 +184,15 @@ public function testHandleWithASimilarAuthenticatedToken() ->method('authenticate') ; - $listener = $this->getMockForAbstractClass( - AbstractPreAuthenticatedListener::class, [ - $tokenStorage, - $authenticationManager, - 'TheProviderKey', - ]); + $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class) + ->setConstructorArgs([ + $tokenStorage, + $authenticationManager, + 'TheProviderKey', + ]) + ->onlyMethods(['getPreAuthenticatedData']) + ->getMock(); + $listener ->expects($this->once()) ->method('getPreAuthenticatedData') @@ -217,12 +230,15 @@ public function testHandleWithAnInvalidSimilarToken() ->willThrowException($exception) ; - $listener = $this->getMockForAbstractClass( - AbstractPreAuthenticatedListener::class, [ - $tokenStorage, - $authenticationManager, - 'TheProviderKey', - ]); + $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class) + ->setConstructorArgs([ + $tokenStorage, + $authenticationManager, + 'TheProviderKey', + ]) + ->onlyMethods(['getPreAuthenticatedData']) + ->getMock(); + $listener ->expects($this->once()) ->method('getPreAuthenticatedData') diff --git a/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php b/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php index 37e4d753da521..825ef808317fa 100644 --- a/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php +++ b/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php @@ -298,9 +298,12 @@ protected function getService($userProvider = null, $options = [], $logger = nul $userProvider = $this->getProvider(); } - return $this->getMockForAbstractClass(AbstractRememberMeServices::class, [ - [$userProvider], 'foosecret', 'fookey', $options, $logger, - ]); + return $this->getMockBuilder(AbstractRememberMeServices::class) + ->setConstructorArgs([ + [$userProvider], 'foosecret', 'fookey', $options, $logger, + ]) + ->onlyMethods(['processAutoLoginCookie', 'onLoginSuccess']) + ->getMock(); } protected function getProvider() diff --git a/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php b/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php index c3544f9156bd1..ad5322f34fd69 100644 --- a/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php +++ b/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php @@ -133,7 +133,7 @@ private function getEngineMock($template, $supports) private function getStreamingEngineMock($template, $supports) { - $engine = $this->getMockForAbstractClass(MyStreamingEngine::class); + $engine = $this->createMock(MyStreamingEngine::class); $engine->expects($this->once()) ->method('supports') diff --git a/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php index d6d6e80699ed9..2c657a3766a7e 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php @@ -45,7 +45,7 @@ public function testEmptyStringIsValid() public function testExpectsUuidConstraintCompatibleType() { $this->expectException(UnexpectedTypeException::class); - $constraint = $this->getMockForAbstractClass(Constraint::class); + $constraint = $this->createStub(Constraint::class); $this->validator->validate('216fff40-98d9-11e3-a5e2-0800200c9a66', $constraint); } diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php index ea5e947be880b..0c2e2a9534de1 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php @@ -36,11 +36,11 @@ public function testCallsActualFileLoaderForMetadata() public function getFilesLoader(LoaderInterface $loader) { - return $this->getMockForAbstractClass(FilesLoader::class, [[ + return new class([ __DIR__.'/constraint-mapping.xml', __DIR__.'/constraint-mapping.yaml', __DIR__.'/constraint-mapping.test', __DIR__.'/constraint-mapping.txt', - ], $loader]); + ], $loader) extends FilesLoader {}; } } From 37e98c70d2839010fe4e9ba04c08b21e87254407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Andr=C3=A9?= Date: Sat, 11 May 2024 17:51:57 +0200 Subject: [PATCH 33/61] [String] Fix folded in compat mode --- src/Symfony/Component/String/AbstractUnicodeString.php | 2 +- .../Component/String/Tests/AbstractUnicodeTestCase.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/String/AbstractUnicodeString.php b/src/Symfony/Component/String/AbstractUnicodeString.php index 52123f507733b..239f234239fb8 100644 --- a/src/Symfony/Component/String/AbstractUnicodeString.php +++ b/src/Symfony/Component/String/AbstractUnicodeString.php @@ -195,7 +195,7 @@ public function folded(bool $compat = true): parent if (!$compat || \PHP_VERSION_ID < 70300 || !\defined('Normalizer::NFKC_CF')) { $str->string = normalizer_normalize($str->string, $compat ? \Normalizer::NFKC : \Normalizer::NFC); - $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $this->string), 'UTF-8'); + $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $str->string), 'UTF-8'); } else { $str->string = normalizer_normalize($str->string, \Normalizer::NFKC_CF); } diff --git a/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php b/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php index 49e44f8cf1bac..cddfe866c89b1 100644 --- a/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php +++ b/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php @@ -470,10 +470,10 @@ public static function provideBeforeAfterLastIgnoreCase(): array ); } - public static function provideToFoldedCase(): array + public static function provideFolded(): array { return array_merge( - parent::provideToFoldedCase(), + parent::provideFolded(), [ ['déjà', 'DéjÀ'], ['σσσ', 'Σσς'], From 7d6d8cd97f7ed3a2a552cc61016c20230a1330fb Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 13 May 2024 08:48:02 +0200 Subject: [PATCH 34/61] filter out empty HTTP header parts --- src/Symfony/Component/HttpFoundation/HeaderUtils.php | 6 +++++- .../Component/HttpFoundation/Tests/AcceptHeaderTest.php | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpFoundation/HeaderUtils.php b/src/Symfony/Component/HttpFoundation/HeaderUtils.php index 3456edace0dc1..110896e1776d1 100644 --- a/src/Symfony/Component/HttpFoundation/HeaderUtils.php +++ b/src/Symfony/Component/HttpFoundation/HeaderUtils.php @@ -286,7 +286,11 @@ private static function groupParts(array $matches, string $separators, bool $fir } foreach ($partMatches as $matches) { - $parts[] = '' === $separators ? self::unquote($matches[0][0]) : self::groupParts($matches, $separators, false); + if ('' === $separators && '' !== $unquoted = self::unquote($matches[0][0])) { + $parts[] = $unquoted; + } elseif ($groupedParts = self::groupParts($matches, $separators, false)) { + $parts[] = $groupedParts; + } } return $parts; diff --git a/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php b/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php index bf4582430503e..e972d714e068a 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php @@ -41,6 +41,8 @@ public static function provideFromStringData() { return [ ['', []], + [';;;', []], + ['0', [new AcceptHeaderItem('0')]], ['gzip', [new AcceptHeaderItem('gzip')]], ['gzip,deflate,sdch', [new AcceptHeaderItem('gzip'), new AcceptHeaderItem('deflate'), new AcceptHeaderItem('sdch')]], ["gzip, deflate\t,sdch", [new AcceptHeaderItem('gzip'), new AcceptHeaderItem('deflate'), new AcceptHeaderItem('sdch')]], From 0c511789d1b253c82ee8390997c1f02088a50f17 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 15 May 2024 14:32:00 +0200 Subject: [PATCH 35/61] add missing plural translation messages --- .../Security/Core/Resources/translations/security.af.xlf | 4 ++++ .../Security/Core/Resources/translations/security.ar.xlf | 4 ++++ .../Security/Core/Resources/translations/security.az.xlf | 4 ++++ .../Security/Core/Resources/translations/security.be.xlf | 4 ++++ .../Security/Core/Resources/translations/security.bg.xlf | 4 ++++ .../Security/Core/Resources/translations/security.bs.xlf | 4 ++++ .../Security/Core/Resources/translations/security.ca.xlf | 4 ++++ .../Security/Core/Resources/translations/security.cs.xlf | 4 ++++ .../Security/Core/Resources/translations/security.cy.xlf | 4 ++++ .../Security/Core/Resources/translations/security.da.xlf | 4 ++++ .../Security/Core/Resources/translations/security.de.xlf | 4 ++++ .../Security/Core/Resources/translations/security.el.xlf | 4 ++++ .../Security/Core/Resources/translations/security.en.xlf | 4 ++++ .../Security/Core/Resources/translations/security.es.xlf | 4 ++++ .../Security/Core/Resources/translations/security.et.xlf | 4 ++++ .../Security/Core/Resources/translations/security.eu.xlf | 4 ++++ .../Security/Core/Resources/translations/security.fa.xlf | 4 ++++ .../Security/Core/Resources/translations/security.fi.xlf | 4 ++++ .../Security/Core/Resources/translations/security.fr.xlf | 4 ++++ .../Security/Core/Resources/translations/security.gl.xlf | 4 ++++ .../Security/Core/Resources/translations/security.he.xlf | 4 ++++ .../Security/Core/Resources/translations/security.hr.xlf | 4 ++++ .../Security/Core/Resources/translations/security.hu.xlf | 4 ++++ .../Security/Core/Resources/translations/security.hy.xlf | 4 ++++ .../Security/Core/Resources/translations/security.id.xlf | 4 ++++ .../Security/Core/Resources/translations/security.it.xlf | 4 ++++ .../Security/Core/Resources/translations/security.ja.xlf | 4 ++++ .../Security/Core/Resources/translations/security.lb.xlf | 4 ++++ .../Security/Core/Resources/translations/security.lt.xlf | 4 ++++ .../Security/Core/Resources/translations/security.lv.xlf | 4 ++++ .../Security/Core/Resources/translations/security.mk.xlf | 4 ++++ .../Security/Core/Resources/translations/security.mn.xlf | 4 ++++ .../Security/Core/Resources/translations/security.my.xlf | 4 ++++ .../Security/Core/Resources/translations/security.nb.xlf | 4 ++++ .../Security/Core/Resources/translations/security.nl.xlf | 4 ++++ .../Security/Core/Resources/translations/security.nn.xlf | 4 ++++ .../Security/Core/Resources/translations/security.no.xlf | 4 ++++ .../Security/Core/Resources/translations/security.pl.xlf | 4 ++++ .../Security/Core/Resources/translations/security.pt.xlf | 4 ++++ .../Security/Core/Resources/translations/security.pt_BR.xlf | 4 ++++ .../Security/Core/Resources/translations/security.ro.xlf | 4 ++++ .../Security/Core/Resources/translations/security.ru.xlf | 4 ++++ .../Security/Core/Resources/translations/security.sk.xlf | 4 ++++ .../Security/Core/Resources/translations/security.sl.xlf | 4 ++++ .../Security/Core/Resources/translations/security.sq.xlf | 4 ++++ .../Security/Core/Resources/translations/security.sr_Cyrl.xlf | 4 ++++ .../Security/Core/Resources/translations/security.sr_Latn.xlf | 4 ++++ .../Security/Core/Resources/translations/security.sv.xlf | 4 ++++ .../Security/Core/Resources/translations/security.th.xlf | 4 ++++ .../Security/Core/Resources/translations/security.tl.xlf | 4 ++++ .../Security/Core/Resources/translations/security.tr.xlf | 4 ++++ .../Security/Core/Resources/translations/security.uk.xlf | 4 ++++ .../Security/Core/Resources/translations/security.ur.xlf | 4 ++++ .../Security/Core/Resources/translations/security.uz.xlf | 4 ++++ .../Security/Core/Resources/translations/security.vi.xlf | 4 ++++ .../Security/Core/Resources/translations/security.zh_CN.xlf | 4 ++++ .../Security/Core/Resources/translations/security.zh_TW.xlf | 4 ++++ 57 files changed, 228 insertions(+) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf index 014111dff1262..53d3962baf213 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Te veel mislukte aanmeldpogings, probeer asseblief weer oor %minutes% minuut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf index 4871bc6676620..e68a14a5e48b0 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. عدد كبير جدا من محاولات الدخول الفاشلة، يرجى اعادة المحاولة بعد %minutes% دقيقة. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf index 29d26c4fbb784..87fe970085727 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf index f9dd10d472fcf..9b3b25fe8fbe3 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Занадта шмат няўдалых спроб уваходу ў сістэму, паспрабуйце спробу праз %minutes% хвіліну. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf index 8c04364db7166..360907682fed7 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Твърде много неуспешни опити за вход, моля опитайте отново след %minutes% минута. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf index d3fde1a5d2f01..08032676ae285 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf index 1450b8d0d4581..583223cda0580 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Massa intents d'inici de sessió fallits, torneu-ho a provar en %minutes% minut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf index 2572e628a8a68..30b4d082e4e5e 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minutu. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf index b701c291c5049..db9a7b44a799e 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Gormod o ymdrechion mewngofnodi wedi methu, ceisiwch eto ymhen %minutes% munud. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf index bd58bee7037c2..b7897c49ced7d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. For mange mislykkede loginforsøg. Prøv venligst igen om %minutes% minut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf index 76cb737ae25f3..c1c457abd92b3 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in einer Minute noch einmal. + + Too many failed login attempts, please try again in %minutes% minutes. + Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in %minutes% Minuten noch einmal. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf index bebd2a486a3e7..2031d047f2fb3 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Πολλαπλές αποτυχημένες απόπειρες σύνδεσης, παρακαλούμε ξαναδοκιμάστε σε %minutes% λεπτό. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf index 589ca1babed5a..dffde89751e55 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Too many failed login attempts, please try again in %minutes% minute. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf index 971b97e69829a..f81841504102d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo en %minutes% minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf index e09c718d9e302..cdb9430e6f11c 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Liiga palju ebaõnnestunud autentimise katseid, palun proovi uuesti %minutes% minuti pärast. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf index 7b294c2249969..2ffb7d8352e45 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Saioa hasteko huts gehiegi egin dira, saiatu berriro minutu %minutes% geroago. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf index d5ab89f6a264d..56278f8ad8b16 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. تلاش‌های ناموفق زیادی برای ورود صورت گرفته است، لطفاً %minutes% دقیقه دیگر دوباره امتحان کنید. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf index c50d484633250..809a6dc33c542 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf index 4594e8eaac409..4918f06ae63c7 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Plusieurs tentatives de connexion ont échoué, veuillez réessayer dans %minutes% minute. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf index 5ec7187aaf43a..a3c86c6b2ecf8 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Demasiados intentos de inicio de sesión errados, por favor, ténteo de novo en %minutes% minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf index f1294d0c9e272..46fc4cd49a4bf 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב בוד %minutes% דקה. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf index b61f133ad9ad0..1508a077b35ce 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Previše neuspjelih pokušaja prijave, molim pokušajte ponovo za %minutes% minutu. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf index 6262acf50915b..f288621b224ed 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Túl sok sikertelen bejelentkezési kísérlet, kérjük próbálja újra %minutes% perc múlva. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf index e58ce08b739b4..5ff40dcbbe93f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Մուտքի չափազանց շատ անհաջող փորձեր: Խնդրում ենք կրկին փորձել %minutes րոպե: + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf index 477e91bc16cf2..075e334e949cb 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Terlalu banyak percobaan login yang salah, silahkan coba lagi dalam %minutes% menit. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf index 4100dbd11b1f0..e9b57e7f83608 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Troppi tentativi di login falliti, riprova tra %minutes% minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf index f344b570129b7..5b42ef8c3498d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. ログイン試行回数が多すぎます。%minutes%分後に再度お試しください。 + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf index ae0a4fd760540..b373bb9cce08f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Zu vill fehlgeschloen Loginversich, w. e. g. probéiert nach am %minutes% Minutt. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf index 19e553a04bfb5..7a70f46c2b24e 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą po %minutes% minutės. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf index 45775be0335ee..4e3d9220960f7 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Pārāk daudz nesekmīgu autentifikācijas mēģinājumu, lūdzu mēģiniet vēlreiz pēc %minutes% minūtes. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf index e82e31cefab7c..f0fc692bf2e5b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Премногу неуспешни обиди за најавување, обидете се повторно за %minutes% минута. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf index 3a14608923612..991281d8e220b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Нэвтрэх оролдлого ихээр амжилтгүй болсон, %minutes% минутын дараа дахин оролдоно уу. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf index 066dae7673d92..641cf2e44393b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Login ၀င်ရန်ကြိုးစားမှုများလွန်းပါသည်၊ ကျေးဇူးပြု၍ နောက် %minutes% မှထပ်မံကြိုးစားပါ။ + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf index 549bcbf65d488..ca59c6831c4b5 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf index 418e1409d1458..8036b4a3ad4bf 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Te veel onjuiste inlogpogingen, probeer het opnieuw over %minutes% minuut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf index db49db3992bfe..6d04a32156af7 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf index 549bcbf65d488..ca59c6831c4b5 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf index 4833f59db16af..660399d084d9e 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Zbyt wiele nieudanych prób logowania, spróbuj ponownie po upływie %minutes% minut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf index 20fd523d3516d..396e4f6927cf8 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Demasiadas tentativas de login, tente novamente num minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf index f15b3a8909720..8f8604e41057f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Muitas tentativas de login inválidas, por favor, tente novamente em um minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf index 07bb782e68312..c8b6a375dde05 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Prea multe încercări nereușite, încearcă din nou în %minutes% minut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf index 05003efcc2b77..b171e6e4e46a0 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Слишком много неудачных попыток входа в систему, повторите попытку через %minutes% минуту. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf index 5d67a2454d049..0eb1f1779643c 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Príliš veľa neúspešných pokusov o prihlásenie. Skúste to znova o %minutes% minútu. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf index 218864b42680f..eacf0746978fb 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Preveč neuspelih poskusov prijave, poskusite znova čez %minutes% minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf index 905ac7b6ec58b..d5a4cd1ebc3b9 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Shumë përpjekje të dështuara për identifikim; provo sërish pas %minutes% minutë. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf index 0a18dff55678a..f1af1ee93222a 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Превише неуспешних покушаја пријављивања, молим покушајте поново за %minutes% минут. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf index 79403cb97d1d5..8cf08f8d20f67 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Previše neuspešnih pokušaja prijavljivanja, molim pokušajte ponovo za %minutes% minut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf index 7604431130b9a..31972c900941b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. För många misslyckade inloggningsförsök, försök igen om %minutes% minut. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf index 4e066754de340..ed879ca429b05 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. มีความพยายามเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf index 4c8d455eeeb68..e65af26ee76e5 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Napakaraming nabigong mga pagtatangka sa pag-login, pakisubukan ulit sa% minuto% minuto. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf index da131b5faa332..4f23375e3a596 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf index 48bb6960373ae..4e4b1fe19fc64 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Забагато невдалих спроб входу. Будь ласка, спробуйте знову через %minutes% хвилину. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf index 070c9bbfd48a1..3d55bab5a87c2 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf index 574f46c36c663..617e0e27aa2df 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Kirish uchun muvaffaqiyatsiz urinishlar, %minutes% daqiqadan so'ng qayta urinib ko'ring. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf index cca3cfd7dd834..48d719e811979 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. Quá nhiều lần thử đăng nhập không thành công, vui lòng thử lại sau %minutes% phút. + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf index 1d218426793da..e6812ae3ace7d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. 登入失败的次数过多,请在%minutes%分钟后再试。 + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf index 43372798665d2..cb88c0ed892bf 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf @@ -74,6 +74,10 @@ Too many failed login attempts, please try again in %minutes% minute. 登錄失敗的次數過多,請在%minutes%分鐘後再試。 + + Too many failed login attempts, please try again in %minutes% minutes. + Too many failed login attempts, please try again in %minutes% minutes. + From bfa0b1b178f2e72a2d59143ca9227bd13b64b419 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 16 May 2024 10:46:28 +0200 Subject: [PATCH 36/61] [Security] Populate translations for trans-unit 20 --- .github/workflows/integration-tests.yml | 24 +++++++++---------- .../Resources/translations/security.af.xlf | 2 +- .../Resources/translations/security.ar.xlf | 2 +- .../Resources/translations/security.az.xlf | 2 +- .../Resources/translations/security.be.xlf | 2 +- .../Resources/translations/security.bg.xlf | 2 +- .../Resources/translations/security.bs.xlf | 2 +- .../Resources/translations/security.ca.xlf | 2 +- .../Resources/translations/security.cs.xlf | 2 +- .../Resources/translations/security.cy.xlf | 2 +- .../Resources/translations/security.da.xlf | 2 +- .../Resources/translations/security.el.xlf | 2 +- .../Resources/translations/security.es.xlf | 2 +- .../Resources/translations/security.et.xlf | 2 +- .../Resources/translations/security.eu.xlf | 2 +- .../Resources/translations/security.fa.xlf | 2 +- .../Resources/translations/security.fi.xlf | 2 +- .../Resources/translations/security.fr.xlf | 2 +- .../Resources/translations/security.gl.xlf | 2 +- .../Resources/translations/security.he.xlf | 2 +- .../Resources/translations/security.hr.xlf | 2 +- .../Resources/translations/security.hu.xlf | 2 +- .../Resources/translations/security.hy.xlf | 2 +- .../Resources/translations/security.id.xlf | 2 +- .../Resources/translations/security.it.xlf | 2 +- .../Resources/translations/security.ja.xlf | 2 +- .../Resources/translations/security.lb.xlf | 2 +- .../Resources/translations/security.lt.xlf | 2 +- .../Resources/translations/security.lv.xlf | 2 +- .../Resources/translations/security.mk.xlf | 2 +- .../Resources/translations/security.mn.xlf | 2 +- .../Resources/translations/security.my.xlf | 2 +- .../Resources/translations/security.nb.xlf | 2 +- .../Resources/translations/security.nl.xlf | 2 +- .../Resources/translations/security.nn.xlf | 2 +- .../Resources/translations/security.no.xlf | 2 +- .../Resources/translations/security.pl.xlf | 2 +- .../Resources/translations/security.pt.xlf | 2 +- .../Resources/translations/security.pt_BR.xlf | 2 +- .../Resources/translations/security.ro.xlf | 2 +- .../Resources/translations/security.ru.xlf | 2 +- .../Resources/translations/security.sk.xlf | 2 +- .../Resources/translations/security.sl.xlf | 2 +- .../Resources/translations/security.sq.xlf | 2 +- .../translations/security.sr_Cyrl.xlf | 2 +- .../translations/security.sr_Latn.xlf | 2 +- .../Resources/translations/security.sv.xlf | 2 +- .../Resources/translations/security.th.xlf | 2 +- .../Resources/translations/security.tl.xlf | 2 +- .../Resources/translations/security.tr.xlf | 2 +- .../Resources/translations/security.uk.xlf | 2 +- .../Resources/translations/security.ur.xlf | 2 +- .../Resources/translations/security.uz.xlf | 2 +- .../Resources/translations/security.vi.xlf | 2 +- .../Resources/translations/security.zh_CN.xlf | 2 +- .../Resources/translations/security.zh_TW.xlf | 2 +- 56 files changed, 67 insertions(+), 67 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index b7985b698b11a..9e131a4c6674e 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -176,6 +176,18 @@ jobs: ./phpunit install echo "::endgroup::" + - name: Check for changes in translation files + id: changed-translation-files + run: | + echo 'changed='$((git diff --quiet HEAD~1 HEAD -- 'src/**/Resources/translations/*.xlf' || (echo 'true' && exit 1)) && echo 'false') >> $GITHUB_OUTPUT + + - name: Check Translation Status + if: steps.changed-translation-files.outputs.changed == 'true' + run: | + php src/Symfony/Component/Translation/Resources/bin/translation-status.php -v + php .github/sync-translations.php + git diff --exit-code src/ || (echo '::error::Run "php .github/sync-translations.php" to fix XLIFF files.' && exit 1) + - name: Run tests run: ./phpunit --group integration -v env: @@ -199,15 +211,3 @@ jobs: # docker run --rm -e COMPOSER_ROOT_VERSION -v $(pwd):/app -v $(which composer):/usr/local/bin/composer -v $(which vulcain):/usr/local/bin/vulcain -w /app php:8.0-alpine ./phpunit src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php --filter testHttp2Push # sudo rm -rf .phpunit # [ -d .phpunit.bak ] && mv .phpunit.bak .phpunit - - - name: Check for changes in translation files - id: changed-translation-files - run: | - echo 'changed='$((git diff --quiet HEAD~1 HEAD -- 'src/**/Resources/translations/*.xlf' || (echo 'true' && exit 1)) && echo 'false') >> $GITHUB_OUTPUT - - - name: Check Translation Status - if: steps.changed-translation-files.outputs.changed == 'true' - run: | - php src/Symfony/Component/Translation/Resources/bin/translation-status.php -v - php .github/sync-translations.php - git diff --exit-code src/ || (echo '::error::Run "php .github/sync-translations.php" to fix XLIFF files.' && exit 1) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf index 53d3962baf213..7bcb92066c72f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Te veel mislukte aanmeldpogings, probeer asseblief weer oor %minutes% minute. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf index e68a14a5e48b0..d90e830ff18f4 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + عدد محاولات تسجيل الدخول الفاشلة كثيرة، الرجاء المحاولة مرة أخرى بعد %minutes% دقيقة.|عدد محاولات تسجيل الدخول الفاشلة كثيرة، الرجاء المحاولة مرة أخرى بعد %minutes% دقائق. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf index 87fe970085727..25cb8605d2bc8 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Çox sayda uğursuz giriş cəhdi, zəhmət olmasa %minutes% dəqiqə sonra yenidən cəhd edin.|Çox sayda uğursuz giriş cəhdi, zəhmət olmasa %minutes% dəqiqə sonra yenidən cəhd edin. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf index 9b3b25fe8fbe3..194392935fcc1 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвіліну.|Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвіліны.|Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвілін. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf index 360907682fed7..7fdd4252411be 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Твърде много неуспешни опити за вход, моля опитайте отново след %minutes% минути. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf index 08032676ae285..f58dce0ea8e59 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Previše neuspješnih pokušaja prijave, pokušajte ponovo za %minutes% minut.|Previše neuspješnih pokušaja prijave, pokušajte ponovo za %minutes% minuta. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf index 583223cda0580..6d7dc7fc23e33 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Massa intents fallits d'inici de sessió, torneu-ho a provar d'aquí a %minutes% minuts. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf index 30b4d082e4e5e..a37e34e106ed1 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minutu.|Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minuty.|Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minut. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf index db9a7b44a799e..ddb47097a93c7 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Gormod o ymdrechion mewngofnodi wedi methu, rhowch gynnig arall arni mewn %minutes% munud.|Gormod o ymdrechion mewngofnodi wedi methu, rhowch gynnig arall arni mewn %minutes% munud. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf index b7897c49ced7d..564f0eee992ee 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + For mange mislykkede loginforsøg, prøv igen om %minutes% minutter. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf index 2031d047f2fb3..383bfc2cf4f17 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Πολλές αποτυχημένες προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %minutes% λεπτά. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf index f81841504102d..e8af87e5bb9c8 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo en %minutes% minutos. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf index cdb9430e6f11c..b87cb71ceec7f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Liiga palju nurjunud sisselogimiskatseid, proovige uuesti %minutes% minuti pärast. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf index 2ffb7d8352e45..0f0a71342ff38 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Saioa hasteko saiakera huts gehiegi, saiatu berriro %minutes% minututan. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf index 56278f8ad8b16..897c34b8e86b0 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + تعداد دفعات تلاش برای ورود بیش از حد زیاد است، لطفا پس از %minutes% دقیقه دوباره تلاش کنید. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf index 809a6dc33c542..7df4a19347428 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf index 4918f06ae63c7..b3793bc7a25a1 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Trop de tentatives de connexion échouées, veuillez réessayer dans %minutes% minutes. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf index a3c86c6b2ecf8..49f48dbed9412 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Demasiados intentos fallidos de inicio de sesión, inténtao de novo en %minutes% minutos. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf index 46fc4cd49a4bf..b1d6afd434e8a 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב בעוד %minutes% דקות. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf index 1508a077b35ce..a8f0066d8a4e5 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minutu.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf index f288621b224ed..bdee5f6813fbf 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Túl sok sikertelen bejelentkezési kísérlet, kérjük, próbálja újra %minutes% perc múlva. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf index 5ff40dcbbe93f..e506c9198812c 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Չափազանց շատ անհաջող մուտքի փորձեր, խնդրում ենք փորձել կրկին %minutes% րոպեից. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf index 075e334e949cb..0bfd6474f61e4 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Terlalu banyak upaya login yang gagal, silakan coba lagi dalam %minutes% menit.|Terlalu banyak upaya login yang gagal, silakan coba lagi dalam %minutes% menit. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf index e9b57e7f83608..ef250923e411c 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Troppi tentativi di accesso falliti, riprova tra %minutes% minuti. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf index 5b42ef8c3498d..2d9590a8c3474 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + ログイン試行の失敗が多すぎます。%minutes% 分後に再試行してください。|ログイン試行の失敗が多すぎます。%minutes% 分後に再試行してください。 diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf index b373bb9cce08f..181ef2444f62b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Ze vill Feeler beim Umellen, versicht weg erëm an %minutes% Minutten. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf index 7a70f46c2b24e..8053d0da23a87 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Per daug nesėkmingų prisijungimo bandymų, bandykite vėl po %minutes% minutės.|Per daug nesėkmingų prisijungimo bandymų, bandykite vėl po %minutes% minučių. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf index 4e3d9220960f7..0a3164caf7985 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Pārāk daudz neveiksmīgu pieteikšanās mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtes.|Pārāk daudz neveiksmīgu pieteikšanās mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtēm. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf index f0fc692bf2e5b..ba046eca2c15b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Претерано многу неуспешни обиди за најавување, ве молиме обидете се повторно за %minutes% минута.|Претерано многу неуспешни обиди за најавување, ве молиме обидете се повторно за %minutes% минути. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf index 991281d8e220b..33a9ffda2163b 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Хэт олон бүтэлгүй нэвтрэх оролдлого, %minutes% минутын дараа дахин оролдоно уу. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf index 641cf2e44393b..8550e745ef813 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + ဝင်ရောက်မှု မအောင်မြင်သော ကြိုးပမ်းမှုများအတွက် တစ်ခါတည်း ပြန်လုပ်မည်။ ထပ်မံကြိုးစားကြည့်ပါ။ %minutes% မိနစ်အတွင်း|ဝင်ရောက်မှု မအောင်မြင်သော ကြိုးပမ်းမှုများအတွက် တစ်ခါတည်း ပြန်လုပ်မည်။ ထပ်မံကြိုးစားကြည့်ပါ။ %minutes% မိနစ်အတွင်း diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf index ca59c6831c4b5..9ace014112098 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf index 8036b4a3ad4bf..1a8e72eb604c2 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Te veel mislukte inlogpogingen, probeer het over %minutes% minuten opnieuw. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf index 6d04a32156af7..1a4c32b737909 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + For mange mislukka innloggingsforsøk, prøv igjen om %minutes% minutt. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf index ca59c6831c4b5..9ace014112098 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf index 660399d084d9e..f842a2169ee64 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minutę.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minuty.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minut. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf index 396e4f6927cf8..5ae30c96f8ca9 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Muitas tentativas de login sem sucesso, por favor tente novamente em %minutes% minutos. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf index 8f8604e41057f..675b600e83783 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Muitas tentativas de login sem sucesso, por favor tente novamente em %minutes% minutos. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf index c8b6a375dde05..c46b9b50738a0 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minut.|Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minute. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf index b171e6e4e46a0..4ff423f0e7c3d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Слишком много неудачных попыток входа в систему, попробуйте снова через %minutes% минуту.|Слишком много неудачных попыток входа в систему, попробуйте снова через %minutes% минуты.|Слишком много неудачных попыток входа в систему, попробуйте снова через %minutes% минут. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf index 0eb1f1779643c..b08757de0086f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Príliš veľa neúspešných pokusov o prihlásenie, skúste to prosím znova o %minutes% minútu.|Príliš veľa neúspešných pokusov o prihlásenie, skúste to prosím znova o %minutes% minúty.|Príliš veľa neúspešných pokusov o prihlásenie, skúste to prosím znova o %minutes% minút. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf index eacf0746978fb..7d0514005116d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Preveč neuspešnih poskusov prijave, poskusite znova čez %minutes% minuto.|Preveč neuspešnih poskusov prijave, poskusite znova čez %minutes% minut. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf index d5a4cd1ebc3b9..44f129e306115 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Shumë përpjekje të pasuksesshme për t'u identifikuar, ju lutemi provoni përsëri pas %minutes% minutash. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf index f1af1ee93222a..c4e58def93226 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Превише неуспешних покушаја пријављивања, покушајте поново за %minutes% минут.|Превише неуспешних покушаја пријављивања, покушајте поново за %minutes% минута.|Превише неуспешних покушаја пријављивања, покушајте поново за %minutes% минута. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf index 8cf08f8d20f67..ad0774f9a0bb2 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Previše neuspešnih pokušaja prijavljivanja, pokušajte ponovo za %minutes% minut.|Previše neuspešnih pokušaja prijavljivanja, pokušajte ponovo za %minutes% minuta.|Previše neuspešnih pokušaja prijavljivanja, pokušajte ponovo za %minutes% minuta. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf index 31972c900941b..dffe36df6350f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + För många misslyckade inloggningsförsök, vänligen försök igen om %minutes% minuter. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf index ed879ca429b05..0209b4c423eb7 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + มีความพยายามในการเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที.|มีความพยายามในการเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf index e65af26ee76e5..c02222dedb204 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Napakaraming nabigong pagtatangka ng pag-login, mangyaring subukang muli sa loob ng %minutes% minuto.|Napakaraming nabigong pagtatangka ng pag-login, mangyaring subukang muli sa loob ng %minutes% minuto. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf index 4f23375e3a596..4cfc1cb9dfce0 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin.|Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf index 4e4b1fe19fc64..3d6a561355e82 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Занадто багато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилину.|Занадто багато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилини.|Занадто багато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилин. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf index 3d55bab5a87c2..5c705cd0f7293 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + بہت زیادہ ناکام لاگ ان کوششیں، براہ کرم %minutes% منٹ میں دوبارہ کوشش کریں۔ diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf index 617e0e27aa2df..ec690c5f43711 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Koʻplab muvaffaqiyatsiz kirish urinishlari, iltimos, %minutes% daqiqadan so'ng qayta urinib koʻring.|Koʻplab muvaffaqiyatsiz kirish urinishlari, iltimos, %minutes% daqiqadan so'ng qayta urinib koʻring. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf index 48d719e811979..fc4595c8d7c77 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + Quá nhiều lần đăng nhập không thành công, vui lòng thử lại sau %minutes% phút.|Quá nhiều lần đăng nhập không thành công, vui lòng thử lại sau %minutes% phút. diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf index e6812ae3ace7d..9954d866a89e2 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + 登录尝试失败次数过多,请在 %minutes% 分钟后再试。|登录尝试失败次数过多,请在 %minutes% 分钟后再试。 diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf index cb88c0ed892bf..097ce9976f32f 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Too many failed login attempts, please try again in %minutes% minutes. + 嘗試登入失敗次數過多,請 %minutes% 分鐘後再試。|嘗試登入失敗次數過多,請 %minutes% 分鐘後再試。 From 16fc5956091ea0bd83a34763408fd0c0320ebabb Mon Sep 17 00:00:00 2001 From: karstennilsen Date: Tue, 14 May 2024 14:03:37 +0200 Subject: [PATCH 37/61] [Validator] IBAN Check digits should always between 2 and 98 --- .../Validator/Constraints/IbanValidator.php | 12 ++++++++++++ .../Tests/Constraints/IbanValidatorTest.php | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/Symfony/Component/Validator/Constraints/IbanValidator.php b/src/Symfony/Component/Validator/Constraints/IbanValidator.php index 173cb6678dc0e..423e0099d94c5 100644 --- a/src/Symfony/Component/Validator/Constraints/IbanValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IbanValidator.php @@ -228,6 +228,18 @@ public function validate($value, Constraint $constraint) return; } + // Check digits should always between 2 and 98 + // A ECBS document (https://www.ecbs.org/Download/EBS204_V3.PDF) replicates part of the ISO/IEC 7064:2003 standard as a method for generating check digits in the range 02 to 98. + $checkDigits = (int) substr($canonicalized, 2, 2); + if ($checkDigits < 2 || $checkDigits > 98) { + $this->context->buildViolation($constraint->message) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setCode(Iban::CHECKSUM_FAILED_ERROR) + ->addViolation(); + + return; + } + // Move the first four characters to the end // e.g. CH93 0076 2011 6238 5295 7 // -> 0076 2011 6238 5295 7 CH93 diff --git a/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php index 70994f509170c..566430079d6b1 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php @@ -401,6 +401,12 @@ public static function getIbansWithValidFormatButIncorrectChecksum() ['UA213223130000026007233566002'], // Ukraine ['AE260211000000230064017'], // United Arab Emirates ['VA59001123000012345671'], // Vatican City State + + // Checksum digits not between 02 and 98 + ['FO00 5432 0388 8999 44'], // Faroe Islands + ['NL01INGB0001393698'], // Netherlands + ['NL01RABO0331811235'], // Netherlands + ['RU99 0445 2560 0407 0281 0412 3456 7890 1'], // Russia ]; } From 82a1f0b8c660cc7eb56da7c49046aba94f090e93 Mon Sep 17 00:00:00 2001 From: Stephan Vierkant Date: Fri, 17 May 2024 10:47:44 +0200 Subject: [PATCH 38/61] Update security.nl.xlf --- .../Security/Core/Resources/translations/security.nl.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf index 1a8e72eb604c2..4549d9f1c34f3 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Te veel mislukte inlogpogingen, probeer het over %minutes% minuten opnieuw. + Te veel mislukte inlogpogingen, probeer het over %minutes% minuten opnieuw. From 92e54acf7c1a165b30a76880147bc8d036169782 Mon Sep 17 00:00:00 2001 From: llupa Date: Mon, 22 Apr 2024 13:11:46 +0200 Subject: [PATCH 39/61] [PropertyInfo] Update DoctrineExtractor for new DBAL 4 BIGINT type --- .../Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php | 10 ++++++++++ .../Tests/PropertyInfo/DoctrineExtractorTest.php | 10 +++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php b/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php index 46e3e73b09a0b..568ba730c712f 100644 --- a/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php +++ b/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php @@ -12,6 +12,7 @@ namespace Symfony\Bridge\Doctrine\PropertyInfo; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\BigIntType; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMapping; @@ -142,6 +143,15 @@ public function getTypes(string $class, string $property, array $context = []) } $nullable = $metadata instanceof ClassMetadata && $metadata->isNullable($property); + + // DBAL 4 has a special fallback strategy for BINGINT (int -> string) + if (Types::BIGINT === $typeOfField && !method_exists(BigIntType::class, 'getName')) { + return [ + new Type(Type::BUILTIN_TYPE_INT, $nullable), + new Type(Type::BUILTIN_TYPE_STRING, $nullable), + ]; + } + $enumType = null; if (null !== $enumClass = self::getMappingValue($metadata->getFieldMapping($property), 'enumType') ?? null) { $enumType = new Type(Type::BUILTIN_TYPE_OBJECT, $nullable, $enumClass); diff --git a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php index 757813f017af9..d4108d42f7965 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php @@ -16,6 +16,7 @@ use Doctrine\Common\EventManager; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Schema\DefaultSchemaManagerFactory; +use Doctrine\DBAL\Types\BigIntType; use Doctrine\DBAL\Types\Type as DBALType; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\Column; @@ -162,10 +163,17 @@ public function testExtractEnum() public static function typesProvider(): array { + // DBAL 4 has a special fallback strategy for BINGINT (int -> string) + if (!method_exists(BigIntType::class, 'getName')) { + $expectedBingIntType = [new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_STRING)]; + } else { + $expectedBingIntType = [new Type(Type::BUILTIN_TYPE_STRING)]; + } + return [ ['id', [new Type(Type::BUILTIN_TYPE_INT)]], ['guid', [new Type(Type::BUILTIN_TYPE_STRING)]], - ['bigint', [new Type(Type::BUILTIN_TYPE_STRING)]], + ['bigint', $expectedBingIntType], ['time', [new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTime')]], ['timeImmutable', [new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTimeImmutable')]], ['dateInterval', [new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateInterval')]], From d1c385eb0d986ff5fb7bc000f88ddb84ff50ebd0 Mon Sep 17 00:00:00 2001 From: Camille Islasse <34024380+camilleislasse@users.noreply.github.com> Date: Fri, 17 May 2024 13:50:36 +0200 Subject: [PATCH 40/61] Update security.fr.xlf --- .../Security/Core/Resources/translations/security.fr.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf index b3793bc7a25a1..058ad9473b96a 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Trop de tentatives de connexion échouées, veuillez réessayer dans %minutes% minutes. + Trop de tentatives de connexion échouées, veuillez réessayer dans %minutes% minutes. From 27b5030f34877e7a15522f9ea03b6e1f3cee4f39 Mon Sep 17 00:00:00 2001 From: k-sahara Date: Fri, 17 May 2024 22:16:16 +0900 Subject: [PATCH 41/61] Reviewing translations for Japanese. --- .../Core/Resources/translations/security.ja.xlf | 2 +- .../Resources/translations/validators.ja.xlf | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf index 2d9590a8c3474..bc3a18aefd8b2 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - ログイン試行の失敗が多すぎます。%minutes% 分後に再試行してください。|ログイン試行の失敗が多すぎます。%minutes% 分後に再試行してください。 + ログイン試行回数が多すぎます。%minutes%分後に再度お試しください。 diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf index c977df4a3e186..9ec98ebbd47c4 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf @@ -136,7 +136,7 @@ This value is not a valid IP address. - この値は有効なIPアドレスではありません。 + 有効なIPアドレスではありません。 This value is not a valid language. @@ -192,7 +192,7 @@ No temporary folder was configured in php.ini, or the configured folder does not exist. - php.iniに一時フォルダが設定されていないか、設定されたフォルダが存在しません。 + php.iniに一時フォルダが設定されていないか、設定されたフォルダが存在しません。 Cannot write temporary file to disk. @@ -224,7 +224,7 @@ This value is not a valid International Bank Account Number (IBAN). - この値は有効な国際銀行口座番号(IBAN)ではありません。 + 有効な国際銀行勘定番号(IBAN)ではありません。 This value is not a valid ISBN-10. @@ -312,7 +312,7 @@ This value is not a valid Business Identifier Code (BIC). - この値は有効なビジネス識別コード(BIC)ではありません。 + 有効なSWIFTコードではありません。 Error @@ -320,7 +320,7 @@ This value is not a valid UUID. - この値は有効なUUIDではありません。 + 有効なUUIDではありません。 This value should be a multiple of {{ compared_value }}. @@ -436,11 +436,11 @@ This value is not a valid MAC address. - この値は有効なMACアドレスではありません。 + 有効なMACアドレスではありません。 This URL is missing a top-level domain. - このURLはトップレベルドメインがありません。 + このURLはトップレベルドメインがありません。 From f519a70695850087a706848b7e9f69226b412058 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Fri, 17 May 2024 23:05:25 +0200 Subject: [PATCH 42/61] [Security] reviewed Polish translation of key 20 --- .../Security/Core/Resources/translations/security.pl.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf index f842a2169ee64..0cfc58b35bf2d 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minutę.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minuty.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minut. + Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minutę.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minuty.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minut. From d19cbb8e4f7eb9f2f28319b795bae6f77fe7a0d7 Mon Sep 17 00:00:00 2001 From: Ivan Mezinov Date: Sun, 19 May 2024 20:32:00 +0300 Subject: [PATCH 43/61] review: RU translation --- .../Security/Core/Resources/translations/security.ru.xlf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf index 4ff423f0e7c3d..8705a24cff2e3 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf @@ -72,11 +72,11 @@ Too many failed login attempts, please try again in %minutes% minute. - Слишком много неудачных попыток входа в систему, повторите попытку через %minutes% минуту. + Слишком много неудачных попыток входа, повторите попытку через %minutes% минуту. Too many failed login attempts, please try again in %minutes% minutes. - Слишком много неудачных попыток входа в систему, попробуйте снова через %minutes% минуту.|Слишком много неудачных попыток входа в систему, попробуйте снова через %minutes% минуты.|Слишком много неудачных попыток входа в систему, попробуйте снова через %minutes% минут. + Слишком много неудачных попыток входа, повторите попытку через %minutes% минуту.|Слишком много неудачных попыток входа, повторите попытку через %minutes% минуты.|Слишком много неудачных попыток входа, повторите попытку через %minutes% минут. From f7826a27f36a9442703ad917843f07b3ee1f09e5 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Mon, 20 May 2024 16:07:44 +0200 Subject: [PATCH 44/61] [Security] reviewed Latvian translation of key 20 --- .../Security/Core/Resources/translations/security.lv.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf index 0a3164caf7985..fdf0a09698887 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Pārāk daudz neveiksmīgu pieteikšanās mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtes.|Pārāk daudz neveiksmīgu pieteikšanās mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtēm. + Pārāk daudz neveiksmīgu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtes.|Pārāk daudz neveiksmīgu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtēm. From 8a4d0fcf766b55b03577a4823f8b4e044425f7c3 Mon Sep 17 00:00:00 2001 From: Asis Pattisahusiwa <79239132+asispts@users.noreply.github.com> Date: Sat, 18 May 2024 16:25:22 +0700 Subject: [PATCH 45/61] Review Indonesian (id) translation --- .../Core/Resources/translations/security.id.xlf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf index 0bfd6474f61e4..4c1cd9965e1af 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf @@ -4,7 +4,7 @@ An authentication exception occurred. - Terjadi sebuah pengecualian otentikasi. + Terjadi kesalahan otentikasi. Authentication credentials could not be found. @@ -16,7 +16,7 @@ Invalid credentials. - Kredensial salah. + Kredensial tidak valid. Cookie has already been used by someone else. @@ -28,7 +28,7 @@ Invalid CSRF token. - Token CSRF salah. + Token CSRF tidak valid. No authentication provider found to support the authentication token. @@ -64,19 +64,19 @@ Too many failed login attempts, please try again later. - Terlalu banyak percobaan login yang salah, silahkan coba lagi nanti. + Terlalu banyak percobaan login yang gagal, silahkan coba lagi nanti. Invalid or expired login link. - Link login salah atau sudah kedaluwarsa. + Link login tidak valid atau sudah kedaluwarsa. Too many failed login attempts, please try again in %minutes% minute. - Terlalu banyak percobaan login yang salah, silahkan coba lagi dalam %minutes% menit. + Terlalu banyak percobaan login yang gagal, silahkan coba lagi dalam %minutes% menit. Too many failed login attempts, please try again in %minutes% minutes. - Terlalu banyak upaya login yang gagal, silakan coba lagi dalam %minutes% menit.|Terlalu banyak upaya login yang gagal, silakan coba lagi dalam %minutes% menit. + Terlalu banyak upaya login yang gagal, silakan coba lagi dalam beberapa %minutes% menit. From 3b75d7acd0ffb27f8fd47fd938525b4d7e130d42 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Tue, 21 May 2024 06:53:32 +0200 Subject: [PATCH 46/61] [Security] Fix Croatian translation --- .../Security/Core/Resources/translations/security.hr.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf index a8f0066d8a4e5..f3b5a257e5f28 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minutu.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta. + Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minutu.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minute.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta. From 09547240e049124e59d62fe5db43118b1900a18b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 21 May 2024 09:50:21 +0200 Subject: [PATCH 47/61] Update PR template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 00a24cbcfc13c..f749de5e0d82a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ | Q | A | ------------- | --- -| Branch? | 7.1 for features / 5.4, 6.4, or 7.0 for bug fixes +| Branch? | 7.2 for features / 5.4, 6.4, 7.0, and 7.1 for bug fixes | Bug fix? | yes/no | New feature? | yes/no | Deprecations? | yes/no From 628c1881fd52103316bde302dac6c190e066c350 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Tue, 21 May 2024 18:15:52 +0200 Subject: [PATCH 48/61] [Security] reviewed Ukrainian translation of key 20 --- .../Security/Core/Resources/translations/security.uk.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf index 3d6a561355e82..6b27de7caed99 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Занадто багато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилину.|Занадто багато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилини.|Занадто багато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилин. + Забагато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилину.|Забагато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилини.|Забагато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилин. From ab85f70ba0f10fb753ce2fd726e76c76279d3d9b Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Tue, 21 May 2024 21:24:01 +0200 Subject: [PATCH 49/61] [Security] reviewed Greek translation of key 20 --- .../Security/Core/Resources/translations/security.el.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf index 383bfc2cf4f17..25cfb43bdf474 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Πολλές αποτυχημένες προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %minutes% λεπτά. + Πολλές αποτυχημένες προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %minutes% λεπτά. From 8b19b08ae5c455dd3414cc91db6f37d4eacf8d46 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Wed, 22 May 2024 10:31:31 +0200 Subject: [PATCH 50/61] [Security] reviewed Romanian translation of key 20 --- .../Security/Core/Resources/translations/security.ro.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf index c46b9b50738a0..3316275fdec13 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf @@ -76,7 +76,7 @@ Too many failed login attempts, please try again in %minutes% minutes. - Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minut.|Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minute. + Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minut.|Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minute. From 869a7cc2163be637091d3f921dc302824dd28a85 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 13 May 2024 08:32:02 +0200 Subject: [PATCH 51/61] adapt GHA config for the Bitnami Docker image for Kafka --- .github/workflows/integration-tests.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 9e131a4c6674e..7994d7dcc44b4 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -105,11 +105,12 @@ jobs: ports: - 9092:9092 env: - KAFKA_AUTO_CREATE_TOPICS_ENABLE: false - KAFKA_CREATE_TOPICS: 'test-topic:1:1:compact' - KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 - KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' - KAFKA_ADVERTISED_PORT: 9092 + KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: false + ALLOW_PLAINTEXT_LISTENER: 'yes' + KAFKA_CFG_ADVERTISED_LISTENERS: 'PLAINTEXT://127.0.0.1:9092' + KAFKA_CFG_LISTENERS: 'PLAINTEXT://:9092' + KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper:2181' + options: --name=kafka steps: - name: Checkout @@ -117,6 +118,10 @@ jobs: with: fetch-depth: 0 + - name: Init Kafka topics + run: | + docker exec kafka /opt/bitnami/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server kafka:9092 + - name: Install system dependencies run: | echo "::group::apt-get update" From b664d757a395a5a3b871350d8583d7d85cd423ce Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sat, 25 May 2024 13:31:35 +0200 Subject: [PATCH 52/61] keep boolean options when their value is false --- .../Notifier/Bridge/Slack/SlackTransport.php | 2 +- .../Bridge/Slack/Tests/SlackTransportTest.php | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php b/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php index 8595f364e866a..dffea36ac402b 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php @@ -83,7 +83,7 @@ protected function doSend(MessageInterface $message): SentMessage } $options['text'] = $message->getSubject(); $response = $this->client->request('POST', 'https://'.$this->getEndpoint().'/api/chat.postMessage', [ - 'json' => array_filter($options), + 'json' => array_filter($options, function ($value): bool { return !\in_array($value, ['', [], null], true); }), 'auth_bearer' => $this->accessToken, 'headers' => [ 'Content-Type' => 'application/json; charset=utf-8', diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php index 231677c8a251e..164fbec575cbd 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php @@ -174,6 +174,56 @@ public function testSendWithNotification() $this->assertSame('1503435956.000247', $sentMessage->getMessageId()); } + /** + * @testWith [true] + * [false] + */ + public function testSendWithBooleanOptionValue(bool $value) + { + $channel = 'testChannel'; + $message = 'testMessage'; + + $response = $this->createMock(ResponseInterface::class); + + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $response->expects($this->once()) + ->method('getContent') + ->willReturn(json_encode(['ok' => true, 'ts' => '1503435956.000247'])); + + $options = new SlackOptions(); + $options->asUser($value); + $options->linkNames($value); + $options->mrkdwn($value); + $options->unfurlLinks($value); + $options->unfurlMedia($value); + $notification = new Notification($message); + $chatMessage = ChatMessage::fromNotification($notification); + $chatMessage->options($options); + + $expectedBody = json_encode([ + 'as_user' => $value, + 'channel' => $channel, + 'link_names' => $value, + 'mrkdwn' => $value, + 'text' => $message, + 'unfurl_links' => $value, + 'unfurl_media' => $value, + ]); + + $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response, $expectedBody): ResponseInterface { + $this->assertJsonStringEqualsJsonString($expectedBody, $options['body']); + + return $response; + }); + + $transport = self::createTransport($client, $channel); + + $transport->send($chatMessage); + } + public function testSendWithInvalidOptions() { $this->expectException(LogicException::class); From fc0dc0e2982b4792f9a50fe5e24ade569babbbef Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Mon, 27 May 2024 08:57:07 +0200 Subject: [PATCH 53/61] [VarDumper] Fix generator dump on PHP 8.4 --- .../VarDumper/Caster/ReflectionCaster.php | 4 +- .../Tests/Caster/ReflectionCasterTest.php | 82 +++++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php index 35fd1e8a99b2b..87e5ffcc07858 100644 --- a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php @@ -83,13 +83,13 @@ public static function castGenerator(\Generator $c, array $a, Stub $stub, bool $ // Cannot create ReflectionGenerator based on a terminated Generator try { $reflectionGenerator = new \ReflectionGenerator($c); + + return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested); } catch (\Exception $e) { $a[Caster::PREFIX_VIRTUAL.'closed'] = true; return $a; } - - return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested); } public static function castType(\ReflectionType $c, array $a, Stub $stub, bool $isNested) diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php index e57999182ea89..a87fa55c8fa8f 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php @@ -500,6 +500,84 @@ class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest" ); } + /** + * @requires PHP < 8.4 + */ + public function testGeneratorPriorTo84() + { + if (\extension_loaded('xdebug')) { + $this->markTestSkipped('xdebug is active'); + } + + $generator = new GeneratorDemo(); + $generator = $generator->baz(); + + $expectedDump = <<<'EODUMP' +Generator { + this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …} + %s: { + %sGeneratorDemo.php:14 { + Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() + › { + › yield from bar(); + › } + } +%A} + closed: false +} +EODUMP; + + $this->assertDumpMatchesFormat($expectedDump, $generator); + + foreach ($generator as $v) { + break; + } + + $expectedDump = <<<'EODUMP' +array:2 [ + 0 => ReflectionGenerator { + this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …} + %s: { + %s%eTests%eFixtures%eGeneratorDemo.php:%d { + Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo() +%A › yield 1; +%A } + %s%eTests%eFixtures%eGeneratorDemo.php:20 { …} + %s%eTests%eFixtures%eGeneratorDemo.php:14 { …} +%A } + closed: false + } + 1 => Generator { + %s: { + %s%eTests%eFixtures%eGeneratorDemo.php:%d { + Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo() + › yield 1; + › } + › + } +%A } + closed: false + } +] +EODUMP; + + $r = new \ReflectionGenerator($generator); + $this->assertDumpMatchesFormat($expectedDump, [$r, $r->getExecutingGenerator()]); + + foreach ($generator as $v) { + } + + $expectedDump = <<<'EODUMP' +Generator { + closed: true +} +EODUMP; + $this->assertDumpMatchesFormat($expectedDump, $generator); + } + + /** + * @requires PHP 8.4 + */ public function testGenerator() { if (\extension_loaded('xdebug')) { @@ -511,6 +589,7 @@ public function testGenerator() $expectedDump = <<<'EODUMP' Generator { + function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::baz" this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …} %s: { %sGeneratorDemo.php:14 { @@ -519,6 +598,7 @@ public function testGenerator() › yield from bar(); › } } + Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() {} %A} closed: false } @@ -545,6 +625,7 @@ public function testGenerator() closed: false } 1 => Generator { + function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo" %s: { %s%eTests%eFixtures%eGeneratorDemo.php:%d { Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo() @@ -566,6 +647,7 @@ public function testGenerator() $expectedDump = <<<'EODUMP' Generator { + function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::baz" closed: true } EODUMP; From dc91a0907de30cf85729b2646b03e33c36dcd0f5 Mon Sep 17 00:00:00 2001 From: Rutger Hertogh Date: Wed, 22 May 2024 21:42:40 +0200 Subject: [PATCH 54/61] [Mime] Fixed `Mime\Message::ensureValidity()` when a required header is set, but has an empty body --- src/Symfony/Component/Mime/Message.php | 4 +- .../Component/Mime/Tests/MessageTest.php | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Mime/Message.php b/src/Symfony/Component/Mime/Message.php index 639b26b521b73..dbc3ded21bfa5 100644 --- a/src/Symfony/Component/Mime/Message.php +++ b/src/Symfony/Component/Mime/Message.php @@ -124,11 +124,11 @@ public function toIterable(): iterable public function ensureValidity() { - if (!$this->headers->has('To') && !$this->headers->has('Cc') && !$this->headers->has('Bcc')) { + if (!$this->headers->get('To')?->getBody() && !$this->headers->get('Cc')?->getBody() && !$this->headers->get('Bcc')?->getBody()) { throw new LogicException('An email must have a "To", "Cc", or "Bcc" header.'); } - if (!$this->headers->has('From') && !$this->headers->has('Sender')) { + if (!$this->headers->get('From')?->getBody() && !$this->headers->get('Sender')?->getBody()) { throw new LogicException('An email must have a "From" or a "Sender" header.'); } diff --git a/src/Symfony/Component/Mime/Tests/MessageTest.php b/src/Symfony/Component/Mime/Tests/MessageTest.php index 308eb8f7179db..6d981e7eb1f6d 100644 --- a/src/Symfony/Component/Mime/Tests/MessageTest.php +++ b/src/Symfony/Component/Mime/Tests/MessageTest.php @@ -276,4 +276,71 @@ public function testSymfonySerialize() $serialized = $serializer->serialize($e, 'json'); $this->assertSame($expectedJson, json_encode(json_decode($serialized), \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES)); } + + /** + * @dataProvider ensureValidityProvider + */ + public function testEnsureValidity(array $headers, ?string $exceptionClass, ?string $exceptionMessage) + { + if ($exceptionClass) { + $this->expectException($exceptionClass); + $this->expectExceptionMessage($exceptionMessage); + } else { + $this->expectNotToPerformAssertions(); + } + + $m = new Message(); + foreach ($headers as $headerName => $headerValue) { + $m->getHeaders()->addMailboxListHeader($headerName, $headerValue); + } + $m->ensureValidity(); + } + + public function ensureValidityProvider() + { + return [ + 'Valid address fields' => [ + [ + 'To' => ['dummy@symfony.com'], + 'From' => ['test@symfony.com'], + ], + null, + null, + ], + + 'No destination address fields' => [ + [ + 'From' => ['test@symfony.com'], + ], + LogicException::class, + 'An email must have a "To", "Cc", or "Bcc" header.', + ], + + 'Empty destination address fields' => [ + [ + 'To' => [], + 'From' => ['test@symfony.com'], + ], + LogicException::class, + 'An email must have a "To", "Cc", or "Bcc" header.', + ], + + 'No originator fields' => [ + [ + 'To' => ['dummy@symfony.com'], + ], + LogicException::class, + 'An email must have a "From" or a "Sender" header.', + ], + + 'Empty originator fields' => [ + [ + 'To' => ['dummy@symfony.com'], + 'From' => [], + ], + LogicException::class, + 'An email must have a "From" or a "Sender" header.', + ], + ]; + } } From c5c6f08a7113454ab5aaee99cdcbb2f0fcca94c6 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 29 May 2024 16:34:37 +0200 Subject: [PATCH 55/61] fix PHP 7 compatibility --- src/Symfony/Component/Mime/Message.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Mime/Message.php b/src/Symfony/Component/Mime/Message.php index dbc3ded21bfa5..df7ed1b7944c2 100644 --- a/src/Symfony/Component/Mime/Message.php +++ b/src/Symfony/Component/Mime/Message.php @@ -124,11 +124,18 @@ public function toIterable(): iterable public function ensureValidity() { - if (!$this->headers->get('To')?->getBody() && !$this->headers->get('Cc')?->getBody() && !$this->headers->get('Bcc')?->getBody()) { + $to = (null !== $header = $this->headers->get('To')) ? $header->getBody() : null; + $cc = (null !== $header = $this->headers->get('Cc')) ? $header->getBody() : null; + $bcc = (null !== $header = $this->headers->get('Bcc')) ? $header->getBody() : null; + + if (!$to && !$cc && !$bcc) { throw new LogicException('An email must have a "To", "Cc", or "Bcc" header.'); } - if (!$this->headers->get('From')?->getBody() && !$this->headers->get('Sender')?->getBody()) { + $from = (null !== $header = $this->headers->get('From')) ? $header->getBody() : null; + $sender = (null !== $header = $this->headers->get('Sender')) ? $header->getBody() : null; + + if (!$from && !$sender) { throw new LogicException('An email must have a "From" or a "Sender" header.'); } From 1b2ead35caa79ff19a3cee54f496e67adc85e219 Mon Sep 17 00:00:00 2001 From: Bob van de Vijver Date: Thu, 11 Apr 2024 15:38:30 +0200 Subject: [PATCH 56/61] [Mailer] Fix sendmail transport failure handling and interactive mode --- .../Fixtures/fake-failing-sendmail.php | 4 + .../Tests/Transport/SendmailTransportTest.php | 109 ++++++++++++++---- .../Mailer/Transport/SendmailTransport.php | 1 + .../Transport/Smtp/Stream/ProcessStream.php | 13 ++- 4 files changed, 106 insertions(+), 21 deletions(-) diff --git a/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php b/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php index 920b980e0f714..1ce987202d3d6 100755 --- a/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php @@ -1,4 +1,8 @@ #!/usr/bin/env php markTestSkipped('Windows does not support shebangs nor non-blocking standard streams'); - } + $this->skipOnWindows(); $mail = new Email(); $mail @@ -71,20 +75,9 @@ public function testToIsUsedWhenRecipientsAreNotSet() public function testRecipientsAreUsedWhenSet() { - if ('\\' === \DIRECTORY_SEPARATOR) { - $this->markTestSkipped('Windows does not support shebangs nor non-blocking standard streams'); - } + $this->skipOnWindows(); - $mail = new Email(); - $mail - ->from('from@mail.com') - ->to('to@mail.com') - ->subject('Subject') - ->text('Some text') - ; - - $envelope = new DelayedEnvelope($mail); - $envelope->setRecipients([new Address('recipient@mail.com')]); + [$mail, $envelope] = $this->defaultMailAndEnvelope(); $sendmailTransport = new SendmailTransport(self::FAKE_SENDMAIL); $sendmailTransport->send($mail, $envelope); @@ -93,11 +86,90 @@ public function testRecipientsAreUsedWhenSet() } public function testThrowsTransportExceptionOnFailure() + { + $this->skipOnWindows(); + + [$mail, $envelope] = $this->defaultMailAndEnvelope(); + + $sendmailTransport = new SendmailTransport(self::FAKE_FAILING_SENDMAIL); + $this->expectException(TransportException::class); + $this->expectExceptionMessage('Process failed with exit code 42: Sending failed'); + $sendmailTransport->send($mail, $envelope); + + $streamProperty = new \ReflectionProperty(SendmailTransport::class, 'stream'); + $streamProperty->setAccessible(true); + $stream = $streamProperty->getValue($sendmailTransport); + $this->assertNull($stream->stream); + } + + public function testStreamIsClearedOnFailure() + { + $this->skipOnWindows(); + + [$mail, $envelope] = $this->defaultMailAndEnvelope(); + + $sendmailTransport = new SendmailTransport(self::FAKE_FAILING_SENDMAIL); + try { + $sendmailTransport->send($mail, $envelope); + } catch (TransportException $e) { + } + + $streamProperty = new \ReflectionProperty(SendmailTransport::class, 'stream'); + $streamProperty->setAccessible(true); + $stream = $streamProperty->getValue($sendmailTransport); + $innerStreamProperty = new \ReflectionProperty(ProcessStream::class, 'stream'); + $innerStreamProperty->setAccessible(true); + $this->assertNull($innerStreamProperty->getValue($stream)); + } + + public function testDoesNotThrowWhenInteractive() + { + $this->skipOnWindows(); + + [$mail, $envelope] = $this->defaultMailAndEnvelope(); + + $sendmailTransport = new SendmailTransport(self::FAKE_INTERACTIVE_SENDMAIL); + $transportProperty = new \ReflectionProperty(SendmailTransport::class, 'transport'); + $transportProperty->setAccessible(true); + + // Replace the transport with an anonymous consumer that trigger the stream methods + $transportProperty->setValue($sendmailTransport, new class($transportProperty->getValue($sendmailTransport)->getStream()) implements TransportInterface { + private $stream; + + public function __construct(ProcessStream $stream) + { + $this->stream = $stream; + } + + public function send(RawMessage $message, ?Envelope $envelope = null): ?SentMessage + { + $this->stream->initialize(); + $this->stream->write('SMTP'); + $this->stream->terminate(); + + return new SentMessage($message, $envelope); + } + + public function __toString(): string + { + return 'Interactive mode test'; + } + }); + + $sendmailTransport->send($mail, $envelope); + + $this->assertStringEqualsFile($this->argsPath, __DIR__.'/Fixtures/fake-failing-sendmail.php -bs'); + } + + private function skipOnWindows() { if ('\\' === \DIRECTORY_SEPARATOR) { $this->markTestSkipped('Windows does not support shebangs nor non-blocking standard streams'); } + } + private function defaultMailAndEnvelope(): array + { $mail = new Email(); $mail ->from('from@mail.com') @@ -109,9 +181,6 @@ public function testThrowsTransportExceptionOnFailure() $envelope = new DelayedEnvelope($mail); $envelope->setRecipients([new Address('recipient@mail.com')]); - $sendmailTransport = new SendmailTransport(self::FAKE_FAILING_SENDMAIL); - $this->expectException(TransportException::class); - $this->expectExceptionMessage('Process failed with exit code 42: Sending failed'); - $sendmailTransport->send($mail, $envelope); + return [$mail, $envelope]; } } diff --git a/src/Symfony/Component/Mailer/Transport/SendmailTransport.php b/src/Symfony/Component/Mailer/Transport/SendmailTransport.php index 22aea4e915d1f..712016b5fed2b 100644 --- a/src/Symfony/Component/Mailer/Transport/SendmailTransport.php +++ b/src/Symfony/Component/Mailer/Transport/SendmailTransport.php @@ -64,6 +64,7 @@ public function __construct(?string $command = null, ?EventDispatcherInterface $ $this->stream = new ProcessStream(); if (str_contains($this->command, ' -bs')) { $this->stream->setCommand($this->command); + $this->stream->setInteractive(true); $this->transport = new SmtpTransport($this->stream, $dispatcher, $logger); } } diff --git a/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php b/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php index 808d9eb53fa68..d717055b64b1b 100644 --- a/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php +++ b/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php @@ -25,11 +25,18 @@ final class ProcessStream extends AbstractStream { private $command; + private $interactive = false; + public function setCommand(string $command) { $this->command = $command; } + public function setInteractive(bool $interactive) + { + $this->interactive = $interactive; + } + public function initialize(): void { $descriptorSpec = [ @@ -57,11 +64,15 @@ public function terminate(): void $err = stream_get_contents($this->err); fclose($this->err); if (0 !== $exitCode = proc_close($this->stream)) { - throw new TransportException('Process failed with exit code '.$exitCode.': '.$out.$err); + $errorMessage = 'Process failed with exit code '.$exitCode.': '.$out.$err; } } parent::terminate(); + + if (!$this->interactive && isset($errorMessage)) { + throw new TransportException($errorMessage); + } } protected function getReadConnectionDescription(): string From ca6487e77643b3cf3574a4045e91e09625f5a16a Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 31 May 2024 16:33:22 +0200 Subject: [PATCH 57/61] Revert "minor #54653 Auto-close PRs on subtree-splits (nicolas-grekas)" This reverts commit 2c9352dd91ebaf37b8a3e3c26fd8e1306df2fb73, reversing changes made to 18c3e87f1512be2cc50e90235b144b13bc347258. --- .gitattributes | 1 - .github/sync-packages.php | 75 ------------------- .github/workflows/package-tests.yml | 7 -- src/Symfony/Bridge/Doctrine/.gitattributes | 3 +- .../Doctrine/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Bridge/Monolog/.gitattributes | 3 +- .../Monolog/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Bridge/PhpUnit/.gitattributes | 3 +- .../PhpUnit/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bridge/ProxyManager/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Bridge/Twig/.gitattributes | 3 +- .../Twig/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Bundle/DebugBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bundle/FrameworkBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bundle/SecurityBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Bundle/TwigBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bundle/WebProfilerBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Asset/.gitattributes | 3 +- .../Asset/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/BrowserKit/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Cache/.gitattributes | 3 +- .../Cache/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Config/.gitattributes | 3 +- .../Config/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Console/.gitattributes | 3 +- .../Console/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/CssSelector/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../DependencyInjection/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/DomCrawler/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Dotenv/.gitattributes | 3 +- .../Dotenv/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/ErrorHandler/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/EventDispatcher/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../ExpressionLanguage/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Filesystem/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Finder/.gitattributes | 3 +- .../Finder/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Form/.gitattributes | 3 +- .../Form/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/HttpClient/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/HttpFoundation/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/HttpKernel/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Inflector/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Intl/.gitattributes | 3 +- .../Intl/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Ldap/.gitattributes | 3 +- .../Ldap/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Lock/.gitattributes | 3 +- .../Lock/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Mailer/.gitattributes | 3 +- .../Mailer/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Amazon/.gitattributes | 3 +- .../Amazon/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Google/.gitattributes | 3 +- .../Google/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Mailchimp/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Mailgun/.gitattributes | 3 +- .../Mailgun/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Mailjet/.gitattributes | 3 +- .../Mailjet/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/OhMySmtp/.gitattributes | 3 +- .../OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Postmark/.gitattributes | 3 +- .../Postmark/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Sendgrid/.gitattributes | 3 +- .../Sendgrid/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Mailer/Bridge/Sendinblue/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Messenger/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Messenger/Bridge/AmazonSqs/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Messenger/Bridge/Amqp/.gitattributes | 3 +- .../Amqp/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bridge/Beanstalkd/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Messenger/Bridge/Doctrine/.gitattributes | 3 +- .../Doctrine/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Messenger/Bridge/Redis/.gitattributes | 3 +- .../Redis/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Mime/.gitattributes | 3 +- .../Mime/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Notifier/.gitattributes | 3 +- .../Notifier/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/AllMySms/.gitattributes | 3 +- .../AllMySms/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/AmazonSns/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Clickatell/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Discord/.gitattributes | 3 +- .../Discord/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Esendex/.gitattributes | 3 +- .../Esendex/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Expo/.gitattributes | 3 +- .../Expo/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/FakeChat/.gitattributes | 3 +- .../FakeChat/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/FakeSms/.gitattributes | 3 +- .../FakeSms/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Firebase/.gitattributes | 3 +- .../Firebase/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/FreeMobile/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/GatewayApi/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Gitter/.gitattributes | 3 +- .../Gitter/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/GoogleChat/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Infobip/.gitattributes | 3 +- .../Infobip/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Iqsms/.gitattributes | 3 +- .../Iqsms/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/LightSms/.gitattributes | 3 +- .../LightSms/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/LinkedIn/.gitattributes | 3 +- .../LinkedIn/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Mailjet/.gitattributes | 3 +- .../Mailjet/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Mattermost/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Mercure/.gitattributes | 3 +- .../Mercure/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bridge/MessageBird/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bridge/MessageMedia/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bridge/MicrosoftTeams/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Mobyt/.gitattributes | 3 +- .../Mobyt/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Nexmo/.gitattributes | 3 +- .../Nexmo/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Octopush/.gitattributes | 3 +- .../Octopush/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/OneSignal/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/OvhCloud/.gitattributes | 3 +- .../OvhCloud/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/RocketChat/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Sendinblue/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Sinch/.gitattributes | 3 +- .../Sinch/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Slack/.gitattributes | 3 +- .../Slack/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Sms77/.gitattributes | 3 +- .../Sms77/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/SmsBiuras/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Smsapi/.gitattributes | 3 +- .../Smsapi/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Smsc/.gitattributes | 3 +- .../Smsc/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/SpotHit/.gitattributes | 3 +- .../SpotHit/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Telegram/.gitattributes | 3 +- .../Telegram/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Telnyx/.gitattributes | 3 +- .../Telnyx/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/TurboSms/.gitattributes | 3 +- .../TurboSms/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Twilio/.gitattributes | 3 +- .../Twilio/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Vonage/.gitattributes | 3 +- .../Vonage/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Yunpian/.gitattributes | 3 +- .../Yunpian/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Notifier/Bridge/Zulip/.gitattributes | 3 +- .../Zulip/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/OptionsResolver/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/PasswordHasher/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Process/.gitattributes | 3 +- .../Process/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/PropertyAccess/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/PropertyInfo/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/RateLimiter/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Routing/.gitattributes | 3 +- .../Routing/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Runtime/.gitattributes | 3 +- .../Runtime/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Security/Core/.gitattributes | 3 +- .../Core/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Security/Csrf/.gitattributes | 3 +- .../Csrf/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Security/Guard/.gitattributes | 3 +- .../Guard/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Security/Http/.gitattributes | 3 +- .../Http/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Semaphore/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Serializer/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Stopwatch/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/String/.gitattributes | 3 +- .../String/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Templating/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Translation/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Translation/Bridge/Crowdin/.gitattributes | 3 +- .../Crowdin/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Translation/Bridge/Loco/.gitattributes | 3 +- .../Loco/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Bridge/Lokalise/.gitattributes | 3 +- .../Lokalise/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Uid/.gitattributes | 3 +- .../Uid/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/Validator/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/VarDumper/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Component/VarExporter/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/WebLink/.gitattributes | 3 +- .../WebLink/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Workflow/.gitattributes | 3 +- .../Workflow/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Component/Yaml/.gitattributes | 3 +- .../Yaml/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Contracts/.gitattributes | 1 - .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Contracts/Cache/.gitattributes | 1 - .../Cache/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Contracts/Deprecation/.gitattributes | 1 - .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Contracts/EventDispatcher/.gitattributes | 1 - .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Contracts/HttpClient/.gitattributes | 1 - .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- src/Symfony/Contracts/Service/.gitattributes | 1 - .../Service/.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- .../Contracts/Translation/.gitattributes | 1 - .../.github/PULL_REQUEST_TEMPLATE.md | 8 -- .../.github/workflows/check-subtree-split.yml | 37 --------- 390 files changed, 244 insertions(+), 6017 deletions(-) delete mode 100644 .github/sync-packages.php delete mode 100644 src/Symfony/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bridge/Doctrine/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bridge/Monolog/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bridge/Monolog/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bridge/PhpUnit/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bridge/PhpUnit/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bridge/ProxyManager/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bridge/ProxyManager/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bridge/Twig/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bridge/Twig/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bundle/DebugBundle/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bundle/DebugBundle/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bundle/FrameworkBundle/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bundle/FrameworkBundle/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bundle/SecurityBundle/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bundle/SecurityBundle/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bundle/TwigBundle/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bundle/TwigBundle/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Bundle/WebProfilerBundle/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Bundle/WebProfilerBundle/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Asset/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Asset/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/BrowserKit/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/BrowserKit/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Cache/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Cache/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Config/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Config/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Console/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Console/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/CssSelector/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/CssSelector/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/DependencyInjection/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/DependencyInjection/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/DomCrawler/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/DomCrawler/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Dotenv/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Dotenv/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/ErrorHandler/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/ErrorHandler/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/EventDispatcher/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/ExpressionLanguage/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/ExpressionLanguage/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Filesystem/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Filesystem/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Finder/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Finder/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Form/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Form/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/HttpClient/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/HttpClient/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/HttpFoundation/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/HttpFoundation/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/HttpKernel/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/HttpKernel/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Inflector/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Inflector/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Intl/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Intl/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Ldap/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Ldap/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Lock/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Lock/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Amazon/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Amazon/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Google/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Google/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Mailgun/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Mailgun/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Mailjet/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Postmark/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Postmark/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Messenger/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Messenger/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Messenger/Bridge/Amqp/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Messenger/Bridge/Amqp/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Messenger/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Messenger/Bridge/Doctrine/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Messenger/Bridge/Redis/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Messenger/Bridge/Redis/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Mime/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Mime/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/AllMySms/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/AllMySms/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Clickatell/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Clickatell/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Discord/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Discord/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Esendex/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Esendex/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Expo/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Expo/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/FakeChat/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/FakeChat/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/FakeSms/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/FakeSms/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Firebase/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Firebase/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Gitter/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Gitter/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Infobip/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Infobip/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Iqsms/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Iqsms/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/LightSms/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/LightSms/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mailjet/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mattermost/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mattermost/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mercure/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mercure/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/MessageBird/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/MessageBird/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mobyt/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Mobyt/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Nexmo/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Nexmo/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Octopush/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Octopush/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/OneSignal/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/OneSignal/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/RocketChat/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/RocketChat/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Sinch/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Sinch/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Slack/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Slack/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Sms77/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Sms77/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Smsapi/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Smsapi/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Smsc/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Smsc/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/SpotHit/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/SpotHit/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Telegram/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Telegram/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Telnyx/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Telnyx/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/TurboSms/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/TurboSms/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Vonage/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Vonage/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Yunpian/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Yunpian/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Notifier/Bridge/Zulip/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Notifier/Bridge/Zulip/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/OptionsResolver/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/OptionsResolver/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/PasswordHasher/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/PasswordHasher/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Process/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Process/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/PropertyAccess/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/PropertyAccess/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/PropertyInfo/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/PropertyInfo/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/RateLimiter/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/RateLimiter/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Routing/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Routing/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Runtime/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Runtime/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Security/Core/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Security/Core/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Security/Csrf/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Security/Csrf/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Security/Guard/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Security/Guard/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Security/Http/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Security/Http/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Semaphore/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Semaphore/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Serializer/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Serializer/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Stopwatch/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Stopwatch/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/String/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/String/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Templating/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Templating/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Translation/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Translation/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Translation/Bridge/Crowdin/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Translation/Bridge/Crowdin/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Translation/Bridge/Loco/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Translation/Bridge/Loco/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Translation/Bridge/Lokalise/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Translation/Bridge/Lokalise/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Uid/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Uid/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Validator/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Validator/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/VarDumper/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/VarDumper/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/VarExporter/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/VarExporter/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/WebLink/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/WebLink/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Workflow/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Workflow/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Component/Yaml/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Component/Yaml/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/.gitattributes delete mode 100644 src/Symfony/Contracts/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/Cache/.gitattributes delete mode 100644 src/Symfony/Contracts/Cache/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/Cache/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/Deprecation/.gitattributes delete mode 100644 src/Symfony/Contracts/Deprecation/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/Deprecation/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/EventDispatcher/.gitattributes delete mode 100644 src/Symfony/Contracts/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/EventDispatcher/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/HttpClient/.gitattributes delete mode 100644 src/Symfony/Contracts/HttpClient/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/HttpClient/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/Service/.gitattributes delete mode 100644 src/Symfony/Contracts/Service/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/Service/.github/workflows/check-subtree-split.yml delete mode 100644 src/Symfony/Contracts/Translation/.gitattributes delete mode 100644 src/Symfony/Contracts/Translation/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/Symfony/Contracts/Translation/.github/workflows/check-subtree-split.yml diff --git a/.gitattributes b/.gitattributes index cf8890eefbda8..d1570aff1cd79 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,4 +6,3 @@ /src/Symfony/Component/Runtime export-ignore /src/Symfony/Component/Translation/Bridge export-ignore /src/Symfony/Component/Intl/Resources/data/*/* linguist-generated=true -/.git* export-ignore diff --git a/.github/sync-packages.php b/.github/sync-packages.php deleted file mode 100644 index 3d056466016e9..0000000000000 --- a/.github/sync-packages.php +++ /dev/null @@ -1,75 +0,0 @@ - Date: Fri, 31 May 2024 21:52:15 +0200 Subject: [PATCH 58/61] Fix autoload configs to avoid warnings when building optimized autoloaders --- composer.json | 6 ++++-- src/Symfony/Bridge/PhpUnit/composer.json | 3 ++- src/Symfony/Component/Validator/composer.json | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index ba4ebe8ed6dff..1c53f27932fc1 100644 --- a/composer.json +++ b/composer.json @@ -176,7 +176,8 @@ "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", "Symfony\\Bundle\\": "src/Symfony/Bundle/", - "Symfony\\Component\\": "src/Symfony/Component/" + "Symfony\\Component\\": "src/Symfony/Component/", + "Symfony\\Runtime\\Symfony\\Component\\": "src/Symfony/Component/Runtime/Internal/" }, "files": [ "src/Symfony/Component/String/Resources/functions.php" @@ -185,7 +186,8 @@ "src/Symfony/Component/Intl/Resources/stubs" ], "exclude-from-classmap": [ - "**/Tests/" + "**/Tests/", + "**/bin/" ] }, "autoload-dev": { diff --git a/src/Symfony/Bridge/PhpUnit/composer.json b/src/Symfony/Bridge/PhpUnit/composer.json index 9627d2b40c12c..60e3e81c759f1 100644 --- a/src/Symfony/Bridge/PhpUnit/composer.json +++ b/src/Symfony/Bridge/PhpUnit/composer.json @@ -34,7 +34,8 @@ "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Bridge\\PhpUnit\\": "" }, "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/bin/" ] }, "bin": [ diff --git a/src/Symfony/Component/Validator/composer.json b/src/Symfony/Component/Validator/composer.json index 5cc9b399f1fb5..19a27b3333a81 100644 --- a/src/Symfony/Component/Validator/composer.json +++ b/src/Symfony/Component/Validator/composer.json @@ -72,7 +72,8 @@ "autoload": { "psr-4": { "Symfony\\Component\\Validator\\": "" }, "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/Resources/bin/" ] }, "minimum-stability": "dev" From f76d35a2a007177841bf430f682a9bc9db4bf3a6 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 2 Jun 2024 17:52:57 +0200 Subject: [PATCH 59/61] Update CHANGELOG for 5.4.40 --- CHANGELOG-5.4.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/CHANGELOG-5.4.md b/CHANGELOG-5.4.md index 4675182aec6dd..3e2bcd6d8360d 100644 --- a/CHANGELOG-5.4.md +++ b/CHANGELOG-5.4.md @@ -7,6 +7,38 @@ in 5.4 minor versions. To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v5.4.0...v5.4.1 +* 5.4.40 (2024-06-02) + + * bug #57275 Fix autoload configs to avoid warnings when building optimized autoloaders (Seldaek) + * bug #54572 [Mailer] Fix sendmail transport failure handling and interactive mode (bobvandevijver) + * bug #57228 [Mime] fix PHP 7 compatibility (xabbuh) + * bug #57065 [Mime] Fixed `Mime\Message::ensureValidity()` when a required header is set, but has an empty body (rhertogh) + * bug #57109 [Notifier] keep boolean options when their value is false (xabbuh) + * bug #54694 [PropertyInfo] Update DoctrineExtractor for new DBAL 4 BIGINT type (llupa) + * bug #54913 [Serializer] Fix CurrentType for missing property (ElisDN) + * bug #54797 [PhpUnitBridge] Fix `DeprecationErrorHandler` with PhpUnit 10 (HypeMC) + * bug #54878 [Filesystem] Fix dumpFile `stat failed` error hitting custom handler (acoulton) + * bug #54924 [Validator] IBAN Check digits should always between 2 and 98 (karstennilsen) + * bug #54919 [ErrorHandler] Do not call xdebug_get_function_stack() with xdebug >= 3.0 when not in develop mode (fmata) + * bug #54910 [HttpFoundation]  filter out empty HTTP header parts (xabbuh) + * bug #54888 [String] Fix folded in compat mode (smnandre) + * bug #54860 [HttpClient] Revert fixing curl default options (alexandre-daubois) + * bug #54839 Fix exception thrown during `LDAP_MODIFY_BATCH_REMOVE_ALL` batch operations (phasdev) + * bug #54834 [Validator] Check `Locale` class existence before using it (alexandre-daubois) + * bug #54830 [HttpClient] Fix cURL default options for PHP 8.4 (alexandre-daubois) + * bug #54828 [Serializer] Fix `GetSetMethodNormalizer` not working with setters with optional args (HypeMC) + * bug #54816 [Cache] Fix support for predis/predis:^2.0 (mfettig) + * bug #54804 [Serializer] separate the property info and write info extractors (xabbuh) + * bug #54800 [WebProfilerBundle] fix compatibility with Twig 3.10 (xabbuh) + * bug #54794 [Strings][EnglishInflector] Fix incorrect pluralisation of 'Album' (timporter) + * bug #54714 [Serializer] convert empty CSV header names into numeric keys (xabbuh) + * bug #54775 [Messenger] accept AbstractAsset instances when filtering schemas (xabbuh) + * bug #54759 [Filesystem] better distinguish URL schemes and Windows drive letters (xabbuh) + * bug #54791 [FrameworkBundle] move wiring of the property info extractor to the ObjectNormalizer (xabbuh) + * bug #54760 [Validator] handle union and intersection types for cascaded validations (xabbuh) + * bug #54776 [Cache] fix: remove unwanted cast to int (Arend Hummeling) + * bug #54700 [Dotenv] show overridden vars too when running debug:dotenv (HMRDevil) + * 5.4.39 (2024-04-29) * bug #54751 [Validator]  detect wrong e-mail validation modes (xabbuh) From c2ec36efba27373a52bf64b7eb3dc8c10400d125 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 2 Jun 2024 17:53:03 +0200 Subject: [PATCH 60/61] Update CONTRIBUTORS for 5.4.40 --- CONTRIBUTORS.md | 90 +++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 2c65442650d09..92dac23ccbd1c 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -13,8 +13,8 @@ The Symfony Connect username in parenthesis allows to get more information - Tobias Schultze (tobion) - Grégoire Pineau (lyrixx) - Thomas Calvet (fancyweb) - - Christophe Coevoet (stof) - Alexandre Daubois (alexandre-daubois) + - Christophe Coevoet (stof) - Wouter de Jong (wouterj) - Jordi Boggiano (seldaek) - Maxime Steinhausser (ogizanagi) @@ -35,9 +35,9 @@ The Symfony Connect username in parenthesis allows to get more information - Jérôme Tamarelle (gromnan) - Samuel ROZE (sroze) - Antoine Lamirault (alamirault) + - HypeMC (hypemc) - Pascal Borreli (pborreli) - Romain Neutron - - HypeMC (hypemc) - Joseph Bielawski (stloyd) - Drak (drak) - Abdellatif Ait boudad (aitboudad) @@ -61,6 +61,7 @@ The Symfony Connect username in parenthesis allows to get more information - William DURAND - ornicar - Dany Maillard (maidmaid) + - Simon André (simonandre) - Eriksen Costa - Diego Saint Esteben (dosten) - stealth35 ‏ (stealth35) @@ -69,20 +70,19 @@ The Symfony Connect username in parenthesis allows to get more information - Francis Besset (francisbesset) - Titouan Galopin (tgalopin) - Pierre du Plessis (pierredup) - - Simon André (simonandre) - David Maicher (dmaicher) - Bulat Shakirzyanov (avalanche123) - Iltar van der Berg - Miha Vrhovnik (mvrhov) + - Tomasz Kowalczyk (thunderer) - Gary PEGEOT (gary-p) + - Mathias Arlaud (mtarld) - Saša Stamenković (umpirsky) - Allison Guilhem (a_guilhem) - Mathieu Piot (mpiot) - Mathieu Santostefano (welcomattic) - Alexander Schranz (alexander-schranz) - Vasilij Duško (staff) - - Tomasz Kowalczyk (thunderer) - - Mathias Arlaud (mtarld) - Sarah Khalil (saro0h) - Laurent VOULLEMIER (lvo) - Konstantin Kudryashov (everzet) @@ -95,8 +95,8 @@ The Symfony Connect username in parenthesis allows to get more information - Dariusz Ruminski - Henrik Bjørnskov (henrikbjorn) - David Buchmann (dbu) - - Andrej Hudec (pulzarraider) - Ruud Kamphuis (ruudk) + - Andrej Hudec (pulzarraider) - Jáchym Toušek (enumag) - Christian Raue - Eric Clemmons (ericclemmons) @@ -162,9 +162,9 @@ The Symfony Connect username in parenthesis allows to get more information - Teoh Han Hui (teohhanhui) - Przemysław Bogusz (przemyslaw-bogusz) - Colin Frei + - Nicolas Philippe (nikophil) - excelwebzone - Paráda József (paradajozsef) - - Nicolas Philippe (nikophil) - Baptiste Clavié (talus) - Alexander Schwenn (xelaris) - Fabien Pennequin (fabienpennequin) @@ -181,24 +181,27 @@ The Symfony Connect username in parenthesis allows to get more information - François-Xavier de Guillebon (de-gui_f) - Maximilian Beckers (maxbeckers) - noniagriconomie + - Valtteri R (valtzu) - Eric GELOEN (gelo) - Gabriel Caruso - Stefano Sala (stefano.sala) - Ion Bazan (ionbazan) + - Niels Keurentjes (curry684) - OGAWA Katsuhiro (fivestar) - Jhonny Lidfors (jhonne) + - Dāvis Zālītis (k0d3r1s) - Juti Noppornpitak (shiroyuki) - Gregor Harlan (gharlan) + - Hugo Alliaume (kocal) - Anthony MARTIN - Andreas Schempp (aschempp) - Sebastian Hörl (blogsh) - Tigran Azatyan (tigranazatyan) + - Florent Mata (fmata) - Christopher Hertel (chertel) - Jonathan Scheiber (jmsche) - Daniel Gomes (danielcsgomes) - Hidenori Goto (hidenorigoto) - - Niels Keurentjes (curry684) - - Dāvis Zālītis (k0d3r1s) - Arnaud Kleinpeter (nanocom) - Guilherme Blanco (guilhermeblanco) - Saif Eddin Gmati (azjezz) @@ -207,10 +210,7 @@ The Symfony Connect username in parenthesis allows to get more information - SpacePossum - Richard van Laak (rvanlaak) - Andreas Braun - - Hugo Alliaume (kocal) - - Valtteri R (valtzu) - Pablo Godel (pgodel) - - Florent Mata (fmata) - Alessandro Chitolina (alekitto) - Rafael Dohms (rdohms) - Roman Martinuk (a2a4) @@ -220,6 +220,7 @@ The Symfony Connect username in parenthesis allows to get more information - Jérôme Parmentier (lctrs) - Ahmed TAILOULOUTE (ahmedtai) - Simon Berger + - soyuka - Jérémy Derussé - Matthieu Napoli (mnapoli) - Tomas Votruba (tomas_votruba) @@ -240,6 +241,7 @@ The Symfony Connect username in parenthesis allows to get more information - Fabien Bourigault (fbourigault) - Olivier Dolbeau (odolbeau) - Rouven Weßling (realityking) + - Bob van de Vijver (bobvandevijver) - Daniel Burger - Ben Davies (bendavies) - YaFou @@ -254,6 +256,7 @@ The Symfony Connect username in parenthesis allows to get more information - Matthieu Ouellette-Vachon (maoueh) - Michał Pipa (michal.pipa) - Dawid Nowak + - Philipp Wahala (hifi) - Jannik Zschiesche - Amal Raghav (kertz) - Jonathan Ingram @@ -270,7 +273,6 @@ The Symfony Connect username in parenthesis allows to get more information - Sébastien Alfaiate (seb33300) - James Halsall (jaitsu) - Christian Scheb - - Bob van de Vijver (bobvandevijver) - Guillaume (guill) - Mikael Pajunen - Warnar Boekkooi (boekkooi) @@ -298,7 +300,7 @@ The Symfony Connect username in parenthesis allows to get more information - Baptiste Leduc (korbeil) - Karoly Gossler (connorhu) - Timo Bakx (timobakx) - - soyuka + - Giorgio Premi - Ruben Gonzalez (rubenrua) - Benjamin Dulau (dbenjamin) - Markus Fasselt (digilist) @@ -317,9 +319,9 @@ The Symfony Connect username in parenthesis allows to get more information - sun (sun) - Larry Garfield (crell) - Leo Feyer - - Philipp Wahala (hifi) - Victor Bocharsky (bocharsky_bw) - Nikolay Labinskiy (e-moe) + - Asis Pattisahusiwa - Martin Schuhfuß (usefulthink) - apetitpa - Guilliam Xavier @@ -334,7 +336,7 @@ The Symfony Connect username in parenthesis allows to get more information - Nate Wiebe (natewiebe13) - Joe Bennett (kralos) - Leszek Prabucki (l3l0) - - Giorgio Premi + - Wojciech Kania - Thomas Lallement (raziel057) - Yassine Guedidi (yguedidi) - François Zaninotto (fzaninotto) @@ -399,16 +401,17 @@ The Symfony Connect username in parenthesis allows to get more information - Artem Lopata - Patrick McDougle (patrick-mcdougle) - Marc Weistroff (futurecat) + - Michał (bambucha15) - Danny Berger (dpb587) - Alif Rachmawadi - Anton Chernikov (anton_ch1989) - Pierre-Yves Lebecq (pylebecq) - Benjamin Leveque (benji07) - Jordan Samouh (jordansamouh) - - Wojciech Kania - Sullivan SENECHAL (soullivaneuh) - Loick Piera (pyrech) - Uwe Jäger (uwej711) + - javaDeveloperKid - W0rma - Lynn van der Berg (kjarli) - Michaël Perrin (michael.perrin) @@ -418,11 +421,11 @@ The Symfony Connect username in parenthesis allows to get more information - Marvin Petker - GordonsLondon - Ray - - Asis Pattisahusiwa - Philipp Cordes (corphi) - Chekote - Thomas Adam - Evert Harmeling (evertharmeling) + - Anderson Müller - jdhoek - Jurica Vlahoviček (vjurica) - Bob den Otter (bopp) @@ -467,9 +470,9 @@ The Symfony Connect username in parenthesis allows to get more information - Iker Ibarguren (ikerib) - Michael Holm (hollo) - Blanchon Vincent (blanchonvincent) - - Michał (bambucha15) - Christian Schmidt - Ben Hakim + - Stiven Llupa (sllupa) - Marco Petersen (ocrampete16) - Bohan Yang (brentybh) - Vilius Grigaliūnas @@ -478,7 +481,6 @@ The Symfony Connect username in parenthesis allows to get more information - Thomas Bisignani (toma) - Florian Klein (docteurklein) - Damien Alexandre (damienalexandre) - - javaDeveloperKid - Manuel Kießling (manuelkiessling) - Alexey Kopytko (sanmai) - Warxcell (warxcell) @@ -504,7 +506,6 @@ The Symfony Connect username in parenthesis allows to get more information - Jan Decavele (jandc) - Gustavo Piltcher - Lee Rowlands - - Anderson Müller - Stepan Tanasiychuk (stfalcon) - Ivan Kurnosov - Tiago Ribeiro (fixe) @@ -540,6 +541,7 @@ The Symfony Connect username in parenthesis allows to get more information - Francesco Levorato - Vitaliy Zakharov (zakharovvi) - Tobias Sjösten (tobiassjosten) + - Michael Hirschler (mvhirsch) - Gyula Sallai (salla) - Hendrik Luup (hluup) - Inal DJAFAR (inalgnu) @@ -547,6 +549,7 @@ The Symfony Connect username in parenthesis allows to get more information - Martin Herndl (herndlm) - Dmytro Borysovskyi (dmytr0) - Johann Pardanaud + - Kai Dederichs - Pavel Kirpitsov (pavel-kirpichyov) - Robert Meijers - Artur Eshenbrener @@ -561,7 +564,6 @@ The Symfony Connect username in parenthesis allows to get more information - FORT Pierre-Louis (plfort) - Terje Bråten - Gonzalo Vilaseca (gonzalovilaseca) - - Stiven Llupa (sllupa) - Tarmo Leppänen (tarlepp) - Jakub Kucharovic (jkucharovic) - Daniel STANCU @@ -692,7 +694,6 @@ The Symfony Connect username in parenthesis allows to get more information - Desjardins Jérôme (jewome62) - Arturs Vonda - Matthew Smeets - - Michael Hirschler (mvhirsch) - Toni Rudolf (toooni) - Stefan Gehrig (sgehrig) - vagrant @@ -705,6 +706,7 @@ The Symfony Connect username in parenthesis allows to get more information - Restless-ET - Vlad Gregurco (vgregurco) - Artem Stepin (astepin) + - Jérémy DECOOL (jdecool) - Boris Vujicic (boris.vujicic) - Dries Vints - Judicaël RUFFIEUX (axanagor) @@ -722,7 +724,6 @@ The Symfony Connect username in parenthesis allows to get more information - Vitaliy Tverdokhlib (vitaliytv) - Ariel Ferrandini (aferrandini) - BASAK Semih (itsemih) - - Kai Dederichs - Dirk Pahl (dirkaholic) - Cédric Lombardot (cedriclombardot) - Jérémy REYNAUD (babeuloula) @@ -749,6 +750,7 @@ The Symfony Connect username in parenthesis allows to get more information - Roberto Espinoza (respinoza) - Pierre Rineau - Soufian EZ ZANTAR (soezz) + - Ivan Mezinov - Marek Zajac - Adam Harvey - ilyes kooli (skafandri) @@ -770,6 +772,7 @@ The Symfony Connect username in parenthesis allows to get more information - Andrey Astakhov (aast) - ReenExe - Fabian Lange (codingfabian) + - kylekatarnls (kylekatarnls) - Yoshio HANAWA - Jan van Thoor (janvt) - Joshua Nye @@ -1012,6 +1015,7 @@ The Symfony Connect username in parenthesis allows to get more information - Martins Sipenko - Guilherme Augusto Henschel - Rostyslav Kinash + - Christophe V. (cvergne) - Mardari Dorel (dorumd) - Daisuke Ohata - Vincent Simonin @@ -1021,6 +1025,7 @@ The Symfony Connect username in parenthesis allows to get more information - Andy Palmer (andyexeter) - Andrew Neil Forster (krciga22) - Stefan Warman (warmans) + - Faizan Akram Dar (faizanakram) - Tristan Maindron (tmaindron) - Behnoush Norouzali (behnoush) - Marko H. Tamminen (gzumba) @@ -1054,6 +1059,7 @@ The Symfony Connect username in parenthesis allows to get more information - Kevin SCHNEKENBURGER - Fabien Salles (blacked) - Andreas Erhard (andaris) + - alexpozzi - Michael Devery (mickadoo) - Gregor Nathanael Meyer (spackmat) - Antoine Corcy @@ -1171,15 +1177,16 @@ The Symfony Connect username in parenthesis allows to get more information - Alex Xandra Albert Sim - Sergey Yastrebov - Carson Full (carsonfull) - - kylekatarnls (kylekatarnls) - Steve Grunwell - Yuen-Chi Lian - Mathias Brodala (mbrodala) - Robert Fischer (sandoba) - Tarjei Huse (tarjei) + - mfettig - Besnik Br - Issam Raouf (iraouf) - Simon Mönch + - Sherin Bloemendaal - Jose Gonzalez - Jonathan (jlslew) - Claudio Zizza @@ -1188,6 +1195,7 @@ The Symfony Connect username in parenthesis allows to get more information - Christian Stoller (naitsirch) - Dave Marshall (davedevelopment) - Jakub Kulhan (jakubkulhan) + - Paweł Niedzielski (steveb) - Shaharia Azam - avorobiev - Gerben Oolbekkink @@ -1226,7 +1234,6 @@ The Symfony Connect username in parenthesis allows to get more information - Edvin Hultberg - shubhalgupta - Felds Liscia (felds) - - Jérémy DECOOL (jdecool) - Sergey Panteleev - Alexander Grimalovsky (flying) - Andrew Hilobok (hilobok) @@ -1276,6 +1283,7 @@ The Symfony Connect username in parenthesis allows to get more information - Cyril Pascal (paxal) - Pedro Casado (pdr33n) - Jayson Xu (superjavason) + - acoulton - DemigodCode - fago - Jan Prieser @@ -1453,6 +1461,7 @@ The Symfony Connect username in parenthesis allows to get more information - Robert Gruendler (pulse00) - Sebastian Paczkowski (sebpacz) - Simon Terrien (sterrien) + - Stephan Vierkant (svierkant) - Benoît Merlet (trompette) - Brad Jones - datibbaw @@ -1470,6 +1479,7 @@ The Symfony Connect username in parenthesis allows to get more information - Baptiste Leduc (bleduc) - soyuka - Patrick Kaufmann + - Ismail Özgün Turan (dadeather) - Mickael Perraud - Anton Dyshkant - Rafael Villa Verde @@ -1488,6 +1498,7 @@ The Symfony Connect username in parenthesis allows to get more information - Stewart Malik - Renan Taranto (renan-taranto) - Ninos Ego + - Samael tomas - Stefan Graupner (efrane) - Gemorroj (gemorroj) - Adrien Chinour @@ -1652,6 +1663,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ksaveras Šakys (xawiers) - Shaun Simmons - Ariel J. Birnbaum + - Yannick - Patrick Luca Fazzi (ap3ir0n) - Danijel Obradović - Pablo Borowicz @@ -1710,6 +1722,7 @@ The Symfony Connect username in parenthesis allows to get more information - Łukasz Chruściel (lchrusciel) - Jan Vernieuwe (vernija) - Antanas Arvasevicius + - Adam Kiss - Pierre Dudoret - Michal Trojanowski - Thomas @@ -1790,6 +1803,7 @@ The Symfony Connect username in parenthesis allows to get more information - Eddie Abou-Jaoude (eddiejaoude) - Haritz Iturbe (hizai) - Nerijus Arlauskas (nercury) + - Rutger Hertogh - Diego Sapriza - Joan Cruz - inspiran @@ -1854,6 +1868,7 @@ The Symfony Connect username in parenthesis allows to get more information - Thomason, James - Dario Savella - Gordienko Vladislav + - Joas Schilling - Ener-Getick - Moza Bogdan (bogdan_moza) - johan Vlaar @@ -1913,6 +1928,7 @@ The Symfony Connect username in parenthesis allows to get more information - Takashi Kanemoto (ttskch) - Aleksei Lebedev - dlorek + - Oriol Viñals - Stuart Fyfe - Jason Schilling (chapterjason) - David de Boer (ddeboer) @@ -1963,7 +1979,6 @@ The Symfony Connect username in parenthesis allows to get more information - Ismail Turan - error56 - Felicitus - - alexpozzi - Jorge Vahldick (jvahldick) - Krzysztof Przybyszewski (kprzybyszewski) - Vladimir Mantulo (mantulo) @@ -2057,7 +2072,6 @@ The Symfony Connect username in parenthesis allows to get more information - Adam Wójs (awojs) - Justin Reherman (jreherman) - Rubén Calvo (rubencm) - - Paweł Niedzielski (steveb) - Abdul.Mohsen B. A. A - Cédric Girard - Peter Jaap Blaakmeer @@ -2242,6 +2256,7 @@ The Symfony Connect username in parenthesis allows to get more information - Luis Galeas - Bogdan Scordaliu - Martin Pärtel + - PHAS Developer - Daniel Rotter (danrot) - Frédéric Bouchery (fbouchery) - Jacek Kobus (jackks) @@ -2260,7 +2275,6 @@ The Symfony Connect username in parenthesis allows to get more information - Jeroen de Graaf - Ulrik McArdle - BiaDd - - mfettig - Oleksii Bulba - Ramon Cuñat - mboultoureau @@ -2317,6 +2331,7 @@ The Symfony Connect username in parenthesis allows to get more information - Starfox64 - Ivo Valchev - Thomas Hanke + - ffd000 - Daniel Tschinder - Thomas Durand - Arnaud CHASSEUX @@ -2330,7 +2345,6 @@ The Symfony Connect username in parenthesis allows to get more information - Rafał Muszyński (rafmus90) - Sébastien Decrême (sebdec) - Timothy Anido (xanido) - - acoulton - Mara Blaga - Rick Prent - skalpa @@ -2398,6 +2412,7 @@ The Symfony Connect username in parenthesis allows to get more information - Andrea Ruggiero (pupax) - Stan Jansen (stanjan) - Maxwell Vandervelde + - karstennilsen - kaywalker - Sebastian Ionescu - Robert Kopera @@ -2448,6 +2463,7 @@ The Symfony Connect username in parenthesis allows to get more information - tadas - Bastien Picharles - Kirk Madera + - Linas Ramanauskas - mamazu - Keith Maika - izenin @@ -2460,6 +2476,7 @@ The Symfony Connect username in parenthesis allows to get more information - Victor Garcia - Juan Mrad - Denis Yuzhanin + - k-sahara - Flavian Sierk - Rik van der Heijden - knezmilos13 @@ -2520,6 +2537,7 @@ The Symfony Connect username in parenthesis allows to get more information - tpetry - JustDylan23 - Juraj Surman + - ywisax - Martin Eckhardt - natechicago - Victor @@ -2572,6 +2590,7 @@ The Symfony Connect username in parenthesis allows to get more information - catch - aetxebeste - Roberto Guido + - ElisDN - roromix - Vitali Tsyrkin - Juga Paazmaya @@ -2953,6 +2972,7 @@ The Symfony Connect username in parenthesis allows to get more information - Patrizio Bekerle - Tom Maguire - Mateusz Lerczak + - Tim Porter - Richard Quadling - Rainrider - David Zuelke @@ -3063,6 +3083,7 @@ The Symfony Connect username in parenthesis allows to get more information - dakur - florian-michael-mast - tourze + - sam-bee - Vlad Dumitrache - wetternest - Erik van Wingerden @@ -3076,6 +3097,7 @@ The Symfony Connect username in parenthesis allows to get more information - Matheus Gontijo - Gerrit Drost - Linnaea Von Lavia + - Andrew Brown - Javan Eskander - Lenar Lõhmus - Cristian Gonzalez @@ -3307,6 +3329,7 @@ The Symfony Connect username in parenthesis allows to get more information - Karim Miladi - Michael Genereux - Greg Korba + - Camille Islasse - patrick-mcdougle - Tyler Stroud - Dariusz Czech @@ -3347,12 +3370,14 @@ The Symfony Connect username in parenthesis allows to get more information - wiseguy1394 - adam-mospan - Steve Hyde + - AbdelatifAitBara - nerdgod - Sam Williams - Ettore Del Negro - Guillaume Aveline - Adrian Philipp - James Michael DuPont + - Simone Ruggieri - Markus Tacker - Tomáš Votruba - Kasperki @@ -3420,6 +3445,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ayke Halder - Thorsten Hallwas - Brian Freytag + - Arend Hummeling - Marco Pfeiffer - Alex Nostadt - Michael Squires @@ -3502,6 +3528,7 @@ The Symfony Connect username in parenthesis allows to get more information - Yendric - ADmad - Nicolas Roudaire + - Marc Jauvin - Matthias Meyer - Abdouni Karim (abdounikarim) - Temuri Takalandze (abgeo) @@ -3544,7 +3571,6 @@ The Symfony Connect username in parenthesis allows to get more information - Elliot Anderson (elliot) - Erwan Nader (ernadoo) - Fabien D. (fabd) - - Faizan Akram Dar (faizanakram) - Carsten Eilers (fnc) - Sorin Gitlan (forapathy) - Fraller Balázs (fracsi) @@ -3626,7 +3652,6 @@ The Symfony Connect username in parenthesis allows to get more information - Christopher Georg (sky-chris) - Volker (skydiablo) - Julien Sanchez (sumbobyboys) - - Stephan Vierkant (svierkant) - Ron Gähler (t-ronx) - Guillermo Gisinger (t3chn0r) - Tom Newby (tomnewbyau) @@ -3637,6 +3662,7 @@ The Symfony Connect username in parenthesis allows to get more information - Moritz Kraft (userfriendly) - Víctor Mateo (victormateo) - Vincent MOULENE (vints24) + - Verlhac Gaëtan (viviengaetan) - David Grüner (vworldat) - Eugene Babushkin (warl) - Wouter Sioen (wouter_sioen) From a1afee6444ccaed1e9c9a1d91d6e5b321f679b94 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 2 Jun 2024 17:53:08 +0200 Subject: [PATCH 61/61] Update VERSION for 5.4.40 --- src/Symfony/Component/HttpKernel/Kernel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index c51f96e861e40..d25647c87d157 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -78,12 +78,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static $freshCache = []; - public const VERSION = '5.4.40-DEV'; + public const VERSION = '5.4.40'; public const VERSION_ID = 50440; public const MAJOR_VERSION = 5; public const MINOR_VERSION = 4; public const RELEASE_VERSION = 40; - public const EXTRA_VERSION = 'DEV'; + public const EXTRA_VERSION = ''; public const END_OF_MAINTENANCE = '11/2024'; public const END_OF_LIFE = '11/2025'; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy