first import

This commit is contained in:
Bachir Soussi Chiadmi
2015-04-08 11:40:19 +02:00
commit 1bc61b12ad
8435 changed files with 1582817 additions and 0 deletions

View File

@@ -0,0 +1,455 @@
<?php
/**
* @file
* Test Date Repeat calculations.
*/
class DateRepeatTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => t('Date Repeat'),
'description' => t('Test Date Repeat functions to create arrays of dates from iCal rules.') ,
'group' => t('Date'),
);
}
/**
* Implements setUp().
*/
public function setUp() {
// Load the date_repeat module.
parent::setUp('date_api', 'date_repeat');
}
public function testDateRepeat() {
require_once('./' . drupal_get_path('module', 'date_api') . '/date_api_ical.inc');
require_once('./' . drupal_get_path('module', 'date_repeat') . '/date_repeat_calc.inc');
// Examples adapted from http://www.faqs.org/rfcs/rfc2445.html and
// http://www.kanzaki.com/docs/ical/rrule.html.
// Invalid value:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=NONE;INTERVAL=0;COUNT=10";
$dates = date_repeat_calc($rule, $start, $end, array());
// should be (1997 9:00 AM EDT)September 2-11
$shouldbe = '';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
// Daily for 10 occurrences:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=DAILY;COUNT=10";
$dates = date_repeat_calc($rule, $start, $end, array());
// should be (1997 9:00 AM EDT)September 2-11
$shouldbe = '1997-09-02 09:00:00, 1997-09-03 09:00:00, 1997-09-04 09:00:00, 1997-09-05 09:00:00, 1997-09-06 09:00:00, 1997-09-07 09:00:00, 1997-09-08 09:00:00, 1997-09-09 09:00:00, 1997-09-10 09:00:00, 1997-09-11 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Daily until September 24, 1997:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=DAILY;UNTIL=19970924T000000Z";
$dates = date_repeat_calc($rule, $start, $end, array());
// should be (1997 9:00 AM EDT)September 2-23
$shouldbe = '1997-09-02 09:00:00, 1997-09-03 09:00:00, 1997-09-04 09:00:00, 1997-09-05 09:00:00, 1997-09-06 09:00:00, 1997-09-07 09:00:00, 1997-09-08 09:00:00, 1997-09-09 09:00:00, 1997-09-10 09:00:00, 1997-09-11 09:00:00, 1997-09-12 09:00:00, 1997-09-13 09:00:00, 1997-09-14 09:00:00, 1997-09-15 09:00:00, 1997-09-16 09:00:00, 1997-09-17 09:00:00, 1997-09-18 09:00:00, 1997-09-19 09:00:00, 1997-09-20 09:00:00, 1997-09-21 09:00:00, 1997-09-22 09:00:00, 1997-09-23 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every other day - until September 30:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=DAILY;INTERVAL=2";
$dates = date_repeat_calc($rule, $start, $end, array());
// should be (1997 9:00 AM EDT)September2,4,6,8...24,26,28,30;
$shouldbe = '1997-09-02 09:00:00, 1997-09-04 09:00:00, 1997-09-06 09:00:00, 1997-09-08 09:00:00, 1997-09-10 09:00:00, 1997-09-12 09:00:00, 1997-09-14 09:00:00, 1997-09-16 09:00:00, 1997-09-18 09:00:00, 1997-09-20 09:00:00, 1997-09-22 09:00:00, 1997-09-24 09:00:00, 1997-09-26 09:00:00, 1997-09-28 09:00:00, 1997-09-30 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every 10 days, 2 occurrences:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=DAILY;INTERVAL=10;COUNT=2";
$dates = date_repeat_calc($rule, $start, $end, array());
// should be (1997 9:00 AM EDT)September 2,12
$shouldbe = '1997-09-02 09:00:00, 1997-09-12 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Weekly for 3 occurrences
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;COUNT=3";
$dates = date_repeat_calc($rule, $start, $end, array());
// should be (1997 9:00 AM EDT)September 2,9,16
$shouldbe = '1997-09-02 09:00:00, 1997-09-09 09:00:00, 1997-09-16 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Weekly until September 24, 1997
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;UNTIL=19970924T000000Z";
// ==> (1997 9:00 AM EDT)September 2,9,16,23
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-09 09:00:00, 1997-09-16 09:00:00, 1997-09-23 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every other week - forever:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU";
// should be (1997 9:00 AM EDT)September 2,16,30
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-16 09:00:00, 1997-09-30 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Weekly on Tuesday and Thursday for 4 weeks:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;COUNT=8;WKST=SU;BYDAY=TU,TH";
// should be(1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-04 09:00:00, 1997-09-09 09:00:00, 1997-09-11 09:00:00, 1997-09-16 09:00:00, 1997-09-18 09:00:00, 1997-09-23 09:00:00, 1997-09-25 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every other week on Tuesday and Thursday, for 5 occurrences:
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=5;WKST=SU;BYDAY=TU,TH";
// should be (1997 9:00 AM EDT)September 2,4,16,18,30
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-04 09:00:00, 1997-09-16 09:00:00, 1997-09-18 09:00:00, 1997-09-30 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every other week on Monday, Wednesday and Friday until September 24, 1997,
$start = "1997-09-02 09:00:00";
$end = "1997-09-30 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19970924T000000Z;WKST=SU;BYDAY=MO,WE,FR";
// should be (1997 9:00 AM EDT)September 2,3,5,15,17,19
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-03 09:00:00, 1997-09-05 09:00:00, 1997-09-15 09:00:00, 1997-09-17 09:00:00, 1997-09-19 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Monthly on the 1st Friday for 2 occurrences:
$start = "1997-09-05 09:00:00";
$end = "1997-10-31 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;COUNT=2;BYDAY=1FR";
// should be (1997 9:00 AM EDT)September 5;October 3
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-05 09:00:00, 1997-10-03 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Monthly on the 1st Friday until December 24, 1997:
$start = "1997-09-05 09:00:00";
$end = "1998-10-01 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-05 09:00:00, 1997-10-03 09:00:00, 1997-11-07 09:00:00, 1997-12-05 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every other month on the 1st and last Sunday of the month for 10 occurrences:
$start = "1997-09-07 09:00:00";
$end = "1998-10-01 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU";
// ==> (1997 9:00 AM EDT)September 7,28
// (1997 9:00 AM EST)November 2,30
// (1998 9:00 AM EST)January 4,25;March 1,29
// (1998 9:00 AM EDT)May 3,31
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-07 09:00:00, 1997-09-28 09:00:00, 1997-11-02 09:00:00, 1997-11-30 09:00:00, 1998-01-04 09:00:00, 1998-01-25 09:00:00, 1998-03-01 09:00:00, 1998-03-29 09:00:00, 1998-05-03 09:00:00, 1998-05-31 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Monthly on the second to last Monday of the month for 6 months:
$start = "1997-09-22 09:00:00";
$end = "1998-10-01 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO";
//==> (1997 9:00 AM EDT)September 22;October 20
// (1997 9:00 AM EST)November 17;December 22
// (1998 9:00 AM EST)January 19;February 16
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-22 09:00:00, 1997-10-20 09:00:00, 1997-11-17 09:00:00, 1997-12-22 09:00:00, 1998-01-19 09:00:00, 1998-02-16 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every Tuesday, every other month:
$start = "1997-09-02 09:00:00";
$end = "1998-02-01 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU";
// ==> (1997 9:00 AM EDT)September 2,9,16,23,30
// (1997 9:00 AM EST)November 4,11,18,25
// (1998 9:00 AM EST)January 6,13,20,27;March 3,10,17,24,31
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-09 09:00:00, 1997-09-16 09:00:00, 1997-09-23 09:00:00, 1997-09-30 09:00:00, 1997-11-04 09:00:00, 1997-11-11 09:00:00, 1997-11-18 09:00:00, 1997-11-25 09:00:00, 1998-01-06 09:00:00, 1998-01-13 09:00:00, 1998-01-20 09:00:00, 1998-01-27 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Yearly in June and July for 10 occurrences:
$start = "1997-06-10 09:00:00";
$end = "2002-01-01 09:00:00";
$rule = "RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7";
// ==> (1997 9:00 AM EDT)June 10;July 10
// (1998 9:00 AM EDT)June 10;July 10
// (1999 9:00 AM EDT)June 10;July 10
// (2000 9:00 AM EDT)June 10;July 10
// (2001 9:00 AM EDT)June 10;July 10
// Note: Since none of the BYDAY, BYMONTHDAY or BYYEARDAY components
// are specified, the day is gotten from DTSTART
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-06-10 09:00:00, 1997-07-10 09:00:00, 1998-06-10 09:00:00, 1998-07-10 09:00:00, 1999-06-10 09:00:00, 1999-07-10 09:00:00, 2000-06-10 09:00:00, 2000-07-10 09:00:00, 2001-06-10 09:00:00, 2001-07-10 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every other year on January, February, and March for 10 occurrences:
$start = "1997-03-10 09:00:00";
$end = "2004-01-01 09:00:00";
$rule = "RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3";
// ==> (1997 9:00 AM EST)March 10
// (1999 9:00 AM EST)January 10;February 10;March 10
// (2001 9:00 AM EST)January 10;February 10;March 10
// (2003 9:00 AM EST)January 10;February 10;March 10
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-03-10 09:00:00, 1999-01-10 09:00:00, 1999-02-10 09:00:00, 1999-03-10 09:00:00, 2001-01-10 09:00:00, 2001-02-10 09:00:00, 2001-03-10 09:00:00, 2003-01-10 09:00:00, 2003-02-10 09:00:00, 2003-03-10 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//An example where the days generated makes a difference because of WKST:
$start = "1997-08-05 09:00:00";
$end = "2004-01-01 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO";
// ==> (1997 EDT)Aug 5,10,19,24
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-08-05 09:00:00, 1997-08-10 09:00:00, 1997-08-19 09:00:00, 1997-08-24 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//changing only WKST from MO to SU, yields different results...
$start = "1997-08-05 09:00:00";
$end = "2004-01-01 09:00:00";
$rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU";
// Result: 1997 EDT August 5,17,19,31;
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-08-05 09:00:00, 1997-08-17 09:00:00, 1997-08-19 09:00:00, 1997-08-31 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every 18 months on the 10th thru 15th of the month for 10 occurrences:
$start = "1997-09-10 09:00:00";
$end = "2004-01-01 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15";
// ==> (1997 9:00 AM EDT)September 10,11,12,13,14,15
// (1999 9:00 AM EST)March 10,11,12,13
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-10 09:00:00, 1997-09-11 09:00:00, 1997-09-12 09:00:00, 1997-09-13 09:00:00, 1997-09-14 09:00:00, 1997-09-15 09:00:00, 1999-03-10 09:00:00, 1999-03-11 09:00:00, 1999-03-12 09:00:00, 1999-03-13 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Monthly on the third to the last day of the month, forever:
$start = "1997-09-28 09:00:00";
$end = "1998-03-01 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;BYMONTHDAY=-3";
// ==> (1997 9:00 AM EDT)September 28
// (1997 9:00 AM EST)October 29;November 28;December 29
// (1998 9:00 AM EST)January 29;February 26
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-28 09:00:00, 1997-10-29 09:00:00, 1997-11-28 09:00:00, 1997-12-29 09:00:00, 1998-01-29 09:00:00, 1998-02-26 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every Thursday in March, forever:
// ==> (1997 9:00 AM EST)March 13,20,27
// (1998 9:00 AM EST)March 5,12,19,26
// (1999 9:00 AM EST)March 4,11,18,25
$start = "1997-03-13 09:00:00";
$end = "1999-03-31 09:00:00";
$rule = "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-03-13 09:00:00, 1997-03-20 09:00:00, 1997-03-27 09:00:00, 1998-03-05 09:00:00, 1998-03-12 09:00:00, 1998-03-19 09:00:00, 1998-03-26 09:00:00, 1999-03-04 09:00:00, 1999-03-11 09:00:00, 1999-03-18 09:00:00, 1999-03-25 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every Thursday, but only during June, July, and August, forever:
// ==> (1997 9:00 AM EDT)June 5,12,19,26;July 3,10,17,24,31;August 7,14,21,28
// (1998 9:00 AM EDT)June 4,11,18,25;July 2,9,16,23,30;August 6,13,20,27
// (1999 9:00 AM EDT)June 3,10,17,24;July 1,8,15,22,29;August 5,12,19,26
$start = "1997-06-05 09:00:00";
$end = "1999-08-31 09:00:00";
$rule = "RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-06-05 09:00:00, 1997-06-12 09:00:00, 1997-06-19 09:00:00, 1997-06-26 09:00:00, 1997-07-03 09:00:00, 1997-07-10 09:00:00, 1997-07-17 09:00:00, 1997-07-24 09:00:00, 1997-07-31 09:00:00, 1997-08-07 09:00:00, 1997-08-14 09:00:00, 1997-08-21 09:00:00, 1997-08-28 09:00:00, 1998-06-04 09:00:00, 1998-06-11 09:00:00, 1998-06-18 09:00:00, 1998-06-25 09:00:00, 1998-07-02 09:00:00, 1998-07-09 09:00:00, 1998-07-16 09:00:00, 1998-07-23 09:00:00, 1998-07-30 09:00:00, 1998-08-06 09:00:00, 1998-08-13 09:00:00, 1998-08-20 09:00:00, 1998-08-27 09:00:00, 1999-06-03 09:00:00, 1999-06-10 09:00:00, 1999-06-17 09:00:00, 1999-06-24 09:00:00, 1999-07-01 09:00:00, 1999-07-08 09:00:00, 1999-07-15 09:00:00, 1999-07-22 09:00:00, 1999-07-29 09:00:00, 1999-08-05 09:00:00, 1999-08-12 09:00:00, 1999-08-19 09:00:00, 1999-08-26 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Monthly on the 2nd and 15th of the month for 10 occurrences:
// ==> (1997 9:00 AM EDT)September 2,15;October 2,15
// (1997 9:00 AM EST)November 2,15;December 2,15
// (1998 9:00 AM EST)January 2,15
$start = "1997-09-02 09:00:00";
$end = "1998-01-31 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1997-09-15 09:00:00, 1997-10-02 09:00:00, 1997-10-15 09:00:00, 1997-11-02 09:00:00, 1997-11-15 09:00:00, 1997-12-02 09:00:00, 1997-12-15 09:00:00, 1998-01-02 09:00:00, 1998-01-15 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Monthly on the first and last day of the month for 10 occurrences:
// ==> (1997 9:00 AM EDT)September 30;October 1
// (1997 9:00 AM EST)October 31;November 1,30;December 1,31
// (1998 9:00 AM EST)January 1,31;February 1
$start = "1997-09-30 09:00:00";
$end = "1998-03-31 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-30 09:00:00, 1997-10-01 09:00:00, 1997-10-31 09:00:00, 1997-11-01 09:00:00, 1997-11-30 09:00:00, 1997-12-01 09:00:00, 1997-12-31 09:00:00, 1998-01-01 09:00:00, 1998-01-31 09:00:00, 1998-02-01 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every Friday the 13th, forever:
$rule = "EXDATE;TZID=US-Eastern:19970902T090000";
// ==> (1998 9:00 AM EST)February 13;March 13;November 13
// (1999 9:00 AM EDT)August 13
// (2000 9:00 AM EDT)October 13
$start = "1997-09-02 09:00:00";
$end = "2000-12-31 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-02 09:00:00, 1998-02-13 09:00:00, 1998-03-13 09:00:00, 1998-11-13 09:00:00, 1999-08-13 09:00:00, 2000-10-13 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//The first Saturday that follows the first Sunday of the month, forever:
// ==> (1997 9:00 AM EDT)September 13;October 11
// (1997 9:00 AM EST)November 8;December 13
// (1998 9:00 AM EST)January 10;February 7;March 7
// (1998 9:00 AM EDT)April 11;May 9;June 13...
$start = "1997-09-13 09:00:00";
$end = "1998-06-30 09:00:00";
$rule = "RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13";
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-09-13 09:00:00, 1997-10-11 09:00:00, 1997-11-08 09:00:00, 1997-12-13 09:00:00, 1998-01-10 09:00:00, 1998-02-07 09:00:00, 1998-03-07 09:00:00, 1998-04-11 09:00:00, 1998-05-09 09:00:00, 1998-06-13 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every four years, the first Tuesday after a Monday in November,
//forever (U.S. Presidential Election day):
// ==> (1996 9:00 AM EST)November 5
// (2000 9:00 AM EST)November 7
// (2004 9:00 AM EST)November 2
$start = "1996-11-05 09:00:00";
$end = "2004-11-30 09:00:00";
$rule = "RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8";
$shouldbe = '1996-11-05 09:00:00, 2000-11-07 09:00:00, 2004-11-02 09:00:00';
$dates = date_repeat_calc($rule, $start, $end, array());
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every 20th Monday of the year, forever:
$start = "1997-05-19 09:00:00";
$end = "2000-01-01 09:00:00";
$rule = "RRULE:FREQ=YEARLY;BYDAY=20MO";
// ==> (1997 9:00 AM EDT)May 19
// (1998 9:00 AM EDT)May 18
// (1999 9:00 AM EDT)May 17
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-05-19 09:00:00, 1998-05-18 09:00:00, 1999-05-17 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
//Every Sunday in January, every other year, forever:
$start = "1997-01-05 09:00:00";
$end = "2001-02-01 09:00:00";
$rule = 'RRULE:FREQ=YEARLY;INTERVAL=2;BYMONTH=1;BYDAY=SU';
// ==> (1997 9:00 AM EDT)January 5,12,19,26
// (1999 9:00 AM EDT)January 3,10,17,24,31
// (2001 9:00 AM EDT)January 7,14,21,28
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '1997-01-05 09:00:00, 1997-01-12 09:00:00, 1997-01-19 09:00:00, 1997-01-26 09:00:00, 1999-01-03 09:00:00, 1999-01-10 09:00:00, 1999-01-17 09:00:00, 1999-01-24 09:00:00, 1999-01-31 09:00:00, 2001-01-07 09:00:00, 2001-01-14 09:00:00, 2001-01-21 09:00:00, 2001-01-28 09:00:00';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
return;
//Every Thanksgiving, forever:
$start = "1997-01-01 09:00:00";
$end = "2001-02-01 09:00:00";
$rule = 'RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=4TH';
// ==> (1997 9:00 AM EDT)Nov
// (1999 9:00 AM EDT)Nov
// (2001 9:00 AM EDT)Nov
$dates = date_repeat_calc($rule, $start, $end, array());
$shouldbe = '';
$result = implode(', ', $dates);
$this->assertEqual($result, $shouldbe, $rule . '; Starting ' . $start . '; results: ' . $result);
// TODO:
// BYYEARDAY, BYSETPOS,
// BYHOUR, BYMINUTE, HOURLY, MINUTELY, SECONDLY
// have not yet been implemented in date_repeat.
//Every 3rd year on the 1st, 100th and 200th day for 10 occurrences:
$date = "DTSTART;TZID=US-Eastern:19970101T090000";
$rule = "RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200";
// ==> (1997 9:00 AM EST)January 1
// (1997 9:00 AM EDT)April 10;July 19
// (2000 9:00 AM EST)January 1
// (2000 9:00 AM EDT)April 9;July 18
// (2003 9:00 AM EST)January 1
// (2003 9:00 AM EDT)April 10;July 19
// (2006 9:00 AM EST)January 1
//Monday of week number 20 (where the default start of the week is Monday), forever:
$date = "DTSTART;TZID=US-Eastern:19970512T090000";
$rule = "RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO";
// ==> (1997 9:00 AM EDT)May 12
// (1998 9:00 AM EDT)May 11
// (1999 9:00 AM EDT)May 17
//The 3rd instance into the month of one of Tuesday, Wednesday or
//Thursday, for the next 3 months:
$date = "DTSTART;TZID=US-Eastern:19970904T090000";
$rule = "RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3";
// ==> (1997 9:00 AM EDT)September 4;October 7
// (1997 9:00 AM EST)November 6
//The 2nd to last weekday of the month:
$date = "DTSTART;TZID=US-Eastern:19970929T090000";
$rule = "RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2";
// ==> (1997 9:00 AM EDT)September 29
// (1997 9:00 AM EST)October 30;November 27;December 30
// (1998 9:00 AM EST)January 29;February 26;March 30
//Every 3 hours from 9:00 AM to 5:00 PM on a specific day:
$date = "DTSTART;TZID=US-Eastern:19970902T090000";
$rule = "RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z";
// ==> (September 2, 1997 EDT)09:00,12:00,15:00
//Every 15 minutes for 6 occurrences:
$date = "DTSTART;TZID=US-Eastern:19970902T090000";
$rule = "RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6";
// ==> (September 2, 1997 EDT)09:00,09:15,09:30,09:45,10:00,10:15
//Every hour and a half for 4 occurrences:
$date = "DTSTART;TZID=US-Eastern:19970902T090000";
$rule = "RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4";
// ==> (September 2, 1997 EDT)09:00,10:30;12:00;13:30
//Every 20 minutes from 9:00 AM to 4:40 PM every day:
$date = "DTSTART;TZID=US-Eastern:19970902T090000";
$rule = "RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40";
// or
$rule = "RRULE:FREQ=MINUTELY;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16";
// ==> (September 2, 1997 EDT)9:00,9:20,9:40,10:00,10:20,16:00,16:20,16:40
// (September 3, 1997 EDT)9:00,9:20,9:40,10:00,10:20,16:00,16:20,16:40
}
}

