function testCustomFieldChange1()
 {
     TimeSource::mock(2012, 7, 1, 7, 0, 0);
     $customFieldDefinition1 = new EventCustomFieldDefinitionModel();
     $customFieldDefinition1->setId(1);
     $customFieldDefinition1->setExtensionId('org.openacalendar');
     $customFieldDefinition1->setType('TextSingleLine');
     $customFieldDefinition1->setKey('cats');
     $customFieldDefinition1->setLabel('cats');
     $event = new EventModel();
     $event->setStartAt(getUTCDateTime(2012, 6, 13, 19, 0, 0));
     $event->setEndAt(getUTCDateTime(2012, 6, 13, 21, 0, 0));
     $event->setSummary("Event Please");
     $event->setCustomField($customFieldDefinition1, "MANY");
     $eventSet = new EventRecurSetModel();
     $eventSet->setTimeZoneName('Europe/London');
     $eventSet->setCustomFields(array($customFieldDefinition1));
     $newEvents = $eventSet->getNewMonthlyEventsOnSetDayInWeek($event, 6 * 31);
     $this->assertTrue(count($newEvents) >= 6);
     $this->assertTrue($newEvents[0]->hasCustomField($customFieldDefinition1));
     $this->assertEquals("MANY", $newEvents[0]->getCustomField($customFieldDefinition1));
     $this->assertTrue($newEvents[1]->hasCustomField($customFieldDefinition1));
     $this->assertEquals("MANY", $newEvents[1]->getCustomField($customFieldDefinition1));
     $this->assertTrue($newEvents[2]->hasCustomField($customFieldDefinition1));
     $this->assertEquals("MANY", $newEvents[2]->getCustomField($customFieldDefinition1));
     $this->assertTrue($newEvents[3]->hasCustomField($customFieldDefinition1));
     $this->assertEquals("MANY", $newEvents[3]->getCustomField($customFieldDefinition1));
     // DST shift happens here! The cats do not care.
     $this->assertTrue($newEvents[4]->hasCustomField($customFieldDefinition1));
     $this->assertEquals("MANY", $newEvents[4]->getCustomField($customFieldDefinition1));
     $this->assertTrue($newEvents[5]->hasCustomField($customFieldDefinition1));
     $this->assertEquals("MANY", $newEvents[5]->getCustomField($customFieldDefinition1));
 }
 /** test event on 1st sun in month. This is not the 1st of the month. **/
 function testFirstWeekInMonthButNotFirstDayInMonth()
 {
     TimeSource::mock(2012, 9, 20, 14, 27, 0);
     $event = new EventModel();
     $event->setStartAt($this->mktime(2012, 9, 2, 18, 30, 0));
     $event->setEndAt($this->mktime(2012, 9, 2, 21, 0, 0));
     $eventSet = new EventRecurSetModel();
     $eventSet->setTimeZoneName('Europe/London');
     $newEvents = $eventSet->getNewMonthlyEventsOnSetDayInWeek($event, 6 * 31);
     $this->assertTrue(count($newEvents) >= 6);
     $this->assertEquals($this->mktime(2012, 10, 7, 18, 30, 0)->format('r'), $newEvents[0]->getStartAt()->format('r'));
     $this->assertEquals($this->mktime(2012, 10, 7, 21, 0, 0)->format('r'), $newEvents[0]->getEndAt()->format('r'));
     $this->assertEquals($this->mktime(2012, 11, 4, 19, 30, 0)->format('r'), $newEvents[1]->getStartAt()->format('r'));
     $this->assertEquals($this->mktime(2012, 11, 4, 22, 0, 0)->format('r'), $newEvents[1]->getEndAt()->format('r'));
     $this->assertEquals($this->mktime(2012, 12, 2, 19, 30, 0)->format('r'), $newEvents[2]->getStartAt()->format('r'));
     $this->assertEquals($this->mktime(2012, 12, 2, 22, 0, 0)->format('r'), $newEvents[2]->getEndAt()->format('r'));
 }