Skip to content
This repository was archived by the owner on Apr 29, 2019. It is now read-only.

Commit a999d2c

Browse files
committed
MAGETWO-67048: Cannot add translate attribute into the di.xml
1 parent a43f607 commit a999d2c

File tree

8 files changed

+115
-107
lines changed

8 files changed

+115
-107
lines changed

app/code/Magento/Ui/etc/di.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@
256256
<item name="array" xsi:type="object">arrayArgumentInterpreterProxy</item>
257257
<item name="boolean" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\Boolean</item>
258258
<item name="number" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\Number</item>
259-
<item name="string" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils</item>
259+
<item name="string" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\StringUtils</item>
260260
<item name="null" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\NullType</item>
261261
<item name="url" xsi:type="object">Magento\Ui\Config\Argument\Parser\Url</item>
262262
</argument>

app/etc/di.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@
394394
<item name="array" xsi:type="object">layoutArrayArgumentReaderInterpreterProxy</item>
395395
<item name="boolean" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\Boolean</item>
396396
<item name="number" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\Number</item>
397-
<item name="string" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils</item>
397+
<item name="string" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\StringUtils</item>
398398
<item name="null" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\NullType</item>
399399
<item name="object" xsi:type="object">Magento\Framework\View\Layout\Argument\Interpreter\Passthrough</item>
400400
<item name="url" xsi:type="object">Magento\Framework\View\Layout\Argument\Interpreter\Passthrough</item>
@@ -410,7 +410,7 @@
410410
<item name="array" xsi:type="object">layoutArrayArgumentGeneratorInterpreterProxy</item>
411411
<item name="boolean" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\Boolean</item>
412412
<item name="number" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\Number</item>
413-
<item name="string" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils</item>
413+
<item name="string" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\StringUtils</item>
414414
<item name="null" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\NullType</item>
415415
<item name="object" xsi:type="object">layoutObjectArgumentInterpreter</item>
416416
<item name="url" xsi:type="object">Magento\Framework\View\Layout\Argument\Interpreter\Url</item>
@@ -455,7 +455,7 @@
455455
</virtualType>
456456
<type name="Magento\Framework\View\Layout\Argument\Interpreter\NamedParams">
457457
<arguments>
458-
<argument name="paramInterpreter" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils</argument>
458+
<argument name="paramInterpreter" xsi:type="object">Magento\Framework\Data\Argument\Interpreter\StringUtils</argument>
459459
</arguments>
460460
</type>
461461
<virtualType name="containerRenderPool" type="Magento\Framework\View\Layout\ReaderPool">
Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,29 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Framework\Data\Argument\Interpreter;
78

89
use Magento\Framework\Phrase\RendererInterface;
910
use Magento\Framework\Stdlib\BooleanUtils;
1011

1112
/**
12-
* @covers \Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils
13+
* @covers \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils
1314
*/
14-
class TranslatableStringUtilsTest extends \PHPUnit_Framework_TestCase
15+
class BaseStringUtilsTest extends \PHPUnit_Framework_TestCase
1516
{
1617
/**
17-
* @var \Magento\Framework\Data\Argument\Interpreter\StringUtils
18+
* @var \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils
1819
*/
1920
private $model;
2021

2122
/**
2223
* @var BooleanUtils|\PHPUnit_Framework_MockObject_MockObject
2324
*/
24-
protected $booleanUtils;
25+
private $booleanUtils;
2526

2627
/**
27-
* Prepare subject for test.
28+
* Prepare subject for tests.
2829
*/
2930
protected function setUp()
3031
{
@@ -36,23 +37,15 @@ protected function setUp()
3637
)->will(
3738
$this->returnValueMap([['true', true], ['false', false]])
3839
);
39-
40-
$baseStringUtils = new StringUtils($this->booleanUtils);
41-
$this->model = new TranslatableStringUtils($this->booleanUtils, $baseStringUtils);
40+
$this->model = new BaseStringUtils($this->booleanUtils);
4241
/** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $translateRenderer */
4342
$translateRenderer = $this->getMockForAbstractClass(RendererInterface::class);
44-
$translateRenderer->expects($this->any())->method('render')->will(
45-
$this->returnCallback(
46-
function ($input) {
47-
return end($input) . ' (translated)';
48-
}
49-
)
50-
);
43+
$translateRenderer->expects(self::never())->method('render');
5144
\Magento\Framework\Phrase::setRenderer($translateRenderer);
5245
}
5346