View File

@@ -0,0 +1,520 @@
<?php
/**
* @file
* Test Date Repeat form.
*/
class DateRepeatFormTestCase extends DrupalWebTestCase {
protected $privileged_user;
public static function getInfo() {
return array(
'name' => t('Date Repeat Form'),
'description' => t('Test Date Repeat form.') ,
'group' => t('Date'),
);
}
/**
* Implements setUp().
*/
public function setUp() {
// Load the date_repeat module.
parent::setUp('field', 'field_ui', 'date_api', 'date_repeat', 'date', 'date_popup', 'date_repeat_field');
// Create and log in our privileged user.
$this->privileged_user = $this->drupalCreateUser(array(
'administer content types', 'administer nodes', 'bypass node access', 'view date repeats'
));
$this->drupalLogin($this->privileged_user);
variable_set('date_format_short', 'Y-m-d H:i');
}
public function testDateRepeatForm() {
$edit = array();
$edit['name'] = 'Date';
$edit['type'] = 'date';
$this->drupalPost('admin/structure/types/add', $edit, t('Save content type'));
$this->assertText('The content type Date has been added.', 'Content type added.');
$display_all_day = FALSE;
// Testing options.
$widget_options = array(
'date_select' => 'select',
'date_text' => 'text',
'date_popup' => 'popup');
foreach ($widget_options as $widget => $options) {
// Daily tests
// Creates date field stored as a datetime.
$this->createDateField($type = 'datetime', $widget, $display_all_day);
$form_edit = $this->dateForm($options, 'daily_1');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_2');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_3');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_4');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_1', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_2', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_3', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_4', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_1', FALSE, 'exclude');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_1', FALSE, 'include');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'daily_1', FALSE, 'exclude_include');
$this->verifyDateForm($form_edit);
// Weekly tests
$form_edit = $this->dateForm($options, 'weekly_1');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_2');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_3');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_4');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_1', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_2', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_3', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'weekly_4', TRUE);
$this->verifyDateForm($form_edit);
// Monthly tests
$form_edit = $this->dateForm($options, 'monthly_1');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_2');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_3');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_4');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_5');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_6');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_1', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_2', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_3', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_4', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_5', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'monthly_6', TRUE);
$this->verifyDateForm($form_edit);
// Yearly tests
$form_edit = $this->dateForm($options, 'yearly_1');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_2');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_3');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_4');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_5');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_6');
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_1', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_2', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_3', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_4', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_5', TRUE);
$this->verifyDateForm($form_edit);
$form_edit = $this->dateForm($options, 'yearly_6', TRUE);
$this->verifyDateForm($form_edit);
$this->deleteDateField();
}
}
function dateForm($options, $test_id = NULL, $is_count = FALSE, $exclude_include = NULL) {
// Tests that date field functions properly.
$edit = array();
$edit['title'] = $this->randomName(8);
$edit['body[und][0][value]'] = $this->randomName(16);
switch ($options) {
case 'select':
$edit['field_test[und][0][value][year]'] = '2010';
$edit['field_test[und][0][value][month]'] = '10';
$edit['field_test[und][0][value][day]'] = '7';
$edit['field_test[und][0][value][hour]'] = '10';
$edit['field_test[und][0][value][minute]'] = '30';
break;
case 'text':
$edit['field_test[und][0][value][date]'] = '2010-10-07 10:30';
break;
case 'popup':
$edit['field_test[und][0][value][date]'] = '2010-10-07';
$edit['field_test[und][0][value][time]'] = '10:30';
break;
}
// Tests that Date repeat settings function properly
if ($test_id !== NULL) {
$edit['field_test[und][0][show_repeat_settings]'] = TRUE;
$count = 5;
switch ($test_id) {
// Daily test cases
case 'daily_1':
$edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
$edit['field_test[und][0][rrule][daily][byday_radios]'] = 'INTERVAL';
$edit['field_test[und][0][rrule][daily][INTERVAL_child]'] = 2;
break;
case 'daily_2':
$edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
$edit['field_test[und][0][rrule][daily][byday_radios]'] = 'every_weekday';
break;
case 'daily_3':
$edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
$edit['field_test[und][0][rrule][daily][byday_radios]'] = 'every_mo_we_fr';
break;
case 'daily_4':
$edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
$edit['field_test[und][0][rrule][daily][byday_radios]'] = 'every_tu_th';
break;
// Weekly test cases
case 'weekly_1':
$edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
$edit['field_test[und][0][rrule][weekly][BYDAY][MO]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][WE]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][TH]'] = TRUE;
break;
case 'weekly_2':
$edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
$edit['field_test[und][0][rrule][weekly][INTERVAL]'] = 1;
$edit['field_test[und][0][rrule][weekly][BYDAY][MO]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][FR]'] = TRUE;
break;
case 'weekly_3':
$edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
$edit['field_test[und][0][rrule][weekly][INTERVAL]'] = 2;
$edit['field_test[und][0][rrule][weekly][BYDAY][TU]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][TH]'] = TRUE;
break;
case 'weekly_4':
$edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
$edit['field_test[und][0][rrule][weekly][INTERVAL]'] = 10;
$edit['field_test[und][0][rrule][weekly][BYDAY][MO]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][TU]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][WE]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][TH]'] = TRUE;
$edit['field_test[und][0][rrule][weekly][BYDAY][FR]'] = TRUE;
break;
// Monthly test cases
case 'monthly_1':
$edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
$edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYDAY_BYMONTH';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'FR';
break;
case 'monthly_2':
$edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
$edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYDAY_BYMONTH';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'SU';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][5]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][7]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][9]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][11]'] = TRUE;
break;
case 'monthly_3':
$edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
$edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYDAY_BYMONTH';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '-2';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'MO';
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][12]'] = TRUE;
break;
case 'monthly_4':
$edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
$edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYMONTHDAY_BYMONTH';
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
break;
case 'monthly_5':
$edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
$edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYMONTHDAY_BYMONTH';
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
break;
case 'monthly_6':
$edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
$edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYMONTHDAY_BYMONTH';
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '-5';
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][4]'] = TRUE;
$edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
break;
// Yearly test cases
case 'yearly_1':
$edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
$edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYDAY_BYMONTH';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'FR';
break;
case 'yearly_2':
$edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
$edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 2;
$edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYDAY_BYMONTH';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'SU';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][5]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][7]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][9]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][11]'] = TRUE;
break;
case 'yearly_3':
$edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
$edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 3;
$edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYDAY_BYMONTH';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '-2';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'MO';
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][12]'] = TRUE;
break;
case 'yearly_4':
$edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
$edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYMONTHDAY_BYMONTH';
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
break;
case 'yearly_5':
$edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
$edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 2;
$edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYMONTHDAY_BYMONTH';
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
break;
case 'yearly_6':
$edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
$edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 3;
$edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYMONTHDAY_BYMONTH';
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '-5';
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][4]'] = TRUE;
$edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
break;
}
// Test COUNT or UNTIL (default)
if ($is_count) {
$edit['field_test[und][0][rrule][range_of_repeat]'] = 'COUNT';
$edit['field_test[und][0][rrule][count_child]'] = $count;
}
else {
$edit['field_test[und][0][rrule][range_of_repeat]'] = 'UNTIL';
$date = array(
'year' => '2011',
'month' => '10',
'day' => '07'
);
$edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][until_child]', $options, $date);
}
// Test date exceptions and/or additions
if ($exclude_include !== NULL) {
$exclude_include_edit = array();
switch ($exclude_include) {
case 'exclude':
$exclude_include_edit['field_test[und][0][rrule][show_exceptions]'] = TRUE;
$date = array(
'year' => '2010',
'month' => '10',
'day' => '07'
);
$exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][exceptions][EXDATE][0]', $options, $date);
break;
case 'include':
$exclude_include_edit['field_test[und][0][rrule][show_additions]'] = TRUE;
$date = array(
'year' => '2013',
'month' => '10',
'day' => '07'
);
$exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][additions][RDATE][0]', $options, $date);
break;
case 'exclude_include':
$exclude_include_edit['field_test[und][0][rrule][show_exceptions]'] = TRUE;
$date = array(
'year' => '2010',
'month' => '10',
'day' => '07'
);
$exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][exceptions][EXDATE][0]', $options, $date);
$exclude_include_edit['field_test[und][0][rrule][show_additions]'] = TRUE;
$date = array(
'year' => '2013',
'month' => '10',
'day' => '07'
);
$exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][additions][RDATE][0]', $options, $date);
break;
}
$edit += $exclude_include_edit;
}
}
$this->drupalPost('node/add/date', $edit, t('Save'));
$this->assertText($edit['body[und][0][value]'], 'Test node has been created');
// Return the settings for later use in verification
return $edit;
}
function verifyDateForm($edit) {
$title = $edit['title'];
$node = $this->drupalGetNodeByTitle($title);
$this->drupalGet("node/{$node->nid}/edit");
foreach ($edit as $field => $value) {
$this->assertFieldByName($field, $value);
}
$this->drupalPost("node/{$node->nid}/delete", NULL, t('Delete'));
$this->assertRaw(t('Date %title has been deleted.', array('%title' => $title)), t('Deleted Date content.'));
}
function createDateField($type, $widget, $display_all_day = FALSE) {
$edit = array();
$edit['fields[_add_new_field][label]'] = 'Test';
$edit['fields[_add_new_field][field_name]'] = 'test';
$edit['fields[_add_new_field][weight]'] = '-4';
$edit['fields[_add_new_field][type]'] = $type;
$edit['fields[_add_new_field][widget_type]'] = $widget;
$label = $edit['fields[_add_new_field][label]'];
$field_edit = array();
$field_edit['field[settings][repeat]'] = 1;
$instance_edit = array();
switch ($widget) {
case 'select':
case 'popup':
$instance_edit['instance[widget][settings][year_range][years_back]'] = '-5';
$instance_edit['instance[widget][settings][year_range][years_forward]'] = '+5';
break;
}
if ($display_all_day) {
$instance_edit['instance[widget][settings][display_all_day]'] = TRUE;
}
// First step : 'Add new field' on the 'Manage fields' page.
$this->drupalPost('admin/structure/types/manage/date/fields', $edit, t('Save'));
$this->assertRaw(t('These settings apply to the %label field everywhere it is used.', array('%label' => $label)), t('Field settings page was displayed.'));
// Second step : 'Field settings' form.
$this->drupalPost(NULL, $field_edit, t('Save field settings'));
$this->assertRaw(t('Updated field %label field settings.', array('%label' => $label)), t('Redirected to instance and widget settings page.'));
// Third step : 'Instance settings' form.
$this->drupalPost(NULL, $instance_edit, t('Save settings'));
$this->assertRaw(t('Saved %label configuration.', array('%label' => $label)), t('Redirected to "Manage fields" page.'));
// Check that the field appears in the overview form.
$this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $label, t('Field was created and appears in the overview page.'));
}
function deleteDateField() {
$this->drupalGet('admin/structure/types/manage/date/fields');
$this->clickLink('delete');
$this->drupalPost(NULL, NULL, t('Delete'));
$this->assertText(t('The field Test has been deleted from the Date content type.'), t('Removed date field.'));
}
function formatDateForRRULEInputs($form_field_name, $date_widget_type, $date) {
$return = array();
switch ($date_widget_type) {
case 'select':
$return["{$form_field_name}[datetime][year]"] = $date['year'];
$return["{$form_field_name}[datetime][month]"] = $date['month'];
$return["{$form_field_name}[datetime][day]"] = ltrim($date['day'], '0');
break;
case 'text':
case 'popup':
//$return["{$field_name}[datetime][date]"] = '2011-10-07';
$return["{$form_field_name}[datetime][date]"] = "{$date['year']}-{$date['month']}-{$date['day']}";
break;
}
return $return;
}
}