Skip to content

Commit 48a8cda

Browse files
Merge remote-tracking branch 'origin/MAGETWO-60828' into MPI-PR206
2 parents 760bb52 + c7e5edb commit 48a8cda

File tree

2 files changed

+88
-28
lines changed

2 files changed

+88
-28
lines changed

lib/internal/Magento/Framework/View/Element/Html/Calendar.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,31 @@ protected function _toHtml()
7878
]
7979
);
8080

81-
// get months names
81+
/**
82+
* Month names in abbreviated format values was added to ICU Data tables
83+
* starting ICU library version 52.1. For some OS, like CentOS, default
84+
* installation version of ICU library is 50.1.2, which not contain
85+
* 'abbreviated' key, and that may cause a PHP fatal error when passing
86+
* as an argument of function 'iterator_to_array'. This issue affects
87+
* locales like ja_JP, ko_KR etc.
88+
*
89+
* @see http://source.icu-project.org/repos/icu/tags/release-50-1-2/icu4c/source/data/locales/ja.txt
90+
* @see http://source.icu-project.org/repos/icu/tags/release-52-1/icu4c/source/data/locales/ja.txt
91+
* @var \ResourceBundle $monthsData
92+
*/
8293
$monthsData = $localeData['calendar']['gregorian']['monthNames'];
8394
$this->assign(
8495
'months',
8596
[
8697
'wide' => $this->encoder->encode(array_values(iterator_to_array($monthsData['format']['wide']))),
8798
'abbreviated' => $this->encoder->encode(
88-
array_values(iterator_to_array($monthsData['format']['abbreviated']))
99+
array_values(
100+
iterator_to_array(
101+
null !== $monthsData->get('format')->get('abbreviated')
102+
? $monthsData['format']['abbreviated']
103+
: $monthsData['format']['wide']
104+
)
105+
)
89106
),
90107
]
91108
);

lib/internal/Magento/Framework/View/Test/Unit/Element/Html/CalendarTest.php

Lines changed: 69 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,92 @@
55
*/
66
namespace Magento\Framework\View\Test\Unit\Element\Html;
77

8+
use Magento\Framework\Locale\ResolverInterface;
9+
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
10+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
11+
use Magento\Framework\View\Element\Html\Calendar;
12+
use Magento\Framework\View\Element\Template\Context;
13+
use PHPUnit_Framework_MockObject_MockObject as MockObject;
14+
15+
/**
16+
* @see Calendar
17+
*/
818
class CalendarTest extends \PHPUnit_Framework_TestCase
919
{
1020
/**
11-
* @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
21+
* @see MAGETWO-60828
22+
* @see Calendar::_toHtml
23+
*
24+
* @param string $locale
25+
* @dataProvider localesDataProvider
1226
*/
13-
protected $objectManagerHelper;
14-
15-
/** @var \Magento\Framework\View\Element\Html\Calendar */
16-
protected $block;
17-
18-
/** @var \Magento\Framework\View\Element\Template\Context */
19-
protected $context;
27+
public function testToHtmlWithDifferentLocales($locale)
28+
{
29+
$calendarBlock = (new ObjectManager($this))->getObject(
30+
Calendar::class,
31+
[
32+
'localeResolver' => $this->getLocalResolver($locale)
33+
]
34+
);
2035

21-
/** @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject */
22-
protected $localeDate;
36+
$calendarBlock->toHtml();
37+
}
2338

24-
protected function setUp()
39+
/**
40+
* @return array
41+
*/
42+
public function localesDataProvider()
2543
{
26-
$this->objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
27-
$this->localeDate = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class)
28-
->getMock();
44+
return [
45+
['en_US'],
46+
['ja_JP'],
47+
['ko_KR'],
48+
];
49+
}
2950

30-
/** @var \Magento\Framework\View\Element\Template\Context $context */
31-
$this->context = $this->objectManagerHelper->getObject(
32-
\Magento\Framework\View\Element\Template\Context::class,
51+
/**
52+
* @see Calendar::getYearRange
53+
*/
54+
public function testGetYearRange()
55+
{
56+
$calendarBlock = (new ObjectManager($this))->getObject(
57+
Calendar::class,
3358
[
34-
'localeDate' => $this->localeDate,
59+
'context' => $this->getContext()
3560
]
3661
);
3762

38-
/** @var \Magento\Framework\View\Element\Html\Links $block */
39-
$this->block = $this->objectManagerHelper->getObject(
40-
\Magento\Framework\View\Element\Html\Calendar::class,
41-
['context' => $this->context]
63+
$testCurrentYear = (new \DateTime())->format('Y');
64+
$this->assertEquals(
65+
(int) $testCurrentYear - 100 . ':' . ($testCurrentYear + 100),
66+
$calendarBlock->getYearRange()
4267
);
4368
}
4469

4570
/**
46-
* @test
71+
* @param string $locale
72+
* @return ResolverInterface|MockObject
4773
*/
48-
public function testGetYearRange()
74+
private function getLocalResolver($locale)
4975
{
50-
$testCurrentYear = (new \DateTime())->format('Y');
51-
$this->assertEquals((int)$testCurrentYear - 100 . ':' . ($testCurrentYear + 100), $this->block->getYearRange());
76+
$localResolver = $this->getMockBuilder(ResolverInterface::class)
77+
->getMockForAbstractClass();
78+
$localResolver->method('getLocale')->willReturn($locale);
79+
80+
return $localResolver;
81+
}
82+
83+
/**
84+
* @return Context|Object
85+
*/
86+
private function getContext()
87+
{
88+
$localeDate = $this->getMockBuilder(TimezoneInterface::class)
89+
->getMockForAbstractClass();
90+
91+
return (new ObjectManager($this))->getObject(
92+
Context::class,
93+
['localeDate' => $localeDate]
94+
);
5295
}
5396
}

0 commit comments

Comments
 (0)