5447
/**
55-
* Check TranslatableStringUtils::evaluate can translate incoming $input['value'].
48+
* Check BaseStringUtils::evaluate() will not translate incoming $input['value'].
5649
*
5750
* @param array $input
5851
* @param bool $expected
@@ -77,17 +70,16 @@ public function evaluateDataProvider()
7770
'with value' => [['value' => 'some value'], 'some value'],
7871
'translation required' => [
7972
['value' => 'some value', 'translate' => 'true'],
80-
'some value (translated)',
73+
'some value',
8174
],
82-
'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value']
75+
'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'],
8376
];
8477
}
8578

8679
/**
87-
* Check TranslatableStringUtils::evaluate() throws exception in case $input['value'] is not a string.
80+
* Check BaseStringUtils::evaluate() trows exception in case $input['value'] not a string.
8881
*
8982
* @param array $input
90-
*
9183
* @dataProvider evaluateExceptionDataProvider
9284
* @expectedException \InvalidArgumentException
9385
* @expectedExceptionMessage String value is expected

dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Framework\Data\Argument\Interpreter;
78

89
use Magento\Framework\Phrase\RendererInterface;
@@ -16,46 +17,57 @@ class StringUtilsTest extends \PHPUnit_Framework_TestCase
1617
/**
1718
* @var \Magento\Framework\Data\Argument\Interpreter\StringUtils
1819
*/
19-
protected $_model;
20+
private $model;
2021

2122
/**
2223
* @var BooleanUtils|\PHPUnit_Framework_MockObject_MockObject
2324
*/
24-
protected $_booleanUtils;
25+
protected $booleanUtils;
2526

27+
/**
28+
* Prepare subject for test.
29+
*/
2630
protected function setUp()
2731
{
28-
$this->_booleanUtils = $this->getMock(BooleanUtils::class);
29-
$this->_booleanUtils->expects(
32+
$this->booleanUtils = $this->getMock(BooleanUtils::class);
33+
$this->booleanUtils->expects(
3034
$this->any()
3135
)->method(
3236
'toBoolean'
3337
)->will(
3438
$this->returnValueMap([['true', true], ['false', false]])
3539
);
36-
$this->_model = new StringUtils($this->_booleanUtils);
40+
41+
$baseStringUtils = new BaseStringUtils($this->booleanUtils);
42+
$this->model = new StringUtils($this->booleanUtils, $baseStringUtils);
3743
/** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $translateRenderer */
3844
$translateRenderer = $this->getMockForAbstractClass(RendererInterface::class);
39-
$translateRenderer->expects(self::never())->method('render');
45+
$translateRenderer->expects($this->any())->method('render')->will(
46+
$this->returnCallback(
47+
function ($input) {
48+
return end($input) . ' (translated)';
49+
}
50+
)
51+
);
4052
\Magento\Framework\Phrase::setRenderer($translateRenderer);
4153
}
4254

4355
/**
44-
* Check StringUtils::evaluate() won't translate incoming $input['value'].
56+
* Check StringUtils::evaluate can translate incoming $input['value'].
4557
*
4658
* @param array $input
47-
* @param bool $expected
59+
* @param string $expected
4860
*
4961
* @dataProvider evaluateDataProvider
5062
*/
5163
public function testEvaluate($input, $expected)
5264
{
53-
$actual = $this->_model->evaluate($input);
65+
$actual = $this->model->evaluate($input);
5466
$this->assertSame($expected, (string)$actual);
5567
}
5668

5769
/**
58-
* Provide test data and expected results for testEavaluate().
70+
* Provide test data and expected results for testEvaluate().
5971
*
6072
* @return array
6173
*/
@@ -66,14 +78,14 @@ public function evaluateDataProvider()
6678
'with value' => [['value' => 'some value'], 'some value'],
6779
'translation required' => [
6880
['value' => 'some value', 'translate' => 'true'],
69-
'some value',
81+
'some value (translated)',
7082
],
71-
'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value']
83+
'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'],
7284
];
7385
}
7486

