From c8c8b1f402f1d27ccf479758460c93b5b3900d4a Mon Sep 17 00:00:00 2001
From: Nikita Hovratov <nikita.h@live.de>
Date: Fri, 18 Nov 2022 16:49:31 +0100
Subject: [PATCH] [TASK] Replace prophecy in EXT:core ResolverTest

Resolves: #98760
Releases: main
Change-Id: Ib497b35c6201d2859cfb4865f641fa4b60d1fcc7
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/76696
Tested-by: core-ci <typo3@b13.com>
Tested-by: Oliver Klee <typo3-coding@oliverklee.de>
Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../Unit/ExpressionLanguage/ResolverTest.php  | 67 +++++++------------
 1 file changed, 23 insertions(+), 44 deletions(-)

diff --git a/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php b/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php
index 9f581f21cfed..203e6c516100 100644
--- a/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php
+++ b/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php
@@ -17,22 +17,17 @@ declare(strict_types=1);
 
 namespace TYPO3\CMS\Core\Tests\Unit\ExpressionLanguage;
 
-use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Symfony\Component\ExpressionLanguage\ExpressionFunction;
-use TYPO3\CMS\Core\Cache\Frontend\PhpFrontend;
+use TYPO3\CMS\Core\Cache\Frontend\NullFrontend;
 use TYPO3\CMS\Core\ExpressionLanguage\DefaultProvider;
 use TYPO3\CMS\Core\ExpressionLanguage\FunctionsProvider\DefaultFunctionsProvider;
 use TYPO3\CMS\Core\ExpressionLanguage\ProviderConfigurationLoader;
 use TYPO3\CMS\Core\ExpressionLanguage\Resolver;
-use TYPO3\CMS\Core\Package\PackageInterface;
-use TYPO3\CMS\Core\Package\PackageManager;
+use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
-/**
- * Class ResolverTest
- */
 class ResolverTest extends UnitTestCase
 {
     use ProphecyTrait;
@@ -40,28 +35,19 @@ class ResolverTest extends UnitTestCase
     public function setUp(): void
     {
         parent::setUp();
-
-        $cacheFrontendProphecy = $this->prophesize(PhpFrontend::class);
-        $cacheFrontendProphecy->require(Argument::any())->willReturn(false);
-        $cacheFrontendProphecy->set(Argument::any(), Argument::any())->willReturn(null);
-
-        $packageManagerProphecy = $this->prophesize(PackageManager::class);
-        $corePackageProphecy = $this->prophesize(PackageInterface::class);
-        $corePackageProphecy->getPackagePath()->willReturn(__DIR__ . '/../../../../../../../sysext/core/');
-        $packageManagerProphecy->getActivePackages()->willReturn([
-            $corePackageProphecy->reveal(),
-        ]);
-
         GeneralUtility::addInstance(ProviderConfigurationLoader::class, new ProviderConfigurationLoader(
-            $packageManagerProphecy->reveal(),
-            $cacheFrontendProphecy->reveal(),
+            ExtensionManagementUtilityAccessibleProxy::getPackageManager(),
+            new NullFrontend('test'),
             'ExpressionLanguageProviders'
         ));
     }
 
-    /**
-     * @return array
-     */
+    public function tearDown(): void
+    {
+        GeneralUtility::purgeInstances();
+        parent::tearDown();
+    }
+
     public function basicExpressionsDataHandler(): array
     {
         return [
@@ -78,18 +64,13 @@ class ResolverTest extends UnitTestCase
     /**
      * @test
      * @dataProvider basicExpressionsDataHandler
-     * @param string $expression
-     * @param mixed $expectedResult
      */
-    public function basicExpressionHandlingResultsWorksAsExpected(string $expression, $expectedResult): void
+    public function basicExpressionHandlingResultsWorksAsExpected(string $expression, bool $expectedResult): void
     {
         $expressionLanguageResolver = new Resolver('default', []);
         self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression));
     }
 
-    /**
-     * @return array
-     */
     public function basicExpressionsWithVariablesDataHandler(): array
     {
         return [
@@ -106,20 +87,18 @@ class ResolverTest extends UnitTestCase
     /**
      * @test
      * @dataProvider basicExpressionsWithVariablesDataHandler
-     * @param string $expression
-     * @param mixed $expectedResult
      */
-    public function basicExpressionHandlingWithCustomVariablesWorksAsExpected(string $expression, $expectedResult): void
+    public function basicExpressionHandlingWithCustomVariablesWorksAsExpected(string $expression, bool $expectedResult): void
     {
-        $contextProphecy = $this->prophesize(DefaultProvider::class);
-        $contextProphecy->getExpressionLanguageProviders()->willReturn([]);
-        $contextProphecy->getExpressionLanguageVariables()->willReturn([
+        $contextMock = $this->createMock(DefaultProvider::class);
+        $contextMock->method('getExpressionLanguageProviders')->willReturn([]);
+        $contextMock->method('getExpressionLanguageVariables')->willReturn([
             'var1' => '1',
             'var2' => '2',
             'varTrue' => true,
             'varFalse' => false,
          ]);
-        GeneralUtility::addInstance(DefaultProvider::class, $contextProphecy->reveal());
+        GeneralUtility::addInstance(DefaultProvider::class, $contextMock);
         $expressionLanguageResolver = new Resolver('default', []);
         self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression));
     }
@@ -145,22 +124,22 @@ class ResolverTest extends UnitTestCase
      */
     public function basicExpressionHandlingWithCustomVariablesAndExpressionLanguageProviderWorksAsExpected(string $expression, $expectedResult): void
     {
-        $expressionProvider = $this->prophesize(DefaultFunctionsProvider::class);
-        $expressionProvider->getFunctions()->willReturn([
+        $expressionProviderMock = $this->createMock(DefaultFunctionsProvider::class);
+        $expressionProviderMock->method('getFunctions')->willReturn([
             new ExpressionFunction('testMeLowercase', static function ($str) {
                 return sprintf('(is_string(%1$s) ? strtolower(%1$s) : %1$s)', $str);
             }, static function ($arguments, $str) {
                 return is_string($str) ? strtolower($str) : $str;
             }),
         ]);
-        $contextProphecy = $this->prophesize(DefaultProvider::class);
-        $contextProphecy->getExpressionLanguageProviders()->willReturn([DefaultFunctionsProvider::class]);
-        $contextProphecy->getExpressionLanguageVariables()->willReturn([
+        $contextMock = $this->createMock(DefaultProvider::class);
+        $contextMock->method('getExpressionLanguageProviders')->willReturn([DefaultFunctionsProvider::class]);
+        $contextMock->method('getExpressionLanguageVariables')->willReturn([
             'var1' => 'FOO',
             'var2' => 'foo',
          ]);
-        GeneralUtility::addInstance(DefaultProvider::class, $contextProphecy->reveal());
-        GeneralUtility::addInstance(DefaultFunctionsProvider::class, $expressionProvider->reveal());
+        GeneralUtility::addInstance(DefaultProvider::class, $contextMock);
+        GeneralUtility::addInstance(DefaultFunctionsProvider::class, $expressionProviderMock);
         $expressionLanguageResolver = new Resolver('default', []);
         self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression));
     }
-- 
GitLab