diff --git a/CHANGELOG-6.1.md b/CHANGELOG-6.1.md index e8cacc83e6211..c6f96fbf15753 100644 --- a/CHANGELOG-6.1.md +++ b/CHANGELOG-6.1.md @@ -7,6 +7,33 @@ in 6.1 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/v6.1.0...v6.1.1 +* 6.1.0-BETA2 (2022-04-27) + + * feature #45282 [Serializer] Support canners in object normalizer (rmikalkenas) + * feature #46157 [Routing] Remove variadic constructor signature (wouterj) + * bug #46154 [Mailer] Restore X-Transport after failure (zenas1210) + * bug #46178 [DependencyInjection] Properly declare #[When] as allowed on functions (nicolas-grekas) + * bug #46171 [VarDumper] Fix dumping floats on PHP8 (nicolas-grekas) + * bug #46170 Fix dumping enums on PHP 8.2 (nicolas-grekas) + * bug #46143 [Cache] Prevent fatal errors on php 8 when running concurrently with TagAwareAdapter v6.1 (sbelyshkin) + * bug #45896 [Cache] Optimize caching of tags (sbelyshkin) + * bug #46149 Modify processing of uploaded files to be compatible with PHP 8.1 (p-golovin) + * feature #46112 [DependencyInjection] Rename `#[InnerService]` to `#[MapDecorated]` (chalasr) + * bug #46125 [FrameworkBundle] Always add CacheCollectorPass (fancyweb) + * feature #45989 [FrameworkBundle] deprecate not setting http_method_override (Tobion) + * feature #46042 [Routing] Add params variable to condition expression (HypeMC) + * feature #46115 [FrameworkBundle] Add support for route attributes in kernel controller methods (dunglas) + * bug #46121 Fix "Notice: Undefined index: headers" in messenger with Oracle (rjd22) + * feature #45834 [DependencyInjection] add AsDecorator class attribute and InnerService parameter attribute (Jean-Beru) + * bug #46106 [String] Fix ansi escape sequences regex (fancyweb) + * feature #46056 [PropertyInfo] Add support for promoted properties in PhpStanExtractor (simPod) + * feature #46047 [Notifier] smsapi - send messages in test mode (Patryk Kozłowski) + * bug #46097 [Routing] fix router base url when default uri has trailing slash (Tobion) + * feature #46052 [TwigBundle] Deprecate option "autoescape", use "autoescape_service[_method]" instead (nicolas-grekas) + * bug #46054 [SecurityBundle] Use config's secret in remember-me signatures (jderusse) + * feature #45528 [Routing] Add Requirement, a collection of universal regular-expressions constants to use as route parameter requirements (fancyweb) + * bug #46051 Don't replace symfony/security-guard (derrabus) + * 6.1.0-BETA1 (2022-04-15) * feature #44798 [FrameworkBundle] Integrate the HtmlSanitizer component (tgalopin, wouterj) diff --git a/UPGRADE-6.1.md b/UPGRADE-6.1.md index 1b66c0ece04dc..a3811cb502b9d 100644 --- a/UPGRADE-6.1.md +++ b/UPGRADE-6.1.md @@ -25,12 +25,18 @@ FrameworkBundle * Deprecate the `reset_on_message` config option. It can be set to `true` only and does nothing now. To prevent services resetting after each message the "--no-reset" option in "messenger:consume" command can be set + * Deprecate not setting the `http_method_override` config option. The default value will change to `false` in 7.0. HttpKernel ---------- * Deprecate StreamedResponseListener, it's not needed anymore +Routing +------- + + * Add argument `$routeParameters` to `UrlMatcher::handleRouteRequirements()` + Serializer ---------- diff --git a/composer.json b/composer.json index 87dca514ffa16..085cdcdbd9e13 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ "ext-xml": "*", "friendsofphp/proxy-manager-lts": "^1.0.2", "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^2", + "doctrine/persistence": "^2|^3", "twig/twig": "^2.13|^3.0.4", "psr/cache": "^2.0|^3.0", "psr/container": "^1.1|^2.0", @@ -94,7 +94,6 @@ "symfony/security-bundle": "self.version", "symfony/security-core": "self.version", "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", "symfony/security-http": "self.version", "symfony/semaphore": "self.version", "symfony/serializer": "self.version", diff --git a/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php b/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php index 7acc2e8e96e95..c5318414dbf68 100644 --- a/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php +++ b/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php @@ -29,22 +29,20 @@ */ class DoctrineDataCollector extends DataCollector { - private ManagerRegistry $registry; private array $connections; private array $managers; - private ?DebugDataHolder $debugDataHolder; /** * @var array */ private array $loggers = []; - public function __construct(ManagerRegistry $registry, DebugDataHolder $debugDataHolder = null) - { - $this->registry = $registry; + public function __construct( + private ManagerRegistry $registry, + private ?DebugDataHolder $debugDataHolder = null, + ) { $this->connections = $registry->getConnectionNames(); $this->managers = $registry->getManagerNames(); - $this->debugDataHolder = $debugDataHolder; } /** diff --git a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Connection.php b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Connection.php index d085b0af0e3de..27eb35c004ab4 100644 --- a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Connection.php +++ b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Connection.php @@ -24,18 +24,15 @@ */ final class Connection extends AbstractConnectionMiddleware { - private $nestingLevel = 0; - private $debugDataHolder; - private $stopwatch; - private $connectionName; - - public function __construct(ConnectionInterface $connection, DebugDataHolder $debugDataHolder, ?Stopwatch $stopwatch, string $connectionName) - { + private int $nestingLevel = 0; + + public function __construct( + ConnectionInterface $connection, + private DebugDataHolder $debugDataHolder, + private ?Stopwatch $stopwatch, + private string $connectionName, + ) { parent::__construct($connection); - - $this->debugDataHolder = $debugDataHolder; - $this->stopwatch = $stopwatch; - $this->connectionName = $connectionName; } public function prepare(string $sql): DriverStatement @@ -44,7 +41,7 @@ public function prepare(string $sql): DriverStatement parent::prepare($sql), $this->debugDataHolder, $this->connectionName, - $sql + $sql, ); } @@ -52,20 +49,14 @@ public function query(string $sql): Result { $this->debugDataHolder->addQuery($this->connectionName, $query = new Query($sql)); - if (null !== $this->stopwatch) { - $this->stopwatch->start('doctrine', 'doctrine'); - } - + $this->stopwatch?->start('doctrine', 'doctrine'); $query->start(); try { $result = parent::query($sql); } finally { $query->stop(); - - if (null !== $this->stopwatch) { - $this->stopwatch->stop('doctrine'); - } + $this->stopwatch?->stop('doctrine'); } return $result; @@ -75,20 +66,14 @@ public function exec(string $sql): int { $this->debugDataHolder->addQuery($this->connectionName, $query = new Query($sql)); - if (null !== $this->stopwatch) { - $this->stopwatch->start('doctrine', 'doctrine'); - } - + $this->stopwatch?->start('doctrine', 'doctrine'); $query->start(); try { $affectedRows = parent::exec($sql); } finally { $query->stop(); - - if (null !== $this->stopwatch) { - $this->stopwatch->stop('doctrine'); - } + $this->stopwatch?->stop('doctrine'); } return $affectedRows; @@ -101,24 +86,14 @@ public function beginTransaction(): bool $this->debugDataHolder->addQuery($this->connectionName, $query = new Query('"START TRANSACTION"')); } - if (null !== $this->stopwatch) { - $this->stopwatch->start('doctrine', 'doctrine'); - } - - if (null !== $query) { - $query->start(); - } + $this->stopwatch?->start('doctrine', 'doctrine'); + $query?->start(); try { $ret = parent::beginTransaction(); } finally { - if (null !== $query) { - $query->stop(); - } - - if (null !== $this->stopwatch) { - $this->stopwatch->stop('doctrine'); - } + $query?->stop(); + $this->stopwatch?->stop('doctrine'); } return $ret; @@ -131,24 +106,14 @@ public function commit(): bool $this->debugDataHolder->addQuery($this->connectionName, $query = new Query('"COMMIT"')); } - if (null !== $this->stopwatch) { - $this->stopwatch->start('doctrine', 'doctrine'); - } - - if (null !== $query) { - $query->start(); - } + $this->stopwatch?->start('doctrine', 'doctrine'); + $query?->start(); try { $ret = parent::commit(); } finally { - if (null !== $query) { - $query->stop(); - } - - if (null !== $this->stopwatch) { - $this->stopwatch->stop('doctrine'); - } + $query?->stop(); + $this->stopwatch?->stop('doctrine'); } return $ret; @@ -161,24 +126,14 @@ public function rollBack(): bool $this->debugDataHolder->addQuery($this->connectionName, $query = new Query('"ROLLBACK"')); } - if (null !== $this->stopwatch) { - $this->stopwatch->start('doctrine', 'doctrine'); - } - - if (null !== $query) { - $query->start(); - } + $this->stopwatch?->start('doctrine', 'doctrine'); + $query?->start(); try { $ret = parent::rollBack(); } finally { - if (null !== $query) { - $query->stop(); - } - - if (null !== $this->stopwatch) { - $this->stopwatch->stop('doctrine'); - } + $query?->stop(); + $this->stopwatch?->stop('doctrine'); } return $ret; diff --git a/src/Symfony/Bridge/Doctrine/Middleware/Debug/DebugDataHolder.php b/src/Symfony/Bridge/Doctrine/Middleware/Debug/DebugDataHolder.php index 2643cc7493830..14c338e63d691 100644 --- a/src/Symfony/Bridge/Doctrine/Middleware/Debug/DebugDataHolder.php +++ b/src/Symfony/Bridge/Doctrine/Middleware/Debug/DebugDataHolder.php @@ -16,7 +16,7 @@ */ class DebugDataHolder { - private $data = []; + private array $data = []; public function addQuery(string $connectionName, Query $query): void { diff --git a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Driver.php b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Driver.php index 7f7fdd3bf0d8d..c66bed90d08fd 100644 --- a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Driver.php +++ b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Driver.php @@ -22,17 +22,13 @@ */ final class Driver extends AbstractDriverMiddleware { - private $debugDataHolder; - private $stopwatch; - private $connectionName; - - public function __construct(DriverInterface $driver, DebugDataHolder $debugDataHolder, ?Stopwatch $stopwatch, string $connectionName) - { + public function __construct( + DriverInterface $driver, + private DebugDataHolder $debugDataHolder, + private ?Stopwatch $stopwatch, + private string $connectionName, + ) { parent::__construct($driver); - - $this->debugDataHolder = $debugDataHolder; - $this->stopwatch = $stopwatch; - $this->connectionName = $connectionName; } public function connect(array $params): Connection @@ -41,7 +37,7 @@ public function connect(array $params): Connection parent::connect($params), $this->debugDataHolder, $this->stopwatch, - $this->connectionName + $this->connectionName, ); } } diff --git a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Middleware.php b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Middleware.php index 18f6a58d5e7a2..56b03f51335a8 100644 --- a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Middleware.php +++ b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Middleware.php @@ -22,15 +22,11 @@ */ final class Middleware implements MiddlewareInterface { - private $debugDataHolder; - private $stopwatch; - private $connectionName; - - public function __construct(DebugDataHolder $debugDataHolder, ?Stopwatch $stopwatch, string $connectionName = 'default') - { - $this->debugDataHolder = $debugDataHolder; - $this->stopwatch = $stopwatch; - $this->connectionName = $connectionName; + public function __construct( + private DebugDataHolder $debugDataHolder, + private ?Stopwatch $stopwatch, + private string $connectionName = 'default', + ) { } public function wrap(DriverInterface $driver): DriverInterface diff --git a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Query.php b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Query.php index d652f620ce2e8..dc8c9d79ae1fb 100644 --- a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Query.php +++ b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Query.php @@ -20,17 +20,15 @@ */ class Query { - private $params = []; - private $types = []; + private array $params = []; + private array $types = []; - private $start; - private $duration; + private ?float $start = null; + private ?float $duration = null; - private $sql; - - public function __construct(string $sql) - { - $this->sql = $sql; + public function __construct( + private string $sql, + ) { } public function start(): void @@ -45,11 +43,7 @@ public function stop(): void } } - /** - * @param string|int $param - * @param string|int|float|bool|null $variable - */ - public function setParam($param, &$variable, int $type): void + public function setParam(string|int $param, null|string|int|float|bool &$variable, int $type): void { // Numeric indexes start at 0 in profiler $idx = \is_int($param) ? $param - 1 : $param; @@ -58,11 +52,7 @@ public function setParam($param, &$variable, int $type): void $this->types[$idx] = $type; } - /** - * @param string|int $param - * @param string|int|float|bool|null $value - */ - public function setValue($param, $value, int $type): void + public function setValue(string|int $param, null|string|int|float|bool $value, int $type): void { // Numeric indexes start at 0 in profiler $idx = \is_int($param) ? $param - 1 : $param; diff --git a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Statement.php b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Statement.php index e52530e906dc2..0157c5db11e84 100644 --- a/src/Symfony/Bridge/Doctrine/Middleware/Debug/Statement.php +++ b/src/Symfony/Bridge/Doctrine/Middleware/Debug/Statement.php @@ -23,16 +23,16 @@ */ final class Statement extends AbstractStatementMiddleware { - private $debugDataHolder; - private $connectionName; - private $query; + private Query $query; - public function __construct(StatementInterface $statement, DebugDataHolder $debugDataHolder, string $connectionName, string $sql) - { + public function __construct( + StatementInterface $statement, + private DebugDataHolder $debugDataHolder, + private string $connectionName, + string $sql, + ) { parent::__construct($statement); - $this->debugDataHolder = $debugDataHolder; - $this->connectionName = $connectionName; $this->query = new Query($sql); } diff --git a/src/Symfony/Bridge/Doctrine/Tests/Form/ChoiceList/ORMQueryBuilderLoaderTest.php b/src/Symfony/Bridge/Doctrine/Tests/Form/ChoiceList/ORMQueryBuilderLoaderTest.php index 7d253dc59b85d..efb3b04824b6b 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/ChoiceList/ORMQueryBuilderLoaderTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/ChoiceList/ORMQueryBuilderLoaderTest.php @@ -14,7 +14,6 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\GuidType; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Version; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader; use Symfony\Bridge\Doctrine\Tests\DoctrineTestHelper; @@ -226,12 +225,6 @@ public function testUidThrowProperException($entityClass) public function testEmbeddedIdentifierName() { - if (Version::compare('2.5.0') > 0) { - $this->markTestSkipped('Applicable only for Doctrine >= 2.5.0'); - - return; - } - $em = DoctrineTestHelper::createTestEntityManager(); $query = $this->getMockBuilder(\QueryMock::class) diff --git a/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UlidGeneratorTest.php b/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UlidGeneratorTest.php index 957ac0f60aeb0..0c6968bf04706 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UlidGeneratorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UlidGeneratorTest.php @@ -29,9 +29,6 @@ public function testUlidCanBeGenerated() $this->assertTrue(Ulid::isValid($ulid)); } - /** - * @requires function \Symfony\Component\Uid\Factory\UlidFactory::create - */ public function testUlidFactory() { $ulid = new Ulid('00000000000000000000000000'); diff --git a/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UuidGeneratorTest.php b/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UuidGeneratorTest.php index 34367b0bd7213..9b667e9423660 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UuidGeneratorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/IdGenerator/UuidGeneratorTest.php @@ -18,9 +18,6 @@ use Symfony\Component\Uid\UuidV4; use Symfony\Component\Uid\UuidV6; -/** - * @requires function \Symfony\Component\Uid\Factory\UuidFactory::create - */ class UuidGeneratorTest extends TestCase { public function testUuidCanBeGenerated() diff --git a/src/Symfony/Bridge/Doctrine/Tests/Middleware/Debug/MiddlewareTest.php b/src/Symfony/Bridge/Doctrine/Tests/Middleware/Debug/MiddlewareTest.php index d1243f5f03d44..3a461a63749b5 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Middleware/Debug/MiddlewareTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Middleware/Debug/MiddlewareTest.php @@ -16,7 +16,7 @@ use Doctrine\DBAL\Driver\Middleware as MiddlewareInterface; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\ParameterType; -use Doctrine\DBAL\Result; +use Doctrine\DBAL\Statement; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Doctrine\Middleware\Debug\DebugDataHolder; use Symfony\Bridge\Doctrine\Middleware\Debug\Middleware; @@ -28,9 +28,9 @@ */ class MiddlewareTest extends TestCase { - private $debugDataHolder; - private $conn; - private $stopwatch; + private DebugDataHolder $debugDataHolder; + private Connection $conn; + private ?Stopwatch $stopwatch; protected function setUp(): void { @@ -63,22 +63,17 @@ private function init(bool $withStopwatch = true): void price REAL NOT NULL, stock INTEGER NOT NULL ); -EOT - ); +EOT); } public function provideExecuteMethod(): array { return [ 'executeStatement' => [ - static function (object $target, ...$args) { - return $target->executeStatement(...$args); - }, + static fn (Statement|Connection $target, mixed ...$args) => $target->executeStatement(...$args), ], 'executeQuery' => [ - static function (object $target, ...$args): Result { - return $target->executeQuery(...$args); - }, + static fn (Statement|Connection $target, mixed ...$args) => $target->executeQuery(...$args), ], ]; } @@ -156,18 +151,8 @@ public function testWithParamBound(callable $executeMethod) public function provideEndTransactionMethod(): array { return [ - 'commit' => [ - static function (Connection $conn): bool { - return $conn->commit(); - }, - '"COMMIT"', - ], - 'rollback' => [ - static function (Connection $conn): bool { - return $conn->rollBack(); - }, - '"ROLLBACK"', - ], + 'commit' => [static fn (Connection $conn) => $conn->commit(), '"COMMIT"'], + 'rollback' => [static fn (Connection $conn) => $conn->rollBack(), '"ROLLBACK"'], ]; } @@ -207,20 +192,12 @@ public function provideExecuteAndEndTransactionMethods(): array { return [ 'commit and exec' => [ - static function (Connection $conn, string $sql) { - return $conn->executeStatement($sql); - }, - static function (Connection $conn): bool { - return $conn->commit(); - }, + static fn (Connection $conn, string $sql) => $conn->executeStatement($sql), + static fn (Connection $conn) => $conn->commit(), ], 'rollback and query' => [ - static function (Connection $conn, string $sql): Result { - return $conn->executeQuery($sql); - }, - static function (Connection $conn): bool { - return $conn->rollBack(); - }, + static fn (Connection $conn, string $sql) => $conn->executeQuery($sql), + static fn (Connection $conn) => $conn->rollBack(), ], ]; } diff --git a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php index c53a8d3c4dbea..9416c64048470 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php @@ -86,10 +86,6 @@ public function testGetProperties() public function testTestGetPropertiesWithEmbedded() { - if (!class_exists(\Doctrine\ORM\Mapping\Embedded::class)) { - $this->markTestSkipped('@Embedded is not available in Doctrine ORM lower than 2.5.'); - } - $this->assertEquals( [ 'id', @@ -109,10 +105,6 @@ public function testExtract($property, array $type = null) public function testExtractWithEmbedded() { - if (!class_exists(\Doctrine\ORM\Mapping\Embedded::class)) { - $this->markTestSkipped('@Embedded is not available in Doctrine ORM lower than 2.5.'); - } - $expectedTypes = [new Type( Type::BUILTIN_TYPE_OBJECT, false, diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/DoctrineLoaderTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/DoctrineLoaderTest.php index 027e21e0dd58c..23c7e758505a5 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/DoctrineLoaderTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/DoctrineLoaderTest.php @@ -27,7 +27,6 @@ use Symfony\Component\Validator\Mapping\AutoMappingStrategy; use Symfony\Component\Validator\Mapping\CascadingStrategy; use Symfony\Component\Validator\Mapping\ClassMetadata; -use Symfony\Component\Validator\Mapping\Loader\AutoMappingTrait; use Symfony\Component\Validator\Mapping\PropertyMetadata; use Symfony\Component\Validator\Mapping\TraversalStrategy; use Symfony\Component\Validator\Tests\Fixtures\Entity; @@ -38,13 +37,6 @@ */ class DoctrineLoaderTest extends TestCase { - protected function setUp(): void - { - if (!trait_exists(AutoMappingTrait::class)) { - $this->markTestSkipped('Auto-mapping requires symfony/validation 4.4+'); - } - } - public function testLoadClassMetadata() { $validator = Validation::createValidatorBuilder() diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index 0b4ae502172cb..20cb58ddb931f 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=8.1", "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^2", + "doctrine/persistence": "^2|^3", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", diff --git a/src/Symfony/Bridge/Monolog/Tests/Processor/TokenProcessorTest.php b/src/Symfony/Bridge/Monolog/Tests/Processor/TokenProcessorTest.php index c9e37cfdb2c45..249757d562e01 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Processor/TokenProcessorTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Processor/TokenProcessorTest.php @@ -26,10 +26,6 @@ class TokenProcessorTest extends TestCase { public function testProcessor() { - if (!method_exists(UsernamePasswordToken::class, 'getUserIdentifier')) { - $this->markTestSkipped('This test requires symfony/security-core 5.3+'); - } - $token = new UsernamePasswordToken(new InMemoryUser('user', 'password', ['ROLE_USER']), 'provider', ['ROLE_USER']); $tokenStorage = $this->createMock(TokenStorageInterface::class); $tokenStorage->method('getToken')->willReturn($token); diff --git a/src/Symfony/Bridge/Twig/Tests/Command/DebugCommandTest.php b/src/Symfony/Bridge/Twig/Tests/Command/DebugCommandTest.php index 2488a27677af9..f0d7d661b1ff2 100644 --- a/src/Symfony/Bridge/Twig/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Command/DebugCommandTest.php @@ -299,10 +299,6 @@ public function testWithFilter() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $projectDir = \dirname(__DIR__).\DIRECTORY_SEPARATOR.'Fixtures'; $loader = new FilesystemLoader([], $projectDir); $environment = new Environment($loader); diff --git a/src/Symfony/Bridge/Twig/Tests/Command/LintCommandTest.php b/src/Symfony/Bridge/Twig/Tests/Command/LintCommandTest.php index 6a3d640b2d5b2..6428f4860ba78 100644 --- a/src/Symfony/Bridge/Twig/Tests/Command/LintCommandTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Command/LintCommandTest.php @@ -141,10 +141,6 @@ public function testLintAutodetectsGithubActionEnvironment() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $tester = new CommandCompletionTester($this->createCommand()); $this->assertSame($expectedSuggestions, $tester->complete($input)); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php index ea3bb17bb3038..131cb3d040a4b 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php @@ -60,10 +60,6 @@ public function getGenerateAbsoluteUrlData() */ public function testGenerateAbsoluteUrlWithRequestContext($path, $baseUrl, $host, $scheme, $httpPort, $httpsPort, $expected) { - if (!class_exists(RequestContext::class)) { - $this->markTestSkipped('The Routing component is needed to run tests that depend on its request context.'); - } - $requestContext = new RequestContext($baseUrl, 'GET', $host, $scheme, $httpPort, $httpsPort, $path); $extension = new HttpFoundationExtension(new UrlHelper(new RequestStack(), $requestContext)); @@ -75,10 +71,6 @@ public function testGenerateAbsoluteUrlWithRequestContext($path, $baseUrl, $host */ public function testGenerateAbsoluteUrlWithoutRequestAndRequestContext($path) { - if (!class_exists(RequestContext::class)) { - $this->markTestSkipped('The Routing component is needed to run tests that depend on its request context.'); - } - $extension = new HttpFoundationExtension(new UrlHelper(new RequestStack())); $this->assertEquals($path, $extension->generateAbsoluteUrl($path)); @@ -118,10 +110,6 @@ public function testGenerateAbsoluteUrlWithScriptFileName() */ public function testGenerateRelativePath($expected, $path, $pathinfo) { - if (!method_exists(Request::class, 'getRelativeUriForPath')) { - $this->markTestSkipped('Your version of Symfony HttpFoundation is too old.'); - } - $stack = new RequestStack(); $stack->push(Request::create($pathinfo)); $extension = new HttpFoundationExtension(new UrlHelper($stack)); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php index a3294db0d2ae6..ee987d1688011 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php @@ -58,10 +58,6 @@ public function testUnknownFragmentRenderer() public function testGenerateFragmentUri() { - if (!class_exists(FragmentUriGenerator::class)) { - $this->markTestSkipped('HttpKernel 5.3+ is required'); - } - $requestStack = new RequestStack(); $requestStack->push(Request::create('/')); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/WorkflowExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/WorkflowExtensionTest.php index 23dcc64b3d418..1252efb8d6ee0 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/WorkflowExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/WorkflowExtensionTest.php @@ -30,10 +30,6 @@ class WorkflowExtensionTest extends TestCase protected function setUp(): void { - if (!class_exists(Workflow::class)) { - $this->markTestSkipped('The Workflow component is needed to run tests for this extension.'); - } - $places = ['ordered', 'waiting_for_payment', 'processed']; $transitions = [ $this->t1 = new Transition('t1', 'ordered', 'waiting_for_payment'), @@ -110,9 +106,6 @@ public function testGetMarkedPlaces() public function testGetMetadata() { - if (!class_exists(InMemoryMetadataStore::class)) { - $this->markTestSkipped('This test requires symfony/workflow:4.1.'); - } $subject = new Subject(); $this->assertSame('workflow title', $this->extension->getMetadata($subject, 'title')); @@ -124,9 +117,6 @@ public function testGetMetadata() public function testbuildTransitionBlockerList() { - if (!class_exists(TransitionBlockerList::class)) { - $this->markTestSkipped('This test requires symfony/workflow:4.1.'); - } $subject = new Subject(); $list = $this->extension->buildTransitionBlockerList($subject, 't1'); diff --git a/src/Symfony/Bundle/DebugBundle/Tests/DependencyInjection/DebugExtensionTest.php b/src/Symfony/Bundle/DebugBundle/Tests/DependencyInjection/DebugExtensionTest.php index 31afae4d93acb..f026d4d188232 100644 --- a/src/Symfony/Bundle/DebugBundle/Tests/DependencyInjection/DebugExtensionTest.php +++ b/src/Symfony/Bundle/DebugBundle/Tests/DependencyInjection/DebugExtensionTest.php @@ -43,10 +43,6 @@ public function testLoadWithoutConfiguration() public function testUnsetClosureFileInfoShouldBeRegisteredInVarCloner() { - if (!method_exists(ReflectionCaster::class, 'unsetClosureFileInfo')) { - $this->markTestSkipped('Method not available'); - } - $container = $this->createContainer(); $container->registerExtension(new DebugExtension()); $container->loadFromExtension('debug', []); diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index f13c4790988d4..0a1c48cc28e37 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -13,6 +13,8 @@ CHANGELOG * Add `trust_x_sendfile_type_header` option * Add support for first-class callable route controller in `MicroKernelTrait` * Add tag `routing.condition_service` to autoconfigure routing condition services + * Automatically register kernel methods marked with the `Symfony\Component\Routing\Annotation\Route` attribute or annotation as controllers in `MicroKernelTrait` + * Deprecate not setting the `http_method_override` config option. The default value will change to `false` in 7.0. 6.0 --- diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php index 3c0281343d3c3..62a60f4d1a9b2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php @@ -145,6 +145,10 @@ abstract protected function describeCallable(mixed $callable, array $options = [ protected function formatValue(mixed $value): string { + if ($value instanceof \UnitEnum) { + return ltrim(var_export($value, true), '\\'); + } + if (\is_object($value)) { return sprintf('object(%s)', \get_class($value)); } @@ -159,7 +163,7 @@ protected function formatValue(mixed $value): string protected function formatParameter(mixed $value): string { if ($value instanceof \UnitEnum) { - return var_export($value, true); + return ltrim(var_export($value, true), '\\'); } // Recursively search for enum values, so we can replace it @@ -167,7 +171,7 @@ protected function formatParameter(mixed $value): string if (\is_array($value)) { array_walk_recursive($value, static function (&$value) { if ($value instanceof \UnitEnum) { - $value = var_export($value, true); + $value = ltrim(var_export($value, true), '\\'); } }); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php index c87f96393f600..13c76e705da3f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php @@ -188,7 +188,7 @@ private function writeData(array $data, array $options) // before json_encode (which will not display anything for \UnitEnum otherwise) array_walk_recursive($data, static function (&$value) { if ($value instanceof \UnitEnum) { - $value = var_export($value, true); + $value = ltrim(var_export($value, true), '\\'); } }); diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php index ae5188b53aae5..f031f32df68b0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php @@ -349,7 +349,7 @@ protected function describeContainerDefinition(Definition $definition, array $op } elseif ($argument instanceof Definition) { $argumentsInformation[] = 'Inlined Service'; } elseif ($argument instanceof \UnitEnum) { - $argumentsInformation[] = var_export($argument, true); + $argumentsInformation[] = ltrim(var_export($argument, true), '\\'); } elseif ($argument instanceof AbstractArgument) { $argumentsInformation[] = sprintf('Abstract argument (%s)', $argument->getText()); } else { diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php index 91984fb621784..6847c3211fedb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php @@ -421,7 +421,7 @@ private function getArgumentNodes(array $arguments, \DOMDocument $dom): array } } elseif ($argument instanceof \UnitEnum) { $argumentXML->setAttribute('type', 'constant'); - $argumentXML->appendChild(new \DOMText(var_export($argument, true))); + $argumentXML->appendChild(new \DOMText(ltrim(var_export($argument, true), '\\'))); } else { $argumentXML->appendChild(new \DOMText($argument)); } diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 3d4408153b969..92f7cbc9a93a0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -76,12 +76,23 @@ public function getConfigTreeBuilder(): TreeBuilder return $v; }) ->end() + ->validate() + ->always(function ($v) { + if (!isset($v['http_method_override'])) { + trigger_deprecation('symfony/framework-bundle', '6.1', 'Not setting the "framework.http_method_override" config option is deprecated. It will default to "false" in 7.0.'); + + $v['http_method_override'] = true; + } + + return $v; + }) + ->end() ->fixXmlConfig('enabled_locale') ->children() ->scalarNode('secret')->end() - ->scalarNode('http_method_override') + ->booleanNode('http_method_override') ->info("Set true to enable support for the '_method' request parameter to determine the intended HTTP method on POST requests. Note: When using the HttpCache, you need to call the method in your front controller instead") - ->defaultTrue() + ->treatNullLike(false) ->end() ->scalarNode('trust_x_sendfile_type_header') ->info('Set true to enable support for xsendfile in binary file responses.') @@ -2243,6 +2254,10 @@ private function addHtmlSanitizerSection(ArrayNodeDefinition $rootNode, callable ->info('Unregisters custom attribute sanitizers.') ->scalarPrototype()->end() ->end() + ->integerNode('max_input_length') + ->info('The maximum length allowed for the sanitized input.') + ->defaultValue(0) + ->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index af64c9bc807db..d21de7da9d1f9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -2734,6 +2734,10 @@ private function registerHtmlSanitizerConfiguration(array $config, ContainerBuil $def->addMethodCall('withoutAttributeSanitizer', [new Reference($serviceName)], true); } + if ($sanitizerConfig['max_input_length']) { + $def->addMethodCall('withMaxInputLength', [$sanitizerConfig['max_input_length']], true); + } + // Create the sanitizer and link its config $sanitizerId = 'html_sanitizer.sanitizer.'.$sanitizerName; $container->register($sanitizerId, HtmlSanitizer::class)->addArgument(new Reference($configId)); diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php index 3b86ea1344fcf..0e060cf6240fa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php +++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php @@ -163,12 +163,12 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new RegisterReverseContainerPass(true)); $container->addCompilerPass(new RegisterReverseContainerPass(false), PassConfig::TYPE_AFTER_REMOVING); $container->addCompilerPass(new RemoveUnusedSessionMarshallingHandlerPass()); + $container->addCompilerPass(new CacheCollectorPass(), PassConfig::TYPE_BEFORE_REMOVING); if ($container->getParameter('kernel.debug')) { $container->addCompilerPass(new AddDebugLogProcessorPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 2); $container->addCompilerPass(new UnusedTagsPass(), PassConfig::TYPE_AFTER_REMOVING); $container->addCompilerPass(new ContainerBuilderDebugDumpPass(), PassConfig::TYPE_BEFORE_REMOVING, -255); - $container->addCompilerPass(new CacheCollectorPass(), PassConfig::TYPE_BEFORE_REMOVING); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php b/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php index dbf818f13a65a..dbf77b3bd94bd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php +++ b/src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php @@ -82,6 +82,10 @@ private function configureRoutes(RoutingConfigurator $routes): void } else { $routes->import($configDir.'/{routes}.php'); } + + if (false !== ($fileName = (new \ReflectionObject($this))->getFileName())) { + $routes->import($fileName, 'annotation'); + } } /** diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd index 3ffa5b571503b..c2bf87f9daf45 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd @@ -850,6 +850,7 @@ + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/AboutCommand/Fixture/TestAppKernel.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/AboutCommand/Fixture/TestAppKernel.php index c15bf83cb1cf8..cc55da770ed2d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/AboutCommand/Fixture/TestAppKernel.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/AboutCommand/Fixture/TestAppKernel.php @@ -32,6 +32,11 @@ public function getProjectDir(): string public function registerContainerConfiguration(LoaderInterface $loader) { + $loader->load(static function (ContainerBuilder $container) { + $container->loadFromExtension('framework', [ + 'http_method_override' => false, + ]); + }); } protected function build(ContainerBuilder $container) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/CacheClearCommand/Fixture/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/CacheClearCommand/Fixture/config.yml index 68f8d040610c4..449f26f2b7d1c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Command/CacheClearCommand/Fixture/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Command/CacheClearCommand/Fixture/config.yml @@ -1,2 +1,3 @@ framework: + http_method_override: false secret: test diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php index f4215d39832de..da6997df578c4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php @@ -79,10 +79,6 @@ public function testSubscribedServices() public function testGetParameter() { - if (!class_exists(ContainerBag::class)) { - $this->markTestSkipped('ContainerBag class does not exist'); - } - $container = new Container(new FrozenParameterBag(['foo' => 'bar'])); $container->set('parameter_bag', new ContainerBag($container)); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 07612df737190..cc567b14829eb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -33,7 +33,7 @@ class ConfigurationTest extends TestCase public function testDefaultConfig() { $processor = new Processor(); - $config = $processor->processConfiguration(new Configuration(true), [['secret' => 's3cr3t']]); + $config = $processor->processConfiguration(new Configuration(true), [['http_method_override' => false, 'secret' => 's3cr3t']]); $this->assertEquals(self::getBundleDefaultConfig(), $config); } @@ -57,7 +57,7 @@ public function testInvalidSessionName($sessionName) $processor = new Processor(); $processor->processConfiguration( new Configuration(true), - [['session' => ['name' => $sessionName]]] + [['http_method_override' => false, 'session' => ['name' => $sessionName]]] ); } @@ -77,7 +77,7 @@ public function testAssetsCanBeEnabled() { $processor = new Processor(); $configuration = new Configuration(true); - $config = $processor->processConfiguration($configuration, [['assets' => null]]); + $config = $processor->processConfiguration($configuration, [['http_method_override' => false, 'assets' => null]]); $defaultConfig = [ 'enabled' => true, @@ -103,6 +103,7 @@ public function testValidAssetsPackageNameConfiguration($packageName) $configuration = new Configuration(true); $config = $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'assets' => [ 'packages' => [ $packageName => [], @@ -135,6 +136,7 @@ public function testInvalidAssetsConfiguration(array $assetConfig, $expectedMess $configuration = new Configuration(true); $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'assets' => $assetConfig, ], ]); @@ -184,6 +186,7 @@ public function testValidLockConfiguration($lockConfig, $processedConfig) $configuration = new Configuration(true); $config = $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'lock' => $lockConfig, ], ]); @@ -244,11 +247,13 @@ public function testLockMergeConfigs() $configuration = new Configuration(true); $config = $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'lock' => [ 'payload' => 'flock', ], ], [ + 'http_method_override' => false, 'lock' => [ 'payload' => 'semaphore', ], @@ -275,6 +280,7 @@ public function testValidSemaphoreConfiguration($semaphoreConfig, $processedConf $configuration = new Configuration(true); $config = $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'semaphore' => $semaphoreConfig, ], ]); @@ -327,6 +333,7 @@ public function testItShowANiceMessageIfTwoMessengerBusesAreConfiguredButNoDefau $processor->processConfiguration($configuration, [ 'framework' => [ + 'http_method_override' => false, 'messenger' => [ 'default_bus' => null, 'buses' => [ @@ -344,6 +351,7 @@ public function testBusMiddlewareDontMerge() $configuration = new Configuration(true); $config = $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'messenger' => [ 'default_bus' => 'existing_bus', 'buses' => [ @@ -358,6 +366,7 @@ public function testBusMiddlewareDontMerge() ], ], [ + 'http_method_override' => false, 'messenger' => [ 'buses' => [ 'common_bus' => [ @@ -406,6 +415,7 @@ public function testItErrorsWhenDefaultBusDoesNotExist() $processor->processConfiguration($configuration, [ [ + 'http_method_override' => false, 'messenger' => [ 'default_bus' => 'foo', 'buses' => [ @@ -420,7 +430,7 @@ public function testItErrorsWhenDefaultBusDoesNotExist() protected static function getBundleDefaultConfig() { return [ - 'http_method_override' => true, + 'http_method_override' => false, 'trust_x_sendfile_type_header' => false, 'ide' => '%env(default::SYMFONY_IDE)%', 'default_locale' => 'en', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php index f26621001c9ec..4b71fb9c751ca 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'assets' => [ 'version' => 'SomeVersionScheme', 'base_urls' => 'http://cdn.example.com', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_disabled.php index d10595fba9df1..0513da761df91 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_disabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'assets' => [ 'enabled' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_version_strategy_as_service.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_version_strategy_as_service.php index b57f78ba47bb5..611259c00c4f9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_version_strategy_as_service.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets_version_strategy_as_service.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'assets' => [ 'version_strategy' => 'assets.custom_version_strategy', 'base_urls' => 'http://cdn.example.com', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php index 9ca04b6c63bf9..13b659b6327a5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'cache' => [ 'pools' => [ 'cache.foo' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware.php index 44855c62adbf1..ca8834fc3697b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'cache' => [ 'app' => 'cache.adapter.redis_tag_aware', ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware_pool.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware_pool.php index bf3ee2de2b357..3ca0f1c77bfea 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware_pool.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache_app_redis_tag_aware_pool.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'cache' => [ 'app' => 'cache.redis_tag_aware.foo', 'pools' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf.php index 8b712475fda58..9db840d5194cd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'csrf_protection' => true, 'session' => [ 'storage_factory_id' => 'session.storage.factory.native', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf_needs_session.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf_needs_session.php index 34fdb4c1f9931..2e1a54221a28d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf_needs_session.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/csrf_needs_session.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'csrf_protection' => [ 'enabled' => true, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/default_config.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/default_config.php index 4b2021df7bb2e..34e2894f9fb9f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/default_config.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/default_config.php @@ -1,3 +1,4 @@ loadFromExtension('framework', []); +$container->loadFromExtension('framework', [ + 'http_method_override' => false,]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_and_ssi_without_fragments.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_and_ssi_without_fragments.php index beada36b84359..facad13cdf786 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_and_ssi_without_fragments.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_and_ssi_without_fragments.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'fragments' => [ 'enabled' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_disabled.php index a24cd8158c6b7..76e3ddfbe766c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/esi_disabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'esi' => [ 'enabled' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/exceptions.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/exceptions.php index 5d0dde0e0ac64..4d9fd94862377 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/exceptions.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/exceptions.php @@ -3,6 +3,7 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'exceptions' => [ BadRequestHttpException::class => [ 'log_level' => 'info', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_default_csrf.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_default_csrf.php index a57d5233806fa..0c491714a05a9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_default_csrf.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_default_csrf.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'form' => [ 'legacy_error_messages' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_no_csrf.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_no_csrf.php index e0befdb320612..53eaad2668771 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_no_csrf.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/form_no_csrf.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'form' => [ 'csrf_protection' => [ 'enabled' => false, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/fragments_and_hinclude.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/fragments_and_hinclude.php index dbcf5b786dba9..0f3ee9c194a9f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/fragments_and_hinclude.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/fragments_and_hinclude.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'fragments' => [ 'enabled' => true, 'hinclude_default_template' => 'global_hinclude_template', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/html_sanitizer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/html_sanitizer.php index e7b1bd41fc360..687f05a3ffa2b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/html_sanitizer.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/html_sanitizer.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'html_sanitizer' => [ 'default' => 'my.sanitizer', 'sanitizers' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_default_options.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_default_options.php index 5f71a92847f34..b8f63d8190b84 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_default_options.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_default_options.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'max_host_connections' => 4, 'default_options' => null, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_full_default_options.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_full_default_options.php index cf83e31af2f02..865ddd14e1203 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_full_default_options.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_full_default_options.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'default_options' => [ 'headers' => ['X-powered' => 'PHP'], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_mock_response_factory.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_mock_response_factory.php index 5b64c3ae0a1d4..de2dd604e3f88 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_mock_response_factory.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_mock_response_factory.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'default_options' => null, 'mock_response_factory' => 'my_response_factory', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_override_default_options.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_override_default_options.php index 8ba8dd7b92ec8..c66ce8851b42e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_override_default_options.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_override_default_options.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'max_host_connections' => 4, 'default_options' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_retry.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_retry.php index f2ab01d1e1196..63914440a7be2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_retry.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_retry.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'default_options' => [ 'retry_failed' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_scoped_without_query_option.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_scoped_without_query_option.php index 0d3dc88472f84..653ca421846ae 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_scoped_without_query_option.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_scoped_without_query_option.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'scoped_clients' => [ 'foo' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_xml_key.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_xml_key.php index 64778c61561b6..d613dc05d2fdb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_xml_key.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/http_client_xml_key.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'http_client' => [ 'default_options' => [ 'resolve' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_translator_enabled_locales.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_translator_enabled_locales.php index a585c6ee5de6d..46acfce8c144d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_translator_enabled_locales.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_translator_enabled_locales.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => 's3cr3t', 'default_locale' => 'fr', 'router' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer.php index 5e3093b33b431..918d837c411f2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'dsn' => 'smtp://example.com', 'envelope' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_disabled_message_bus.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_disabled_message_bus.php index 4f2471ed95802..bea83e8fe66cf 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_disabled_message_bus.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_disabled_message_bus.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'dsn' => 'smtp://example.com', 'message_bus' => false, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_dsn.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_dsn.php index df2ca46e46ee9..3d991932e7e64 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_dsn.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_dsn.php @@ -4,6 +4,7 @@ return static function (ContainerConfigurator $container) { $container->extension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'dsn' => 'smtp://example.com', 'envelope' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_specific_message_bus.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_specific_message_bus.php index 32b936af9d88e..ba9e9f573b562 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_specific_message_bus.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_specific_message_bus.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'dsn' => 'smtp://example.com', 'message_bus' => 'app.another_bus', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_transports.php index 8b13bc269b24a..bc1a7925d8e51 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/mailer_with_transports.php @@ -4,6 +4,7 @@ return static function (ContainerConfigurator $container) { $container->extension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'transports' => [ 'transport1' => 'smtp://example1.com', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index adb8239d04737..dc22cd5ff8917 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'routing' => [ FooMessage::class => ['sender.bar', 'sender.biz'], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php index e02542d9778c6..d14d6e94b617e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php @@ -1,5 +1,6 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => false, ]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php index cb4ee5e5127b9..6d8e6bbffbb2e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'buses' => [ 'command_bus' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php index 627e21f3084e9..665c664bfb216 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'default_bus' => 'messenger.bus.commands', 'buses' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php index 8f85259aa6908..30b000f9bb5aa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'transports' => [ 'transport_1' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php index 0cff76887b152..3848ee59f7ad1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'failure_transport' => 'failure_transport_global', 'transports' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php index eb459509015dd..77f4d5b93bebc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => true, 'messenger' => [ 'serializer' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php index ee77e3a3f2dbf..b552a3ebe5d5b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => true, 'messenger' => [ 'serializer' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php index e58814589b870..f487a0f8f90d9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'routing' => [ 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage' => ['amqp'], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php index 7baab29dc57ce..34f95dbee6e63 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => true, 'messenger' => [ 'serializer' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php index 90c5def3ac100..8236fced45021 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => true, 'messenger' => [ 'failure_transport' => 'failed', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php index dda2e30108b87..3cb006c46750b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'reset_on_message' => false, 'routing' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_explict_reset_on_message_legacy.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_explict_reset_on_message_legacy.php index 73102d522db57..ee689ae0932db 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_explict_reset_on_message_legacy.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_explict_reset_on_message_legacy.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'reset_on_message' => true, 'routing' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php index 5ffe142be4dfc..f517084713550 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'messenger' => [ 'enabled' => true ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php index 6d51ef98517f4..a1cea02ac86d3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'enabled' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_messenger.php index 454cf5ef7ca81..bc4280b97a551 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_messenger.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'mailer' => [ 'dsn' => 'smtp://example.com', ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_transports.php index 9bc87dbee2f58..0d3223198528e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_transports.php @@ -4,6 +4,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'notifier' => [ 'enabled' => true, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_disabled.php index cff0582bf3b3d..0e552a97853d2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_disabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'php_errors' => [ 'log' => false, 'throw' => false, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_enabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_enabled.php index 9afa5d1c02266..f26bf7da296e0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_enabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_enabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'php_errors' => [ 'log' => true, 'throw' => true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_level.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_level.php index 87fdd64d0b6fe..997ea4c393108 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_level.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_level.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'php_errors' => [ 'log' => 8, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_levels.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_levels.php index 620a5871e098f..72f4685af1ce8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_levels.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/php_errors_log_levels.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'php_errors' => [ 'log' => [ \E_NOTICE => \Psr\Log\LogLevel::ERROR, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/profiler.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/profiler.php index 552c95e137bb3..955da41fab436 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/profiler.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/profiler.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'profiler' => [ 'enabled' => true, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_accessor.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_accessor.php index dc6954fe89da4..cce084b77fa6e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_accessor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_accessor.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'property_access' => [ 'magic_call' => true, 'magic_get' => true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_info.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_info.php index bff8d41158582..bbf4b58b4ec57 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_info.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/property_info.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'property_info' => [ 'enabled' => true, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/request.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/request.php index d69d7512ad995..2a1a9d10d7461 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/request.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/request.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'request' => [ 'formats' => [], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_disabled.php index 937a07c2255cd..d8ec0560a8c2e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_disabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => [ 'enabled' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_enabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_enabled.php index de3381c21e3a1..f40405e7a011f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_enabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_enabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => [ 'enabled' => true, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_legacy_cache.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_legacy_cache.php index 9636b1d6613aa..6695d9f7988ba 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_legacy_cache.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_legacy_cache.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'serializer' => [ 'enabled' => true, 'cache' => 'foo', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_mapping.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_mapping.php index 2f6f48e95888d..d68a9f76f7699 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_mapping.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/serializer_mapping.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'annotations' => ['enabled' => true], 'serializer' => [ 'enable_annotations' => true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session.php index 8b4c6e6e4c3b1..1f2556a5cfcbe 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'session' => [ 'storage_factory_id' => 'session.storage.factory.native', 'handler_id' => null, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session_cookie_secure_auto.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session_cookie_secure_auto.php index b52935c726a0f..b07b6f8b2f1a2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session_cookie_secure_auto.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/session_cookie_secure_auto.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'session' => [ 'storage_factory_id' => 'session.storage.factory.native', 'handler_id' => null, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/ssi_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/ssi_disabled.php index 32e1bf0c554da..f1c56a38cd581 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/ssi_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/ssi_disabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'ssi' => [ 'enabled' => false, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_cache_dir_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_cache_dir_disabled.php index 6f2568ffd511e..92383e5a9bd11 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_cache_dir_disabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_cache_dir_disabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'translator' => [ 'cache_dir' => null, ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_fallbacks.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_fallbacks.php index 592a61de65a7f..0989890ee454a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_fallbacks.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/translator_fallbacks.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'translator' => [ 'fallbacks' => ['en', 'fr'], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_annotations.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_annotations.php index 933410dfee767..cb2bf7f3f597e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_annotations.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_annotations.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => 's3cr3t', 'validation' => [ 'enabled' => true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_auto_mapping.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_auto_mapping.php index e15762d6d8a13..4d879f6c5d884 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_auto_mapping.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_auto_mapping.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'property_info' => ['enabled' => true], 'validation' => [ 'auto_mapping' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_email_validation_mode.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_email_validation_mode.php index 5100e01e12bb4..75a12bbd98afd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_email_validation_mode.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_email_validation_mode.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'validation' => [ 'email_validation_mode' => 'html5', ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_mapping.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_mapping.php index f8b19e34801c9..6be94689035db 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_mapping.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_mapping.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'validation' => [ 'mapping' => [ 'paths' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_multiple_static_methods.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_multiple_static_methods.php index ad2bd817a208f..475bb595a818c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_multiple_static_methods.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_multiple_static_methods.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => 's3cr3t', 'validation' => [ 'enabled' => true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_no_static_method.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_no_static_method.php index a9d98e17c68db..8adb5c26b8b6c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_no_static_method.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_no_static_method.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => 's3cr3t', 'validation' => [ 'enabled' => true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_translation_domain.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_translation_domain.php index 42ea0713030a3..104dbbace0c87 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_translation_domain.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/validation_translation_domain.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'validation' => [ 'translation_domain' => 'messages', ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/web_link.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/web_link.php index 44d52e402d8b8..5b022da2067dc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/web_link.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/web_link.php @@ -1,5 +1,6 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'web_link' => ['enabled' => true], ]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_not_valid.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_not_valid.php index 5d6ed54d6739f..efb5767a3b535 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_not_valid.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_not_valid.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'my_workflow' => [ 'type' => 'state_machine', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_guard_expression.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_guard_expression.php index 2037b5f904f69..37a1d7ac73007 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_guard_expression.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_guard_expression.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'article' => [ 'type' => 'workflow', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_multiple_transitions_with_same_name.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_multiple_transitions_with_same_name.php index 35a9df3730b2a..2ba2b3491c705 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_multiple_transitions_with_same_name.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_multiple_transitions_with_same_name.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'article' => [ 'type' => 'workflow', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_no_events_to_dispatch.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_no_events_to_dispatch.php index e4eefd4c28440..81fe174b1b2a3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_no_events_to_dispatch.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_no_events_to_dispatch.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'my_workflow' => [ 'type' => 'state_machine', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_specified_events_to_dispatch.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_specified_events_to_dispatch.php index 0fc5c29c8b43e..1c434cd99c4ee 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_specified_events_to_dispatch.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_specified_events_to_dispatch.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'my_workflow' => [ 'type' => 'state_machine', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_support_and_support_strategy.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_support_and_support_strategy.php index 063755b130d34..120bb364722dc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_support_and_support_strategy.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_with_support_and_support_strategy.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'my_workflow' => [ 'type' => 'workflow', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_without_support_and_support_strategy.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_without_support_and_support_strategy.php index 5eef5cc4d0827..641455eb36b3f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_without_support_and_support_strategy.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflow_without_support_and_support_strategy.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'my_workflow' => [ 'type' => 'workflow', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php index 995fabffe38b7..5cdb2563ac2b1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows.php @@ -3,6 +3,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest; $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'article' => [ 'type' => 'workflow', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_enabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_enabled.php index eb17731940973..9f2fabe3e57ed 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_enabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_enabled.php @@ -1,5 +1,6 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => null, ]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled.php index f048de1ceb5ad..ad71b2729853f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'enabled' => true, 'foo' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled_named_workflows.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled_named_workflows.php index f79a2d10e97f9..49ab48914e1ba 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled_named_workflows.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/workflows_explicitly_enabled_named_workflows.php @@ -1,6 +1,7 @@ loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'enabled' => true, 'workflows' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml index dadee4529d8b5..bb4b62ee6a0c7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + http://cdn.example.com diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_disabled.xml index 3c1303144b515..cd53b664d4417 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_disabled.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_version_strategy_as_service.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_version_strategy_as_service.xml index 7bc70332bcc98..0a7e6bc3ff3b6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_version_strategy_as_service.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets_version_strategy_as_service.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + http://cdn.example.com diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml index 7c75178c8cf0a..a0ae5219ba9a8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware.xml index 2929e87e200e8..630c2385c597d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + cache.adapter.redis_tag_aware diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware_pool.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware_pool.xml index 65c06a1da6df7..40ce365c5bda9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware_pool.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache_app_redis_tag_aware_pool.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + cache.redis_tag_aware.foo diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf.xml index 24acb3e32707c..97104d0571e52 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_disabled.xml index 63a26d3843970..7f9ff7fb92505 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_disabled.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_needs_session.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_needs_session.xml index a9e168638df31..013435d6b6baa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_needs_session.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/csrf_needs_session.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/default_config.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/default_config.xml index d98c43d992d8e..efbd656c0a13d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/default_config.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/default_config.xml @@ -5,5 +5,5 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_and_ssi_without_fragments.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_and_ssi_without_fragments.xml index 5fe9be69b7cba..70dd10405580a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_and_ssi_without_fragments.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_and_ssi_without_fragments.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_disabled.xml index d4a46b62fcfb9..961882a6a58d5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/esi_disabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/exceptions.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/exceptions.xml index cc73b8de3ced6..d40de006d7316 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/exceptions.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/exceptions.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml index 30fcf6b7f3929..55616c2d6a7ad 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_sets_field_name.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml index 1e89bca965ea2..cf88a085adc5e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_csrf_under_form_sets_field_name.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_default_csrf.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_default_csrf.xml index 9ed40084722b8..c2700a6b20a76 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_default_csrf.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_default_csrf.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_no_csrf.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_no_csrf.xml index 3af5322be212f..afb1869c5ab5d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_no_csrf.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/form_no_csrf.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/fragments_and_hinclude.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/fragments_and_hinclude.xml index fb007313b9a71..2031cac377cb1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/fragments_and_hinclude.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/fragments_and_hinclude.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/html_sanitizer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/html_sanitizer.xml index 05cf704dd2c6c..77a47724541bf 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/html_sanitizer.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/html_sanitizer.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + - + - + - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml index 8dd84123ca4b5..fdee9a9132a35 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + bar diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_retry.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_retry.xml index eb7798914488b..248fd81801e2d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_retry.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_retry.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + - + - + 127.0.0.1 diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml index d531fbaba218f..d16fa7e5bf7fa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml index 72e583a902395..b44dd675ffdce 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml @@ -10,7 +10,7 @@ redis://paas.com - + semaphore flock diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_disabled_message_bus.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_disabled_message_bus.xml index e6d3a47e38a93..cac6ba833daa6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_disabled_message_bus.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_disabled_message_bus.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_dsn.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_dsn.xml index be53f59bc3cad..fc4f9861e98eb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_dsn.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_dsn.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + sender@example.org diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_specific_message_bus.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_specific_message_bus.xml index 116ba032a03a3..ee541be7f94b3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_specific_message_bus.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_specific_message_bus.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_transports.xml index cbe538d33e99c..71cd4c118a1f4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_transports.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/mailer_with_transports.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + smtp://example1.com smtp://example2.com diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml index bacd772dcb6fc..fef09b934a3aa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml index 6f57398b30d2b..513842ece8392 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml index 1642e57988505..a8f515e7166bc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml index b8e9f19759429..bad9fb16fb67c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml index c6e5c530fda1b..096c26f4628ab 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml index 0b022e78a0c8c..30b249b415c31 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml index 98c487fbf8bfa..cbff44e09f593 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml index 349a3728d3935..972f5201fb382 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml index e5e60a39823a6..f2e7cfc6c49b8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml index b0510d580ceaf..d78c802810ae6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml index 67a2a414e8fcf..c0bc33bcde151 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_explict_reset_on_message_legacy.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_explict_reset_on_message_legacy.xml index 1451bb66f516d..4c208aad2f0b2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_explict_reset_on_message_legacy.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_explict_reset_on_message_legacy.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml index 47e2e2b0c1b13..8c675c4603786 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml index 1c62b5265b897..a93064b21384c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_messenger.xml index c2a5134762588..7d65d064e9947 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_messenger.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_transports.xml index a1ec7863cda1a..ee6653c3449e0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_transports.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_transports.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_disabled.xml index cb50daa65e883..62d677a54e74f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_disabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_enabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_enabled.xml index db6a8a9bf03c0..a57c4e6c6843e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_enabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_enabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_level.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_level.xml index ebd7948452b7f..608842c27b483 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_level.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_level.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_levels.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_levels.xml index 1b6642a575c4c..004a6d3284228 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_levels.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/php_errors_log_levels.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/profiler.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/profiler.xml index a5f5448e18f2d..9b157c920d11a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/profiler.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/profiler.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_accessor.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_accessor.xml index 9406919e92394..aacbb7531a16f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_accessor.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_accessor.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_info.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_info.xml index 7bf63b6540c54..112635383e6a4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_info.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/property_info.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/request.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/request.xml index f1e8184c149d1..0bcabe2697267 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/request.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/request.xml @@ -5,7 +5,7 @@ xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml index 0b2f6c662dcf5..be7264689f3dc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_disabled.xml index 0c62272c51003..b5d55599e0e1e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_disabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_enabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_enabled.xml index 3d59d62833ea4..a0b95b01e1e6a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_enabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_enabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_legacy_cache.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_legacy_cache.xml index b76ceb86b714a..9296670bb1657 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_legacy_cache.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_legacy_cache.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_mapping.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_mapping.xml index 1ae06c85e13c1..988abf90e0586 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_mapping.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/serializer_mapping.xml @@ -4,7 +4,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session.xml index e91d51955e6fa..338404bc8688c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session_cookie_secure_auto.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session_cookie_secure_auto.xml index 3023c43fc13ad..7b9408e897886 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session_cookie_secure_auto.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/session_cookie_secure_auto.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/ssi_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/ssi_disabled.xml index 6aa752a4695d5..054f191f1ea15 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/ssi_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/ssi_disabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_cache_dir_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_cache_dir_disabled.xml index 5704ff7cd7ddb..229a722860242 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_cache_dir_disabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_cache_dir_disabled.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_fallbacks.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_fallbacks.xml index 521f8e381512d..d6b09f34ee461 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_fallbacks.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/translator_fallbacks.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + en fr diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_annotations.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_annotations.xml index 2324b9ca6e374..42bcdc3f47d9e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_annotations.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_annotations.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_auto_mapping.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_auto_mapping.xml index a05aaf8016a56..71109f8e44ae2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_auto_mapping.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_auto_mapping.xml @@ -3,7 +3,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_email_validation_mode.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_email_validation_mode.xml index 7274d815894d7..961b9adba4531 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_email_validation_mode.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_email_validation_mode.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_mapping.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_mapping.xml index 8d74ebb2118f9..ad70508b6bfdc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_mapping.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_mapping.xml @@ -4,7 +4,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony"> - + %kernel.project_dir%/Fixtures/TestBundle/Resources/config/validation_mapping/files diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_multiple_static_methods.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_multiple_static_methods.xml index c2e84c3b906c7..abd9ba9b740fc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_multiple_static_methods.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_multiple_static_methods.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + loadFoo loadBar diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_no_static_method.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_no_static_method.xml index 61770d88a7fa6..7554cd16f281c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_no_static_method.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_no_static_method.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_translation_domain.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_translation_domain.xml index 3690f9e10eda4..05ad899763c38 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_translation_domain.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/validation_translation_domain.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/web_link.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/web_link.xml index 718ceb31a372c..9c617ccbdea9a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/web_link.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/web_link.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_not_valid.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_not_valid.xml index df299c89deb50..12bc1b463b68d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_not_valid.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_not_valid.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_guard_expression.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_guard_expression.xml index ffc12c4d0d420..1a953f96352e6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_guard_expression.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_guard_expression.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + draft Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_multiple_transitions_with_same_name.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_multiple_transitions_with_same_name.xml index db79f9323c47e..3bf4657eccac3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_multiple_transitions_with_same_name.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_multiple_transitions_with_same_name.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + draft Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_no_events_to_dispatch.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_no_events_to_dispatch.xml index 2f563da4bf96b..4fc6a02341fd1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_no_events_to_dispatch.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_no_events_to_dispatch.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + one diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_specified_events_to_dispatch.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_specified_events_to_dispatch.xml index d442828f8cfbf..48091a9b01184 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_specified_events_to_dispatch.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_specified_events_to_dispatch.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + one diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_support_and_support_strategy.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_support_and_support_strategy.xml index 54a346ebda198..139259826af2e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_support_and_support_strategy.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_with_support_and_support_strategy.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_without_support_and_support_strategy.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_without_support_and_support_strategy.xml index c6ee7d77b5c6a..b40b24707a876 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_without_support_and_support_strategy.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflow_without_support_and_support_strategy.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml index 79361af57a61f..5e9f1d1bff700 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + draft diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_enabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_enabled.xml index 26e622e9e0074..a5567a8101d0c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_enabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_enabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled.xml index af93d44e18387..a3d7f8bfa623b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest bar diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled_named_workflows.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled_named_workflows.xml index 41fd29a1f27d9..3569297c45784 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled_named_workflows.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/workflows_explicitly_enabled_named_workflows.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> - + bar Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\FrameworkExtensionTest diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml index cfd4f07b04346..2c1450de8cc75 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false assets: version: SomeVersionScheme version_format: '%%s?version=%%s' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_disabled.yml index 17ba4e90afb75..baa169f48ce72 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_disabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false assets: enabled: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_version_strategy_as_service.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_version_strategy_as_service.yml index 2528462f83cb5..cdfc43ca648eb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_version_strategy_as_service.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets_version_strategy_as_service.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false assets: version_strategy: assets.custom_version_strategy base_urls: http://cdn.example.com diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml index c89c027f5aecf..b886dcd1b3ce9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false cache: pools: cache.foo: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware.yml index b1c89adafa0ca..11204defe4d32 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false cache: app: cache.adapter.redis_tag_aware diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware_pool.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware_pool.yml index 9eb8b83c775c5..42717b2aa51b5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware_pool.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache_app_redis_tag_aware_pool.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false cache: app: cache.redis_tag_aware.foo pools: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf.yml index 643e7bda4554a..71f6a34e22d2d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: s3cr3t csrf_protection: ~ session: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf_needs_session.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf_needs_session.yml index b8065b6fb678b..8fb542365010b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf_needs_session.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/csrf_needs_session.yml @@ -1,2 +1,3 @@ framework: + http_method_override: false csrf_protection: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/default_config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/default_config.yml index 00874fbe8d11d..26f9bb5a672a6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/default_config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/default_config.yml @@ -1 +1,2 @@ -framework: ~ +framework: + http_method_override: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_and_ssi_without_fragments.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_and_ssi_without_fragments.yml index 49d63c8d60a15..a1140cc31c044 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_and_ssi_without_fragments.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_and_ssi_without_fragments.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false fragments: enabled: false esi: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_disabled.yml index 2a78e6da0e725..9e9a03f072ff2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/esi_disabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false esi: enabled: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/exceptions.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/exceptions.yml index 82fab4e04a9f9..9ee4351dc760e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/exceptions.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/exceptions.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false exceptions: Symfony\Component\HttpKernel\Exception\BadRequestHttpException: log_level: info diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_default_csrf.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_default_csrf.yml index 5036cc8577735..d6e9d77b93678 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_default_csrf.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_default_csrf.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false form: legacy_error_messages: false session: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_no_csrf.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_no_csrf.yml index e3ac7e8daf42d..7f1d94ad2040e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_no_csrf.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/form_no_csrf.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false form: csrf_protection: enabled: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/fragments_and_hinclude.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/fragments_and_hinclude.yml index b03f37da7946e..92dc6fe7771c2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/fragments_and_hinclude.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/fragments_and_hinclude.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false fragments: enabled: true hinclude_default_template: global_hinclude_template diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/html_sanitizer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/html_sanitizer.yml index 1c4f5dfcd5a4b..815ca37cfc5a4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/html_sanitizer.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/html_sanitizer.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false html_sanitizer: default: my.sanitizer sanitizers: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml index 6828f8ec231fb..4bc3637624fb2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: max_host_connections: 4 default_options: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml index ba3aa46259b46..de9300e17f158 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: default_options: headers: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_mock_response_factory.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_mock_response_factory.yml index b958591084136..a90016a026e0e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_mock_response_factory.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_mock_response_factory.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: default_options: ~ mock_response_factory: my_response_factory diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml index 1528a313d64e3..14a6915380dba 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: max_host_connections: 4 default_options: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_retry.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_retry.yml index eba686819c300..9f02eb5bce2bc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_retry.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_retry.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: default_options: retry_failed: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_scoped_without_query_option.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_scoped_without_query_option.yml index ecfc9d41fd4c3..8da495f14e634 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_scoped_without_query_option.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_scoped_without_query_option.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: scoped_clients: foo: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_xml_key.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_xml_key.yml index dc87555a901ae..51ac6c30a1acd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_xml_key.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_xml_key.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false http_client: default_options: resolve: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock.yml index 70f578a143a56..3ca4a46ab8639 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock.yml @@ -1,2 +1,3 @@ framework: + http_method_override: false lock: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock_named.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock_named.yml index 6d0cb5ca638bd..02ffcf5b71c58 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock_named.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/lock_named.yml @@ -2,6 +2,7 @@ parameters: env(REDIS_DSN): redis://paas.com framework: + http_method_override: false lock: foo: semaphore bar: flock diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_disabled_message_bus.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_disabled_message_bus.yml index f941f7c8c4f6b..180be920d08c9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_disabled_message_bus.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_disabled_message_bus.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false mailer: dsn: 'smtp://example.com' message_bus: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_dsn.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_dsn.yml index f8b3c87c4302c..8677cc5ece83d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_dsn.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_dsn.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false mailer: dsn: 'smtp://example.com' envelope: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_specific_message_bus.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_specific_message_bus.yml index ddfc7a479a49d..bc227c96cf796 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_specific_message_bus.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_specific_message_bus.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false mailer: dsn: 'smtp://example.com' message_bus: app.another_bus diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_transports.yml index bc4657d3a4397..6486fdeeedf1c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_transports.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/mailer_with_transports.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false mailer: transports: transport1: 'smtp://example1.com' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml index 82fea3b27af23..29174a9b407f2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: routing: 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz'] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml index 1b2d2d1a4f475..8bbd594e3839b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml @@ -1,2 +1,3 @@ framework: + http_method_override: false messenger: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml index 74431414ba99c..fcafe4b57b97c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: buses: command_bus: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml index 0e67039733272..0699ecfaed0a7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: default_bus: messenger.bus.commands buses: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml index 863f18a7d1a1f..04e6d1f24e200 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: transports: transport_1: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml index 10023edb0b9fd..bac747b7a1b58 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: failure_transport: failure_transport_global transports: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml index 0e493eb882a02..bfd682c706fbe 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false serializer: true messenger: serializer: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml index 3bf0f2ddf9c03..3b01d3d3bca35 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false serializer: true messenger: serializer: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml index caa88641887c7..73544ddda6e49 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: routing: 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage': [amqp] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml index b51feb73bce95..cc7e613b28896 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false serializer: true messenger: serializer: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml index d00f4a65dd37c..b16f9b6a8f09d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false serializer: true messenger: failure_transport: failed diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml index f67395c85c191..37e1e90b530df 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: reset_on_message: false routing: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_explict_reset_on_message_legacy.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_explict_reset_on_message_legacy.yml index 3bf374f474c75..17b779a254fe9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_explict_reset_on_message_legacy.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_explict_reset_on_message_legacy.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: reset_on_message: true routing: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml index 586cb98a4a138..da8e3fa7a46d7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false messenger: enabled: true mailer: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml index 75fa3cf889825..57febaaeb3109 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false mailer: enabled: false messenger: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_messenger.yml index 93d1f0aa190a7..9ff92d0ac74af 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_messenger.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_messenger.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false mailer: dsn: 'smtp://example.com' messenger: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_transports.yml index 856b0cd7c7a0e..081b7af9f12ff 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_transports.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_transports.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false notifier: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_disabled.yml index 958f75638ab75..c0091d3c480f3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_disabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false php_errors: throw: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_enabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_enabled.yml index f48531014e4fb..9080d5cccca3b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_enabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_enabled.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false php_errors: log: true throw: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_level.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_level.yml index e5cff7767dbe4..0cc44c7e8d1d9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_level.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_level.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false php_errors: log: 8 diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_levels.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_levels.yml index ad9fd30667de2..c8b4f7e5ebec0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_levels.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/php_errors_log_levels.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false php_errors: log: !php/const \E_NOTICE: !php/const Psr\Log\LogLevel::ERROR diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/profiler.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/profiler.yml index 9052a2bdfb0c8..13279e1958fa5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/profiler.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/profiler.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false profiler: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_accessor.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_accessor.yml index 931b50383f210..5e83cd44be75d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_accessor.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_accessor.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false property_access: magic_call: true magic_get: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_info.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_info.yml index fbdf7a7b0d715..60b9cb920975e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_info.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/property_info.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false property_info: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/request.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/request.yml index 9beae1dc59755..3e57df27cfa42 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/request.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/request.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false request: formats: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore.yml index 47b1323517b4c..fe53f99d2e15e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore.yml @@ -1,2 +1,3 @@ framework: + http_method_override: false semaphore: redis://localhost diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore_named.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore_named.yml index 0a29e4ea825e2..e1b9d1b69a229 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore_named.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/semaphore_named.yml @@ -2,6 +2,7 @@ parameters: env(REDIS_DSN): redis://paas.com framework: + http_method_override: false semaphore: foo: redis://paas.com qux: "%env(REDIS_DSN)%" diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_disabled.yml index 330e19a6976e7..2e9cd798dfad9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_disabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false serializer: enabled: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_enabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_enabled.yml index 40a1ff7d65b3b..47e8c356c7edd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_enabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_enabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false serializer: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_legacy_cache.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_legacy_cache.yml index 5fadc886ab1bc..5fd44373fcdda 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_legacy_cache.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_legacy_cache.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false serializer: enabled: true cache: foo diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_mapping.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_mapping.yml index 77c9d517a33b0..3291dc2a47777 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_mapping.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/serializer_mapping.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false annotations: enabled: true serializer: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session.yml index eb0df8d01c76c..51a14623654be 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false session: storage_factory_id: session.storage.factory.native handler_id: null diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session_cookie_secure_auto.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session_cookie_secure_auto.yml index 739b49b1e6ab9..d89a8f7aa1093 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session_cookie_secure_auto.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/session_cookie_secure_auto.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false session: storage_factory_id: session.storage.factory.native handler_id: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/ssi_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/ssi_disabled.yml index 3a8a820c71438..f3c359f7b95bb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/ssi_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/ssi_disabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false ssi: enabled: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_cache_dir_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_cache_dir_disabled.yml index 6ad1c7330f965..a6745633e011a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_cache_dir_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_cache_dir_disabled.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false translator: cache_dir: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_fallbacks.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_fallbacks.yml index 271d781184755..5534797b5b96c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_fallbacks.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/translator_fallbacks.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false translator: fallbacks: [en, fr] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_annotations.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_annotations.yml index 97b433f8cfb08..8595a0f533cd0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_annotations.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_annotations.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: s3cr3t validation: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_auto_mapping.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_auto_mapping.yml index 2564a8d243ef8..6a25af86ce34b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_auto_mapping.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_auto_mapping.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false property_info: { enabled: true } validation: auto_mapping: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_email_validation_mode.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_email_validation_mode.yml index a695e1a62a7d7..e8aebd9976fd1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_email_validation_mode.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_email_validation_mode.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false validation: email_validation_mode: html5 diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_mapping.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_mapping.yml index f05e33bb6c134..5b9859a3a284b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_mapping.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_mapping.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false validation: mapping: paths: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_multiple_static_methods.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_multiple_static_methods.yml index 6ca343351328a..350ef4472612e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_multiple_static_methods.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_multiple_static_methods.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: s3cr3t validation: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_no_static_method.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_no_static_method.yml index ca5214964259e..5c4d765ce0360 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_no_static_method.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_no_static_method.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: s3cr3t validation: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_translation_domain.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_translation_domain.yml index 167b5fcce85b1..c8b39054a2c81 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_translation_domain.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/validation_translation_domain.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false validation: translation_domain: messages diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/web_link.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/web_link.yml index 4276aacbe21c1..4cb63387696b8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/web_link.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/web_link.yml @@ -1,3 +1,4 @@ framework: + http_method_override: false web_link: enabled: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_not_valid.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_not_valid.yml index 123505de9754f..29eeb8e9ad18d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_not_valid.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_not_valid.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: my_workflow: type: state_machine diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_guard_expression.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_guard_expression.yml index 80a85a307b738..6855c013053b2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_guard_expression.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_guard_expression.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: article: type: workflow diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_multiple_transitions_with_same_name.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_multiple_transitions_with_same_name.yml index 12df7b79e7c4f..384bd47170bfa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_multiple_transitions_with_same_name.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_multiple_transitions_with_same_name.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: article: type: workflow diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_no_events_to_dispatch.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_no_events_to_dispatch.yml index e0a281f27db46..c511543df056d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_no_events_to_dispatch.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_no_events_to_dispatch.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: my_workflow: type: state_machine diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_specified_events_to_dispatch.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_specified_events_to_dispatch.yml index d5ff3d5e5fe0d..703195b557664 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_specified_events_to_dispatch.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_specified_events_to_dispatch.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: my_workflow: type: state_machine diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_support_and_support_strategy.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_support_and_support_strategy.yml index de0b36d8fa491..a57bc555b6fb7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_support_and_support_strategy.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_with_support_and_support_strategy.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: my_workflow: type: workflow diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_without_support_and_support_strategy.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_without_support_and_support_strategy.yml index de74adbe59b20..9ba3c88399cb7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_without_support_and_support_strategy.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflow_without_support_and_support_strategy.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: my_workflow: type: workflow diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml index e4ac9c01890e3..ff1b926b09997 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: article: type: workflow diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_enabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_enabled.yml index 2a716ff0a1b14..4c5f97f0b2a0d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_enabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_enabled.yml @@ -1,2 +1,3 @@ framework: + http_method_override: false workflows: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled.yml index bbecf4bfc420e..1ee334125e3d1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: enabled: true workflows: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled_named_workflows.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled_named_workflows.yml index 786e3bcad292e..0dcfc93a1c209 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled_named_workflows.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/workflows_explicitly_enabled_named_workflows.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false workflows: enabled: true workflows: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index e99bd83ba2028..1050dcf004d85 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -71,7 +71,6 @@ use Symfony\Component\Translation\DependencyInjection\TranslatorPass; use Symfony\Component\Translation\LocaleSwitcher; use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass; -use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader; use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Workflow; @@ -574,7 +573,7 @@ public function testRouterRequiresResourceOption() $this->expectException(InvalidConfigurationException::class); $container = $this->createContainer(); $loader = new FrameworkExtension(); - $loader->load([['router' => true]], $container); + $loader->load([['http_method_override' => false, 'router' => true]], $container); } public function testSession() @@ -1298,10 +1297,6 @@ public function testValidationMapping() public function testValidationAutoMapping() { - if (!class_exists(PropertyInfoLoader::class)) { - $this->markTestSkipped('Auto-mapping requires symfony/validation 4.2+'); - } - $container = $this->createContainerFromFile('validation_auto_mapping'); $parameter = [ 'App\\' => ['services' => ['foo', 'bar']], @@ -1726,11 +1721,11 @@ public function testCachePoolInvalidateTagsCommandRegistered() public function testRemovesResourceCheckerConfigCacheFactoryArgumentOnlyIfNoDebug() { $container = $this->createContainer(['kernel.debug' => true]); - (new FrameworkExtension())->load([], $container); + (new FrameworkExtension())->load([['http_method_override' => false]], $container); $this->assertCount(1, $container->getDefinition('config_cache_factory')->getArguments()); $container = $this->createContainer(['kernel.debug' => false]); - (new FrameworkExtension())->load([], $container); + (new FrameworkExtension())->load([['http_method_override' => false]], $container); $this->assertEmpty($container->getDefinition('config_cache_factory')->getArguments()); } @@ -1761,21 +1756,21 @@ public function testSessionCookieSecureAuto() public function testRobotsTagListenerIsRegisteredInDebugMode() { $container = $this->createContainer(['kernel.debug' => true]); - (new FrameworkExtension())->load([], $container); + (new FrameworkExtension())->load([['http_method_override' => false]], $container); $this->assertTrue($container->has('disallow_search_engine_index_response_listener'), 'DisallowRobotsIndexingListener should be registered'); $definition = $container->getDefinition('disallow_search_engine_index_response_listener'); $this->assertTrue($definition->hasTag('kernel.event_subscriber'), 'DisallowRobotsIndexingListener should have the correct tag'); $container = $this->createContainer(['kernel.debug' => true]); - (new FrameworkExtension())->load([['disallow_search_engine_index' => false]], $container); + (new FrameworkExtension())->load([['http_method_override' => false, 'disallow_search_engine_index' => false]], $container); $this->assertFalse( $container->has('disallow_search_engine_index_response_listener'), 'DisallowRobotsIndexingListener should not be registered when explicitly disabled' ); $container = $this->createContainer(['kernel.debug' => false]); - (new FrameworkExtension())->load([], $container); + (new FrameworkExtension())->load([['http_method_override' => false]], $container); $this->assertFalse($container->has('disallow_search_engine_index_response_listener'), 'DisallowRobotsIndexingListener should NOT be registered'); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php index d9f4b1192f456..9c9f12a010ed1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php @@ -31,6 +31,7 @@ public function testAssetsCannotHavePathAndUrl() $this->expectException(\LogicException::class); $this->createContainerFromClosure(function ($container) { $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'assets' => [ 'base_urls' => 'http://cdn.example.com', 'base_path' => '/foo', @@ -44,6 +45,7 @@ public function testAssetPackageCannotHavePathAndUrl() $this->expectException(\LogicException::class); $this->createContainerFromClosure(function ($container) { $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'assets' => [ 'packages' => [ 'impossible' => [ @@ -62,6 +64,7 @@ public function testWorkflowValidationStateMachine() $this->expectExceptionMessage('A transition from a place/state must have an unique name. Multiple transitions named "a_to_b" from place/state "a" were found on StateMachine "article".'); $this->createContainerFromClosure(function ($container) { $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'workflows' => [ 'article' => [ 'type' => 'state_machine', @@ -90,6 +93,7 @@ public function testRateLimiterWithLockFactory() try { $this->createContainerFromClosure(function (ContainerBuilder $container) { $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'lock' => false, 'rate_limiter' => [ 'with_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour'], @@ -104,6 +108,7 @@ public function testRateLimiterWithLockFactory() $container = $this->createContainerFromClosure(function (ContainerBuilder $container) { $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'lock' => true, 'rate_limiter' => [ 'with_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour'], @@ -119,6 +124,7 @@ public function testRateLimiterLockFactory() { $container = $this->createContainerFromClosure(function (ContainerBuilder $container) { $container->loadFromExtension('framework', [ + 'http_method_override' => false, 'rate_limiter' => [ 'without_lock' => ['policy' => 'fixed_window', 'limit' => 10, 'interval' => '1 hour', 'lock_factory' => null], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/RouterDebugCommandTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/RouterDebugCommandTest.php index 82e6bf8bb1505..7390a124c3c0a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/RouterDebugCommandTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/RouterDebugCommandTest.php @@ -92,10 +92,6 @@ public function testSearchWithThrow() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $tester = new CommandCompletionTester($this->application->get('debug:router')); $this->assertSame($expectedSuggestions, $tester->complete($input)); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AutowiringTypes/no_annotations_cache.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AutowiringTypes/no_annotations_cache.yml index fec387d87962d..87794f637eef6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AutowiringTypes/no_annotations_cache.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AutowiringTypes/no_annotations_cache.yml @@ -2,5 +2,6 @@ imports: - { resource: config.yml } framework: + http_method_override: false annotations: cache: none diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/BundlePaths/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/BundlePaths/config.yml index 82a5a5422ab7d..7ce5cde031c7d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/BundlePaths/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/BundlePaths/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ../config/default.yml } framework: + http_method_override: false translator: true validation: true serializer: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePoolClear/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePoolClear/config.yml index b991dd593148d..a5e861089e679 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePoolClear/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePoolClear/config.yml @@ -12,6 +12,7 @@ services: - name: kernel.cache_clearer framework: + http_method_override: false cache: pools: cache.private_pool: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/config.yml index d7733e0e3217f..119d9d7280787 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/config.yml @@ -6,6 +6,7 @@ parameters: env(LIFETIME_EXPRESSION): '13 seconds' framework: + http_method_override: false cache: pools: cache.pool1: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_config.yml index e5ec8c4effbc4..727cde9227279 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_config.yml @@ -5,6 +5,7 @@ parameters: env(REDIS_HOST): 'localhost' framework: + http_method_override: false cache: app: cache.adapter.redis default_redis_provider: "redis://%env(REDIS_HOST)%" diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_custom_config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_custom_config.yml index 419ee07a0aba0..172508c0208a8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_custom_config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/CachePools/redis_custom_config.yml @@ -18,6 +18,7 @@ services: provider: cache.test_redis_connection framework: + http_method_override: false cache: pools: cache.pool1: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ConfigDump/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ConfigDump/config.yml index 6dba635a15555..6793268174bc8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ConfigDump/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ConfigDump/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ../config/default.yml } framework: + http_method_override: false secret: '%secret%' default_locale: '%env(LOCALE)%' enabled_locales: ['%env(LOCALE)%'] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDump/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDump/config.yml index be0eab4d5645e..3efa5f950450e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDump/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDump/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ../config/default.yml } framework: + http_method_override: false esi: true ssi: true fragments: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Fragment/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Fragment/config.yml index 16fc81dd268d4..b22016f1e4e34 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Fragment/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Fragment/config.yml @@ -3,6 +3,7 @@ imports: - { resource: services.yml } framework: + http_method_override: false fragments: ~ twig: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Mailer/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Mailer/config.yml index b464a41a0d857..2ea7269e629aa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Mailer/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Mailer/config.yml @@ -3,6 +3,7 @@ imports: - { resource: services.yml } framework: + http_method_override: false mailer: dsn: 'null://null' envelope: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Profiler/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Profiler/config.yml index 12ce67e548ea0..ca38aa1aeef5c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Profiler/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Profiler/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ../config/default.yml } framework: + http_method_override: false profiler: enabled: true collect: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ProfilerCollectParameter/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ProfilerCollectParameter/config.yml index 67360dd321681..67dbec31f1949 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ProfilerCollectParameter/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ProfilerCollectParameter/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ../config/default.yml } framework: + http_method_override: false profiler: enabled: true collect: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml index 3721de1cac584..5c3c7e132339e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ../config/default.yml } framework: + http_method_override: false serializer: enabled: true default_context: diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Slugger/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Slugger/config.yml index 669edf5667611..1af9cd9bd32ce 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Slugger/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Slugger/config.yml @@ -3,6 +3,7 @@ imports: - { resource: services.yml } framework: + http_method_override: false secret: '%secret%' default_locale: '%env(LOCALE)%' enabled_locales: ['%env(LOCALE)%'] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/config.yml index 84af2df662717..472c4cdcc02dd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/config.yml @@ -3,4 +3,5 @@ imports: - { resource: services.yml } framework: + http_method_override: false test: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/test_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/test_disabled.yml index 6f1b62e4a7a22..6f75b77e7cbb4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/test_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/test_disabled.yml @@ -3,4 +3,5 @@ imports: - { resource: services.yml } framework: + http_method_override: false test: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TransDebug/config.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TransDebug/config.yml index 1cd6417b937b1..5ca63a12b8ca9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TransDebug/config.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TransDebug/config.yml @@ -3,6 +3,7 @@ imports: - { resource: services.yml } framework: + http_method_override: false secret: '%secret%' default_locale: '%env(LOCALE)%' enabled_locales: ['%env(LOCALE)%'] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_disabled.yml index 352c1451e350b..5e6428618b3ee 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_disabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_disabled.yml @@ -2,5 +2,6 @@ imports: - { resource: "../config/default.yml" } framework: + http_method_override: false uid: enabled: false diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_enabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_enabled.yml index f3139be1d19e5..f6d1682c99eb5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_enabled.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Uid/config_enabled.yml @@ -2,4 +2,5 @@ imports: - { resource: "../config/default.yml" } framework: + http_method_override: false uid: ~ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/config/framework.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/config/framework.yml index c4087e32f585f..e13e9c1c3c782 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/config/framework.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/config/framework.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: test router: { resource: "%kernel.project_dir%/%kernel.test_case%/routing.yml", utf8: true } validation: { enabled: true, enable_annotations: true } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/ConcreteMicroKernel.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/ConcreteMicroKernel.php index d9dd700efd92e..36ba1df088a7a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/ConcreteMicroKernel.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/ConcreteMicroKernel.php @@ -83,6 +83,7 @@ protected function configureContainer(ContainerBuilder $c, LoaderInterface $load { $c->register('logger', NullLogger::class); $c->loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => '$ecret', 'router' => ['utf8' => true], ]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/MicroKernelTraitTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/MicroKernelTraitTest.php index 2a3cebb7fdf17..64fef6e405c20 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/MicroKernelTraitTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/MicroKernelTraitTest.php @@ -94,6 +94,11 @@ public function testFlexStyle() $response = $kernel->handle($request); $this->assertEquals('Have a great day!', $response->getContent()); + + $request = Request::create('/easter'); + $response = $kernel->handle($request); + + $this->assertSame('easter', $response->getContent()); } public function testSecretLoadedFromExtension() @@ -115,6 +120,7 @@ public function helloAction(): Response protected function configureContainer(ContainerConfigurator $c): void { $c->extension('framework', [ + 'http_method_override' => false, 'router' => ['utf8' => true], ]); $c->services()->set('logger', NullLogger::class); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/flex-style/src/FlexStyleMicroKernel.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/flex-style/src/FlexStyleMicroKernel.php index ecc693367d544..d3aaeb6d387fc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/flex-style/src/FlexStyleMicroKernel.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/flex-style/src/FlexStyleMicroKernel.php @@ -18,11 +18,14 @@ use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Kernel; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; class FlexStyleMicroKernel extends Kernel { - use MicroKernelTrait; + use MicroKernelTrait { + configureRoutes as traitConfigureRoutes; + } private $cacheDir; @@ -31,6 +34,12 @@ public function halloweenAction(\stdClass $o) return new Response($o->halloween); } + #[Route('/easter')] + public function easterAction() + { + return new Response('easter'); + } + public function createHalloween(LoggerInterface $logger, string $halloween) { $o = new \stdClass(); @@ -73,6 +82,8 @@ public function __destruct() protected function configureRoutes(RoutingConfigurator $routes): void { + $this->traitConfigureRoutes($routes); + $routes->add('halloween', '/')->controller([$this, 'halloweenAction']); $routes->add('halloween2', '/h')->controller($this->halloweenAction(...)); } @@ -89,6 +100,6 @@ protected function configureContainer(ContainerConfigurator $c): void ->factory([$this, 'createHalloween']) ->arg('$halloween', '%halloween%'); - $c->extension('framework', ['router' => ['utf8' => true]]); + $c->extension('framework', ['http_method_override' => false, 'router' => ['utf8' => true]]); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RedirectableCompiledUrlMatcherTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RedirectableCompiledUrlMatcherTest.php index bf61409d4ee2f..29126e130b561 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RedirectableCompiledUrlMatcherTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RedirectableCompiledUrlMatcherTest.php @@ -18,9 +18,6 @@ use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; -/** - * @requires function \Symfony\Component\Routing\Matcher\CompiledUrlMatcher::match - */ class RedirectableCompiledUrlMatcherTest extends TestCase { public function testRedirectWhenNoSlash() diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php index f6098ea6e8eca..8c43917df6f5e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php @@ -23,7 +23,6 @@ use Symfony\Component\HttpFoundation\Cookie as HttpFoundationCookie; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpFoundation\Test\Constraint\ResponseFormatSame; class WebTestCaseTest extends TestCase { @@ -78,10 +77,6 @@ public function testAssertResponseRedirectsWithLocationAndStatusCode() public function testAssertResponseFormat() { - if (!class_exists(ResponseFormatSame::class)) { - $this->markTestSkipped('Too old version of HttpFoundation.'); - } - $this->getResponseTester(new Response('', 200, ['Content-Type' => 'application/vnd.myformat']))->assertResponseFormatSame('custom'); $this->getResponseTester(new Response('', 200, ['Content-Type' => 'application/ld+json']))->assertResponseFormatSame('jsonld'); $this->getResponseTester(new Response())->assertResponseFormatSame(null); diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index 8a44eff41ac86..8dbce027bfbb7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -34,7 +34,7 @@ }, "require-dev": { "doctrine/annotations": "^1.13.1", - "doctrine/persistence": "^1.3|^2.0", + "doctrine/persistence": "^1.3|^2|^3", "symfony/asset": "^5.4|^6.0", "symfony/browser-kit": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php index 92287664ece41..2a85c2486c8f1 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php @@ -16,7 +16,6 @@ use Symfony\Component\Config\Definition\Builder\NodeDefinition; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; use Symfony\Component\Config\FileLocator; -use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -71,6 +70,7 @@ public function createAuthenticator(ContainerBuilder $container, string $firewal $tokenVerifier = $this->createTokenVerifier($container, $firewallName, $config['token_verifier'] ?? null); $container->setDefinition($rememberMeHandlerId, new ChildDefinition('security.authenticator.persistent_remember_me_handler')) ->replaceArgument(0, new Reference($tokenProviderId)) + ->replaceArgument(1, $config['secret']) ->replaceArgument(2, new Reference($userProviderId)) ->replaceArgument(4, $config) ->replaceArgument(6, $tokenVerifier) @@ -79,6 +79,7 @@ public function createAuthenticator(ContainerBuilder $container, string $firewal $signatureHasherId = 'security.authenticator.remember_me_signature_hasher.'.$firewallName; $container->setDefinition($signatureHasherId, new ChildDefinition('security.authenticator.remember_me_signature_hasher')) ->replaceArgument(1, $config['signature_properties']) + ->replaceArgument(2, $config['secret']) ; $container->setDefinition($rememberMeHandlerId, new ChildDefinition('security.authenticator.signature_remember_me_handler')) @@ -140,7 +141,10 @@ public function addConfiguration(NodeDefinition $node) ; $builder - ->scalarNode('secret')->isRequired()->cannotBeEmpty()->end() + ->scalarNode('secret') + ->cannotBeEmpty() + ->defaultValue('%kernel.secret%') + ->end() ->scalarNode('service')->end() ->arrayNode('user_providers') ->beforeNormalization() @@ -189,54 +193,6 @@ public function addConfiguration(NodeDefinition $node) } } - private function generateRememberMeServicesTemplateId(array $config, string $id): string - { - if (isset($config['service'])) { - return $config['service']; - } - - if (isset($config['token_provider'])) { - return 'security.authentication.rememberme.services.persistent'; - } - - return 'security.authentication.rememberme.services.simplehash'; - } - - private function createRememberMeServices(ContainerBuilder $container, string $id, string $templateId, array $userProviders, array $config): void - { - $rememberMeServicesId = $templateId.'.'.$id; - - $rememberMeServices = $container->setDefinition($rememberMeServicesId, new ChildDefinition($templateId)); - $rememberMeServices->replaceArgument(1, $config['secret']); - $rememberMeServices->replaceArgument(2, $id); - - if (isset($config['token_provider'])) { - $tokenProviderId = $this->createTokenProvider($container, $id, $config['token_provider']); - $rememberMeServices->addMethodCall('setTokenProvider', [new Reference($tokenProviderId)]); - } - - // remember-me options - $mergedOptions = array_intersect_key($config, $this->options); - if ('auto' === $mergedOptions['secure']) { - $mergedOptions['secure'] = null; - } - - $rememberMeServices->replaceArgument(3, $mergedOptions); - - if ($config['user_providers']) { - $userProviders = []; - foreach ($config['user_providers'] as $providerName) { - $userProviders[] = new Reference('security.user.provider.concrete.'.$providerName); - } - } - - if (0 === \count($userProviders)) { - throw new \RuntimeException('You must configure at least one remember-me aware listener (such as form-login) for each firewall that has remember-me enabled.'); - } - - $rememberMeServices->replaceArgument(0, new IteratorArgument(array_unique($userProviders))); - } - private function createTokenProvider(ContainerBuilder $container, string $firewallName, array $config): string { $tokenProviderId = $config['service'] ?? false; diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php index e9dfde9344fcd..bc4d9fe8876be 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php @@ -146,7 +146,7 @@ private function createContainer($sessionStorageOptions) ]; $ext = new FrameworkExtension(); - $ext->load(['framework' => ['csrf_protection' => false, 'router' => ['resource' => 'dummy', 'utf8' => true]]], $container); + $ext->load(['framework' => ['http_method_override' => false, 'csrf_protection' => false, 'router' => ['resource' => 'dummy', 'utf8' => true]]], $container); $ext = new SecurityExtension(); $ext->load($config, $container); diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php index bb74850729a58..5323c16f3b2a1 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php @@ -468,6 +468,46 @@ public function testCustomRememberMeHandler() $this->assertEquals([['firewall' => 'default']], $handler->getTag('security.remember_me_handler')); } + public function testSecretRememberMeHasher() + { + $container = $this->getRawContainer(); + + $container->register('custom_remember_me', \stdClass::class); + $container->loadFromExtension('security', [ + 'enable_authenticator_manager' => true, + 'firewalls' => [ + 'default' => [ + 'remember_me' => ['secret' => 'very'], + ], + ], + ]); + + $container->compile(); + + $handler = $container->getDefinition('security.authenticator.remember_me_signature_hasher.default'); + $this->assertSame('very', $handler->getArgument(2)); + } + + public function testSecretRememberMeHandler() + { + $container = $this->getRawContainer(); + + $container->register('custom_remember_me', \stdClass::class); + $container->loadFromExtension('security', [ + 'enable_authenticator_manager' => true, + 'firewalls' => [ + 'default' => [ + 'remember_me' => ['secret' => 'very', 'token_provider' => 'token_provider_id'], + ], + ], + ]); + + $container->compile(); + + $handler = $container->getDefinition('security.authenticator.remember_me_handler.default'); + $this->assertSame('very', $handler->getArgument(1)); + } + public function sessionConfigurationProvider() { return [ diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/Authenticator/config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/Authenticator/config.yml index 9bf5d2aa8201f..a6adcfd0c775b 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/Authenticator/config.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/Authenticator/config.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: test router: { resource: "%kernel.project_dir%/%kernel.test_case%/routing.yml", utf8: true } test: ~ diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config.yml index 758364eaed248..a613f5f24ca7e 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/FirewallEntryPoint/config.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: test router: { resource: "%kernel.project_dir%/%kernel.test_case%/routing.yml", utf8: true } validation: { enabled: true, enable_annotations: true } diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/config.yml index 4a8cacb279b1f..2c80b9383bb28 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/config.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/config.yml @@ -2,6 +2,7 @@ imports: - { resource: ./../config/framework.yml } framework: + http_method_override: false serializer: ~ security: diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/legacy_config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/legacy_config.yml index d0d03c914c48f..022263a978e6d 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/legacy_config.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/legacy_config.yml @@ -2,6 +2,7 @@ imports: - { resource: ./../config/framework.yml } framework: + http_method_override: false serializer: ~ security: diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/RememberMe/stateless_config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/RememberMe/stateless_config.yml index cf9102da35a08..31053f856373d 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/RememberMe/stateless_config.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/RememberMe/stateless_config.yml @@ -3,6 +3,7 @@ imports: - { resource: ./config_session.yml } framework: + http_method_override: false session: cookie_secure: auto cookie_samesite: lax diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/login_throttling.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/login_throttling.yml index fa94d30dc00cc..5f22f41780cd0 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/login_throttling.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/login_throttling.yml @@ -2,6 +2,7 @@ imports: - { resource: ./base_config.yml } framework: + http_method_override: false lock: ~ rate_limiter: ~ diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/config/framework.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/config/framework.yml index 55186cd76bd3f..a86c944552644 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/config/framework.yml +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/config/framework.yml @@ -1,4 +1,5 @@ framework: + http_method_override: false secret: test router: { resource: "%kernel.project_dir%/%kernel.test_case%/routing.yml", utf8: true } validation: { enabled: true, enable_annotations: true } diff --git a/src/Symfony/Bundle/TwigBundle/CHANGELOG.md b/src/Symfony/Bundle/TwigBundle/CHANGELOG.md index e082ba6501c36..aaa0ae400f7a1 100644 --- a/src/Symfony/Bundle/TwigBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/TwigBundle/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Add option `twig.file_name_pattern` to restrict which files are compiled by cache warmer and linter + * Deprecate option `twig.autoescape`, use `twig.autoescape_service[_method]` instead 6.0 --- diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php index 83654fb4813e0..b85a3bf4b1958 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php @@ -127,7 +127,10 @@ private function addTwigOptions(ArrayNodeDefinition $rootNode) $rootNode ->fixXmlConfig('path') ->children() - ->variableNode('autoescape')->defaultValue('name')->end() + ->variableNode('autoescape') + ->defaultValue('name') + ->setDeprecated('symfony/twig-bundle', '6.1', 'Option "%node%" at "%path%" is deprecated, use autoescape_service[_method] instead.') + ->end() ->scalarNode('autoescape_service')->defaultNull()->end() ->scalarNode('autoescape_service_method')->defaultNull()->end() ->scalarNode('base_template_class')->example('Twig\Template')->cannotBeEmpty()->end() diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php index 8dd2be40960b1..9e7b500795ec6 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php +++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/php/full.php @@ -11,7 +11,6 @@ 'bad' => ['key' => 'foo'], ], 'auto_reload' => true, - 'autoescape' => true, 'base_template_class' => 'stdClass', 'cache' => '/tmp', 'charset' => 'ISO-8859-1', diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml index 17bcf0acd4490..92767e411057f 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml +++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/extra.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/twig https://symfony.com/schema/dic/twig/twig-1.0.xsd"> - + namespaced_path3 diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml index 8ece3b80b794d..3f7d1de266ec5 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml +++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/xml/full.xml @@ -6,7 +6,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/twig https://symfony.com/schema/dic/twig/twig-1.0.xsd"> - + MyBundle::form.html.twig @@qux diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml index 24c10c23fe8f1..d186724539927 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml +++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Fixtures/yml/full.yml @@ -7,7 +7,6 @@ twig: pi: 3.14 bad: {key: foo} auto_reload: true - autoescape: true base_template_class: stdClass cache: /tmp charset: ISO-8859-1 diff --git a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php index 361e0b8b24d0c..cd60cbb7fd9e3 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php +++ b/src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php @@ -82,7 +82,7 @@ public function testLoadFullConfiguration($format) // Twig options $options = $container->getDefinition('twig')->getArgument(1); $this->assertTrue($options['auto_reload'], '->load() sets the auto_reload option'); - $this->assertTrue($options['autoescape'], '->load() sets the autoescape option'); + $this->assertSame('name', $options['autoescape'], '->load() sets the autoescape option'); $this->assertEquals('stdClass', $options['base_template_class'], '->load() sets the base_template_class option'); $this->assertEquals('/tmp', $options['cache'], '->load() sets the cache option'); $this->assertEquals('ISO-8859-1', $options['charset'], '->load() sets the charset option'); diff --git a/src/Symfony/Bundle/TwigBundle/Tests/Functional/NoTemplatingEntryTest.php b/src/Symfony/Bundle/TwigBundle/Tests/Functional/NoTemplatingEntryTest.php index b571d1cc76094..691430ead578b 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/Functional/NoTemplatingEntryTest.php +++ b/src/Symfony/Bundle/TwigBundle/Tests/Functional/NoTemplatingEntryTest.php @@ -64,6 +64,7 @@ public function registerContainerConfiguration(LoaderInterface $loader) $loader->load(function (ContainerBuilder $container) { $container ->loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => '$ecret', 'form' => ['enabled' => false], ]) diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig index 3eb59b87b6467..3d75aeda99e50 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig @@ -369,13 +369,13 @@ if (typeof Sfjs === 'undefined' || typeof Sfjs.loadToolbar === 'undefined') { /* prevent logging AJAX calls to static and inline files, like templates */ var path = url; - if (url.substr(0, 1) === '/') { + if (url.slice(0, 1) === '/') { if (0 === url.indexOf('{{ request.basePath|e('js') }}')) { - path = url.substr({{ request.basePath|length }}); + path = url.slice({{ request.basePath|length }}); } } else if (0 === url.indexOf('{{ (request.schemeAndHttpHost ~ request.basePath)|e('js') }}')) { - path = url.substr({{ (request.schemeAndHttpHost ~ request.basePath)|length }}); + path = url.slice({{ (request.schemeAndHttpHost ~ request.basePath)|length }}); } if (!path.match(new RegExp({{ excluded_ajax_paths|json_encode|raw }}))) { diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php index 8078b0986f68c..7ec3cbfd72ea1 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/Functional/WebProfilerBundleKernel.php @@ -51,6 +51,7 @@ protected function configureRoutes(RoutingConfigurator $routes): void protected function configureContainer(ContainerBuilder $containerBuilder, LoaderInterface $loader): void { $containerBuilder->loadFromExtension('framework', [ + 'http_method_override' => false, 'secret' => 'foo-secret', 'profiler' => ['only_exceptions' => false], 'session' => ['storage_factory_id' => 'session.storage.factory.mock_file'], diff --git a/src/Symfony/Component/Cache/Adapter/TagAwareAdapter.php b/src/Symfony/Component/Cache/Adapter/TagAwareAdapter.php index 7e7395b71281a..732d024290982 100644 --- a/src/Symfony/Component/Cache/Adapter/TagAwareAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/TagAwareAdapter.php @@ -39,7 +39,6 @@ class TagAwareAdapter implements TagAwareAdapterInterface, TagAwareCacheInterfac use LoggerAwareTrait; public const TAGS_PREFIX = "\0tags\0"; - private const MAX_NUMBER_OF_KNOWN_TAG_VERSIONS = 1000; private array $deferred = []; private AdapterInterface $pool; @@ -79,8 +78,7 @@ static function (array $items, array $itemTags) { ); self::$setTagVersions ??= \Closure::bind( static function (array $items, array $tagVersions) { - $now = null; - foreach ($items as $key => $item) { + foreach ($items as $item) { $item->newMetadata[CacheItem::METADATA_TAGS] = array_intersect_key($tagVersions, $item->newMetadata[CacheItem::METADATA_TAGS] ?? []); } }, @@ -343,14 +341,16 @@ public function __destruct() private function getTagVersions(array $tagsByKey, bool $persistTags): array { $tagVersions = []; - $fetchTagVersions = false; + $fetchTagVersions = $persistTags; foreach ($tagsByKey as $tags) { $tagVersions += $tags; - + if ($fetchTagVersions) { + continue; + } foreach ($tags as $tag => $version) { if ($tagVersions[$tag] !== $version) { - unset($this->knownTagVersions[$tag]); + $fetchTagVersions = true; } } } @@ -364,14 +364,10 @@ private function getTagVersions(array $tagsByKey, bool $persistTags): array foreach ($tagVersions as $tag => $version) { $tags[$tag.static::TAGS_PREFIX] = $tag; $knownTagVersion = $this->knownTagVersions[$tag] ?? [0, null]; - if ($fetchTagVersions || $knownTagVersion[1] !== $version || $now - $knownTagVersion[0] >= $this->knownTagVersionsTtl) { - // reuse previously fetched tag versions up to the ttl + if ($fetchTagVersions || $now > $knownTagVersion[0] || $knownTagVersion[1] !== $version) { + // reuse previously fetched tag versions until the expiration $fetchTagVersions = true; } - unset($this->knownTagVersions[$tag]); // For LRU tracking - if ([0, null] !== $knownTagVersion) { - $this->knownTagVersions[$tag] = $knownTagVersion; - } } if (!$fetchTagVersions) { @@ -380,20 +376,24 @@ private function getTagVersions(array $tagsByKey, bool $persistTags): array $newTags = []; $newVersion = null; + $expiration = $now + $this->knownTagVersionsTtl; foreach ($this->tags->getItems(array_keys($tags)) as $tag => $version) { - if (!$version->isHit()) { + unset($this->knownTagVersions[$tag = $tags[$tag]]); // update FIFO + if (null !== $tagVersions[$tag] = $version->get()) { + $this->knownTagVersions[$tag] = [$expiration, $tagVersions[$tag]]; + } elseif ($persistTags) { $newTags[$tag] = $version->set($newVersion ??= random_bytes(6)); + $tagVersions[$tag] = $newVersion; + $this->knownTagVersions[$tag] = [$expiration, $newVersion]; } - $tagVersions[$tag = $tags[$tag]] = $version->get(); - $this->knownTagVersions[$tag] = [$now, $tagVersions[$tag]]; } - if ($newTags && $persistTags) { + if ($newTags) { (self::$saveTags)($this->tags, $newTags); } - if (\count($this->knownTagVersions) > $maxTags = max(self::MAX_NUMBER_OF_KNOWN_TAG_VERSIONS, \count($newTags) << 1)) { - array_splice($this->knownTagVersions, 0, $maxTags >> 1); + while ($now > ($this->knownTagVersions[$tag = array_key_first($this->knownTagVersions)][0] ?? \INF)) { + unset($this->knownTagVersions[$tag]); } return $tagVersions; diff --git a/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php index 5d6c52892b45f..a85ef77e132e4 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Cache\Tests\Adapter; use PHPUnit\Framework\MockObject\MockObject; -use Psr\Cache\CacheItemInterface; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\AdapterInterface; use Symfony\Component\Cache\Adapter\ArrayAdapter; @@ -67,15 +66,18 @@ public function testKnownTagVersionsTtl() $pool->save($item); $this->assertTrue($pool->getItem('foo')->isHit()); - $this->assertTrue($pool->getItem('foo')->isHit()); - sleep(20); + $tagsPool->deleteItem('baz'.TagAwareAdapter::TAGS_PREFIX); // tag invalidation - $this->assertTrue($pool->getItem('foo')->isHit()); + $this->assertTrue($pool->getItem('foo')->isHit()); // known tag version is used - sleep(5); + sleep(10); - $this->assertTrue($pool->getItem('foo')->isHit()); + $this->assertTrue($pool->getItem('foo')->isHit()); // known tag version is still used + + sleep(1); + + $this->assertFalse($pool->getItem('foo')->isHit()); // known tag version has expired } public function testInvalidateTagsWithArrayAdapter() @@ -125,4 +127,109 @@ private function getNonPruneableMock(): AdapterInterface&MockObject { return $this->createMock(AdapterInterface::class); } + + /** + * @doesNotPerformAssertions + */ + public function testToleranceForStringsAsTagVersionsCase1() + { + $pool = $this->createCachePool(); + $adapter = new FilesystemAdapter(); + + $itemKey = 'foo'; + $tag = $adapter->getItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $adapter->save($tag->set("\x00abc\xff")); + $item = $pool->getItem($itemKey); + $pool->save($item->tag('bar')); + $pool->hasItem($itemKey); + $pool->getItem($itemKey); + } + + /** + * @doesNotPerformAssertions + */ + public function testToleranceForStringsAsTagVersionsCase2() + { + $pool = $this->createCachePool(); + $adapter = new FilesystemAdapter(); + + $itemKey = 'foo'; + $tag = $adapter->getItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $adapter->save($tag->set("\x00abc\xff")); + $item = $pool->getItem($itemKey); + $pool->save($item->tag('bar')); + sleep(100); + $pool->getItem($itemKey); + $pool->hasItem($itemKey); + } + + /** + * @doesNotPerformAssertions + */ + public function testToleranceForStringsAsTagVersionsCase3() + { + $pool = $this->createCachePool(); + $adapter = new FilesystemAdapter(); + + $itemKey = 'foo'; + $adapter->deleteItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $item = $pool->getItem($itemKey); + $pool->save($item->tag('bar')); + $pool->getItem($itemKey); + + $tag = $adapter->getItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $adapter->save($tag->set("\x00abc\xff")); + + $pool->hasItem($itemKey); + $pool->getItem($itemKey); + sleep(100); + $pool->getItem($itemKey); + $pool->hasItem($itemKey); + } + + /** + * @doesNotPerformAssertions + */ + public function testToleranceForStringsAsTagVersionsCase4() + { + $pool = $this->createCachePool(); + $adapter = new FilesystemAdapter(); + + $itemKey = 'foo'; + $tag = $adapter->getItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $adapter->save($tag->set('abcABC')); + + $item = $pool->getItem($itemKey); + $pool->save($item->tag('bar')); + + $tag = $adapter->getItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $adapter->save($tag->set('001122')); + + $pool->invalidateTags(['bar']); + $pool->getItem($itemKey); + } + + /** + * @doesNotPerformAssertions + */ + public function testToleranceForStringsAsTagVersionsCase5() + { + $pool = $this->createCachePool(); + $pool2 = $this->createCachePool(); + $adapter = new FilesystemAdapter(); + + $itemKey1 = 'foo'; + $item = $pool->getItem($itemKey1); + $pool->save($item->tag('bar')); + + $tag = $adapter->getItem('bar'.TagAwareAdapter::TAGS_PREFIX); + $adapter->save($tag->set('abcABC')); + + $itemKey2 = 'baz'; + $item = $pool2->getItem($itemKey2); + $pool2->save($item->tag('bar')); + foreach ($pool->getItems([$itemKey1, $itemKey2]) as $item) { + // run generator + } + } } diff --git a/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationDispatcherTest.php b/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationDispatcherTest.php index 7d5d89aa9c364..a471cc18d1045 100644 --- a/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationDispatcherTest.php +++ b/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationDispatcherTest.php @@ -26,9 +26,6 @@ use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\MessageBusInterface; -/** - * @requires function Symfony\Component\DependencyInjection\ReverseContainer::__construct - */ class EarlyExpirationDispatcherTest extends TestCase { public static function tearDownAfterClass(): void diff --git a/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationHandlerTest.php b/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationHandlerTest.php index 66df7ed9d4d60..7335ad4b67514 100644 --- a/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationHandlerTest.php +++ b/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationHandlerTest.php @@ -21,9 +21,6 @@ use Symfony\Component\DependencyInjection\ServiceLocator; use Symfony\Component\Filesystem\Filesystem; -/** - * @requires function Symfony\Component\DependencyInjection\ReverseContainer::__construct - */ class EarlyExpirationHandlerTest extends TestCase { public static function tearDownAfterClass(): void diff --git a/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationMessageTest.php b/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationMessageTest.php index 038357a499718..9d8a643d65b1b 100644 --- a/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationMessageTest.php +++ b/src/Symfony/Component/Cache/Tests/Messenger/EarlyExpirationMessageTest.php @@ -19,9 +19,6 @@ use Symfony\Component\DependencyInjection\ReverseContainer; use Symfony\Component\DependencyInjection\ServiceLocator; -/** - * @requires function Symfony\Component\DependencyInjection\ReverseContainer::__construct - */ class EarlyExpirationMessageTest extends TestCase { public function testCreate() diff --git a/src/Symfony/Component/Config/Resource/GlobResource.php b/src/Symfony/Component/Config/Resource/GlobResource.php index 786cff3e5c29c..964066cde69eb 100644 --- a/src/Symfony/Component/Config/Resource/GlobResource.php +++ b/src/Symfony/Component/Config/Resource/GlobResource.php @@ -167,28 +167,31 @@ function (\SplFileInfo $file, $path) { throw new \LogicException(sprintf('Extended glob pattern "%s" cannot be used as the Finder component is not installed.', $this->pattern)); } - $finder = new Finder(); $regex = Glob::toRegex($this->pattern); if ($this->recursive) { $regex = substr_replace($regex, '(/|$)', -2, 1); } $prefixLen = \strlen($this->prefix); - foreach ($finder->followLinks()->sortByName()->in($this->prefix) as $path => $info) { - $normalizedPath = str_replace('\\', '/', $path); - if (!preg_match($regex, substr($normalizedPath, $prefixLen)) || !$info->isFile()) { - continue; - } - if ($this->excludedPrefixes) { - do { - if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) { - continue 2; - } - } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath)); - } - yield $path => $info; - } + yield from (new Finder()) + ->followLinks() + ->filter(function (\SplFileInfo $info) use ($regex, $prefixLen, $prefix) { + $normalizedPath = str_replace('\\', '/', $info->getPathname()); + if (!preg_match($regex, substr($normalizedPath, $prefixLen)) || !$info->isFile()) { + return false; + } + if ($this->excludedPrefixes) { + do { + if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) { + return false; + } + } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath)); + } + }) + ->sortByName() + ->in($this->prefix) + ; } private function computeHash(): string diff --git a/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php index 637b21125d2b6..1eb3eeed7de5b 100644 --- a/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php @@ -714,9 +714,6 @@ public function testNoInteraction() $this->assertEquals('not yet', $dialog->ask($this->createStreamableInputInterfaceMock(null, false), $this->createOutputInterface(), $question)); } - /** - * @requires function mb_strwidth - */ public function testChoiceOutputFormattingQuestionForUtf8Keys() { $question = 'Lorem ipsum?'; diff --git a/src/Symfony/Component/DependencyInjection/Attribute/AsDecorator.php b/src/Symfony/Component/DependencyInjection/Attribute/AsDecorator.php new file mode 100644 index 0000000000000..0f80c16e974dc --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Attribute/AsDecorator.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\DependencyInjection\Attribute; + +use Symfony\Component\DependencyInjection\ContainerInterface; + +#[\Attribute(\Attribute::TARGET_CLASS)] +class AsDecorator +{ + public function __construct( + public string $decorates, + public int $priority = 0, + public int $onInvalid = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, + ) { + } +} diff --git a/src/Symfony/Component/DependencyInjection/Attribute/MapDecorated.php b/src/Symfony/Component/DependencyInjection/Attribute/MapDecorated.php new file mode 100644 index 0000000000000..4fbbf68c62492 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Attribute/MapDecorated.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\DependencyInjection\Attribute; + +#[\Attribute(\Attribute::TARGET_PARAMETER)] +class MapDecorated +{ +} diff --git a/src/Symfony/Component/DependencyInjection/Attribute/When.php b/src/Symfony/Component/DependencyInjection/Attribute/When.php index 3114115fd22ef..60b7af04b6e21 100644 --- a/src/Symfony/Component/DependencyInjection/Attribute/When.php +++ b/src/Symfony/Component/DependencyInjection/Attribute/When.php @@ -16,7 +16,7 @@ * * @author Nicolas Grekas */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::TARGET_FUNCTION | \Attribute::IS_REPEATABLE)] class When { public function __construct( diff --git a/src/Symfony/Component/DependencyInjection/CHANGELOG.md b/src/Symfony/Component/DependencyInjection/CHANGELOG.md index 0bb0d6a7063db..ced60bd357c4c 100644 --- a/src/Symfony/Component/DependencyInjection/CHANGELOG.md +++ b/src/Symfony/Component/DependencyInjection/CHANGELOG.md @@ -4,6 +4,8 @@ CHANGELOG 6.1 --- + * Add `#[MapDecorated]` attribute telling to which parameter the decorated service should be mapped in a decorator + * Add `#[AsDecorator]` attribute to make a service decorates another * Add `$exclude` to `TaggedIterator` and `TaggedLocator` attributes * Add `$exclude` to `tagged_iterator` and `tagged_locator` configurator * Add an `env` function to the expression language provider diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowireAsDecoratorPass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowireAsDecoratorPass.php new file mode 100644 index 0000000000000..66eed9a37fa77 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowireAsDecoratorPass.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Attribute\AsDecorator; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; + +/** + * Reads #[AsDecorator] attributes on definitions that are autowired + * and don't have the "container.ignore_attributes" tag. + */ +final class AutowireAsDecoratorPass implements CompilerPassInterface +{ + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + foreach ($container->getDefinitions() as $definition) { + if ($this->accept($definition) && $reflectionClass = $container->getReflectionClass($definition->getClass(), false)) { + $this->processClass($definition, $reflectionClass); + } + } + } + + private function accept(Definition $definition): bool + { + return !$definition->hasTag('container.ignore_attributes') && $definition->isAutowired(); + } + + private function processClass(Definition $definition, \ReflectionClass $reflectionClass) + { + foreach ($reflectionClass->getAttributes(AsDecorator::class, \ReflectionAttribute::IS_INSTANCEOF) as $attribute) { + $attribute = $attribute->newInstance(); + + $definition->setDecoratedService($attribute->decorates, null, $attribute->priority, $attribute->onInvalid); + } + } +} diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php index 25fa2cfa584fc..b8634eafe4a41 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @@ -15,6 +15,7 @@ use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\DependencyInjection\Attribute\MapDecorated; use Symfony\Component\DependencyInjection\Attribute\TaggedIterator; use Symfony\Component\DependencyInjection\Attribute\TaggedLocator; use Symfony\Component\DependencyInjection\Attribute\Target; @@ -271,6 +272,13 @@ private function autowireMethod(\ReflectionFunctionAbstract $reflectionMethod, a break; } + + if (MapDecorated::class === $attribute->getName()) { + $definition = $this->container->getDefinition($this->currentId); + $arguments[$index] = new Reference($definition->innerServiceId ?? $this->currentId.'.inner', $definition->decorationOnInvalid ?? ContainerInterface::NULL_ON_INVALID_REFERENCE); + + break; + } } if ('' !== ($arguments[$index] ?? '')) { diff --git a/src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php b/src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php index 4373833180319..3acbe26de0d3c 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php @@ -43,6 +43,7 @@ public function __construct() 100 => [ new ResolveClassPass(), new RegisterAutoconfigureAttributesPass(), + new AutowireAsDecoratorPass(), new AttributeAutoconfigurationPass(), new ResolveInstanceofConditionalsPass(), new RegisterEnvVarProcessorsPass(), diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php index 10a7eed918e84..c9422d98b26e1 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php @@ -15,6 +15,7 @@ use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\Config\FileLocator; +use Symfony\Component\DependencyInjection\Compiler\AutowireAsDecoratorPass; use Symfony\Component\DependencyInjection\Compiler\AutowirePass; use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass; use Symfony\Component\DependencyInjection\Compiler\DecoratorServicePass; @@ -1164,4 +1165,25 @@ public function testAutowireAttribute() $this->assertSame('@bar', $service->escapedRawValue); $this->assertNull($service->invalid); } + + public function testAsDecoratorAttribute() + { + $container = new ContainerBuilder(); + + $container->register(AsDecoratorFoo::class); + $container->register(AsDecoratorBar10::class)->setAutowired(true)->setArgument(0, 'arg1'); + $container->register(AsDecoratorBar20::class)->setAutowired(true)->setArgument(0, 'arg1'); + $container->register(AsDecoratorBaz::class)->setAutowired(true); + + (new ResolveClassPass())->process($container); + (new AutowireAsDecoratorPass())->process($container); + (new DecoratorServicePass())->process($container); + (new AutowirePass())->process($container); + + $this->assertSame(AsDecoratorBar10::class.'.inner', (string) $container->getDefinition(AsDecoratorBar10::class)->getArgument(1)); + + $this->assertSame(AsDecoratorBar20::class.'.inner', (string) $container->getDefinition(AsDecoratorBar20::class)->getArgument(1)); + $this->assertSame(AsDecoratorBaz::class.'.inner', (string) $container->getDefinition(AsDecoratorBaz::class)->getArgument(0)); + $this->assertSame(2, $container->getDefinition(AsDecoratorBaz::class)->getArgument(0)->getInvalidBehavior()); + } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php index f695c428712fa..007cb61130e54 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php @@ -12,7 +12,6 @@ namespace Symfony\Component\DependencyInjection\Tests\Compiler; use PHPUnit\Framework\TestCase; -use Symfony\Component\Config\Definition\BaseNode; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\Config\Resource\FileResource; @@ -135,10 +134,6 @@ public function testThrowingExtensionsGetMergedBag() public function testReuseEnvPlaceholderGeneratedByPreviousExtension() { - if (!property_exists(BaseNode::class, 'placeholderUniquePrefixes')) { - $this->markTestSkipped('This test requires symfony/config ^4.4.11|^5.0.11|^5.1.3'); - } - $container = new ContainerBuilder(); $container->registerExtension(new FooExtension()); $container->registerExtension(new TestCccExtension()); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/autowiring_classes_80.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/autowiring_classes_80.php index 80c3251fa75d7..c1c772b684a48 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/autowiring_classes_80.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/autowiring_classes_80.php @@ -2,7 +2,10 @@ namespace Symfony\Component\DependencyInjection\Tests\Compiler; +use Symfony\Component\DependencyInjection\Attribute\AsDecorator; use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\DependencyInjection\Attribute\MapDecorated; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Contracts\Service\Attribute\Required; class AutowireSetter @@ -50,3 +53,35 @@ public function __construct( ) { } } + +interface AsDecoratorInterface +{ +} + +class AsDecoratorFoo implements AsDecoratorInterface +{ +} + +#[AsDecorator(decorates: AsDecoratorFoo::class, priority: 10)] +class AsDecoratorBar10 implements AsDecoratorInterface +{ + public function __construct(string $arg1, #[MapDecorated] AsDecoratorInterface $inner) + { + } +} + +#[AsDecorator(decorates: AsDecoratorFoo::class, priority: 20)] +class AsDecoratorBar20 implements AsDecoratorInterface +{ + public function __construct(string $arg1, #[MapDecorated] AsDecoratorInterface $inner) + { + } +} + +#[AsDecorator(decorates: \NonExistent::class, onInvalid: ContainerInterface::NULL_ON_INVALID_REFERENCE)] +class AsDecoratorBaz implements AsDecoratorInterface +{ + public function __construct(#[MapDecorated] AsDecoratorInterface $inner = null) + { + } +} diff --git a/src/Symfony/Component/DomCrawler/Tests/Html5ParserCrawlerTest.php b/src/Symfony/Component/DomCrawler/Tests/Html5ParserCrawlerTest.php index 806bc2e181032..374c3ca9493df 100644 --- a/src/Symfony/Component/DomCrawler/Tests/Html5ParserCrawlerTest.php +++ b/src/Symfony/Component/DomCrawler/Tests/Html5ParserCrawlerTest.php @@ -29,8 +29,6 @@ public function testAddHtml5() /** @dataProvider validHtml5Provider */ public function testHtml5ParserParseContentStartingWithValidHeading(string $content) { - $this->skipTestIfHTML5LibraryNotAvailable(); - $crawler = $this->createCrawler(); $crawler->addHtmlContent($content); self::assertEquals( @@ -43,8 +41,6 @@ public function testHtml5ParserParseContentStartingWithValidHeading(string $cont /** @dataProvider invalidHtml5Provider */ public function testHtml5ParserWithInvalidHeadedContent(string $content) { - $this->skipTestIfHTML5LibraryNotAvailable(); - $crawler = $this->createCrawler(); $crawler->addHtmlContent($content); self::assertEmpty($crawler->filterXPath('//h1')->text(), '->addHtmlContent failed as expected'); @@ -70,11 +66,4 @@ public function invalidHtml5Provider(): iterable yield 'Text' => ['hello world'.$html]; yield 'Text between comments' => [' test '.$html]; } - - private function skipTestIfHTML5LibraryNotAvailable(): void - { - if (!class_exists(\Masterminds\HTML5::class)) { - self::markTestSkipped('HTML5 library is not available'); - } - } } diff --git a/src/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php b/src/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php index 4d9df07a9a1e7..f63e4f3268bc0 100644 --- a/src/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php +++ b/src/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php @@ -249,10 +249,6 @@ public function testInvokableEventListener() public function testTaggedInvokableEventListener() { - if (!class_exists(AttributeAutoconfigurationPass::class)) { - self::markTestSkipped('This test requires Symfony DependencyInjection >= 5.3'); - } - $container = new ContainerBuilder(); $container->registerAttributeForAutoconfiguration(AsEventListener::class, static function (ChildDefinition $definition, AsEventListener $attribute): void { $definition->addTag('kernel.event_listener', get_object_vars($attribute)); @@ -280,10 +276,6 @@ public function testTaggedInvokableEventListener() public function testTaggedMultiEventListener() { - if (!class_exists(AttributeAutoconfigurationPass::class)) { - self::markTestSkipped('This test requires Symfony DependencyInjection >= 5.3'); - } - $container = new ContainerBuilder(); $container->registerAttributeForAutoconfiguration(AsEventListener::class, static function (ChildDefinition $definition, AsEventListener $attribute, \ReflectionClass|\ReflectionMethod $reflector): void { diff --git a/src/Symfony/Component/Form/Form.php b/src/Symfony/Component/Form/Form.php index f404aece2557b..fc2b3fdb66f04 100644 --- a/src/Symfony/Component/Form/Form.php +++ b/src/Symfony/Component/Form/Form.php @@ -818,10 +818,6 @@ public function add(FormInterface|string $child, string $type = null, array $opt $child = (string) $child; - if (null !== $type && !\is_string($type)) { - throw new UnexpectedTypeException($type, 'string or null'); - } - // Never initialize child forms automatically $options['auto_initialize'] = false; diff --git a/src/Symfony/Component/Form/FormBuilder.php b/src/Symfony/Component/Form/FormBuilder.php index d9af99ca73de1..9864235cfb179 100644 --- a/src/Symfony/Component/Form/FormBuilder.php +++ b/src/Symfony/Component/Form/FormBuilder.php @@ -67,10 +67,6 @@ public function add(FormBuilderInterface|string $child, string $type = null, arr throw new UnexpectedTypeException($child, 'string or Symfony\Component\Form\FormBuilderInterface'); } - if (null !== $type && !\is_string($type)) { - throw new UnexpectedTypeException($type, 'string or null'); - } - // Add to "children" to maintain order $this->children[$child] = null; $this->unresolvedChildren[$child] = [$type, $options]; diff --git a/src/Symfony/Component/Form/NativeRequestHandler.php b/src/Symfony/Component/Form/NativeRequestHandler.php index 272239e65ba6c..679c190e4a0d6 100644 --- a/src/Symfony/Component/Form/NativeRequestHandler.php +++ b/src/Symfony/Component/Form/NativeRequestHandler.php @@ -190,6 +190,8 @@ private static function fixPhpFilesArray(mixed $data): mixed return $data; } + // Remove extra key added by PHP 8.1. + unset($data['full_path']); $keys = array_keys($data); sort($keys); diff --git a/src/Symfony/Component/Form/Tests/AbstractFormTest.php b/src/Symfony/Component/Form/Tests/AbstractFormTest.php deleted file mode 100644 index 5408416191ab2..0000000000000 --- a/src/Symfony/Component/Form/Tests/AbstractFormTest.php +++ /dev/null @@ -1,71 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Form\Tests; - -use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Form\DataMapperInterface; -use Symfony\Component\Form\DataTransformerInterface; -use Symfony\Component\Form\FormBuilder; -use Symfony\Component\Form\FormFactoryInterface; -use Symfony\Component\Form\FormInterface; - -abstract class AbstractFormTest extends TestCase -{ - /** - * @var EventDispatcherInterface - */ - protected $dispatcher; - - /** - * @var MockObject&FormFactoryInterface - */ - protected $factory; - - /** - * @var FormInterface - */ - protected $form; - - protected function setUp(): void - { - $this->dispatcher = new EventDispatcher(); - $this->factory = $this->createMock(FormFactoryInterface::class); - $this->form = $this->createForm(); - } - - protected function tearDown(): void - { - $this->dispatcher = null; - $this->factory = null; - $this->form = null; - } - - abstract protected function createForm(): FormInterface; - - protected function getBuilder(?string $name = 'name', EventDispatcherInterface $dispatcher = null, string $dataClass = null, array $options = []): FormBuilder - { - return new FormBuilder($name, $dataClass, $dispatcher ?: $this->dispatcher, $this->factory, $options); - } - - protected function getDataMapper(): MockObject&DataMapperInterface - { - return $this->createMock(DataMapperInterface::class); - } - - protected function getDataTransformer(): MockObject&DataTransformerInterface - { - return $this->createMock(DataTransformerInterface::class); - } -} diff --git a/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php b/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php index b4c26c3e6661d..61b8dc379148a 100644 --- a/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php +++ b/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php @@ -18,9 +18,10 @@ use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormFactory; -use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\Forms; use Symfony\Component\Form\RequestHandlerInterface; +use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Form\Util\ServerParams; /** @@ -417,7 +418,7 @@ protected function createForm($name, $method = null, $compound = false) protected function createBuilder($name, $compound = false, array $options = []) { - $builder = new FormBuilder($name, null, new EventDispatcher(), $this->createMock(FormFactoryInterface::class), $options); + $builder = new FormBuilder($name, null, new EventDispatcher(), new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())), $options); $builder->setCompound($compound); if ($compound) { diff --git a/src/Symfony/Component/Form/Tests/ButtonTest.php b/src/Symfony/Component/Form/Tests/ButtonTest.php index e665eca5f804c..0113acab24939 100644 --- a/src/Symfony/Component/Form/Tests/ButtonTest.php +++ b/src/Symfony/Component/Form/Tests/ButtonTest.php @@ -12,27 +12,19 @@ namespace Symfony\Component\Form\Tests; use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\ButtonBuilder; use Symfony\Component\Form\Exception\AlreadySubmittedException; use Symfony\Component\Form\FormBuilder; -use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormRegistry; +use Symfony\Component\Form\ResolvedFormTypeFactory; /** * @author Bernhard Schussek */ class ButtonTest extends TestCase { - private $dispatcher; - - private $factory; - - protected function setUp(): void - { - $this->dispatcher = $this->createMock(EventDispatcherInterface::class); - $this->factory = $this->createMock(FormFactoryInterface::class); - } - public function testSetParentOnSubmittedButton() { $this->expectException(AlreadySubmittedException::class); @@ -83,6 +75,6 @@ private function getButtonBuilder($name) private function getFormBuilder() { - return new FormBuilder('form', null, $this->dispatcher, $this->factory); + return new FormBuilder('form', null, new EventDispatcher(), new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory()))); } } diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/Cache/ChoiceLoaderTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/Cache/ChoiceLoaderTest.php index a96c838663797..b2d0d2e6d700e 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/Cache/ChoiceLoaderTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/Cache/ChoiceLoaderTest.php @@ -15,8 +15,8 @@ use Symfony\Component\Form\ChoiceList\ArrayChoiceList; use Symfony\Component\Form\ChoiceList\Factory\Cache\ChoiceLoader; use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader; -use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; -use Symfony\Component\Form\FormTypeInterface; +use Symfony\Component\Form\Extension\Core\Type\FormType; +use Symfony\Component\Form\Tests\Fixtures\ArrayChoiceLoader; class ChoiceLoaderTest extends TestCase { @@ -25,12 +25,12 @@ public function testSameFormTypeUseCachedLoader() $choices = ['f' => 'foo', 'b' => 'bar', 'z' => 'baz']; $choiceList = new ArrayChoiceList($choices); - $type = $this->createMock(FormTypeInterface::class); + $type = new FormType(); $decorated = new CallbackChoiceLoader(static function () use ($choices) { return $choices; }); $loader1 = new ChoiceLoader($type, $decorated); - $loader2 = new ChoiceLoader($type, $this->createMock(ChoiceLoaderInterface::class)); + $loader2 = new ChoiceLoader($type, new ArrayChoiceLoader()); $this->assertEquals($choiceList, $loader1->loadChoiceList()); $this->assertEquals($choiceList, $loader2->loadChoiceList()); diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php index 6cc428df0a3ad..4f5c4eb0e342f 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php @@ -11,27 +11,23 @@ namespace Symfony\Component\Form\Tests\ChoiceList\Factory; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\ChoiceList\ArrayChoiceList; use Symfony\Component\Form\ChoiceList\ChoiceList; -use Symfony\Component\Form\ChoiceList\ChoiceListInterface; use Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator; -use Symfony\Component\Form\ChoiceList\Factory\ChoiceListFactoryInterface; -use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; +use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory; +use Symfony\Component\Form\ChoiceList\LazyChoiceList; +use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader; +use Symfony\Component\Form\ChoiceList\Loader\FilterChoiceLoaderDecorator; use Symfony\Component\Form\ChoiceList\View\ChoiceListView; -use Symfony\Component\Form\FormTypeInterface; +use Symfony\Component\Form\Extension\Core\Type\FormType; +use Symfony\Component\Form\Tests\Fixtures\ArrayChoiceLoader; /** * @author Bernhard Schussek */ class CachingFactoryDecoratorTest extends TestCase { - /** - * @var MockObject&ChoiceListFactoryInterface - */ - private $decoratedFactory; - /** * @var CachingFactoryDecorator */ @@ -39,21 +35,17 @@ class CachingFactoryDecoratorTest extends TestCase protected function setUp(): void { - $this->decoratedFactory = $this->createMock(ChoiceListFactoryInterface::class); - $this->factory = new CachingFactoryDecorator($this->decoratedFactory); + $this->factory = new CachingFactoryDecorator(new DefaultChoiceListFactory()); } public function testCreateFromChoicesEmpty() { - $list = new ArrayChoiceList([]); - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with([]) - ->willReturn($list); + $list1 = $this->factory->createListFromChoices([]); + $list2 = $this->factory->createListFromChoices([]); - $this->assertSame($list, $this->factory->createListFromChoices([])); - $this->assertSame($list, $this->factory->createListFromChoices([])); + $this->assertSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList([]), $list1); + $this->assertEquals(new ArrayChoiceList([]), $list2); } public function testCreateFromChoicesComparesTraversableChoicesAsArray() @@ -61,34 +53,25 @@ public function testCreateFromChoicesComparesTraversableChoicesAsArray() // The top-most traversable is converted to an array $choices1 = new \ArrayIterator(['A' => 'a']); $choices2 = ['A' => 'a']; - $list = new ArrayChoiceList([]); - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices2) - ->willReturn($list); + $list1 = $this->factory->createListFromChoices($choices1); + $list2 = $this->factory->createListFromChoices($choices2); - $this->assertSame($list, $this->factory->createListFromChoices($choices1)); - $this->assertSame($list, $this->factory->createListFromChoices($choices2)); + $this->assertSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList(['A' => 'a']), $list1); + $this->assertEquals(new ArrayChoiceList(['A' => 'a']), $list2); } public function testCreateFromChoicesGroupedChoices() { $choices1 = ['key' => ['A' => 'a']]; $choices2 = ['A' => 'a']; - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromChoices') - ->withConsecutive( - [$choices1], - [$choices2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); + $list1 = $this->factory->createListFromChoices($choices1); + $list2 = $this->factory->createListFromChoices($choices2); - $this->assertSame($list1, $this->factory->createListFromChoices($choices1)); - $this->assertSame($list2, $this->factory->createListFromChoices($choices2)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList(['key' => ['A' => 'a']]), $list1); + $this->assertEquals(new ArrayChoiceList(['A' => 'a']), $list2); } /** @@ -96,17 +79,12 @@ public function testCreateFromChoicesGroupedChoices() */ public function testCreateFromChoicesSameChoices($choice1, $choice2) { - $choices1 = [$choice1]; - $choices2 = [$choice2]; - $list = new ArrayChoiceList([]); + $list1 = $this->factory->createListFromChoices([$choice1]); + $list2 = $this->factory->createListFromChoices([$choice2]); - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices1) - ->willReturn($list); - - $this->assertSame($list, $this->factory->createListFromChoices($choices1)); - $this->assertSame($list, $this->factory->createListFromChoices($choices2)); + $this->assertSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList([$choice1]), $list1); + $this->assertEquals(new ArrayChoiceList([$choice2]), $list2); } /** @@ -114,670 +92,467 @@ public function testCreateFromChoicesSameChoices($choice1, $choice2) */ public function testCreateFromChoicesDifferentChoices($choice1, $choice2) { - $choices1 = [$choice1]; - $choices2 = [$choice2]; - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromChoices') - ->withConsecutive( - [$choices1], - [$choices2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); + $list1 = $this->factory->createListFromChoices([$choice1]); + $list2 = $this->factory->createListFromChoices([$choice2]); - $this->assertSame($list1, $this->factory->createListFromChoices($choices1)); - $this->assertSame($list2, $this->factory->createListFromChoices($choices2)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList([$choice1]), $list1); + $this->assertEquals(new ArrayChoiceList([$choice2]), $list2); } public function testCreateFromChoicesSameValueClosure() { $choices = [1]; - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); $closure = function () {}; - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromChoices') - ->with($choices, $closure) - ->willReturnOnConsecutiveCalls($list1, $list2); + $list1 = $this->factory->createListFromChoices($choices, $closure); + $list2 = $this->factory->createListFromChoices($choices, $closure); - $this->assertSame($list1, $this->factory->createListFromChoices($choices, $closure)); - $this->assertSame($list2, $this->factory->createListFromChoices($choices, $closure)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList($choices, $closure), $list1); + $this->assertEquals(new ArrayChoiceList($choices, $closure), $list2); } public function testCreateFromChoicesSameValueClosureUseCache() { $choices = [1]; - $list = new ArrayChoiceList([]); - $formType = $this->createMock(FormTypeInterface::class); + $formType = new FormType(); $valueCallback = function () {}; - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, $valueCallback) - ->willReturn($list) - ; + $list1 = $this->factory->createListFromChoices($choices, ChoiceList::value($formType, $valueCallback)); + $list2 = $this->factory->createListFromChoices($choices, ChoiceList::value($formType, function () {})); - $this->assertSame($list, $this->factory->createListFromChoices($choices, ChoiceList::value($formType, $valueCallback))); - $this->assertSame($list, $this->factory->createListFromChoices($choices, ChoiceList::value($formType, function () {}))); + $this->assertSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList($choices, $valueCallback), $list1); + $this->assertEquals(new ArrayChoiceList($choices, function () {}), $list2); } public function testCreateFromChoicesDifferentValueClosure() { $choices = [1]; - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); $closure1 = function () {}; $closure2 = function () {}; + $list1 = $this->factory->createListFromChoices($choices, $closure1); + $list2 = $this->factory->createListFromChoices($choices, $closure2); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromChoices') - ->withConsecutive( - [$choices, $closure1], - [$choices, $closure2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); - - $this->assertSame($list1, $this->factory->createListFromChoices($choices, $closure1)); - $this->assertSame($list2, $this->factory->createListFromChoices($choices, $closure2)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new ArrayChoiceList($choices, $closure1), $list1); + $this->assertEquals(new ArrayChoiceList($choices, $closure2), $list2); } public function testCreateFromChoicesSameFilterClosure() { $choices = [1]; - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); $filter = function () {}; + $list1 = $this->factory->createListFromChoices($choices, null, $filter); + $list2 = $this->factory->createListFromChoices($choices, null, $filter); + $lazyChoiceList = new LazyChoiceList(new FilterChoiceLoaderDecorator(new CallbackChoiceLoader(static function () use ($choices) { + return $choices; + }), $filter), null); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromChoices') - ->with($choices, null, $filter) - ->willReturnOnConsecutiveCalls($list1, $list2); - - $this->assertSame($list1, $this->factory->createListFromChoices($choices, null, $filter)); - $this->assertSame($list2, $this->factory->createListFromChoices($choices, null, $filter)); + $this->assertNotSame($list1, $list2); + $this->assertEquals($lazyChoiceList, $list1); + $this->assertEquals($lazyChoiceList, $list2); } public function testCreateFromChoicesSameFilterClosureUseCache() { $choices = [1]; - $list = new ArrayChoiceList([]); - $formType = $this->createMock(FormTypeInterface::class); + $formType = new FormType(); $filterCallback = function () {}; + $list1 = $this->factory->createListFromChoices($choices, null, ChoiceList::filter($formType, $filterCallback)); + $list2 = $this->factory->createListFromChoices($choices, null, ChoiceList::filter($formType, function () {})); + $lazyChoiceList = new LazyChoiceList(new FilterChoiceLoaderDecorator(new CallbackChoiceLoader(static function () use ($choices) { + return $choices; + }), function () {}), null); - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, null, $filterCallback) - ->willReturn($list) - ; - - $this->assertSame($list, $this->factory->createListFromChoices($choices, null, ChoiceList::filter($formType, $filterCallback))); - $this->assertSame($list, $this->factory->createListFromChoices($choices, null, ChoiceList::filter($formType, function () {}))); + $this->assertSame($list1, $list2); + $this->assertEquals($lazyChoiceList, $list1); + $this->assertEquals($lazyChoiceList, $list2); } public function testCreateFromChoicesDifferentFilterClosure() { $choices = [1]; - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); $closure1 = function () {}; $closure2 = function () {}; + $list1 = $this->factory->createListFromChoices($choices, null, $closure1); + $list2 = $this->factory->createListFromChoices($choices, null, $closure2); + $lazyChoiceList = new LazyChoiceList(new FilterChoiceLoaderDecorator(new CallbackChoiceLoader(static function () use ($choices) { + return $choices; + }), function () {}), null); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromChoices') - ->withConsecutive( - [$choices, null, $closure1], - [$choices, null, $closure2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); - - $this->assertSame($list1, $this->factory->createListFromChoices($choices, null, $closure1)); - $this->assertSame($list2, $this->factory->createListFromChoices($choices, null, $closure2)); + $this->assertNotSame($list1, $list2); + $this->assertEquals($lazyChoiceList, $list1); + $this->assertEquals($lazyChoiceList, $list2); } public function testCreateFromLoaderSameLoader() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - $list = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); + $loader = new ArrayChoiceLoader(); + $list1 = $this->factory->createListFromLoader($loader); + $list2 = $this->factory->createListFromLoader($loader); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromLoader') - ->with($loader) - ->willReturnOnConsecutiveCalls($list, $list2); - - $this->assertSame($list, $this->factory->createListFromLoader($loader)); - $this->assertSame($list2, $this->factory->createListFromLoader($loader)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new LazyChoiceList($loader), $list1); + $this->assertEquals(new LazyChoiceList($loader), $list2); } public function testCreateFromLoaderSameLoaderUseCache() { - $type = $this->createMock(FormTypeInterface::class); - $loader = $this->createMock(ChoiceLoaderInterface::class); - $list = new ArrayChoiceList([]); + $type = new FormType(); + $list1 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader())); + $list2 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader())); - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader) - ->willReturn($list) - ; - - $this->assertSame($list, $this->factory->createListFromLoader(ChoiceList::loader($type, $loader))); - $this->assertSame($list, $this->factory->createListFromLoader(ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)))); + $this->assertSame($list1, $list2); + $this->assertEquals(new LazyChoiceList(new ArrayChoiceLoader(), null), $list1); + $this->assertEquals(new LazyChoiceList(new ArrayChoiceLoader(), null), $list2); } public function testCreateFromLoaderDifferentLoader() { - $loader1 = $this->createMock(ChoiceLoaderInterface::class); - $loader2 = $this->createMock(ChoiceLoaderInterface::class); - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromLoader') - ->withConsecutive( - [$loader1], - [$loader2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); - - $this->assertSame($list1, $this->factory->createListFromLoader($loader1)); - $this->assertSame($list2, $this->factory->createListFromLoader($loader2)); + $this->assertNotSame($this->factory->createListFromLoader(new ArrayChoiceLoader()), $this->factory->createListFromLoader(new ArrayChoiceLoader())); } public function testCreateFromLoaderSameValueClosure() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - $type = $this->createMock(FormTypeInterface::class); - $list = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); + $loader = new ArrayChoiceLoader(); $closure = function () {}; + $list1 = $this->factory->createListFromLoader($loader, $closure); + $list2 = $this->factory->createListFromLoader($loader, $closure); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromLoader') - ->with($loader, $closure) - ->willReturnOnConsecutiveCalls($list, $list2); - - $this->assertSame($list, $this->factory->createListFromLoader(ChoiceList::loader($type, $loader), $closure)); - $this->assertSame($list2, $this->factory->createListFromLoader(ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)), $closure)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new LazyChoiceList($loader, $closure), $list1); + $this->assertEquals(new LazyChoiceList($loader, $closure), $list2); } public function testCreateFromLoaderSameValueClosureUseCache() { - $type = $this->createMock(FormTypeInterface::class); - $loader = $this->createMock(ChoiceLoaderInterface::class); - $list = new ArrayChoiceList([]); + $type = new FormType(); + $loader = new ArrayChoiceLoader(); $closure = function () {}; + $list1 = $this->factory->createListFromLoader(ChoiceList::loader($type, $loader), ChoiceList::value($type, $closure)); + $list2 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader()), ChoiceList::value($type, function () {})); - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader, $closure) - ->willReturn($list) - ; - - $this->assertSame($list, $this->factory->createListFromLoader( - ChoiceList::loader($type, $loader), - ChoiceList::value($type, $closure) - )); - $this->assertSame($list, $this->factory->createListFromLoader( - ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)), - ChoiceList::value($type, function () {}) - )); + $this->assertSame($list1, $list2); + $this->assertEquals(new LazyChoiceList($loader, $closure), $list1); + $this->assertEquals(new LazyChoiceList(new ArrayChoiceLoader(), function () {}), $list2); } public function testCreateFromLoaderDifferentValueClosure() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - $type = $this->createMock(FormTypeInterface::class); - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); + $loader = new ArrayChoiceLoader(); $closure1 = function () {}; $closure2 = function () {}; - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromLoader') - ->withConsecutive( - [$loader, $closure1], - [$loader, $closure2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); - - $this->assertSame($list1, $this->factory->createListFromLoader(ChoiceList::loader($type, $loader), $closure1)); - $this->assertSame($list2, $this->factory->createListFromLoader(ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)), $closure2)); + $this->assertNotSame($this->factory->createListFromLoader($loader, $closure1), $this->factory->createListFromLoader($loader, $closure2)); } public function testCreateFromLoaderSameFilterClosure() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - $type = $this->createMock(FormTypeInterface::class); - $list = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); + $loader = new ArrayChoiceLoader(); + $type = new FormType(); $closure = function () {}; - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromLoader') - ->with($loader, null, $closure) - ->willReturnOnConsecutiveCalls($list, $list2); + $list1 = $this->factory->createListFromLoader(ChoiceList::loader($type, $loader), null, $closure); + $list2 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader()), null, $closure); - $this->assertSame($list, $this->factory->createListFromLoader(ChoiceList::loader($type, $loader), null, $closure)); - $this->assertSame($list2, $this->factory->createListFromLoader(ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)), null, $closure)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator($loader, $closure)), $list1); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(), $closure)), $list2); } public function testCreateFromLoaderSameFilterClosureUseCache() { - $type = $this->createMock(FormTypeInterface::class); - $loader = $this->createMock(ChoiceLoaderInterface::class); - $list = new ArrayChoiceList([]); - $closure = function () {}; - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader, null, $closure) - ->willReturn($list) - ; + $type = new FormType(); + $choiceFilter = ChoiceList::filter($type, function () {}); + $list1 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader()), null, $choiceFilter); + $list2 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader()), null, $choiceFilter); - $this->assertSame($list, $this->factory->createListFromLoader( - ChoiceList::loader($type, $loader), - null, - ChoiceList::filter($type, $closure) - )); - $this->assertSame($list, $this->factory->createListFromLoader( - ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)), - null, - ChoiceList::filter($type, function () {}) - )); + $this->assertSame($list1, $list2); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(), function () {})), $list1); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(), function () {})), $list2); } public function testCreateFromLoaderDifferentFilterClosure() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - $type = $this->createMock(FormTypeInterface::class); - $list1 = new ArrayChoiceList([]); - $list2 = new ArrayChoiceList([]); + $type = new FormType(); $closure1 = function () {}; $closure2 = function () {}; + $list1 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader()), null, $closure1); + $list2 = $this->factory->createListFromLoader(ChoiceList::loader($type, new ArrayChoiceLoader()), null, $closure2); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createListFromLoader') - ->withConsecutive( - [$loader, null, $closure1], - [$loader, null, $closure2] - ) - ->willReturnOnConsecutiveCalls($list1, $list2); - - $this->assertSame($list1, $this->factory->createListFromLoader(ChoiceList::loader($type, $loader), null, $closure1)); - $this->assertSame($list2, $this->factory->createListFromLoader(ChoiceList::loader($type, $this->createMock(ChoiceLoaderInterface::class)), null, $closure2)); + $this->assertNotSame($list1, $list2); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(), $closure1), null), $list1); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(), $closure2), null), $list2); } public function testCreateViewSamePreferredChoices() { $preferred = ['a']; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, $preferred) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, $preferred); + $view2 = $this->factory->createView($list, $preferred); - $this->assertSame($view, $this->factory->createView($list, $preferred)); - $this->assertSame($view2, $this->factory->createView($list, $preferred)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSamePreferredChoicesUseCache() { $preferred = ['a']; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, $preferred) - ->willReturn($view) - ; + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, ChoiceList::preferred($type, $preferred)); + $view2 = $this->factory->createView($list, ChoiceList::preferred($type, ['a'])); - $this->assertSame($view, $this->factory->createView($list, ChoiceList::preferred($type, $preferred))); - $this->assertSame($view, $this->factory->createView($list, ChoiceList::preferred($type, ['a']))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentPreferredChoices() { $preferred1 = ['a']; $preferred2 = ['b']; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, $preferred1], - [$list, $preferred2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, $preferred1); + $view2 = $this->factory->createView($list, $preferred2); - $this->assertSame($view1, $this->factory->createView($list, $preferred1)); - $this->assertSame($view2, $this->factory->createView($list, $preferred2)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSamePreferredChoicesClosure() { $preferred = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, $preferred) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, $preferred); + $view2 = $this->factory->createView($list, $preferred); - $this->assertSame($view, $this->factory->createView($list, $preferred)); - $this->assertSame($view2, $this->factory->createView($list, $preferred)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSamePreferredChoicesClosureUseCache() { $preferredCallback = function () {}; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, $preferredCallback) - ->willReturn($view) - ; + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, ChoiceList::preferred($type, $preferredCallback)); + $view2 = $this->factory->createView($list, ChoiceList::preferred($type, function () {})); - $this->assertSame($view, $this->factory->createView($list, ChoiceList::preferred($type, $preferredCallback))); - $this->assertSame($view, $this->factory->createView($list, ChoiceList::preferred($type, function () {}))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentPreferredChoicesClosure() { $preferred1 = function () {}; $preferred2 = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, $preferred1], - [$list, $preferred2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, $preferred1); + $view2 = $this->factory->createView($list, $preferred2); - $this->assertSame($view1, $this->factory->createView($list, $preferred1)); - $this->assertSame($view2, $this->factory->createView($list, $preferred2)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameLabelClosure() { $labels = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, null, $labels) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, $labels); + $view2 = $this->factory->createView($list, null, $labels); - $this->assertSame($view, $this->factory->createView($list, null, $labels)); - $this->assertSame($view2, $this->factory->createView($list, null, $labels)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameLabelClosureUseCache() { $labelsCallback = function () {}; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, $labelsCallback) - ->willReturn($view) - ; + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, ChoiceList::label($type, $labelsCallback)); + $view2 = $this->factory->createView($list, null, ChoiceList::label($type, function () {})); - $this->assertSame($view, $this->factory->createView($list, null, ChoiceList::label($type, $labelsCallback))); - $this->assertSame($view, $this->factory->createView($list, null, ChoiceList::label($type, function () {}))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentLabelClosure() { $labels1 = function () {}; $labels2 = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, null, $labels1], - [$list, null, $labels2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, $labels1); + $view2 = $this->factory->createView($list, null, $labels2); - $this->assertSame($view1, $this->factory->createView($list, null, $labels1)); - $this->assertSame($view2, $this->factory->createView($list, null, $labels2)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameIndexClosure() { $index = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, null, null, $index) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, $index); + $view2 = $this->factory->createView($list, null, null, $index); - $this->assertSame($view, $this->factory->createView($list, null, null, $index)); - $this->assertSame($view2, $this->factory->createView($list, null, null, $index)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameIndexClosureUseCache() { $indexCallback = function () {}; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, $indexCallback) - ->willReturn($view) - ; + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, ChoiceList::fieldName($type, $indexCallback)); + $view2 = $this->factory->createView($list, null, null, ChoiceList::fieldName($type, function () {})); - $this->assertSame($view, $this->factory->createView($list, null, null, ChoiceList::fieldName($type, $indexCallback))); - $this->assertSame($view, $this->factory->createView($list, null, null, ChoiceList::fieldName($type, function () {}))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentIndexClosure() { $index1 = function () {}; $index2 = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, null, null, $index1], - [$list, null, null, $index2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, $index1); + $view2 = $this->factory->createView($list, null, null, $index2); - $this->assertSame($view1, $this->factory->createView($list, null, null, $index1)); - $this->assertSame($view2, $this->factory->createView($list, null, null, $index2)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameGroupByClosure() { $groupBy = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, null, null, null, $groupBy) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, $groupBy); + $view2 = $this->factory->createView($list, null, null, null, $groupBy); - $this->assertSame($view, $this->factory->createView($list, null, null, null, $groupBy)); - $this->assertSame($view2, $this->factory->createView($list, null, null, null, $groupBy)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameGroupByClosureUseCache() { $groupByCallback = function () {}; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, $groupByCallback) - ->willReturn($view) - ; + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, ChoiceList::groupBy($type, $groupByCallback)); + $view2 = $this->factory->createView($list, null, null, null, ChoiceList::groupBy($type, function () {})); - $this->assertSame($view, $this->factory->createView($list, null, null, null, ChoiceList::groupBy($type, $groupByCallback))); - $this->assertSame($view, $this->factory->createView($list, null, null, null, ChoiceList::groupBy($type, function () {}))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentGroupByClosure() { $groupBy1 = function () {}; $groupBy2 = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, null, null, null, $groupBy1], - [$list, null, null, null, $groupBy2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, $groupBy1); + $view2 = $this->factory->createView($list, null, null, null, $groupBy2); - $this->assertSame($view1, $this->factory->createView($list, null, null, null, $groupBy1)); - $this->assertSame($view2, $this->factory->createView($list, null, null, null, $groupBy2)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameAttributes() { $attr = ['class' => 'foobar']; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, null, null, null, null, $attr) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, null, $attr); + $view2 = $this->factory->createView($list, null, null, null, null, $attr); - $this->assertSame($view, $this->factory->createView($list, null, null, null, null, $attr)); - $this->assertSame($view2, $this->factory->createView($list, null, null, null, null, $attr)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameAttributesUseCache() { $attr = ['class' => 'foobar']; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, null, $attr) - ->willReturn($view); + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, $attr)); + $view2 = $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, ['class' => 'foobar'])); - $this->assertSame($view, $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, $attr))); - $this->assertSame($view, $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, ['class' => 'foobar']))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentAttributes() { $attr1 = ['class' => 'foobar1']; $attr2 = ['class' => 'foobar2']; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); + $list = new ArrayChoiceList([]); - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, null, null, null, null, $attr1], - [$list, null, null, null, null, $attr2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); + $view1 = $this->factory->createView($list, null, null, null, null, $attr1); + $view2 = $this->factory->createView($list, null, null, null, null, $attr2); - $this->assertSame($view1, $this->factory->createView($list, null, null, null, null, $attr1)); - $this->assertSame($view2, $this->factory->createView($list, null, null, null, null, $attr2)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameAttributesClosure() { $attr = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->with($list, null, null, null, null, $attr) - ->willReturnOnConsecutiveCalls($view, $view2); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, null, $attr); + $view2 = $this->factory->createView($list, null, null, null, null, $attr); - $this->assertSame($view, $this->factory->createView($list, null, null, null, null, $attr)); - $this->assertSame($view2, $this->factory->createView($list, null, null, null, null, $attr)); + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewSameAttributesClosureUseCache() { $attrCallback = function () {}; - $type = $this->createMock(FormTypeInterface::class); - $list = $this->createMock(ChoiceListInterface::class); - $view = new ChoiceListView(); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, null, $attrCallback) - ->willReturn($view); + $type = new FormType(); + $list = new ArrayChoiceList([]); + $view1 = $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, $attrCallback)); + $view2 = $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, function () {})); - $this->assertSame($view, $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, $attrCallback))); - $this->assertSame($view, $this->factory->createView($list, null, null, null, null, ChoiceList::attr($type, function () {}))); + $this->assertSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function testCreateViewDifferentAttributesClosure() { $attr1 = function () {}; $attr2 = function () {}; - $list = $this->createMock(ChoiceListInterface::class); - $view1 = new ChoiceListView(); - $view2 = new ChoiceListView(); - - $this->decoratedFactory->expects($this->exactly(2)) - ->method('createView') - ->withConsecutive( - [$list, null, null, null, null, $attr1], - [$list, null, null, null, null, $attr2] - ) - ->willReturnOnConsecutiveCalls($view1, $view2); - - $this->assertSame($view1, $this->factory->createView($list, null, null, null, null, $attr1)); - $this->assertSame($view2, $this->factory->createView($list, null, null, null, null, $attr2)); + $list = new ArrayChoiceList([]); + + $view1 = $this->factory->createView($list, null, null, null, null, $attr1); + $view2 = $this->factory->createView($list, null, null, null, null, $attr2); + + $this->assertNotSame($view1, $view2); + $this->assertEquals(new ChoiceListView(), $view1); + $this->assertEquals(new ChoiceListView(), $view2); } public function provideSameChoices() diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/DefaultChoiceListFactoryTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/DefaultChoiceListFactoryTest.php index aac5736870473..a011728e96568 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/DefaultChoiceListFactoryTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/DefaultChoiceListFactoryTest.php @@ -16,11 +16,11 @@ use Symfony\Component\Form\ChoiceList\ChoiceListInterface; use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory; use Symfony\Component\Form\ChoiceList\LazyChoiceList; -use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; use Symfony\Component\Form\ChoiceList\Loader\FilterChoiceLoaderDecorator; use Symfony\Component\Form\ChoiceList\View\ChoiceGroupView; use Symfony\Component\Form\ChoiceList\View\ChoiceListView; use Symfony\Component\Form\ChoiceList\View\ChoiceView; +use Symfony\Component\Form\Tests\Fixtures\ArrayChoiceLoader; use Symfony\Component\Translation\TranslatableMessage; class DefaultChoiceListFactoryTest extends TestCase @@ -254,7 +254,7 @@ function ($choice) { public function testCreateFromLoader() { - $loader = $this->createMock(ChoiceLoaderInterface::class); + $loader = new ArrayChoiceLoader(); $list = $this->factory->createListFromLoader($loader); @@ -263,7 +263,7 @@ public function testCreateFromLoader() public function testCreateFromLoaderWithValues() { - $loader = $this->createMock(ChoiceLoaderInterface::class); + $loader = new ArrayChoiceLoader(); $value = function () {}; $list = $this->factory->createListFromLoader($loader, $value); @@ -273,12 +273,11 @@ public function testCreateFromLoaderWithValues() public function testCreateFromLoaderWithFilter() { - $loader = $this->createMock(ChoiceLoaderInterface::class); $filter = function () {}; - $list = $this->factory->createListFromLoader($loader, null, $filter); + $list = $this->factory->createListFromLoader(new ArrayChoiceLoader(), null, $filter); - $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator($loader, $filter)), $list); + $this->assertEquals(new LazyChoiceList(new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(), $filter)), $list); } public function testCreateViewFlat() @@ -760,9 +759,6 @@ function ($object, $key, $value) { $this->assertFlatViewWithAttr($view); } - /** - * @requires function Symfony\Component\Translation\TranslatableMessage::__construct - */ public function testPassTranslatableMessageAsLabelDoesntCastItToString() { $view = $this->factory->createView( diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php index 137a66f47db32..09482fda89642 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php @@ -11,14 +11,13 @@ namespace Symfony\Component\Form\Tests\ChoiceList\Factory; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\ChoiceList\ArrayChoiceList; -use Symfony\Component\Form\ChoiceList\ChoiceListInterface; -use Symfony\Component\Form\ChoiceList\Factory\ChoiceListFactoryInterface; +use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory; use Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator; -use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; -use Symfony\Component\Form\ChoiceList\View\ChoiceListView; +use Symfony\Component\Form\ChoiceList\View\ChoiceGroupView; +use Symfony\Component\Form\ChoiceList\View\ChoiceView; +use Symfony\Component\Form\Tests\Fixtures\ArrayChoiceLoader; use Symfony\Component\PropertyAccess\PropertyPath; /** @@ -26,11 +25,6 @@ */ class PropertyAccessDecoratorTest extends TestCase { - /** - * @var MockObject&ChoiceListFactoryInterface - */ - private $decoratedFactory; - /** * @var PropertyAccessDecorator */ @@ -38,111 +32,69 @@ class PropertyAccessDecoratorTest extends TestCase protected function setUp(): void { - $this->decoratedFactory = $this->createMock(ChoiceListFactoryInterface::class); - $this->factory = new PropertyAccessDecorator($this->decoratedFactory); + $this->factory = new PropertyAccessDecorator(new DefaultChoiceListFactory()); } public function testCreateFromChoicesPropertyPath() { - $choices = [(object) ['property' => 'value']]; - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($choices, $callback) { - return new ArrayChoiceList(array_map($callback, $choices)); - }); + $object = (object) ['property' => 'value']; - $this->assertSame(['value' => 'value'], $this->factory->createListFromChoices($choices, 'property')->getChoices()); + $this->assertSame(['value' => $object], $this->factory->createListFromChoices([$object], 'property')->getChoices()); } public function testCreateFromChoicesPropertyPathInstance() { - $choices = [(object) ['property' => 'value']]; + $object = (object) ['property' => 'value']; - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($choices, $callback) { - return new ArrayChoiceList(array_map($callback, $choices)); - }); - - $this->assertSame(['value' => 'value'], $this->factory->createListFromChoices($choices, new PropertyPath('property'))->getChoices()); + $this->assertSame(['value' => $object], $this->factory->createListFromChoices([$object], new PropertyPath('property'))->getChoices()); } public function testCreateFromChoicesFilterPropertyPath() { - $filteredChoices = [ - 'two' => (object) ['property' => 'value 2', 'filter' => true], - ]; + $object1 = (object) ['property' => 'value 1', 'filter' => false]; + $object2 = (object) ['property' => 'value 2', 'filter' => true]; $choices = [ - 'one' => (object) ['property' => 'value 1', 'filter' => false], - ] + $filteredChoices; - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, $this->isInstanceOf(\Closure::class), $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($choices, $value, $callback) { - return new ArrayChoiceList(array_map($value, array_filter($choices, $callback))); - }); + 'one' => $object1, + 'two' => $object2, + ]; - $this->assertSame(['value 2' => 'value 2'], $this->factory->createListFromChoices($choices, 'property', 'filter')->getChoices()); + $this->assertSame(['value 2' => $object2], $this->factory->createListFromChoices($choices, 'property', 'filter')->getChoices()); } public function testCreateFromChoicesFilterPropertyPathInstance() { - $filteredChoices = [ - 'two' => (object) ['property' => 'value 2', 'filter' => true], - ]; + $object1 = (object) ['property' => 'value 1', 'filter' => false]; + $object2 = (object) ['property' => 'value 2', 'filter' => true]; $choices = [ - 'one' => (object) ['property' => 'value 1', 'filter' => false], - ] + $filteredChoices; - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, $this->isInstanceOf(\Closure::class), $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($choices, $value, $callback) { - return new ArrayChoiceList(array_map($value, array_filter($choices, $callback))); - }); + 'one' => $object1, + 'two' => $object2, + ]; $this->assertSame( - ['value 2' => 'value 2'], + ['value 2' => $object2], $this->factory->createListFromChoices($choices, new PropertyPath('property'), new PropertyPath('filter'))->getChoices() ); } public function testCreateFromLoaderPropertyPath() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($loader, $callback) { - return new ArrayChoiceList((array) $callback((object) ['property' => 'value'])); - }); + $object = (object) ['property' => 'value']; + $loader = new ArrayChoiceLoader([$object]); - $this->assertSame(['value' => 'value'], $this->factory->createListFromLoader($loader, 'property')->getChoices()); + $this->assertSame(['value' => $object], $this->factory->createListFromLoader($loader, 'property')->getChoices()); } public function testCreateFromLoaderFilterPropertyPath() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - $filteredChoices = [ - 'two' => (object) ['property' => 'value 2', 'filter' => true], - ]; + $object1 = (object) ['property' => 'value 1', 'filter' => false]; + $object2 = (object) ['property' => 'value 2', 'filter' => true]; $choices = [ - 'one' => (object) ['property' => 'value 1', 'filter' => false], - ] + $filteredChoices; - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader, $this->isInstanceOf(\Closure::class), $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($loader, $value, $callback) use ($choices) { - return new ArrayChoiceList(array_map($value, array_filter($choices, $callback))); - }); + 'one' => $object1, + 'two' => $object2, + ]; + $loader = new ArrayChoiceLoader($choices); - $this->assertSame(['value 2' => 'value 2'], $this->factory->createListFromLoader($loader, 'property', 'filter')->getChoices()); + $this->assertSame(['value 2' => $object2], $this->factory->createListFromLoader($loader, 'property', 'filter')->getChoices()); } // https://github.com/symfony/symfony/issues/5494 @@ -150,212 +102,122 @@ public function testCreateFromChoicesAssumeNullIfValuePropertyPathUnreadable() { $choices = [null]; - $this->decoratedFactory->expects($this->once()) - ->method('createListFromChoices') - ->with($choices, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($choices, $callback) { - return new ArrayChoiceList(array_map($callback, $choices)); - }); - - $this->assertSame([null], $this->factory->createListFromChoices($choices, 'property')->getChoices()); + $this->assertSame(['' => null], $this->factory->createListFromChoices($choices, 'property')->getChoices()); } // https://github.com/symfony/symfony/issues/5494 public function testCreateFromChoiceLoaderAssumeNullIfValuePropertyPathUnreadable() { - $loader = $this->createMock(ChoiceLoaderInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($loader, $callback) { - return new ArrayChoiceList((array) $callback(null)); - }); + $loader = new ArrayChoiceLoader([null]); - $this->assertSame([], $this->factory->createListFromLoader($loader, 'property')->getChoices()); + $this->assertSame(['' => null], $this->factory->createListFromLoader($loader, 'property')->getChoices()); } public function testCreateFromLoaderPropertyPathInstance() { - $loader = $this->createMock(ChoiceLoaderInterface::class); + $object = (object) ['property' => 'value']; + $loader = new ArrayChoiceLoader([$object]); - $this->decoratedFactory->expects($this->once()) - ->method('createListFromLoader') - ->with($loader, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($loader, $callback) { - return new ArrayChoiceList((array) $callback((object) ['property' => 'value'])); - }); - - $this->assertSame(['value' => 'value'], $this->factory->createListFromLoader($loader, new PropertyPath('property'))->getChoices()); + $this->assertSame(['value' => $object], $this->factory->createListFromLoader($loader, new PropertyPath('property'))->getChoices()); } public function testCreateViewPreferredChoicesAsPropertyPath() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred) { - return new ChoiceListView((array) $preferred((object) ['property' => true])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame([true], $this->factory->createView($list, 'property')->choices); + $this->assertEquals([new ChoiceView($object, '0', '0')], $this->factory->createView($list, 'preferred_choice')->choices); + $this->assertEquals([new ChoiceView($object, '0', '0')], $this->factory->createView($list, 'preferred_choice')->preferredChoices); } public function testCreateViewPreferredChoicesAsPropertyPathInstance() { - $list = $this->createMock(ChoiceListInterface::class); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred) { - return new ChoiceListView((array) $preferred((object) ['property' => true])); - }); - - $this->assertSame([true], $this->factory->createView($list, 'property')->choices); + $this->assertEquals([new ChoiceView($object, '0', '0')], $this->factory->createView($list, new PropertyPath('preferred_choice'))->choices); + $this->assertEquals([new ChoiceView($object, '0', '0')], $this->factory->createView($list, new PropertyPath('preferred_choice'))->preferredChoices); } // https://github.com/symfony/symfony/issues/5494 public function testCreateViewAssumeNullIfPreferredChoicesPropertyPathUnreadable() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred) { - return new ChoiceListView((array) $preferred((object) ['category' => null])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame([false], $this->factory->createView($list, 'category.preferred')->choices); + $this->assertEquals([new ChoiceView($object, '0', '0')], $this->factory->createView($list, new PropertyPath('preferred_choice.property'))->choices); + $this->assertEquals([], $this->factory->createView($list, new PropertyPath('preferred_choice.property'))->preferredChoices); } public function testCreateViewLabelsAsPropertyPath() { - $list = $this->createMock(ChoiceListInterface::class); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label) { - return new ChoiceListView((array) $label((object) ['property' => 'label'])); - }); - - $this->assertSame(['label'], $this->factory->createView($list, null, 'property')->choices); + $this->assertEquals([new ChoiceView($object, '0', 'foo')], $this->factory->createView($list, null, 'view_label')->choices); } public function testCreateViewLabelsAsPropertyPathInstance() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label) { - return new ChoiceListView((array) $label((object) ['property' => 'label'])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame(['label'], $this->factory->createView($list, null, new PropertyPath('property'))->choices); + $this->assertEquals([new ChoiceView($object, '0', 'foo')], $this->factory->createView($list, null, new PropertyPath('view_label'))->choices); } public function testCreateViewIndicesAsPropertyPath() { - $list = $this->createMock(ChoiceListInterface::class); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index) { - return new ChoiceListView((array) $index((object) ['property' => 'index'])); - }); - - $this->assertSame(['index'], $this->factory->createView($list, null, null, 'property')->choices); + $this->assertEquals(['key' => new ChoiceView($object, '0', '0')], $this->factory->createView($list, null, null, 'view_index')->choices); } public function testCreateViewIndicesAsPropertyPathInstance() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index) { - return new ChoiceListView((array) $index((object) ['property' => 'index'])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame(['index'], $this->factory->createView($list, null, null, new PropertyPath('property'))->choices); + $this->assertEquals(['key' => new ChoiceView($object, '0', '0')], $this->factory->createView($list, null, null, new PropertyPath('view_index'))->choices); } public function testCreateViewGroupsAsPropertyPath() { - $list = $this->createMock(ChoiceListInterface::class); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy) { - return new ChoiceListView((array) $groupBy((object) ['property' => 'group'])); - }); - - $this->assertSame(['group'], $this->factory->createView($list, null, null, null, 'property')->choices); + $this->assertEquals(['bar' => new ChoiceGroupView('bar', [new ChoiceView($object, '0', '0')])], $this->factory->createView($list, null, null, null, 'view_group')->choices); } public function testCreateViewGroupsAsPropertyPathInstance() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy) { - return new ChoiceListView((array) $groupBy((object) ['property' => 'group'])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame(['group'], $this->factory->createView($list, null, null, null, new PropertyPath('property'))->choices); + $this->assertEquals(['bar' => new ChoiceGroupView('bar', [new ChoiceView($object, '0', '0')])], $this->factory->createView($list, null, null, null, new PropertyPath('view_group'))->choices); } // https://github.com/symfony/symfony/issues/5494 public function testCreateViewAssumeNullIfGroupsPropertyPathUnreadable() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy) { - return new ChoiceListView((array) $groupBy((object) ['group' => null])); - }); + $list = new ArrayChoiceList([]); $this->assertSame([], $this->factory->createView($list, null, null, null, 'group.name')->choices); } public function testCreateViewAttrAsPropertyPath() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy, $attr) { - return new ChoiceListView((array) $attr((object) ['property' => 'attr'])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame(['attr'], $this->factory->createView($list, null, null, null, null, 'property')->choices); + $this->assertEquals([new ChoiceView($object, '0', '0', ['baz' => 'foobar'])], $this->factory->createView($list, null, null, null, null, 'view_attribute')->choices); } public function testCreateViewAttrAsPropertyPathInstance() { - $list = $this->createMock(ChoiceListInterface::class); - - $this->decoratedFactory->expects($this->once()) - ->method('createView') - ->with($list, null, null, null, null, $this->isInstanceOf(\Closure::class)) - ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy, $attr) { - return new ChoiceListView((array) $attr((object) ['property' => 'attr'])); - }); + $object = (object) ['preferred_choice' => true, 'view_label' => 'foo', 'view_index' => 'key', 'view_group' => 'bar', 'view_attribute' => ['baz' => 'foobar']]; + $list = new ArrayChoiceList([$object]); - $this->assertSame(['attr'], $this->factory->createView($list, null, null, null, null, new PropertyPath('property'))->choices); + $this->assertEquals([new ChoiceView($object, '0', '0', ['baz' => 'foobar'])], $this->factory->createView($list, null, null, null, null, new PropertyPath('view_attribute'))->choices); } } diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php index 0c74ae1896d79..6f30d0896e1ba 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php @@ -11,155 +11,129 @@ namespace Symfony\Component\Form\Tests\ChoiceList; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\Form\ChoiceList\ChoiceListInterface; use Symfony\Component\Form\ChoiceList\LazyChoiceList; -use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; +use Symfony\Component\Form\Tests\Fixtures\ArrayChoiceLoader; /** * @author Bernhard Schussek */ class LazyChoiceListTest extends TestCase { - /** - * @var LazyChoiceList - */ - private $list; - - /** - * @var MockObject&ChoiceListInterface - */ - private $loadedList; - - /** - * @var MockObject&ChoiceLoaderInterface - */ - private $loader; - - /** - * @var \Closure - */ - private $value; - - protected function setUp(): void - { - $this->loadedList = $this->createMock(ChoiceListInterface::class); - $this->loader = $this->createMock(ChoiceLoaderInterface::class); - $this->value = function () {}; - $this->list = new LazyChoiceList($this->loader, $this->value); - } - public function testGetChoiceLoadersLoadsLoadedListOnFirstCall() { - $this->loader->expects($this->exactly(2)) - ->method('loadChoiceList') - ->with($this->value) - ->willReturn($this->loadedList); - - // The same list is returned by the loader - $this->loadedList->expects($this->exactly(2)) - ->method('getChoices') - ->willReturn(['RESULT']); - - $this->assertSame(['RESULT'], $this->list->getChoices()); - $this->assertSame(['RESULT'], $this->list->getChoices()); + $choices = ['RESULT']; + $calls = 0; + $list = new LazyChoiceList(new ArrayChoiceLoader($choices), function ($choice) use ($choices, &$calls) { + ++$calls; + + return array_search($choice, $choices); + }); + + $this->assertSame(['RESULT'], $list->getChoices()); + $this->assertSame(['RESULT'], $list->getChoices()); + $this->assertSame(1, $calls); } public function testGetValuesLoadsLoadedListOnFirstCall() { - $this->loader->expects($this->exactly(2)) - ->method('loadChoiceList') - ->with($this->value) - ->willReturn($this->loadedList); - - // The same list is returned by the loader - $this->loadedList->expects($this->exactly(2)) - ->method('getValues') - ->willReturn(['RESULT']); - - $this->assertSame(['RESULT'], $this->list->getValues()); - $this->assertSame(['RESULT'], $this->list->getValues()); + $calls = 0; + $list = new LazyChoiceList(new ArrayChoiceLoader(['RESULT']), function ($choice) use (&$calls) { + ++$calls; + + return $choice; + }); + + $this->assertSame(['RESULT'], $list->getValues()); + $this->assertSame(['RESULT'], $list->getValues()); + $this->assertSame(1, $calls); } public function testGetStructuredValuesLoadsLoadedListOnFirstCall() { - $this->loader->expects($this->exactly(2)) - ->method('loadChoiceList') - ->with($this->value) - ->willReturn($this->loadedList); - - // The same list is returned by the loader - $this->loadedList->expects($this->exactly(2)) - ->method('getStructuredValues') - ->willReturn(['RESULT']); - - $this->assertSame(['RESULT'], $this->list->getStructuredValues()); - $this->assertSame(['RESULT'], $this->list->getStructuredValues()); + $calls = 0; + $list = new LazyChoiceList(new ArrayChoiceLoader(['RESULT']), function ($choice) use (&$calls) { + ++$calls; + + return $choice; + }); + + $this->assertSame(['RESULT'], $list->getStructuredValues()); + $this->assertSame(['RESULT'], $list->getStructuredValues()); + $this->assertSame(1, $calls); } public function testGetOriginalKeysLoadsLoadedListOnFirstCall() { - $this->loader->expects($this->exactly(2)) - ->method('loadChoiceList') - ->with($this->value) - ->willReturn($this->loadedList); - - // The same list is returned by the loader - $this->loadedList->expects($this->exactly(2)) - ->method('getOriginalKeys') - ->willReturn(['RESULT']); - - $this->assertSame(['RESULT'], $this->list->getOriginalKeys()); - $this->assertSame(['RESULT'], $this->list->getOriginalKeys()); + $calls = 0; + $choices = [ + 'a' => 'foo', + 'b' => 'bar', + 'c' => 'baz', + ]; + $list = new LazyChoiceList(new ArrayChoiceLoader($choices), function ($choice) use (&$calls) { + ++$calls; + + return $choice; + }); + + $this->assertSame(['foo' => 'a', 'bar' => 'b', 'baz' => 'c'], $list->getOriginalKeys()); + $this->assertSame(['foo' => 'a', 'bar' => 'b', 'baz' => 'c'], $list->getOriginalKeys()); + $this->assertSame(3, $calls); } public function testGetChoicesForValuesForwardsCallIfListNotLoaded() { - $this->loader->expects($this->exactly(2)) - ->method('loadChoicesForValues') - ->with(['a', 'b']) - ->willReturn(['RESULT']); - - $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); - $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); + $calls = 0; + $choices = [ + 'a' => 'foo', + 'b' => 'bar', + 'c' => 'baz', + ]; + $list = new LazyChoiceList(new ArrayChoiceLoader($choices), function ($choice) use ($choices, &$calls) { + ++$calls; + + return array_search($choice, $choices); + }); + + $this->assertSame(['foo', 'bar'], $list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['foo', 'bar'], $list->getChoicesForValues(['a', 'b'])); + $this->assertSame(3, $calls); } public function testGetChoicesForValuesUsesLoadedList() { - $this->loader->expects($this->exactly(1)) - ->method('loadChoiceList') - ->with($this->value) - ->willReturn($this->loadedList); - - $this->loader->expects($this->exactly(2)) - ->method('loadChoicesForValues') - ->with(['a', 'b']) - ->willReturn(['RESULT']); + $choices = [ + 'a' => 'foo', + 'b' => 'bar', + 'c' => 'baz', + ]; + $list = new LazyChoiceList(new ArrayChoiceLoader($choices), function ($choice) use ($choices) { + return array_search($choice, $choices); + }); // load choice list - $this->list->getChoices(); + $list->getChoices(); - $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); - $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['foo', 'bar'], $list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['foo', 'bar'], $list->getChoicesForValues(['a', 'b'])); } public function testGetValuesForChoicesUsesLoadedList() { - $this->loader->expects($this->exactly(1)) - ->method('loadChoiceList') - ->with($this->value) - ->willReturn($this->loadedList); - - $this->loader->expects($this->exactly(2)) - ->method('loadValuesForChoices') - ->with(['a', 'b']) - ->willReturn(['RESULT']); + $choices = [ + 'a' => 'foo', + 'b' => 'bar', + 'c' => 'baz', + ]; + $list = new LazyChoiceList(new ArrayChoiceLoader($choices), function ($choice) use ($choices) { + return array_search($choice, $choices); + }); // load choice list - $this->list->getChoices(); + $list->getChoices(); - $this->assertSame(['RESULT'], $this->list->getValuesForChoices(['a', 'b'])); - $this->assertSame(['RESULT'], $this->list->getValuesForChoices(['a', 'b'])); + $this->assertSame(['a', 'b'], $list->getValuesForChoices(['foo', 'bar'])); + $this->assertSame(['a', 'b'], $list->getValuesForChoices(['foo', 'bar'])); } } diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Loader/FilterChoiceLoaderDecoratorTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Loader/FilterChoiceLoaderDecoratorTest.php index 095322f8baa6f..d4cc3ce72a4d0 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Loader/FilterChoiceLoaderDecoratorTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Loader/FilterChoiceLoaderDecoratorTest.php @@ -13,41 +13,29 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Form\ChoiceList\ArrayChoiceList; -use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface; use Symfony\Component\Form\ChoiceList\Loader\FilterChoiceLoaderDecorator; +use Symfony\Component\Form\Tests\Fixtures\ArrayChoiceLoader; class FilterChoiceLoaderDecoratorTest extends TestCase { public function testLoadChoiceList() { - $decorated = $this->createMock(ChoiceLoaderInterface::class); - $decorated->expects($this->once()) - ->method('loadChoiceList') - ->willReturn(new ArrayChoiceList(range(1, 4))) - ; - $filter = function ($choice) { return 0 === $choice % 2; }; - $loader = new FilterChoiceLoaderDecorator($decorated, $filter); + $loader = new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(range(1, 4)), $filter); $this->assertEquals(new ArrayChoiceList([1 => 2, 3 => 4]), $loader->loadChoiceList()); } public function testLoadChoiceListWithGroupedChoices() { - $decorated = $this->createMock(ChoiceLoaderInterface::class); - $decorated->expects($this->once()) - ->method('loadChoiceList') - ->willReturn(new ArrayChoiceList(['units' => range(1, 9), 'tens' => range(10, 90, 10)])) - ; - $filter = function ($choice) { return $choice < 9 && 0 === $choice % 2; }; - $loader = new FilterChoiceLoaderDecorator($decorated, $filter); + $loader = new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(['units' => range(1, 9), 'tens' => range(10, 90, 10)]), $filter); $this->assertEquals(new ArrayChoiceList([ 'units' => [ @@ -63,21 +51,11 @@ public function testLoadValuesForChoices() { $evenValues = [1 => '2', 3 => '4']; - $decorated = $this->createMock(ChoiceLoaderInterface::class); - $decorated->expects($this->never()) - ->method('loadChoiceList') - ; - $decorated->expects($this->once()) - ->method('loadValuesForChoices') - ->with([1 => 2, 3 => 4]) - ->willReturn($evenValues) - ; - $filter = function ($choice) { return 0 === $choice % 2; }; - $loader = new FilterChoiceLoaderDecorator($decorated, $filter); + $loader = new FilterChoiceLoaderDecorator(new ArrayChoiceLoader([range(1, 4)]), $filter); $this->assertSame($evenValues, $loader->loadValuesForChoices(range(1, 4))); } @@ -87,21 +65,11 @@ public function testLoadChoicesForValues() $evenChoices = [1 => 2, 3 => 4]; $values = array_map('strval', range(1, 4)); - $decorated = $this->createMock(ChoiceLoaderInterface::class); - $decorated->expects($this->never()) - ->method('loadChoiceList') - ; - $decorated->expects($this->once()) - ->method('loadChoicesForValues') - ->with($values) - ->willReturn(range(1, 4)) - ; - $filter = function ($choice) { return 0 === $choice % 2; }; - $loader = new FilterChoiceLoaderDecorator($decorated, $filter); + $loader = new FilterChoiceLoaderDecorator(new ArrayChoiceLoader(range(1, 4)), $filter); $this->assertEquals($evenChoices, $loader->loadChoicesForValues($values)); } diff --git a/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php index be54d2350d8ab..ad52a4fd25c2f 100644 --- a/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php @@ -189,10 +189,6 @@ class:%s */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $formRegistry = new FormRegistry([], new ResolvedFormTypeFactory()); $command = new DebugCommand($formRegistry); $application = new Application(); diff --git a/src/Symfony/Component/Form/Tests/CompoundFormTest.php b/src/Symfony/Component/Form/Tests/CompoundFormTest.php index 790e7eaf975a5..4fdb085a446d9 100644 --- a/src/Symfony/Component/Form/Tests/CompoundFormTest.php +++ b/src/Symfony/Component/Form/Tests/CompoundFormTest.php @@ -11,28 +11,50 @@ namespace Symfony\Component\Form\Tests; +use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\Exception\AlreadySubmittedException; use Symfony\Component\Form\Extension\Core\DataMapper\DataMapper; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler; -use Symfony\Component\Form\Form; +use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormErrorIterator; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; +use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\Forms; use Symfony\Component\Form\FormView; +use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Form\ResolvedFormTypeInterface; -use Symfony\Component\Form\SubmitButton; use Symfony\Component\Form\SubmitButtonBuilder; use Symfony\Component\Form\Tests\Fixtures\FixedDataTransformer; -use Symfony\Component\Form\Util\InheritDataAwareIterator; +use Symfony\Component\Form\Tests\Fixtures\Map; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\Request; -class CompoundFormTest extends AbstractFormTest +class CompoundFormTest extends TestCase { + /** + * @var FormFactoryInterface + */ + private $factory; + + /** + * @var FormInterface + */ + private $form; + + protected function setUp(): void + { + $this->factory = new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())); + $this->form = $this->createForm(); + } + public function testValidIfAllChildrenAreValid() { $this->form->add($this->getBuilder('firstName')->getForm()); @@ -66,7 +88,7 @@ public function testDisabledFormsValidEvenIfChildrenInvalid() $form = $this->getBuilder('person') ->setDisabled(true) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->add($this->getBuilder('name')) ->getForm(); @@ -131,10 +153,12 @@ public function testClearMissingFlagIsForwarded() $personForm->add($firstNameForm); $lastNameForm = $this->createForm('lastName', false); - $lastNameForm->setData('last name'); $personForm->add($lastNameForm); $this->form->add($personForm); + + $this->form->setData(['person' => ['lastName' => 'last name']]); + $this->form->submit(['person' => ['firstName' => 'foo']], false); $this->assertTrue($firstNameForm->isSubmitted()); @@ -158,10 +182,10 @@ public function testCloneChildren() public function testNotEmptyIfChildNotEmpty() { $child = $this->createForm('name', false); - $child->setData('foo'); $this->form->setData(null); $this->form->add($child); + $child->setData('foo'); $this->assertFalse($this->form->isEmpty()); } @@ -178,101 +202,72 @@ public function testAdd() public function testAddUsingNameAndType() { - $child = $this->getBuilder('foo')->getForm(); + $this->form->add('foo', TextType::class); - $this->factory->expects($this->once()) - ->method('createNamed') - ->with('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, [ - 'bar' => 'baz', - 'auto_initialize' => false, - ]) - ->willReturn($child); + $this->assertTrue($this->form->has('foo')); - $this->form->add('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType', ['bar' => 'baz']); + $child = $this->form->get('foo'); - $this->assertTrue($this->form->has('foo')); - $this->assertSame($this->form, $child->getParent()); + $this->assertInstanceOf(TextType::class, $child->getConfig()->getType()->getInnerType()); $this->assertSame(['foo' => $child], $this->form->all()); } public function testAddUsingIntegerNameAndType() { - $child = $this->getBuilder('0')->getForm(); - - $this->factory->expects($this->once()) - ->method('createNamed') - ->with('0', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, [ - 'bar' => 'baz', - 'auto_initialize' => false, - ]) - ->willReturn($child); - // in order to make casting unnecessary - $this->form->add(0, 'Symfony\Component\Form\Extension\Core\Type\TextType', ['bar' => 'baz']); + $this->form->add(0, TextType::class); $this->assertTrue($this->form->has(0)); - $this->assertSame($this->form, $child->getParent()); + + $child = $this->form->get(0); + + $this->assertInstanceOf(TextType::class, $child->getConfig()->getType()->getInnerType()); $this->assertSame([0 => $child], $this->form->all()); } public function testAddWithoutType() { - $child = $this->getBuilder('foo')->getForm(); - - $this->factory->expects($this->once()) - ->method('createNamed') - ->with('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType') - ->willReturn($child); - $this->form->add('foo'); $this->assertTrue($this->form->has('foo')); - $this->assertSame($this->form, $child->getParent()); + + $child = $this->form->get('foo'); + + $this->assertInstanceOf(TextType::class, $child->getConfig()->getType()->getInnerType()); $this->assertSame(['foo' => $child], $this->form->all()); } public function testAddUsingNameButNoType() { - $this->form = $this->getBuilder('name', null, \stdClass::class) + $this->form = $this->getBuilder('name', \stdClass::class) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->getForm(); - $child = $this->getBuilder('foo')->getForm(); - - $this->factory->expects($this->once()) - ->method('createForProperty') - ->with(\stdClass::class, 'foo') - ->willReturn($child); - $this->form->add('foo'); $this->assertTrue($this->form->has('foo')); - $this->assertSame($this->form, $child->getParent()); + + $child = $this->form->get('foo'); + + $this->assertInstanceOf(TextType::class, $child->getConfig()->getType()->getInnerType()); $this->assertSame(['foo' => $child], $this->form->all()); } public function testAddUsingNameButNoTypeAndOptions() { - $this->form = $this->getBuilder('name', null, \stdClass::class) + $this->form = $this->getBuilder('name', \stdClass::class) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->getForm(); - $child = $this->getBuilder('foo')->getForm(); + $this->form->add('foo'); - $this->factory->expects($this->once()) - ->method('createForProperty') - ->with(\stdClass::class, 'foo', null, [ - 'bar' => 'baz', - 'auto_initialize' => false, - ]) - ->willReturn($child); + $this->assertTrue($this->form->has('foo')); - $this->form->add('foo', null, ['bar' => 'baz']); + $child = $this->form->get('foo'); - $this->assertTrue($this->form->has('foo')); - $this->assertSame($this->form, $child->getParent()); + $this->assertInstanceOf(TextType::class, $child->getConfig()->getType()->getInnerType()); $this->assertSame(['foo' => $child], $this->form->all()); } @@ -340,60 +335,55 @@ public function testIterator() public function testAddMapsViewDataToFormIfInitialized() { - $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) - ->addViewTransformer(new FixedDataTransformer([ - '' => '', - 'foo' => 'bar', - ])) - ->setData('foo') + ->setDataMapper(new DataMapper()) + ->setData(['child' => 'foo']) ->getForm(); - $child = $this->getBuilder()->getForm(); - $mapper->expects($this->once()) - ->method('mapDataToForms') - ->with('bar', $this->isInstanceOf(\RecursiveIteratorIterator::class)) - ->willReturnCallback(function ($data, \RecursiveIteratorIterator $iterator) use ($child) { - $this->assertInstanceOf(InheritDataAwareIterator::class, $iterator->getInnerIterator()); - $this->assertSame([$child->getName() => $child], iterator_to_array($iterator)); - }); + $child = $this->getBuilder('child')->getForm(); + + $this->assertNull($child->getData()); $form->initialize(); $form->add($child); + + $this->assertSame('foo', $child->getData()); } public function testAddDoesNotMapViewDataToFormIfNotInitialized() { - $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) + ->setDataMapper(new DataMapper()) ->getForm(); $child = $this->getBuilder()->getForm(); - $mapper->expects($this->never()) - ->method('mapDataToForms'); $form->add($child); + + $this->assertNull($form->getData()); + $this->assertNull($form->getNormData()); + $this->assertNull($form->getViewData()); } public function testAddDoesNotMapViewDataToFormIfInheritData() { - $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) - ->setInheritData(true) + ->setDataMapper(new DataMapper()) ->getForm(); - $child = $this->getBuilder()->getForm(); - $mapper->expects($this->never()) - ->method('mapDataToForms'); + $child = $this->getBuilder() + ->setInheritData(true) + ->getForm(); $form->initialize(); $form->add($child); + + $this->assertNull($form->getData()); + $this->assertNull($form->getNormData()); + $this->assertNull($form->getViewData()); } public function testSetDataSupportsDynamicAdditionAndRemovalOfChildren() @@ -408,7 +398,7 @@ public function testSetDataSupportsDynamicAdditionAndRemovalOfChildren() $childToBeRemoved = $this->createForm('removed', false); $childToBeAdded = $this->createForm('added', false); - $child = $this->getBuilder('child', new EventDispatcher()) + $child = $this->getBuilder('child') ->setCompound(true) ->setDataMapper(new DataMapper()) ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($form, $childToBeAdded) { @@ -429,28 +419,24 @@ public function testSetDataSupportsDynamicAdditionAndRemovalOfChildren() public function testSetDataMapsViewDataToChildren() { - $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) - ->addViewTransformer(new FixedDataTransformer([ - '' => '', - 'foo' => 'bar', - ])) + ->setDataMapper(new DataMapper()) ->getForm(); $form->add($child1 = $this->getBuilder('firstName')->getForm()); $form->add($child2 = $this->getBuilder('lastName')->getForm()); - $mapper->expects($this->once()) - ->method('mapDataToForms') - ->with('bar', $this->isInstanceOf(\RecursiveIteratorIterator::class)) - ->willReturnCallback(function ($data, \RecursiveIteratorIterator $iterator) use ($child1, $child2) { - $this->assertInstanceOf(InheritDataAwareIterator::class, $iterator->getInnerIterator()); - $this->assertSame(['firstName' => $child1, 'lastName' => $child2], iterator_to_array($iterator)); - }); + $this->assertNull($child1->getData()); + $this->assertNull($child2->getData()); - $form->setData('foo'); + $form->setData([ + 'firstName' => 'foo', + 'lastName' => 'bar', + ]); + + $this->assertSame('foo', $child1->getData()); + $this->assertSame('bar', $child2->getData()); } public function testSetDataDoesNotMapViewDataToChildrenWithLockedSetData() @@ -503,59 +489,49 @@ public function testSubmitSupportsDynamicAdditionAndRemovalOfChildren() public function testSubmitMapsSubmittedChildrenOntoExistingViewData() { - $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) - ->addViewTransformer(new FixedDataTransformer([ - '' => '', - 'foo' => 'bar', - ])) - ->setData('foo') + ->setDataMapper(new DataMapper()) + ->setData([ + 'firstName' => null, + 'lastName' => null, + ]) ->getForm(); $form->add($child1 = $this->getBuilder('firstName')->setCompound(false)->getForm()); $form->add($child2 = $this->getBuilder('lastName')->setCompound(false)->getForm()); - $mapper->expects($this->once()) - ->method('mapFormsToData') - ->with($this->isInstanceOf(\RecursiveIteratorIterator::class), 'bar') - ->willReturnCallback(function (\RecursiveIteratorIterator $iterator) use ($child1, $child2) { - $this->assertInstanceOf(InheritDataAwareIterator::class, $iterator->getInnerIterator()); - $this->assertSame(['firstName' => $child1, 'lastName' => $child2], iterator_to_array($iterator)); - $this->assertEquals('Bernhard', $child1->getData()); - $this->assertEquals('Schussek', $child2->getData()); - }); + $this->assertSame(['firstName' => null, 'lastName' => null], $form->getData()); $form->submit([ 'firstName' => 'Bernhard', 'lastName' => 'Schussek', ]); + + $this->assertSame(['firstName' => 'Bernhard', 'lastName' => 'Schussek'], $form->getData()); } public function testMapFormsToDataIsNotInvokedIfInheritData() { - $mapper = $this->getDataMapper(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) - ->setInheritData(true) - ->addViewTransformer(new FixedDataTransformer([ - '' => '', - 'foo' => 'bar', - ])) + ->setDataMapper(new DataMapper()) ->getForm(); - $form->add($child1 = $this->getBuilder('firstName')->setCompound(false)->getForm()); - $form->add($child2 = $this->getBuilder('lastName')->setCompound(false)->getForm()); - - $mapper->expects($this->never()) - ->method('mapFormsToData'); + $form->add($child1 = $this->getBuilder('firstName')->setCompound(false)->setInheritData(true)->getForm()); + $form->add($child2 = $this->getBuilder('lastName')->setCompound(false)->setInheritData(true)->getForm()); $form->submit([ 'firstName' => 'Bernhard', 'lastName' => 'Schussek', ]); + + $this->assertNull($child1->getData()); + $this->assertNull($child1->getNormData()); + $this->assertNull($child1->getViewData()); + $this->assertNull($child2->getData()); + $this->assertNull($child2->getNormData()); + $this->assertNull($child2->getViewData()); } /* @@ -563,11 +539,10 @@ public function testMapFormsToDataIsNotInvokedIfInheritData() */ public function testSubmitRestoresViewDataIfCompoundAndEmpty() { - $mapper = $this->getDataMapper(); $object = new \stdClass(); - $form = $this->getBuilder('name', null, 'stdClass') + $form = $this->getBuilder('name', \stdClass::class) ->setCompound(true) - ->setDataMapper($mapper) + ->setDataMapper(new DataMapper()) ->setData($object) ->getForm(); @@ -578,28 +553,21 @@ public function testSubmitRestoresViewDataIfCompoundAndEmpty() public function testSubmitMapsSubmittedChildrenOntoEmptyData() { - $mapper = $this->getDataMapper(); - $object = new \stdClass(); + $object = new Map(); $form = $this->getBuilder() ->setCompound(true) - ->setDataMapper($mapper) + ->setDataMapper(new DataMapper()) ->setEmptyData($object) ->setData(null) ->getForm(); $form->add($child = $this->getBuilder('name')->setCompound(false)->getForm()); - $mapper->expects($this->once()) - ->method('mapFormsToData') - ->with($this->isInstanceOf(\RecursiveIteratorIterator::class), $object) - ->willReturnCallback(function (\RecursiveIteratorIterator $iterator) use ($child) { - $this->assertInstanceOf(InheritDataAwareIterator::class, $iterator->getInnerIterator()); - $this->assertSame(['name' => $child], iterator_to_array($iterator)); - }); - $form->submit([ 'name' => 'Bernhard', ]); + + $this->assertSame('Bernhard', $object['name']); } public function requestMethodProvider() @@ -644,7 +612,7 @@ public function testSubmitPostOrPutRequest($method) $form = $this->getBuilder('author') ->setMethod($method) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setRequestHandler(new HttpFoundationRequestHandler()) ->getForm(); $form->add($this->getBuilder('name')->getForm()); @@ -691,7 +659,7 @@ public function testSubmitPostOrPutRequestWithEmptyRootFormName($method) $form = $this->getBuilder('') ->setMethod($method) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setRequestHandler(new HttpFoundationRequestHandler()) ->getForm(); $form->add($this->getBuilder('name')->getForm()); @@ -731,7 +699,7 @@ public function testSubmitPostOrPutRequestWithSingleChildForm($method) 'REQUEST_METHOD' => $method, ]); - $form = $this->getBuilder('image', null, null, ['allow_file_upload' => true]) + $form = $this->getBuilder('image', null, ['allow_file_upload' => true]) ->setMethod($method) ->setRequestHandler(new HttpFoundationRequestHandler()) ->getForm(); @@ -790,7 +758,7 @@ public function testSubmitGetRequest() $form = $this->getBuilder('author') ->setMethod('GET') ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setRequestHandler(new HttpFoundationRequestHandler()) ->getForm(); $form->add($this->getBuilder('firstName')->getForm()); @@ -817,7 +785,7 @@ public function testSubmitGetRequestWithEmptyRootFormName() $form = $this->getBuilder('') ->setMethod('GET') ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setRequestHandler(new HttpFoundationRequestHandler()) ->getForm(); $form->add($this->getBuilder('firstName')->getForm()); @@ -966,9 +934,9 @@ public function testCreateViewWithChildren() ->method('createView') ->willReturn($field2View); - $this->form = $this->getBuilder('form', null, null, $options) + $this->form = $this->getBuilder('form', null, $options) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setType($type) ->getForm(); $this->form->add($field1); @@ -1002,20 +970,11 @@ public function testNoClickedButtonBeforeSubmission() public function testNoClickedButton() { - $button = $this->getMockBuilder(SubmitButton::class) - ->setConstructorArgs([new SubmitButtonBuilder('submit')]) - ->setMethods(['isClicked']) - ->getMock(); - - $button->expects($this->any()) - ->method('isClicked') - ->willReturn(false); - $parentForm = $this->getBuilder('parent')->getForm(); $nestedForm = $this->getBuilder('nested')->getForm(); $this->form->setParent($parentForm); - $this->form->add($button); + $this->form->add($this->factory->create(SubmitType::class)); $this->form->add($nestedForm); $this->form->submit([]); @@ -1024,55 +983,41 @@ public function testNoClickedButton() public function testClickedButton() { - $button = $this->getMockBuilder(SubmitButton::class) - ->setConstructorArgs([new SubmitButtonBuilder('submit')]) - ->setMethods(['isClicked']) - ->getMock(); - - $button->expects($this->any()) - ->method('isClicked') - ->willReturn(true); + $button = $this->factory->create(SubmitType::class); $this->form->add($button); - $this->form->submit([]); + $this->form->submit(['submit' => '']); $this->assertSame($button, $this->form->getClickedButton()); } public function testClickedButtonFromNestedForm() { - $button = $this->getBuilder('submit')->getForm(); - - $nestedForm = $this->getMockBuilder(Form::class) - ->setConstructorArgs([$this->getBuilder('nested')]) - ->setMethods(['getClickedButton']) - ->getMock(); + $button = $this->factory->create(SubmitType::class); - $nestedForm->expects($this->any()) - ->method('getClickedButton') - ->willReturn($button); + $nestedForm = $this->createForm('nested'); + $nestedForm->add($button); $this->form->add($nestedForm); - $this->form->submit([]); + $this->form->submit([ + 'nested' => [ + 'submit' => '', + ], + ]); $this->assertSame($button, $this->form->getClickedButton()); } public function testClickedButtonFromParentForm() { - $button = $this->getBuilder('submit')->getForm(); - - $parentForm = $this->getMockBuilder(Form::class) - ->setConstructorArgs([$this->getBuilder('parent')]) - ->setMethods(['getClickedButton']) - ->getMock(); - - $parentForm->expects($this->any()) - ->method('getClickedButton') - ->willReturn($button); + $button = $this->factory->create(SubmitType::class); - $this->form->setParent($parentForm); - $this->form->submit([]); + $parentForm = $this->createForm(''); + $parentForm->add($this->form); + $parentForm->add($button); + $parentForm->submit([ + 'submit' => '', + ]); $this->assertSame($button, $this->form->getClickedButton()); } @@ -1102,7 +1047,7 @@ public function testDisabledButtonIsNotSubmitted() public function testArrayTransformationFailureOnSubmit() { $this->form->add($this->getBuilder('foo')->setCompound(false)->getForm()); - $this->form->add($this->getBuilder('bar', null, null, ['multiple' => false])->setCompound(false)->getForm()); + $this->form->add($this->getBuilder('bar', null, ['multiple' => false])->setCompound(false)->getForm()); $this->form->submit([ 'foo' => ['foo'], @@ -1130,17 +1075,22 @@ public function testFileUpload() $this->assertNull($this->form->get('bar')->getData()); } - protected function createForm(string $name = 'name', bool $compound = true): FormInterface + private function createForm(string $name = 'name', bool $compound = true): FormInterface { $builder = $this->getBuilder($name); if ($compound) { $builder ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ; } return $builder->getForm(); } + + private function getBuilder(string $name = 'name', string $dataClass = null, array $options = []): FormBuilder + { + return new FormBuilder($name, $dataClass, new EventDispatcher(), $this->factory, $options); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/BaseDateTimeTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/BaseDateTimeTransformerTest.php index f6d4226e5bef9..e3f101a8aac96 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/BaseDateTimeTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/BaseDateTimeTransformerTest.php @@ -15,19 +15,21 @@ use Symfony\Component\Form\Exception\InvalidArgumentException; use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; -class BaseDateTimeTransformerTest extends TestCase +abstract class BaseDateTimeTransformerTest extends TestCase { public function testConstructFailsIfInputTimezoneIsInvalid() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('this_timezone_does_not_exist'); - $this->getMockBuilder(BaseDateTimeTransformer::class)->setConstructorArgs(['this_timezone_does_not_exist'])->getMock(); + $this->createDateTimeTransformer('this_timezone_does_not_exist'); } public function testConstructFailsIfOutputTimezoneIsInvalid() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('that_timezone_does_not_exist'); - $this->getMockBuilder(BaseDateTimeTransformer::class)->setConstructorArgs([null, 'that_timezone_does_not_exist'])->getMock(); + $this->createDateTimeTransformer(null, 'that_timezone_does_not_exist'); } + + abstract protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer; } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DataTransformerChainTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DataTransformerChainTest.php index 307667b1f75f2..30be21e590dec 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DataTransformerChainTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DataTransformerChainTest.php @@ -12,43 +12,27 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; use PHPUnit\Framework\TestCase; -use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Extension\Core\DataTransformer\DataTransformerChain; +use Symfony\Component\Form\Tests\Fixtures\FixedDataTransformer; class DataTransformerChainTest extends TestCase { public function testTransform() { - $transformer1 = $this->createMock(DataTransformerInterface::class); - $transformer1->expects($this->once()) - ->method('transform') - ->with($this->identicalTo('foo')) - ->willReturn('bar'); - $transformer2 = $this->createMock(DataTransformerInterface::class); - $transformer2->expects($this->once()) - ->method('transform') - ->with($this->identicalTo('bar')) - ->willReturn('baz'); - - $chain = new DataTransformerChain([$transformer1, $transformer2]); + $chain = new DataTransformerChain([ + new FixedDataTransformer(['foo' => 'bar']), + new FixedDataTransformer(['bar' => 'baz']), + ]); $this->assertEquals('baz', $chain->transform('foo')); } public function testReverseTransform() { - $transformer2 = $this->createMock(DataTransformerInterface::class); - $transformer2->expects($this->once()) - ->method('reverseTransform') - ->with($this->identicalTo('foo')) - ->willReturn('bar'); - $transformer1 = $this->createMock(DataTransformerInterface::class); - $transformer1->expects($this->once()) - ->method('reverseTransform') - ->with($this->identicalTo('bar')) - ->willReturn('baz'); - - $chain = new DataTransformerChain([$transformer1, $transformer2]); + $chain = new DataTransformerChain([ + new FixedDataTransformer(['baz' => 'bar']), + new FixedDataTransformer(['bar' => 'foo']), + ]); $this->assertEquals('baz', $chain->reverseTransform('foo')); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToArrayTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToArrayTransformerTest.php index 3ebfb9d1b51f8..3aafbec88a4ec 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToArrayTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToArrayTransformerTest.php @@ -11,11 +11,11 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; -use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer; -class DateTimeToArrayTransformerTest extends TestCase +class DateTimeToArrayTransformerTest extends BaseDateTimeTransformerTest { public function testTransform() { @@ -535,4 +535,9 @@ public function testReverseTransformWithEmptyStringSecond() 'second' => '', ]); } + + protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer + { + return new DateTimeToArrayTransformer($inputTimezone, $outputTimezone); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php index 2e4b4ba7e696c..6e6e66afb1861 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php @@ -11,12 +11,12 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; -use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToHtml5LocalDateTimeTransformer; use Symfony\Component\Form\Tests\Extension\Core\DataTransformer\Traits\DateTimeEqualsTrait; -class DateTimeToHtml5LocalDateTimeTransformerTest extends TestCase +class DateTimeToHtml5LocalDateTimeTransformerTest extends BaseDateTimeTransformerTest { use DateTimeEqualsTrait; @@ -115,4 +115,9 @@ public function testReverseTransformExpectsValidDateString() $transformer->reverseTransform('2010-2010-2010'); } + + protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer + { + return new DateTimeToHtml5LocalDateTimeTransformer($inputTimezone, $outputTimezone); + } } 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 cde7cd531a892..ece8df76b2318 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php @@ -11,13 +11,13 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; -use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer; use Symfony\Component\Form\Tests\Extension\Core\DataTransformer\Traits\DateTimeEqualsTrait; use Symfony\Component\Intl\Util\IntlTestHelper; -class DateTimeToLocalizedStringTransformerTest extends TestCase +class DateTimeToLocalizedStringTransformerTest extends BaseDateTimeTransformerTest { use DateTimeEqualsTrait; @@ -372,4 +372,9 @@ public function testReverseTransformWrapsIntlErrorsWithExceptionsAndErrorLevel() $transformer = new DateTimeToLocalizedStringTransformer(); $transformer->reverseTransform('12345'); } + + protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer + { + return new DateTimeToLocalizedStringTransformer($inputTimezone, $outputTimezone); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToRfc3339TransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToRfc3339TransformerTest.php index 0c28ac50951cd..eccaa22a136f3 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToRfc3339TransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToRfc3339TransformerTest.php @@ -11,12 +11,12 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; -use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToRfc3339Transformer; use Symfony\Component\Form\Tests\Extension\Core\DataTransformer\Traits\DateTimeEqualsTrait; -class DateTimeToRfc3339TransformerTest extends TestCase +class DateTimeToRfc3339TransformerTest extends BaseDateTimeTransformerTest { use DateTimeEqualsTrait; @@ -143,4 +143,9 @@ public function invalidDateStringProvider() 'RSS format' => ['Sat, 01 May 2010 04:05:00 +0000'], ]; } + + protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer + { + return new DateTimeToRfc3339Transformer($inputTimezone, $outputTimezone); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php index dc01ba15503d9..a7299e67ba237 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php @@ -11,11 +11,11 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; -use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; -class DateTimeToStringTransformerTest extends TestCase +class DateTimeToStringTransformerTest extends BaseDateTimeTransformerTest { public function dataProvider(): array { @@ -170,4 +170,9 @@ public function testReverseTransformWithNonExistingDate() $reverseTransformer->reverseTransform('2010-04-31'); } + + protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer + { + return new DateTimeToStringTransformer($inputTimezone, $outputTimezone); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToTimestampTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToTimestampTransformerTest.php index b02be9a168b87..7a84153a73834 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToTimestampTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToTimestampTransformerTest.php @@ -11,11 +11,11 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; -use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataTransformer\BaseDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer; -class DateTimeToTimestampTransformerTest extends TestCase +class DateTimeToTimestampTransformerTest extends BaseDateTimeTransformerTest { public function testTransform() { @@ -114,4 +114,9 @@ public function testReverseTransformExpectsValidTimestamp() $reverseTransformer->reverseTransform('2010-2010-2010'); } + + protected function createDateTimeTransformer(string $inputTimezone = null, string $outputTimezone = null): BaseDateTimeTransformer + { + return new DateTimeToTimestampTransformer($inputTimezone, $outputTimezone); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/PercentToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/PercentToLocalizedStringTransformerTest.php index c3502644bf766..47e71b8382aa4 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/PercentToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/PercentToLocalizedStringTransformerTest.php @@ -330,17 +330,7 @@ public function testDecimalSeparatorMayNotBeCommaIfGroupingSeparatorIsCommaWithN public function testDecimalSeparatorMayBeCommaIfGroupingSeparatorIsCommaButNoGroupingUsed() { - $formatter = new \NumberFormatter(\Locale::getDefault(), \NumberFormatter::DECIMAL); - $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 1); - $formatter->setAttribute(\NumberFormatter::GROUPING_USED, false); - - $transformer = $this->getMockBuilder(PercentToLocalizedStringTransformer::class) - ->setMethods(['getNumberFormatter']) - ->setConstructorArgs([1, 'integer', \NumberFormatter::ROUND_HALFUP]) - ->getMock(); - $transformer->expects($this->any()) - ->method('getNumberFormatter') - ->willReturn($formatter); + $transformer = new PercentToLocalizedStringTransformerWithoutGrouping(1, 'integer', \NumberFormatter::ROUND_HALFUP); $this->assertEquals(1234.5, $transformer->reverseTransform('1234,5')); $this->assertEquals(1234.5, $transformer->reverseTransform('1234.5')); @@ -486,3 +476,14 @@ public function testReverseTransformForHtml5FormatWithScale() $this->assertEquals(0.1234, $transformer->reverseTransform('12.34')); } } + +class PercentToLocalizedStringTransformerWithoutGrouping extends PercentToLocalizedStringTransformer +{ + protected function getNumberFormatter(): \NumberFormatter + { + $formatter = new \NumberFormatter(\Locale::getDefault(), \NumberFormatter::DECIMAL); + $formatter->setAttribute(\NumberFormatter::GROUPING_USED, false); + + return $formatter; + } +} diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php index 5db5e9e8ab92a..5ca5267430681 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php @@ -17,7 +17,7 @@ use Symfony\Component\Form\RequestHandlerInterface; use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\HttpFoundation\File\UploadedFile; -use Symfony\Contracts\Translation\TranslatorInterface; +use Symfony\Component\Translation\IdentityTranslator; class FileTypeTest extends BaseTypeTest { @@ -25,10 +25,7 @@ class FileTypeTest extends BaseTypeTest protected function getExtensions() { - $translator = $this->createMock(TranslatorInterface::class); - $translator->expects($this->any())->method('trans')->willReturnArgument(0); - - return array_merge(parent::getExtensions(), [new CoreExtension(null, null, $translator)]); + return array_merge(parent::getExtensions(), [new CoreExtension(null, null, new IdentityTranslator())]); } // https://github.com/symfony/symfony/pull/5028 @@ -210,7 +207,7 @@ public function testFailedFileUploadIsTurnedIntoFormErrorUsingHttpFoundationRequ $this->assertTrue($form->isValid()); } else { $this->assertFalse($form->isValid()); - $this->assertSame($expectedErrorMessage, $form->getErrors()[0]->getMessage()); + $this->assertMatchesRegularExpression($expectedErrorMessage, $form->getErrors()[0]->getMessage()); } } @@ -235,7 +232,7 @@ public function testFailedFileUploadIsTurnedIntoFormErrorUsingNativeRequestHandl $this->assertTrue($form->isValid()); } else { $this->assertFalse($form->isValid()); - $this->assertSame($expectedErrorMessage, $form->getErrors()[0]->getMessage()); + $this->assertMatchesRegularExpression($expectedErrorMessage, $form->getErrors()[0]->getMessage()); } } @@ -261,8 +258,8 @@ public function testMultipleSubmittedFailedFileUploadsAreTurnedIntoFormErrorUsin } else { $this->assertFalse($form->isValid()); $this->assertCount(2, $form->getErrors()); - $this->assertSame($expectedErrorMessage, $form->getErrors()[0]->getMessage()); - $this->assertSame($expectedErrorMessage, $form->getErrors()[1]->getMessage()); + $this->assertMatchesRegularExpression($expectedErrorMessage, $form->getErrors()[0]->getMessage()); + $this->assertMatchesRegularExpression($expectedErrorMessage, $form->getErrors()[1]->getMessage()); } } @@ -299,8 +296,8 @@ public function testMultipleSubmittedFailedFileUploadsAreTurnedIntoFormErrorUsin } else { $this->assertFalse($form->isValid()); $this->assertCount(2, $form->getErrors()); - $this->assertSame($expectedErrorMessage, $form->getErrors()[0]->getMessage()); - $this->assertSame($expectedErrorMessage, $form->getErrors()[1]->getMessage()); + $this->assertMatchesRegularExpression($expectedErrorMessage, $form->getErrors()[0]->getMessage()); + $this->assertMatchesRegularExpression($expectedErrorMessage, $form->getErrors()[1]->getMessage()); } } @@ -308,13 +305,13 @@ public function uploadFileErrorCodes() { return [ 'no error' => [\UPLOAD_ERR_OK, null], - 'upload_max_filesize ini directive' => [\UPLOAD_ERR_INI_SIZE, 'The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.'], - 'MAX_FILE_SIZE from form' => [\UPLOAD_ERR_FORM_SIZE, 'The file is too large.'], - 'partially uploaded' => [\UPLOAD_ERR_PARTIAL, 'The file could not be uploaded.'], - 'no file upload' => [\UPLOAD_ERR_NO_FILE, 'The file could not be uploaded.'], - 'missing temporary directory' => [\UPLOAD_ERR_NO_TMP_DIR, 'The file could not be uploaded.'], - 'write failure' => [\UPLOAD_ERR_CANT_WRITE, 'The file could not be uploaded.'], - 'stopped by extension' => [\UPLOAD_ERR_EXTENSION, 'The file could not be uploaded.'], + 'upload_max_filesize ini directive' => [\UPLOAD_ERR_INI_SIZE, '/The file is too large. Allowed maximum size is \d+ \S+\./'], + 'MAX_FILE_SIZE from form' => [\UPLOAD_ERR_FORM_SIZE, '/The file is too large\./'], + 'partially uploaded' => [\UPLOAD_ERR_PARTIAL, '/The file could not be uploaded\./'], + 'no file upload' => [\UPLOAD_ERR_NO_FILE, '/The file could not be uploaded\./'], + 'missing temporary directory' => [\UPLOAD_ERR_NO_TMP_DIR, '/The file could not be uploaded\./'], + 'write failure' => [\UPLOAD_ERR_CANT_WRITE, '/The file could not be uploaded\./'], + 'stopped by extension' => [\UPLOAD_ERR_EXTENSION, '/The file could not be uploaded\./'], ]; } diff --git a/src/Symfony/Component/Form/Tests/Extension/Csrf/EventListener/CsrfValidationListenerTest.php b/src/Symfony/Component/Form/Tests/Extension/Csrf/EventListener/CsrfValidationListenerTest.php index 5e074b07c0ab6..3d028ac801374 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Csrf/EventListener/CsrfValidationListenerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Csrf/EventListener/CsrfValidationListenerTest.php @@ -76,17 +76,18 @@ public function testArrayCsrfToken() public function testMaxPostSizeExceeded() { - $serverParams = $this->createMock(ServerParams::class); - $serverParams - ->expects($this->once()) - ->method('hasPostMaxSizeBeenExceeded') - ->willReturn(true) - ; - $event = new FormEvent($this->form, ['csrf' => 'token']); - $validation = new CsrfValidationListener('csrf', $this->tokenManager, 'unknown', 'Error message', null, null, $serverParams); + $validation = new CsrfValidationListener('csrf', $this->tokenManager, 'unknown', 'Error message', null, null, new ServerParamsPostMaxSizeExceeded()); $validation->preSubmit($event); $this->assertEmpty($this->form->getErrors()); } } + +class ServerParamsPostMaxSizeExceeded extends ServerParams +{ + public function hasPostMaxSizeBeenExceeded(): bool + { + return true; + } +} diff --git a/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php index 0adaab003b290..b8e2cf7bcacc6 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php @@ -19,7 +19,7 @@ use Symfony\Component\Form\Test\TypeTestCase; use Symfony\Component\Security\Csrf\CsrfToken; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; -use Symfony\Contracts\Translation\TranslatorInterface; +use Symfony\Component\Translation\IdentityTranslator; class FormTypeCsrfExtensionTest_ChildType extends AbstractType { @@ -38,32 +38,17 @@ class FormTypeCsrfExtensionTest extends TypeTestCase */ protected $tokenManager; - /** - * @var MockObject&TranslatorInterface - */ - protected $translator; - protected function setUp(): void { $this->tokenManager = $this->createMock(CsrfTokenManagerInterface::class); - $this->translator = $this->createMock(TranslatorInterface::class); - $this->translator->expects($this->any())->method('trans')->willReturnArgument(0); parent::setUp(); } - protected function tearDown(): void - { - $this->tokenManager = null; - $this->translator = null; - - parent::tearDown(); - } - protected function getExtensions() { return array_merge(parent::getExtensions(), [ - new CsrfExtension($this->tokenManager, $this->translator), + new CsrfExtension($this->tokenManager, new IdentityTranslator()), ]); } diff --git a/src/Symfony/Component/Form/Tests/Extension/DataCollector/DataCollectorExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/DataCollector/DataCollectorExtensionTest.php index 9c02d2aff1d3f..0ae127d0775d1 100644 --- a/src/Symfony/Component/Form/Tests/Extension/DataCollector/DataCollectorExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/DataCollector/DataCollectorExtensionTest.php @@ -11,10 +11,10 @@ namespace Symfony\Component\Form\Tests\Extension\DataCollector; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Extension\DataCollector\DataCollectorExtension; -use Symfony\Component\Form\Extension\DataCollector\FormDataCollectorInterface; +use Symfony\Component\Form\Extension\DataCollector\FormDataCollector; +use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor; use Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension; class DataCollectorExtensionTest extends TestCase @@ -24,15 +24,9 @@ class DataCollectorExtensionTest extends TestCase */ private $extension; - /** - * @var MockObject&FormDataCollectorInterface - */ - private $dataCollector; - protected function setUp(): void { - $this->dataCollector = $this->createMock(FormDataCollectorInterface::class); - $this->extension = new DataCollectorExtension($this->dataCollector); + $this->extension = new DataCollectorExtension(new FormDataCollector(new FormDataExtractor())); } public function testLoadTypeExtensions() diff --git a/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataCollectorTest.php b/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataCollectorTest.php index dee4789f8d312..39009b598c530 100644 --- a/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataCollectorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataCollectorTest.php @@ -11,18 +11,15 @@ namespace Symfony\Component\Form\Tests\Extension\DataCollector; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\Extension\Core\CoreExtension; -use Symfony\Component\Form\Extension\Core\DataMapper\DataMapper; use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\DataCollector\FormDataCollector; -use Symfony\Component\Form\Extension\DataCollector\FormDataExtractorInterface; +use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor; use Symfony\Component\Form\Form; -use Symfony\Component\Form\FormBuilder; +use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormRegistry; @@ -31,31 +28,16 @@ class FormDataCollectorTest extends TestCase { - /** - * @var MockObject&FormDataExtractorInterface - */ - private $dataExtractor; - /** * @var FormDataCollector */ private $dataCollector; - /** - * @var EventDispatcher - */ - private $dispatcher; - /** * @var FormFactory */ private $factory; - /** - * @var PropertyPathMapper - */ - private $dataMapper; - /** * @var Form */ @@ -78,13 +60,10 @@ class FormDataCollectorTest extends TestCase protected function setUp(): void { - $this->dataExtractor = $this->createMock(FormDataExtractorInterface::class); - $this->dataCollector = new FormDataCollector($this->dataExtractor); - $this->dispatcher = new EventDispatcher(); + $this->dataCollector = new FormDataCollector(new FormDataExtractor()); $this->factory = new FormFactory(new FormRegistry([new CoreExtension()], new ResolvedFormTypeFactory())); - $this->dataMapper = new DataMapper(); $this->form = $this->createForm('name'); - $this->childForm = $this->createForm('child'); + $this->childForm = $this->createChildForm('child'); $this->view = new FormView(); $this->childView = new FormView(); } @@ -93,62 +72,51 @@ public function testBuildPreliminaryFormTree() { $this->form->add($this->childForm); - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractConfiguration') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['config' => 'foo'], - ['config' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractDefaultData') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['default_data' => 'foo'], - ['default_data' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractSubmittedData') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['submitted_data' => 'foo'], - ['submitted_data' => 'bar'] - ); - $this->dataCollector->collectConfiguration($this->form); $this->dataCollector->collectDefaultData($this->form); $this->dataCollector->collectSubmittedData($this->form); $this->dataCollector->buildPreliminaryFormTree($this->form); $childFormData = [ - 'config' => 'bar', - 'default_data' => 'bar', - 'submitted_data' => 'bar', - 'children' => [], + 'id' => 'name_child', + 'name' => 'child', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->childForm->getConfig()->getOptions(), + 'default_data' => [ + 'norm' => null, + 'view' => '', + ], + 'submitted_data' => [ + 'norm' => null, + 'view' => '', + ], + 'errors' => [], + 'children' => [], ]; $formData = [ - 'config' => 'foo', - 'default_data' => 'foo', - 'submitted_data' => 'foo', + 'id' => 'name', + 'name' => 'name', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->form->getConfig()->getOptions(), + 'default_data' => [ + 'norm' => null, + ], + 'submitted_data' => [ + 'norm' => null, + ], + 'errors' => [], 'has_children_error' => false, 'children' => [ 'child' => $childFormData, ], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -165,27 +133,21 @@ public function testBuildMultiplePreliminaryFormTrees() $form1 = $this->createForm('form1'); $form2 = $this->createForm('form2'); - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractConfiguration') - ->withConsecutive( - [$form1], - [$form2] - ) - ->willReturnOnConsecutiveCalls( - ['config' => 'foo'], - ['config' => 'bar'] - ); - $this->dataCollector->collectConfiguration($form1); $this->dataCollector->collectConfiguration($form2); $this->dataCollector->buildPreliminaryFormTree($form1); $form1Data = [ - 'config' => 'foo', + 'id' => 'form1', + 'name' => 'form1', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $form1->getConfig()->getOptions(), 'children' => [], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'form1' => $form1Data, ], @@ -198,11 +160,16 @@ public function testBuildMultiplePreliminaryFormTrees() $this->dataCollector->buildPreliminaryFormTree($form2); $form2Data = [ - 'config' => 'bar', + 'id' => 'form2', + 'name' => 'form2', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $form2->getConfig()->getOptions(), 'children' => [], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'form1' => $form1Data, 'form2' => $form2Data, @@ -217,25 +184,20 @@ public function testBuildMultiplePreliminaryFormTrees() public function testBuildSamePreliminaryFormTreeMultipleTimes() { - $this->dataExtractor - ->method('extractConfiguration') - ->with($this->form) - ->willReturn(['config' => 'foo']); - - $this->dataExtractor - ->method('extractDefaultData') - ->with($this->form) - ->willReturn(['default_data' => 'foo']); - $this->dataCollector->collectConfiguration($this->form); $this->dataCollector->buildPreliminaryFormTree($this->form); $formData = [ - 'config' => 'foo', + 'id' => 'name', + 'name' => 'name', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->form->getConfig()->getOptions(), 'children' => [], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -249,12 +211,20 @@ public function testBuildSamePreliminaryFormTreeMultipleTimes() $this->dataCollector->buildPreliminaryFormTree($this->form); $formData = [ - 'config' => 'foo', - 'default_data' => 'foo', + 'id' => 'name', + 'name' => 'name', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->form->getConfig()->getOptions(), + 'default_data' => [ + 'norm' => null, + ], + 'submitted_data' => [], 'children' => [], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -273,7 +243,7 @@ public function testBuildPreliminaryFormTreeWithoutCollectingAnyData() 'children' => [], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -289,50 +259,6 @@ public function testBuildFinalFormTree() $this->form->add($this->childForm); $this->view->children['child'] = $this->childView; - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractConfiguration') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['config' => 'foo'], - ['config' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractDefaultData') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['default_data' => 'foo'], - ['default_data' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractSubmittedData') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['submitted_data' => 'foo'], - ['submitted_data' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractViewVariables') - ->withConsecutive( - [$this->view], - [$this->childView] - ) - ->willReturnOnConsecutiveCalls( - ['view_vars' => 'foo'], - ['view_vars' => 'bar'] - ); - $this->dataCollector->collectConfiguration($this->form); $this->dataCollector->collectDefaultData($this->form); $this->dataCollector->collectSubmittedData($this->form); @@ -340,25 +266,53 @@ public function testBuildFinalFormTree() $this->dataCollector->buildFinalFormTree($this->form, $this->view); $childFormData = [ - 'view_vars' => 'bar', - 'config' => 'bar', - 'default_data' => 'bar', - 'submitted_data' => 'bar', + 'id' => 'name_child', + 'name' => 'child', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->childForm->getConfig()->getOptions(), + 'default_data' => [ + 'norm' => null, + 'view' => '', + ], + 'submitted_data' => [ + 'norm' => null, + 'view' => '', + ], + 'errors' => [], + 'view_vars' => [ + 'attr' => [], + 'value' => null, + ], 'children' => [], ]; $formData = [ - 'view_vars' => 'foo', - 'config' => 'foo', - 'default_data' => 'foo', - 'submitted_data' => 'foo', + 'id' => 'name', + 'name' => 'name', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->form->getConfig()->getOptions(), + 'default_data' => [ + 'norm' => null, + ], + 'submitted_data' => [ + 'norm' => null, + ], + 'errors' => [], + 'view_vars' => [ + 'attr' => [], + 'value' => null, + ], 'has_children_error' => false, 'children' => [ 'child' => $childFormData, ], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -372,9 +326,11 @@ public function testBuildFinalFormTree() public function testSerializeWithFormAddedMultipleTimes() { + $this->expectNotToPerformAssertions(); + $form1 = $this->createForm('form1'); $form2 = $this->createForm('form2'); - $child1 = $this->createForm('child1'); + $child1 = $this->createChildForm('child1'); $form1View = new FormView(); $form2View = new FormView(); @@ -389,66 +345,6 @@ public function testSerializeWithFormAddedMultipleTimes() $form1View->children['child1'] = $child1View; $form2View->children['child1'] = $child1View; - $this->dataExtractor->expects($this->exactly(4)) - ->method('extractConfiguration') - ->withConsecutive( - [$form1], - [$child1], - [$form2], - [$child1] - ) - ->willReturnOnConsecutiveCalls( - ['config' => 'foo'], - ['config' => 'bar'], - ['config' => 'foo'], - ['config' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(4)) - ->method('extractDefaultData') - ->withConsecutive( - [$form1], - [$child1], - [$form2], - [$child1] - ) - ->willReturnOnConsecutiveCalls( - ['default_data' => 'foo'], - ['default_data' => 'bar'], - ['default_data' => 'foo'], - ['default_data' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(4)) - ->method('extractSubmittedData') - ->withConsecutive( - [$form1], - [$child1], - [$form2], - [$child1] - ) - ->willReturnOnConsecutiveCalls( - ['submitted_data' => 'foo'], - ['submitted_data' => 'bar'], - ['submitted_data' => 'foo'], - ['submitted_data' => 'bar'] - ); - - $this->dataExtractor->expects($this->exactly(4)) - ->method('extractViewVariables') - ->withConsecutive( - [$form1View], - [$child1View], - [$form2View], - [$child1View] - ) - ->willReturnOnConsecutiveCalls( - ['view_vars' => 'foo'], - ['view_vars' => $child1View->vars], - ['view_vars' => 'foo'], - ['view_vars' => $child1View->vars] - ); - $this->dataCollector->collectConfiguration($form1); $this->dataCollector->collectDefaultData($form1); $this->dataCollector->collectSubmittedData($form1); @@ -466,8 +362,8 @@ public function testSerializeWithFormAddedMultipleTimes() public function testFinalFormReliesOnFormViewStructure() { - $this->form->add($child1 = $this->createForm('first')); - $this->form->add($child2 = $this->createForm('second')); + $this->form->add($child1 = $this->createChildForm('first')); + $this->form->add($child2 = $this->createChildForm('second')); $this->view->children['second'] = $this->childView; @@ -488,7 +384,7 @@ public function testFinalFormReliesOnFormViewStructure() ], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -509,7 +405,7 @@ public function testFinalFormReliesOnFormViewStructure() ], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -528,17 +424,6 @@ public function testChildViewsCanBeWithoutCorrespondingChildForms() $this->view->children['child'] = $this->childView; - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractConfiguration') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['config' => 'foo'], - ['config' => 'bar'] - ); - // explicitly call collectConfiguration(), since $this->childForm is not // contained in the form tree $this->dataCollector->collectConfiguration($this->form); @@ -551,13 +436,18 @@ public function testChildViewsCanBeWithoutCorrespondingChildForms() ]; $formData = [ - 'config' => 'foo', + 'id' => 'name', + 'name' => 'name', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->form->getConfig()->getOptions(), 'children' => [ 'child' => $childFormData, ], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -578,17 +468,6 @@ public function testChildViewsWithoutCorrespondingChildFormsMayBeExplicitlyAssoc // but associate the two $this->dataCollector->associateFormWithView($this->childForm, $this->childView); - $this->dataExtractor->expects($this->exactly(2)) - ->method('extractConfiguration') - ->withConsecutive( - [$this->form], - [$this->childForm] - ) - ->willReturnOnConsecutiveCalls( - ['config' => 'foo'], - ['config' => 'bar'] - ); - // explicitly call collectConfiguration(), since $this->childForm is not // contained in the form tree $this->dataCollector->collectConfiguration($this->form); @@ -596,18 +475,28 @@ public function testChildViewsWithoutCorrespondingChildFormsMayBeExplicitlyAssoc $this->dataCollector->buildFinalFormTree($this->form, $this->view); $childFormData = [ - 'config' => 'bar', + 'id' => 'child', + 'name' => 'child', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->childForm->getConfig()->getOptions(), 'children' => [], ]; $formData = [ - 'config' => 'foo', + 'id' => 'name', + 'name' => 'name', + 'type_class' => FormType::class, + 'synchronized' => true, + 'passed_options' => [], + 'resolved_options' => $this->form->getConfig()->getOptions(), 'children' => [ 'child' => $childFormData, ], ]; - $this->assertSame([ + $this->assertEquals([ 'forms' => [ 'name' => $formData, ], @@ -622,28 +511,15 @@ public function testChildViewsWithoutCorrespondingChildFormsMayBeExplicitlyAssoc public function testCollectSubmittedDataCountsErrors() { $form1 = $this->createForm('form1'); - $childForm1 = $this->createForm('child1'); + $childForm1 = $this->createChildForm('child1'); $form2 = $this->createForm('form2'); $form1->add($childForm1); - $this->dataExtractor - ->method('extractConfiguration') - ->willReturn([]); - $this->dataExtractor - ->method('extractDefaultData') - ->willReturn([]); - $this->dataExtractor->expects($this->exactly(3)) - ->method('extractSubmittedData') - ->withConsecutive( - [$form1], - [$childForm1], - [$form2] - ) - ->willReturnOnConsecutiveCalls( - ['errors' => ['foo']], - ['errors' => ['bar', 'bam']], - ['errors' => ['baz']] - ); + + $form1->addError(new FormError('foo')); + $childForm1->addError(new FormError('bar')); + $childForm1->addError(new FormError('bam')); + $form2->addError(new FormError('baz')); $this->dataCollector->collectSubmittedData($form1); @@ -658,38 +534,17 @@ public function testCollectSubmittedDataCountsErrors() public function testCollectSubmittedDataExpandedFormsErrors() { - $child1Form = $this->createForm('child1'); - $child11Form = $this->createForm('child11'); - $child2Form = $this->createForm('child2'); - $child21Form = $this->createForm('child21'); + $child1Form = $this->createChildForm('child1', true); + $child11Form = $this->createChildForm('child11'); + $child2Form = $this->createChildForm('child2', true); + $child21Form = $this->createChildForm('child21'); $child1Form->add($child11Form); $child2Form->add($child21Form); $this->form->add($child1Form); $this->form->add($child2Form); - $this->dataExtractor - ->method('extractConfiguration') - ->willReturn([]); - $this->dataExtractor - ->method('extractDefaultData') - ->willReturn([]); - $this->dataExtractor->expects($this->exactly(5)) - ->method('extractSubmittedData') - ->withConsecutive( - [$this->form], - [$child1Form], - [$child11Form], - [$child2Form], - [$child21Form] - ) - ->willReturnOnConsecutiveCalls( - ['errors' => []], - ['errors' => []], - ['errors' => ['foo']], - ['errors' => []], - ['errors' => []] - ); + $child11Form->addError(new FormError('foo')); $this->dataCollector->collectSubmittedData($this->form); $this->dataCollector->buildPreliminaryFormTree($this->form); @@ -712,20 +567,12 @@ public function testReset() { $form = $this->createForm('my_form'); - $this->dataExtractor->expects($this->any()) - ->method('extractConfiguration') - ->willReturn([]); - $this->dataExtractor->expects($this->any()) - ->method('extractDefaultData') - ->willReturn([]); - $this->dataExtractor->expects($this->any()) - ->method('extractSubmittedData') - ->with($form) - ->willReturn(['errors' => ['baz']]); - $this->dataCollector->buildPreliminaryFormTree($form); $this->dataCollector->collectSubmittedData($form); + $this->assertGreaterThan(0, \count($this->dataCollector->getData()['forms'])); + $this->assertGreaterThan(0, \count($this->dataCollector->getData()['forms_by_hash'])); + $this->dataCollector->reset(); $this->assertSame( @@ -753,47 +600,45 @@ public function testCollectMissingDataFromChildFormAddedOnFormEvents() ]) ->getForm() ; - $this->dataExtractor->expects($extractConfiguration = $this->exactly(4)) - ->method('extractConfiguration') - ->willReturn([]) - ; - $this->dataExtractor->expects($extractDefaultData = $this->exactly(4)) - ->method('extractDefaultData') - ->willReturnCallback(static function (FormInterface $form) { - // this simulate the call in extractDefaultData() method - // where (if defaultDataSet is false) it fires *_SET_DATA - // events, adding the form related to the configured data - $form->getNormData(); - - return []; - }) - ; - $this->dataExtractor->expects($this->exactly(4)) - ->method('extractSubmittedData') - ->willReturn([]) - ; $this->dataCollector->collectConfiguration($form); - $this->assertSame(2, $extractConfiguration->getInvocationCount(), 'only "root" and "items" forms were collected, the "items" children do not exist yet.'); + $this->dataCollector->buildPreliminaryFormTree($form); + $data = $this->dataCollector->getData(); + $this->assertCount(2, $data['forms_by_hash'], 'only "root" and "items" forms were collected, the "items" children do not exist yet.'); + + foreach ($data['forms_by_hash'] as $formData) { + $this->assertArrayNotHasKey('default_data', $formData); + } $this->dataCollector->collectDefaultData($form); - $this->assertSame(3, $extractConfiguration->getInvocationCount(), 'extracted missing configuration of the "items" children ["0" => foo].'); - $this->assertSame(3, $extractDefaultData->getInvocationCount()); + $this->dataCollector->buildPreliminaryFormTree($form); + $data = $this->dataCollector->getData(); + $this->assertCount(3, $data['forms_by_hash'], 'extracted missing configuration of the "items" children ["0" => foo].'); $this->assertSame(['foo'], $form->get('items')->getData()); + foreach ($data['forms_by_hash'] as $formData) { + $this->assertArrayHasKey('default_data', $formData); + } + $form->submit(['items' => ['foo', 'bar']]); $this->dataCollector->collectSubmittedData($form); - $this->assertSame(4, $extractConfiguration->getInvocationCount(), 'extracted missing configuration of the "items" children ["1" => bar].'); - $this->assertSame(4, $extractDefaultData->getInvocationCount(), 'extracted missing default data of the "items" children ["1" => bar].'); + $this->dataCollector->buildPreliminaryFormTree($form); + $data = $this->dataCollector->getData(); + $this->assertCount(4, $data['forms_by_hash'], 'extracted missing configuration of the "items" children ["1" => bar].'); $this->assertSame(['foo', 'bar'], $form->get('items')->getData()); + + foreach ($data['forms_by_hash'] as $formData) { + $this->assertArrayHasKey('default_data', $formData); + } } - private function createForm($name) + private function createForm(string $name): FormInterface { - $builder = new FormBuilder($name, null, $this->dispatcher, $this->factory); - $builder->setCompound(true); - $builder->setDataMapper($this->dataMapper); + return $this->factory->createNamedBuilder($name)->getForm(); + } - return $builder->getForm(); + private function createChildForm(string $name, bool $compound = false): FormInterface + { + return $this->factory->createNamedBuilder($name, FormType::class, null, ['auto_initialize' => false, 'compound' => $compound])->getForm(); } } diff --git a/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php b/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php index 10f624b1d823b..b496b71fd57ac 100644 --- a/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php @@ -11,19 +11,20 @@ namespace Symfony\Component\Form\Tests\Extension\DataCollector; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\CallbackTransformer; -use Symfony\Component\Form\DataMapperInterface; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataMapper\DataMapper; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor; use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormError; -use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\FormView; -use Symfony\Component\Form\ResolvedFormTypeInterface; +use Symfony\Component\Form\ResolvedFormType; +use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Form\Tests\Fixtures\FixedDataTransformer; use Symfony\Component\Validator\ConstraintViolation; use Symfony\Component\VarDumper\Test\VarDumperTestTrait; @@ -40,32 +41,15 @@ class FormDataExtractorTest extends TestCase */ private $dataExtractor; - /** - * @var MockObject&EventDispatcherInterface - */ - private $dispatcher; - - /** - * @var MockObject&FormFactoryInterface - */ - private $factory; - protected function setUp(): void { $this->dataExtractor = new FormDataExtractor(); - $this->dispatcher = $this->createMock(EventDispatcherInterface::class); - $this->factory = $this->createMock(FormFactoryInterface::class); } public function testExtractConfiguration() { - $type = $this->createMock(ResolvedFormTypeInterface::class); - $type->expects($this->any()) - ->method('getInnerType') - ->willReturn(new HiddenType()); - $form = $this->createBuilder('name') - ->setType($type) + ->setType(new ResolvedFormType(new HiddenType())) ->getForm(); $this->assertSame([ @@ -80,11 +64,6 @@ public function testExtractConfiguration() public function testExtractConfigurationSortsPassedOptions() { - $type = $this->createMock(ResolvedFormTypeInterface::class); - $type->expects($this->any()) - ->method('getInnerType') - ->willReturn(new HiddenType()); - $options = [ 'b' => 'foo', 'a' => 'bar', @@ -92,7 +71,7 @@ public function testExtractConfigurationSortsPassedOptions() ]; $form = $this->createBuilder('name') - ->setType($type) + ->setType(new ResolvedFormType(new HiddenType())) // passed options are stored in an attribute by // ResolvedTypeDataCollectorProxy ->setAttribute('data_collector/passed_options', $options) @@ -114,11 +93,6 @@ public function testExtractConfigurationSortsPassedOptions() public function testExtractConfigurationSortsResolvedOptions() { - $type = $this->createMock(ResolvedFormTypeInterface::class); - $type->expects($this->any()) - ->method('getInnerType') - ->willReturn(new HiddenType()); - $options = [ 'b' => 'foo', 'a' => 'bar', @@ -126,7 +100,7 @@ public function testExtractConfigurationSortsResolvedOptions() ]; $form = $this->createBuilder('name', $options) - ->setType($type) + ->setType(new ResolvedFormType(new HiddenType())) ->getForm(); $this->assertSame([ @@ -145,21 +119,16 @@ public function testExtractConfigurationSortsResolvedOptions() public function testExtractConfigurationBuildsIdRecursively() { - $type = $this->createMock(ResolvedFormTypeInterface::class); - $type->expects($this->any()) - ->method('getInnerType') - ->willReturn(new HiddenType()); - $grandParent = $this->createBuilder('grandParent') ->setCompound(true) - ->setDataMapper($this->createMock(DataMapperInterface::class)) + ->setDataMapper(new DataMapper()) ->getForm(); $parent = $this->createBuilder('parent') ->setCompound(true) - ->setDataMapper($this->createMock(DataMapperInterface::class)) + ->setDataMapper(new DataMapper()) ->getForm(); $form = $this->createBuilder('name') - ->setType($type) + ->setType(new ResolvedFormType(new HiddenType())) ->getForm(); $grandParent->add($parent); @@ -418,6 +387,6 @@ public function testExtractViewVariables() private function createBuilder(string $name, array $options = []): FormBuilder { - return new FormBuilder($name, null, $this->dispatcher, $this->factory, $options); + return new FormBuilder($name, null, new EventDispatcher(), new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())), $options); } } diff --git a/src/Symfony/Component/Form/Tests/Extension/DataCollector/Type/DataCollectorTypeExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/DataCollector/Type/DataCollectorTypeExtensionTest.php index 519b79e629704..1f7d6a817dd44 100644 --- a/src/Symfony/Component/Form/Tests/Extension/DataCollector/Type/DataCollectorTypeExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/DataCollector/Type/DataCollectorTypeExtensionTest.php @@ -11,12 +11,16 @@ namespace Symfony\Component\Form\Tests\Extension\DataCollector\Type; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\Form\Extension\DataCollector\EventListener\DataCollectorListener; -use Symfony\Component\Form\Extension\DataCollector\FormDataCollectorInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\Form\Extension\DataCollector\FormDataCollector; +use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor; use Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension; -use Symfony\Component\Form\Test\FormBuilderInterface; +use Symfony\Component\Form\FormBuilder; +use Symfony\Component\Form\FormEvents; +use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormRegistry; +use Symfony\Component\Form\ResolvedFormTypeFactory; class DataCollectorTypeExtensionTest extends TestCase { @@ -25,15 +29,9 @@ class DataCollectorTypeExtensionTest extends TestCase */ private $extension; - /** - * @var MockObject&FormDataCollectorInterface - */ - private $dataCollector; - protected function setUp(): void { - $this->dataCollector = $this->createMock(FormDataCollectorInterface::class); - $this->extension = new DataCollectorTypeExtension($this->dataCollector); + $this->extension = new DataCollectorTypeExtension(new FormDataCollector(new FormDataExtractor())); } public function testGetExtendedType() @@ -43,11 +41,19 @@ public function testGetExtendedType() public function testBuildForm() { - $builder = $this->createMock(FormBuilderInterface::class); - $builder->expects($this->atLeastOnce()) - ->method('addEventSubscriber') - ->with($this->isInstanceOf(DataCollectorListener::class)); - - $this->extension->buildForm($builder, []); + $eventDispatcher = new EventDispatcher(); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::PRE_SET_DATA)); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::POST_SET_DATA)); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::PRE_SUBMIT)); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::SUBMIT)); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::POST_SUBMIT)); + + $this->extension->buildForm(new FormBuilder(null, null, $eventDispatcher, new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory()))), []); + + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::PRE_SET_DATA)); + $this->assertTrue($eventDispatcher->hasListeners(FormEvents::POST_SET_DATA)); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::PRE_SUBMIT)); + $this->assertFalse($eventDispatcher->hasListeners(FormEvents::SUBMIT)); + $this->assertTrue($eventDispatcher->hasListeners(FormEvents::POST_SUBMIT)); } } diff --git a/src/Symfony/Component/Form/Tests/Extension/DependencyInjection/DependencyInjectionExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/DependencyInjection/DependencyInjectionExtensionTest.php index eb0a13c3334a6..b99240c8cb30f 100644 --- a/src/Symfony/Component/Form/Tests/Extension/DependencyInjection/DependencyInjectionExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/DependencyInjection/DependencyInjectionExtensionTest.php @@ -17,7 +17,6 @@ use Symfony\Component\Form\Exception\InvalidArgumentException; use Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension; use Symfony\Component\Form\FormTypeGuesserChain; -use Symfony\Component\Form\FormTypeGuesserInterface; class DependencyInjectionExtensionTest extends TestCase { @@ -58,7 +57,7 @@ public function testThrowExceptionForInvalidExtendedType() public function testGetTypeGuesser() { - $extension = new DependencyInjectionExtension(new ContainerBuilder(), [], [$this->createMock(FormTypeGuesserInterface::class)]); + $extension = new DependencyInjectionExtension(new ContainerBuilder(), [], [new FormTypeGuesserChain([])]); $this->assertInstanceOf(FormTypeGuesserChain::class, $extension->getTypeGuesser()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php index 78ae4c8baeab0..117ee6818fec3 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php @@ -366,7 +366,7 @@ function () { throw new TransformationFailedException(); } public function testTransformationFailedExceptionInvalidMessageIsUsed() { - $object = $this->createMock('\stdClass'); + $object = new \stdClass(); $form = $this ->getBuilder('name', '\stdClass', [ diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php index 858be09c78cfe..08b8caaedd5f5 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/ViolationMapper/ViolationMapperTest.php @@ -25,6 +25,8 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormRenderer; use Symfony\Component\Form\Tests\Extension\Validator\ViolationMapper\Fixtures\Issue; +use Symfony\Component\Form\Tests\Fixtures\DummyFormRendererEngine; +use Symfony\Component\Form\Tests\Fixtures\FixedTranslator; use Symfony\Component\PropertyAccess\PropertyPath; use Symfony\Component\Validator\Constraints\File; use Symfony\Component\Validator\ConstraintViolation; @@ -1598,16 +1600,7 @@ public function testBacktrackIfSeveralSubFormsWithSamePropertyPath() public function testMessageWithLabel1() { - $renderer = $this->getMockBuilder(FormRenderer::class) - ->setMethods(null) - ->disableOriginalConstructor() - ->getMock() - ; - $translator = $this->createMock(TranslatorInterface::class); - $translator->expects($this->any())->method('trans')->willReturnMap([ - ['Name', [], null, null, 'Custom Name'], - ]); - $this->mapper = new ViolationMapper($renderer, $translator); + $this->mapper = new ViolationMapper(new FormRenderer(new DummyFormRendererEngine()), new FixedTranslator(['Name' => 'Custom Name'])); $parent = $this->getForm('parent'); $child = $this->getForm('name', 'name'); @@ -1630,11 +1623,7 @@ public function testMessageWithLabel1() public function testMessageWithLabel2() { - $translator = $this->createMock(TranslatorInterface::class); - $translator->expects($this->any())->method('trans')->willReturnMap([ - ['options_label', [], null, null, 'Translated Label'], - ]); - $this->mapper = new ViolationMapper(null, $translator); + $this->mapper = new ViolationMapper(null, new FixedTranslator(['options_label' => 'Translated Label'])); $parent = $this->getForm('parent'); @@ -1668,11 +1657,7 @@ public function testMessageWithLabel2() public function testMessageWithLabelFormat1() { - $translator = $this->createMock(TranslatorInterface::class); - $translator->expects($this->any())->method('trans')->willReturnMap([ - ['form.custom', [], null, null, 'Translated 1st Custom Label'], - ]); - $this->mapper = new ViolationMapper(null, $translator); + $this->mapper = new ViolationMapper(null, new FixedTranslator(['form.custom' => 'Translated 1st Custom Label'])); $parent = $this->getForm('parent'); @@ -1706,11 +1691,7 @@ public function testMessageWithLabelFormat1() public function testMessageWithLabelFormat2() { - $translator = $this->createMock(TranslatorInterface::class); - $translator->expects($this->any())->method('trans')->willReturnMap([ - ['form_custom-id', [], null, null, 'Translated 2nd Custom Label'], - ]); - $this->mapper = new ViolationMapper(null, $translator); + $this->mapper = new ViolationMapper(null, new FixedTranslator(['form_custom-id' => 'Translated 2nd Custom Label'])); $parent = $this->getForm('parent'); @@ -1826,14 +1807,9 @@ public function testLabelPlaceholderTranslatedWithTranslationParametersMergedFro public function testTranslatorNotCalledWithoutLabel() { - $renderer = $this->getMockBuilder(FormRenderer::class) - ->setMethods(null) - ->disableOriginalConstructor() - ->getMock() - ; $translator = $this->createMock(TranslatorInterface::class); $translator->expects($this->never())->method('trans'); - $this->mapper = new ViolationMapper($renderer, $translator); + $this->mapper = new ViolationMapper(new FormRenderer(new DummyFormRendererEngine()), $translator); $parent = $this->getForm('parent'); $child = $this->getForm('name', 'name'); diff --git a/src/Symfony/Component/Form/Tests/Fixtures/ArrayChoiceLoader.php b/src/Symfony/Component/Form/Tests/Fixtures/ArrayChoiceLoader.php new file mode 100644 index 0000000000000..7224d0e93639e --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Fixtures/ArrayChoiceLoader.php @@ -0,0 +1,15 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Tests\Fixtures; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class ConfigurableFormType extends AbstractType +{ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefined(['a', 'b']); + } + + public function getBlockPrefix(): string + { + return 'configurable_form_prefix'; + } +} diff --git a/src/Symfony/Component/Form/Tests/Fixtures/DummyFormRendererEngine.php b/src/Symfony/Component/Form/Tests/Fixtures/DummyFormRendererEngine.php new file mode 100644 index 0000000000000..7b13d31afcf6a --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Fixtures/DummyFormRendererEngine.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Tests\Fixtures; + +use Symfony\Component\Form\AbstractRendererEngine; +use Symfony\Component\Form\FormView; + +class DummyFormRendererEngine extends AbstractRendererEngine +{ + public function renderBlock(FormView $view, $resource, $blockName, array $variables = []): string + { + return ''; + } + + protected function loadResourceForBlockName($cacheKey, FormView $view, $blockName): bool + { + return true; + } +} diff --git a/src/Symfony/Component/Form/Tests/Fixtures/FixedTranslator.php b/src/Symfony/Component/Form/Tests/Fixtures/FixedTranslator.php new file mode 100644 index 0000000000000..ba17b5dd3d99d --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Fixtures/FixedTranslator.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Tests\Fixtures; + +use Symfony\Contracts\Translation\TranslatorInterface; + +class FixedTranslator implements TranslatorInterface +{ + private $translations; + + public function __construct(array $translations) + { + $this->translations = $translations; + } + + public function trans(string $id, array $parameters = [], string $domain = null, string $locale = null): string + { + return $this->translations[$id] ?? $id; + } + + public function getLocale(): string + { + return 'en'; + } +} diff --git a/src/Symfony/Component/Form/Tests/Fixtures/Map.php b/src/Symfony/Component/Form/Tests/Fixtures/Map.php new file mode 100644 index 0000000000000..d3a9de6f92f2d --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Fixtures/Map.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Tests\Fixtures; + +class Map implements \ArrayAccess +{ + private $data = []; + + public function offsetExists($offset): bool + { + return isset($this->data[$offset]); + } + + public function offsetGet($offset): mixed + { + return $this->data[$offset]; + } + + public function offsetSet($offset, $value): void + { + $this->data[$offset] = $value; + } + + public function offsetUnset($offset): void + { + unset($this->data[$offset]); + } +} diff --git a/src/Symfony/Component/Form/Tests/Fixtures/NullFormTypeGuesser.php b/src/Symfony/Component/Form/Tests/Fixtures/NullFormTypeGuesser.php new file mode 100644 index 0000000000000..81e728598083c --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Fixtures/NullFormTypeGuesser.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Tests\Fixtures; + +use Symfony\Component\Form\FormTypeGuesserInterface; +use Symfony\Component\Form\Guess\TypeGuess; +use Symfony\Component\Form\Guess\ValueGuess; + +class NullFormTypeGuesser implements FormTypeGuesserInterface +{ + public function guessType($class, $property): ?TypeGuess + { + return null; + } + + public function guessRequired($class, $property): ?ValueGuess + { + return null; + } + + public function guessMaxLength($class, $property): ?ValueGuess + { + return null; + } + + public function guessPattern($class, $property): ?ValueGuess + { + return null; + } +} diff --git a/src/Symfony/Component/Form/Tests/FormBuilderTest.php b/src/Symfony/Component/Form/Tests/FormBuilderTest.php index 2213e078742a5..c08c64867afc7 100644 --- a/src/Symfony/Component/Form/Tests/FormBuilderTest.php +++ b/src/Symfony/Component/Form/Tests/FormBuilderTest.php @@ -12,34 +12,28 @@ namespace Symfony\Component\Form\Tests; use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\ButtonBuilder; use Symfony\Component\Form\Exception\InvalidArgumentException; use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Form; use Symfony\Component\Form\FormBuilder; +use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormFactoryBuilder; -use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormRegistry; +use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Form\SubmitButtonBuilder; class FormBuilderTest extends TestCase { - private $dispatcher; private $factory; private $builder; protected function setUp(): void { - $this->dispatcher = $this->createMock(EventDispatcherInterface::class); - $this->factory = $this->createMock(FormFactoryInterface::class); - $this->builder = new FormBuilder('name', null, $this->dispatcher, $this->factory); - } - - protected function tearDown(): void - { - $this->dispatcher = null; - $this->factory = null; - $this->builder = null; + $this->factory = new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())); + $this->builder = new FormBuilder('name', null, new EventDispatcher(), $this->factory); } /** @@ -55,9 +49,9 @@ public function testNoSetName() public function testAddWithGuessFluent() { - $this->builder = new FormBuilder('name', 'stdClass', $this->dispatcher, $this->factory); - $builder = $this->builder->add('foo'); - $this->assertSame($builder, $this->builder); + $rootFormBuilder = new FormBuilder('name', 'stdClass', new EventDispatcher(), $this->factory); + $childFormBuilder = $rootFormBuilder->add('foo'); + $this->assertSame($childFormBuilder, $rootFormBuilder); } public function testAddIsFluent() @@ -82,11 +76,6 @@ public function testAddIntegerName() public function testAll() { - $this->factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType') - ->willReturn(new FormBuilder('foo', null, $this->dispatcher, $this->factory)); - $this->assertCount(0, $this->builder->all()); $this->assertFalse($this->builder->has('foo')); @@ -104,7 +93,7 @@ public function testAll() public function testMaintainOrderOfLazyAndExplicitChildren() { $this->builder->add('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType'); - $this->builder->add($this->getFormBuilder('bar')); + $this->builder->add(new FormBuilder('bar', null, new EventDispatcher(), $this->factory)); $this->builder->add('baz', 'Symfony\Component\Form\Extension\Core\Type\TextType'); $children = $this->builder->all(); @@ -136,12 +125,9 @@ public function testRemoveAndGetForm() public function testCreateNoTypeNo() { - $this->factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, []) - ; + $builder = $this->builder->create('foo'); - $this->builder->create('foo'); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); } public function testAddButton() @@ -162,42 +148,25 @@ public function testGetUnknown() public function testGetExplicitType() { - $expectedType = 'Symfony\Component\Form\Extension\Core\Type\TextType'; - $expectedName = 'foo'; - $expectedOptions = ['bar' => 'baz']; - - $this->factory->expects($this->once()) - ->method('createNamedBuilder') - ->with($expectedName, $expectedType, null, $expectedOptions) - ->willReturn($this->getFormBuilder()); - - $this->builder->add($expectedName, $expectedType, $expectedOptions); - $builder = $this->builder->get($expectedName); + $this->builder->add('foo', 'Symfony\Component\Form\Extension\Core\Type\TextType'); + $builder = $this->builder->get('foo'); $this->assertNotSame($builder, $this->builder); } public function testGetGuessedType() { - $expectedName = 'foo'; - $expectedOptions = ['bar' => 'baz']; + $rootFormBuilder = new FormBuilder('name', 'stdClass', new EventDispatcher(), $this->factory); + $rootFormBuilder->add('foo'); + $fooBuilder = $rootFormBuilder->get('foo'); - $this->factory->expects($this->once()) - ->method('createBuilderForProperty') - ->with('stdClass', $expectedName, null, $expectedOptions) - ->willReturn($this->getFormBuilder()); - - $this->builder = new FormBuilder('name', 'stdClass', $this->dispatcher, $this->factory); - $this->builder->add($expectedName, null, $expectedOptions); - $builder = $this->builder->get($expectedName); - - $this->assertNotSame($builder, $this->builder); + $this->assertNotSame($fooBuilder, $rootFormBuilder); } public function testGetFormConfigErasesReferences() { - $builder = new FormBuilder('name', null, $this->dispatcher, $this->factory); - $builder->add(new FormBuilder('child', null, $this->dispatcher, $this->factory)); + $builder = new FormBuilder('name', null, new EventDispatcher(), $this->factory); + $builder->add(new FormBuilder('child', null, new EventDispatcher(), $this->factory)); $config = $builder->getFormConfig(); $reflClass = new \ReflectionClass($config); @@ -210,19 +179,9 @@ public function testGetFormConfigErasesReferences() public function testGetButtonBuilderBeforeExplicitlyResolvingAllChildren() { - $builder = new FormBuilder('name', null, $this->dispatcher, (new FormFactoryBuilder())->getFormFactory()); + $builder = new FormBuilder('name', null, new EventDispatcher(), (new FormFactoryBuilder())->getFormFactory()); $builder->add('submit', SubmitType::class); $this->assertInstanceOf(ButtonBuilder::class, $builder->get('submit')); } - - private function getFormBuilder($name = 'name') - { - $mock = $this->createMock(FormBuilder::class); - $mock->expects($this->any()) - ->method('getName') - ->willReturn($name); - - return $mock; - } } diff --git a/src/Symfony/Component/Form/Tests/FormConfigTest.php b/src/Symfony/Component/Form/Tests/FormConfigTest.php index d1f1b9c3edadd..239ffbc99a611 100644 --- a/src/Symfony/Component/Form/Tests/FormConfigTest.php +++ b/src/Symfony/Component/Form/Tests/FormConfigTest.php @@ -12,7 +12,7 @@ namespace Symfony\Component\Form\Tests; use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\FormConfigBuilder; use Symfony\Component\Form\NativeRequestHandler; @@ -67,13 +67,11 @@ public function getHtml4Ids() */ public function testNameAcceptsOnlyNamesValidAsIdsInHtml4($name, $expectedException = null) { - $dispatcher = $this->createMock(EventDispatcherInterface::class); - if (null !== $expectedException) { $this->expectException($expectedException); } - $formConfigBuilder = new FormConfigBuilder($name, null, $dispatcher); + $formConfigBuilder = new FormConfigBuilder($name, null, new EventDispatcher()); $this->assertSame((string) $name, $formConfigBuilder->getName()); } @@ -135,8 +133,6 @@ public function testSetMethodAllowsPatch() private function getConfigBuilder($name = 'name') { - $dispatcher = $this->createMock(EventDispatcherInterface::class); - - return new FormConfigBuilder($name, null, $dispatcher); + return new FormConfigBuilder($name, null, new EventDispatcher()); } } diff --git a/src/Symfony/Component/Form/Tests/FormErrorIteratorTest.php b/src/Symfony/Component/Form/Tests/FormErrorIteratorTest.php index b818dcd8c4872..9087b9d5fbbc7 100644 --- a/src/Symfony/Component/Form/Tests/FormErrorIteratorTest.php +++ b/src/Symfony/Component/Form/Tests/FormErrorIteratorTest.php @@ -16,7 +16,9 @@ use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormErrorIterator; -use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormRegistry; +use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Validator\ConstraintViolation; class FormErrorIteratorTest extends TestCase @@ -26,15 +28,11 @@ class FormErrorIteratorTest extends TestCase */ public function testFindByCodes($code, $violationsCount) { - if (!class_exists(ConstraintViolation::class)) { - $this->markTestSkipped('Validator component required.'); - } - $formBuilder = new FormBuilder( 'form', null, new EventDispatcher(), - $this->createMock(FormFactoryInterface::class), + new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())), [] ); diff --git a/src/Symfony/Component/Form/Tests/FormFactoryBuilderTest.php b/src/Symfony/Component/Form/Tests/FormFactoryBuilderTest.php index c53badd9b93f3..fd6ef52bd5f78 100644 --- a/src/Symfony/Component/Form/Tests/FormFactoryBuilderTest.php +++ b/src/Symfony/Component/Form/Tests/FormFactoryBuilderTest.php @@ -14,13 +14,12 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormFactoryBuilder; -use Symfony\Component\Form\FormTypeGuesserInterface; use Symfony\Component\Form\Tests\Fixtures\FooType; +use Symfony\Component\Form\Tests\Fixtures\NullFormTypeGuesser; class FormFactoryBuilderTest extends TestCase { private $registry; - private $guesser; private $type; protected function setUp(): void @@ -28,7 +27,6 @@ protected function setUp(): void $factory = new \ReflectionClass(FormFactory::class); $this->registry = $factory->getProperty('registry'); - $this->guesser = $this->createMock(FormTypeGuesserInterface::class); $this->type = new FooType(); } @@ -49,7 +47,7 @@ public function testAddType() public function testAddTypeGuesser() { $factoryBuilder = new FormFactoryBuilder(); - $factoryBuilder->addTypeGuesser($this->guesser); + $factoryBuilder->addTypeGuesser(new NullFormTypeGuesser()); $factory = $factoryBuilder->getFormFactory(); $registry = $this->registry->getValue($factory); diff --git a/src/Symfony/Component/Form/Tests/FormFactoryTest.php b/src/Symfony/Component/Form/Tests/FormFactoryTest.php index 6bc3966c163bd..ab13c67775765 100644 --- a/src/Symfony/Component/Form/Tests/FormFactoryTest.php +++ b/src/Symfony/Component/Form/Tests/FormFactoryTest.php @@ -11,20 +11,20 @@ namespace Symfony\Component\Form\Tests; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\Form\FormBuilder; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\FormRegistryInterface; use Symfony\Component\Form\FormTypeGuesserChain; use Symfony\Component\Form\FormTypeGuesserInterface; use Symfony\Component\Form\Guess\Guess; use Symfony\Component\Form\Guess\TypeGuess; use Symfony\Component\Form\Guess\ValueGuess; -use Symfony\Component\Form\ResolvedFormType; -use Symfony\Component\Form\ResolvedFormTypeInterface; -use Symfony\Component\Form\Test\FormBuilderInterface; +use Symfony\Component\Form\PreloadedExtension; +use Symfony\Component\Form\ResolvedFormTypeFactory; +use Symfony\Component\Form\Tests\Fixtures\ConfigurableFormType; /** * @author Bernhard Schussek @@ -32,25 +32,20 @@ class FormFactoryTest extends TestCase { /** - * @var MockObject&FormTypeGuesserInterface + * @var ConfigurableFormTypeGuesser */ private $guesser1; /** - * @var MockObject&FormTypeGuesserInterface + * @var ConfigurableFormTypeGuesser */ private $guesser2; /** - * @var MockObject&FormRegistryInterface + * @var FormRegistryInterface */ private $registry; - /** - * @var MockObject&FormBuilderInterface - */ - private $builder; - /** * @var FormFactory */ @@ -58,416 +53,184 @@ class FormFactoryTest extends TestCase protected function setUp(): void { - $this->guesser1 = $this->createMock(FormTypeGuesserInterface::class); - $this->guesser2 = $this->createMock(FormTypeGuesserInterface::class); - $this->registry = $this->createMock(FormRegistryInterface::class); - $this->builder = $this->createMock(FormBuilderInterface::class); + $this->guesser1 = new ConfigurableFormTypeGuesser(); + $this->guesser2 = new ConfigurableFormTypeGuesser(); + $this->registry = new FormRegistry([ + new PreloadedExtension([ + new ConfigurableFormType(), + ], [], new FormTypeGuesserChain([$this->guesser1, $this->guesser2])), + ], new ResolvedFormTypeFactory()); $this->factory = new FormFactory($this->registry); - - $this->registry->expects($this->any()) - ->method('getTypeGuesser') - ->willReturn(new FormTypeGuesserChain([ - $this->guesser1, - $this->guesser2, - ])); } public function testCreateNamedBuilderWithTypeName() { - $options = ['a' => '1', 'b' => '2']; - $resolvedOptions = ['a' => '2', 'b' => '3']; - $resolvedType = $this->createMock(ResolvedFormTypeInterface::class); - - $this->registry->expects($this->once()) - ->method('getType') - ->with('type') - ->willReturn($resolvedType); - - $resolvedType->expects($this->once()) - ->method('createBuilder') - ->with($this->factory, 'name', $options) - ->willReturn($this->builder); - - $this->builder->expects($this->any()) - ->method('getOptions') - ->willReturn($resolvedOptions); + $builder = $this->factory->createNamedBuilder('name', ConfigurableFormType::class, null, ['a' => '1', 'b' => '2']); - $resolvedType->expects($this->once()) - ->method('buildForm') - ->with($this->builder, $resolvedOptions); - - $this->assertSame($this->builder, $this->factory->createNamedBuilder('name', 'type', null, $options)); + $this->assertSame('1', $builder->getOption('a')); + $this->assertSame('2', $builder->getOption('b')); } public function testCreateNamedBuilderFillsDataOption() { - $givenOptions = ['a' => '1', 'b' => '2']; - $expectedOptions = array_merge($givenOptions, ['data' => 'DATA']); - $resolvedOptions = ['a' => '2', 'b' => '3', 'data' => 'DATA']; - $resolvedType = $this->createMock(ResolvedFormTypeInterface::class); - - $this->registry->expects($this->once()) - ->method('getType') - ->with('type') - ->willReturn($resolvedType); - - $resolvedType->expects($this->once()) - ->method('createBuilder') - ->with($this->factory, 'name', $expectedOptions) - ->willReturn($this->builder); - - $this->builder->expects($this->any()) - ->method('getOptions') - ->willReturn($resolvedOptions); - - $resolvedType->expects($this->once()) - ->method('buildForm') - ->with($this->builder, $resolvedOptions); - - $this->assertSame($this->builder, $this->factory->createNamedBuilder('name', 'type', 'DATA', $givenOptions)); + $builder = $this->factory->createNamedBuilder('name', ConfigurableFormType::class, 'DATA', ['a' => '1', 'b' => '2']); + + $this->assertSame('DATA', $builder->getOption('data')); } public function testCreateNamedBuilderDoesNotOverrideExistingDataOption() { - $options = ['a' => '1', 'b' => '2', 'data' => 'CUSTOM']; - $resolvedOptions = ['a' => '2', 'b' => '3', 'data' => 'CUSTOM']; - $resolvedType = $this->createMock(ResolvedFormTypeInterface::class); - - $this->registry->expects($this->once()) - ->method('getType') - ->with('type') - ->willReturn($resolvedType); - - $resolvedType->expects($this->once()) - ->method('createBuilder') - ->with($this->factory, 'name', $options) - ->willReturn($this->builder); - - $this->builder->expects($this->any()) - ->method('getOptions') - ->willReturn($resolvedOptions); - - $resolvedType->expects($this->once()) - ->method('buildForm') - ->with($this->builder, $resolvedOptions); + $builder = $this->factory->createNamedBuilder('name', ConfigurableFormType::class, 'DATA', ['a' => '1', 'b' => '2', 'data' => 'CUSTOM']); - $this->assertSame($this->builder, $this->factory->createNamedBuilder('name', 'type', 'DATA', $options)); + $this->assertSame('CUSTOM', $builder->getOption('data')); } public function testCreateUsesBlockPrefixIfTypeGivenAsString() { - $options = ['a' => '1', 'b' => '2']; - $resolvedOptions = ['a' => '2', 'b' => '3']; + $form = $this->factory->create(ConfigurableFormType::class); - // the interface does not have the method, so use the real class - $resolvedType = $this->createMock(ResolvedFormType::class); - $resolvedType->expects($this->any()) - ->method('getBlockPrefix') - ->willReturn('TYPE_PREFIX'); + $this->assertSame('configurable_form_prefix', $form->getName()); + } - $this->registry->expects($this->any()) - ->method('getType') - ->with('TYPE') - ->willReturn($resolvedType); + public function testCreateNamed() + { + $form = $this->factory->createNamed('name', ConfigurableFormType::class, null, ['a' => '1', 'b' => '2']); - $resolvedType->expects($this->once()) - ->method('createBuilder') - ->with($this->factory, 'TYPE_PREFIX', $options) - ->willReturn($this->builder); + $this->assertSame('1', $form->getConfig()->getOption('a')); + $this->assertSame('2', $form->getConfig()->getOption('b')); + } - $this->builder->expects($this->any()) - ->method('getOptions') - ->willReturn($resolvedOptions); + public function testCreateBuilderForPropertyWithoutTypeGuesser() + { + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName'); - $resolvedType->expects($this->once()) - ->method('buildForm') - ->with($this->builder, $resolvedOptions); + $this->assertSame('firstName', $builder->getName()); + } - $form = $this->createForm(); + public function testCreateBuilderForPropertyCreatesFormWithHighestConfidence() + { + $this->guesser1->configureTypeGuess(TextType::class, ['attr' => ['maxlength' => 10]], Guess::MEDIUM_CONFIDENCE); + $this->guesser2->configureTypeGuess(PasswordType::class, ['attr' => ['maxlength' => 7]], Guess::HIGH_CONFIDENCE); - $this->builder->expects($this->once()) - ->method('getForm') - ->willReturn($form); + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName'); - $this->assertSame($form, $this->factory->create('TYPE', null, $options)); + $this->assertSame('firstName', $builder->getName()); + $this->assertSame(['maxlength' => 7], $builder->getOption('attr')); + $this->assertInstanceOf(PasswordType::class, $builder->getType()->getInnerType()); } - public function testCreateNamed() + public function testCreateBuilderCreatesTextFormIfNoGuess() { - $options = ['a' => '1', 'b' => '2']; - $resolvedOptions = ['a' => '2', 'b' => '3']; - $resolvedType = $this->createMock(ResolvedFormTypeInterface::class); + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName'); - $this->registry->expects($this->once()) - ->method('getType') - ->with('type') - ->willReturn($resolvedType); + $this->assertSame('firstName', $builder->getName()); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); + } - $resolvedType->expects($this->once()) - ->method('createBuilder') - ->with($this->factory, 'name', $options) - ->willReturn($this->builder); + public function testOptionsCanBeOverridden() + { + $this->guesser1->configureTypeGuess(TextType::class, ['attr' => ['class' => 'foo', 'maxlength' => 10]], Guess::MEDIUM_CONFIDENCE); - $this->builder->expects($this->any()) - ->method('getOptions') - ->willReturn($resolvedOptions); + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName', null, ['attr' => ['maxlength' => 11]]); - $resolvedType->expects($this->once()) - ->method('buildForm') - ->with($this->builder, $resolvedOptions); + $this->assertSame('firstName', $builder->getName()); + $this->assertSame(['class' => 'foo', 'maxlength' => 11], $builder->getOption('attr')); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); + } - $form = $this->createForm(); + public function testCreateBuilderUsesMaxLengthIfFound() + { + $this->guesser1->configureMaxLengthGuess(15, Guess::MEDIUM_CONFIDENCE); + $this->guesser2->configureMaxLengthGuess(20, Guess::HIGH_CONFIDENCE); - $this->builder->expects($this->once()) - ->method('getForm') - ->willReturn($form); + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName'); - $this->assertSame($form, $this->factory->createNamed('name', 'type', null, $options)); + $this->assertSame('firstName', $builder->getName()); + $this->assertSame(['maxlength' => 20], $builder->getOption('attr')); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); } - public function testCreateBuilderForPropertyWithoutTypeGuesser() + public function testCreateBuilderUsesMaxLengthAndPattern() { - $registry = $this->createMock(FormRegistryInterface::class); - $factory = $this->getMockBuilder(FormFactory::class) - ->setMethods(['createNamedBuilder']) - ->setConstructorArgs([$registry]) - ->getMock(); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, []) - ->willReturn($this->builder); + $this->guesser1->configureMaxLengthGuess(20, Guess::HIGH_CONFIDENCE); + $this->guesser2->configurePatternGuess('.{5,}', Guess::HIGH_CONFIDENCE); - $this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName'); + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName', null, ['attr' => ['class' => 'tinymce']]); - $this->assertSame($this->builder, $this->builder); + $this->assertSame('firstName', $builder->getName()); + $this->assertSame(['maxlength' => 20, 'pattern' => '.{5,}', 'class' => 'tinymce'], $builder->getOption('attr')); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); } - public function testCreateBuilderForPropertyCreatesFormWithHighestConfidence() + public function testCreateBuilderUsesRequiredSettingWithHighestConfidence() { - $this->guesser1->expects($this->once()) - ->method('guessType') - ->with('Application\Author', 'firstName') - ->willReturn(new TypeGuess( - 'Symfony\Component\Form\Extension\Core\Type\TextType', - ['attr' => ['maxlength' => 10]], - Guess::MEDIUM_CONFIDENCE - )); - - $this->guesser2->expects($this->once()) - ->method('guessType') - ->with('Application\Author', 'firstName') - ->willReturn(new TypeGuess( - 'Symfony\Component\Form\Extension\Core\Type\PasswordType', - ['attr' => ['maxlength' => 7]], - Guess::HIGH_CONFIDENCE - )); - - $factory = $this->getMockFactory(['createNamedBuilder']); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\PasswordType', null, ['attr' => ['maxlength' => 7]]) - ->willReturn($this->builder); - - $this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName'); - - $this->assertSame($this->builder, $this->builder); + $this->guesser1->configureRequiredGuess(true, Guess::MEDIUM_CONFIDENCE); + $this->guesser2->configureRequiredGuess(false, Guess::HIGH_CONFIDENCE); + + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName'); + + $this->assertSame('firstName', $builder->getName()); + $this->assertFalse($builder->getOption('required')); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); } - public function testCreateBuilderCreatesTextFormIfNoGuess() + public function testCreateBuilderUsesPatternIfFound() { - $this->guesser1->expects($this->once()) - ->method('guessType') - ->with('Application\Author', 'firstName') - ->willReturn(null); + $this->guesser1->configurePatternGuess('[a-z]', Guess::MEDIUM_CONFIDENCE); + $this->guesser2->configurePatternGuess('[a-zA-Z]', Guess::HIGH_CONFIDENCE); - $factory = $this->getMockFactory(['createNamedBuilder']); + $builder = $this->factory->createBuilderForProperty('Application\Author', 'firstName'); - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType') - ->willReturn($this->builder); + $this->assertSame('firstName', $builder->getName()); + $this->assertSame(['pattern' => '[a-zA-Z]'], $builder->getOption('attr')); + $this->assertInstanceOf(TextType::class, $builder->getType()->getInnerType()); + } +} - $this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName'); +class ConfigurableFormTypeGuesser implements FormTypeGuesserInterface +{ + private $typeGuess; + private $requiredGuess; + private $maxLengthGuess; + private $patternGuess; - $this->assertSame($this->builder, $this->builder); + public function guessType($class, $property): ?TypeGuess + { + return $this->typeGuess; } - public function testOptionsCanBeOverridden() + public function guessRequired($class, $property): ?ValueGuess { - $this->guesser1->expects($this->once()) - ->method('guessType') - ->with('Application\Author', 'firstName') - ->willReturn(new TypeGuess( - 'Symfony\Component\Form\Extension\Core\Type\TextType', - ['attr' => ['class' => 'foo', 'maxlength' => 10]], - Guess::MEDIUM_CONFIDENCE - )); - - $factory = $this->getMockFactory(['createNamedBuilder']); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['class' => 'foo', 'maxlength' => 11]]) - ->willReturn($this->builder); - - $this->builder = $factory->createBuilderForProperty( - 'Application\Author', - 'firstName', - null, - ['attr' => ['maxlength' => 11]] - ); - - $this->assertSame($this->builder, $this->builder); + return $this->requiredGuess; } - public function testCreateBuilderUsesMaxLengthIfFound() + public function guessMaxLength($class, $property): ?ValueGuess { - $this->guesser1->expects($this->once()) - ->method('guessMaxLength') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - 15, - Guess::MEDIUM_CONFIDENCE - )); - - $this->guesser2->expects($this->once()) - ->method('guessMaxLength') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - 20, - Guess::HIGH_CONFIDENCE - )); - - $factory = $this->getMockFactory(['createNamedBuilder']); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['maxlength' => 20]]) - ->willReturn($this->builder); - - $this->builder = $factory->createBuilderForProperty( - 'Application\Author', - 'firstName' - ); - - $this->assertSame($this->builder, $this->builder); + return $this->maxLengthGuess; } - public function testCreateBuilderUsesMaxLengthAndPattern() + public function guessPattern($class, $property): ?ValueGuess { - $this->guesser1->expects($this->once()) - ->method('guessMaxLength') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - 20, - Guess::HIGH_CONFIDENCE - )); - - $this->guesser2->expects($this->once()) - ->method('guessPattern') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - '.{5,}', - Guess::HIGH_CONFIDENCE - )); - - $factory = $this->getMockFactory(['createNamedBuilder']); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['maxlength' => 20, 'pattern' => '.{5,}', 'class' => 'tinymce']]) - ->willReturn($this->builder); - - $this->builder = $factory->createBuilderForProperty( - 'Application\Author', - 'firstName', - null, - ['attr' => ['class' => 'tinymce']] - ); - - $this->assertSame($this->builder, $this->builder); + return $this->patternGuess; } - public function testCreateBuilderUsesRequiredSettingWithHighestConfidence() + public function configureTypeGuess(string $type, array $options, int $confidence): void { - $this->guesser1->expects($this->once()) - ->method('guessRequired') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - true, - Guess::MEDIUM_CONFIDENCE - )); - - $this->guesser2->expects($this->once()) - ->method('guessRequired') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - false, - Guess::HIGH_CONFIDENCE - )); - - $factory = $this->getMockFactory(['createNamedBuilder']); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['required' => false]) - ->willReturn($this->builder); - - $this->builder = $factory->createBuilderForProperty( - 'Application\Author', - 'firstName' - ); - - $this->assertSame($this->builder, $this->builder); + $this->typeGuess = new TypeGuess($type, $options, $confidence); } - public function testCreateBuilderUsesPatternIfFound() + public function configureRequiredGuess(bool $required, int $confidence): void { - $this->guesser1->expects($this->once()) - ->method('guessPattern') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - '[a-z]', - Guess::MEDIUM_CONFIDENCE - )); - - $this->guesser2->expects($this->once()) - ->method('guessPattern') - ->with('Application\Author', 'firstName') - ->willReturn(new ValueGuess( - '[a-zA-Z]', - Guess::HIGH_CONFIDENCE - )); - - $factory = $this->getMockFactory(['createNamedBuilder']); - - $factory->expects($this->once()) - ->method('createNamedBuilder') - ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['pattern' => '[a-zA-Z]']]) - ->willReturn($this->builder); - - $this->builder = $factory->createBuilderForProperty( - 'Application\Author', - 'firstName' - ); - - $this->assertSame($this->builder, $this->builder); + $this->requiredGuess = new ValueGuess($required, $confidence); } - protected function createForm() + public function configureMaxLengthGuess(int $maxLength, int $confidence): void { - $formBuilder = new FormBuilder('', null, new EventDispatcher(), $this->factory); - - return $formBuilder->getForm(); + $this->maxLengthGuess = new ValueGuess($maxLength, $confidence); } - private function getMockFactory(array $methods = []) + public function configurePatternGuess(string $pattern, int $confidence): void { - return $this->getMockBuilder(FormFactory::class) - ->setMethods($methods) - ->setConstructorArgs([$this->registry]) - ->getMock(); + $this->patternGuess = new ValueGuess($pattern, $confidence); } } diff --git a/src/Symfony/Component/Form/Tests/FormRegistryTest.php b/src/Symfony/Component/Form/Tests/FormRegistryTest.php index cdf8ea427ba1f..8cee7282a4de2 100644 --- a/src/Symfony/Component/Form/Tests/FormRegistryTest.php +++ b/src/Symfony/Component/Form/Tests/FormRegistryTest.php @@ -11,23 +11,20 @@ namespace Symfony\Component\Form\Tests; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\InvalidArgumentException; use Symfony\Component\Form\Exception\LogicException; -use Symfony\Component\Form\FormExtensionInterface; use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\FormTypeGuesserChain; -use Symfony\Component\Form\FormTypeGuesserInterface; +use Symfony\Component\Form\PreloadedExtension; use Symfony\Component\Form\ResolvedFormType; use Symfony\Component\Form\ResolvedFormTypeFactory; -use Symfony\Component\Form\ResolvedFormTypeFactoryInterface; -use Symfony\Component\Form\ResolvedFormTypeInterface; use Symfony\Component\Form\Tests\Fixtures\FooSubType; use Symfony\Component\Form\Tests\Fixtures\FooType; use Symfony\Component\Form\Tests\Fixtures\FooTypeBarExtension; use Symfony\Component\Form\Tests\Fixtures\FooTypeBazExtension; use Symfony\Component\Form\Tests\Fixtures\FormWithSameParentType; +use Symfony\Component\Form\Tests\Fixtures\NullFormTypeGuesser; use Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeBar; use Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeBaz; use Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeFoo; @@ -43,21 +40,6 @@ class FormRegistryTest extends TestCase */ private $registry; - /** - * @var MockObject&ResolvedFormTypeFactoryInterface - */ - private $resolvedTypeFactory; - - /** - * @var MockObject&FormTypeGuesserInterface - */ - private $guesser1; - - /** - * @var MockObject&FormTypeGuesserInterface - */ - private $guesser2; - /** * @var TestExtension */ @@ -70,43 +52,34 @@ class FormRegistryTest extends TestCase protected function setUp(): void { - $this->resolvedTypeFactory = $this->createMock(ResolvedFormTypeFactory::class); - $this->guesser1 = $this->createMock(FormTypeGuesserInterface::class); - $this->guesser2 = $this->createMock(FormTypeGuesserInterface::class); - $this->extension1 = new TestExtension($this->guesser1); - $this->extension2 = new TestExtension($this->guesser2); + $this->extension1 = new TestExtension(new NullFormTypeGuesser()); + $this->extension2 = new TestExtension(new NullFormTypeGuesser()); $this->registry = new FormRegistry([ $this->extension1, $this->extension2, - ], $this->resolvedTypeFactory); + ], new ResolvedFormTypeFactory()); } public function testGetTypeFromExtension() { $type = new FooType(); - $resolvedType = new ResolvedFormType($type); - $this->extension2->addType($type); - $this->resolvedTypeFactory->expects($this->once()) - ->method('createResolvedType') - ->with($type) - ->willReturn($resolvedType); + $resolvedFormType = $this->registry->getType(FooType::class); - $this->assertSame($resolvedType, $this->registry->getType(\get_class($type))); + $this->assertInstanceOf(ResolvedFormType::class, $resolvedFormType); + $this->assertSame($type, $resolvedFormType->getInnerType()); } public function testLoadUnregisteredType() { $type = new FooType(); - $resolvedType = new ResolvedFormType($type); - $this->resolvedTypeFactory->expects($this->once()) - ->method('createResolvedType') - ->with($type) - ->willReturn($resolvedType); + $resolvedFormType = $this->registry->getType(FooType::class); - $this->assertSame($resolvedType, $this->registry->getType('Symfony\Component\Form\Tests\Fixtures\FooType')); + $this->assertInstanceOf(ResolvedFormType::class, $resolvedFormType); + $this->assertInstanceOf(FooType::class, $resolvedFormType->getInnerType()); + $this->assertNotSame($type, $resolvedFormType->getInnerType()); } public function testFailIfUnregisteredTypeNoClass() @@ -126,39 +99,35 @@ public function testGetTypeWithTypeExtensions() $type = new FooType(); $ext1 = new FooTypeBarExtension(); $ext2 = new FooTypeBazExtension(); - $resolvedType = new ResolvedFormType($type, [$ext1, $ext2]); $this->extension2->addType($type); $this->extension1->addTypeExtension($ext1); $this->extension2->addTypeExtension($ext2); - $this->resolvedTypeFactory->expects($this->once()) - ->method('createResolvedType') - ->with($type, [$ext1, $ext2]) - ->willReturn($resolvedType); + $resolvedFormType = $this->registry->getType(FooType::class); - $this->assertSame($resolvedType, $this->registry->getType(\get_class($type))); + $this->assertInstanceOf(ResolvedFormType::class, $resolvedFormType); + $this->assertSame($type, $resolvedFormType->getInnerType()); + $this->assertSame([$ext1, $ext2], $resolvedFormType->getTypeExtensions()); } public function testGetTypeConnectsParent() { $parentType = new FooType(); $type = new FooSubType(); - $parentResolvedType = new ResolvedFormType($parentType); - $resolvedType = new ResolvedFormType($type); $this->extension1->addType($parentType); $this->extension2->addType($type); - $this->resolvedTypeFactory->expects($this->exactly(2)) - ->method('createResolvedType') - ->withConsecutive( - [$parentType], - [$type, [], $parentResolvedType] - ) - ->willReturnOnConsecutiveCalls($parentResolvedType, $resolvedType); + $resolvedFormType = $this->registry->getType(FooSubType::class); + + $this->assertInstanceOf(ResolvedFormType::class, $resolvedFormType); + $this->assertSame($type, $resolvedFormType->getInnerType()); + + $resolvedParentFormType = $resolvedFormType->getParent(); - $this->assertSame($resolvedType, $this->registry->getType(\get_class($type))); + $this->assertInstanceOf(ResolvedFormType::class, $resolvedParentFormType); + $this->assertSame($parentType, $resolvedParentFormType->getInnerType()); } public function testFormCannotHaveItselfAsAParent() @@ -196,26 +165,14 @@ public function testGetTypeThrowsExceptionIfTypeNotFound() public function testHasTypeAfterLoadingFromExtension() { $type = new FooType(); - $resolvedType = new ResolvedFormType($type); - - $this->resolvedTypeFactory->expects($this->once()) - ->method('createResolvedType') - ->with($type) - ->willReturn($resolvedType); - $this->extension2->addType($type); - $this->assertTrue($this->registry->hasType(\get_class($type))); + $this->assertTrue($this->registry->hasType(FooType::class)); } public function testHasTypeIfFQCN() { - $this->resolvedTypeFactory - ->expects($this->any()) - ->method('createResolvedType') - ->willReturn($this->createMock(ResolvedFormTypeInterface::class)); - - $this->assertTrue($this->registry->hasType('Symfony\Component\Form\Tests\Fixtures\FooType')); + $this->assertTrue($this->registry->hasType(FooType::class)); } public function testDoesNotHaveTypeIfNonExistingClass() @@ -230,14 +187,11 @@ public function testDoesNotHaveTypeIfNoFormType() public function testGetTypeGuesser() { - $expectedGuesser = new FormTypeGuesserChain([$this->guesser1, $this->guesser2]); + $expectedGuesser = new FormTypeGuesserChain([new NullFormTypeGuesser(), new NullFormTypeGuesser()]); $this->assertEquals($expectedGuesser, $this->registry->getTypeGuesser()); - $registry = new FormRegistry( - [$this->createMock(FormExtensionInterface::class)], - $this->resolvedTypeFactory - ); + $registry = new FormRegistry([new PreloadedExtension([], [])], new ResolvedFormTypeFactory()); $this->assertNull($registry->getTypeGuesser()); } diff --git a/src/Symfony/Component/Form/Tests/FormRendererTest.php b/src/Symfony/Component/Form/Tests/FormRendererTest.php index 50a35eddabfd3..3783a9fcc1418 100644 --- a/src/Symfony/Component/Form/Tests/FormRendererTest.php +++ b/src/Symfony/Component/Form/Tests/FormRendererTest.php @@ -14,18 +14,14 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\BadMethodCallException; use Symfony\Component\Form\FormRenderer; -use Symfony\Component\Form\FormRendererEngineInterface; use Symfony\Component\Form\FormView; +use Symfony\Component\Form\Tests\Fixtures\DummyFormRendererEngine; class FormRendererTest extends TestCase { public function testHumanize() { - $renderer = $this->getMockBuilder(FormRenderer::class) - ->setMethods(null) - ->disableOriginalConstructor() - ->getMock() - ; + $renderer = new FormRenderer(new DummyFormRendererEngine()); $this->assertEquals('Is active', $renderer->humanize('is_active')); $this->assertEquals('Is active', $renderer->humanize('isActive')); @@ -40,8 +36,7 @@ public function testRenderARenderedField() $formView->vars['name'] = 'foo'; $formView->setRendered(); - $engine = $this->createMock(FormRendererEngineInterface::class); - $renderer = new FormRenderer($engine); + $renderer = new FormRenderer(new DummyFormRendererEngine()); $renderer->searchAndRenderBlock($formView, 'row'); } } diff --git a/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php b/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php index e6e5ee87f8bb0..c841f505ac0ac 100644 --- a/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php +++ b/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php @@ -11,19 +11,23 @@ namespace Symfony\Component\Form\Tests; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractTypeExtension; -use Symfony\Component\Form\Extension\Core\Type\HiddenType; -use Symfony\Component\Form\Form; -use Symfony\Component\Form\FormConfigInterface; +use Symfony\Component\Form\Extension\Core\Type\FormType; +use Symfony\Component\Form\FormBuilder; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\FormTypeExtensionInterface; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\Form\FormView; use Symfony\Component\Form\ResolvedFormType; -use Symfony\Component\Form\Test\FormBuilderInterface; +use Symfony\Component\Form\ResolvedFormTypeFactory; +use Symfony\Component\Form\Tests\Fixtures\ConfigurableFormType; use Symfony\Component\OptionsResolver\Exception\MissingOptionsException; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -32,23 +36,25 @@ */ class ResolvedFormTypeTest extends TestCase { + private $calls; + /** - * @var MockObject&FormTypeInterface + * @var FormTypeInterface */ private $parentType; /** - * @var MockObject&FormTypeInterface + * @var FormTypeInterface */ private $type; /** - * @var MockObject&FormTypeExtensionInterface + * @var FormTypeExtensionInterface */ private $extension1; /** - * @var MockObject&FormTypeExtensionInterface + * @var FormTypeExtensionInterface */ private $extension2; @@ -62,51 +68,27 @@ class ResolvedFormTypeTest extends TestCase */ private $resolvedType; + /** + * @var FormFactoryInterface + */ + private $formFactory; + protected function setUp(): void { - $this->parentType = $this->getMockFormType(); - $this->type = $this->getMockFormType(); - $this->extension1 = $this->getMockFormTypeExtension(); - $this->extension2 = $this->getMockFormTypeExtension(); + $this->calls = []; + $this->parentType = new UsageTrackingParentFormType($this->calls); + $this->type = new UsageTrackingFormType($this->calls); + $this->extension1 = new UsageTrackingFormTypeExtension($this->calls, ['c' => 'c_default']); + $this->extension2 = new UsageTrackingFormTypeExtension($this->calls, ['d' => 'd_default']); $this->parentResolvedType = new ResolvedFormType($this->parentType); $this->resolvedType = new ResolvedFormType($this->type, [$this->extension1, $this->extension2], $this->parentResolvedType); + $this->formFactory = new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())); } public function testGetOptionsResolver() { - $i = 0; - - $assertIndexAndAddOption = function ($index, $option, $default) use (&$i) { - return function (OptionsResolver $resolver) use (&$i, $index, $option, $default) { - $this->assertEquals($index, $i, 'Executed at index '.$index); - - ++$i; - - $resolver->setDefaults([$option => $default]); - }; - }; - - // First the default options are generated for the super type - $this->parentType->expects($this->once()) - ->method('configureOptions') - ->willReturnCallback($assertIndexAndAddOption(0, 'a', 'a_default')); - - // The form type itself - $this->type->expects($this->once()) - ->method('configureOptions') - ->willReturnCallback($assertIndexAndAddOption(1, 'b', 'b_default')); - - // And its extensions - $this->extension1->expects($this->once()) - ->method('configureOptions') - ->willReturnCallback($assertIndexAndAddOption(2, 'c', 'c_default')); - - $this->extension2->expects($this->once()) - ->method('configureOptions') - ->willReturnCallback($assertIndexAndAddOption(3, 'd', 'd_default')); - - $givenOptions = ['a' => 'a_custom', 'c' => 'c_custom']; - $resolvedOptions = ['a' => 'a_custom', 'b' => 'b_default', 'c' => 'c_custom', 'd' => 'd_default']; + $givenOptions = ['a' => 'a_custom', 'c' => 'c_custom', 'foo' => 'bar']; + $resolvedOptions = ['a' => 'a_custom', 'b' => 'b_default', 'c' => 'c_custom', 'd' => 'd_default', 'foo' => 'bar']; $resolver = $this->resolvedType->getOptionsResolver(); @@ -115,26 +97,10 @@ public function testGetOptionsResolver() public function testCreateBuilder() { - $givenOptions = ['a' => 'a_custom', 'c' => 'c_custom']; - $resolvedOptions = ['a' => 'a_custom', 'b' => 'b_default', 'c' => 'c_custom', 'd' => 'd_default']; - $optionsResolver = $this->createMock(OptionsResolver::class); - - $this->resolvedType = $this->getMockBuilder(ResolvedFormType::class) - ->setConstructorArgs([$this->type, [$this->extension1, $this->extension2], $this->parentResolvedType]) - ->setMethods(['getOptionsResolver']) - ->getMock(); - - $this->resolvedType->expects($this->once()) - ->method('getOptionsResolver') - ->willReturn($optionsResolver); - - $optionsResolver->expects($this->once()) - ->method('resolve') - ->with($givenOptions) - ->willReturn($resolvedOptions); + $givenOptions = ['a' => 'a_custom', 'c' => 'c_custom', 'foo' => 'bar']; + $resolvedOptions = ['b' => 'b_default', 'd' => 'd_default', 'a' => 'a_custom', 'c' => 'c_custom', 'foo' => 'bar']; - $factory = $this->getMockFormFactory(); - $builder = $this->resolvedType->createBuilder($factory, 'name', $givenOptions); + $builder = $this->resolvedType->createBuilder($this->formFactory, 'name', $givenOptions); $this->assertSame($this->resolvedType, $builder->getType()); $this->assertSame($resolvedOptions, $builder->getOptions()); @@ -143,26 +109,19 @@ public function testCreateBuilder() public function testCreateBuilderWithDataClassOption() { - $givenOptions = ['data_class' => 'Foo']; - $resolvedOptions = ['data_class' => \stdClass::class]; - $optionsResolver = $this->createMock(OptionsResolver::class); - - $this->resolvedType = $this->getMockBuilder(ResolvedFormType::class) - ->setConstructorArgs([$this->type, [$this->extension1, $this->extension2], $this->parentResolvedType]) - ->setMethods(['getOptionsResolver']) - ->getMock(); - - $this->resolvedType->expects($this->once()) - ->method('getOptionsResolver') - ->willReturn($optionsResolver); - - $optionsResolver->expects($this->once()) - ->method('resolve') - ->with($givenOptions) - ->willReturn($resolvedOptions); + $resolvedOptions = [ + 'a' => 'a_default', + 'b' => 'b_default', + 'c' => 'c_default', + 'd' => 'd_default', + 'data_class' => \stdClass::class, + 'foo' => 'bar', + ]; - $factory = $this->getMockFormFactory(); - $builder = $this->resolvedType->createBuilder($factory, 'name', $givenOptions); + $builder = $this->resolvedType->createBuilder($this->formFactory, 'name', [ + 'data_class' => \stdClass::class, + 'foo' => 'bar', + ]); $this->assertSame($this->resolvedType, $builder->getType()); $this->assertSame($resolvedOptions, $builder->getOptions()); @@ -172,74 +131,21 @@ public function testCreateBuilderWithDataClassOption() public function testFailsCreateBuilderOnInvalidFormOptionsResolution() { $this->expectException(MissingOptionsException::class); - $this->expectExceptionMessage('An error has occurred resolving the options of the form "Symfony\Component\Form\Extension\Core\Type\HiddenType": The required option "foo" is missing.'); - $optionsResolver = (new OptionsResolver()) - ->setRequired('foo') - ; - $this->resolvedType = $this->getMockBuilder(ResolvedFormType::class) - ->setConstructorArgs([$this->type, [$this->extension1, $this->extension2], $this->parentResolvedType]) - ->setMethods(['getOptionsResolver', 'getInnerType']) - ->getMock() - ; - $this->resolvedType->expects($this->once()) - ->method('getOptionsResolver') - ->willReturn($optionsResolver) - ; - $this->resolvedType->expects($this->once()) - ->method('getInnerType') - ->willReturn(new HiddenType()) - ; - $factory = $this->getMockFormFactory(); - - $this->resolvedType->createBuilder($factory, 'name'); + $this->expectExceptionMessage(sprintf('An error has occurred resolving the options of the form "%s": The required option "foo" is missing.', UsageTrackingFormType::class)); + + $this->resolvedType->createBuilder($this->formFactory, 'name'); } public function testBuildForm() { - $i = 0; - - $assertIndex = function ($index) use (&$i) { - return function () use (&$i, $index) { - $this->assertEquals($index, $i, 'Executed at index '.$index); - - ++$i; - }; - }; - - $options = ['a' => 'Foo', 'b' => 'Bar']; - $builder = $this->createMock(FormBuilderInterface::class); - - // First the form is built for the super type - $this->parentType->expects($this->once()) - ->method('buildForm') - ->with($builder, $options) - ->willReturnCallback($assertIndex(0)); - - // Then the type itself - $this->type->expects($this->once()) - ->method('buildForm') - ->with($builder, $options) - ->willReturnCallback($assertIndex(1)); - - // Then its extensions - $this->extension1->expects($this->once()) - ->method('buildForm') - ->with($builder, $options) - ->willReturnCallback($assertIndex(2)); - - $this->extension2->expects($this->once()) - ->method('buildForm') - ->with($builder, $options) - ->willReturnCallback($assertIndex(3)); - - $this->resolvedType->buildForm($builder, $options); + $this->resolvedType->buildForm(new FormBuilder(null, null, new EventDispatcher(), $this->formFactory), []); + + $this->assertSame([$this->parentType, $this->type, $this->extension1, $this->extension2], $this->calls['buildForm']); } public function testCreateView() { - $form = $this->bootstrapForm(); - - $view = $this->resolvedType->createView($form); + $view = $this->resolvedType->createView($this->formFactory->create()); $this->assertInstanceOf(FormView::class, $view); $this->assertNull($view->parent); @@ -247,10 +153,9 @@ public function testCreateView() public function testCreateViewWithParent() { - $form = $this->bootstrapForm(); - $parentView = $this->createMock(FormView::class); + $parentView = new FormView(); - $view = $this->resolvedType->createView($form, $parentView); + $view = $this->resolvedType->createView($this->formFactory->create(), $parentView); $this->assertInstanceOf(FormView::class, $view); $this->assertSame($parentView, $view->parent); @@ -258,97 +163,23 @@ public function testCreateViewWithParent() public function testBuildView() { - $options = ['a' => '1', 'b' => '2']; - $form = $this->bootstrapForm(); - $view = $this->createMock(FormView::class); - - $i = 0; - - $assertIndex = function ($index) use (&$i) { - return function () use (&$i, $index) { - $this->assertEquals($index, $i, 'Executed at index '.$index); - - ++$i; - }; - }; - - // First the super type - $this->parentType->expects($this->once()) - ->method('buildView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(0)); - - // Then the type itself - $this->type->expects($this->once()) - ->method('buildView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(1)); - - // Then its extensions - $this->extension1->expects($this->once()) - ->method('buildView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(2)); - - $this->extension2->expects($this->once()) - ->method('buildView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(3)); - - $this->resolvedType->buildView($view, $form, $options); + $this->resolvedType->buildView(new FormView(), $this->formFactory->create(), []); + + $this->assertSame([$this->parentType, $this->type, $this->extension1, $this->extension2], $this->calls['buildView']); } public function testFinishView() { - $options = ['a' => '1', 'b' => '2']; - $form = $this->bootstrapForm(); - $view = $this->createMock(FormView::class); - - $i = 0; - - $assertIndex = function ($index) use (&$i) { - return function () use (&$i, $index) { - $this->assertEquals($index, $i, 'Executed at index '.$index); - - ++$i; - }; - }; - - // First the super type - $this->parentType->expects($this->once()) - ->method('finishView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(0)); - - // Then the type itself - $this->type->expects($this->once()) - ->method('finishView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(1)); - - // Then its extensions - $this->extension1->expects($this->once()) - ->method('finishView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(2)); - - $this->extension2->expects($this->once()) - ->method('finishView') - ->with($view, $form, $options) - ->willReturnCallback($assertIndex(3)); - - $this->resolvedType->finishView($view, $form, $options); + $this->resolvedType->finishView(new FormView(), $this->formFactory->create(), []); + + $this->assertSame([$this->parentType, $this->type, $this->extension1, $this->extension2], $this->calls['finishView']); } public function testGetBlockPrefix() { - $this->type->expects($this->once()) - ->method('getBlockPrefix') - ->willReturn('my_prefix'); + $resolvedType = new ResolvedFormType(new ConfigurableFormType()); - $resolvedType = new ResolvedFormType($this->type); - - $this->assertSame('my_prefix', $resolvedType->getBlockPrefix()); + $this->assertSame('configurable_form_prefix', $resolvedType->getBlockPrefix()); } /** @@ -372,28 +203,84 @@ public function provideTypeClassBlockPrefixTuples() [Fixtures\FBooType::class, 'f_boo'], ]; } +} + +class UsageTrackingFormType extends AbstractType +{ + use UsageTrackingTrait; + + public function __construct(array &$calls) + { + $this->calls = &$calls; + } - private function getMockFormType($typeClass = AbstractType::class): MockObject&FormTypeInterface + public function getParent(): string { - return $this->getMockBuilder($typeClass)->setMethods(['getBlockPrefix', 'configureOptions', 'finishView', 'buildView', 'buildForm'])->getMock(); + return UsageTrackingParentFormType::class; } - private function getMockFormTypeExtension(): MockObject&FormTypeExtensionInterface + public function configureOptions(OptionsResolver $resolver): void { - return $this->getMockBuilder(AbstractTypeExtension::class)->setMethods(['getExtendedTypes', 'configureOptions', 'finishView', 'buildView', 'buildForm'])->getMock(); + $resolver->setDefault('b', 'b_default'); + $resolver->setDefined('data_class'); + $resolver->setRequired('foo'); } +} + +class UsageTrackingParentFormType extends AbstractType +{ + use UsageTrackingTrait; - private function getMockFormFactory(): MockObject&FormFactoryInterface + public function __construct(array &$calls) { - return $this->createMock(FormFactoryInterface::class); + $this->calls = &$calls; } - private function bootstrapForm(): Form + public function configureOptions(OptionsResolver $resolver): void { - $config = $this->createMock(FormConfigInterface::class); - $config->method('getInheritData')->willReturn(false); - $config->method('getName')->willReturn(''); + $resolver->setDefault('a', 'a_default'); + } +} - return new Form($config); +class UsageTrackingFormTypeExtension extends AbstractTypeExtension +{ + use UsageTrackingTrait; + + private $defaultOptions; + + public function __construct(array &$calls, array $defaultOptions) + { + $this->calls = &$calls; + $this->defaultOptions = $defaultOptions; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults($this->defaultOptions); + } + + public static function getExtendedTypes(): iterable + { + yield FormType::class; + } +} + +trait UsageTrackingTrait +{ + private $calls; + + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $this->calls['buildForm'][] = $this; + } + + public function buildView(FormView $view, FormInterface $form, array $options): void + { + $this->calls['buildView'][] = $this; + } + + public function finishView(FormView $view, FormInterface $form, array $options): void + { + $this->calls['finishView'][] = $this; } } diff --git a/src/Symfony/Component/Form/Tests/SimpleFormTest.php b/src/Symfony/Component/Form/Tests/SimpleFormTest.php index 40ead84e26263..0920af4f8b6af 100644 --- a/src/Symfony/Component/Form/Tests/SimpleFormTest.php +++ b/src/Symfony/Component/Form/Tests/SimpleFormTest.php @@ -11,22 +11,29 @@ namespace Symfony\Component\Form\Tests; +use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Form\Exception\AlreadySubmittedException; use Symfony\Component\Form\Exception\LogicException; use Symfony\Component\Form\Exception\RuntimeException; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Form\Extension\Core\DataMapper\DataMapper; use Symfony\Component\Form\Form; +use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormConfigBuilder; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; +use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\FormView; use Symfony\Component\Form\RequestHandlerInterface; +use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Form\ResolvedFormTypeInterface; use Symfony\Component\Form\Tests\Fixtures\FixedDataTransformer; use Symfony\Component\Form\Tests\Fixtures\FixedFilterListener; +use Symfony\Component\Form\Tests\Fixtures\Map; use Symfony\Component\PropertyAccess\PropertyPath; class SimpleFormTest_Countable implements \Countable @@ -59,14 +66,21 @@ public function getIterator(): \Traversable } } -class SimpleFormTest extends AbstractFormTest +class SimpleFormTest extends TestCase { + private $form; + + protected function setUp(): void + { + $this->form = $this->createForm(); + } + /** * @dataProvider provideFormNames */ public function testGetPropertyPath($name, $propertyPath) { - $config = new FormConfigBuilder($name, null, $this->dispatcher); + $config = new FormConfigBuilder($name, null, new EventDispatcher()); $form = new Form($config); $this->assertEquals($propertyPath, $form->getPropertyPath()); @@ -90,7 +104,7 @@ public function testDataIsInitializedToConfiguredValue() 'foo' => 'bar', ]); - $config = new FormConfigBuilder('name', null, $this->dispatcher); + $config = new FormConfigBuilder('name', null, new EventDispatcher()); $config->addViewTransformer($view); $config->addModelTransformer($model); $config->setData('default'); @@ -112,7 +126,7 @@ public function testDataTransformationFailure() 'foo' => 'bar', ]); - $config = new FormConfigBuilder('name', null, $this->dispatcher); + $config = new FormConfigBuilder('name', null, new EventDispatcher()); $config->addViewTransformer($view); $config->addModelTransformer($model); $config->setData('arg'); @@ -127,53 +141,41 @@ public function testDataIsInitializedFromSubmit() $preSetData = false; $preSubmit = false; - $mock = $this->getMockBuilder(\stdClass::class) - ->setMethods(['preSetData', 'preSubmit']) - ->getMock(); - $mock->expects($this->once()) - ->method('preSetData') - ->with($this->callback(function () use (&$preSetData, $preSubmit) { - $preSetData = true; - - return false === $preSubmit; - })); - $mock->expects($this->once()) - ->method('preSubmit') - ->with($this->callback(function () use ($preSetData, &$preSubmit) { - $preSubmit = true; - - return false === $preSetData; - })); - - $config = new FormConfigBuilder('name', null, $this->dispatcher); - $config->addEventListener(FormEvents::PRE_SET_DATA, [$mock, 'preSetData']); - $config->addEventListener(FormEvents::PRE_SUBMIT, [$mock, 'preSubmit']); + $preSetDataListener = static function () use (&$preSetData, &$preSubmit): void { + $preSetData = !$preSubmit; + }; + $preSubmitListener = static function () use (&$preSetData, &$preSubmit): void { + $preSubmit = $preSetData; + }; + + $config = new FormConfigBuilder('name', null, new EventDispatcher()); + $config->addEventListener(FormEvents::PRE_SET_DATA, $preSetDataListener); + $config->addEventListener(FormEvents::PRE_SUBMIT, $preSubmitListener); $form = new Form($config); // no call to setData() or similar where the object would be // initialized otherwise $form->submit('foobar'); + + $this->assertTrue($preSetData); + $this->assertTrue($preSubmit); } // https://github.com/symfony/symfony/pull/7789 public function testFalseIsConvertedToNull() { - $mock = $this->getMockBuilder(\stdClass::class) - ->setMethods(['preSubmit']) - ->getMock(); - $mock->expects($this->once()) - ->method('preSubmit') - ->with($this->callback(function ($event) { - return null === $event->getData(); - })); - - $config = new FormConfigBuilder('name', null, $this->dispatcher); - $config->addEventListener(FormEvents::PRE_SUBMIT, [$mock, 'preSubmit']); + $passedDataIsNull = false; + + $config = new FormConfigBuilder('name', null, new EventDispatcher()); + $config->addEventListener(FormEvents::PRE_SUBMIT, static function (FormEvent $event) use (&$passedDataIsNull): void { + $passedDataIsNull = $event->getData() === null; + }); $form = new Form($config); $form->submit(false); + $this->assertTrue($passedDataIsNull); $this->assertTrue($form->isValid()); $this->assertNull($form->getData()); } @@ -278,7 +280,7 @@ public function testEmptyIfEmptyArray() public function testEmptyIfEmptyCountable() { - $this->form = new Form(new FormConfigBuilder('name', __NAMESPACE__.'\SimpleFormTest_Countable', $this->dispatcher)); + $this->form = new Form(new FormConfigBuilder('name', SimpleFormTest_Countable::class, new EventDispatcher())); $this->form->setData(new SimpleFormTest_Countable(0)); @@ -287,7 +289,7 @@ public function testEmptyIfEmptyCountable() public function testNotEmptyIfFilledCountable() { - $this->form = new Form(new FormConfigBuilder('name', __NAMESPACE__.'\SimpleFormTest_Countable', $this->dispatcher)); + $this->form = new Form(new FormConfigBuilder('name', SimpleFormTest_Countable::class, new EventDispatcher())); $this->form->setData(new SimpleFormTest_Countable(1)); @@ -296,7 +298,7 @@ public function testNotEmptyIfFilledCountable() public function testEmptyIfEmptyTraversable() { - $this->form = new Form(new FormConfigBuilder('name', __NAMESPACE__.'\SimpleFormTest_Traversable', $this->dispatcher)); + $this->form = new Form(new FormConfigBuilder('name', SimpleFormTest_Traversable::class, new EventDispatcher())); $this->form->setData(new SimpleFormTest_Traversable(0)); @@ -305,7 +307,7 @@ public function testEmptyIfEmptyTraversable() public function testNotEmptyIfFilledTraversable() { - $this->form = new Form(new FormConfigBuilder('name', __NAMESPACE__.'\SimpleFormTest_Traversable', $this->dispatcher)); + $this->form = new Form(new FormConfigBuilder('name', SimpleFormTest_Traversable::class, new EventDispatcher())); $this->form->setData(new SimpleFormTest_Traversable(1)); @@ -400,7 +402,7 @@ public function testSetDataThrowsExceptionIfAlreadySubmitted() public function testSetDataClonesObjectIfNotByReference() { $data = new \stdClass(); - $form = $this->getBuilder('name', null, \stdClass::class)->setByReference(false)->getForm(); + $form = $this->getBuilder('name', \stdClass::class)->setByReference(false)->getForm(); $form->setData($data); $this->assertNotSame($data, $form->getData()); @@ -410,7 +412,7 @@ public function testSetDataClonesObjectIfNotByReference() public function testSetDataDoesNotCloneObjectIfByReference() { $data = new \stdClass(); - $form = $this->getBuilder('name', null, \stdClass::class)->setByReference(true)->getForm(); + $form = $this->getBuilder('name', \stdClass::class)->setByReference(true)->getForm(); $form->setData($data); $this->assertSame($data, $form->getData()); @@ -419,7 +421,7 @@ public function testSetDataDoesNotCloneObjectIfByReference() public function testSetDataExecutesTransformationChain() { // use real event dispatcher now - $form = $this->getBuilder('name', new EventDispatcher()) + $form = $this->getBuilder('name') ->addEventSubscriber(new FixedFilterListener([ 'preSetData' => [ 'app' => 'filtered', @@ -542,7 +544,7 @@ public function testSetDataIsIgnoredIfDataIsLocked() public function testPreSetDataChangesDataIfDataIsLocked() { - $config = new FormConfigBuilder('name', null, $this->dispatcher); + $config = new FormConfigBuilder('name', null, new EventDispatcher()); $config ->setData('default') ->setDataLocked(true) @@ -570,7 +572,7 @@ public function testSubmitConvertsEmptyToNullIfNoTransformer() public function testSubmitExecutesTransformationChain() { // use real event dispatcher now - $form = $this->getBuilder('name', new EventDispatcher()) + $form = $this->getBuilder('name') ->addEventSubscriber(new FixedFilterListener([ 'preSubmit' => [ 'client' => 'filteredclient', @@ -649,13 +651,8 @@ public function testSynchronizedAfterSubmission() public function testNotSynchronizedIfViewReverseTransformationFailed() { - $transformer = $this->getDataTransformer(); - $transformer->expects($this->once()) - ->method('reverseTransform') - ->willThrowException(new TransformationFailedException()); - $form = $this->getBuilder() - ->addViewTransformer($transformer) + ->addViewTransformer(new FixedDataTransformer(['' => ''])) ->getForm(); $form->submit('foobar'); @@ -665,13 +662,8 @@ public function testNotSynchronizedIfViewReverseTransformationFailed() public function testNotSynchronizedIfModelReverseTransformationFailed() { - $transformer = $this->getDataTransformer(); - $transformer->expects($this->once()) - ->method('reverseTransform') - ->willThrowException(new TransformationFailedException()); - $form = $this->getBuilder() - ->addModelTransformer($transformer) + ->addModelTransformer(new FixedDataTransformer(['' => ''])) ->getForm(); $form->submit('foobar'); @@ -728,7 +720,7 @@ public function testSubmitResetsErrors() public function testCreateView() { $type = $this->createMock(ResolvedFormTypeInterface::class); - $view = $this->createMock(FormView::class); + $view = new FormView(); $form = $this->getBuilder()->setType($type)->getForm(); $type->expects($this->once()) @@ -742,10 +734,10 @@ public function testCreateView() public function testCreateViewWithParent() { $type = $this->createMock(ResolvedFormTypeInterface::class); - $view = $this->createMock(FormView::class); + $view = new FormView(); $parentType = $this->createMock(ResolvedFormTypeInterface::class); $parentForm = $this->getBuilder()->setType($parentType)->getForm(); - $parentView = $this->createMock(FormView::class); + $parentView = new FormView(); $form = $this->getBuilder()->setType($type)->getForm(); $form->setParent($parentForm); @@ -764,8 +756,8 @@ public function testCreateViewWithParent() public function testCreateViewWithExplicitParent() { $type = $this->createMock(ResolvedFormTypeInterface::class); - $view = $this->createMock(FormView::class); - $parentView = $this->createMock(FormView::class); + $view = new FormView(); + $parentView = new FormView(); $form = $this->getBuilder()->setType($type)->getForm(); $type->expects($this->once()) @@ -797,7 +789,7 @@ public function testFormCannotHaveEmptyNameNotInRootLevel() $this->expectExceptionMessage('A form with an empty name cannot have a parent form.'); $this->getBuilder() ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->add($this->getBuilder('')) ->getForm(); } @@ -812,9 +804,9 @@ public function testGetPropertyPathReturnsConfiguredPath() // see https://github.com/symfony/symfony/issues/3903 public function testGetPropertyPathDefaultsToNameIfParentHasDataClass() { - $parent = $this->getBuilder(null, null, 'stdClass') + $parent = $this->getBuilder(null, \stdClass::class) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->getForm(); $form = $this->getBuilder('name')->getForm(); $parent->add($form); @@ -827,7 +819,7 @@ public function testGetPropertyPathDefaultsToIndexedNameIfParentDataClassIsNull( { $parent = $this->getBuilder() ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->getForm(); $form = $this->getBuilder('name')->getForm(); $parent->add($form); @@ -837,13 +829,13 @@ public function testGetPropertyPathDefaultsToIndexedNameIfParentDataClassIsNull( public function testGetPropertyPathDefaultsToNameIfFirstParentWithoutInheritDataHasDataClass() { - $grandParent = $this->getBuilder(null, null, 'stdClass') + $grandParent = $this->getBuilder(null, \stdClass::class) ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->getForm(); $parent = $this->getBuilder() ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setInheritData(true) ->getForm(); $form = $this->getBuilder('name')->getForm(); @@ -857,11 +849,11 @@ public function testGetPropertyPathDefaultsToIndexedNameIfDataClassOfFirstParent { $grandParent = $this->getBuilder() ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->getForm(); $parent = $this->getBuilder() ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->setInheritData(true) ->getForm(); $form = $this->getBuilder('name')->getForm(); @@ -874,7 +866,7 @@ public function testGetPropertyPathDefaultsToIndexedNameIfDataClassOfFirstParent public function testViewDataMayBeObjectIfDataClassIsNull() { $object = new \stdClass(); - $config = new FormConfigBuilder('name', null, $this->dispatcher); + $config = new FormConfigBuilder('name', null, new EventDispatcher()); $config->addViewTransformer(new FixedDataTransformer([ '' => '', 'foo' => $object, @@ -888,8 +880,8 @@ public function testViewDataMayBeObjectIfDataClassIsNull() public function testViewDataMayBeArrayAccessIfDataClassIsNull() { - $arrayAccess = $this->createMock(\ArrayAccess::class); - $config = new FormConfigBuilder('name', null, $this->dispatcher); + $arrayAccess = new Map(); + $config = new FormConfigBuilder('name', null, new EventDispatcher()); $config->addViewTransformer(new FixedDataTransformer([ '' => '', 'foo' => $arrayAccess, @@ -904,7 +896,7 @@ public function testViewDataMayBeArrayAccessIfDataClassIsNull() public function testViewDataMustBeObjectIfDataClassIsSet() { $this->expectException(LogicException::class); - $config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher); + $config = new FormConfigBuilder('name', 'stdClass', new EventDispatcher()); $config->addViewTransformer(new FixedDataTransformer([ '' => '', 'foo' => ['bar' => 'baz'], @@ -919,7 +911,7 @@ public function testSetDataCannotInvokeItself() $this->expectException(RuntimeException::class); $this->expectExceptionMessage('A cycle was detected. Listeners to the PRE_SET_DATA event must not call setData(). You should call setData() on the FormEvent object instead.'); // Cycle detection to prevent endless loops - $config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher); + $config = new FormConfigBuilder('name', 'stdClass', new EventDispatcher()); $config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $event->getForm()->setData('bar'); }); @@ -932,14 +924,14 @@ public function testSubmittingWrongDataIsIgnored() { $called = 0; - $child = $this->getBuilder('child', $this->dispatcher); + $child = $this->getBuilder('child'); $child->addEventListener(FormEvents::PRE_SUBMIT, function () use (&$called) { ++$called; }); - $parent = $this->getBuilder('parent', new EventDispatcher()) + $parent = $this->getBuilder('parent') ->setCompound(true) - ->setDataMapper($this->getDataMapper()) + ->setDataMapper(new DataMapper()) ->add($child) ->getForm(); @@ -965,25 +957,27 @@ public function testHandleRequestForwardsToRequestHandler() public function testFormInheritsParentData() { - $child = $this->getBuilder('child') - ->setInheritData(true); + $nameForm = $this->getBuilder() + ->setCompound(true) + ->setDataMapper(new DataMapper()) + ->setInheritData(true) + ->getForm(); + $nameForm->add($firstNameForm = $this->getBuilder('firstName')->getForm()); + $nameForm->add($lastNameForm = $this->getBuilder('lastName')->getForm()); - $parent = $this->getBuilder('parent') + $rootForm = $this->getBuilder('') ->setCompound(true) - ->setDataMapper($this->getDataMapper()) - ->setData('foo') - ->addModelTransformer(new FixedDataTransformer([ - 'foo' => 'norm[foo]', - ])) - ->addViewTransformer(new FixedDataTransformer([ - 'norm[foo]' => 'view[foo]', - ])) - ->add($child) + ->setDataMapper(new DataMapper()) ->getForm(); + $rootForm->add($nameForm); + $rootForm->setData(['firstName' => 'Christian', 'lastName' => 'Flothmann']); - $this->assertSame('foo', $parent->get('child')->getData()); - $this->assertSame('norm[foo]', $parent->get('child')->getNormData()); - $this->assertSame('view[foo]', $parent->get('child')->getViewData()); + $this->assertSame('Christian', $firstNameForm->getData()); + $this->assertSame('Christian', $firstNameForm->getNormData()); + $this->assertSame('Christian', $firstNameForm->getViewData()); + $this->assertSame('Flothmann', $lastNameForm->getData()); + $this->assertSame('Flothmann', $lastNameForm->getNormData()); + $this->assertSame('Flothmann', $lastNameForm->getViewData()); } public function testInheritDataDisallowsSetData() @@ -1056,14 +1050,12 @@ public function testSubmitIsNeverFiredIfInheritData() public function testInitializeSetsDefaultData() { $config = $this->getBuilder()->setData('DEFAULT')->getFormConfig(); - $form = $this->getMockBuilder(Form::class)->setMethods(['setData'])->setConstructorArgs([$config])->getMock(); - - $form->expects($this->once()) - ->method('setData') - ->with($this->identicalTo('DEFAULT')); + $form = new Form($config); /* @var Form $form */ $form->initialize(); + + $this->assertSame('DEFAULT', $form->getData()); } public function testInitializeFailsIfParent() @@ -1081,7 +1073,7 @@ public function testCannotCallGetDataInPreSetDataListenerIfDataHasNotAlreadyBeen { $this->expectException(RuntimeException::class); $this->expectExceptionMessage('A cycle was detected. Listeners to the PRE_SET_DATA event must not call getData() if the form data has not already been set. You should call getData() on the FormEvent object instead.'); - $config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher); + $config = new FormConfigBuilder('name', 'stdClass', new EventDispatcher()); $config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $event->getForm()->getData(); }); @@ -1094,7 +1086,7 @@ public function testCannotCallGetNormDataInPreSetDataListener() { $this->expectException(RuntimeException::class); $this->expectExceptionMessage('A cycle was detected. Listeners to the PRE_SET_DATA event must not call getNormData() if the form data has not already been set.'); - $config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher); + $config = new FormConfigBuilder('name', 'stdClass', new EventDispatcher()); $config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $event->getForm()->getNormData(); }); @@ -1107,7 +1099,7 @@ public function testCannotCallGetViewDataInPreSetDataListener() { $this->expectException(RuntimeException::class); $this->expectExceptionMessage('A cycle was detected. Listeners to the PRE_SET_DATA event must not call getViewData() if the form data has not already been set.'); - $config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher); + $config = new FormConfigBuilder('name', 'stdClass', new EventDispatcher()); $config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $event->getForm()->getViewData(); }); @@ -1118,7 +1110,7 @@ public function testCannotCallGetViewDataInPreSetDataListener() public function testIsEmptyCallback() { - $config = new FormConfigBuilder('foo', null, $this->dispatcher); + $config = new FormConfigBuilder('foo', null, new EventDispatcher()); $config->setIsEmptyCallback(function ($modelData): bool { return 'ccc' === $modelData; }); $form = new Form($config); @@ -1131,8 +1123,13 @@ public function testIsEmptyCallback() $this->assertFalse($form->isEmpty()); } - protected function createForm(): FormInterface + private function createForm(): FormInterface { return $this->getBuilder()->getForm(); } + + private function getBuilder(?string $name = 'name', string $dataClass = null, array $options = []): FormBuilder + { + return new FormBuilder($name, $dataClass, new EventDispatcher(), new FormFactory(new FormRegistry([], new ResolvedFormTypeFactory())), $options); + } } diff --git a/src/Symfony/Component/HtmlSanitizer/HtmlSanitizer.php b/src/Symfony/Component/HtmlSanitizer/HtmlSanitizer.php index 78687d6cc2d45..2f4947256602e 100644 --- a/src/Symfony/Component/HtmlSanitizer/HtmlSanitizer.php +++ b/src/Symfony/Component/HtmlSanitizer/HtmlSanitizer.php @@ -25,7 +25,6 @@ final class HtmlSanitizer implements HtmlSanitizerInterface { private HtmlSanitizerConfig $config; - private int $maxInputLength; private ParserInterface $parser; /** @@ -33,10 +32,9 @@ final class HtmlSanitizer implements HtmlSanitizerInterface */ private array $domVisitors = []; - public function __construct(HtmlSanitizerConfig $config, int $maxInputLength = 20000, ParserInterface $parser = null) + public function __construct(HtmlSanitizerConfig $config, ParserInterface $parser = null) { $this->config = $config; - $this->maxInputLength = $maxInputLength; $this->parser = $parser ?? new MastermindsParser(); } @@ -64,8 +62,8 @@ private function sanitizeWithContext(string $context, string $input): string $this->domVisitors[$context] ??= $this->createDomVisitorForContext($context); // Prevent DOS attack induced by extremely long HTML strings - if (\strlen($input) > $this->maxInputLength) { - $input = substr($input, 0, $this->maxInputLength); + if (\strlen($input) > $this->config->getMaxInputLength()) { + $input = substr($input, 0, $this->config->getMaxInputLength()); } // Only operate on valid UTF-8 strings. This is necessary to prevent cross diff --git a/src/Symfony/Component/HtmlSanitizer/HtmlSanitizerConfig.php b/src/Symfony/Component/HtmlSanitizer/HtmlSanitizerConfig.php index 81a2812a5c862..34576ca9d95cf 100644 --- a/src/Symfony/Component/HtmlSanitizer/HtmlSanitizerConfig.php +++ b/src/Symfony/Component/HtmlSanitizer/HtmlSanitizerConfig.php @@ -92,6 +92,8 @@ class HtmlSanitizerConfig */ private array $attributeSanitizers; + private int $maxInputLength = 20_000; + public function __construct() { $this->attributeSanitizers = [ @@ -405,6 +407,19 @@ public function withoutAttributeSanitizer(AttributeSanitizerInterface $sanitizer return $clone; } + public function withMaxInputLength(int $maxInputLength): static + { + $clone = clone $this; + $clone->maxInputLength = $maxInputLength; + + return $clone; + } + + public function getMaxInputLength(): int + { + return $this->maxInputLength; + } + /** * @return array> */ diff --git a/src/Symfony/Component/HtmlSanitizer/README.md b/src/Symfony/Component/HtmlSanitizer/README.md index 12210c8a87dba..70cdc476e258d 100644 --- a/src/Symfony/Component/HtmlSanitizer/README.md +++ b/src/Symfony/Component/HtmlSanitizer/README.md @@ -63,19 +63,19 @@ $config = (new HtmlSanitizerConfig()) ->forceHttpsUrls() // Configure which schemes are allowed in links (others will be dropped) - ->allowedLinkSchemes(['https', 'http', 'mailto']) + ->allowLinkSchemes(['https', 'http', 'mailto']) // Configure which hosts are allowed in links (by default all are allowed) - ->allowedLinkHosts(['symfony.com', 'example.com']) + ->allowLinkHosts(['symfony.com', 'example.com']) // Allow relative URL in links (by default they are dropped) ->allowRelativeLinks() // Configure which schemes are allowed in img/audio/video/iframe (others will be dropped) - ->allowedMediaSchemes(['https', 'http']) + ->allowMediaSchemes(['https', 'http']) // Configure which hosts are allowed in img/audio/video/iframe (by default all are allowed) - ->allowedMediaHosts(['symfony.com', 'example.com']) + ->allowMediaHosts(['symfony.com', 'example.com']) // Allow relative URL in img/audio/video/iframe (by default they are dropped) ->allowRelativeMedias() diff --git a/src/Symfony/Component/HttpClient/Response/AmpResponse.php b/src/Symfony/Component/HttpClient/Response/AmpResponse.php index b8dff00a551bb..7ab4ec5c11c90 100644 --- a/src/Symfony/Component/HttpClient/Response/AmpResponse.php +++ b/src/Symfony/Component/HttpClient/Response/AmpResponse.php @@ -226,7 +226,7 @@ private static function select(ClientState $multi, float $timeout): int return null === self::$delay ? 1 : 0; } - private static function generateResponse(Request $request, AmpClientState $multi, string $id, array &$info, array &$headers, CancellationTokenSource $canceller, array &$options, \Closure $onProgress, &$handle, ?LoggerInterface $logger, Promise &$pause) + private static function generateResponse(Request $request, AmpClientState $multi, string $id, array &$info, array &$headers, CancellationTokenSource $canceller, array &$options, \Closure $onProgress, &$handle, ?LoggerInterface $logger, Promise &$pause): \Generator { $request->setInformationalResponseHandler(static function (Response $response) use ($multi, $id, &$info, &$headers) { self::addResponseHeaders($response, $info, $headers); @@ -285,7 +285,7 @@ private static function generateResponse(Request $request, AmpClientState $multi self::stopLoop(); } - private static function followRedirects(Request $originRequest, AmpClientState $multi, array &$info, array &$headers, CancellationTokenSource $canceller, array $options, \Closure $onProgress, &$handle, ?LoggerInterface $logger, Promise &$pause) + private static function followRedirects(Request $originRequest, AmpClientState $multi, array &$info, array &$headers, CancellationTokenSource $canceller, array $options, \Closure $onProgress, &$handle, ?LoggerInterface $logger, Promise &$pause): \Generator { yield $pause; @@ -399,7 +399,7 @@ private static function addResponseHeaders(Response $response, array &$info, arr /** * Accepts pushed responses only if their headers related to authentication match the request. */ - private static function getPushedResponse(Request $request, AmpClientState $multi, array &$info, array &$headers, array $options, ?LoggerInterface $logger) + private static function getPushedResponse(Request $request, AmpClientState $multi, array &$info, array &$headers, array $options, ?LoggerInterface $logger): \Generator { if ('' !== $options['body']) { return null; diff --git a/src/Symfony/Component/HttpClient/Response/MockResponse.php b/src/Symfony/Component/HttpClient/Response/MockResponse.php index d143de2aa006b..9b80f310e8f13 100644 --- a/src/Symfony/Component/HttpClient/Response/MockResponse.php +++ b/src/Symfony/Component/HttpClient/Response/MockResponse.php @@ -229,7 +229,7 @@ protected static function select(ClientState $multi, float $timeout): int /** * Simulates sending the request. */ - private static function writeRequest(self $response, array $options, ResponseInterface $mock) + private static function writeRequest(self $response, array $options, ResponseInterface $mock): void { $onProgress = $options['on_progress'] ?? static function () {}; $response->info += $mock->getInfo() ?: []; @@ -272,7 +272,7 @@ private static function writeRequest(self $response, array $options, ResponseInt /** * Simulates reading the response. */ - private static function readResponse(self $response, array $options, ResponseInterface $mock, int &$offset) + private static function readResponse(self $response, array $options, ResponseInterface $mock, int &$offset): void { $onProgress = $options['on_progress'] ?? static function () {}; diff --git a/src/Symfony/Component/HttpClient/Response/StreamWrapper.php b/src/Symfony/Component/HttpClient/Response/StreamWrapper.php index 9879c78d26acc..e002a004816d6 100644 --- a/src/Symfony/Component/HttpClient/Response/StreamWrapper.php +++ b/src/Symfony/Component/HttpClient/Response/StreamWrapper.php @@ -117,7 +117,7 @@ public function stream_open(string $path, string $mode, int $options): bool return false; } - public function stream_read(int $count) + public function stream_read(int $count): string|false { if (\is_resource($this->content)) { // Empty the internal activity list diff --git a/src/Symfony/Component/HttpClient/Response/TraceableResponse.php b/src/Symfony/Component/HttpClient/Response/TraceableResponse.php index 4d665f4d8c7f4..507799e1428ab 100644 --- a/src/Symfony/Component/HttpClient/Response/TraceableResponse.php +++ b/src/Symfony/Component/HttpClient/Response/TraceableResponse.php @@ -202,7 +202,7 @@ public static function stream(HttpClientInterface $client, iterable $responses, } } - private function checkStatusCode(int $code) + private function checkStatusCode(int $code): void { if (500 <= $code) { throw new ServerException($this); diff --git a/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php b/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php index c639eb9fcd1c6..f2615111bc97a 100644 --- a/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php +++ b/src/Symfony/Component/HttpClient/Response/TransportResponseTrait.php @@ -131,7 +131,7 @@ private static function addResponseHeaders(array $responseHeaders, array &$info, /** * Ensures the request is always sent and that the response code was checked. */ - private function doDestruct() + private function doDestruct(): void { $this->shouldBuffer = true; diff --git a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php index a9999c988cebb..056161b381284 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php @@ -71,7 +71,7 @@ public function testSetContentDispositionGeneratesSafeFallbackFilenameForWrongly { $response = new BinaryFileResponse(__FILE__); - $iso88591EncodedFilename = utf8_decode('föö.html'); + $iso88591EncodedFilename = mb_convert_encoding('föö.html', 'ISO-8859-1', 'UTF-8'); $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $iso88591EncodedFilename); // the parameter filename* is invalid in this case (rawurldecode('f%F6%F6') does not provide a UTF-8 string but an ISO-8859-1 encoded one) diff --git a/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php b/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php index 7d96f730d7eae..05da3a0a3e577 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php @@ -117,10 +117,6 @@ public function testGenerateAbsoluteUrlWithScriptFileName() */ public function testGenerateRelativePath($expected, $path, $pathinfo) { - if (!method_exists(Request::class, 'getRelativeUriForPath')) { - $this->markTestSkipped('Your version of Symfony HttpFoundation is too old.'); - } - $stack = new RequestStack(); $stack->push(Request::create($pathinfo)); $urlHelper = new UrlHelper($stack); diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index a7c0eb022d1f6..89fb8c0617078 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 array $freshCache = []; - public const VERSION = '6.1.0-BETA1'; + public const VERSION = '6.1.0-BETA2'; public const VERSION_ID = 60100; public const MAJOR_VERSION = 6; public const MINOR_VERSION = 1; public const RELEASE_VERSION = 0; - public const EXTRA_VERSION = 'BETA1'; + public const EXTRA_VERSION = 'BETA2'; public const END_OF_MAINTENANCE = '01/2023'; public const END_OF_LIFE = '01/2023'; diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/DebugHandlersListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/DebugHandlersListenerTest.php index dab60d402bb21..b58dd7de78256 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/DebugHandlersListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/DebugHandlersListenerTest.php @@ -192,10 +192,6 @@ public function provideLevelsAssignedToLoggers(): array */ public function testLevelsAssignedToLoggers(bool $hasLogger, bool $hasDeprecationLogger, $levels, $expectedLoggerLevels, $expectedDeprecationLoggerLevels) { - if (!class_exists(ErrorHandler::class)) { - $this->markTestSkipped('ErrorHandler component is required to run this test.'); - } - $handler = $this->createMock(ErrorHandler::class); $expectedCalls = []; diff --git a/src/Symfony/Component/Ldap/Tests/Security/CheckLdapCredentialsListenerTest.php b/src/Symfony/Component/Ldap/Tests/Security/CheckLdapCredentialsListenerTest.php index f62029b594a1c..1ff3503cac2de 100644 --- a/src/Symfony/Component/Ldap/Tests/Security/CheckLdapCredentialsListenerTest.php +++ b/src/Symfony/Component/Ldap/Tests/Security/CheckLdapCredentialsListenerTest.php @@ -41,10 +41,6 @@ class CheckLdapCredentialsListenerTest extends TestCase protected function setUp(): void { - if (!interface_exists(AuthenticatorInterface::class)) { - $this->markTestSkipped('This test requires symfony/security-http:^5.1'); - } - $this->ldap = $this->createMock(LdapInterface::class); } @@ -61,10 +57,6 @@ public function testShouldNotCheckPassport($authenticator, $passport) public function provideShouldNotCheckPassport() { - if (!interface_exists(AuthenticatorInterface::class)) { - $this->markTestSkipped('This test requires symfony/security-http:^5.1'); - } - // no LdapBadge yield [new TestAuthenticator(), new Passport(new UserBadge('test'), new PasswordCredentials('s3cret'))]; @@ -110,10 +102,6 @@ public function testWrongPassport($passport) public function provideWrongPassportData() { - if (!interface_exists(AuthenticatorInterface::class)) { - $this->markTestSkipped('This test requires symfony/security-http:^5.1'); - } - // no password credentials yield [new SelfValidatingPassport(new UserBadge('test'), [new LdapBadge('app.ldap')])]; } diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php index f2740d6e35459..ef6d2a51a26cd 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php @@ -224,10 +224,6 @@ public function testEnvelopeSenderAndRecipients() public function testTagAndMetadataHeaders() { - if (!class_exists(TagHeader::class)) { - $this->markTestSkipped('This test requires symfony/mailer 5.1 or higher.'); - } - $email = new Email(); $email->getHeaders()->add(new TagHeader('category-one')); $email->getHeaders()->add(new MetadataHeader('Color', 'blue')); diff --git a/src/Symfony/Component/Mailer/README.md b/src/Symfony/Component/Mailer/README.md index 05c56fddf3259..93a9585822644 100644 --- a/src/Symfony/Component/Mailer/README.md +++ b/src/Symfony/Component/Mailer/README.md @@ -13,6 +13,7 @@ $ composer require symfony/mailer ```php use Symfony\Component\Mailer\Transport; use Symfony\Component\Mailer\Mailer; +use Symfony\Component\Mime\Email; $transport = Transport::fromDsn('smtp://localhost'); $mailer = new Mailer($transport); diff --git a/src/Symfony/Component/Mailer/Tests/Transport/TransportsTest.php b/src/Symfony/Component/Mailer/Tests/Transport/TransportsTest.php index 10d46ca846b4e..e50db434ffc0c 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/TransportsTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/TransportsTest.php @@ -64,4 +64,28 @@ public function testTransportDoesNotExist() $this->expectExceptionMessage('The "foobar" transport does not exist (available transports: "foo", "bar").'); $transport->send($email); } + + public function testTransportRestoredAfterFailure() + { + $exception = new \Exception(); + + $fooTransport = $this->createMock(TransportInterface::class); + $fooTransport->method('send') + ->willThrowException($exception); + + $transport = new Transports([ + 'foo' => $fooTransport, + ]); + + $headers = (new Headers())->addTextHeader('X-Transport', 'foo'); + $email = new Message($headers, new TextPart('...')); + + $this->expectExceptionObject($exception); + + try { + $transport->send($email); + } finally { + $this->assertSame('foo', $email->getHeaders()->getHeaderBody('X-Transport')); + } + } } diff --git a/src/Symfony/Component/Mailer/Transport/Transports.php b/src/Symfony/Component/Mailer/Transport/Transports.php index 2a04c1cd1e108..71182a8350936 100644 --- a/src/Symfony/Component/Mailer/Transport/Transports.php +++ b/src/Symfony/Component/Mailer/Transport/Transports.php @@ -59,7 +59,13 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa throw new InvalidArgumentException(sprintf('The "%s" transport does not exist (available transports: "%s").', $transport, implode('", "', array_keys($this->transports)))); } - return $this->transports[$transport]->send($message, $envelope); + try { + return $this->transports[$transport]->send($message, $envelope); + } catch (\Throwable $e) { + $headers->addTextHeader('X-Transport', $transport); + + throw $e; + } } public function __toString(): string diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php index e70b13b2ef6b2..7e576a5580dff 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php @@ -401,7 +401,7 @@ public function providePlatformSql(): iterable yield 'Oracle' => [ new OraclePlatform(), - 'SELECT w.* FROM messenger_messages w WHERE w.id IN(SELECT a.id FROM (SELECT m.* FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC) a WHERE ROWNUM <= 1) FOR UPDATE', + 'SELECT w.id AS "id", w.body AS "body", w.headers AS "headers", w.queue_name AS "queue_name", w.created_at AS "created_at", w.available_at AS "available_at", w.delivered_at AS "delivered_at" FROM messenger_messages w WHERE w.id IN(SELECT a.id FROM (SELECT m.* FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC) a WHERE ROWNUM <= 1) FOR UPDATE', ]; } diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrinePostgreSqlIntegrationTest.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrinePostgreSqlIntegrationTest.php new file mode 100644 index 0000000000000..a53505f6f2d11 --- /dev/null +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrinePostgreSqlIntegrationTest.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Bridge\Doctrine\Tests\Transport; + +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\DriverManager; +use Doctrine\DBAL\Schema\AbstractSchemaManager; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage; +use Symfony\Component\Messenger\Bridge\Doctrine\Transport\PostgreSqlConnection; + +/** + * @requires extension pdo_pgsql + * @group integration + */ +class DoctrinePostgreSqlIntegrationTest extends TestCase +{ + /** @var Connection */ + private $driverConnection; + /** @var PostgreSqlConnection */ + private $connection; + + protected function setUp(): void + { + if (!$host = getenv('POSTGRES_HOST')) { + $this->markTestSkipped('Missing POSTGRES_HOST env variable'); + } + + $this->driverConnection = DriverManager::getConnection(['url' => "pgsql://postgres:password@$host"]); + $this->connection = new PostgreSqlConnection(['table_name' => 'queue_table'], $this->driverConnection); + $this->connection->setup(); + } + + protected function tearDown(): void + { + $this->createSchemaManager()->dropTable('queue_table'); + $this->driverConnection->close(); + } + + public function testPostgreSqlConnectionSendAndGet() + { + $this->connection->send('{"message": "Hi"}', ['type' => DummyMessage::class]); + + $encoded = $this->connection->get(); + $this->assertEquals('{"message": "Hi"}', $encoded['body']); + $this->assertEquals(['type' => DummyMessage::class], $encoded['headers']); + + $this->assertNull($this->connection->get()); + } + + private function createSchemaManager(): AbstractSchemaManager + { + return method_exists($this->driverConnection, 'createSchemaManager') + ? $this->driverConnection->createSchemaManager() + : $this->driverConnection->getSchemaManager(); + } +} diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php index 340cbf671e5ce..14a500bb7a5fa 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php @@ -189,7 +189,11 @@ public function get(): ?array $sql = str_replace('SELECT a.* FROM', 'SELECT a.id FROM', $sql); $wrappedQuery = $this->driverConnection->createQueryBuilder() - ->select('w.*') + ->select( + 'w.id AS "id", w.body AS "body", w.headers AS "headers", w.queue_name AS "queue_name", '. + 'w.created_at AS "created_at", w.available_at AS "available_at", '. + 'w.delivered_at AS "delivered_at"' + ) ->from($this->configuration['table_name'], 'w') ->where('w.id IN('.$sql.')'); diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json b/src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json index b9f534d16bcc1..5f377c81a3628 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json @@ -22,7 +22,7 @@ "symfony/service-contracts": "^1.1|^2|^3" }, "require-dev": { - "doctrine/persistence": "^1.3|^2", + "doctrine/persistence": "^1.3|^2|^3", "symfony/property-access": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, diff --git a/src/Symfony/Component/Messenger/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Messenger/Tests/Command/DebugCommandTest.php index af2d0e3e9fa78..eadc2f21c8df4 100644 --- a/src/Symfony/Component/Messenger/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Component/Messenger/Tests/Command/DebugCommandTest.php @@ -174,10 +174,6 @@ public function testExceptionOnUnknownBusArgument() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $command = new DebugCommand(['command_bus' => [], 'query_bus' => []]); $application = new Application(); $application->add($command); diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/Smsapi/CHANGELOG.md index 18564bc696b04..bc897c0f88f0f 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/CHANGELOG.md @@ -4,7 +4,8 @@ CHANGELOG 6.1 --- - * Added `fast` option to the DSN that allows sending message with the highest priority that ensures the quickest possible time of delivery + * Add `fast` option to the DSN that allows sending message with the highest priority that ensures the quickest possible time of delivery + * Add `test` option to the DSN that allows sending message in test mode (message is validated, but not sent) 5.2 --- diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/README.md b/src/Symfony/Component/Notifier/Bridge/Smsapi/README.md index dc1c6230273ac..55b7a67643b0b 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/README.md +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/README.md @@ -7,13 +7,14 @@ DSN example ----------- ``` -SMSAPI_DSN=smsapi://TOKEN@default?from=FROM&fast=FAST +SMSAPI_DSN=smsapi://TOKEN@default?from=FROM&fast=FAST&test=TEST ``` where: - `TOKEN` is your API Token (OAuth) - `FROM` is the sender name - `FAST` setting this parameter to "1" (default "0") will result in sending message with the highest priority which ensures the quickest possible time of delivery. Attention! Fast messages cost more than normal messages. + - `TEST` setting this parameter to "1" (default "0") will result in sending message in test mode (message is validated, but not sent). See your account info at https://ssl.smsapi.pl/ diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransport.php b/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransport.php index 98d6fa7dedd60..2b745c4b77295 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransport.php @@ -32,6 +32,7 @@ final class SmsapiTransport extends AbstractTransport private string $authToken; private string $from; private bool $fast = false; + private bool $test = false; public function __construct(string $authToken, string $from, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null) { @@ -51,9 +52,29 @@ public function setFast(bool $fast): static return $this; } + /** + * @return $this + */ + public function setTest(bool $test): static + { + $this->test = $test; + + return $this; + } + public function __toString(): string { - return sprintf('smsapi://%s?from=%s&fast=%d', $this->getEndpoint(), $this->from, (int) $this->fast); + $dsn = sprintf('smsapi://%s?from=%s', $this->getEndpoint(), $this->from); + + if ($this->fast) { + $dsn .= sprintf('&fast=%d', (int) $this->fast); + } + + if ($this->test) { + $dsn .= sprintf('&test=%d', (int) $this->test); + } + + return $dsn; } public function supports(MessageInterface $message): bool @@ -75,9 +96,9 @@ protected function doSend(MessageInterface $message): SentMessage 'to' => $message->getPhone(), 'message' => $message->getSubject(), 'fast' => $this->fast, - 'encoding' => 'utf-8', 'format' => 'json', 'encoding' => 'utf-8', + 'test' => $this->test, ], ]); diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php index 5f1d3803eee1c..3f498ab8edf25 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php @@ -32,9 +32,10 @@ public function create(Dsn $dsn): SmsapiTransport $from = $dsn->getRequiredOption('from'); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $fast = filter_var($dsn->getOption('fast', false), \FILTER_VALIDATE_BOOLEAN); + $test = filter_var($dsn->getOption('test', false), \FILTER_VALIDATE_BOOLEAN); $port = $dsn->getPort(); - return (new SmsapiTransport($authToken, $from, $this->client, $this->dispatcher))->setFast($fast)->setHost($host)->setPort($port); + return (new SmsapiTransport($authToken, $from, $this->client, $this->dispatcher))->setFast($fast)->setHost($host)->setPort($port)->setTest($test); } protected function getSupportedSchemes(): array diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportFactoryTest.php index 4f312a95f140c..264c0d7ec9fb7 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportFactoryTest.php @@ -24,20 +24,45 @@ public function createFactory(): SmsapiTransportFactory public function createProvider(): iterable { yield [ - 'smsapi://host.test?from=testFrom&fast=0', + 'smsapi://host.test?from=testFrom', 'smsapi://token@host.test?from=testFrom', ]; yield [ - 'smsapi://host.test?from=testFrom&fast=0', + 'smsapi://host.test?from=testFrom', + 'smsapi://token@host.test?from=testFrom&test=0', + ]; + + yield [ + 'smsapi://host.test?from=testFrom', 'smsapi://token@host.test?from=testFrom&fast=0', ]; + yield [ + 'smsapi://host.test?from=testFrom', + 'smsapi://token@host.test?from=testFrom&test=false', + ]; + + yield [ + 'smsapi://host.test?from=testFrom', + 'smsapi://token@host.test?from=testFrom&fast=false', + ]; + + yield [ + 'smsapi://host.test?from=testFrom&test=1', + 'smsapi://token@host.test?from=testFrom&test=1', + ]; + yield [ 'smsapi://host.test?from=testFrom&fast=1', 'smsapi://token@host.test?from=testFrom&fast=1', ]; + yield [ + 'smsapi://host.test?from=testFrom&test=1', + 'smsapi://token@host.test?from=testFrom&test=true', + ]; + yield [ 'smsapi://host.test?from=testFrom&fast=1', 'smsapi://token@host.test?from=testFrom&fast=true', @@ -48,6 +73,7 @@ public function supportsProvider(): iterable { yield [true, 'smsapi://host?from=testFrom']; yield [true, 'smsapi://host?from=testFrom&fast=1']; + yield [true, 'smsapi://host?from=testFrom&test=1']; yield [false, 'somethingElse://host?from=testFrom']; } diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportTest.php index fcc89feb8bcda..73213d8907a0a 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/Tests/SmsapiTransportTest.php @@ -23,14 +23,17 @@ final class SmsapiTransportTest extends TransportTestCase { - public function createTransport(HttpClientInterface $client = null): SmsapiTransport + public function createTransport(HttpClientInterface $client = null, bool $fast = false, bool $test = false): SmsapiTransport { - return (new SmsapiTransport('testToken', 'testFrom', $client ?? $this->createMock(HttpClientInterface::class)))->setFast(true)->setHost('test.host'); + return (new SmsapiTransport('testToken', 'testFrom', $client ?? $this->createMock(HttpClientInterface::class)))->setHost('test.host')->setFast($fast)->setTest($test); } public function toStringProvider(): iterable { - yield ['smsapi://test.host?from=testFrom&fast=1', $this->createTransport()]; + yield ['smsapi://test.host?from=testFrom', $this->createTransport()]; + yield ['smsapi://test.host?from=testFrom&fast=1', $this->createTransport(null, true)]; + yield ['smsapi://test.host?from=testFrom&test=1', $this->createTransport(null, false, true)]; + yield ['smsapi://test.host?from=testFrom&fast=1&test=1', $this->createTransport(null, true, true)]; } public function supportedMessagesProvider(): iterable diff --git a/src/Symfony/Component/PasswordHasher/Tests/Command/UserPasswordHashCommandTest.php b/src/Symfony/Component/PasswordHasher/Tests/Command/UserPasswordHashCommandTest.php index e619220904d11..c038e757571e1 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Command/UserPasswordHashCommandTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Command/UserPasswordHashCommandTest.php @@ -292,10 +292,6 @@ public function testThrowsExceptionOnNoConfiguredHashers() */ public function testCompletionSuggestions(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $command = new UserPasswordHashCommand($this->createMock(PasswordHasherFactoryInterface::class), ['App\Entity\User']); $tester = new CommandCompletionTester($command); diff --git a/src/Symfony/Component/PasswordHasher/composer.json b/src/Symfony/Component/PasswordHasher/composer.json index 1b4e8e8c722f0..1e326e5d4fbab 100644 --- a/src/Symfony/Component/PasswordHasher/composer.json +++ b/src/Symfony/Component/PasswordHasher/composer.json @@ -20,7 +20,7 @@ }, "require-dev": { "symfony/security-core": "^5.4|^6.0", - "symfony/console": "^5" + "symfony/console": "^5.4|^6.0" }, "conflict": { "symfony/security-core": "<5.4" diff --git a/src/Symfony/Component/PropertyInfo/CHANGELOG.md b/src/Symfony/Component/PropertyInfo/CHANGELOG.md index 6d408eb87e39a..3595f75017c6d 100644 --- a/src/Symfony/Component/PropertyInfo/CHANGELOG.md +++ b/src/Symfony/Component/PropertyInfo/CHANGELOG.md @@ -6,6 +6,7 @@ CHANGELOG * Add support for phpDocumentor and PHPStan pseudo-types * Add PHP 8.0 promoted properties `@param` mutation support to `PhpDocExtractor` + * Add PHP 8.0 promoted properties `@param` mutation support to `PhpStanExtractor` 6.0 --- diff --git a/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php b/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php index 89721f4e666a6..db25e14f44736 100644 --- a/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php +++ b/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php @@ -196,8 +196,8 @@ private function getDocBlock(string $class, string $property): array $ucFirstProperty = ucfirst($property); - if ([$docBlock, $declaringClass] = $this->getDocBlockFromProperty($class, $property)) { - $data = [$docBlock, self::PROPERTY, null, $declaringClass]; + if ([$docBlock, $source, $declaringClass] = $this->getDocBlockFromProperty($class, $property)) { + $data = [$docBlock, $source, null, $declaringClass]; } elseif ([$docBlock, $_, $declaringClass] = $this->getDocBlockFromMethod($class, $ucFirstProperty, self::ACCESSOR)) { $data = [$docBlock, self::ACCESSOR, null, $declaringClass]; } elseif ([$docBlock, $prefix, $declaringClass] = $this->getDocBlockFromMethod($class, $ucFirstProperty, self::MUTATOR)) { @@ -210,7 +210,7 @@ private function getDocBlock(string $class, string $property): array } /** - * @return array{PhpDocNode, string}|null + * @return array{PhpDocNode, int, string}|null */ private function getDocBlockFromProperty(string $class, string $property): ?array { @@ -221,7 +221,13 @@ private function getDocBlockFromProperty(string $class, string $property): ?arra return null; } - if (null === $rawDocNode = $reflectionProperty->getDocComment() ?: null) { + $source = self::PROPERTY; + + if ($reflectionProperty->isPromoted()) { + $constructor = new \ReflectionMethod($class, '__construct'); + $rawDocNode = $constructor->getDocComment(); + $source = self::MUTATOR; + } elseif (null === $rawDocNode = $reflectionProperty->getDocComment() ?: null) { return null; } @@ -229,7 +235,7 @@ private function getDocBlockFromProperty(string $class, string $property): ?arra $phpDocNode = $this->phpDocParser->parse($tokens); $tokens->consumeTokenType(Lexer::TOKEN_END); - return [$phpDocNode, $reflectionProperty->class]; + return [$phpDocNode, $source, $reflectionProperty->class]; } /** diff --git a/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpDocExtractorTest.php b/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpDocExtractorTest.php index 397ac4b1ad0fc..fc8b6890f8441 100644 --- a/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpDocExtractorTest.php +++ b/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpDocExtractorTest.php @@ -11,7 +11,6 @@ namespace Symfony\Component\PropertyInfo\Tests\Extractor; -use phpDocumentor\Reflection\Types\Collection; use PHPUnit\Framework\TestCase; use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor; use Symfony\Component\PropertyInfo\Tests\Fixtures\Dummy; @@ -137,10 +136,6 @@ public function typesProvider() */ public function testExtractCollection($property, array $type = null, $shortDescription, $longDescription) { - if (!class_exists(Collection::class)) { - $this->markTestSkipped('Collections are not implemented in current phpdocumentor/type-resolver version'); - } - $this->testExtract($property, $type, $shortDescription, $longDescription); } diff --git a/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php b/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php index 26077f7e528de..0cf346fce03c1 100644 --- a/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php +++ b/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php @@ -17,6 +17,7 @@ use Symfony\Component\PropertyInfo\Tests\Fixtures\DefaultValue; use Symfony\Component\PropertyInfo\Tests\Fixtures\Dummy; use Symfony\Component\PropertyInfo\Tests\Fixtures\ParentDummy; +use Symfony\Component\PropertyInfo\Tests\Fixtures\Php80Dummy; use Symfony\Component\PropertyInfo\Tests\Fixtures\RootDummy\RootDummyItem; use Symfony\Component\PropertyInfo\Tests\Fixtures\TraitUsage\DummyUsedInTrait; use Symfony\Component\PropertyInfo\Tests\Fixtures\TraitUsage\DummyUsingTrait; @@ -434,6 +435,21 @@ public function testDummyNamespaceWithProperty() $this->assertEquals('A\Property', $phpStanTypes[0]->getClassName()); $this->assertEquals($phpDocTypes[0]->getClassName(), $phpStanTypes[0]->getClassName()); } + + /** + * @dataProvider php80TypesProvider + */ + public function testExtractPhp80Type($property, array $type = null) + { + $this->assertEquals($type, $this->extractor->getTypes(Php80Dummy::class, $property, [])); + } + + public function php80TypesProvider() + { + return [ + ['promotedAndMutated', [new Type(Type::BUILTIN_TYPE_STRING)]], + ]; + } } class PhpStanOmittedParamTagTypeDocBlock diff --git a/src/Symfony/Component/PropertyInfo/Tests/Extractor/SerializerExtractorTest.php b/src/Symfony/Component/PropertyInfo/Tests/Extractor/SerializerExtractorTest.php index 02b19b74a6c9f..66d8c06b3e6ff 100644 --- a/src/Symfony/Component/PropertyInfo/Tests/Extractor/SerializerExtractorTest.php +++ b/src/Symfony/Component/PropertyInfo/Tests/Extractor/SerializerExtractorTest.php @@ -16,7 +16,6 @@ use Symfony\Component\PropertyInfo\Extractor\SerializerExtractor; use Symfony\Component\PropertyInfo\Tests\Fixtures\AdderRemoverDummy; use Symfony\Component\PropertyInfo\Tests\Fixtures\IgnorePropertyDummy; -use Symfony\Component\Serializer\Annotation\Ignore; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; @@ -46,10 +45,6 @@ public function testGetProperties() public function testGetPropertiesWithIgnoredProperties() { - if (!class_exists(Ignore::class)) { - $this->markTestSkipped('Ignore annotation is not implemented in current symfony/serializer version'); - } - $this->assertSame(['visibleProperty'], $this->extractor->getProperties(IgnorePropertyDummy::class, ['serializer_groups' => ['a']])); } diff --git a/src/Symfony/Component/Routing/CHANGELOG.md b/src/Symfony/Component/Routing/CHANGELOG.md index dee13d3a0980f..62e7cd25f0dc3 100644 --- a/src/Symfony/Component/Routing/CHANGELOG.md +++ b/src/Symfony/Component/Routing/CHANGELOG.md @@ -9,6 +9,9 @@ CHANGELOG * Support the `attribute` type (alias of `annotation`) in annotation loaders * Already encoded slashes are not decoded nor double-encoded anymore when generating URLs (query parameters) * Add `EnumRequirement` to help generate route requirements from a `\BackedEnum` + * Add `Requirement`, a collection of universal regular-expression constants to use as route parameter requirements + * Add `params` variable to condition expression + * Deprecate not passing route parameters as the fourth argument to `UrlMatcher::handleRouteRequirements()` 5.3 --- diff --git a/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php b/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php index de069776bb336..204e9b3341f20 100644 --- a/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php +++ b/src/Symfony/Component/Routing/Loader/AnnotationClassLoader.php @@ -150,10 +150,7 @@ protected function addRoute(RouteCollection $collection, object $annot, array $g return; } - $name = $annot->getName(); - if (null === $name) { - $name = $this->getDefaultRouteName($class, $method); - } + $name = $annot->getName() ?? $this->getDefaultRouteName($class, $method); $name = $globals['name'].$name; $requirements = $annot->getRequirements(); @@ -170,11 +167,7 @@ protected function addRoute(RouteCollection $collection, object $annot, array $g $schemes = array_merge($globals['schemes'], $annot->getSchemes()); $methods = array_merge($globals['methods'], $annot->getMethods()); - $host = $annot->getHost(); - if (null === $host) { - $host = $globals['host']; - } - + $host = $annot->getHost() ?? $globals['host']; $condition = $annot->getCondition() ?? $globals['condition']; $priority = $annot->getPriority() ?? $globals['priority']; diff --git a/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php b/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php index 8aba7d74e5889..c3953d08e44cc 100644 --- a/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php +++ b/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php @@ -115,7 +115,7 @@ public function getCompiledRoutes(bool $forDump = false): array } $checkConditionCode = <<indent(implode("\n", $conditions), 3)} } @@ -426,7 +426,7 @@ private function compileRoute(Route $route, string $name, string|array|null $var } if ($condition = $route->getCondition()) { - $condition = $this->getExpressionLanguage()->compile($condition, ['context', 'request']); + $condition = $this->getExpressionLanguage()->compile($condition, ['context', 'request', 'params']); $condition = $conditions[$condition] ??= (str_contains($condition, '$request') ? 1 : -1) * \count($conditions); } else { $condition = null; diff --git a/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherTrait.php b/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherTrait.php index 7e869e0491960..207d054fb3ed5 100644 --- a/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherTrait.php +++ b/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherTrait.php @@ -92,10 +92,6 @@ private function doMatch(string $pathinfo, array &$allow = [], array &$allowSche $supportsRedirections = 'GET' === $canonicalMethod && $this instanceof RedirectableUrlMatcherInterface; foreach ($this->staticRoutes[$trimmedPathinfo] ?? [] as [$ret, $requiredHost, $requiredMethods, $requiredSchemes, $hasTrailingSlash, , $condition]) { - if ($condition && !($this->checkCondition)($condition, $context, 0 < $condition ? $request ??= $this->request ?: $this->createRequest($pathinfo) : null)) { - continue; - } - if ($requiredHost) { if ('{' !== $requiredHost[0] ? $requiredHost !== $host : !preg_match($requiredHost, $host, $hostMatches)) { continue; @@ -106,6 +102,10 @@ private function doMatch(string $pathinfo, array &$allow = [], array &$allowSche } } + if ($condition && !($this->checkCondition)($condition, $context, 0 < $condition ? $request ??= $this->request ?: $this->createRequest($pathinfo) : null, $ret)) { + continue; + } + if ('/' !== $pathinfo && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { if ($supportsRedirections && (!$requiredMethods || isset($requiredMethods['GET']))) { return $allow = $allowSchemes = []; @@ -132,13 +132,8 @@ private function doMatch(string $pathinfo, array &$allow = [], array &$allowSche foreach ($this->regexpList as $offset => $regex) { while (preg_match($regex, $matchedPathinfo, $matches)) { foreach ($this->dynamicRoutes[$m = (int) $matches['MARK']] as [$ret, $vars, $requiredMethods, $requiredSchemes, $hasTrailingSlash, $hasTrailingVar, $condition]) { - if (null !== $condition) { - if (0 === $condition) { // marks the last route in the regexp - continue 3; - } - if (!($this->checkCondition)($condition, $context, 0 < $condition ? $request ??= $this->request ?: $this->createRequest($pathinfo) : null)) { - continue; - } + if (0 === $condition) { // marks the last route in the regexp + continue 3; } $hasTrailingVar = $trimmedPathinfo !== $pathinfo && $hasTrailingVar; @@ -151,17 +146,21 @@ private function doMatch(string $pathinfo, array &$allow = [], array &$allowSche } } - if ('/' !== $pathinfo && !$hasTrailingVar && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { - if ($supportsRedirections && (!$requiredMethods || isset($requiredMethods['GET']))) { - return $allow = $allowSchemes = []; + foreach ($vars as $i => $v) { + if (isset($matches[1 + $i])) { + $ret[$v] = $matches[1 + $i]; } + } + + if ($condition && !($this->checkCondition)($condition, $context, 0 < $condition ? $request ??= $this->request ?: $this->createRequest($pathinfo) : null, $ret)) { continue; } - foreach ($vars as $i => $v) { - if (isset($matches[1 + $i])) { - $ret[$v] = $matches[1 + $i]; + if ('/' !== $pathinfo && !$hasTrailingVar && $hasTrailingSlash === ($trimmedPathinfo === $pathinfo)) { + if ($supportsRedirections && (!$requiredMethods || isset($requiredMethods['GET']))) { + return $allow = $allowSchemes = []; } + continue; } if ($requiredSchemes && !isset($requiredSchemes[$context->getScheme()])) { diff --git a/src/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php b/src/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php index 323941e788e24..0f0cb3fd9e6a2 100644 --- a/src/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php +++ b/src/Symfony/Component/Routing/Matcher/TraceableUrlMatcher.php @@ -115,7 +115,9 @@ protected function matchCollection(string $pathinfo, RouteCollection $routes): a continue; } - $status = $this->handleRouteRequirements($pathinfo, $name, $route); + $attributes = $this->getAttributes($route, $name, array_replace($matches, $hostMatches)); + + $status = $this->handleRouteRequirements($pathinfo, $name, $route, $attributes); if (self::REQUIREMENT_MISMATCH === $status[0]) { $this->addTrace(sprintf('Condition "%s" does not evaluate to "true"', $route->getCondition()), self::ROUTE_ALMOST_MATCHES, $name, $route); @@ -146,7 +148,7 @@ protected function matchCollection(string $pathinfo, RouteCollection $routes): a $this->addTrace('Route matches!', self::ROUTE_MATCHES, $name, $route); - return $this->getAttributes($route, $name, array_replace($matches, $hostMatches, $status[1] ?? [])); + return array_replace($attributes, $status[1] ?? []); } return []; diff --git a/src/Symfony/Component/Routing/Matcher/UrlMatcher.php b/src/Symfony/Component/Routing/Matcher/UrlMatcher.php index dc9e09f00cfb2..1a0a9a760136e 100644 --- a/src/Symfony/Component/Routing/Matcher/UrlMatcher.php +++ b/src/Symfony/Component/Routing/Matcher/UrlMatcher.php @@ -167,7 +167,9 @@ protected function matchCollection(string $pathinfo, RouteCollection $routes): a continue; } - $status = $this->handleRouteRequirements($pathinfo, $name, $route); + $attributes = $this->getAttributes($route, $name, array_replace($matches, $hostMatches)); + + $status = $this->handleRouteRequirements($pathinfo, $name, $route, $attributes); if (self::REQUIREMENT_MISMATCH === $status[0]) { continue; @@ -190,7 +192,7 @@ protected function matchCollection(string $pathinfo, RouteCollection $routes): a continue; } - return $this->getAttributes($route, $name, array_replace($matches, $hostMatches, $status[1] ?? [])); + return array_replace($attributes, $status[1] ?? []); } return []; @@ -220,10 +222,25 @@ protected function getAttributes(Route $route, string $name, array $attributes): * * @return array The first element represents the status, the second contains additional information */ - protected function handleRouteRequirements(string $pathinfo, string $name, Route $route): array + protected function handleRouteRequirements(string $pathinfo, string $name, Route $route/*, array $routeParameters*/): array { + if (\func_num_args() < 4) { + trigger_deprecation('symfony/routing', '6.1', 'The "%s()" method will have a new "array $routeParameters" argument in version 7.0, not defining it is deprecated.', __METHOD__); + $routeParameters = []; + } else { + $routeParameters = func_get_arg(3); + + if (!\is_array($routeParameters)) { + throw new \TypeError(sprintf('"%s": Argument $routeParameters is expected to be an array, got "%s".', __METHOD__, get_debug_type($routeParameters))); + } + } + // expression condition - if ($route->getCondition() && !$this->getExpressionLanguage()->evaluate($route->getCondition(), ['context' => $this->context, 'request' => $this->request ?: $this->createRequest($pathinfo)])) { + if ($route->getCondition() && !$this->getExpressionLanguage()->evaluate($route->getCondition(), [ + 'context' => $this->context, + 'request' => $this->request ?: $this->createRequest($pathinfo), + 'params' => $routeParameters, + ])) { return [self::REQUIREMENT_MISMATCH, null]; } diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index 3ced6550a1725..e3f4831b3cc7b 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -96,7 +96,7 @@ public function getBaseUrl(): string */ public function setBaseUrl(string $baseUrl): static { - $this->baseUrl = $baseUrl; + $this->baseUrl = rtrim($baseUrl, '/'); return $this; } diff --git a/src/Symfony/Component/Routing/Requirement/EnumRequirement.php b/src/Symfony/Component/Routing/Requirement/EnumRequirement.php index ba5078cda3f8a..2a369845c4eb4 100644 --- a/src/Symfony/Component/Routing/Requirement/EnumRequirement.php +++ b/src/Symfony/Component/Routing/Requirement/EnumRequirement.php @@ -15,36 +15,42 @@ final class EnumRequirement implements \Stringable { - /** - * @var string[] - */ - private readonly array $values; + private string $requirement; /** * @template T of \BackedEnum - * @param class-string $enum - * @param T ...$cases + * + * @param class-string|list $cases */ - public function __construct(string $enum, \BackedEnum ...$cases) + public function __construct(string|array $cases = []) { - if (!\is_subclass_of($enum, \BackedEnum::class, true)) { - throw new InvalidArgumentException(sprintf('"%s" is not a \BackedEnum class.', $enum)); - } + if (\is_string($cases)) { + if (!is_subclass_of($cases, \BackedEnum::class, true)) { + throw new InvalidArgumentException(sprintf('"%s" is not a "BackedEnum" class.', $cases)); + } + + $cases = $cases::cases(); + } else { + $class = null; + + foreach ($cases as $case) { + if (!$case instanceof \BackedEnum) { + throw new InvalidArgumentException(sprintf('Case must be a "BackedEnum" instance, "%s" given.', get_debug_type($case))); + } + + $class ??= \get_class($case); - foreach ($cases as $case) { - if (!$case instanceof $enum) { - throw new InvalidArgumentException(sprintf('"%s::%s" is not a case of "%s".', \get_class($case), $case->name, $enum)); + if (!$case instanceof $class) { + throw new InvalidArgumentException(sprintf('"%s::%s" is not a case of "%s".', get_debug_type($case), $case->name, $class)); + } } } - $this->values = array_map( - static fn (\BackedEnum $e): string => $e->value, - $cases ?: $enum::cases(), - ); + $this->requirement = implode('|', array_map(static fn ($e) => preg_quote($e->value), $cases)); } public function __toString(): string { - return implode('|', array_map(preg_quote(...), $this->values)); + return $this->requirement; } } diff --git a/src/Symfony/Component/Routing/Requirement/Requirement.php b/src/Symfony/Component/Routing/Requirement/Requirement.php new file mode 100644 index 0000000000000..aa5e464e72603 --- /dev/null +++ b/src/Symfony/Component/Routing/Requirement/Requirement.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Routing\Requirement; + +/* + * A collection of universal regular-expression constants to use as route parameter requirements. + */ +enum Requirement +{ + public const ASCII_SLUG = '[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*'; // symfony/string AsciiSlugger default implementation + public const CATCH_ALL = '.+'; + public const DATE_YMD = '[0-9]{4}-(?:0[1-9]|1[012])-(?:0[1-9]|[12][0-9]|(? '{^(?' .'|/rootprefix/([^/]++)(*:27)' + .'|/with\\-condition/(\\d+)(*:56)' .')/?$}sD', ], [ // $dynamicRoutes - 27 => [ - [['_route' => 'dynamic'], ['var'], null, null, false, true, null], + 27 => [[['_route' => 'dynamic'], ['var'], null, null, false, true, null]], + 56 => [ + [['_route' => 'with-condition-dynamic'], ['id'], null, null, false, true, -2], [null, null, null, null, false, false, 0], ], ], - static function ($condition, $context, $request) { // $checkCondition + static function ($condition, $context, $request, $params) { // $checkCondition switch ($condition) { case -1: return ($context->getMethod() == "GET"); + case -2: return ($params["id"] < 100); } }, ]; diff --git a/src/Symfony/Component/Routing/Tests/Matcher/Dumper/CompiledUrlMatcherDumperTest.php b/src/Symfony/Component/Routing/Tests/Matcher/Dumper/CompiledUrlMatcherDumperTest.php index 4886d717685c6..0df1c0cf40589 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/Dumper/CompiledUrlMatcherDumperTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/Dumper/CompiledUrlMatcherDumperTest.php @@ -296,6 +296,10 @@ public function getRouteCollections() $route = new Route('/with-condition'); $route->setCondition('context.getMethod() == "GET"'); $rootprefixCollection->add('with-condition', $route); + $route = new Route('/with-condition/{id}'); + $route->setRequirement('id', '\d+'); + $route->setCondition("params['id'] < 100"); + $rootprefixCollection->add('with-condition-dynamic', $route); /* test case 4 */ $headMatchCasesCollection = new RouteCollection(); diff --git a/src/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php index b33e93caa1a8d..03b11a697aa0d 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/TraceableUrlMatcherTest.php @@ -104,6 +104,7 @@ public function testRoutesWithConditions() { $routes = new RouteCollection(); $routes->add('foo', new Route('/foo', [], [], [], 'baz', [], [], "request.headers.get('User-Agent') matches '/firefox/i'")); + $routes->add('bar', new Route('/bar/{id}', [], [], [], 'baz', [], [], "params['id'] < 100")); $context = new RequestContext(); $context->setHost('baz'); @@ -117,6 +118,14 @@ public function testRoutesWithConditions() $matchingRequest = Request::create('/foo', 'GET', [], [], [], ['HTTP_USER_AGENT' => 'Firefox']); $traces = $matcher->getTracesForRequest($matchingRequest); $this->assertEquals('Route matches!', $traces[0]['log']); + + $notMatchingRequest = Request::create('/bar/1000', 'GET'); + $traces = $matcher->getTracesForRequest($notMatchingRequest); + $this->assertEquals("Condition \"params['id'] < 100\" does not evaluate to \"true\"", $traces[1]['log']); + + $matchingRequest = Request::create('/bar/10', 'GET'); + $traces = $matcher->getTracesForRequest($matchingRequest); + $this->assertEquals('Route matches!', $traces[1]['log']); } protected function getUrlMatcher(RouteCollection $routes, RequestContext $context = null) diff --git a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php index 74ceb1e0be213..41126642e4767 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php @@ -474,6 +474,37 @@ public function testRequestCondition() $this->assertEquals(['bar' => 'bar', '_route' => 'foo'], $matcher->match('/foo/bar')); } + public function testRouteParametersCondition() + { + $coll = new RouteCollection(); + $route = new Route('/foo'); + $route->setCondition("params['_route'] matches '/^s[a-z]+$/'"); + $coll->add('static', $route); + $route = new Route('/bar'); + $route->setHost('en.example.com'); + $route->setCondition("params['_route'] matches '/^s[a-z\-]+$/'"); + $coll->add('static-with-host', $route); + $route = new Route('/foo/{id}'); + $route->setCondition("params['id'] < 100"); + $coll->add('dynamic1', $route); + $route = new Route('/foo/{id}'); + $route->setCondition("params['id'] > 100 and params['id'] < 1000"); + $coll->add('dynamic2', $route); + $route = new Route('/bar/{id}/'); + $route->setCondition("params['id'] < 100"); + $coll->add('dynamic-with-slash', $route); + $matcher = $this->getUrlMatcher($coll, new RequestContext('/sub/front.php', 'GET', 'en.example.com')); + + $this->assertEquals(['_route' => 'static'], $matcher->match('/foo')); + $this->assertEquals(['_route' => 'static-with-host'], $matcher->match('/bar')); + $this->assertEquals(['_route' => 'dynamic1', 'id' => '10'], $matcher->match('/foo/10')); + $this->assertEquals(['_route' => 'dynamic2', 'id' => '200'], $matcher->match('/foo/200')); + $this->assertEquals(['_route' => 'dynamic-with-slash', 'id' => '10'], $matcher->match('/bar/10/')); + + $this->expectException(ResourceNotFoundException::class); + $matcher->match('/foo/3000'); + } + public function testDecodeOnce() { $coll = new RouteCollection(); diff --git a/src/Symfony/Component/Routing/Tests/RequestContextTest.php b/src/Symfony/Component/Routing/Tests/RequestContextTest.php index 3d23b0e8947a2..179ef33d2aae0 100644 --- a/src/Symfony/Component/Routing/Tests/RequestContextTest.php +++ b/src/Symfony/Component/Routing/Tests/RequestContextTest.php @@ -40,6 +40,51 @@ public function testConstruct() $this->assertEquals('bar=foobar', $requestContext->getQueryString()); } + public function testFromUriWithBaseUrl() + { + $requestContext = RequestContext::fromUri('https://test.com:444/index.php'); + + $this->assertSame('GET', $requestContext->getMethod()); + $this->assertSame('https', $requestContext->getScheme()); + $this->assertSame('test.com', $requestContext->getHost()); + $this->assertSame('/index.php', $requestContext->getBaseUrl()); + $this->assertSame('/', $requestContext->getPathInfo()); + $this->assertSame(80, $requestContext->getHttpPort()); + $this->assertSame(444, $requestContext->getHttpsPort()); + } + + public function testFromUriWithTrailingSlash() + { + $requestContext = RequestContext::fromUri('http://test.com:8080/'); + + $this->assertSame('http', $requestContext->getScheme()); + $this->assertSame('test.com', $requestContext->getHost()); + $this->assertSame(8080, $requestContext->getHttpPort()); + $this->assertSame(443, $requestContext->getHttpsPort()); + $this->assertSame('', $requestContext->getBaseUrl()); + $this->assertSame('/', $requestContext->getPathInfo()); + } + + public function testFromUriWithoutTrailingSlash() + { + $requestContext = RequestContext::fromUri('https://test.com'); + + $this->assertSame('https', $requestContext->getScheme()); + $this->assertSame('test.com', $requestContext->getHost()); + $this->assertSame('', $requestContext->getBaseUrl()); + $this->assertSame('/', $requestContext->getPathInfo()); + } + + public function testFromUriBeingEmpty() + { + $requestContext = RequestContext::fromUri(''); + + $this->assertSame('http', $requestContext->getScheme()); + $this->assertSame('localhost', $requestContext->getHost()); + $this->assertSame('', $requestContext->getBaseUrl()); + $this->assertSame('/', $requestContext->getPathInfo()); + } + public function testFromRequest() { $request = Request::create('https://test.com:444/foo?bar=baz'); diff --git a/src/Symfony/Component/Routing/Tests/Requirement/EnumRequirementTest.php b/src/Symfony/Component/Routing/Tests/Requirement/EnumRequirementTest.php index 18484c03d142a..75613f4985575 100644 --- a/src/Symfony/Component/Routing/Tests/Requirement/EnumRequirementTest.php +++ b/src/Symfony/Component/Routing/Tests/Requirement/EnumRequirementTest.php @@ -25,25 +25,33 @@ class EnumRequirementTest extends TestCase public function testNotABackedEnum() { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('"Symfony\Component\Routing\Tests\Fixtures\Enum\TestUnitEnum" is not a \BackedEnum class.'); + $this->expectExceptionMessage('"Symfony\Component\Routing\Tests\Fixtures\Enum\TestUnitEnum" is not a "BackedEnum" class.'); new EnumRequirement(TestUnitEnum::class); } + public function testCaseNotABackedEnum() + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Case must be a "BackedEnum" instance, "string" given.'); + + new EnumRequirement(['wrong']); + } + public function testCaseFromAnotherEnum() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('"Symfony\Component\Routing\Tests\Fixtures\Enum\TestStringBackedEnum2::Spades" is not a case of "Symfony\Component\Routing\Tests\Fixtures\Enum\TestStringBackedEnum".'); - new EnumRequirement(TestStringBackedEnum::class, TestStringBackedEnum::Diamonds, TestStringBackedEnum2::Spades); + new EnumRequirement([TestStringBackedEnum::Diamonds, TestStringBackedEnum2::Spades]); } /** * @dataProvider provideToString */ - public function testToString(string $expected, string $enum, \BackedEnum ...$cases) + public function testToString(string $expected, string|array $cases = []) { - $this->assertSame($expected, (string) new EnumRequirement($enum, ...$cases)); + $this->assertSame($expected, (string) new EnumRequirement($cases)); } public function provideToString() @@ -51,7 +59,8 @@ public function provideToString() return [ ['hearts|diamonds|clubs|spades', TestStringBackedEnum::class], ['10|20|30|40', TestIntBackedEnum::class], - ['diamonds|spades', TestStringBackedEnum::class, TestStringBackedEnum::Diamonds, TestStringBackedEnum::Spades], + ['diamonds|spades', [TestStringBackedEnum::Diamonds, TestStringBackedEnum::Spades]], + ['diamonds', [TestStringBackedEnum::Diamonds]], ['hearts|diamonds|clubs|spa\|des', TestStringBackedEnum2::class], ]; } diff --git a/src/Symfony/Component/Routing/Tests/Requirement/RequirementTest.php b/src/Symfony/Component/Routing/Tests/Requirement/RequirementTest.php new file mode 100644 index 0000000000000..17fe691b7fb60 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Requirement/RequirementTest.php @@ -0,0 +1,435 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Routing\Tests\Requirement; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Routing\Requirement\Requirement; +use Symfony\Component\Routing\Route; + +class RequirementTest extends TestCase +{ + /** + * @testWith ["FOO"] + * ["foo"] + * ["1987"] + * ["42-42"] + * ["fo2o-bar"] + * ["foo-bA198r-Ccc"] + * ["fo10O-bar-CCc-fooba187rccc"] + */ + public function testAsciiSlugOK(string $slug) + { + $this->assertMatchesRegularExpression( + (new Route('/{slug}', [], ['slug' => Requirement::ASCII_SLUG]))->compile()->getRegex(), + '/'.$slug, + ); + } + + /** + * @testWith [""] + * ["-"] + * ["fôo"] + * ["-FOO"] + * ["foo-"] + * ["-foo-"] + * ["-foo-bar-"] + * ["foo--bar"] + */ + public function testAsciiSlugKO(string $slug) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{slug}', [], ['slug' => Requirement::ASCII_SLUG]))->compile()->getRegex(), + '/'.$slug, + ); + } + + /** + * @testWith ["foo"] + * ["foo/bar/ccc"] + * ["///"] + */ + public function testCatchAllOK(string $path) + { + $this->assertMatchesRegularExpression( + (new Route('/{path}', [], ['path' => Requirement::CATCH_ALL]))->compile()->getRegex(), + '/'.$path, + ); + } + + /** + * @testWith [""] + */ + public function testCatchAllKO(string $path) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{path}', [], ['path' => Requirement::CATCH_ALL]))->compile()->getRegex(), + '/'.$path, + ); + } + + /** + * @testWith ["0000-01-01"] + * ["9999-12-31"] + * ["2022-04-15"] + * ["2024-02-29"] + * ["1243-04-31"] + */ + public function testDateYmdOK(string $date) + { + $this->assertMatchesRegularExpression( + (new Route('/{date}', [], ['date' => Requirement::DATE_YMD]))->compile()->getRegex(), + '/'.$date, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["0000-01-00"] + * ["9999-00-31"] + * ["2022-02-30"] + * ["2022-02-31"] + */ + public function testDateYmdKO(string $date) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{date}', [], ['date' => Requirement::DATE_YMD]))->compile()->getRegex(), + '/'.$date, + ); + } + + /** + * @testWith ["0"] + * ["1"] + * ["42"] + * ["42198"] + * ["999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"] + */ + public function testDigitsOK(string $digits) + { + $this->assertMatchesRegularExpression( + (new Route('/{digits}', [], ['digits' => Requirement::DIGITS]))->compile()->getRegex(), + '/'.$digits, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["-1"] + * ["3.14"] + */ + public function testDigitsKO(string $digits) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{digits}', [], ['digits' => Requirement::DIGITS]))->compile()->getRegex(), + '/'.$digits, + ); + } + + /** + * @testWith ["00000000000000000000000000"] + * ["ZZZZZZZZZZZZZZZZZZZZZZZZZZ"] + * ["01G0P4XH09KW3RCF7G4Q57ESN0"] + * ["05CSACM1MS9RB9H5F61BYA146Q"] + */ + public function testUidBase32OK(string $uid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uid}', [], ['uid' => Requirement::UID_BASE32]))->compile()->getRegex(), + '/'.$uid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["01G0P4XH09KW3RCF7G4Q57ESN"] + * ["01G0P4XH09KW3RCF7G4Q57ESNU"] + */ + public function testUidBase32KO(string $uid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uid}', [], ['uid' => Requirement::UID_BASE32]))->compile()->getRegex(), + '/'.$uid, + ); + } + + /** + * @testWith ["1111111111111111111111"] + * ["zzzzzzzzzzzzzzzzzzzzzz"] + * ["1BkPBX6T19U8TUAjBTtgwH"] + * ["1fg491dt8eQpf2TU42o2bY"] + */ + public function testUidBase58OK(string $uid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uid}', [], ['uid' => Requirement::UID_BASE58]))->compile()->getRegex(), + '/'.$uid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["1BkPBX6T19U8TUAjBTtgw"] + * ["1BkPBX6T19U8TUAjBTtgwI"] + */ + public function testUidBase58KO(string $uid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uid}', [], ['uid' => Requirement::UID_BASE58]))->compile()->getRegex(), + '/'.$uid, + ); + } + + /** + * @testWith ["00000000-0000-0000-0000-000000000000"] + * ["ffffffff-ffff-ffff-ffff-ffffffffffff"] + * ["01802c4e-c409-9f07-863c-f025ca7766a0"] + * ["056654ca-0699-4e16-9895-e60afca090d7"] + */ + public function testUidRfc4122OK(string $uid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uid}', [], ['uid' => Requirement::UID_RFC4122]))->compile()->getRegex(), + '/'.$uid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["01802c4e-c409-9f07-863c-f025ca7766a"] + * ["01802c4e-c409-9f07-863c-f025ca7766ag"] + * ["01802c4ec4099f07863cf025ca7766a0"] + */ + public function testUidRfc4122KO(string $uid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uid}', [], ['uid' => Requirement::UID_RFC4122]))->compile()->getRegex(), + '/'.$uid, + ); + } + + /** + * @testWith ["00000000000000000000000000"] + * ["7ZZZZZZZZZZZZZZZZZZZZZZZZZ"] + * ["01G0P4ZPM69QTD4MM4ENAEA4EW"] + */ + public function testUlidOK(string $ulid) + { + $this->assertMatchesRegularExpression( + (new Route('/{ulid}', [], ['ulid' => Requirement::ULID]))->compile()->getRegex(), + '/'.$ulid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["8ZZZZZZZZZZZZZZZZZZZZZZZZZ"] + * ["01G0P4ZPM69QTD4MM4ENAEA4E"] + */ + public function testUlidKO(string $ulid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{ulid}', [], ['ulid' => Requirement::ULID]))->compile()->getRegex(), + '/'.$ulid, + ); + } + + /** + * @testWith ["00000000-0000-1000-8000-000000000000"] + * ["ffffffff-ffff-6fff-bfff-ffffffffffff"] + * ["8c670a1c-bc95-11ec-8422-0242ac120002"] + * ["61c86569-e477-3ed9-9e3b-1562edb03277"] + * ["e55a29be-ba25-46e0-a5e5-85b78a6f9a11"] + * ["bad98960-f1a1-530e-9a82-07d0b6c4e62f"] + * ["1ecbc9a8-432d-6b14-af93-715adc3b830c"] + */ + public function testUuidOK(string $uuid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["01802c74-d78c-b085-0cdf-7cbad87c70a3"] + * ["e55a29be-ba25-46e0-a5e5-85b78a6f9a1"] + * ["e55a29bh-ba25-46e0-a5e5-85b78a6f9a11"] + * ["e55a29beba2546e0a5e585b78a6f9a11"] + */ + public function testUuidKO(string $uuid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith ["00000000-0000-1000-8000-000000000000"] + * ["ffffffff-ffff-1fff-bfff-ffffffffffff"] + * ["21902510-bc96-11ec-8422-0242ac120002"] + * ["a8ff8f60-088e-1099-a09d-53afc49918d1"] + * ["b0ac612c-9117-17a1-901f-53afc49918d1"] + */ + public function testUuidV1OK(string $uuid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V1]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["a3674b89-0170-3e30-8689-52939013e39c"] + * ["e0040090-3cb0-4bf9-a868-407770c964f9"] + * ["2e2b41d9-e08c-53d2-b435-818b9c323942"] + * ["2a37b67a-5eaa-6424-b5d6-ffc9ba0f2a13"] + */ + public function testUuidV1KO(string $uuid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V1]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith ["00000000-0000-3000-8000-000000000000"] + * ["ffffffff-ffff-3fff-bfff-ffffffffffff"] + * ["2b3f1427-33b2-30a9-8759-07355007c204"] + * ["c38e7b09-07f7-3901-843d-970b0186b873"] + */ + public function testUuidV3OK(string $uuid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V3]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["e24d9c0e-bc98-11ec-9924-53afc49918d1"] + * ["1c240248-7d0b-41a4-9d20-61ad2915a58c"] + * ["4816b668-385b-5a65-808d-bca410f45090"] + * ["1d2f3104-dff6-64c6-92ff-0f74b1d0e2af"] + */ + public function testUuidV3KO(string $uuid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V3]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith ["00000000-0000-4000-8000-000000000000"] + * ["ffffffff-ffff-4fff-bfff-ffffffffffff"] + * ["b8f15bf4-46e2-4757-bbce-11ae83f7a6ea"] + * ["eaf51230-1ce2-40f1-ab18-649212b26198"] + */ + public function testUuidV4OK(string $uuid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V4]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["15baaab2-f310-11d2-9ecf-53afc49918d1"] + * ["acd44dc8-d2cc-326c-9e3a-80a3305a25e8"] + * ["7fc2705f-a8a4-5b31-99a8-890686d64189"] + * ["1ecbc991-3552-6920-998e-efad54178a98"] + */ + public function testUuidV4KO(string $uuid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V4]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith ["00000000-0000-5000-8000-000000000000"] + * ["ffffffff-ffff-5fff-bfff-ffffffffffff"] + * ["49f4d32c-28b3-5802-8717-a2896180efbd"] + * ["58b3c62e-a7df-5a82-93a6-fbe5fda681c1"] + */ + public function testUuidV5OK(string $uuid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V5]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["b99ad578-fdd3-1135-9d3b-53afc49918d1"] + * ["b3ee3071-7a2b-3e17-afdf-6b6aec3acf85"] + * ["2ab4f5a7-6412-46c1-b3ab-1fe1ed391e27"] + * ["135fdd3d-e193-653e-865d-67e88cf12e44"] + */ + public function testUuidV5KO(string $uuid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V5]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith ["00000000-0000-6000-8000-000000000000"] + * ["ffffffff-ffff-6fff-bfff-ffffffffffff"] + * ["2c51caad-c72f-66b2-b6d7-8766d36c73df"] + * ["17941ebb-48fa-6bfe-9bbd-43929f8784f5"] + * ["1ecbc993-f6c2-67f2-8fbe-295ed594b344"] + */ + public function testUuidV6OK(string $uuid) + { + $this->assertMatchesRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V6]))->compile()->getRegex(), + '/'.$uuid, + ); + } + + /** + * @testWith [""] + * ["foo"] + * ["821040f4-7b67-12a3-9770-53afc49918d1"] + * ["802dc245-aaaa-3649-98c6-31c549b0df86"] + * ["92d2e5ad-bc4e-4947-a8d9-77706172ca83"] + * ["6e124559-d260-511e-afdc-e57c7025fed0"] + */ + public function testUuidV6KO(string $uuid) + { + $this->assertDoesNotMatchRegularExpression( + (new Route('/{uuid}', [], ['uuid' => Requirement::UUID_V6]))->compile()->getRegex(), + '/'.$uuid, + ); + } +} diff --git a/src/Symfony/Component/Security/Http/Authenticator/Passport/Badge/UserBadge.php b/src/Symfony/Component/Security/Http/Authenticator/Passport/Badge/UserBadge.php index f2b98f82c75e9..abbf267d531c2 100644 --- a/src/Symfony/Component/Security/Http/Authenticator/Passport/Badge/UserBadge.php +++ b/src/Symfony/Component/Security/Http/Authenticator/Passport/Badge/UserBadge.php @@ -61,29 +61,29 @@ public function getUserIdentifier(): string */ public function getUser(): UserInterface { - if (!isset($this->user)) { - if (null === $this->userLoader) { - throw new \LogicException(sprintf('No user loader is configured, did you forget to register the "%s" listener?', UserProviderListener::class)); - } + if (isset($this->user)) { + return $this->user; + } - $user = ($this->userLoader)($this->userIdentifier); + if (null === $this->userLoader) { + throw new \LogicException(sprintf('No user loader is configured, did you forget to register the "%s" listener?', UserProviderListener::class)); + } - // No user has been found via the $this->userLoader callback - if (null === $user) { - $exception = new UserNotFoundException(); - $exception->setUserIdentifier($this->userIdentifier); + $user = ($this->userLoader)($this->userIdentifier); - throw $exception; - } + // No user has been found via the $this->userLoader callback + if (null === $user) { + $exception = new UserNotFoundException(); + $exception->setUserIdentifier($this->userIdentifier); - if (!$user instanceof UserInterface) { - throw new AuthenticationServiceException(sprintf('The user provider must return a UserInterface object, "%s" given.', get_debug_type($this->user))); - } + throw $exception; + } - $this->user = $user; + if (!$user instanceof UserInterface) { + throw new AuthenticationServiceException(sprintf('The user provider must return a UserInterface object, "%s" given.', get_debug_type($user))); } - return $this->user; + return $this->user = $user; } public function getUserLoader(): ?callable diff --git a/src/Symfony/Component/Security/Http/Tests/Authenticator/Passport/Badge/UserBadgeTest.php b/src/Symfony/Component/Security/Http/Tests/Authenticator/Passport/Badge/UserBadgeTest.php new file mode 100644 index 0000000000000..d8e4c4cbdd295 --- /dev/null +++ b/src/Symfony/Component/Security/Http/Tests/Authenticator/Passport/Badge/UserBadgeTest.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Http\Tests\Authenticator\Passport\Badge; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Security\Core\Exception\UserNotFoundException; +use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; + +class UserBadgeTest extends TestCase +{ + public function testUserNotFound() + { + $badge = new UserBadge('dummy', function () { return null; }); + $this->expectException(UserNotFoundException::class); + $badge->getUser(); + } +} diff --git a/src/Symfony/Component/Serializer/CHANGELOG.md b/src/Symfony/Component/Serializer/CHANGELOG.md index 9bee69dbd4fbb..c2b3ebfb3c6c2 100644 --- a/src/Symfony/Component/Serializer/CHANGELOG.md +++ b/src/Symfony/Component/Serializer/CHANGELOG.md @@ -13,6 +13,7 @@ CHANGELOG * Deprecate `ContextAwareDecoderInterface`, use `DecoderInterface` instead * Deprecate supporting denormalization for `AbstractUid` in `UidNormalizer`, use one of `AbstractUid` child class instead * Deprecate denormalizing to an abstract class in `UidNormalizer` + * Add support for `can*()` methods to `ObjectNormalizer` 6.0 --- diff --git a/src/Symfony/Component/Serializer/Context/ContextBuilderInterface.php b/src/Symfony/Component/Serializer/Context/ContextBuilderInterface.php new file mode 100644 index 0000000000000..4366d07bcb723 --- /dev/null +++ b/src/Symfony/Component/Serializer/Context/ContextBuilderInterface.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Context; + +/** + * Common interface for context builders. + * + * @author Mathias Arlaud + * @author Robin Chalas + */ +interface ContextBuilderInterface +{ + /** + * @param self|array $context + */ + public function withContext(self|array $context): static; + + /** + * @return array + */ + public function toArray(): array; +} diff --git a/src/Symfony/Component/Serializer/Context/ContextBuilderTrait.php b/src/Symfony/Component/Serializer/Context/ContextBuilderTrait.php index 97907d7b5b538..d7ce5becfd41a 100644 --- a/src/Symfony/Component/Serializer/Context/ContextBuilderTrait.php +++ b/src/Symfony/Component/Serializer/Context/ContextBuilderTrait.php @@ -30,10 +30,14 @@ protected function with(string $key, mixed $value): static } /** - * @param array $context + * @param ContextBuilderInterface|array $context */ - public function withContext(array $context): static + public function withContext(ContextBuilderInterface|array $context): static { + if ($context instanceof ContextBuilderInterface) { + $context = $context->toArray(); + } + $instance = new static(); $instance->context = array_merge($this->context, $context); diff --git a/src/Symfony/Component/Serializer/Context/Encoder/CsvEncoderContextBuilder.php b/src/Symfony/Component/Serializer/Context/Encoder/CsvEncoderContextBuilder.php index 8a7bedc0476f2..0b08bcc1a5cfd 100644 --- a/src/Symfony/Component/Serializer/Context/Encoder/CsvEncoderContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Encoder/CsvEncoderContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Encoder; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Encoder\CsvEncoder; use Symfony\Component\Serializer\Exception\InvalidArgumentException; @@ -20,7 +21,7 @@ * * @author Mathias Arlaud */ -final class CsvEncoderContextBuilder +final class CsvEncoderContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Encoder/JsonEncoderContextBuilder.php b/src/Symfony/Component/Serializer/Context/Encoder/JsonEncoderContextBuilder.php index dfb43ac0978a6..0ebd7026984e3 100644 --- a/src/Symfony/Component/Serializer/Context/Encoder/JsonEncoderContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Encoder/JsonEncoderContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Encoder; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Encoder\JsonDecode; use Symfony\Component\Serializer\Encoder\JsonEncode; @@ -20,7 +21,7 @@ * * @author Mathias Arlaud */ -final class JsonEncoderContextBuilder +final class JsonEncoderContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Encoder/XmlEncoderContextBuilder.php b/src/Symfony/Component/Serializer/Context/Encoder/XmlEncoderContextBuilder.php index d8273a722903d..3f8e92f4e21c9 100644 --- a/src/Symfony/Component/Serializer/Context/Encoder/XmlEncoderContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Encoder/XmlEncoderContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Encoder; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Encoder\XmlEncoder; @@ -19,7 +20,7 @@ * * @author Mathias Arlaud */ -final class XmlEncoderContextBuilder +final class XmlEncoderContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Encoder/YamlEncoderContextBuilder.php b/src/Symfony/Component/Serializer/Context/Encoder/YamlEncoderContextBuilder.php index aa8e554b7bcd6..81f6ad90d8529 100644 --- a/src/Symfony/Component/Serializer/Context/Encoder/YamlEncoderContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Encoder/YamlEncoderContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Encoder; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Encoder\YamlEncoder; @@ -19,7 +20,7 @@ * * @author Mathias Arlaud */ -final class YamlEncoderContextBuilder +final class YamlEncoderContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/AbstractNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/AbstractNormalizerContextBuilder.php index 4d65948a8c105..f494f060ac005 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/AbstractNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/AbstractNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; @@ -20,7 +21,7 @@ * * @author Mathias Arlaud */ -abstract class AbstractNormalizerContextBuilder +abstract class AbstractNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/ConstraintViolationListNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/ConstraintViolationListNormalizerContextBuilder.php index 41dec70d455cd..fd1d7c4f5dee7 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/ConstraintViolationListNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/ConstraintViolationListNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer; @@ -19,7 +20,7 @@ * * @author Mathias Arlaud */ -final class ConstraintViolationListNormalizerContextBuilder +final class ConstraintViolationListNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/DateIntervalNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/DateIntervalNormalizerContextBuilder.php index 4f5558be57362..98636577a6aa9 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/DateIntervalNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/DateIntervalNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer; @@ -19,7 +20,7 @@ * * @author Mathias Arlaud */ -final class DateIntervalNormalizerContextBuilder +final class DateIntervalNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/DateTimeNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/DateTimeNormalizerContextBuilder.php index 8e51bf41973d4..99517afb1d8d4 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/DateTimeNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/DateTimeNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer; @@ -20,7 +21,7 @@ * * @author Mathias Arlaud */ -final class DateTimeNormalizerContextBuilder +final class DateTimeNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/FormErrorNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/FormErrorNormalizerContextBuilder.php index deaf5c2a87cf1..4cd2ddb884494 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/FormErrorNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/FormErrorNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Normalizer\FormErrorNormalizer; @@ -19,7 +20,7 @@ * * @author Mathias Arlaud */ -final class FormErrorNormalizerContextBuilder +final class FormErrorNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/ProblemNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/ProblemNormalizerContextBuilder.php index ab448f36181a9..b525a91adae7b 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/ProblemNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/ProblemNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Normalizer\ProblemNormalizer; @@ -19,7 +20,7 @@ * * @author Mathias Arlaud */ -final class ProblemNormalizerContextBuilder +final class ProblemNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/UidNormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/UidNormalizerContextBuilder.php index c7386d047690a..1d889e502526d 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/UidNormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/UidNormalizerContextBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Serializer\Context\Normalizer; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Normalizer\UidNormalizer; @@ -20,7 +21,7 @@ * * @author Mathias Arlaud */ -final class UidNormalizerContextBuilder +final class UidNormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/Normalizer/UnwrappingDenormalizerContextBuilder.php b/src/Symfony/Component/Serializer/Context/Normalizer/UnwrappingDenormalizerContextBuilder.php index c09e6df04ea60..f06f6ac77ba5a 100644 --- a/src/Symfony/Component/Serializer/Context/Normalizer/UnwrappingDenormalizerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/Normalizer/UnwrappingDenormalizerContextBuilder.php @@ -13,6 +13,7 @@ use Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException; use Symfony\Component\PropertyAccess\PropertyPath; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer; @@ -22,7 +23,7 @@ * * @author Mathias Arlaud */ -final class UnwrappingDenormalizerContextBuilder +final class UnwrappingDenormalizerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Context/SerializerContextBuilder.php b/src/Symfony/Component/Serializer/Context/SerializerContextBuilder.php index 48ea999ecdc88..a6359be98f6db 100644 --- a/src/Symfony/Component/Serializer/Context/SerializerContextBuilder.php +++ b/src/Symfony/Component/Serializer/Context/SerializerContextBuilder.php @@ -19,7 +19,7 @@ * * @author Mathias Arlaud */ -final class SerializerContextBuilder +final class SerializerContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait; diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index 0dbc8bc3e7f92..263959c1d6e79 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -86,8 +86,8 @@ protected function extractAttributes(object $object, string $format = null, arra $name = $reflMethod->name; $attributeName = null; - if (str_starts_with($name, 'get') || str_starts_with($name, 'has')) { - // getters and hassers + if (str_starts_with($name, 'get') || str_starts_with($name, 'has') || str_starts_with($name, 'can')) { + // getters, hassers and canners $attributeName = substr($name, 3); if (!$reflClass->hasProperty($attributeName)) { diff --git a/src/Symfony/Component/Serializer/Tests/Context/ContextBuilderTraitTest.php b/src/Symfony/Component/Serializer/Tests/Context/ContextBuilderTraitTest.php index 4c25e17c0c7a4..17ad231a032a2 100644 --- a/src/Symfony/Component/Serializer/Tests/Context/ContextBuilderTraitTest.php +++ b/src/Symfony/Component/Serializer/Tests/Context/ContextBuilderTraitTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Serializer\Tests\Context; use PHPUnit\Framework\TestCase; +use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait; /** @@ -21,13 +22,17 @@ class ContextBuilderTraitTest extends TestCase { public function testWithContext() { - $contextBuilder = new class() { + $contextBuilder = new class() implements ContextBuilderInterface { use ContextBuilderTrait; }; $context = $contextBuilder->withContext(['foo' => 'bar'])->toArray(); $this->assertSame(['foo' => 'bar'], $context); + + $withContextBuilderObject = $contextBuilder->withContext($contextBuilder->withContext(['foo' => 'bar']))->toArray(); + + $this->assertSame(['foo' => 'bar'], $withContextBuilderObject); } public function testWith() diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/ObjectDummy.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/ObjectDummy.php index 69661fd1601c1..39f3c354a8024 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/ObjectDummy.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/ObjectDummy.php @@ -22,6 +22,7 @@ class ObjectDummy private $baz; protected $camelCase; protected $object; + private $go; public function getFoo() { @@ -72,4 +73,14 @@ public function getObject() { return $this->object; } + + public function setGo($go) + { + $this->go = $go; + } + + public function canGo() + { + return $this->go; + } } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 244bf94987d44..f7b5dc88d4108 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -107,6 +107,7 @@ public function testNormalize() $obj->setBaz(true); $obj->setCamelCase('camelcase'); $obj->setObject($object); + $obj->setGo(true); $this->serializer ->expects($this->once()) @@ -123,6 +124,7 @@ public function testNormalize() 'fooBar' => 'foobar', 'camelCase' => 'camelcase', 'object' => 'string_object', + 'go' => true, ], $this->normalizer->normalize($obj, 'any') ); @@ -669,6 +671,7 @@ public function testNormalizeNotSerializableContext() 'camelCase' => null, 'object' => null, 'bar' => null, + 'go' => null, ]; $this->assertEquals($expected, $this->normalizer->normalize($objectDummy, null, ['not_serializable' => function () { @@ -805,6 +808,7 @@ public function testDefaultObjectClassResolver() $obj->setBaz(true); $obj->setCamelCase('camelcase'); $obj->unwantedProperty = 'notwanted'; + $obj->setGo(false); $this->assertEquals( [ @@ -814,6 +818,7 @@ public function testDefaultObjectClassResolver() 'fooBar' => 'foobar', 'camelCase' => 'camelcase', 'object' => null, + 'go' => false, ], $normalizer->normalize($obj, 'any') ); @@ -842,6 +847,7 @@ public function testObjectClassResolver() 'fooBar' => 'foobar', 'camelCase' => 'camelcase', 'object' => null, + 'go' => null, ], $normalizer->normalize($obj, 'any') ); diff --git a/src/Symfony/Component/String/AbstractUnicodeString.php b/src/Symfony/Component/String/AbstractUnicodeString.php index 3f5e21ff279be..b2906e2de4cc3 100644 --- a/src/Symfony/Component/String/AbstractUnicodeString.php +++ b/src/Symfony/Component/String/AbstractUnicodeString.php @@ -478,7 +478,7 @@ public function width(bool $ignoreAnsiDecoration = true): int foreach (explode("\n", $s) as $s) { if ($ignoreAnsiDecoration) { $s = preg_replace('/(?:\x1B(?: - \[ [\x30-\x3F]*+ [\x20-\x2F]*+ [0x40-\x7E] + \[ [\x30-\x3F]*+ [\x20-\x2F]*+ [\x40-\x7E] | [P\]X^_] .*? \x1B\\\\ | [\x41-\x7E] )|[\p{Cc}\x7F]++)/xu', '', $s); diff --git a/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php b/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php index c002fc7532b1f..d60c2d2f5e7a4 100644 --- a/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php +++ b/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php @@ -602,10 +602,6 @@ public function testPullMessagesMultipleDomains() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $application = new Application(); $application->add($this->createCommand($this->createMock(ProviderInterface::class), ['en', 'fr', 'it'], ['messages', 'validators'], 'en', ['loco', 'crowdin', 'lokalise'])); diff --git a/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php b/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php index 9fcd0d77b183b..920fd361d3535 100644 --- a/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php +++ b/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php @@ -328,10 +328,6 @@ public function testPushWithProviderDomains() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $application = new Application(); $application->add($this->createCommand($this->createMock(ProviderInterface::class), ['en', 'fr', 'it'], ['messages', 'validators'], ['loco', 'crowdin', 'lokalise'])); diff --git a/src/Symfony/Component/Translation/Tests/DataCollector/TranslationDataCollectorTest.php b/src/Symfony/Component/Translation/Tests/DataCollector/TranslationDataCollectorTest.php index 39e74fac96d90..8992569b01d81 100644 --- a/src/Symfony/Component/Translation/Tests/DataCollector/TranslationDataCollectorTest.php +++ b/src/Symfony/Component/Translation/Tests/DataCollector/TranslationDataCollectorTest.php @@ -12,19 +12,11 @@ namespace Symfony\Component\Translation\Tests\DataCollector; use PHPUnit\Framework\TestCase; -use Symfony\Component\HttpKernel\DataCollector\DataCollector; use Symfony\Component\Translation\DataCollector\TranslationDataCollector; use Symfony\Component\Translation\DataCollectorTranslator; class TranslationDataCollectorTest extends TestCase { - protected function setUp(): void - { - if (!class_exists(DataCollector::class)) { - $this->markTestSkipped('The "DataCollector" is not available'); - } - } - public function testCollectEmptyMessages() { $translator = $this->getTranslator(); diff --git a/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php b/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php index b46a8930c30c0..9f5ed50677088 100644 --- a/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php +++ b/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php @@ -116,12 +116,12 @@ public function testEncoding() $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/encoding.xlf', 'en', 'domain1'); - $this->assertEquals(utf8_decode('föö'), $catalogue->get('bar', 'domain1')); - $this->assertEquals(utf8_decode('bär'), $catalogue->get('foo', 'domain1')); + $this->assertEquals(mb_convert_encoding('föö', 'ISO-8859-1', 'UTF-8'), $catalogue->get('bar', 'domain1')); + $this->assertEquals(mb_convert_encoding('bär', 'ISO-8859-1', 'UTF-8'), $catalogue->get('foo', 'domain1')); $this->assertEquals( [ 'source' => 'foo', - 'notes' => [['content' => utf8_decode('bäz')]], + 'notes' => [['content' => mb_convert_encoding('bäz', 'ISO-8859-1', 'UTF-8')]], 'id' => '1', 'file' => [ 'original' => 'file.ext', diff --git a/src/Symfony/Component/Uid/Tests/Command/GenerateUlidCommandTest.php b/src/Symfony/Component/Uid/Tests/Command/GenerateUlidCommandTest.php index 48814de9c72fb..c304915ad73b0 100644 --- a/src/Symfony/Component/Uid/Tests/Command/GenerateUlidCommandTest.php +++ b/src/Symfony/Component/Uid/Tests/Command/GenerateUlidCommandTest.php @@ -108,10 +108,6 @@ public function testUlidsAreDifferentWhenGeneratingSeveralNow() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $application = new Application(); $application->add(new GenerateUlidCommand()); $tester = new CommandCompletionTester($application->get('ulid:generate')); diff --git a/src/Symfony/Component/Uid/Tests/Command/GenerateUuidCommandTest.php b/src/Symfony/Component/Uid/Tests/Command/GenerateUuidCommandTest.php index 65b9f87f7063a..d95d2c4e0dba5 100644 --- a/src/Symfony/Component/Uid/Tests/Command/GenerateUuidCommandTest.php +++ b/src/Symfony/Component/Uid/Tests/Command/GenerateUuidCommandTest.php @@ -237,10 +237,6 @@ public function testNamespacePredefinedKeyword() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $application = new Application(); $application->add(new GenerateUuidCommand()); $tester = new CommandCompletionTester($application->get('uuid:generate')); diff --git a/src/Symfony/Component/VarDumper/Caster/DOMCaster.php b/src/Symfony/Component/VarDumper/Caster/DOMCaster.php index 4dd16e0ee7461..8b770b8ae3874 100644 --- a/src/Symfony/Component/VarDumper/Caster/DOMCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/DOMCaster.php @@ -208,43 +208,6 @@ public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNes return $a; } - public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, bool $isNested) - { - $a += [ - 'typeName' => $dom->typeName, - 'typeNamespace' => $dom->typeNamespace, - ]; - - return $a; - } - - public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, bool $isNested) - { - $a += [ - 'severity' => $dom->severity, - 'message' => $dom->message, - 'type' => $dom->type, - 'relatedException' => $dom->relatedException, - 'related_data' => $dom->related_data, - 'location' => $dom->location, - ]; - - return $a; - } - - public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, bool $isNested) - { - $a += [ - 'lineNumber' => $dom->lineNumber, - 'columnNumber' => $dom->columnNumber, - 'offset' => $dom->offset, - 'relatedNode' => $dom->relatedNode, - 'uri' => $dom->uri ? new LinkStub($dom->uri, $dom->lineNumber) : $dom->uri, - ]; - - return $a; - } - public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, bool $isNested) { $a += [ diff --git a/src/Symfony/Component/VarDumper/Caster/ResourceCaster.php b/src/Symfony/Component/VarDumper/Caster/ResourceCaster.php index 4e597f86d492a..f1229446597d5 100644 --- a/src/Symfony/Component/VarDumper/Caster/ResourceCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/ResourceCaster.php @@ -63,15 +63,6 @@ public static function castGd($gd, array $a, Stub $stub, bool $isNested) return $a; } - public static function castMysqlLink($h, array $a, Stub $stub, bool $isNested) - { - $a['host'] = mysql_get_host_info($h); - $a['protocol'] = mysql_get_proto_info($h); - $a['server'] = mysql_get_server_info($h); - - return $a; - } - public static function castOpensslX509($h, array $a, Stub $stub, bool $isNested) { $stub->cut = -1; diff --git a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php index b835c0336896a..636c39ee2b711 100644 --- a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php +++ b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php @@ -66,9 +66,6 @@ abstract class AbstractCloner implements ClonerInterface 'DOMAttr' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castAttr'], 'DOMElement' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castElement'], 'DOMText' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castText'], - 'DOMTypeinfo' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castTypeinfo'], - 'DOMDomError' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDomError'], - 'DOMLocator' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLocator'], 'DOMDocumentType' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocumentType'], 'DOMNotation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNotation'], 'DOMEntity' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castEntity'], @@ -163,7 +160,6 @@ abstract class AbstractCloner implements ClonerInterface 'GdImage' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castGd'], ':gd' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castGd'], - ':mysql link' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castMysqlLink'], ':pgsql large object' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castLargeObject'], ':pgsql link' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castLink'], ':pgsql link persistent' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castLink'], diff --git a/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php b/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php index ccc819cdecec6..8fe08b22d0876 100644 --- a/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php @@ -31,7 +31,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface protected $line = ''; protected $lineDumper; protected $outputStream; - protected $decimalPoint; // This is locale dependent + protected $decimalPoint = '.'; protected $indentPad = ' '; protected $flags; @@ -46,8 +46,6 @@ public function __construct($output = null, string $charset = null, int $flags = { $this->flags = $flags; $this->setCharset($charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8'); - $this->decimalPoint = localeconv(); - $this->decimalPoint = $this->decimalPoint['decimal_point']; $this->setOutput($output ?: static::$defaultOutput); if (!$output && \is_string(static::$defaultOutput)) { static::$defaultOutput = $this->outputStream; @@ -120,9 +118,6 @@ public function setIndentPad(string $pad): string */ public function dump(Data $data, $output = null): ?string { - $this->decimalPoint = localeconv(); - $this->decimalPoint = $this->decimalPoint['decimal_point']; - if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(\LC_NUMERIC, 0) : null) { setlocale(\LC_NUMERIC, 'C'); } diff --git a/src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php b/src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php index 0befaa45d4e07..32968ea81c426 100644 --- a/src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php @@ -369,7 +369,7 @@ function xpathHasClass(className) { if (/\bsf-dump-toggle\b/.test(a.className)) { e.preventDefault(); if (!toggle(a, isCtrlKey(e))) { - var r = doc.getElementById(a.getAttribute('href').substr(1)), + var r = doc.getElementById(a.getAttribute('href').slice(1)), s = r.previousSibling, f = r.parentNode, t = a.parentNode; @@ -430,7 +430,7 @@ function xpathHasClass(className) { x += elt.parentNode.getAttribute('data-depth')/1; } } else if (/\bsf-dump-ref\b/.test(elt.className) && (a = elt.getAttribute('href'))) { - a = a.substr(1); + a = a.slice(1); elt.className += ' '+a; if (/[\[{]$/.test(elt.previousSibling.nodeValue)) { diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/ExceptionCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/ExceptionCasterTest.php index 915588c0009e5..895cd57fe5829 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/ExceptionCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/ExceptionCasterTest.php @@ -184,9 +184,6 @@ public function testHtmlDump() $this->assertStringMatchesFormat($expectedDump, $dump); } - /** - * @requires function Twig\Template::getSourceContext - */ public function testFrameWithTwig() { require_once \dirname(__DIR__).'/Fixtures/Twig.php'; diff --git a/src/Symfony/Component/VarDumper/Tests/Command/ServerDumpCommandTest.php b/src/Symfony/Component/VarDumper/Tests/Command/ServerDumpCommandTest.php index fe1a9b05d3da9..664a520dc167c 100644 --- a/src/Symfony/Component/VarDumper/Tests/Command/ServerDumpCommandTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Command/ServerDumpCommandTest.php @@ -23,10 +23,6 @@ class ServerDumpCommandTest extends TestCase */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $tester = new CommandCompletionTester($this->createCommand()); $this->assertSame($expectedSuggestions, $tester->complete($input)); diff --git a/src/Symfony/Component/VarDumper/Tests/Dumper/CliDumperTest.php b/src/Symfony/Component/VarDumper/Tests/Dumper/CliDumperTest.php index 74dbbe72a6f36..b4780cfe92b9c 100644 --- a/src/Symfony/Component/VarDumper/Tests/Dumper/CliDumperTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Dumper/CliDumperTest.php @@ -293,9 +293,6 @@ public function testFlags() putenv('DUMP_STRING_LENGTH='); } - /** - * @requires function Twig\Template::getSourceContext - */ public function testThrowingCaster() { $out = fopen('php://memory', 'r+'); diff --git a/src/Symfony/Component/VarExporter/Internal/Exporter.php b/src/Symfony/Component/VarExporter/Internal/Exporter.php index 66543344ee37e..d59f0ccb3a59e 100644 --- a/src/Symfony/Component/VarExporter/Internal/Exporter.php +++ b/src/Symfony/Component/VarExporter/Internal/Exporter.php @@ -193,12 +193,13 @@ public static function prepare($values, $objectsPool, &$refsPool, &$objectsCount public static function export($value, string $indent = '') { switch (true) { - case \is_int($value) || \is_float($value) || $value instanceof \UnitEnum: return var_export($value, true); + case \is_int($value) || \is_float($value): return var_export($value, true); case [] === $value: return '[]'; case false === $value: return 'false'; case true === $value: return 'true'; case null === $value: return 'null'; case '' === $value: return "''"; + case $value instanceof \UnitEnum: return ltrim(var_export($value, true), '\\'); } if ($value instanceof Reference) { diff --git a/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php b/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php index 0bea476e10d6f..4691e119cf9e0 100644 --- a/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php +++ b/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php @@ -87,9 +87,6 @@ public function testGetMarkingWithValueObject() $this->assertSame('first_place', (string) $subject->getMarking()); } - /** - * @requires PHP 7.4 - */ public function testGetMarkingWithUninitializedProperty() { $subject = new SubjectWithType(); @@ -102,9 +99,6 @@ public function testGetMarkingWithUninitializedProperty() $this->assertCount(0, $marking->getPlaces()); } - /** - * @requires PHP 7.4 - */ public function testGetMarkingWithUninitializedProperty2() { $subject = new SubjectWithType(); diff --git a/src/Symfony/Component/Workflow/composer.json b/src/Symfony/Component/Workflow/composer.json index eaa9b4607b3f4..6b23eeb31370d 100644 --- a/src/Symfony/Component/Workflow/composer.json +++ b/src/Symfony/Component/Workflow/composer.json @@ -34,7 +34,10 @@ "symfony/event-dispatcher": "<5.4" }, "autoload": { - "psr-4": { "Symfony\\Component\\Workflow\\": "" } + "psr-4": { "Symfony\\Component\\Workflow\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Yaml/Tests/Command/LintCommandTest.php b/src/Symfony/Component/Yaml/Tests/Command/LintCommandTest.php index 90e20455ff0ed..d160f7b52f3cd 100644 --- a/src/Symfony/Component/Yaml/Tests/Command/LintCommandTest.php +++ b/src/Symfony/Component/Yaml/Tests/Command/LintCommandTest.php @@ -92,10 +92,6 @@ public function testLintIncorrectFileWithGithubFormat() public function testLintAutodetectsGithubActionEnvironment() { - if (!class_exists(GithubActionReporter::class)) { - $this->markTestSkipped('The "github" format is only available since "symfony/console" >= 5.3.'); - } - $prev = getenv('GITHUB_ACTIONS'); putenv('GITHUB_ACTIONS'); @@ -170,10 +166,6 @@ public function testLintFileNotReadable() */ public function testComplete(array $input, array $expectedSuggestions) { - if (!class_exists(CommandCompletionTester::class)) { - $this->markTestSkipped('Test command completion requires symfony/console 5.4+.'); - } - $tester = new CommandCompletionTester($this->createCommand()); $this->assertSame($expectedSuggestions, $tester->complete($input)); diff --git a/src/Symfony/Contracts/HttpClient/composer.json b/src/Symfony/Contracts/HttpClient/composer.json index 4e877e5264f73..0a99ad5e72bf5 100644 --- a/src/Symfony/Contracts/HttpClient/composer.json +++ b/src/Symfony/Contracts/HttpClient/composer.json @@ -22,7 +22,10 @@ "symfony/http-client-implementation": "" }, "autoload": { - "psr-4": { "Symfony\\Contracts\\HttpClient\\": "" } + "psr-4": { "Symfony\\Contracts\\HttpClient\\": "" }, + "exclude-from-classmap": [ + "/Test/" + ] }, "minimum-stability": "dev", "extra": { diff --git a/src/Symfony/Contracts/Service/composer.json b/src/Symfony/Contracts/Service/composer.json index a4ff0861d5473..e7e4a64df08a4 100644 --- a/src/Symfony/Contracts/Service/composer.json +++ b/src/Symfony/Contracts/Service/composer.json @@ -26,7 +26,10 @@ "symfony/service-implementation": "" }, "autoload": { - "psr-4": { "Symfony\\Contracts\\Service\\": "" } + "psr-4": { "Symfony\\Contracts\\Service\\": "" }, + "exclude-from-classmap": [ + "/Test/" + ] }, "minimum-stability": "dev", "extra": { diff --git a/src/Symfony/Contracts/Translation/composer.json b/src/Symfony/Contracts/Translation/composer.json index d078be8cf7f5b..5240ed0f9d069 100644 --- a/src/Symfony/Contracts/Translation/composer.json +++ b/src/Symfony/Contracts/Translation/composer.json @@ -22,7 +22,10 @@ "symfony/translation-implementation": "" }, "autoload": { - "psr-4": { "Symfony\\Contracts\\Translation\\": "" } + "psr-4": { "Symfony\\Contracts\\Translation\\": "" }, + "exclude-from-classmap": [ + "/Test/" + ] }, "minimum-stability": "dev", "extra": {