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;