DateFieldTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace Symfony\Tests\Component\Form;
  3. require_once __DIR__ . '/DateTimeTestCase.php';
  4. use Symfony\Component\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 testBind_fromChoice_empty()
  65. {
  66. $field = new DateField('name', array('widget' => DateField::CHOICE, 'required' => false));
  67. $input = array(
  68. 'day' => '',
  69. 'month' => '',
  70. 'year' => '',
  71. );
  72. $field->setLocale('de_AT');
  73. $field->bind($input);
  74. $this->assertSame(null, $field->getData());
  75. $this->assertEquals($input, $field->getDisplayedData());
  76. }
  77. public function testSetData_differentTimezones()
  78. {
  79. $field = new DateField('name', array(
  80. 'data_timezone' => 'America/New_York',
  81. 'user_timezone' => 'Pacific/Tahiti',
  82. // don't do this test with DateTime, because it leads to wrong results!
  83. 'type' => DateField::STRING,
  84. 'widget' => 'input',
  85. ));
  86. $field->setLocale('de_AT');
  87. $field->setData('2010-06-02');
  88. $this->assertEquals('01.06.2010', $field->getDisplayedData());
  89. }
  90. public function testIsYearWithinRange_returnsTrueIfWithin()
  91. {
  92. $field = new DateField('name', array(
  93. 'widget' => 'input',
  94. 'years' => array(2010, 2011),
  95. ));
  96. $field->setLocale('de_AT');
  97. $field->bind('2.6.2010');
  98. $this->assertTrue($field->isYearWithinRange());
  99. }
  100. public function testIsYearWithinRange_returnsTrueIfEmpty()
  101. {
  102. $field = new DateField('name', array(
  103. 'widget' => 'input',
  104. 'years' => array(2010, 2011),
  105. ));
  106. $field->setLocale('de_AT');
  107. $field->bind('');
  108. $this->assertTrue($field->isYearWithinRange());
  109. }
  110. public function testIsYearWithinRange_returnsFalseIfNotContained()
  111. {
  112. $field = new DateField('name', array(
  113. 'widget' => 'input',
  114. 'years' => array(2010, 2012),
  115. ));
  116. $field->setLocale('de_AT');
  117. $field->bind('2.6.2011');
  118. $this->assertFalse($field->isYearWithinRange());
  119. }
  120. public function testIsMonthWithinRange_returnsTrueIfWithin()
  121. {
  122. $field = new DateField('name', array(
  123. 'widget' => 'input',
  124. 'months' => array(6, 7),
  125. ));
  126. $field->setLocale('de_AT');
  127. $field->bind('2.6.2010');
  128. $this->assertTrue($field->isMonthWithinRange());
  129. }
  130. public function testIsMonthWithinRange_returnsTrueIfEmpty()
  131. {
  132. $field = new DateField('name', array(
  133. 'widget' => 'input',
  134. 'months' => array(6, 7),
  135. ));
  136. $field->setLocale('de_AT');
  137. $field->bind('');
  138. $this->assertTrue($field->isMonthWithinRange());
  139. }
  140. public function testIsMonthWithinRange_returnsFalseIfNotContained()
  141. {
  142. $field = new DateField('name', array(
  143. 'widget' => 'input',
  144. 'months' => array(6, 8),
  145. ));
  146. $field->setLocale('de_AT');
  147. $field->bind('2.7.2010');
  148. $this->assertFalse($field->isMonthWithinRange());
  149. }
  150. public function testIsDayWithinRange_returnsTrueIfWithin()
  151. {
  152. $field = new DateField('name', array(
  153. 'widget' => 'input',
  154. 'days' => array(6, 7),
  155. ));
  156. $field->setLocale('de_AT');
  157. $field->bind('6.6.2010');
  158. $this->assertTrue($field->isDayWithinRange());
  159. }
  160. public function testIsDayWithinRange_returnsTrueIfEmpty()
  161. {
  162. $field = new DateField('name', array(
  163. 'widget' => 'input',
  164. 'days' => array(6, 7),
  165. ));
  166. $field->setLocale('de_AT');
  167. $field->bind('');
  168. $this->assertTrue($field->isDayWithinRange());
  169. }
  170. public function testIsDayWithinRange_returnsFalseIfNotContained()
  171. {
  172. $field = new DateField('name', array(
  173. 'widget' => 'input',
  174. 'days' => array(6, 8),
  175. ));
  176. $field->setLocale('de_AT');
  177. $field->bind('7.6.2010');
  178. $this->assertFalse($field->isDayWithinRange());
  179. }
  180. }