diff --git a/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/Config/Reader/DomTest.php b/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/Config/Reader/DomTest.php index 2858190b31a38..20de329f940be 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/Config/Reader/DomTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/Config/Reader/DomTest.php @@ -5,6 +5,11 @@ */ namespace Magento\Framework\ObjectManager\Config\Reader; +/** + * Class DomTest @covers \Magento\Framework\ObjectManager\Config\Reader\Dom + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class DomTest extends \PHPUnit_Framework_TestCase { /** @@ -58,8 +63,9 @@ protected function setUp() false ); $this->_fileResolverMock->expects($this->once())->method('get')->will($this->returnValue($this->_fileList)); - $this->_mapper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( - \Magento\Framework\ObjectManager\Config\Mapper\Dom::class + $this->_mapper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Framework\ObjectManager\Config\Mapper\Dom::class, + ['argumentInterpreter' => $this->getArgumentInterpreterWithMockedStringUtils()] ); $this->_validationState = new \Magento\Framework\App\Arguments\ValidationState( \Magento\Framework\App\State::MODE_DEFAULT @@ -80,4 +86,47 @@ public function testRead() ); $this->assertEquals($this->_mapper->convert($this->_mergedConfig), $model->read('scope')); } + + /** + * Replace Magento\Framework\Data\Argument\Interpreter\StringUtils with mock to check arguments wasn't translated. + * + * Check argument $data has not key $data['translate'], therefore + * Magento\Framework\Data\Argument\Interpreter\StringUtils::evaluate($data) won't translate $data['value']. + * + * @return \Magento\Framework\Data\Argument\Interpreter\Composite + */ + private function getArgumentInterpreterWithMockedStringUtils() + { + $booleanUtils = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + \Magento\Framework\Stdlib\BooleanUtils::class + ); + $stringUtilsMock = $this->getMockBuilder(\Magento\Framework\Data\Argument\Interpreter\StringUtils::class) + ->setConstructorArgs(['booleanUtils' => $booleanUtils]) + ->setMethods(['evaluate']) + ->getMock(); + $stringUtilsMock->expects($this->any()) + ->method('evaluate') + ->with(self::callback(function ($data) { + return !isset($data['translate']); + })) + ->will(self::returnCallback(function ($data) { + return isset($data['value']) ? $data['value'] : ''; + })); + $constInterpreter = new \Magento\Framework\Data\Argument\Interpreter\Constant(); + $composite = new \Magento\Framework\Data\Argument\Interpreter\Composite( + [ + 'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils), + 'string' => $stringUtilsMock, + 'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(), + 'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(), + 'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils), + 'const' => $constInterpreter, + 'init_parameter' => new \Magento\Framework\App\Arguments\ArgumentInterpreter($constInterpreter), + ], + \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE + ); + $composite->addInterpreter('array', new \Magento\Framework\Data\Argument\Interpreter\ArrayType($composite)); + + return $composite; + } } diff --git a/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_one.xml b/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_one.xml index 05b87c57858fc..6b72714f643e8 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_one.xml +++ b/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_one.xml @@ -19,7 +19,7 @@ false 100500 - az-value + az-value Magento\Store\Model\Website::CACHE_TAG false @@ -28,7 +28,7 @@ false 100500 - az-value + az-value diff --git a/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_two.xml b/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_two.xml index a34d0d666817a..50f851653e49e 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_two.xml +++ b/dev/tests/integration/testsuite/Magento/Framework/ObjectManager/_files/config_two.xml @@ -16,7 +16,7 @@ 10 1 false - Az-Value + Az-Value Magento\Store\Model\Website::CACHE_TAG 100 diff --git a/lib/internal/Magento/Framework/Config/Converter/Dom/DiFlat.php b/lib/internal/Magento/Framework/Config/Converter/Dom/DiFlat.php new file mode 100644 index 0000000000000..4b9411169d60d --- /dev/null +++ b/lib/internal/Magento/Framework/Config/Converter/Dom/DiFlat.php @@ -0,0 +1,27 @@ + 'id', + '/root/wrongArray' => 'id', + ], + [ + '/root/node_one/subnode', + ] + ); + $this->model = new \Magento\Framework\Config\Converter\Dom\DiFlat($arrayNodeConfig); + } + + /** + * Test \Magento\Framework\Config\Converter\Dom\DiFlat::convert() exclude attribute 'translate'. + * + * @covers \Magento\Framework\Config\Converter\Dom\DiFlat::convert() + */ + public function testConvert() + { + $fixturePath = __DIR__ . '/../../_files/converter/dom/flat/'; + $expected = require $fixturePath . 'result.php'; + + $dom = new \DOMDocument(); + $dom->load($fixturePath . 'di_source.xml'); + + $actual = $this->model->convert($dom); + $this->assertEquals($expected, $actual); + } +} diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/_files/converter/dom/flat/di_source.xml b/lib/internal/Magento/Framework/Config/Test/Unit/_files/converter/dom/flat/di_source.xml new file mode 100644 index 0000000000000..eaecae8434986 --- /dev/null +++ b/lib/internal/Magento/Framework/Config/Test/Unit/_files/converter/dom/flat/di_source.xml @@ -0,0 +1,22 @@ + + + + + + Value1 + + + + 1 + + + 2 + + + + diff --git a/lib/internal/Magento/Framework/ObjectManager/Config/Mapper/ArgumentParser.php b/lib/internal/Magento/Framework/ObjectManager/Config/Mapper/ArgumentParser.php index 6f47950e197a7..079a311a9536f 100644 --- a/lib/internal/Magento/Framework/ObjectManager/Config/Mapper/ArgumentParser.php +++ b/lib/internal/Magento/Framework/ObjectManager/Config/Mapper/ArgumentParser.php @@ -5,7 +5,7 @@ */ namespace Magento\Framework\ObjectManager\Config\Mapper; -use Magento\Framework\Config\Converter\Dom\Flat as FlatConverter; +use Magento\Framework\Config\Converter\Dom\DiFlat as FlatConverter; use Magento\Framework\Config\Dom\ArrayNodeConfig; use Magento\Framework\Config\Dom\NodePathMatcher;