Compare commits

..

9 Commits

18 changed files with 251 additions and 89 deletions

View File

@ -1,13 +1,34 @@
<?php <?php
declare(strict_types=1);
$finder = PhpCsFixer\Finder::create() $finder = PhpCsFixer\Finder::create()
->in(__DIR__) ->in(__DIR__)
; ;
$header = <<<EOF
Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
For the full copyright and license information, please view
the LICENSE file that was distributed with this source code.
https://www.d3data.de
@copyright (C) D3 Data Development (Inh. Thomas Dartsch)
@author D3 Data Development - Daniel Seifert <info@shopmodule.com>
@link https://www.oxidmodule.com
EOF;
$config = new PhpCsFixer\Config(); $config = new PhpCsFixer\Config();
return $config->setRules([ return $config->setRules([
'@PHP80Migration' => true, '@PHP80Migration' => true,
'@PSR12' => true '@PSR12' => true,
'header_comment' => [
'comment_type' => 'PHPDoc',
'header' => $header,
'location' => 'after_open',
'separate' => 'both',
],
]) ])
->setFinder($finder) ->setFinder($finder)
; ;

View File

@ -4,7 +4,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased](https://git.d3data.de/D3Public/DIContainer/compare/2.1.0.0...rel_2.x) ## [Unreleased](https://git.d3data.de/D3Public/DIContainer/compare/2.1.1.0...rel_2.x)
## [2.1.1.0](https://git.d3data.de/D3Public/DIContainer/compare/2.1.0.0...2.1.1.0) - 2024-08-30
### Changed
- ensure that an uncompiled instance weren't changed by a compiled one
## [2.1.0.0](https://git.d3data.de/D3Public/DIContainer/compare/2.0.0.0...2.1.0.0) - 2024-06-05 ## [2.1.0.0](https://git.d3data.de/D3Public/DIContainer/compare/2.0.0.0...2.1.0.0) - 2024-06-05
### Changed ### Changed

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */

View File

@ -31,7 +31,8 @@
"friendsofphp/php-cs-fixer": "~3.13.0", "friendsofphp/php-cs-fixer": "~3.13.0",
"phpstan/phpstan": "^1.10", "phpstan/phpstan": "^1.10",
"rector/rector": "^0.18.13", "rector/rector": "^0.18.13",
"mikey179/vfsstream": "^1.6.8" "mikey179/vfsstream": "^1.6.8",
"infection/infection": "^0.29.5"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -41,14 +42,22 @@
"autoload/functions_oxDIC.php" "autoload/functions_oxDIC.php"
] ]
}, },
"autoload-dev": {
"psr-4": {
"D3\\DIContainerHandler\\tests": "./tests"
}
},
"scripts": { "scripts": {
"php-cs-fixer": "./vendor/bin/php-cs-fixer fix --config=vendor/d3/oxid-dic-handler/.php-cs-fixer.php", "php-cs-fixer": "./vendor/bin/php-cs-fixer fix --config=vendor/d3/oxid-dic-handler/.php-cs-fixer.php",
"phpstan": "./vendor/bin/phpstan --configuration=vendor/d3/oxid-dic-handler/phpstan.neon analyse", "phpstan": "./vendor/bin/phpstan --configuration=vendor/d3/oxid-dic-handler/phpstan.neon analyse",
"phpstan-report": "./vendor/bin/phpstan --configuration=vendor/d3/ordermanager/phpstan.neon analyse --error-format=json > vendor/d3/ordermanager/tests/phpstan.report.json", "phpstan-report": "./vendor/bin/phpstan --configuration=vendor/d3/ordermanager/phpstan.neon analyse --error-format=json > reports/phpstan/oxid-dic-handler/phpstan.report.json",
"phpunit": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --bootstrap=source/bootstrap.php --config=vendor/d3/oxid-dic-handler/tests/", "phpunit": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --config=vendor/d3/oxid-dic-handler/tests/ --no-coverage",
"phpunit-coverage": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --bootstrap=source/bootstrap.php --config=vendor/d3/oxid-dic-handler/tests/ --coverage-html=vendor/d3/oxid-dic-handler/tests/result/coverage", "phpunit-coverage": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --config=vendor/d3/oxid-dic-handler/tests/ --coverage-html=reports/phpunit/oxid-dic-handler",
"phpunit-path-coverage": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --config=vendor/d3/oxid-dic-handler/tests/ --coverage-html=reports/phpunit/oxid-dic-handler --path-coverage",
"infection": "./vendor/bin/infection --configuration=vendor/d3/oxid-dic-handler/infection.json5",
"rector": "./vendor/bin/rector process --dry-run --config ./vendor/d3/oxid-dic-handler/rector.php" "rector": "./vendor/bin/rector process --dry-run --config ./vendor/d3/oxid-dic-handler/rector.php"
} }

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
@ -19,7 +21,6 @@ use d3DIContainerCache;
use Exception; use Exception;
use OxidEsales\Eshop\Core\Config; use OxidEsales\Eshop\Core\Config;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Facts\Config\ConfigFile;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
@ -49,6 +50,7 @@ class d3DicHandler implements d3DicHandlerInterface
*/ */
public static function getUncompiledInstance(): Container public static function getUncompiledInstance(): Container
{ {
if (self::$_instance !== null && self::$_instance->isCompiled()) {self::removeInstance();}
return oxNew(d3DicHandler::class)->createInstance(false); return oxNew(d3DicHandler::class)->createInstance(false);
} }
@ -176,6 +178,6 @@ class d3DicHandler implements d3DicHandlerInterface
public function getPhpDumper(ContainerBuilder $containerBuilder): PhpDumper public function getPhpDumper(ContainerBuilder $containerBuilder): PhpDumper
{ {
return new PhpDumper( $containerBuilder); return new PhpDumper($containerBuilder);
} }
} }

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
@ -38,8 +40,8 @@ class d3DicUtilities
); );
} }
public static function getVendorDir(): string public static function getVendorDir($current = __FILE__): string
{ {
return rtrim(dirname(__FILE__, 3), '/') . '/'; return dirname($current, 3). '/';
} }
} }

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
@ -37,7 +39,7 @@ class definitionFileContainer
public function addDefinitions(string $definitionFile, string $type): void public function addDefinitions(string $definitionFile, string $type): void
{ {
Assert::that($type)->inArray($this->allowedTypes, 'invalid definition file type'); Assert::that($type)->inArray($this->allowedTypes, 'invalid definition file type');
Assert::that(rtrim(dirname(__FILE__, 3).'/').$definitionFile)->file('invalid definition file'); Assert::that(dirname(__FILE__, 3).'/'.$definitionFile)->file('invalid definition file');
$this->definitionFiles[$type][md5($definitionFile)] = $definitionFile; $this->definitionFiles[$type][md5($definitionFile)] = $definitionFile;
} }

