DateFieldTest.php 6.3 KB

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