DateTimeFieldTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace Symfony\Tests\Component\Form;
  3. require_once __DIR__ . '/DateTimeTestCase.php';
  4. use Symfony\Component\Form\DateTimeField;
  5. use Symfony\Component\Form\DateField;
  6. use Symfony\Component\Form\TimeField;
  7. class DateTimeFieldTest extends DateTimeTestCase
  8. {
  9. public function testBind_dateTime()
  10. {
  11. $field = new DateTimeField('name', array(
  12. 'data_timezone' => 'UTC',
  13. 'user_timezone' => 'UTC',
  14. 'date_widget' => DateField::CHOICE,
  15. 'time_widget' => TimeField::CHOICE,
  16. 'type' => DateTimeField::DATETIME,
  17. ));
  18. $field->bind(array(
  19. 'date' => array(
  20. 'day' => '2',
  21. 'month' => '6',
  22. 'year' => '2010',
  23. ),
  24. 'time' => array(
  25. 'hour' => '3',
  26. 'minute' => '4',
  27. ),
  28. ));
  29. $dateTime = new \DateTime('2010-06-02 03:04:00 UTC');
  30. $this->assertDateTimeEquals($dateTime, $field->getData());
  31. }
  32. public function testBind_string()
  33. {
  34. $field = new DateTimeField('name', array(
  35. 'data_timezone' => 'UTC',
  36. 'user_timezone' => 'UTC',
  37. 'type' => DateTimeField::STRING,
  38. 'date_widget' => DateField::CHOICE,
  39. 'time_widget' => TimeField::CHOICE,
  40. ));
  41. $field->bind(array(
  42. 'date' => array(
  43. 'day' => '2',
  44. 'month' => '6',
  45. 'year' => '2010',
  46. ),
  47. 'time' => array(
  48. 'hour' => '3',
  49. 'minute' => '4',
  50. ),
  51. ));
  52. $this->assertEquals('2010-06-02 03:04:00', $field->getData());
  53. }
  54. public function testBind_timestamp()
  55. {
  56. $field = new DateTimeField('name', array(
  57. 'data_timezone' => 'UTC',
  58. 'user_timezone' => 'UTC',
  59. 'type' => DateTimeField::TIMESTAMP,
  60. 'date_widget' => DateField::CHOICE,
  61. 'time_widget' => TimeField::CHOICE,
  62. ));
  63. $field->bind(array(
  64. 'date' => array(
  65. 'day' => '2',
  66. 'month' => '6',
  67. 'year' => '2010',
  68. ),
  69. 'time' => array(
  70. 'hour' => '3',
  71. 'minute' => '4',
  72. ),
  73. ));
  74. $dateTime = new \DateTime('2010-06-02 03:04:00 UTC');
  75. $this->assertEquals($dateTime->format('U'), $field->getData());
  76. }
  77. public function testBind_withSeconds()
  78. {
  79. $field = new DateTimeField('name', array(
  80. 'data_timezone' => 'UTC',
  81. 'user_timezone' => 'UTC',
  82. 'date_widget' => DateField::CHOICE,
  83. 'time_widget' => TimeField::CHOICE,
  84. 'type' => DateTimeField::DATETIME,
  85. 'with_seconds' => true,
  86. ));
  87. $field->setData(new \DateTime('2010-06-02 03:04:05 UTC'));
  88. $input = array(
  89. 'date' => array(
  90. 'day' => '2',
  91. 'month' => '6',
  92. 'year' => '2010',
  93. ),
  94. 'time' => array(
  95. 'hour' => '3',
  96. 'minute' => '4',
  97. 'second' => '5',
  98. ),
  99. );
  100. $field->bind($input);
  101. $this->assertDateTimeEquals(new \DateTime('2010-06-02 03:04:05 UTC'), $field->getData());
  102. }
  103. public function testBind_differentTimezones()
  104. {
  105. $field = new DateTimeField('name', array(
  106. 'data_timezone' => 'America/New_York',
  107. 'user_timezone' => 'Pacific/Tahiti',
  108. 'date_widget' => DateField::CHOICE,
  109. 'time_widget' => TimeField::CHOICE,
  110. // don't do this test with DateTime, because it leads to wrong results!
  111. 'type' => DateTimeField::STRING,
  112. 'with_seconds' => true,
  113. ));
  114. $dateTime = new \DateTime('2010-06-02 03:04:05 Pacific/Tahiti');
  115. $field->bind(array(
  116. 'date' => array(
  117. 'day' => (int)$dateTime->format('d'),
  118. 'month' => (int)$dateTime->format('m'),
  119. 'year' => (int)$dateTime->format('Y'),
  120. ),
  121. 'time' => array(
  122. 'hour' => (int)$dateTime->format('H'),
  123. 'minute' => (int)$dateTime->format('i'),
  124. 'second' => (int)$dateTime->format('s'),
  125. ),
  126. ));
  127. $dateTime->setTimezone(new \DateTimeZone('America/New_York'));
  128. $this->assertEquals($dateTime->format('Y-m-d H:i:s'), $field->getData());
  129. }
  130. }