/framework/Date/test/Horde/Date/DateTest.php

https://github.com/finger2000/horde · PHP · 196 lines · 148 code · 38 blank · 10 comment · 0 complexity · a7ab2ce6111beb8dca57906ba7e270b7 MD5 · raw file

  1. <?php
  2. /**
  3. * @category Horde
  4. * @package Date
  5. * @subpackage UnitTests
  6. */
  7. require_once dirname(__FILE__) . '/Autoload.php';
  8. /**
  9. * @category Horde
  10. * @package Date
  11. * @subpackage UnitTests
  12. */
  13. class Horde_Date_DateTest extends PHPUnit_Framework_TestCase
  14. {
  15. public function setUp()
  16. {
  17. $this->_oldTimezone = date_default_timezone_get();
  18. date_default_timezone_set('Europe/Berlin');
  19. }
  20. public function tearDown()
  21. {
  22. date_default_timezone_set($this->_oldTimezone);
  23. }
  24. public function testConstructor()
  25. {
  26. $date = new stdClass();
  27. $date->year = 2001;
  28. $date->month = 2;
  29. $date->mday = 3;
  30. $date->hour = 4;
  31. $date->min = 5;
  32. $date->sec = 6;
  33. $this->assertEquals('2001-02-03 04:05:06', (string)new Horde_Date($date));
  34. $this->assertEquals('2001-02-03 04:05:06', (string)new Horde_Date((array)$date));
  35. $this->assertEquals('2001-02-03 04:05:06', (string)new Horde_Date(array('year' => 2001, 'month' => 2, 'day' => 3, 'hour' => 4, 'minute' => 5, 'sec' => 6)));
  36. $this->assertEquals('2001-02-03 04:05:06', (string)new Horde_Date('20010203040506'));
  37. $this->assertEquals('2001-02-03 05:05:06', (string)new Horde_Date('20010203T040506Z'));
  38. $this->assertEquals('2001-02-03 04:05:06', (string)new Horde_Date('2001-02-03 04:05:06'));
  39. $this->assertEquals('2001-02-03 04:05:06', (string)new Horde_Date(981169506));
  40. }
  41. public function testDateCorrection()
  42. {
  43. $d = new Horde_Date('2008-01-01 00:00:00');
  44. $d->month -= 2;
  45. $this->assertEquals(2007, $d->year);
  46. $d = new Horde_Date('2008-01-01 00:00:00');
  47. $d->day -= 1;
  48. $this->assertEquals(2007, $d->year);
  49. $this->assertEquals(12, $d->month);
  50. $d = new Horde_Date('2008-01-01 00:00:00');
  51. $d->day += 370;
  52. $this->assertEquals(2009, $d->year);
  53. $this->assertEquals(1, $d->month);
  54. $d = new Horde_Date('2008-01-01 00:00:00');
  55. $d->sec += 14400;
  56. $this->assertEquals(0, $d->sec);
  57. $this->assertEquals(0, $d->min);
  58. $this->assertEquals(4, $d->hour);
  59. $d = new Horde_Date('2011-03-31 00:00:00');
  60. $d->month += 1;
  61. $this->assertEquals(5, $d->month);
  62. $this->assertEquals(1, $d->day);
  63. $d = new Horde_Date('2011-03-31 00:00:00');
  64. $d->month -= 1;
  65. $this->assertEquals(2, $d->month);
  66. $this->assertEquals(28, $d->day);
  67. $d = new Horde_Date('2011-02-28 00:00:00');
  68. $d->day += 1;
  69. $this->assertEquals(3, $d->month);
  70. $this->assertEquals(1, $d->day);
  71. $d = new Horde_Date('2011-03-01 00:00:00');
  72. $d->day -= 1;
  73. $this->assertEquals(2, $d->month);
  74. $this->assertEquals(28, $d->day);
  75. }
  76. public function testTimestamp()
  77. {
  78. $oldTimezone = date_default_timezone_get();
  79. date_default_timezone_set('America/New_York');
  80. $date = new Horde_Date(array('mday' => 1, 'month' => 10, 'year' => 2004));
  81. $this->assertEquals('1096603200', $date->timestamp());
  82. $this->assertEquals('1096603200', mktime(0, 0, 0, $date->month, $date->mday, $date->year));
  83. $date = new Horde_Date(array('mday' => 1, 'month' => 5, 'year' => 1948));
  84. $this->assertEquals('-683841600', $date->timestamp());
  85. $this->assertEquals('-683841600', mktime(0, 0, 0, $date->month, $date->mday, $date->year));
  86. date_default_timezone_set($oldTimezone);
  87. }
  88. public function testStrftime()
  89. {
  90. setlocale(LC_TIME, 'en_US.UTF-8');
  91. $date = new Horde_Date('2001-02-03 16:05:06');
  92. $format = '%C%n%d%n%D%n%e%n%H%n%I%n%m%n%M%n%R%n%S%n%t%n%T%n%y%n%Y%n%%';
  93. $this->assertEquals(strftime($format, $date->timestamp()), $date->strftime($format));
  94. $format = '%b%n%B%n%p%n%r%n%x%n%X';
  95. $this->assertEquals(strftime($format, $date->timestamp()), $date->strftime($format));
  96. $date->year = 1899;
  97. $expected = array(
  98. '18',
  99. '03',
  100. '02/03/99',
  101. ' 3',
  102. '16',
  103. '04',
  104. '02',
  105. '05',
  106. '16:05',
  107. '06',
  108. "\t",
  109. '16:05:06',
  110. '99',
  111. '1899',
  112. '%',
  113. );
  114. $format = '%C%n%d%n%D%n%e%n%H%n%I%n%m%n%M%n%R%n%S%n%t%n%T%n%y%n%Y%n%%';
  115. $this->assertEquals($expected, explode("\n", $date->strftime($format)));
  116. }
  117. public function testStrftimeDe()
  118. {
  119. setlocale(LC_TIME, 'de_DE');
  120. $date = new Horde_Date('2001-02-03 16:05:06');
  121. $format = '%b%n%B%n%p%n%r%n%x%n%X';
  122. $this->assertEquals(strftime($format, $date->timestamp()), $date->strftime($format));
  123. }
  124. public function testSetTimezone()
  125. {
  126. $oldTimezone = date_default_timezone_get();
  127. date_default_timezone_set('America/New_York');
  128. $date = new Horde_Date('20010203040506');
  129. $this->assertEquals('2001-02-03 04:05:06', (string)$date);
  130. $date->setTimezone('Europe/Berlin');
  131. $this->assertEquals('2001-02-03 10:05:06', (string)$date);
  132. $date = new Horde_Date('20010203040506', 'UTC');
  133. $this->assertEquals('2001-02-03 04:05:06', (string)$date);
  134. $date->setTimezone('Europe/Berlin');
  135. $this->assertEquals('2001-02-03 05:05:06', (string)$date);
  136. date_default_timezone_set($oldTimezone);
  137. }
  138. public function testDateMath()
  139. {
  140. $d = new Horde_Date('2008-01-01 00:00:00');
  141. $this->assertEquals('2007-12-31 00:00:00', (string)$d->sub(array('day' => 1)));
  142. $this->assertEquals('2009-01-01 00:00:00', (string)$d->add(array('year' => 1)));
  143. $this->assertEquals('2008-01-01 04:00:00', (string)$d->add(14400));
  144. $span = new Horde_Date_Span('2006-01-01 00:00:00', '2006-08-16 00:00:00');
  145. $this->assertEquals('2006-04-24 11:30:00', (string)$span->begin->add($span->width() / 2));
  146. }
  147. public function testSetNthWeekday()
  148. {
  149. $date = new Horde_Date('2004-10-01');
  150. $date->setNthWeekday(Horde_Date::DATE_SATURDAY);
  151. $this->assertEquals(2, $date->mday);
  152. $date->setNthWeekday(Horde_Date::DATE_SATURDAY, 2);
  153. $this->assertEquals(9, $date->mday);
  154. $date = new Horde_Date('2007-04-01');
  155. $date->setNthWeekday(Horde_Date::DATE_THURSDAY);
  156. $this->assertEquals(5, $date->mday);
  157. }
  158. }