35
infection.json5 Normal file
View File

@ -0,0 +1,35 @@
{
"source": {
"directories": [
"vendor/d3/oxid-dic-handler"
],
"excludes": [
".php-cs-fixer.php",
"rector.php",
"tests"
]
},
"timeout": 60,
"logs": {
"text": "../../../reports/infection/d3DICHandler/infection.log",
"html": "../../../reports/infection/d3DICHandler/infection.html",
"summary": "../../../reports/infection/d3DICHandler/summary.log",
"json": "../../../reports/infection/d3DICHandler/infection-log.json",
"perMutator": "../../../reports/infection/d3DICHandler/per-mutator.md",
"summaryJson": "../../../reports/infection/d3DICHandler/summary.json"
},
"tmpDir": "./infection/tmp",
"phpUnit": {
"configDir": "tests"
},
"mutators": {
"@default": true,
"@function_signature": false,
"global-ignoreSourceCodeByRegex": [
".*\\sstartProfile\\(.*",
".*\\sstopProfile\\(.*"
]
},
"testFramework":"phpunit",
"bootstrap":"source/bootstrap.php"
}

View File

@ -1,5 +1,18 @@
<?php <?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
declare(strict_types=1); declare(strict_types=1);
use Rector\Config\RectorConfig; use Rector\Config\RectorConfig;

View File

@ -1,13 +1,15 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */

View File