7587
/**
76-
* Check StringUtils::evaluate() trows exception in case $input['value'] not a string.
88+
* Check StringUtils::evaluate() throws exception in case $input['value'] is not a string.
7789
*
7890
* @param array $input
7991
*
@@ -83,7 +95,7 @@ public function evaluateDataProvider()
8395
*/
8496
public function testEvaluateException($input)
8597
{
86-
$this->_model->evaluate($input);
98+
$this->model->evaluate($input);
8799
}
88100

89101
/**

lib/internal/Magento/Framework/App/ObjectManagerFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ protected function createArgumentInterpreter(
225225
$result = new \Magento\Framework\Data\Argument\Interpreter\Composite(
226226
[
227227
'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils),
228-
'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils),
228+
'string' => new \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils($booleanUtils),
229229
'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(),
230230
'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(),
231231
'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils),
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Data\Argument\Interpreter;
8+
9+
use Magento\Framework\Data\Argument\InterpreterInterface;
10+
use Magento\Framework\Stdlib\BooleanUtils;
11+
12+
/**
13+
* Interpreter of string data type.
14+
*/
15+
class BaseStringUtils implements InterpreterInterface
16+
{
17+
/**
18+
* @var BooleanUtils
19+
*/
20+
private $booleanUtils;
21+
22+
/**
23+
* BaseStringUtils constructor.
24+
*
25+
* @param BooleanUtils $booleanUtils
26+
*/
27+
public function __construct(BooleanUtils $booleanUtils)
28+
{
29+
$this->booleanUtils = $booleanUtils;
30+
}
31+
32+
/**
33+
* {@inheritdoc}
34+
* @return string
35+
* @throws \InvalidArgumentException
36+
*/
37+
public function evaluate(array $data)
38+
{
39+
if (isset($data['value'])) {
40+
$result = $data['value'];
41+
if (!is_string($result)) {
42+
throw new \InvalidArgumentException('String value is expected.');
43+
}
44+
} else {
45+
$result = '';
46+
}
47+
48+
return $result;
49+
}
50+
}

lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,39 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Framework\Data\Argument\Interpreter;
78

89
use Magento\Framework\Data\Argument\InterpreterInterface;
910
use Magento\Framework\Stdlib\BooleanUtils;
1011

1112
/**
12-
* Interpreter of string data type.
13+
* Interpreter of string data type that may optionally perform text translation.
1314
*/
1415
class StringUtils implements InterpreterInterface
1516
{
17+
/**
18+
* @var BaseStringUtils
19+
*/
20+
private $baseStringUtils;
21+
1622
/**
1723
* @var BooleanUtils
1824
*/
1925
private $booleanUtils;
2026

2127
/**
28+
* StringUtils constructor.
29+
*
2230
* @param BooleanUtils $booleanUtils
31+
* @param BaseStringUtils $baseStringUtils
2332
*/
24-
public function __construct(BooleanUtils $booleanUtils)
25-
{
33+
public function __construct(
34+
BooleanUtils $booleanUtils,
35+
BaseStringUtils $baseStringUtils
36+
) {
2637
$this->booleanUtils = $booleanUtils;
38+
$this->baseStringUtils = $baseStringUtils;
2739
}
2840

2941
/**
@@ -33,14 +45,14 @@ public function __construct(BooleanUtils $booleanUtils)
3345
*/
3446
public function evaluate(array $data)
3547
{
36-
if (isset($data['value'])) {
37-
$result = $data['value'];
38-
if (!is_string($result)) {
39-
throw new \InvalidArgumentException('String value is expected.');
40-
}
41-
} else {
42-
$result = '';
48+
$result = $this->baseStringUtils->evaluate($data);
49+
$needTranslation = isset($data['translate'])
50+
? $this->booleanUtils->toBoolean($data['translate'])
51+
: false;
52+
if ($needTranslation) {
53+
$result = (string)new \Magento\Framework\Phrase($result);
4354
}
55+
4456
return $result;
4557
}
4658
}

0 commit comments

Comments
 (0)