diff options
Diffstat (limited to 'vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php')
-rw-r--r-- | vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php b/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php new file mode 100644 index 00000000..cb50fc36 --- /dev/null +++ b/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php | |||
@@ -0,0 +1,275 @@ | |||
1 | <?php | ||
2 | |||
3 | /* | ||
4 | * This file is part of the Symfony package. | ||
5 | * | ||
6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
7 | * | ||
8 | * For the full copyright and license information, please view the LICENSE | ||
9 | * file that was distributed with this source code. | ||
10 | */ | ||
11 | |||
12 | namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; | ||
13 | |||
14 | use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer; | ||
15 | use Symfony\Component\Intl\Util\IntlTestHelper; | ||
16 | |||
17 | class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase | ||
18 | { | ||
19 | protected $dateTime; | ||
20 | protected $dateTimeWithoutSeconds; | ||
21 | |||
22 | protected function setUp() | ||
23 | { | ||
24 | parent::setUp(); | ||
25 | |||
26 | // Since we test against "de_AT", we need the full implementation | ||
27 | IntlTestHelper::requireFullIntl($this); | ||
28 | |||
29 | \Locale::setDefault('de_AT'); | ||
30 | |||
31 | $this->dateTime = new \DateTime('2010-02-03 04:05:06 UTC'); | ||
32 | $this->dateTimeWithoutSeconds = new \DateTime('2010-02-03 04:05:00 UTC'); | ||
33 | } | ||
34 | |||
35 | protected function tearDown() | ||
36 | { | ||
37 | $this->dateTime = null; | ||
38 | $this->dateTimeWithoutSeconds = null; | ||
39 | } | ||
40 | |||
41 | public static function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false) | ||
42 | { | ||
43 | if ($expected instanceof \DateTime && $actual instanceof \DateTime) { | ||
44 | $expected = $expected->format('c'); | ||
45 | $actual = $actual->format('c'); | ||
46 | } | ||
47 | |||
48 | parent::assertEquals($expected, $actual, $message, $delta, $maxDepth, $canonicalize, $ignoreCase); | ||
49 | } | ||
50 | |||
51 | public function dataProvider() | ||
52 | { | ||
53 | return array( | ||
54 | array(\IntlDateFormatter::SHORT, null, null, '03.02.10 04:05', '2010-02-03 04:05:00 UTC'), | ||
55 | array(\IntlDateFormatter::MEDIUM, null, null, '03.02.2010 04:05', '2010-02-03 04:05:00 UTC'), | ||
56 | array(\IntlDateFormatter::LONG, null, null, '03. Februar 2010 04:05', '2010-02-03 04:05:00 UTC'), | ||
57 | array(\IntlDateFormatter::FULL, null, null, 'Mittwoch, 03. Februar 2010 04:05', '2010-02-03 04:05:00 UTC'), | ||
58 | array(\IntlDateFormatter::SHORT, \IntlDateFormatter::NONE, null, '03.02.10', '2010-02-03 00:00:00 UTC'), | ||
59 | array(\IntlDateFormatter::MEDIUM, \IntlDateFormatter::NONE, null, '03.02.2010', '2010-02-03 00:00:00 UTC'), | ||
60 | array(\IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, '03. Februar 2010', '2010-02-03 00:00:00 UTC'), | ||
61 | array(\IntlDateFormatter::FULL, \IntlDateFormatter::NONE, null, 'Mittwoch, 03. Februar 2010', '2010-02-03 00:00:00 UTC'), | ||
62 | array(null, \IntlDateFormatter::SHORT, null, '03.02.2010 04:05', '2010-02-03 04:05:00 UTC'), | ||
63 | array(null, \IntlDateFormatter::MEDIUM, null, '03.02.2010 04:05:06', '2010-02-03 04:05:06 UTC'), | ||
64 | array(null, \IntlDateFormatter::LONG, null, '03.02.2010 04:05:06 GMT', '2010-02-03 04:05:06 UTC'), | ||
65 | // see below for extra test case for time format FULL | ||
66 | array(\IntlDateFormatter::NONE, \IntlDateFormatter::SHORT, null, '04:05', '1970-01-01 04:05:00 UTC'), | ||
67 | array(\IntlDateFormatter::NONE, \IntlDateFormatter::MEDIUM, null, '04:05:06', '1970-01-01 04:05:06 UTC'), | ||
68 | array(\IntlDateFormatter::NONE, \IntlDateFormatter::LONG, null, '04:05:06 GMT', '1970-01-01 04:05:06 UTC'), | ||
69 | array(null, null, 'yyyy-MM-dd HH:mm:00', '2010-02-03 04:05:00', '2010-02-03 04:05:00 UTC'), | ||
70 | array(null, null, 'yyyy-MM-dd HH:mm', '2010-02-03 04:05', '2010-02-03 04:05:00 UTC'), | ||
71 | array(null, null, 'yyyy-MM-dd HH', '2010-02-03 04', '2010-02-03 04:00:00 UTC'), | ||
72 | array(null, null, 'yyyy-MM-dd', '2010-02-03', '2010-02-03 00:00:00 UTC'), | ||
73 | array(null, null, 'yyyy-MM', '2010-02', '2010-02-01 00:00:00 UTC'), | ||
74 | array(null, null, 'yyyy', '2010', '2010-01-01 00:00:00 UTC'), | ||
75 | array(null, null, 'dd-MM-yyyy', '03-02-2010', '2010-02-03 00:00:00 UTC'), | ||
76 | array(null, null, 'HH:mm:ss', '04:05:06', '1970-01-01 04:05:06 UTC'), | ||
77 | array(null, null, 'HH:mm:00', '04:05:00', '1970-01-01 04:05:00 UTC'), | ||
78 | array(null, null, 'HH:mm', '04:05', '1970-01-01 04:05:00 UTC'), | ||
79 | array(null, null, 'HH', '04', '1970-01-01 04:00:00 UTC'), | ||
80 | ); | ||
81 | } | ||
82 | |||
83 | /** | ||
84 | * @dataProvider dataProvider | ||
85 | */ | ||
86 | public function testTransform($dateFormat, $timeFormat, $pattern, $output, $input) | ||
87 | { | ||
88 | $transformer = new DateTimeToLocalizedStringTransformer( | ||
89 | 'UTC', | ||
90 | 'UTC', | ||
91 | $dateFormat, | ||
92 | $timeFormat, | ||
93 | \IntlDateFormatter::GREGORIAN, | ||
94 | $pattern | ||
95 | ); | ||
96 | |||
97 | $input = new \DateTime($input); | ||
98 | |||
99 | $this->assertEquals($output, $transformer->transform($input)); | ||
100 | } | ||
101 | |||
102 | public function testTransformFullTime() | ||
103 | { | ||
104 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', null, \IntlDateFormatter::FULL); | ||
105 | |||
106 | $this->assertEquals('03.02.2010 04:05:06 GMT', $transformer->transform($this->dateTime)); | ||
107 | } | ||
108 | |||
109 | public function testTransformToDifferentLocale() | ||
110 | { | ||
111 | \Locale::setDefault('en_US'); | ||
112 | |||
113 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC'); | ||
114 | |||
115 | $this->assertEquals('Feb 3, 2010, 4:05 AM', $transformer->transform($this->dateTime)); | ||
116 | } | ||
117 | |||
118 | public function testTransformEmpty() | ||
119 | { | ||
120 | $transformer = new DateTimeToLocalizedStringTransformer(); | ||
121 | |||
122 | $this->assertSame('', $transformer->transform(null)); | ||
123 | } | ||
124 | |||
125 | public function testTransformWithDifferentTimezones() | ||
126 | { | ||
127 | $transformer = new DateTimeToLocalizedStringTransformer('America/New_York', 'Asia/Hong_Kong'); | ||
128 | |||
129 | $input = new \DateTime('2010-02-03 04:05:06 America/New_York'); | ||
130 | |||
131 | $dateTime = clone $input; | ||
132 | $dateTime->setTimezone(new \DateTimeZone('Asia/Hong_Kong')); | ||
133 | |||
134 | $this->assertEquals($dateTime->format('d.m.Y H:i'), $transformer->transform($input)); | ||
135 | } | ||
136 | |||
137 | public function testTransformWithDifferentPatterns() | ||
138 | { | ||
139 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, \IntlDateFormatter::GREGORIAN, 'MM*yyyy*dd HH|mm|ss'); | ||
140 | |||
141 | $this->assertEquals('02*2010*03 04|05|06', $transformer->transform($this->dateTime)); | ||
142 | } | ||
143 | |||
144 | /** | ||
145 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | ||
146 | */ | ||
147 | public function testTransformRequiresValidDateTime() | ||
148 | { | ||
149 | $transformer = new DateTimeToLocalizedStringTransformer(); | ||
150 | $transformer->transform('2010-01-01'); | ||
151 | } | ||
152 | |||
153 | public function testTransformWrapsIntlErrors() | ||
154 | { | ||
155 | $transformer = new DateTimeToLocalizedStringTransformer(); | ||
156 | |||
157 | // HOW TO REPRODUCE? | ||
158 | |||
159 | //$this->setExpectedException('Symfony\Component\Form\Extension\Core\DataTransformer\Transdate_formationFailedException'); | ||
160 | |||
161 | //$transformer->transform(1.5); | ||
162 | } | ||
163 | |||
164 | /** | ||
165 | * @dataProvider dataProvider | ||
166 | */ | ||
167 | public function testReverseTransform($dateFormat, $timeFormat, $pattern, $input, $output) | ||
168 | { | ||
169 | $transformer = new DateTimeToLocalizedStringTransformer( | ||
170 | 'UTC', | ||
171 | 'UTC', | ||
172 | $dateFormat, | ||
173 | $timeFormat, | ||
174 | \IntlDateFormatter::GREGORIAN, | ||
175 | $pattern | ||
176 | ); | ||
177 | |||
178 | $output = new \DateTime($output); | ||
179 | |||
180 | $this->assertEquals($output, $transformer->reverseTransform($input)); | ||
181 | } | ||
182 | |||
183 | public function testReverseTransformFullTime() | ||
184 | { | ||
185 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', null, \IntlDateFormatter::FULL); | ||
186 | |||
187 | $this->assertDateTimeEquals($this->dateTime, $transformer->reverseTransform('03.02.2010 04:05:06 GMT+00:00')); | ||
188 | } | ||
189 | |||
190 | public function testReverseTransformFromDifferentLocale() | ||
191 | { | ||
192 | \Locale::setDefault('en_US'); | ||
193 | |||
194 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC'); | ||
195 | |||
196 | $this->assertDateTimeEquals($this->dateTimeWithoutSeconds, $transformer->reverseTransform('Feb 3, 2010, 04:05 AM')); | ||
197 | } | ||
198 | |||
199 | public function testReverseTransformWithDifferentTimezones() | ||
200 | { | ||
201 | $transformer = new DateTimeToLocalizedStringTransformer('America/New_York', 'Asia/Hong_Kong'); | ||
202 | |||
203 | $dateTime = new \DateTime('2010-02-03 04:05:00 Asia/Hong_Kong'); | ||
204 | $dateTime->setTimezone(new \DateTimeZone('America/New_York')); | ||
205 | |||
206 | $this->assertDateTimeEquals($dateTime, $transformer->reverseTransform('03.02.2010 04:05')); | ||
207 | } | ||
208 | |||
209 | public function testReverseTransformWithDifferentPatterns() | ||
210 | { | ||
211 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, \IntlDateFormatter::GREGORIAN, 'MM*yyyy*dd HH|mm|ss'); | ||
212 | |||
213 | $this->assertDateTimeEquals($this->dateTime, $transformer->reverseTransform('02*2010*03 04|05|06')); | ||
214 | } | ||
215 | |||
216 | public function testReverseTransformEmpty() | ||
217 | { | ||
218 | $transformer = new DateTimeToLocalizedStringTransformer(); | ||
219 | |||
220 | $this->assertNull($transformer->reverseTransform('')); | ||
221 | } | ||
222 | |||
223 | /** | ||
224 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | ||
225 | */ | ||
226 | public function testReverseTransformRequiresString() | ||
227 | { | ||
228 | $transformer = new DateTimeToLocalizedStringTransformer(); | ||
229 | $transformer->reverseTransform(12345); | ||
230 | } | ||
231 | |||
232 | /** | ||
233 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | ||
234 | */ | ||
235 | public function testReverseTransformWrapsIntlErrors() | ||
236 | { | ||
237 | $transformer = new DateTimeToLocalizedStringTransformer(); | ||
238 | $transformer->reverseTransform('12345'); | ||
239 | } | ||
240 | |||
241 | /** | ||
242 | * @expectedException \Symfony\Component\Form\Exception\UnexpectedTypeException | ||
243 | */ | ||
244 | public function testValidateDateFormatOption() | ||
245 | { | ||
246 | new DateTimeToLocalizedStringTransformer(null, null, 'foobar'); | ||
247 | } | ||
248 | |||
249 | /** | ||
250 | * @expectedException \Symfony\Component\Form\Exception\UnexpectedTypeException | ||
251 | */ | ||
252 | public function testValidateTimeFormatOption() | ||
253 | { | ||
254 | new DateTimeToLocalizedStringTransformer(null, null, null, 'foobar'); | ||
255 | } | ||
256 | |||
257 | /** | ||
258 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | ||
259 | */ | ||
260 | public function testReverseTransformWithNonExistingDate() | ||
261 | { | ||
262 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', \IntlDateFormatter::SHORT); | ||
263 | |||
264 | $this->assertDateTimeEquals($this->dateTimeWithoutSeconds, $transformer->reverseTransform('31.04.10 04:05')); | ||
265 | } | ||
266 | |||
267 | /** | ||
268 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | ||
269 | */ | ||
270 | public function testReverseTransformOutOfTimestampRange() | ||
271 | { | ||
272 | $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC'); | ||
273 | $transformer->reverseTransform('1789-07-14'); | ||
274 | } | ||
275 | } | ||