‪TYPO3CMS  11.5
ResolverTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Prophecy\Argument;
21 use Prophecy\PhpUnit\ProphecyTrait;
22 use Symfony\Component\ExpressionLanguage\ExpressionFunction;
29 use TYPO3\CMS\Core\Package\PackageManager;
31 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
32 
36 class ‪ResolverTest extends UnitTestCase
37 {
38  use ProphecyTrait;
39 
40  public function ‪setUp(): void
41  {
42  parent::setUp();
43 
44  $cacheFrontendProphecy = $this->prophesize(PhpFrontend::class);
45  $cacheFrontendProphecy->require(Argument::any())->willReturn(false);
46  $cacheFrontendProphecy->set(Argument::any(), Argument::any())->willReturn(null);
47 
48  $packageManagerProphecy = $this->prophesize(PackageManager::class);
49  $corePackageProphecy = $this->prophesize(PackageInterface::class);
50  $corePackageProphecy->getPackagePath()->willReturn(__DIR__ . '/../../../../../../../sysext/core/');
51  $packageManagerProphecy->getActivePackages()->willReturn([
52  $corePackageProphecy->reveal(),
53  ]);
54 
55  GeneralUtility::addInstance(ProviderConfigurationLoader::class, new ‪ProviderConfigurationLoader(
56  $packageManagerProphecy->reveal(),
57  $cacheFrontendProphecy->reveal(),
58  'ExpressionLanguageProviders'
59  ));
60  }
61 
65  public function ‪basicExpressionsDataHandler(): array
66  {
67  return [
68  '1+1' => ['1+1', true],
69  '1 < 2' => ['1 < 2', true],
70  '2 < 1' => ['2 < 1', false],
71  'true' => ['true', true],
72  'false' => ['false', false],
73  'true != false' => ['true != false', true],
74  'true < false' => ['true < false', false],
75  ];
76  }
77 
84  public function ‪basicExpressionHandlingResultsWorksAsExpected(string $expression, $expectedResult): void
85  {
86  $expressionLanguageResolver = new Resolver('default', []);
87  self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression));
88  }
89 
93  public function ‪basicExpressionsWithVariablesDataHandler(): array
94  {
95  return [
96  'var1 + var2' => ['var1 + var2', true],
97  'var1 < var2' => ['var1 < var2', true],
98  'var2 < var1' => ['var2 < var1', false],
99  'varTrue' => ['varTrue', true],
100  'varFalse' => ['varFalse', false],
101  'varTrue != varFalse' => ['varTrue != varFalse', true],
102  'varTrue < varFalse' => ['varTrue < varFalse', false],
103  ];
104  }
105 
112  public function ‪basicExpressionHandlingWithCustomVariablesWorksAsExpected(string $expression, $expectedResult): void
113  {
114  $contextProphecy = $this->prophesize(DefaultProvider::class);
115  $contextProphecy->getExpressionLanguageProviders()->willReturn([]);
116  $contextProphecy->getExpressionLanguageVariables()->willReturn([
117  'var1' => '1',
118  'var2' => '2',
119  'varTrue' => true,
120  'varFalse' => false,
121  ]);
122  GeneralUtility::addInstance(DefaultProvider::class, $contextProphecy->reveal());
123  $expressionLanguageResolver = new Resolver('default', []);
124  self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression));
125  }
126 
131  {
132  return [
133  'testMeLowercase(var1) == var2' => ['testMeLowercase(var1) == var2', true],
134  'testMeLowercase(var2) == var1' => ['testMeLowercase(var2) == var1', false],
135  'testMeLowercase(var1) == var1' => ['testMeLowercase(var1) == var1', false],
136  'testMeLowercase(var2) == var2' => ['testMeLowercase(var2) == var2', true],
137  ];
138  }
139 
146  public function ‪basicExpressionHandlingWithCustomVariablesAndExpressionLanguageProviderWorksAsExpected(string $expression, $expectedResult): void
147  {
148  $expressionProvider = $this->prophesize(DefaultFunctionsProvider::class);
149  $expressionProvider->getFunctions()->willReturn([
150  new ExpressionFunction('testMeLowercase', static function ($str) {
151  return sprintf('(is_string(%1$s) ? strtolower(%1$s) : %1$s)', $str);
152  }, static function ($arguments, $str) {
153  return is_string($str) ? strtolower($str) : $str;
154  }),
155  ]);
156  $contextProphecy = $this->prophesize(DefaultProvider::class);
157  $contextProphecy->getExpressionLanguageProviders()->willReturn([DefaultFunctionsProvider::class]);
158  $contextProphecy->getExpressionLanguageVariables()->willReturn([
159  'var1' => 'FOO',
160  'var2' => 'foo',
161  ]);
162  GeneralUtility::addInstance(DefaultProvider::class, $contextProphecy->reveal());
163  GeneralUtility::addInstance(DefaultFunctionsProvider::class, $expressionProvider->reveal());
164  $expressionLanguageResolver = new Resolver('default', []);
165  self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression));
166  }
167 }
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest
Definition: ResolverTest.php:37
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\basicExpressionsWithVariablesDataHandler
‪array basicExpressionsWithVariablesDataHandler()
Definition: ResolverTest.php:92
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\setUp
‪setUp()
Definition: ResolverTest.php:39
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage
Definition: ResolverTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\basicExpressionsWithVariablesAndExpressionLanguageProviderDataHandler
‪array basicExpressionsWithVariablesAndExpressionLanguageProviderDataHandler()
Definition: ResolverTest.php:129
‪TYPO3\CMS\Core\Cache\Frontend\PhpFrontend
Definition: PhpFrontend.php:25
‪TYPO3\CMS\Core\ExpressionLanguage\DefaultProvider
Definition: DefaultProvider.php:27
‪TYPO3\CMS\Core\Package\PackageInterface
Definition: PackageInterface.php:22
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\basicExpressionHandlingWithCustomVariablesWorksAsExpected
‪basicExpressionHandlingWithCustomVariablesWorksAsExpected(string $expression, $expectedResult)
Definition: ResolverTest.php:111
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\basicExpressionsDataHandler
‪array basicExpressionsDataHandler()
Definition: ResolverTest.php:64
‪TYPO3\CMS\Core\ExpressionLanguage\FunctionsProvider\DefaultFunctionsProvider
Definition: DefaultFunctionsProvider.php:35
‪TYPO3\CMS\Core\ExpressionLanguage\ProviderConfigurationLoader
Definition: ProviderConfigurationLoader.php:29
‪TYPO3\CMS\Core\ExpressionLanguage\Resolver
Definition: Resolver.php:28
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\basicExpressionHandlingWithCustomVariablesAndExpressionLanguageProviderWorksAsExpected
‪basicExpressionHandlingWithCustomVariablesAndExpressionLanguageProviderWorksAsExpected(string $expression, $expectedResult)
Definition: ResolverTest.php:145
‪TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage\ResolverTest\basicExpressionHandlingResultsWorksAsExpected
‪basicExpressionHandlingResultsWorksAsExpected(string $expression, $expectedResult)
Definition: ResolverTest.php:83
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50