@ -1,9 +1,9 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
backupGlobals="true" backupGlobals="true"
backupStaticAttributes="false" bootstrap="../../../../source/bootstrap.php"
beStrictAboutTestsThatDoNotTestAnything="false"
colors="false" colors="false"
backupStaticAttributes="false"
convertErrorsToExceptions="true" convertErrorsToExceptions="true"
convertNoticesToExceptions="false" convertNoticesToExceptions="false"
convertWarningsToExceptions="true" convertWarningsToExceptions="true"
@ -13,8 +13,14 @@
stopOnFailure="false" stopOnFailure="false"
stopOnIncomplete="false" stopOnIncomplete="false"
stopOnSkipped="false" stopOnSkipped="false"
beStrictAboutTestsThatDoNotTestAnything="false"
verbose="false" verbose="false"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"> xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<testsuites>
<testsuite name="Unit">
<directory>unit/</directory>
</testsuite>
</testsuites>
<coverage includeUncoveredFiles="true" processUncoveredFiles="true"> <coverage includeUncoveredFiles="true" processUncoveredFiles="true">
<include> <include>
<directory suffix=".php">../</directory> <directory suffix=".php">../</directory>
@ -25,9 +31,4 @@
<file>../.php-cs-fixer.php</file> <file>../.php-cs-fixer.php</file>
</exclude> </exclude>
</coverage> </coverage>
<testsuites>
<testsuite name="Unit">
<directory>unit/</directory>
</testsuite>
</testsuites>
</phpunit> </phpunit>

View File

@ -1,19 +1,21 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
declare(strict_types=1); declare(strict_types=1);
namespace D3\DIContainerHandler\tests\autoload; namespace D3\DIContainerHandler\tests\unit\autoload;
use D3\DIContainerHandler\d3DicException; use D3\DIContainerHandler\d3DicException;
use D3\TestingTools\Development\CanAccessRestricted; use D3\TestingTools\Development\CanAccessRestricted;

View File

@ -1,19 +1,21 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
declare(strict_types=1); declare(strict_types=1);
namespace D3\DIContainerHandler\tests; namespace D3\DIContainerHandler\tests\unit;
use D3\DIContainerHandler\d3DicException; use D3\DIContainerHandler\d3DicException;
use InvalidArgumentException; use InvalidArgumentException;

View File

