diff options
Diffstat (limited to 'vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php')
-rw-r--r-- | vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php | 477 |
1 files changed, 477 insertions, 0 deletions
diff --git a/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php b/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php new file mode 100644 index 00000000..b9c1ebad --- /dev/null +++ b/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php | |||
@@ -0,0 +1,477 @@ | |||
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\Type; | ||
13 | |||
14 | use Symfony\Component\Form\FormError; | ||
15 | use Symfony\Component\Intl\Util\IntlTestHelper; | ||
16 | |||
17 | class DateTimeTypeTest extends TypeTestCase | ||
18 | { | ||
19 | protected function setUp() | ||
20 | { | ||
21 | IntlTestHelper::requireIntl($this); | ||
22 | |||
23 | parent::setUp(); | ||
24 | } | ||
25 | |||
26 | public function testSubmitDateTime() | ||
27 | { | ||
28 | $form = $this->factory->create('datetime', null, array( | ||
29 | 'model_timezone' => 'UTC', | ||
30 | 'view_timezone' => 'UTC', | ||
31 | 'date_widget' => 'choice', | ||
32 | 'time_widget' => 'choice', | ||
33 | 'input' => 'datetime', | ||
34 | )); | ||
35 | |||
36 | $form->submit(array( | ||
37 | 'date' => array( | ||
38 | 'day' => '2', | ||
39 | 'month' => '6', | ||
40 | 'year' => '2010', | ||
41 | ), | ||
42 | 'time' => array( | ||
43 | 'hour' => '3', | ||
44 | 'minute' => '4', | ||
45 | ), | ||
46 | )); | ||
47 | |||
48 | $dateTime = new \DateTime('2010-06-02 03:04:00 UTC'); | ||
49 | |||
50 | $this->assertDateTimeEquals($dateTime, $form->getData()); | ||
51 | } | ||
52 | |||
53 | public function testSubmitString() | ||
54 | { | ||
55 | $form = $this->factory->create('datetime', null, array( | ||
56 | 'model_timezone' => 'UTC', | ||
57 | 'view_timezone' => 'UTC', | ||
58 | 'input' => 'string', | ||
59 | 'date_widget' => 'choice', | ||
60 | 'time_widget' => 'choice', | ||
61 | )); | ||
62 | |||
63 | $form->submit(array( | ||
64 | 'date' => array( | ||
65 | 'day' => '2', | ||
66 | 'month' => '6', | ||
67 | 'year' => '2010', | ||
68 | ), | ||
69 | 'time' => array( | ||
70 | 'hour' => '3', | ||
71 | 'minute' => '4', | ||
72 | ), | ||
73 | )); | ||
74 | |||
75 | $this->assertEquals('2010-06-02 03:04:00', $form->getData()); | ||
76 | } | ||
77 | |||
78 | public function testSubmitTimestamp() | ||
79 | { | ||
80 | $form = $this->factory->create('datetime', null, array( | ||
81 | 'model_timezone' => 'UTC', | ||
82 | 'view_timezone' => 'UTC', | ||
83 | 'input' => 'timestamp', | ||
84 | 'date_widget' => 'choice', | ||
85 | 'time_widget' => 'choice', | ||
86 | )); | ||
87 | |||
88 | $form->submit(array( | ||
89 | 'date' => array( | ||
90 | 'day' => '2', | ||
91 | 'month' => '6', | ||
92 | 'year' => '2010', | ||
93 | ), | ||
94 | 'time' => array( | ||
95 | 'hour' => '3', | ||
96 | 'minute' => '4', | ||
97 | ), | ||
98 | )); | ||
99 | |||
100 | $dateTime = new \DateTime('2010-06-02 03:04:00 UTC'); | ||
101 | |||
102 | $this->assertEquals($dateTime->format('U'), $form->getData()); | ||
103 | } | ||
104 | |||
105 | public function testSubmitWithoutMinutes() | ||
106 | { | ||
107 | $form = $this->factory->create('datetime', null, array( | ||
108 | 'model_timezone' => 'UTC', | ||
109 | 'view_timezone' => 'UTC', | ||
110 | 'date_widget' => 'choice', | ||
111 | 'time_widget' => 'choice', | ||
112 | 'input' => 'datetime', | ||
113 | 'with_minutes' => false, | ||
114 | )); | ||
115 | |||
116 | $form->setData(new \DateTime('2010-06-02 03:04:05 UTC')); | ||
117 | |||
118 | $input = array( | ||
119 | 'date' => array( | ||
120 | 'day' => '2', | ||
121 | 'month' => '6', | ||
122 | 'year' => '2010', | ||
123 | ), | ||
124 | 'time' => array( | ||
125 | 'hour' => '3', | ||
126 | ), | ||
127 | ); | ||
128 | |||
129 | $form->submit($input); | ||
130 | |||
131 | $this->assertDateTimeEquals(new \DateTime('2010-06-02 03:00:00 UTC'), $form->getData()); | ||
132 | } | ||
133 | |||
134 | public function testSubmitWithSeconds() | ||
135 | { | ||
136 | $form = $this->factory->create('datetime', null, array( | ||
137 | 'model_timezone' => 'UTC', | ||
138 | 'view_timezone' => 'UTC', | ||
139 | 'date_widget' => 'choice', | ||
140 | 'time_widget' => 'choice', | ||
141 | 'input' => 'datetime', | ||
142 | 'with_seconds' => true, | ||
143 | )); | ||
144 | |||
145 | $form->setData(new \DateTime('2010-06-02 03:04:05 UTC')); | ||
146 | |||
147 | $input = array( | ||
148 | 'date' => array( | ||
149 | 'day' => '2', | ||
150 | 'month' => '6', | ||
151 | 'year' => '2010', | ||
152 | ), | ||
153 | 'time' => array( | ||
154 | 'hour' => '3', | ||
155 | 'minute' => '4', | ||
156 | 'second' => '5', | ||
157 | ), | ||
158 | ); | ||
159 | |||
160 | $form->submit($input); | ||
161 | |||
162 | $this->assertDateTimeEquals(new \DateTime('2010-06-02 03:04:05 UTC'), $form->getData()); | ||
163 | } | ||
164 | |||
165 | public function testSubmitDifferentTimezones() | ||
166 | { | ||
167 | $form = $this->factory->create('datetime', null, array( | ||
168 | 'model_timezone' => 'America/New_York', | ||
169 | 'view_timezone' => 'Pacific/Tahiti', | ||
170 | 'date_widget' => 'choice', | ||
171 | 'time_widget' => 'choice', | ||
172 | 'input' => 'string', | ||
173 | 'with_seconds' => true, | ||
174 | )); | ||
175 | |||
176 | $dateTime = new \DateTime('2010-06-02 03:04:05 Pacific/Tahiti'); | ||
177 | |||
178 | $form->submit(array( | ||
179 | 'date' => array( | ||
180 | 'day' => (int) $dateTime->format('d'), | ||
181 | 'month' => (int) $dateTime->format('m'), | ||
182 | 'year' => (int) $dateTime->format('Y'), | ||
183 | ), | ||
184 | 'time' => array( | ||
185 | 'hour' => (int) $dateTime->format('H'), | ||
186 | 'minute' => (int) $dateTime->format('i'), | ||
187 | 'second' => (int) $dateTime->format('s'), | ||
188 | ), | ||
189 | )); | ||
190 | |||
191 | $dateTime->setTimezone(new \DateTimeZone('America/New_York')); | ||
192 | |||
193 | $this->assertEquals($dateTime->format('Y-m-d H:i:s'), $form->getData()); | ||
194 | } | ||
195 | |||
196 | public function testSubmitDifferentTimezonesDateTime() | ||
197 | { | ||
198 | $form = $this->factory->create('datetime', null, array( | ||
199 | 'model_timezone' => 'America/New_York', | ||
200 | 'view_timezone' => 'Pacific/Tahiti', | ||
201 | 'widget' => 'single_text', | ||
202 | 'input' => 'datetime', | ||
203 | )); | ||
204 | |||
205 | $outputTime = new \DateTime('2010-06-02 03:04:00 Pacific/Tahiti'); | ||
206 | |||
207 | $form->submit('2010-06-02T03:04:00-10:00'); | ||
208 | |||
209 | $outputTime->setTimezone(new \DateTimeZone('America/New_York')); | ||
210 | |||
211 | $this->assertDateTimeEquals($outputTime, $form->getData()); | ||
212 | $this->assertEquals('2010-06-02T03:04:00-10:00', $form->getViewData()); | ||
213 | } | ||
214 | |||
215 | public function testSubmitStringSingleText() | ||
216 | { | ||
217 | $form = $this->factory->create('datetime', null, array( | ||
218 | 'model_timezone' => 'UTC', | ||
219 | 'view_timezone' => 'UTC', | ||
220 | 'input' => 'string', | ||
221 | 'widget' => 'single_text', | ||
222 | )); | ||
223 | |||
224 | $form->submit('2010-06-02T03:04:00Z'); | ||
225 | |||
226 | $this->assertEquals('2010-06-02 03:04:00', $form->getData()); | ||
227 | $this->assertEquals('2010-06-02T03:04:00Z', $form->getViewData()); | ||
228 | } | ||
229 | |||
230 | public function testSubmitStringSingleTextWithSeconds() | ||
231 | { | ||
232 | $form = $this->factory->create('datetime', null, array( | ||
233 | 'model_timezone' => 'UTC', | ||
234 | 'view_timezone' => 'UTC', | ||
235 | 'input' => 'string', | ||
236 | 'widget' => 'single_text', | ||
237 | 'with_seconds' => true, | ||
238 | )); | ||
239 | |||
240 | $form->submit('2010-06-02T03:04:05Z'); | ||
241 | |||
242 | $this->assertEquals('2010-06-02 03:04:05', $form->getData()); | ||
243 | $this->assertEquals('2010-06-02T03:04:05Z', $form->getViewData()); | ||
244 | } | ||
245 | |||
246 | public function testSubmitDifferentPattern() | ||
247 | { | ||
248 | $form = $this->factory->create('datetime', null, array( | ||
249 | 'date_format' => 'MM*yyyy*dd', | ||
250 | 'date_widget' => 'single_text', | ||
251 | 'time_widget' => 'single_text', | ||
252 | 'input' => 'datetime', | ||
253 | )); | ||
254 | |||
255 | $dateTime = new \DateTime('2010-06-02 03:04'); | ||
256 | |||
257 | $form->submit(array( | ||
258 | 'date' => '06*2010*02', | ||
259 | 'time' => '03:04', | ||
260 | )); | ||
261 | |||
262 | $this->assertDateTimeEquals($dateTime, $form->getData()); | ||
263 | } | ||
264 | |||
265 | // Bug fix | ||
266 | public function testInitializeWithDateTime() | ||
267 | { | ||
268 | // Throws an exception if "data_class" option is not explicitly set | ||
269 | // to null in the type | ||
270 | $this->factory->create('datetime', new \DateTime()); | ||
271 | } | ||
272 | |||
273 | public function testSingleTextWidgetShouldUseTheRightInputType() | ||
274 | { | ||
275 | $form = $this->factory->create('datetime', null, array( | ||
276 | 'widget' => 'single_text', | ||
277 | )); | ||
278 | |||
279 | $view = $form->createView(); | ||
280 | $this->assertEquals('datetime', $view->vars['type']); | ||
281 | } | ||
282 | |||
283 | public function testPassDefaultEmptyValueToViewIfNotRequired() | ||
284 | { | ||
285 | $form = $this->factory->create('datetime', null, array( | ||
286 | 'required' => false, | ||
287 | 'with_seconds' => true, | ||
288 | )); | ||
289 | |||
290 | $view = $form->createView(); | ||
291 | $this->assertSame('', $view['date']['year']->vars['empty_value']); | ||
292 | $this->assertSame('', $view['date']['month']->vars['empty_value']); | ||
293 | $this->assertSame('', $view['date']['day']->vars['empty_value']); | ||
294 | $this->assertSame('', $view['time']['hour']->vars['empty_value']); | ||
295 | $this->assertSame('', $view['time']['minute']->vars['empty_value']); | ||
296 | $this->assertSame('', $view['time']['second']->vars['empty_value']); | ||
297 | } | ||
298 | |||
299 | public function testPassNoEmptyValueToViewIfRequired() | ||
300 | { | ||
301 | $form = $this->factory->create('datetime', null, array( | ||
302 | 'required' => true, | ||
303 | 'with_seconds' => true, | ||
304 | )); | ||
305 | |||
306 | $view = $form->createView(); | ||
307 | $this->assertNull($view['date']['year']->vars['empty_value']); | ||
308 | $this->assertNull($view['date']['month']->vars['empty_value']); | ||
309 | $this->assertNull($view['date']['day']->vars['empty_value']); | ||
310 | $this->assertNull($view['time']['hour']->vars['empty_value']); | ||
311 | $this->assertNull($view['time']['minute']->vars['empty_value']); | ||
312 | $this->assertNull($view['time']['second']->vars['empty_value']); | ||
313 | } | ||
314 | |||
315 | public function testPassEmptyValueAsString() | ||
316 | { | ||
317 | $form = $this->factory->create('datetime', null, array( | ||
318 | 'empty_value' => 'Empty', | ||
319 | 'with_seconds' => true, | ||
320 | )); | ||
321 | |||
322 | $view = $form->createView(); | ||
323 | $this->assertSame('Empty', $view['date']['year']->vars['empty_value']); | ||
324 | $this->assertSame('Empty', $view['date']['month']->vars['empty_value']); | ||
325 | $this->assertSame('Empty', $view['date']['day']->vars['empty_value']); | ||
326 | $this->assertSame('Empty', $view['time']['hour']->vars['empty_value']); | ||
327 | $this->assertSame('Empty', $view['time']['minute']->vars['empty_value']); | ||
328 | $this->assertSame('Empty', $view['time']['second']->vars['empty_value']); | ||
329 | } | ||
330 | |||
331 | public function testPassEmptyValueAsArray() | ||
332 | { | ||
333 | $form = $this->factory->create('datetime', null, array( | ||
334 | 'empty_value' => array( | ||
335 | 'year' => 'Empty year', | ||
336 | 'month' => 'Empty month', | ||
337 | 'day' => 'Empty day', | ||
338 | 'hour' => 'Empty hour', | ||
339 | 'minute' => 'Empty minute', | ||
340 | 'second' => 'Empty second', | ||
341 | ), | ||
342 | 'with_seconds' => true, | ||
343 | )); | ||
344 | |||
345 | $view = $form->createView(); | ||
346 | $this->assertSame('Empty year', $view['date']['year']->vars['empty_value']); | ||
347 | $this->assertSame('Empty month', $view['date']['month']->vars['empty_value']); | ||
348 | $this->assertSame('Empty day', $view['date']['day']->vars['empty_value']); | ||
349 | $this->assertSame('Empty hour', $view['time']['hour']->vars['empty_value']); | ||
350 | $this->assertSame('Empty minute', $view['time']['minute']->vars['empty_value']); | ||
351 | $this->assertSame('Empty second', $view['time']['second']->vars['empty_value']); | ||
352 | } | ||
353 | |||
354 | public function testPassEmptyValueAsPartialArrayAddEmptyIfNotRequired() | ||
355 | { | ||
356 | $form = $this->factory->create('datetime', null, array( | ||
357 | 'required' => false, | ||
358 | 'empty_value' => array( | ||
359 | 'year' => 'Empty year', | ||
360 | 'day' => 'Empty day', | ||
361 | 'hour' => 'Empty hour', | ||
362 | 'second' => 'Empty second', | ||
363 | ), | ||
364 | 'with_seconds' => true, | ||
365 | )); | ||
366 | |||
367 | $view = $form->createView(); | ||
368 | $this->assertSame('Empty year', $view['date']['year']->vars['empty_value']); | ||
369 | $this->assertSame('', $view['date']['month']->vars['empty_value']); | ||
370 | $this->assertSame('Empty day', $view['date']['day']->vars['empty_value']); | ||
371 | $this->assertSame('Empty hour', $view['time']['hour']->vars['empty_value']); | ||
372 | $this->assertSame('', $view['time']['minute']->vars['empty_value']); | ||
373 | $this->assertSame('Empty second', $view['time']['second']->vars['empty_value']); | ||
374 | } | ||
375 | |||
376 | public function testPassEmptyValueAsPartialArrayAddNullIfRequired() | ||
377 | { | ||
378 | $form = $this->factory->create('datetime', null, array( | ||
379 | 'required' => true, | ||
380 | 'empty_value' => array( | ||
381 | 'year' => 'Empty year', | ||
382 | 'day' => 'Empty day', | ||
383 | 'hour' => 'Empty hour', | ||
384 | 'second' => 'Empty second', | ||
385 | ), | ||
386 | 'with_seconds' => true, | ||
387 | )); | ||
388 | |||
389 | $view = $form->createView(); | ||
390 | $this->assertSame('Empty year', $view['date']['year']->vars['empty_value']); | ||
391 | $this->assertNull($view['date']['month']->vars['empty_value']); | ||
392 | $this->assertSame('Empty day', $view['date']['day']->vars['empty_value']); | ||
393 | $this->assertSame('Empty hour', $view['time']['hour']->vars['empty_value']); | ||
394 | $this->assertNull($view['time']['minute']->vars['empty_value']); | ||
395 | $this->assertSame('Empty second', $view['time']['second']->vars['empty_value']); | ||
396 | } | ||
397 | |||
398 | public function testPassHtml5TypeIfSingleTextAndHtml5Format() | ||
399 | { | ||
400 | $form = $this->factory->create('datetime', null, array( | ||
401 | 'widget' => 'single_text', | ||
402 | )); | ||
403 | |||
404 | $view = $form->createView(); | ||
405 | $this->assertSame('datetime', $view->vars['type']); | ||
406 | } | ||
407 | |||
408 | public function testDontPassHtml5TypeIfNotHtml5Format() | ||
409 | { | ||
410 | $form = $this->factory->create('datetime', null, array( | ||
411 | 'widget' => 'single_text', | ||
412 | 'format' => 'yyyy-MM-dd HH:mm', | ||
413 | )); | ||
414 | |||
415 | $view = $form->createView(); | ||
416 | $this->assertFalse(isset($view->vars['type'])); | ||
417 | } | ||
418 | |||
419 | public function testDontPassHtml5TypeIfNotSingleText() | ||
420 | { | ||
421 | $form = $this->factory->create('datetime', null, array( | ||
422 | 'widget' => 'text', | ||
423 | )); | ||
424 | |||
425 | $view = $form->createView(); | ||
426 | $this->assertFalse(isset($view->vars['type'])); | ||
427 | } | ||
428 | |||
429 | public function testDateTypeChoiceErrorsBubbleUp() | ||
430 | { | ||
431 | $error = new FormError('Invalid!'); | ||
432 | $form = $this->factory->create('datetime', null); | ||
433 | |||
434 | $form['date']->addError($error); | ||
435 | |||
436 | $this->assertSame(array(), $form['date']->getErrors()); | ||
437 | $this->assertSame(array($error), $form->getErrors()); | ||
438 | } | ||
439 | |||
440 | public function testDateTypeSingleTextErrorsBubbleUp() | ||
441 | { | ||
442 | $error = new FormError('Invalid!'); | ||
443 | $form = $this->factory->create('datetime', null, array( | ||
444 | 'date_widget' => 'single_text' | ||
445 | )); | ||
446 | |||
447 | $form['date']->addError($error); | ||
448 | |||
449 | $this->assertSame(array(), $form['date']->getErrors()); | ||
450 | $this->assertSame(array($error), $form->getErrors()); | ||
451 | } | ||
452 | |||
453 | public function testTimeTypeChoiceErrorsBubbleUp() | ||
454 | { | ||
455 | $error = new FormError('Invalid!'); | ||
456 | $form = $this->factory->create('datetime', null); | ||
457 | |||
458 | $form['time']->addError($error); | ||
459 | |||
460 | $this->assertSame(array(), $form['time']->getErrors()); | ||
461 | $this->assertSame(array($error), $form->getErrors()); | ||
462 | } | ||
463 | |||
464 | public function testTimeTypeSingleTextErrorsBubbleUp() | ||
465 | { | ||
466 | $error = new FormError('Invalid!'); | ||
467 | $form = $this->factory->create('datetime', null, array( | ||
468 | 'time_widget' => 'single_text' | ||
469 | )); | ||
470 | |||
471 | $form['time']->addError($error); | ||
472 | |||
473 | $this->assertSame(array(), $form['time']->getErrors()); | ||
474 | $this->assertSame(array($error), $form->getErrors()); | ||
475 | } | ||
476 | |||
477 | } | ||