From ac02d33721e61deb9cf9e2850d79a4350b34c30b Mon Sep 17 00:00:00 2001 From: HypeMC Date: Mon, 8 Jul 2024 21:49:37 +0200 Subject: [PATCH] [ExpressionLanguage] Allow passing any iterable as `$providers` list --- .../Component/ExpressionLanguage/CHANGELOG.md | 1 + .../ExpressionLanguage/ExpressionLanguage.php | 4 ++-- .../Tests/ExpressionLanguageTest.php | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/ExpressionLanguage/CHANGELOG.md b/src/Symfony/Component/ExpressionLanguage/CHANGELOG.md index 26090043fdba3..e32b66ca1a898 100644 --- a/src/Symfony/Component/ExpressionLanguage/CHANGELOG.md +++ b/src/Symfony/Component/ExpressionLanguage/CHANGELOG.md @@ -6,6 +6,7 @@ CHANGELOG * Add support for null-coalescing unknown variables * Add support for comments using `/*` & `*/` + * Allow passing any iterable as `$providers` list to `ExpressionLanguage` constructor 7.1 --- diff --git a/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php b/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php index 055bef216e85b..379d3863f114c 100644 --- a/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php +++ b/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php @@ -32,9 +32,9 @@ class ExpressionLanguage protected array $functions = []; /** - * @param ExpressionFunctionProviderInterface[] $providers + * @param iterable $providers */ - public function __construct(?CacheItemPoolInterface $cache = null, array $providers = []) + public function __construct(?CacheItemPoolInterface $cache = null, iterable $providers = []) { $this->cache = $cache ?? new ArrayAdapter(); $this->registerFunctions(); diff --git a/src/Symfony/Component/ExpressionLanguage/Tests/ExpressionLanguageTest.php b/src/Symfony/Component/ExpressionLanguage/Tests/ExpressionLanguageTest.php index 955c2385f59c9..e162822391b6d 100644 --- a/src/Symfony/Component/ExpressionLanguage/Tests/ExpressionLanguageTest.php +++ b/src/Symfony/Component/ExpressionLanguage/Tests/ExpressionLanguageTest.php @@ -137,9 +137,12 @@ public function testCompiledEnumFunctionWithBackedEnum() $this->assertSame(FooBackedEnum::Bar, $result); } - public function testProviders() + /** + * @dataProvider providerTestCases + */ + public function testProviders(iterable $providers) { - $expressionLanguage = new ExpressionLanguage(null, [new TestProvider()]); + $expressionLanguage = new ExpressionLanguage(null, $providers); $this->assertEquals('foo', $expressionLanguage->evaluate('identity("foo")')); $this->assertEquals('"foo"', $expressionLanguage->compile('identity("foo")')); $this->assertEquals('FOO', $expressionLanguage->evaluate('strtoupper("foo")')); @@ -150,6 +153,14 @@ public function testProviders() $this->assertEquals('\Symfony\Component\ExpressionLanguage\Tests\Fixtures\fn_namespaced()', $expressionLanguage->compile('fn_namespaced()')); } + public static function providerTestCases(): iterable + { + yield 'array' => [[new TestProvider()]]; + yield 'Traversable' => [(function () { + yield new TestProvider(); + })()]; + } + /** * @dataProvider shortCircuitProviderEvaluate */