TimeFieldTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. namespace Symfony\Tests\Component\Form;
  3. require_once __DIR__ . '/DateTimeTestCase.php';
  4. use Symfony\Component\Form\TimeField;
  5. class TimeFieldTest extends DateTimeTestCase
  6. {
  7. public function testBind_dateTime()
  8. {
  9. $field = new TimeField('name', array(
  10. 'data_timezone' => 'UTC',
  11. 'user_timezone' => 'UTC',
  12. 'type' => TimeField::DATETIME,
  13. ));
  14. $input = array(
  15. 'hour' => '3',
  16. 'minute' => '4',
  17. );
  18. $field->bind($input);
  19. $dateTime = new \DateTime('1970-01-01 03:04:00 UTC');
  20. $this->assertEquals($dateTime, $field->getData());
  21. $this->assertEquals($input, $field->getDisplayedData());
  22. }
  23. public function testBind_string()
  24. {
  25. $field = new TimeField('name', array(
  26. 'data_timezone' => 'UTC',
  27. 'user_timezone' => 'UTC',
  28. 'type' => TimeField::STRING,
  29. ));
  30. $input = array(
  31. 'hour' => '3',
  32. 'minute' => '4',
  33. );
  34. $field->bind($input);
  35. $this->assertEquals('03:04:00', $field->getData());
  36. $this->assertEquals($input, $field->getDisplayedData());
  37. }
  38. public function testBind_timestamp()
  39. {
  40. $field = new TimeField('name', array(
  41. 'data_timezone' => 'UTC',
  42. 'user_timezone' => 'UTC',
  43. 'type' => TimeField::TIMESTAMP,
  44. ));
  45. $input = array(
  46. 'hour' => '3',
  47. 'minute' => '4',
  48. );
  49. $field->bind($input);
  50. $dateTime = new \DateTime('1970-01-01 03:04:00 UTC');
  51. $this->assertEquals($dateTime->format('U'), $field->getData());
  52. $this->assertEquals($input, $field->getDisplayedData());
  53. }
  54. public function testBind_raw()
  55. {
  56. $field = new TimeField('name', array(
  57. 'data_timezone' => 'UTC',
  58. 'user_timezone' => 'UTC',
  59. 'type' => TimeField::RAW,
  60. ));
  61. $input = array(
  62. 'hour' => '3',
  63. 'minute' => '4',
  64. );
  65. $data = array(
  66. 'hour' => '3',
  67. 'minute' => '4',
  68. );
  69. $field->bind($input);
  70. $this->assertEquals($data, $field->getData());
  71. $this->assertEquals($input, $field->getDisplayedData());
  72. }
  73. public function testSetData_withSeconds()
  74. {
  75. $field = new TimeField('name', array(
  76. 'data_timezone' => 'UTC',
  77. 'user_timezone' => 'UTC',
  78. 'type' => TimeField::DATETIME,
  79. 'with_seconds' => true,
  80. ));
  81. $field->setData(new \DateTime('03:04:05 UTC'));
  82. $this->assertEquals(array('hour' => 3, 'minute' => 4, 'second' => 5), $field->getDisplayedData());
  83. }
  84. public function testSetData_differentTimezones()
  85. {
  86. $field = new TimeField('name', array(
  87. 'data_timezone' => 'America/New_York',
  88. 'user_timezone' => 'Pacific/Tahiti',
  89. // don't do this test with DateTime, because it leads to wrong results!
  90. 'type' => TimeField::STRING,
  91. 'with_seconds' => true,
  92. ));
  93. $dateTime = new \DateTime('03:04:05 America/New_York');
  94. $field->setData($dateTime->format('H:i:s'));
  95. $dateTime = clone $dateTime;
  96. $dateTime->setTimezone(new \DateTimeZone('Pacific/Tahiti'));
  97. $displayedData = array(
  98. 'hour' => (int)$dateTime->format('H'),
  99. 'minute' => (int)$dateTime->format('i'),
  100. 'second' => (int)$dateTime->format('s')
  101. );
  102. $this->assertEquals($displayedData, $field->getDisplayedData());
  103. }
  104. public function testIsHourWithinRange_returnsTrueIfWithin()
  105. {
  106. $field = new TimeField('name', array(
  107. 'hours' => array(6, 7),
  108. ));
  109. $field->bind(array('hour' => '06', 'minute' => '12'));
  110. $this->assertTrue($field->isHourWithinRange());
  111. }
  112. public function testIsHourWithinRange_returnsTrueIfEmpty()
  113. {
  114. $field = new TimeField('name', array(
  115. 'hours' => array(6, 7),
  116. ));
  117. $field->bind(array('hour' => '', 'minute' => ''));
  118. $this->assertTrue($field->isHourWithinRange());
  119. }
  120. public function testIsHourWithinRange_returnsFalseIfNotContained()
  121. {
  122. $field = new TimeField('name', array(
  123. 'hours' => array(6, 7),
  124. ));
  125. $field->bind(array('hour' => '08', 'minute' => '12'));
  126. $this->assertFalse($field->isHourWithinRange());
  127. }
  128. public function testIsMinuteWithinRange_returnsTrueIfWithin()
  129. {
  130. $field = new TimeField('name', array(
  131. 'minutes' => array(6, 7),
  132. ));
  133. $field->bind(array('hour' => '06', 'minute' => '06'));
  134. $this->assertTrue($field->isMinuteWithinRange());
  135. }
  136. public function testIsMinuteWithinRange_returnsTrueIfEmpty()
  137. {
  138. $field = new TimeField('name', array(
  139. 'minutes' => array(6, 7),
  140. ));
  141. $field->bind(array('hour' => '', 'minute' => ''));
  142. $this->assertTrue($field->isMinuteWithinRange());
  143. }
  144. public function testIsMinuteWithinRange_returnsFalseIfNotContained()
  145. {
  146. $field = new TimeField('name', array(
  147. 'minutes' => array(6, 7),
  148. ));
  149. $field->bind(array('hour' => '06', 'minute' => '08'));
  150. $this->assertFalse($field->isMinuteWithinRange());
  151. }
  152. public function testIsSecondWithinRange_returnsTrueIfWithin()
  153. {
  154. $field = new TimeField('name', array(
  155. 'seconds' => array(6, 7),
  156. 'with_seconds' => true,
  157. ));
  158. $field->bind(array('hour' => '04', 'minute' => '05', 'second' => '06'));
  159. $this->assertTrue($field->isSecondWithinRange());
  160. }
  161. public function testIsSecondWithinRange_returnsTrueIfEmpty()
  162. {
  163. $field = new TimeField('name', array(
  164. 'seconds' => array(6, 7),
  165. 'with_seconds' => true,
  166. ));
  167. $field->bind(array('hour' => '', 'minute' => ''));
  168. $this->assertTrue($field->isSecondWithinRange());
  169. }
  170. public function testIsSecondWithinRange_returnsFalseIfNotContained()
  171. {
  172. $field = new TimeField('name', array(
  173. 'seconds' => array(6, 7),
  174. 'with_seconds' => true,
  175. ));
  176. $field->bind(array('hour' => '04', 'minute' => '05', 'second' => '08'));
  177. $this->assertFalse($field->isSecondWithinRange());
  178. }
  179. }