@ -1,19 +1,21 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
declare(strict_types=1); declare(strict_types=1);
namespace D3\DIContainerHandler\tests; namespace D3\DIContainerHandler\tests\unit;
use D3\DIContainerHandler\d3DicException; use D3\DIContainerHandler\d3DicException;
use D3\DIContainerHandler\d3DicHandler; use D3\DIContainerHandler\d3DicHandler;
@ -87,6 +89,7 @@ class d3DicHandlerTest extends TestCase
{ {
$sut = new d3DicHandler(); $sut = new d3DicHandler();
// test new instance
$containerBuilder = $this->callMethod( $containerBuilder = $this->callMethod(
$sut, $sut,
'getUncompiledInstance' 'getUncompiledInstance'
@ -98,6 +101,22 @@ class d3DicHandlerTest extends TestCase
); );
$this->assertFalse($containerBuilder->isCompiled()); $this->assertFalse($containerBuilder->isCompiled());
// test if compiled instance is getting resetted
$this->callMethod(
$sut,
'removeInstance'
);
$this->callMethod(
$sut,
'getInstance'
);
$containerBuilder = $this->callMethod(
$sut,
'getUncompiledInstance'
);
$this->assertFalse($containerBuilder->isCompiled());
} }
/** /**
@ -133,24 +152,27 @@ class d3DicHandlerTest extends TestCase
* @param bool $throwException * @param bool $throwException
* @param bool $expectException * @param bool $expectException
* @param string $circularReferenceMethod * @param string $circularReferenceMethod
* * @param string $expectedExceptionMessage
* @return void * @return void
* @throws ReflectionException * @throws ReflectionException
* @covers \D3\DIContainerHandler\d3DicHandler::createInstance * @covers \D3\DIContainerHandler\d3DicHandler::createInstance
* @dataProvider canCreateInstanceDataProvider * @dataProvider canCreateInstanceDataProvider
*/ */
public function canCreateInstance(bool $throwException, bool $expectException, string $circularReferenceMethod = '') public function canCreateInstance(bool $throwException, bool $expectException, string $circularReferenceMethod = '', string $expectedExceptionMessage = ''): void
{ {
/** @var d3DicHandler|MockObject $sut */ /** @var d3DicHandler|MockObject $sut */
$sut = $this->getMockBuilder(d3DicHandler::class) $sut = $this->getMockBuilder(d3DicHandler::class)
->onlyMethods(['buildContainer', 'getFunctionNameFromTrace']) ->onlyMethods(['buildContainer', 'getFunctionNameFromTrace'])
->getMock(); ->getMock();
if ($throwException) if ($throwException) {
$sut->method( 'buildContainer' )->willThrowException( new Exception( 'fixture' ) ); $sut->method('buildContainer')->willThrowException(new Exception('fixture'));
}
$sut->method('getFunctionNameFromTrace')->willReturn($circularReferenceMethod); $sut->method('getFunctionNameFromTrace')->willReturn($circularReferenceMethod);
if ($expectException) if ($expectException) {
$this->expectException(d3DicException::class); $this->expectException(d3DicException::class);
$this->expectExceptionMessage($expectedExceptionMessage);
}
$this->callMethod( $this->callMethod(
$sut, $sut,
@ -161,8 +183,8 @@ class d3DicHandlerTest extends TestCase
public function canCreateInstanceDataProvider(): Generator public function canCreateInstanceDataProvider(): Generator
{ {
yield "don't throw exception" => [false, false]; yield "don't throw exception" => [false, false];
yield "throw exception" => [true, true]; yield "throw exception" => [true, true, '', 'fixture'];
yield "has circular reference method name" => [false, true, 'getViewConfig']; yield "has circular reference method name" => [false, true, 'getViewConfig', 'method getViewConfig can\'t use DIC due the danger of circular reference'];
} }
/** /**
@ -330,13 +352,13 @@ class d3DicHandlerTest extends TestCase
* @test * @test
* @param bool $useCacheContainer * @param bool $useCacheContainer
* @param bool $compile * @param bool $compile
* * @param bool $useDefault
* @return void * @return void
* @throws ReflectionException * @throws ReflectionException
* @dataProvider buildContainerTestDataProvider * @dataProvider buildContainerTestDataProvider
* @covers \D3\DIContainerHandler\d3DicHandler::buildContainer * @covers \D3\DIContainerHandler\d3DicHandler::buildContainer
*/ */
public function buildContainerTest(bool $useCacheContainer, bool $compile): void public function buildContainerTest(bool $useCacheContainer, bool $compile, bool $useDefault = false): void
{ {
$structure = [ $structure = [
'source_directory' => [], 'source_directory' => [],
@ -352,18 +374,31 @@ class d3DicHandlerTest extends TestCase
->disableOriginalConstructor() ->disableOriginalConstructor()
->onlyMethods(get_class_methods(PhpDumper::class)) ->onlyMethods(get_class_methods(PhpDumper::class))
->getMock(); ->getMock();
$phpDumperMock->expects($this->exactly((int) (!$useCacheContainer && $compile)))->method('dump'); $phpDumperMock->expects($this->exactly((int) (!$useCacheContainer && $compile)))->method('dump')->willReturn('fixture');
/** @var d3DicHandler|MockObject $sut */ /** @var d3DicHandler|MockObject $sut */
$sut = $this->getMockBuilder(d3DicHandler::class) $sut = $this->getMockBuilder(d3DicHandler::class)
->onlyMethods(['d3UseCachedContainer', 'd3GetCacheContainer', 'getContainerBuilder', 'd3GetCacheFilePath', 'getPhpDumper']) ->onlyMethods(
[
'd3UseCachedContainer', 'd3GetCacheContainer', 'getContainerBuilder',
'loadFiles','d3GetCacheFilePath', 'getPhpDumper'
])
->getMock(); ->getMock();
$sut->expects($this->once())->method('d3UseCachedContainer')->willReturn($useCacheContainer); $sut->expects($this->once())->method('d3UseCachedContainer')->willReturn($useCacheContainer);
$sut->expects($this->exactly((int) $useCacheContainer))->method('d3GetCacheContainer'); $sut->expects($this->exactly((int) $useCacheContainer))->method('d3GetCacheContainer');
$sut->expects($this->exactly((int) !$useCacheContainer))->method('getContainerBuilder')->willReturn($containerBuilderMock); $sut->expects($this->exactly((int) !$useCacheContainer))->method('getContainerBuilder')->willReturn($containerBuilderMock);
$sut->method('d3GetCacheFilePath')->willReturn($fsRoot->getChild('source_directory')->path().'/DIContainer.php'); $sut->expects($this->exactly((int) !$useCacheContainer))->method('loadFiles');
$sut->method('d3GetCacheFilePath')->willReturn($fsRoot->getChild('source_directory')->url().'/DIContainer.php');
$sut->method('getPhpDumper')->willReturn($phpDumperMock); $sut->method('getPhpDumper')->willReturn($phpDumperMock);
$useDefault ?
$this->assertInstanceOf(
Container::class,
$this->callMethod(
$sut,
'buildContainer'
)
):
$this->assertInstanceOf( $this->assertInstanceOf(
Container::class, Container::class,
$this->callMethod( $this->callMethod(
@ -372,6 +407,13 @@ class d3DicHandlerTest extends TestCase
[$compile] [$compile]
) )
); );
if (!$useCacheContainer && $compile) {
$this->assertSame(
'fixture',
file_get_contents($fsRoot->getChild('source_directory')->url() . '/DIContainer.php')
);
}
} }
public function buildContainerTestDataProvider(): Generator public function buildContainerTestDataProvider(): Generator
@ -379,6 +421,7 @@ class d3DicHandlerTest extends TestCase
yield "can't use cached container, do compile" => [false, true]; yield "can't use cached container, do compile" => [false, true];
yield "can't use cached container, don't compile" => [false, false]; yield "can't use cached container, don't compile" => [false, false];
yield "use cached container" => [true, false]; yield "use cached container" => [true, false];
yield "can't use cached container, do compile, default" => [false, true, true];
} }
/** /**
@ -400,7 +443,7 @@ class d3DicHandlerTest extends TestCase
->onlyMethods(['isProductiveMode', 'getConfigParam']) ->onlyMethods(['isProductiveMode', 'getConfigParam'])
->getMock(); ->getMock();
$configMock->method('isProductiveMode')->willReturn($productive); $configMock->method('isProductiveMode')->willReturn($productive);
$configMock->method('getConfigParam')->willReturnMap([['iDebug', NULL, $debug]]); $configMock->method('getConfigParam')->willReturnMap([['iDebug', null, $debug]]);
/** @var d3DicHandler|MockObject $sut */ /** @var d3DicHandler|MockObject $sut */
$sut = $this->getMockBuilder(d3DicHandler::class) $sut = $this->getMockBuilder(d3DicHandler::class)

View File

@ -1,19 +1,21 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
declare(strict_types=1); declare(strict_types=1);
namespace D3\DIContainerHandler\tests; namespace D3\DIContainerHandler\tests\unit;
use D3\DIContainerHandler\d3DicHandler; use D3\DIContainerHandler\d3DicHandler;
use D3\DIContainerHandler\d3DicUtilities; use D3\DIContainerHandler\d3DicUtilities;
@ -88,16 +90,30 @@ class d3DicUtilitiesTest extends TestCase
* @test * @test
* @throws ReflectionException * @throws ReflectionException
* @covers \D3\DIContainerHandler\d3DicUtilities::getVendorDir() * @covers \D3\DIContainerHandler\d3DicUtilities::getVendorDir()
* @dataProvider getVendorDirTestDataProvider
*/ */
public function getVendorDirTest(): void public function getVendorDirTest(string $path): void
{ {
$sut = oxNew(d3DicUtilities::class); $sut = oxNew(d3DicUtilities::class);
$vendorDir = (string) $this->callMethod(
$sut,
'getVendorDir',
[$path]
);
$this->assertSame('/var/www/html/vendor/', $vendorDir);
$this->assertDirectoryExists( $this->assertDirectoryExists(
(string) $this->callMethod( $this->callMethod(
$sut, $sut,
'getVendorDir' 'getVendorDir'
) )
); );
} }
public function getVendorDirTestDataProvider(): Generator
{
yield 'default' => ['/var/www/html/vendor/d3/oxid-dic-handler/d3DicUtilities.php'];
yield 'space after' => ['/var/www/html/vendor/d3/oxid-dic-handler/d3DicUtilities.php '];
}
} }

View File

@ -1,19 +1,21 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
* file that was distributed with this source code. *
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
* *
* https://www.d3data.de * https://www.d3data.de
* *
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com> * @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com * @link https://www.oxidmodule.com
*/ */
declare(strict_types=1); declare(strict_types=1);
namespace D3\DIContainerHandler\tests; namespace D3\DIContainerHandler\tests\unit;
use Assert\InvalidArgumentException; use Assert\InvalidArgumentException;
use D3\DIContainerHandler\definitionFileContainer; use D3\DIContainerHandler\definitionFileContainer;