PageRenderTime 27ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToArrayTransformerTest.php

http://github.com/fabpot/symfony
PHP | 434 lines | 320 code | 64 blank | 50 comment | 0 complexity | 931c88617582fdc70ad441c15e0fa368 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Tests\Component\Form\Extension\Core\DataTransformer;
  11. require_once __DIR__ . '/DateTimeTestCase.php';
  12. use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer;
  13. class DateTimeToArrayTransformerTest extends DateTimeTestCase
  14. {
  15. public function testTransform()
  16. {
  17. $transformer = new DateTimeToArrayTransformer('UTC', 'UTC');
  18. $input = new \DateTime('2010-02-03 04:05:06 UTC');
  19. $output = array(
  20. 'year' => '2010',
  21. 'month' => '2',
  22. 'day' => '3',
  23. 'hour' => '4',
  24. 'minute' => '5',
  25. 'second' => '6',
  26. );
  27. $this->assertSame($output, $transformer->transform($input));
  28. }
  29. public function testTransform_empty()
  30. {
  31. $transformer = new DateTimeToArrayTransformer();
  32. $output = array(
  33. 'year' => '',
  34. 'month' => '',
  35. 'day' => '',
  36. 'hour' => '',
  37. 'minute' => '',
  38. 'second' => '',
  39. );
  40. $this->assertSame($output, $transformer->transform(null));
  41. }
  42. public function testTransform_empty_withFields()
  43. {
  44. $transformer = new DateTimeToArrayTransformer(null, null, array('year', 'minute', 'second'));
  45. $output = array(
  46. 'year' => '',
  47. 'minute' => '',
  48. 'second' => '',
  49. );
  50. $this->assertSame($output, $transformer->transform(null));
  51. }
  52. public function testTransform_withFields()
  53. {
  54. $transformer = new DateTimeToArrayTransformer('UTC', 'UTC', array('year', 'month', 'minute', 'second'));
  55. $input = new \DateTime('2010-02-03 04:05:06 UTC');
  56. $output = array(
  57. 'year' => '2010',
  58. 'month' => '2',
  59. 'minute' => '5',
  60. 'second' => '6',
  61. );
  62. $this->assertSame($output, $transformer->transform($input));
  63. }
  64. public function testTransform_withPadding()
  65. {
  66. $transformer = new DateTimeToArrayTransformer('UTC', 'UTC', null, true);
  67. $input = new \DateTime('2010-02-03 04:05:06 UTC');
  68. $output = array(
  69. 'year' => '2010',
  70. 'month' => '02',
  71. 'day' => '03',
  72. 'hour' => '04',
  73. 'minute' => '05',
  74. 'second' => '06',
  75. );
  76. $this->assertSame($output, $transformer->transform($input));
  77. }
  78. public function testTransform_differentTimezones()
  79. {
  80. $transformer = new DateTimeToArrayTransformer('America/New_York', 'Asia/Hong_Kong');
  81. $input = new \DateTime('2010-02-03 04:05:06 America/New_York');
  82. $dateTime = new \DateTime('2010-02-03 04:05:06 America/New_York');
  83. $dateTime->setTimezone(new \DateTimeZone('Asia/Hong_Kong'));
  84. $output = array(
  85. 'year' => (string)(int)$dateTime->format('Y'),
  86. 'month' => (string)(int)$dateTime->format('m'),
  87. 'day' => (string)(int)$dateTime->format('d'),
  88. 'hour' => (string)(int)$dateTime->format('H'),
  89. 'minute' => (string)(int)$dateTime->format('i'),
  90. 'second' => (string)(int)$dateTime->format('s'),
  91. );
  92. $this->assertSame($output, $transformer->transform($input));
  93. }
  94. /**
  95. * @expectedException Symfony\Component\Form\Exception\UnexpectedTypeException
  96. */
  97. public function testTransformRequiresDateTime()
  98. {
  99. $transformer = new DateTimeToArrayTransformer();
  100. $transformer->reverseTransform('12345', null);
  101. }
  102. public function testReverseTransform()
  103. {
  104. $transformer = new DateTimeToArrayTransformer('UTC', 'UTC');
  105. $input = array(
  106. 'year' => '2010',
  107. 'month' => '2',
  108. 'day' => '3',
  109. 'hour' => '4',
  110. 'minute' => '5',
  111. 'second' => '6',
  112. );
  113. $output = new \DateTime('2010-02-03 04:05:06 UTC');
  114. $this->assertDateTimeEquals($output, $transformer->reverseTransform($input, null));
  115. }
  116. public function testReverseTransformWithSomeZero()
  117. {
  118. $transformer = new DateTimeToArrayTransformer('UTC', 'UTC');
  119. $input = array(
  120. 'year' => '2010',
  121. 'month' => '2',
  122. 'day' => '3',
  123. 'hour' => '4',
  124. 'minute' => '0',
  125. 'second' => '0',
  126. );
  127. $output = new \DateTime('2010-02-03 04:00:00 UTC');
  128. $this->assertDateTimeEquals($output, $transformer->reverseTransform($input, null));
  129. }
  130. public function testReverseTransform_completelyEmpty()
  131. {
  132. $transformer = new DateTimeToArrayTransformer();
  133. $input = array(
  134. 'year' => '',
  135. 'month' => '',
  136. 'day' => '',
  137. 'hour' => '',
  138. 'minute' => '',
  139. 'second' => '',
  140. );
  141. $this->assertSame(null, $transformer->reverseTransform($input, null));
  142. }
  143. public function testReverseTransform_completelyEmpty_subsetOfFields()
  144. {
  145. $transformer = new DateTimeToArrayTransformer(null, null, array('year', 'month', 'day'));
  146. $input = array(
  147. 'year' => '',
  148. 'month' => '',
  149. 'day' => '',
  150. );
  151. $this->assertSame(null, $transformer->reverseTransform($input, null));
  152. }
  153. /**
  154. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  155. */
  156. public function testReverseTransform_partiallyEmpty_year()
  157. {
  158. $transformer = new DateTimeToArrayTransformer();
  159. $transformer->reverseTransform(array(
  160. 'month' => '2',
  161. 'day' => '3',
  162. 'hour' => '4',
  163. 'minute' => '5',
  164. 'second' => '6',
  165. ));
  166. }
  167. /**
  168. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  169. */
  170. public function testReverseTransform_partiallyEmpty_month()
  171. {
  172. $transformer = new DateTimeToArrayTransformer();
  173. $transformer->reverseTransform(array(
  174. 'year' => '2010',
  175. 'day' => '3',
  176. 'hour' => '4',
  177. 'minute' => '5',
  178. 'second' => '6',
  179. ));
  180. }
  181. /**
  182. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  183. */
  184. public function testReverseTransform_partiallyEmpty_day()
  185. {
  186. $transformer = new DateTimeToArrayTransformer();
  187. $transformer->reverseTransform(array(
  188. 'year' => '2010',
  189. 'month' => '2',
  190. 'hour' => '4',
  191. 'minute' => '5',
  192. 'second' => '6',
  193. ));
  194. }
  195. /**
  196. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  197. */
  198. public function testReverseTransform_partiallyEmpty_hour()
  199. {
  200. $transformer = new DateTimeToArrayTransformer();
  201. $transformer->reverseTransform(array(
  202. 'year' => '2010',
  203. 'month' => '2',
  204. 'day' => '3',
  205. 'minute' => '5',
  206. 'second' => '6',
  207. ));
  208. }
  209. /**
  210. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  211. */
  212. public function testReverseTransform_partiallyEmpty_minute()
  213. {
  214. $transformer = new DateTimeToArrayTransformer();
  215. $transformer->reverseTransform(array(
  216. 'year' => '2010',
  217. 'month' => '2',
  218. 'day' => '3',
  219. 'hour' => '4',
  220. 'second' => '6',
  221. ));
  222. }
  223. /**
  224. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  225. */
  226. public function testReverseTransform_partiallyEmpty_second()
  227. {
  228. $transformer = new DateTimeToArrayTransformer();
  229. $transformer->reverseTransform(array(
  230. 'year' => '2010',
  231. 'month' => '2',
  232. 'day' => '3',
  233. 'hour' => '4',
  234. 'minute' => '5',
  235. ));
  236. }
  237. public function testReverseTransform_null()
  238. {
  239. $transformer = new DateTimeToArrayTransformer();
  240. $this->assertSame(null, $transformer->reverseTransform(null, null));
  241. }
  242. public function testReverseTransform_differentTimezones()
  243. {
  244. $transformer = new DateTimeToArrayTransformer('America/New_York', 'Asia/Hong_Kong');
  245. $input = array(
  246. 'year' => '2010',
  247. 'month' => '2',
  248. 'day' => '3',
  249. 'hour' => '4',
  250. 'minute' => '5',
  251. 'second' => '6',
  252. );
  253. $output = new \DateTime('2010-02-03 04:05:06 Asia/Hong_Kong');
  254. $output->setTimezone(new \DateTimeZone('America/New_York'));
  255. $this->assertDateTimeEquals($output, $transformer->reverseTransform($input, null));
  256. }
  257. public function testReverseTransformToDifferentTimezone()
  258. {
  259. $transformer = new DateTimeToArrayTransformer('Asia/Hong_Kong', 'UTC');
  260. $input = array(
  261. 'year' => '2010',
  262. 'month' => '2',
  263. 'day' => '3',
  264. 'hour' => '4',
  265. 'minute' => '5',
  266. 'second' => '6',
  267. );
  268. $output = new \DateTime('2010-02-03 04:05:06 UTC');
  269. $output->setTimezone(new \DateTimeZone('Asia/Hong_Kong'));
  270. $this->assertDateTimeEquals($output, $transformer->reverseTransform($input, null));
  271. }
  272. /**
  273. * @expectedException Symfony\Component\Form\Exception\UnexpectedTypeException
  274. */
  275. public function testReverseTransformRequiresArray()
  276. {
  277. $transformer = new DateTimeToArrayTransformer();
  278. $transformer->reverseTransform('12345', null);
  279. }
  280. /**
  281. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  282. */
  283. public function testReverseTransformWithNegativeYear()
  284. {
  285. $transformer = new DateTimeToArrayTransformer();
  286. $transformer->reverseTransform(array(
  287. 'year' => '-1',
  288. 'month' => '2',
  289. 'day' => '3',
  290. 'hour' => '4',
  291. 'minute' => '5',
  292. 'second' => '6',
  293. ));
  294. }
  295. /**
  296. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  297. */
  298. public function testReverseTransformWithNegativeMonth()
  299. {
  300. $transformer = new DateTimeToArrayTransformer();
  301. $transformer->reverseTransform(array(
  302. 'year' => '2010',
  303. 'month' => '-1',
  304. 'day' => '3',
  305. 'hour' => '4',
  306. 'minute' => '5',
  307. 'second' => '6',
  308. ));
  309. }
  310. /**
  311. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  312. */
  313. public function testReverseTransformWithNegativeDay()
  314. {
  315. $transformer = new DateTimeToArrayTransformer();
  316. $transformer->reverseTransform(array(
  317. 'year' => '2010',
  318. 'month' => '2',
  319. 'day' => '-1',
  320. 'hour' => '4',
  321. 'minute' => '5',
  322. 'second' => '6',
  323. ));
  324. }
  325. /**
  326. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  327. */
  328. public function testReverseTransformWithNegativeHour()
  329. {
  330. $transformer = new DateTimeToArrayTransformer();
  331. $transformer->reverseTransform(array(
  332. 'year' => '2010',
  333. 'month' => '2',
  334. 'day' => '3',
  335. 'hour' => '-1',
  336. 'minute' => '5',
  337. 'second' => '6',
  338. ));
  339. }
  340. /**
  341. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  342. */
  343. public function testReverseTransformWithNegativeMinute()
  344. {
  345. $transformer = new DateTimeToArrayTransformer();
  346. $transformer->reverseTransform(array(
  347. 'year' => '2010',
  348. 'month' => '2',
  349. 'day' => '3',
  350. 'hour' => '4',
  351. 'minute' => '-1',
  352. 'second' => '6',
  353. ));
  354. }
  355. /**
  356. * @expectedException Symfony\Component\Form\Exception\TransformationFailedException
  357. */
  358. public function testReverseTransformWithNegativeSecond()
  359. {
  360. $transformer = new DateTimeToArrayTransformer();
  361. $transformer->reverseTransform(array(
  362. 'year' => '2010',
  363. 'month' => '2',
  364. 'day' => '3',
  365. 'hour' => '4',
  366. 'minute' => '5',
  367. 'second' => '-1',
  368. ));
  369. }
  370. }