forked from yiisoft/yii2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFormatConverterTest.php
123 lines (101 loc) · 4.5 KB
/
FormatConverterTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yiiunit\framework\helpers;
use Yii;
use yii\helpers\FormatConverter;
use yii\i18n\Formatter;
use yiiunit\framework\i18n\IntlTestHelper;
use yiiunit\TestCase;
/**
* @group helpers
* @group i18n
*/
class FormatConverterTest extends TestCase
{
protected function setUp()
{
parent::setUp();
IntlTestHelper::setIntlStatus($this);
$this->mockApplication([
'timeZone' => 'UTC',
'language' => 'ru-RU',
]);
}
protected function tearDown()
{
parent::tearDown();
IntlTestHelper::resetIntlStatus();
}
public function testIntlIcuToPhpShortForm()
{
$this->assertEquals('n/j/y', FormatConverter::convertDateIcuToPhp('short', 'date', 'en-US'));
$this->assertEquals('d.m.y', FormatConverter::convertDateIcuToPhp('short', 'date', 'de-DE'));
}
public function testEscapedIcuToPhp()
{
$this->assertEquals('l, F j, Y \\a\\t g:i:s A T', FormatConverter::convertDateIcuToPhp('EEEE, MMMM d, y \'at\' h:mm:ss a zzzz'));
$this->assertEquals('\\o\\\'\\c\\l\\o\\c\\k', FormatConverter::convertDateIcuToPhp('\'o\'\'clock\''));
}
public function testEscapedIcuToJui()
{
$this->assertEquals('l, F j, Y \\a\\t g:i:s A T', FormatConverter::convertDateIcuToPhp('EEEE, MMMM d, y \'at\' h:mm:ss a zzzz'));
$this->assertEquals('\'o\'\'clock\'', FormatConverter::convertDateIcuToJui('\'o\'\'clock\''));
}
public function testIntlOneDigitIcu()
{
$formatter = new Formatter(['locale' => 'en-US']);
$this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'php:d.n.Y'));
$this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.M.yyyy'));
$this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.L.yyyy'));
}
public function testOneDigitIcu()
{
$formatter = new Formatter(['locale' => 'en-US']);
$this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'php:d.n.Y'));
$this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.M.yyyy'));
$this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.L.yyyy'));
}
public function testIntlUtf8Ru()
{
$this->assertEquals('d M Y \г.', FormatConverter::convertDateIcuToPhp("dd MMM y 'г'.", 'date', 'ru-RU'));
$this->assertEquals("dd M yy 'г'.", FormatConverter::convertDateIcuToJui("dd MMM y 'г'.", 'date', 'ru-RU'));
$formatter = new Formatter(['locale' => 'ru-RU']);
// There is a dot after month name in updated ICU data and no dot in old data. Both are acceptable.
// See https://github.com/yiisoft/yii2/issues/9906
$this->assertRegExp('/24 авг\.? 2014 г\./', $formatter->asDate('2014-8-24', "dd MMM y 'г'."));
}
public function testPhpToICU()
{
$expected = "yyyy-MM-dd'T'HH:mm:ssxxx";
$actual = FormatConverter::convertDatePhpToIcu('Y-m-d\TH:i:sP');
$this->assertEquals($expected, $actual);
$expected = "yyyy-MM-dd'Yii'HH:mm:ssxxx";
$actual = FormatConverter::convertDatePhpToIcu('Y-m-d\Y\i\iH:i:sP');
$this->assertEquals($expected, $actual);
$expected = "yyyy-MM-dd'Yii'HH:mm:ssxxx''''";
$actual = FormatConverter::convertDatePhpToIcu("Y-m-d\Y\i\iH:i:sP''");
$this->assertEquals($expected, $actual);
$expected = "yyyy-MM-dd'Yii'\HH:mm:ssxxx''''";
$actual = FormatConverter::convertDatePhpToIcu("Y-m-d\Y\i\i\\\\H:i:sP''");
$this->assertEquals($expected, $actual);
$expected = "'dDjlNSwZWFmMntLoYyaBghHisueIOPTZcru'";
$actual = FormatConverter::convertDatePhpToIcu('\d\D\j\l\N\S\w\Z\W\F\m\M\n\t\L\o\Y\y\a\B\g\h\H\i\s\u\e\I\O\P\T\Z\c\r\u');
$this->assertEquals($expected, $actual);
$expected = "yyyy-MM-dd'T'HH:mm:ssxxx";
$actual = FormatConverter::convertDatePhpToIcu('c');
$this->assertEquals($expected, $actual);
}
public function testPhpFormatC()
{
$time = time();
$formatter = new Formatter(['locale' => 'en-US']);
$this->assertEquals(date('c', $time), $formatter->asDatetime($time, 'php:c'));
date_default_timezone_set('Europe/Moscow');
$formatter = new Formatter(['locale' => 'ru-RU', 'timeZone' => 'Europe/Moscow']);
$this->assertEquals(date('c', $time), $formatter->asDatetime($time, 'php:c'));
}
}