DateFieldTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace Symfony\Tests\Components\Form;
  3. require_once __DIR__ . '/DateTimeTestCase.php';
  4. use Symfony\Components\Form\DateField;
  5. class DateFieldTest extends DateTimeTestCase
  6. {
  7. public function testBind_fromInput_dateTime()
  8. {
  9. $field = new DateField('name', array('widget' => 'input', 'type' => DateField::DATETIME));
  10. $field->setLocale('de_AT');
  11. $field->bind('2.6.2010');
  12. $this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $field->getData());
  13. $this->assertEquals('02.06.2010', $field->getDisplayedData());
  14. }
  15. public function testBind_fromInput_string()
  16. {
  17. $field = new DateField('name', array('widget' => 'input', 'type' => DateField::STRING));
  18. $field->setLocale('de_AT');
  19. $field->bind('2.6.2010');
  20. $this->assertEquals('2010-06-02', $field->getData());
  21. $this->assertEquals('02.06.2010', $field->getDisplayedData());
  22. }
  23. public function testBind_fromInput_timestamp()
  24. {
  25. $field = new DateField('name', array('widget' => 'input', 'type' => DateField::TIMESTAMP));
  26. $field->setLocale('de_AT');
  27. $field->bind('2.6.2010');
  28. $dateTime = new \DateTime('2010-06-02 UTC');
  29. $this->assertEquals($dateTime->format('U'), $field->getData());
  30. $this->assertEquals('02.06.2010', $field->getDisplayedData());
  31. }
  32. public function testBind_fromInput_raw()
  33. {
  34. $field = new DateField('name', array(
  35. 'data_timezone' => 'UTC',
  36. 'user_timezone' => 'UTC',
  37. 'widget' => 'input',
  38. 'type' => DateField::RAW,
  39. ));
  40. $field->setLocale('de_AT');
  41. $field->bind('2.6.2010');
  42. $output = array(
  43. 'day' => '2',
  44. 'month' => '6',
  45. 'year' => '2010',
  46. );
  47. $this->assertEquals($output, $field->getData());
  48. $this->assertEquals('02.06.2010', $field->getDisplayedData());
  49. }
  50. public function testBind_fromChoice()
  51. {
  52. $field = new DateField('name', array('widget' => DateField::CHOICE));
  53. $input = array(
  54. 'day' => '2',
  55. 'month' => '6',
  56. 'year' => '2010',
  57. );
  58. $field->setLocale('de_AT');
  59. $field->bind($input);
  60. $dateTime = new \DateTime('2010-06-02 UTC');
  61. $this->assertDateTimeEquals($dateTime, $field->getData());
  62. $this->assertEquals($input, $field->getDisplayedData());
  63. }
  64. public function testSetData_differentTimezones()
  65. {
  66. $field = new DateField('name', array(
  67. 'data_timezone' => 'America/New_York',
  68. 'user_timezone' => 'Pacific/Tahiti',
  69. // don't do this test with DateTime, because it leads to wrong results!
  70. 'type' => DateField::STRING,
  71. 'widget' => 'input',
  72. ));
  73. $field->setLocale('de_AT');
  74. $field->setData('2010-06-02');
  75. $this->assertEquals('01.06.2010', $field->getDisplayedData());
  76. }
  77. public function testRenderAsInput()
  78. {
  79. $field = new DateField('name', array('widget' => 'input'));
  80. $field->setLocale('de_AT');
  81. $field->setData(new \DateTime('2010-06-02 UTC'));
  82. $html = '<input id="name" name="name" value="02.06.2010" type="text" class="foobar" />';
  83. $this->assertEquals($html, $field->render(array(
  84. 'class' => 'foobar',
  85. )));
  86. }
  87. public function testRenderAsInputWithFormat()
  88. {
  89. $field = new DateField('name', array('widget' => 'input', 'format' => 'short'));
  90. $field->setLocale('de_AT');
  91. $field->setData(new \DateTime('2010-06-02 UTC'));
  92. $html = '<input id="name" name="name" value="02.06.10" type="text" />';
  93. $this->assertEquals($html, $field->render());
  94. }
  95. public function testRenderAsChoice()
  96. {
  97. $field = new DateField('name', array(
  98. 'years' => array(2010, 2011),
  99. 'months' => array(6, 7),
  100. 'days' => array(1, 2),
  101. 'widget' => DateField::CHOICE,
  102. ));
  103. $field->setLocale('de_AT');
  104. $field->setData(new \DateTime('2010-06-02 UTC'));
  105. $html = <<<EOF
  106. <select id="name_day" name="name[day]" class="foobar">
  107. <option value="1">01</option>
  108. <option value="2" selected="selected">02</option>
  109. </select>.<select id="name_month" name="name[month]" class="foobar">
  110. <option value="6" selected="selected">06</option>
  111. <option value="7">07</option>
  112. </select>.<select id="name_year" name="name[year]" class="foobar">
  113. <option value="2010" selected="selected">2010</option>
  114. <option value="2011">2011</option>
  115. </select>
  116. EOF;
  117. $this->assertEquals($html, $field->render(array(
  118. 'class' => 'foobar',
  119. )));
  120. }
  121. public function testRenderAsChoiceNonRequired()
  122. {
  123. $field = new DateField('name', array(
  124. 'years' => array(2010, 2011),
  125. 'months' => array(6, 7),
  126. 'days' => array(1, 2),
  127. 'widget' => DateField::CHOICE,
  128. ));
  129. $field->setLocale('de_AT');
  130. $field->setRequired(false);
  131. $html = <<<EOF
  132. <select id="name_day" name="name[day]">
  133. <option value="" selected="selected"></option>
  134. <option value="1">01</option>
  135. <option value="2">02</option>
  136. </select>.<select id="name_month" name="name[month]">
  137. <option value="" selected="selected"></option>
  138. <option value="6">06</option>
  139. <option value="7">07</option>
  140. </select>.<select id="name_year" name="name[year]">
  141. <option value="" selected="selected"></option>
  142. <option value="2010">2010</option>
  143. <option value="2011">2011</option>
  144. </select>
  145. EOF;
  146. $this->assertEquals($html, $field->render());
  147. }
  148. public function testRenderAsChoiceWithPattern()
  149. {
  150. $field = new DateField('name', array(
  151. 'years' => array(2010, 2011),
  152. 'months' => array(6, 7),
  153. 'days' => array(1, 2),
  154. 'widget' => DateField::CHOICE,
  155. 'pattern' => '%day%---%month%---%year%',
  156. ));
  157. $html = <<<EOF
  158. <select id="name_day" name="name[day]">
  159. <option value="1">01</option>
  160. <option value="2">02</option>
  161. </select>---<select id="name_month" name="name[month]">
  162. <option value="6">06</option>
  163. <option value="7">07</option>
  164. </select>---<select id="name_year" name="name[year]">
  165. <option value="2010">2010</option>
  166. <option value="2011">2011</option>
  167. </select>
  168. EOF;
  169. $this->assertEquals($html, $field->render());
  170. }
  171. }