diff options
Diffstat (limited to 'vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php')
-rw-r--r-- | vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php | 781 |
1 files changed, 781 insertions, 0 deletions
diff --git a/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php new file mode 100644 index 00000000..2aa155e7 --- /dev/null +++ b/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php | |||
@@ -0,0 +1,781 @@ | |||
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\Extension\Core\View\ChoiceView; | ||
15 | use Symfony\Component\Form\FormError; | ||
16 | use Symfony\Component\Intl\Util\IntlTestHelper; | ||
17 | |||
18 | class DateTypeTest extends TypeTestCase | ||
19 | { | ||
20 | protected function setUp() | ||
21 | { | ||
22 | parent::setUp(); | ||
23 | |||
24 | // we test against "de_AT", so we need the full implementation | ||
25 | IntlTestHelper::requireFullIntl($this); | ||
26 | |||
27 | \Locale::setDefault('de_AT'); | ||
28 | } | ||
29 | |||
30 | /** | ||
31 | * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | ||
32 | */ | ||
33 | public function testInvalidWidgetOption() | ||
34 | { | ||
35 | $this->factory->create('date', null, array( | ||
36 | 'widget' => 'fake_widget', | ||
37 | )); | ||
38 | } | ||
39 | |||
40 | /** | ||
41 | * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | ||
42 | */ | ||
43 | public function testInvalidInputOption() | ||
44 | { | ||
45 | $this->factory->create('date', null, array( | ||
46 | 'input' => 'fake_input', | ||
47 | )); | ||
48 | } | ||
49 | |||
50 | public function testSubmitFromSingleTextDateTimeWithDefaultFormat() | ||
51 | { | ||
52 | $form = $this->factory->create('date', null, array( | ||
53 | 'model_timezone' => 'UTC', | ||
54 | 'view_timezone' => 'UTC', | ||
55 | 'widget' => 'single_text', | ||
56 | 'input' => 'datetime', | ||
57 | )); | ||
58 | |||
59 | $form->submit('2010-06-02'); | ||
60 | |||
61 | $this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $form->getData()); | ||
62 | $this->assertEquals('2010-06-02', $form->getViewData()); | ||
63 | } | ||
64 | |||
65 | public function testSubmitFromSingleTextDateTime() | ||
66 | { | ||
67 | $form = $this->factory->create('date', null, array( | ||
68 | 'format' => \IntlDateFormatter::MEDIUM, | ||
69 | 'model_timezone' => 'UTC', | ||
70 | 'view_timezone' => 'UTC', | ||
71 | 'widget' => 'single_text', | ||
72 | 'input' => 'datetime', | ||
73 | )); | ||
74 | |||
75 | $form->submit('2.6.2010'); | ||
76 | |||
77 | $this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $form->getData()); | ||
78 | $this->assertEquals('02.06.2010', $form->getViewData()); | ||
79 | } | ||
80 | |||
81 | public function testSubmitFromSingleTextString() | ||
82 | { | ||
83 | $form = $this->factory->create('date', null, array( | ||
84 | 'format' => \IntlDateFormatter::MEDIUM, | ||
85 | 'model_timezone' => 'UTC', | ||
86 | 'view_timezone' => 'UTC', | ||
87 | 'widget' => 'single_text', | ||
88 | 'input' => 'string', | ||
89 | )); | ||
90 | |||
91 | $form->submit('2.6.2010'); | ||
92 | |||
93 | $this->assertEquals('2010-06-02', $form->getData()); | ||
94 | $this->assertEquals('02.06.2010', $form->getViewData()); | ||
95 | } | ||
96 | |||
97 | public function testSubmitFromSingleTextTimestamp() | ||
98 | { | ||
99 | $form = $this->factory->create('date', null, array( | ||
100 | 'format' => \IntlDateFormatter::MEDIUM, | ||
101 | 'model_timezone' => 'UTC', | ||
102 | 'view_timezone' => 'UTC', | ||
103 | 'widget' => 'single_text', | ||
104 | 'input' => 'timestamp', | ||
105 | )); | ||
106 | |||
107 | $form->submit('2.6.2010'); | ||
108 | |||
109 | $dateTime = new \DateTime('2010-06-02 UTC'); | ||
110 | |||
111 | $this->assertEquals($dateTime->format('U'), $form->getData()); | ||
112 | $this->assertEquals('02.06.2010', $form->getViewData()); | ||
113 | } | ||
114 | |||
115 | public function testSubmitFromSingleTextRaw() | ||
116 | { | ||
117 | $form = $this->factory->create('date', null, array( | ||
118 | 'format' => \IntlDateFormatter::MEDIUM, | ||
119 | 'model_timezone' => 'UTC', | ||
120 | 'view_timezone' => 'UTC', | ||
121 | 'widget' => 'single_text', | ||
122 | 'input' => 'array', | ||
123 | )); | ||
124 | |||
125 | $form->submit('2.6.2010'); | ||
126 | |||
127 | $output = array( | ||
128 | 'day' => '2', | ||
129 | 'month' => '6', | ||
130 | 'year' => '2010', | ||
131 | ); | ||
132 | |||
133 | $this->assertEquals($output, $form->getData()); | ||
134 | $this->assertEquals('02.06.2010', $form->getViewData()); | ||
135 | } | ||
136 | |||
137 | public function testSubmitFromText() | ||
138 | { | ||
139 | $form = $this->factory->create('date', null, array( | ||
140 | 'model_timezone' => 'UTC', | ||
141 | 'view_timezone' => 'UTC', | ||
142 | 'widget' => 'text', | ||
143 | )); | ||
144 | |||
145 | $text = array( | ||
146 | 'day' => '2', | ||
147 | 'month' => '6', | ||
148 | 'year' => '2010', | ||
149 | ); | ||
150 | |||
151 | $form->submit($text); | ||
152 | |||
153 | $dateTime = new \DateTime('2010-06-02 UTC'); | ||
154 | |||
155 | $this->assertDateTimeEquals($dateTime, $form->getData()); | ||
156 | $this->assertEquals($text, $form->getViewData()); | ||
157 | } | ||
158 | |||
159 | public function testSubmitFromChoice() | ||
160 | { | ||
161 | $form = $this->factory->create('date', null, array( | ||
162 | 'model_timezone' => 'UTC', | ||
163 | 'view_timezone' => 'UTC', | ||
164 | 'widget' => 'choice', | ||
165 | )); | ||
166 | |||
167 | $text = array( | ||
168 | 'day' => '2', | ||
169 | 'month' => '6', | ||
170 | 'year' => '2010', | ||
171 | ); | ||
172 | |||
173 | $form->submit($text); | ||
174 | |||
175 | $dateTime = new \DateTime('2010-06-02 UTC'); | ||
176 | |||
177 | $this->assertDateTimeEquals($dateTime, $form->getData()); | ||
178 | $this->assertEquals($text, $form->getViewData()); | ||
179 | } | ||
180 | |||
181 | public function testSubmitFromChoiceEmpty() | ||
182 | { | ||
183 | $form = $this->factory->create('date', null, array( | ||
184 | 'model_timezone' => 'UTC', | ||
185 | 'view_timezone' => 'UTC', | ||
186 | 'widget' => 'choice', | ||
187 | 'required' => false, | ||
188 | )); | ||
189 | |||
190 | $text = array( | ||
191 | 'day' => '', | ||
192 | 'month' => '', | ||
193 | 'year' => '', | ||
194 | ); | ||
195 | |||
196 | $form->submit($text); | ||
197 | |||
198 | $this->assertNull($form->getData()); | ||
199 | $this->assertEquals($text, $form->getViewData()); | ||
200 | } | ||
201 | |||
202 | public function testSubmitFromInputDateTimeDifferentPattern() | ||
203 | { | ||
204 | $form = $this->factory->create('date', null, array( | ||
205 | 'model_timezone' => 'UTC', | ||
206 | 'view_timezone' => 'UTC', | ||
207 | 'format' => 'MM*yyyy*dd', | ||
208 | 'widget' => 'single_text', | ||
209 | 'input' => 'datetime', | ||
210 | )); | ||
211 | |||
212 | $form->submit('06*2010*02'); | ||
213 | |||
214 | $this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $form->getData()); | ||
215 | $this->assertEquals('06*2010*02', $form->getViewData()); | ||
216 | } | ||
217 | |||
218 | public function testSubmitFromInputStringDifferentPattern() | ||
219 | { | ||
220 | $form = $this->factory->create('date', null, array( | ||
221 | 'model_timezone' => 'UTC', | ||
222 | 'view_timezone' => 'UTC', | ||
223 | 'format' => 'MM*yyyy*dd', | ||
224 | 'widget' => 'single_text', | ||
225 | 'input' => 'string', | ||
226 | )); | ||
227 | |||
228 | $form->submit('06*2010*02'); | ||
229 | |||
230 | $this->assertEquals('2010-06-02', $form->getData()); | ||
231 | $this->assertEquals('06*2010*02', $form->getViewData()); | ||
232 | } | ||
233 | |||
234 | public function testSubmitFromInputTimestampDifferentPattern() | ||
235 | { | ||
236 | $form = $this->factory->create('date', null, array( | ||
237 | 'model_timezone' => 'UTC', | ||
238 | 'view_timezone' => 'UTC', | ||
239 | 'format' => 'MM*yyyy*dd', | ||
240 | 'widget' => 'single_text', | ||
241 | 'input' => 'timestamp', | ||
242 | )); | ||
243 | |||
244 | $form->submit('06*2010*02'); | ||
245 | |||
246 | $dateTime = new \DateTime('2010-06-02 UTC'); | ||
247 | |||
248 | $this->assertEquals($dateTime->format('U'), $form->getData()); | ||
249 | $this->assertEquals('06*2010*02', $form->getViewData()); | ||
250 | } | ||
251 | |||
252 | public function testSubmitFromInputRawDifferentPattern() | ||
253 | { | ||
254 | $form = $this->factory->create('date', null, array( | ||
255 | 'model_timezone' => 'UTC', | ||
256 | 'view_timezone' => 'UTC', | ||
257 | 'format' => 'MM*yyyy*dd', | ||
258 | 'widget' => 'single_text', | ||
259 | 'input' => 'array', | ||
260 | )); | ||
261 | |||
262 | $form->submit('06*2010*02'); | ||
263 | |||
264 | $output = array( | ||
265 | 'day' => '2', | ||
266 | 'month' => '6', | ||
267 | 'year' => '2010', | ||
268 | ); | ||
269 | |||
270 | $this->assertEquals($output, $form->getData()); | ||
271 | $this->assertEquals('06*2010*02', $form->getViewData()); | ||
272 | } | ||
273 | |||
274 | /** | ||
275 | * @dataProvider provideDateFormats | ||
276 | */ | ||
277 | public function testDatePatternWithFormatOption($format, $pattern) | ||
278 | { | ||
279 | $form = $this->factory->create('date', null, array( | ||
280 | 'format' => $format, | ||
281 | )); | ||
282 | |||
283 | $view = $form->createView(); | ||
284 | |||
285 | $this->assertEquals($pattern, $view->vars['date_pattern']); | ||
286 | } | ||
287 | |||
288 | public function provideDateFormats() | ||
289 | { | ||
290 | return array( | ||
291 | array('dMy', '{{ day }}{{ month }}{{ year }}'), | ||
292 | array('d-M-yyyy', '{{ day }}-{{ month }}-{{ year }}'), | ||
293 | array('M d y', '{{ month }} {{ day }} {{ year }}'), | ||
294 | ); | ||
295 | } | ||
296 | |||
297 | /** | ||
298 | * This test is to check that the strings '0', '1', '2', '3' are no accepted | ||
299 | * as valid IntlDateFormatter constants for FULL, LONG, MEDIUM or SHORT respectively. | ||
300 | * | ||
301 | * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | ||
302 | */ | ||
303 | public function testThrowExceptionIfFormatIsNoPattern() | ||
304 | { | ||
305 | $this->factory->create('date', null, array( | ||
306 | 'format' => '0', | ||
307 | 'widget' => 'single_text', | ||
308 | 'input' => 'string', | ||
309 | )); | ||
310 | } | ||
311 | |||
312 | /** | ||
313 | * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | ||
314 | */ | ||
315 | public function testThrowExceptionIfFormatDoesNotContainYearMonthAndDay() | ||
316 | { | ||
317 | $this->factory->create('date', null, array( | ||
318 | 'months' => array(6, 7), | ||
319 | 'format' => 'yy', | ||
320 | )); | ||
321 | } | ||
322 | |||
323 | /** | ||
324 | * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | ||
325 | */ | ||
326 | public function testThrowExceptionIfFormatIsNoConstant() | ||
327 | { | ||
328 | $this->factory->create('date', null, array( | ||
329 | 'format' => 105, | ||
330 | )); | ||
331 | } | ||
332 | |||
333 | /** | ||
334 | * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | ||
335 | */ | ||
336 | public function testThrowExceptionIfFormatIsInvalid() | ||
337 | { | ||
338 | $this->factory->create('date', null, array( | ||
339 | 'format' => array(), | ||
340 | )); | ||
341 | } | ||
342 | |||
343 | public function testSetDataWithDifferentTimezones() | ||
344 | { | ||
345 | $form = $this->factory->create('date', null, array( | ||
346 | 'format' => \IntlDateFormatter::MEDIUM, | ||
347 | 'model_timezone' => 'America/New_York', | ||
348 | 'view_timezone' => 'Pacific/Tahiti', | ||
349 | 'input' => 'string', | ||
350 | 'widget' => 'single_text', | ||
351 | )); | ||
352 | |||
353 | $form->setData('2010-06-02'); | ||
354 | |||
355 | $this->assertEquals('01.06.2010', $form->getViewData()); | ||
356 | } | ||
357 | |||
358 | public function testSetDataWithDifferentTimezonesDateTime() | ||
359 | { | ||
360 | $form = $this->factory->create('date', null, array( | ||
361 | 'format' => \IntlDateFormatter::MEDIUM, | ||
362 | 'model_timezone' => 'America/New_York', | ||
363 | 'view_timezone' => 'Pacific/Tahiti', | ||
364 | 'input' => 'datetime', | ||
365 | 'widget' => 'single_text', | ||
366 | )); | ||
367 | |||
368 | $dateTime = new \DateTime('2010-06-02 America/New_York'); | ||
369 | |||
370 | $form->setData($dateTime); | ||
371 | |||
372 | $this->assertDateTimeEquals($dateTime, $form->getData()); | ||
373 | $this->assertEquals('01.06.2010', $form->getViewData()); | ||
374 | } | ||
375 | |||
376 | public function testYearsOption() | ||
377 | { | ||
378 | $form = $this->factory->create('date', null, array( | ||
379 | 'years' => array(2010, 2011), | ||
380 | )); | ||
381 | |||
382 | $view = $form->createView(); | ||
383 | |||
384 | $this->assertEquals(array( | ||
385 | new ChoiceView('2010', '2010', '2010'), | ||
386 | new ChoiceView('2011', '2011', '2011'), | ||
387 | ), $view['year']->vars['choices']); | ||
388 | } | ||
389 | |||
390 | public function testMonthsOption() | ||
391 | { | ||
392 | $form = $this->factory->create('date', null, array( | ||
393 | 'months' => array(6, 7), | ||
394 | )); | ||
395 | |||
396 | $view = $form->createView(); | ||
397 | |||
398 | $this->assertEquals(array( | ||
399 | new ChoiceView('6', '6', '06'), | ||
400 | new ChoiceView('7', '7', '07'), | ||
401 | ), $view['month']->vars['choices']); | ||
402 | } | ||
403 | |||
404 | public function testMonthsOptionShortFormat() | ||
405 | { | ||
406 | $form = $this->factory->create('date', null, array( | ||
407 | 'months' => array(1, 4), | ||
408 | 'format' => 'dd.MMM.yy', | ||
409 | )); | ||
410 | |||
411 | $view = $form->createView(); | ||
412 | |||
413 | $this->assertEquals(array( | ||
414 | new ChoiceView('1', '1', 'Jän'), | ||
415 | new ChoiceView('4', '4', 'Apr.') | ||
416 | ), $view['month']->vars['choices']); | ||
417 | } | ||
418 | |||
419 | public function testMonthsOptionLongFormat() | ||
420 | { | ||
421 | $form = $this->factory->create('date', null, array( | ||
422 | 'months' => array(1, 4), | ||
423 | 'format' => 'dd.MMMM.yy', | ||
424 | )); | ||
425 | |||
426 | $view = $form->createView(); | ||
427 | |||
428 | $this->assertEquals(array( | ||
429 | new ChoiceView('1', '1', 'Jänner'), | ||
430 | new ChoiceView('4', '4', 'April'), | ||
431 | ), $view['month']->vars['choices']); | ||
432 | } | ||
433 | |||
434 | public function testMonthsOptionLongFormatWithDifferentTimezone() | ||
435 | { | ||
436 | $form = $this->factory->create('date', null, array( | ||
437 | 'months' => array(1, 4), | ||
438 | 'format' => 'dd.MMMM.yy', | ||
439 | )); | ||
440 | |||
441 | $view = $form->createView(); | ||
442 | |||
443 | $this->assertEquals(array( | ||
444 | new ChoiceView('1', '1', 'Jänner'), | ||
445 | new ChoiceView('4', '4', 'April'), | ||
446 | ), $view['month']->vars['choices']); | ||
447 | } | ||
448 | |||
449 | public function testIsDayWithinRangeReturnsTrueIfWithin() | ||
450 | { | ||
451 | $form = $this->factory->create('date', null, array( | ||
452 | 'days' => array(6, 7), | ||
453 | )); | ||
454 | |||
455 | $view = $form->createView(); | ||
456 | |||
457 | $this->assertEquals(array( | ||
458 | new ChoiceView('6', '6', '06'), | ||
459 | new ChoiceView('7', '7', '07'), | ||
460 | ), $view['day']->vars['choices']); | ||
461 | } | ||
462 | |||
463 | public function testIsPartiallyFilledReturnsFalseIfSingleText() | ||
464 | { | ||
465 | $this->markTestIncomplete('Needs to be reimplemented using validators'); | ||
466 | |||
467 | $form = $this->factory->create('date', null, array( | ||
468 | 'model_timezone' => 'UTC', | ||
469 | 'view_timezone' => 'UTC', | ||
470 | 'widget' => 'single_text', | ||
471 | )); | ||
472 | |||
473 | $form->submit('7.6.2010'); | ||
474 | |||
475 | $this->assertFalse($form->isPartiallyFilled()); | ||
476 | } | ||
477 | |||
478 | public function testIsPartiallyFilledReturnsFalseIfChoiceAndCompletelyEmpty() | ||
479 | { | ||
480 | $this->markTestIncomplete('Needs to be reimplemented using validators'); | ||
481 | |||
482 | $form = $this->factory->create('date', null, array( | ||
483 | 'model_timezone' => 'UTC', | ||
484 | 'view_timezone' => 'UTC', | ||
485 | 'widget' => 'choice', | ||
486 | )); | ||
487 | |||
488 | $form->submit(array( | ||
489 | 'day' => '', | ||
490 | 'month' => '', | ||
491 | 'year' => '', | ||
492 | )); | ||
493 | |||
494 | $this->assertFalse($form->isPartiallyFilled()); | ||
495 | } | ||
496 | |||
497 | public function testIsPartiallyFilledReturnsFalseIfChoiceAndCompletelyFilled() | ||
498 | { | ||
499 | $this->markTestIncomplete('Needs to be reimplemented using validators'); | ||
500 | |||
501 | $form = $this->factory->create('date', null, array( | ||
502 | 'model_timezone' => 'UTC', | ||
503 | 'view_timezone' => 'UTC', | ||
504 | 'widget' => 'choice', | ||
505 | )); | ||
506 | |||
507 | $form->submit(array( | ||
508 | 'day' => '2', | ||
509 | 'month' => '6', | ||
510 | 'year' => '2010', | ||
511 | )); | ||
512 | |||
513 | $this->assertFalse($form->isPartiallyFilled()); | ||
514 | } | ||
515 | |||
516 | public function testIsPartiallyFilledReturnsTrueIfChoiceAndDayEmpty() | ||
517 | { | ||
518 | $this->markTestIncomplete('Needs to be reimplemented using validators'); | ||
519 | |||
520 | $form = $this->factory->create('date', null, array( | ||
521 | 'model_timezone' => 'UTC', | ||
522 | 'view_timezone' => 'UTC', | ||
523 | 'widget' => 'choice', | ||
524 | )); | ||
525 | |||
526 | $form->submit(array( | ||
527 | 'day' => '', | ||
528 | 'month' => '6', | ||
529 | 'year' => '2010', | ||
530 | )); | ||
531 | |||
532 | $this->assertTrue($form->isPartiallyFilled()); | ||
533 | } | ||
534 | |||
535 | public function testPassDatePatternToView() | ||
536 | { | ||
537 | $form = $this->factory->create('date'); | ||
538 | $view = $form->createView(); | ||
539 | |||
540 | $this->assertSame('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']); | ||
541 | } | ||
542 | |||
543 | public function testPassDatePatternToViewDifferentFormat() | ||
544 | { | ||
545 | $form = $this->factory->create('date', null, array( | ||
546 | 'format' => \IntlDateFormatter::LONG, | ||
547 | )); | ||
548 | |||
549 | $view = $form->createView(); | ||
550 | |||
551 | $this->assertSame('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']); | ||
552 | } | ||
553 | |||
554 | public function testPassDatePatternToViewDifferentPattern() | ||
555 | { | ||
556 | $form = $this->factory->create('date', null, array( | ||
557 | 'format' => 'MMyyyydd' | ||
558 | )); | ||
559 | |||
560 | $view = $form->createView(); | ||
561 | |||
562 | $this->assertSame('{{ month }}{{ year }}{{ day }}', $view->vars['date_pattern']); | ||
563 | } | ||
564 | |||
565 | public function testPassDatePatternToViewDifferentPatternWithSeparators() | ||
566 | { | ||
567 | $form = $this->factory->create('date', null, array( | ||
568 | 'format' => 'MM*yyyy*dd' | ||
569 | )); | ||
570 | |||
571 | $view = $form->createView(); | ||
572 | |||
573 | $this->assertSame('{{ month }}*{{ year }}*{{ day }}', $view->vars['date_pattern']); | ||
574 | } | ||
575 | |||
576 | public function testDontPassDatePatternIfText() | ||
577 | { | ||
578 | $form = $this->factory->create('date', null, array( | ||
579 | 'widget' => 'single_text', | ||
580 | )); | ||
581 | $view = $form->createView(); | ||
582 | |||
583 | $this->assertFalse(isset($view->vars['date_pattern'])); | ||
584 | } | ||
585 | |||
586 | public function testPassWidgetToView() | ||
587 | { | ||
588 | $form = $this->factory->create('date', null, array( | ||
589 | 'widget' => 'single_text', | ||
590 | )); | ||
591 | $view = $form->createView(); | ||
592 | |||
593 | $this->assertSame('single_text', $view->vars['widget']); | ||
594 | } | ||
595 | |||
596 | // Bug fix | ||
597 | public function testInitializeWithDateTime() | ||
598 | { | ||
599 | // Throws an exception if "data_class" option is not explicitly set | ||
600 | // to null in the type | ||
601 | $this->factory->create('date', new \DateTime()); | ||
602 | } | ||
603 | |||
604 | public function testSingleTextWidgetShouldUseTheRightInputType() | ||
605 | { | ||
606 | $form = $this->factory->create('date', null, array( | ||
607 | 'widget' => 'single_text', | ||
608 | )); | ||
609 | |||
610 | $view = $form->createView(); | ||
611 | $this->assertEquals('date', $view->vars['type']); | ||
612 | } | ||
613 | |||
614 | public function testPassDefaultEmptyValueToViewIfNotRequired() | ||
615 | { | ||
616 | $form = $this->factory->create('date', null, array( | ||
617 | 'required' => false, | ||
618 | )); | ||
619 | |||
620 | $view = $form->createView(); | ||
621 | $this->assertSame('', $view['year']->vars['empty_value']); | ||
622 | $this->assertSame('', $view['month']->vars['empty_value']); | ||
623 | $this->assertSame('', $view['day']->vars['empty_value']); | ||
624 | } | ||
625 | |||
626 | public function testPassNoEmptyValueToViewIfRequired() | ||
627 | { | ||
628 | $form = $this->factory->create('date', null, array( | ||
629 | 'required' => true, | ||
630 | )); | ||
631 | |||
632 | $view = $form->createView(); | ||
633 | $this->assertNull($view['year']->vars['empty_value']); | ||
634 | $this->assertNull($view['month']->vars['empty_value']); | ||
635 | $this->assertNull($view['day']->vars['empty_value']); | ||
636 | } | ||
637 | |||
638 | public function testPassEmptyValueAsString() | ||
639 | { | ||
640 | $form = $this->factory->create('date', null, array( | ||
641 | 'empty_value' => 'Empty', | ||
642 | )); | ||
643 | |||
644 | $view = $form->createView(); | ||
645 | $this->assertSame('Empty', $view['year']->vars['empty_value']); | ||
646 | $this->assertSame('Empty', $view['month']->vars['empty_value']); | ||
647 | $this->assertSame('Empty', $view['day']->vars['empty_value']); | ||
648 | } | ||
649 | |||
650 | public function testPassEmptyValueAsArray() | ||
651 | { | ||
652 | $form = $this->factory->create('date', null, array( | ||
653 | 'empty_value' => array( | ||
654 | 'year' => 'Empty year', | ||
655 | 'month' => 'Empty month', | ||
656 | 'day' => 'Empty day', | ||
657 | ), | ||
658 | )); | ||
659 | |||
660 | $view = $form->createView(); | ||
661 | $this->assertSame('Empty year', $view['year']->vars['empty_value']); | ||
662 | $this->assertSame('Empty month', $view['month']->vars['empty_value']); | ||
663 | $this->assertSame('Empty day', $view['day']->vars['empty_value']); | ||
664 | } | ||
665 | |||
666 | public function testPassEmptyValueAsPartialArrayAddEmptyIfNotRequired() | ||
667 | { | ||
668 | $form = $this->factory->create('date', null, array( | ||
669 | 'required' => false, | ||
670 | 'empty_value' => array( | ||
671 | 'year' => 'Empty year', | ||
672 | 'day' => 'Empty day', | ||
673 | ), | ||
674 | )); | ||
675 | |||
676 | $view = $form->createView(); | ||
677 | $this->assertSame('Empty year', $view['year']->vars['empty_value']); | ||
678 | $this->assertSame('', $view['month']->vars['empty_value']); | ||
679 | $this->assertSame('Empty day', $view['day']->vars['empty_value']); | ||
680 | } | ||
681 | |||
682 | public function testPassEmptyValueAsPartialArrayAddNullIfRequired() | ||
683 | { | ||
684 | $form = $this->factory->create('date', null, array( | ||
685 | 'required' => true, | ||
686 | 'empty_value' => array( | ||
687 | 'year' => 'Empty year', | ||
688 | 'day' => 'Empty day', | ||
689 | ), | ||
690 | )); | ||
691 | |||
692 | $view = $form->createView(); | ||
693 | $this->assertSame('Empty year', $view['year']->vars['empty_value']); | ||
694 | $this->assertNull($view['month']->vars['empty_value']); | ||
695 | $this->assertSame('Empty day', $view['day']->vars['empty_value']); | ||
696 | } | ||
697 | |||
698 | public function testPassHtml5TypeIfSingleTextAndHtml5Format() | ||
699 | { | ||
700 | $form = $this->factory->create('date', null, array( | ||
701 | 'widget' => 'single_text', | ||
702 | )); | ||
703 | |||
704 | $view = $form->createView(); | ||
705 | $this->assertSame('date', $view->vars['type']); | ||
706 | } | ||
707 | |||
708 | public function testDontPassHtml5TypeIfNotHtml5Format() | ||
709 | { | ||
710 | $form = $this->factory->create('date', null, array( | ||
711 | 'widget' => 'single_text', | ||
712 | 'format' => \IntlDateFormatter::MEDIUM, | ||
713 | )); | ||
714 | |||
715 | $view = $form->createView(); | ||
716 | $this->assertFalse(isset($view->vars['type'])); | ||
717 | } | ||
718 | |||
719 | public function testDontPassHtml5TypeIfNotSingleText() | ||
720 | { | ||
721 | $form = $this->factory->create('date', null, array( | ||
722 | 'widget' => 'text', | ||
723 | )); | ||
724 | |||
725 | $view = $form->createView(); | ||
726 | $this->assertFalse(isset($view->vars['type'])); | ||
727 | } | ||
728 | |||
729 | public function provideCompoundWidgets() | ||
730 | { | ||
731 | return array( | ||
732 | array('text'), | ||
733 | array('choice'), | ||
734 | ); | ||
735 | } | ||
736 | |||
737 | /** | ||
738 | * @dataProvider provideCompoundWidgets | ||
739 | */ | ||
740 | public function testYearErrorsBubbleUp($widget) | ||
741 | { | ||
742 | $error = new FormError('Invalid!'); | ||
743 | $form = $this->factory->create('date', null, array( | ||
744 | 'widget' => $widget, | ||
745 | )); | ||
746 | $form['year']->addError($error); | ||
747 | |||
748 | $this->assertSame(array(), $form['year']->getErrors()); | ||
749 | $this->assertSame(array($error), $form->getErrors()); | ||
750 | } | ||
751 | |||
752 | /** | ||
753 | * @dataProvider provideCompoundWidgets | ||
754 | */ | ||
755 | public function testMonthErrorsBubbleUp($widget) | ||
756 | { | ||
757 | $error = new FormError('Invalid!'); | ||
758 | $form = $this->factory->create('date', null, array( | ||
759 | 'widget' => $widget, | ||
760 | )); | ||
761 | $form['month']->addError($error); | ||
762 | |||
763 | $this->assertSame(array(), $form['month']->getErrors()); | ||
764 | $this->assertSame(array($error), $form->getErrors()); | ||
765 | } | ||
766 | |||
767 | /** | ||
768 | * @dataProvider provideCompoundWidgets | ||
769 | */ | ||
770 | public function testDayErrorsBubbleUp($widget) | ||
771 | { | ||
772 | $error = new FormError('Invalid!'); | ||
773 | $form = $this->factory->create('date', null, array( | ||
774 | 'widget' => $widget, | ||
775 | )); | ||
776 | $form['day']->addError($error); | ||
777 | |||
778 | $this->assertSame(array(), $form['day']->getErrors()); | ||
779 | $this->assertSame(array($error), $form->getErrors()); | ||
780 | } | ||
781 | } | ||