Skip to content

Commit d53c6f5

Browse files
author
Yuri Kovsher
committed
Merge remote-tracking branch 'tango-ce/MAGETWO-34920' into MAGETWO-36610
Conflicts: lib/internal/Magento/Framework/Phrase.php lib/internal/Magento/Framework/Test/Unit/PhraseTest.php
2 parents 04e3f14 + 6d28617 commit d53c6f5

File tree

9 files changed

+155
-75
lines changed

9 files changed

+155
-75
lines changed

lib/internal/Magento/Framework/Phrase.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
use Zend\Stdlib\JsonSerializable;
1111
use Magento\Framework\Phrase\RendererInterface;
12-
use Magento\Framework\Phrase\Renderer\Placeholder;
12+
use Magento\Framework\Phrase\Renderer\Placeholder as RendererPlaceholder;
1313

1414
class Phrase implements JsonSerializable
1515
{
@@ -52,11 +52,10 @@ public static function setRenderer(RendererInterface $renderer)
5252
*/
5353
public static function getRenderer()
5454
{
55-
if (self::$renderer) {
56-
return self::$renderer;
57-
} else {
58-
self::$renderer = new \Magento\Framework\Phrase\Renderer\Placeholder();
55+
if (!self::$renderer) {
56+
self::$renderer = new RendererPlaceholder();
5957
}
58+
return self::$renderer;
6059
}
6160

6261
/**
@@ -98,7 +97,11 @@ public function getArguments()
9897
*/
9998
public function render()
10099
{
101-
return self::getRenderer() ? self::getRenderer()->render([$this->text], $this->arguments) : $this->text;
100+
try {
101+
return self::getRenderer()->render([$this->text], $this->getArguments());
102+
} catch (\Exception $e) {
103+
return $this->getText();
104+
}
102105
}
103106

104107
/**

lib/internal/Magento/Framework/Phrase/Renderer/Composite.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Composite implements RendererInterface
1717
protected $_renderers;
1818

1919
/**
20-
* @param RendererInterface[] $renderers
20+
* @param \Magento\Framework\Phrase\RendererInterface[] $renderers
2121
* @throws \InvalidArgumentException
2222
*/
2323
public function __construct(array $renderers)

lib/internal/Magento/Framework/Phrase/Renderer/Inline.php

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
*/
88
namespace Magento\Framework\Phrase\Renderer;
99

10-
class Inline implements \Magento\Framework\Phrase\RendererInterface
10+
use Magento\Framework\Phrase\RendererInterface;
11+
use Magento\Framework\TranslateInterface;
12+
use Magento\Framework\Translate\Inline\ProviderInterface;
13+
use Psr\Log\LoggerInterface;
14+
15+
class Inline implements RendererInterface
1116
{
1217
/**
1318
* @var \Magento\Framework\TranslateInterface
@@ -19,16 +24,24 @@ class Inline implements \Magento\Framework\Phrase\RendererInterface
1924
*/
2025
protected $inlineProvider;
2126

27+
/**
28+
* @var \Psr\Log\LoggerInterface
29+
*/
30+
protected $logger;
31+
2232
/**
2333
* @param \Magento\Framework\TranslateInterface $translator
2434
* @param \Magento\Framework\Translate\Inline\ProviderInterface $inlineProvider
35+
* @param \Psr\Log\LoggerInterface $logger
2536
*/
2637
public function __construct(
27-
\Magento\Framework\TranslateInterface $translator,
28-
\Magento\Framework\Translate\Inline\ProviderInterface $inlineProvider
38+
TranslateInterface $translator,
39+
ProviderInterface $inlineProvider,
40+
LoggerInterface $logger
2941
) {
3042
$this->translator = $translator;
3143
$this->inlineProvider = $inlineProvider;
44+
$this->logger = $logger;
3245
}
3346

3447
/**
@@ -37,22 +50,29 @@ public function __construct(
3750
* @param [] $source
3851
* @param [] $arguments
3952
* @return string
53+
* @throws \Exception
54+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4055
*/
4156
public function render(array $source, array $arguments)
4257
{
4358
$text = end($source);
4459

45-
if (!$this->inlineProvider->get()->isAllowed()) {
46-
return $text;
47-
}
60+
try {
61+
if (!$this->inlineProvider->get()->isAllowed()) {
62+
return $text;
63+
}
4864

49-
if (strpos($text, '{{{') === false
50-
|| strpos($text, '}}}') === false
51-
|| strpos($text, '}}{{') === false
52-
) {
53-
$text = '{{{'
54-
. implode('}}{{', array_reverse($source))
55-
. '}}{{' . $this->translator->getTheme() . '}}}';
65+
if (strpos($text, '{{{') === false
66+
|| strpos($text, '}}}') === false
67+
|| strpos($text, '}}{{') === false
68+
) {
69+
$text = '{{{'
70+
. implode('}}{{', array_reverse($source))
71+
. '}}{{' . $this->translator->getTheme() . '}}}';
72+
}
73+
} catch (\Exception $e) {
74+
$this->logger->critical($e->getMessage());
75+
throw $e;
5676
}
5777

5878
return $text;

lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
*/
88
namespace Magento\Framework\Phrase\Renderer;
99

10-
class Placeholder implements \Magento\Framework\Phrase\RendererInterface
10+
use Magento\Framework\Phrase\RendererInterface;
11+
12+
class Placeholder implements RendererInterface
1113
{
1214
/**
1315
* Render source text
@@ -23,7 +25,7 @@ public function render(array $source, array $arguments)
2325
if ($arguments) {
2426
$placeholders = [];
2527
foreach (array_keys($arguments) as $key) {
26-
$placeholders[] = "%" . (is_int($key) ? strval($key + 1) : $key);
28+
$placeholders[] = '%' . (is_int($key) ? strval($key + 1) : $key);
2729
}
2830
$text = str_replace($placeholders, $arguments, $text);
2931
}

lib/internal/Magento/Framework/Phrase/Renderer/Translate.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,34 @@
77
*/
88
namespace Magento\Framework\Phrase\Renderer;
99

10-
class Translate implements \Magento\Framework\Phrase\RendererInterface
10+
use Magento\Framework\Phrase\RendererInterface;
11+
use Magento\Framework\TranslateInterface;
12+
use Psr\Log\LoggerInterface;
13+
14+
class Translate implements RendererInterface
1115
{
1216
/**
1317
* @var \Magento\Framework\TranslateInterface
1418
*/
1519
protected $translator;
1620

21+
/**
22+
* @var \Psr\Log\LoggerInterface
23+
*/
24+
protected $logger;
25+
1726
/**
1827
* Renderer construct
1928
*
2029
* @param \Magento\Framework\TranslateInterface $translator
30+
* @param \Psr\Log\LoggerInterface $logger
2131
*/
22-
public function __construct(\Magento\Framework\TranslateInterface $translator)
23-
{
32+
public function __construct(
33+
TranslateInterface $translator,
34+
LoggerInterface $logger
35+
) {
2436
$this->translator = $translator;
37+
$this->logger = $logger;
2538
}
2639

2740
/**
@@ -30,12 +43,19 @@ public function __construct(\Magento\Framework\TranslateInterface $translator)
3043
* @param [] $source
3144
* @param [] $arguments
3245
* @return string
46+
* @throws \Exception
47+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
3348
*/
3449
public function render(array $source, array $arguments)
3550
{
3651
$text = end($source);
3752

38-
$data = $this->translator->getData();
53+
try {
54+
$data = $this->translator->getData();
55+
} catch (\Exception $e) {
56+
$this->logger->critical($e->getMessage());
57+
throw $e;
58+
}
3959

4060
return array_key_exists($text, $data) ? $data[$text] : $text;
4161
}

lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/CompositeTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,17 @@ public function testRender()
7777

7878
$this->assertEquals($resultAfterSecond, $this->object->render([$text], $arguments));
7979
}
80+
81+
public function testRenderException()
82+
{
83+
$message = 'something went wrong';
84+
$exception = new \Exception($message);
85+
86+
$this->rendererOne->expects($this->once())
87+
->method('render')
88+
->willThrowException($exception);
89+
90+
$this->setExpectedException('Exception', $message);
91+
$this->object->render(['text'], []);
92+
}
8093
}

lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/InlineTest.php

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,36 @@
88
class InlineTest extends \PHPUnit_Framework_TestCase
99
{
1010
/**
11-
* @var \Magento\Framework\TranslateInterface
11+
* @var \Magento\Framework\TranslateInterface|\PHPUnit_Framework_MockObject_MockObject
1212
*/
1313
protected $translator;
1414

1515
/**
1616
* @var \Magento\Framework\Phrase\Renderer\Translate
1717
*/
18-
protected $_renderer;
18+
protected $renderer;
1919

2020
/**
21-
* @var \Magento\Framework\Translate\Inline\ProviderInterface
21+
* @var \Magento\Framework\Translate\Inline\ProviderInterface|\PHPUnit_Framework_MockObject_MockObject
2222
*/
2323
protected $provider;
2424

25+
/**
26+
* @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
27+
*/
28+
protected $loggerMock;
29+
2530
protected function setUp()
2631
{
2732
$this->translator = $this->getMock('Magento\Framework\TranslateInterface', [], [], '', false);
2833
$this->provider = $this->getMock('Magento\Framework\Translate\Inline\ProviderInterface', [], [], '', false);
34+
$this->loggerMock = $this->getMockBuilder('Psr\Log\LoggerInterface')
35+
->getMock();
2936

3037
$this->renderer = new \Magento\Framework\Phrase\Renderer\Inline(
3138
$this->translator,
32-
$this->provider
39+
$this->provider,
40+
$this->loggerMock
3341
);
3442
}
3543

@@ -70,4 +78,17 @@ public function testRenderIfInlineTranslationIsNotAllowed()
7078

7179
$this->assertEquals($text, $this->renderer->render([$text], []));
7280
}
81+
82+
public function testRenderException()
83+
{
84+
$message = 'something went wrong';
85+
$exception = new \Exception($message);
86+
87+
$this->provider->expects($this->once())
88+
->method('get')
89+
->willThrowException($exception);
90+
91+
$this->setExpectedException('Exception', $message);
92+
$this->renderer->render(['text'], []);
93+
}
7394
}

lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/TranslateTest.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,24 @@ class TranslateTest extends \PHPUnit_Framework_TestCase
1717
*/
1818
protected $_renderer;
1919

20+
/**
21+
* @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
22+
*/
23+
protected $loggerMock;
24+
2025
protected function setUp()
2126
{
2227
$this->_translator = $this->getMock('Magento\Framework\TranslateInterface', [], [], '', false);
28+
$this->loggerMock = $this->getMockBuilder('Psr\Log\LoggerInterface')
29+
->getMock();
2330

2431
$objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
2532
$this->_renderer = $objectManagerHelper->getObject(
2633
'Magento\Framework\Phrase\Renderer\Translate',
27-
['translator' => $this->_translator]
34+
[
35+
'translator' => $this->_translator,
36+
'logger' => $this->loggerMock
37+
]
2838
);
2939
}
3040

@@ -41,4 +51,17 @@ public function testRender()
4151
$this->assertEquals($translate, $this->_renderer->render([$translatedText], []));
4252
$this->assertEquals($text, $this->_renderer->render([$text], []));
4353
}
54+
55+
public function testRenderException()
56+
{
57+
$message = 'something went wrong';
58+
$exception = new \Exception($message);
59+
60+
$this->_translator->expects($this->once())
61+
->method('getData')
62+
->willThrowException($exception);
63+
64+
$this->setExpectedException('Exception', $message);
65+
$this->_renderer->render(['text'], []);
66+
}
4467
}

0 commit comments

Comments
 (0)