From: Jan Schneider Date: Mon, 8 Jun 2009 15:29:02 +0000 (+0200) Subject: Port first half of recurrence tests. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=dc2e9801a91e3c05a2d99edb1f79248f6f9e148b;p=horde.git Port first half of recurrence tests. --- diff --git a/framework/Date/test/Horde/Date/RecurrenceTest.php b/framework/Date/test/Horde/Date/RecurrenceTest.php index 497d8b504..605bcf3b3 100644 --- a/framework/Date/test/Horde/Date/RecurrenceTest.php +++ b/framework/Date/test/Horde/Date/RecurrenceTest.php @@ -6,6 +6,262 @@ */ class Horde_Date_RecurrenceTest extends PHPUnit_Framework_TestCase { + protected function setUp() + { + require_once 'Horde/String.php'; + String::setDefaultCharset('UTF-8'); + $this->ical = new Horde_iCalendar(); + } + + private function _getRecurrences($r) + { + $recurrences = array(); + $protect = 0; + $next = new Horde_Date('2007-03-01 00:00:00'); + while ($next = $r->nextRecurrence($next)) { + if (++$protect > 10) { + return 'Infinite loop'; + } + $recurrences[] = (string)$next; + $next->mday++; + } + return $recurrences; + } + + public function testDailyEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_DAILY); + $r->setRecurInterval(2); + $r->setRecurEnd(new Horde_Date('2007-03-07 10:00:00')); + $this->assertEquals('D2 20070308T090000Z', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=DAILY;INTERVAL=2;UNTIL=20070308T090000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-03-03 10:00:00', + '2007-03-05 10:00:00', + '2007-03-07 10:00:00'), + $this->_getRecurrences($r)); + $r->setRecurCount(4); + } + + public function testDailyCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_DAILY); + $r->setRecurInterval(2); + $r->setRecurCount(4); + $this->assertEquals('D2 #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=DAILY;INTERVAL=2;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-03-03 10:00:00', + '2007-03-05 10:00:00', + '2007-03-07 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testWeeklyEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_WEEKLY); + $r->setRecurOnDay(Horde_Date::MASK_THURSDAY); + $r->setRecurInterval(1); + $r->setRecurEnd(new Horde_Date('2007-03-29 10:00:00')); + $this->assertEquals('W1 TH 20070330T080000Z', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=WEEKLY;INTERVAL=1;BYDAY=TH;UNTIL=20070330T080000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-03-08 10:00:00', + '2007-03-15 10:00:00', + '2007-03-22 10:00:00', + '2007-03-29 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testWeeklyCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_WEEKLY); + $r->setRecurOnDay(Horde_Date::MASK_THURSDAY); + $r->setRecurInterval(1); + $r->setRecurCount(4); + $this->assertEquals('W1 TH #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=WEEKLY;INTERVAL=1;BYDAY=TH;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-03-08 10:00:00', + '2007-03-15 10:00:00', + '2007-03-22 10:00:00'), + $this->_getRecurrences($r)); + $r->setRecurInterval(2); + $this->assertEquals('W2 TH #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=WEEKLY;INTERVAL=2;BYDAY=TH;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-03-15 10:00:00', + '2007-03-29 10:00:00', + '2007-04-12 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testMonthlyEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_DATE); + $r->setRecurInterval(1); + $r->setRecurEnd(new Horde_Date('2007-05-01 10:00:00')); + $this->assertEquals('MD1 1 20070502T080000Z', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;UNTIL=20070502T080000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-04-01 10:00:00', + '2007-05-01 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testMonthlyCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_DATE); + $r->setRecurInterval(1); + $r->setRecurCount(4); + $this->assertEquals('MD1 1 #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-04-01 10:00:00', + '2007-05-01 10:00:00', + '2007-06-01 10:00:00'), + $this->_getRecurrences($r)); + $r->setRecurInterval(2); + $this->assertEquals('MD2 1 #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=2;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-05-01 10:00:00', + '2007-07-01 10:00:00', + '2007-09-01 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testMonthlyDayEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); + $r->setRecurInterval(1); + $r->setRecurEnd(new Horde_Date('2007-05-01 10:00:00')); + $this->assertEquals('MP1 1+ TH 20070502T080000Z', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;BYDAY=1TH;UNTIL=20070502T080000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-04-05 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testMonthlyDayCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); + $r->setRecurInterval(1); + $r->setRecurCount(4); + $this->assertEquals('MP1 1+ TH #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;BYDAY=1TH;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2007-04-05 10:00:00', + '2007-05-03 10:00:00', + '2007-06-07 10:00:00'), + $this->_getRecurrences($r)); + + $r = new Horde_Date_Recurrence('2008-03-14 12:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); + $r->setRecurCount(2); + $this->assertEquals('MP1 2+ FR #2', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR;COUNT=2', $r->toRRule20($this->ical)); + } + + public function testYearlyDateEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); + $r->setRecurEnd(new Horde_Date('2009-03-01 10:00:00')); + $this->assertEquals('YM1 3 20090302T090000Z', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=YEARLY;INTERVAL=1;UNTIL=20090302T090000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2008-03-01 10:00:00', + '2009-03-01 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testYearlyDateCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); + $r->setRecurCount(4); + $this->assertEquals('YM1 3 #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=YEARLY;INTERVAL=1;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2008-03-01 10:00:00', + '2009-03-01 10:00:00', + '2010-03-01 10:00:00'), + $this->_getRecurrences($r)); + + $r = new Horde_Date_Recurrence('2007-04-25 12:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); + $r->setRecurEnd(new Horde_Date('2011-04-25 23:00:00')); + $r->setRecurInterval(2); + $this->assertEquals('2009-04-25 12:00:00', (string)$r->nextRecurrence(new Horde_Date('2009-03-30 00:00:00'))); + + $r = new Horde_Date_Recurrence('2008-02-29 00:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); + $r->setRecurInterval(1); + $this->assertEquals('2012-02-29 00:00:00', (string)$r->nextRecurrence(new Horde_Date('2008-03-01 00:00:00'))); + } + + public function testYearlyDayEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DAY); + $r->setRecurEnd(new Horde_Date('2009-03-01 10:00:00')); + $this->assertEquals('YD1 60 20090302T090000Z', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=YEARLY;INTERVAL=1;BYYEARDAY=60;UNTIL=20090302T090000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2008-02-29 10:00:00', + '2009-03-01 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testYearlyDayCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DAY); + $r->setRecurCount(4); + $this->assertEquals('YD1 60 #4', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=YEARLY;INTERVAL=1;BYYEARDAY=60;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2008-02-29 10:00:00', + '2009-03-01 10:00:00', + '2010-03-01 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testYearlyWeekEnd() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY); + $r->setRecurEnd(new Horde_Date('2009-03-01 10:00:00')); + $this->assertEquals('', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=YEARLY;INTERVAL=1;BYDAY=1TH;BYMONTH=3;UNTIL=20090302T090000Z', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2008-03-06 10:00:00'), + $this->_getRecurrences($r)); + } + + public function testYearlyWeekCount() + { + $r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); + $r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY); + $r->setRecurCount(4); + $this->assertEquals('', $r->toRRule10($this->ical)); + $this->assertEquals('FREQ=YEARLY;INTERVAL=1;BYDAY=1TH;BYMONTH=3;COUNT=4', $r->toRRule20($this->ical)); + $this->assertEquals(array('2007-03-01 10:00:00', + '2008-03-06 10:00:00', + '2009-03-05 10:00:00', + '2010-03-04 10:00:00'), + $this->_getRecurrences($r)); + } + public function testHash() { $d = new Horde_Date(1970, 1, 1); @@ -156,23 +412,6 @@ class Horde_Date_RecurrenceTest extends PHPUnit_Framework_TestCase } /* -function recur($r) -{ - $ical = new Horde_iCalendar(); - echo $r->toRRule10($ical) . "\n"; - echo $r->toRRule20($ical) . "\n"; - $protect = 0; - $next = new Horde_Date('2007-03-01 00:00:00'); - while ($next = $r->nextRecurrence($next)) { - if (++$protect > 10) { - die('Infinite loop'); - } - echo (string)$next . "\n"; - $next->mday++; - } - var_dump($next); - echo "\n"; -} function dump($rrule, $version) { @@ -193,80 +432,6 @@ function dump($rrule, $version) echo "\n"; } -$r = new Horde_Date_Recurrence('2007-03-01 10:00:00'); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_DAILY); -$r->setRecurInterval(2); -$r->setRecurEnd(new Horde_Date('2007-03-07 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_WEEKLY); -$r->setRecurOnDay(Horde_Date::MASK_THURSDAY); -$r->setRecurInterval(1); -$r->setRecurEnd(new Horde_Date('2007-03-29 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); -$r->setRecurInterval(2); -recur($r); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_DATE); -$r->setRecurInterval(1); -$r->setRecurEnd(new Horde_Date('2007-05-01 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); -$r->setRecurInterval(2); -recur($r); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); -$r->setRecurInterval(1); -$r->setRecurEnd(new Horde_Date('2007-05-01 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); -$r->setRecurEnd(new Horde_Date('2009-03-01 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DAY); -$r->setRecurEnd(new Horde_Date('2009-03-01 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); - -$r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY); -$r->setRecurEnd(new Horde_Date('2009-03-01 10:00:00')); -recur($r); -$r->setRecurCount(4); -recur($r); - -$r = new Horde_Date_Recurrence('2007-04-25 12:00:00'); -$r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); -$r->setRecurEnd(new Horde_Date('2011-04-25 23:00:00')); -$r->setRecurInterval(2); -$next = new Horde_Date('2009-03-30 00:00:00'); -$next = $r->nextRecurrence($next); -echo (string)$next . "\n\n"; - -$r = new Horde_Date_Recurrence('2008-02-29 00:00:00'); -$r->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE); -$r->setRecurInterval(1); -$next = new Horde_Date('2008-03-01 00:00:00'); -$next = $r->nextRecurrence($next); -echo (string)$next . "\n\n"; - -$r = new Horde_Date_Recurrence('2008-03-14 12:00:00'); -$r->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); -$r->setRecurCount(2); -$ical = new Horde_iCalendar(); -echo $r->toRRule10($ical) . "\n"; -echo $r->toRRule20($ical) . "\n\n"; $rrule1 = array('D2 20070307', 'D2 20070308T090000Z', @@ -321,134 +486,6 @@ foreach ($rrule2 as $rrule) { ?> --EXPECT-- -D2 20070308T090000Z -FREQ=DAILY;INTERVAL=2;UNTIL=20070308T090000Z -2007-03-01 10:00:00 -2007-03-03 10:00:00 -2007-03-05 10:00:00 -2007-03-07 10:00:00 -bool(false) - -D2 #4 -FREQ=DAILY;INTERVAL=2;COUNT=4 -2007-03-01 10:00:00 -2007-03-03 10:00:00 -2007-03-05 10:00:00 -2007-03-07 10:00:00 -bool(false) - -W1 TH 20070330T080000Z -FREQ=WEEKLY;INTERVAL=1;BYDAY=TH;UNTIL=20070330T080000Z -2007-03-01 10:00:00 -2007-03-08 10:00:00 -2007-03-15 10:00:00 -2007-03-22 10:00:00 -2007-03-29 10:00:00 -bool(false) - -W1 TH #4 -FREQ=WEEKLY;INTERVAL=1;BYDAY=TH;COUNT=4 -2007-03-01 10:00:00 -2007-03-08 10:00:00 -2007-03-15 10:00:00 -2007-03-22 10:00:00 -bool(false) - -W2 TH #4 -FREQ=WEEKLY;INTERVAL=2;BYDAY=TH;COUNT=4 -2007-03-01 10:00:00 -2007-03-15 10:00:00 -2007-03-29 10:00:00 -2007-04-12 10:00:00 -bool(false) - -MD1 1 20070502T080000Z -FREQ=MONTHLY;INTERVAL=1;UNTIL=20070502T080000Z -2007-03-01 10:00:00 -2007-04-01 10:00:00 -2007-05-01 10:00:00 -bool(false) - -MD1 1 #4 -FREQ=MONTHLY;INTERVAL=1;COUNT=4 -2007-03-01 10:00:00 -2007-04-01 10:00:00 -2007-05-01 10:00:00 -2007-06-01 10:00:00 -bool(false) - -MD2 1 #4 -FREQ=MONTHLY;INTERVAL=2;COUNT=4 -2007-03-01 10:00:00 -2007-05-01 10:00:00 -2007-07-01 10:00:00 -2007-09-01 10:00:00 -bool(false) - -MP1 1+ TH 20070502T080000Z -FREQ=MONTHLY;INTERVAL=1;BYDAY=1TH;UNTIL=20070502T080000Z -2007-03-01 10:00:00 -2007-04-05 10:00:00 -bool(false) - -MP1 1+ TH #4 -FREQ=MONTHLY;INTERVAL=1;BYDAY=1TH;COUNT=4 -2007-03-01 10:00:00 -2007-04-05 10:00:00 -2007-05-03 10:00:00 -2007-06-07 10:00:00 -bool(false) - -YM1 3 20090302T090000Z -FREQ=YEARLY;INTERVAL=1;UNTIL=20090302T090000Z -2007-03-01 10:00:00 -2008-03-01 10:00:00 -2009-03-01 10:00:00 -bool(false) - -YM1 3 #4 -FREQ=YEARLY;INTERVAL=1;COUNT=4 -2007-03-01 10:00:00 -2008-03-01 10:00:00 -2009-03-01 10:00:00 -2010-03-01 10:00:00 -bool(false) - -YD1 60 20090302T090000Z -FREQ=YEARLY;INTERVAL=1;BYYEARDAY=60;UNTIL=20090302T090000Z -2007-03-01 10:00:00 -2008-02-29 10:00:00 -2009-03-01 10:00:00 -bool(false) - -YD1 60 #4 -FREQ=YEARLY;INTERVAL=1;BYYEARDAY=60;COUNT=4 -2007-03-01 10:00:00 -2008-02-29 10:00:00 -2009-03-01 10:00:00 -2010-03-01 10:00:00 -bool(false) - - -FREQ=YEARLY;INTERVAL=1;BYDAY=1TH;BYMONTH=3;UNTIL=20090302T090000Z -2007-03-01 10:00:00 -2008-03-06 10:00:00 -bool(false) - - -FREQ=YEARLY;INTERVAL=1;BYDAY=1TH;BYMONTH=3;COUNT=4 -2007-03-01 10:00:00 -2008-03-06 10:00:00 -2009-03-05 10:00:00 -2010-03-04 10:00:00 -bool(false) - -2009-04-25 12:00:00 - -2012-02-29 00:00:00 - -MP1 2+ FR #2 -FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR;COUNT=2 int(1) int(2)