3 class Sabre_VObject_Property_DateTimeTest extends PHPUnit_Framework_TestCase {
5 function testSetDateTime() {
7 $tz = new DateTimeZone('Europe/Amsterdam');
8 $dt = new DateTime('1985-07-04 01:30:00', $tz);
11 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
12 $elem->setDateTime($dt);
14 $this->assertEquals('19850704T013000', $elem->value);
15 $this->assertEquals('Europe/Amsterdam', (string)$elem['TZID']);
16 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
20 function testSetDateTimeLOCAL() {
22 $tz = new DateTimeZone('Europe/Amsterdam');
23 $dt = new DateTime('1985-07-04 01:30:00', $tz);
24 $dt->setTimeZone($tz);
26 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
27 $elem->setDateTime($dt, Sabre_VObject_Property_DateTime::LOCAL);
29 $this->assertEquals('19850704T013000', $elem->value);
30 $this->assertNull($elem['TZID']);
31 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
35 function testSetDateTimeUTC() {
37 $tz = new DateTimeZone('GMT');
38 $dt = new DateTime('1985-07-04 01:30:00', $tz);
39 $dt->setTimeZone($tz);
41 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
42 $elem->setDateTime($dt, Sabre_VObject_Property_DateTime::UTC);
44 $this->assertEquals('19850704T013000Z', $elem->value);
45 $this->assertNull($elem['TZID']);
46 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
50 function testSetDateTimeLOCALTZ() {
52 $tz = new DateTimeZone('Europe/Amsterdam');
53 $dt = new DateTime('1985-07-04 01:30:00', $tz);
54 $dt->setTimeZone($tz);
56 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
57 $elem->setDateTime($dt, Sabre_VObject_Property_DateTime::LOCALTZ);
59 $this->assertEquals('19850704T013000', $elem->value);
60 $this->assertEquals('Europe/Amsterdam', (string)$elem['TZID']);
61 $this->assertEquals('DATE-TIME', (string)$elem['VALUE']);
65 function testSetDateTimeDATE() {
67 $tz = new DateTimeZone('Europe/Amsterdam');
68 $dt = new DateTime('1985-07-04 01:30:00', $tz);
69 $dt->setTimeZone($tz);
71 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
72 $elem->setDateTime($dt, Sabre_VObject_Property_DateTime::DATE);
74 $this->assertEquals('19850704', $elem->value);
75 $this->assertNull($elem['TZID']);
76 $this->assertEquals('DATE', (string)$elem['VALUE']);
81 * @expectedException InvalidArgumentException
83 function testSetDateTimeInvalid() {
85 $tz = new DateTimeZone('Europe/Amsterdam');
86 $dt = new DateTime('1985-07-04 01:30:00', $tz);
87 $dt->setTimeZone($tz);
89 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
90 $elem->setDateTime($dt, 7);
94 function testGetDateTimeCached() {
96 $tz = new DateTimeZone('Europe/Amsterdam');
97 $dt = new DateTime('1985-07-04 01:30:00', $tz);
98 $dt->setTimeZone($tz);
100 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
101 $elem->setDateTime($dt);
103 $this->assertEquals($elem->getDateTime(), $dt);
107 function testGetDateTimeDateNULL() {
109 $elem = new Sabre_VObject_Property_DateTime('DTSTART');
110 $dt = $elem->getDateTime();
112 $this->assertNull($dt);
113 $this->assertNull($elem->getDateType());
117 function testGetDateTimeDateDATE() {
119 $elem = new Sabre_VObject_Property_DateTime('DTSTART','19850704');
120 $dt = $elem->getDateTime();
122 $this->assertInstanceOf('DateTime', $dt);
123 $this->assertEquals('1985-07-04 00:00:00', $dt->format('Y-m-d H:i:s'));
124 $this->assertEquals(Sabre_VObject_Property_DateTime::DATE, $elem->getDateType());
129 function testGetDateTimeDateLOCAL() {
131 $elem = new Sabre_VObject_Property_DateTime('DTSTART','19850704T013000');
132 $dt = $elem->getDateTime();
134 $this->assertInstanceOf('DateTime', $dt);
135 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
136 $this->assertEquals(Sabre_VObject_Property_DateTime::LOCAL, $elem->getDateType());
140 function testGetDateTimeDateUTC() {
142 $elem = new Sabre_VObject_Property_DateTime('DTSTART','19850704T013000Z');
143 $dt = $elem->getDateTime();
145 $this->assertInstanceOf('DateTime', $dt);
146 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
147 $this->assertEquals('UTC', $dt->getTimeZone()->getName());
148 $this->assertEquals(Sabre_VObject_Property_DateTime::UTC, $elem->getDateType());
152 function testGetDateTimeDateLOCALTZ() {
154 $elem = new Sabre_VObject_Property_DateTime('DTSTART','19850704T013000');
155 $elem['TZID'] = 'Europe/Amsterdam';
157 $dt = $elem->getDateTime();
159 $this->assertInstanceOf('DateTime', $dt);
160 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
161 $this->assertEquals('Europe/Amsterdam', $dt->getTimeZone()->getName());
162 $this->assertEquals(Sabre_VObject_Property_DateTime::LOCALTZ, $elem->getDateType());
167 * @expectedException InvalidArgumentException
169 function testGetDateTimeDateInvalid() {
171 $elem = new Sabre_VObject_Property_DateTime('DTSTART','bla');
172 $dt = $elem->getDateTime();
176 function testGetDateTimeWeirdTZ() {
178 $elem = new Sabre_VObject_Property_DateTime('DTSTART','19850704T013000');
179 $elem['TZID'] = '/freeassociation.sourceforge.net/Tzfile/Europe/Amsterdam';
182 $event = new Sabre_VObject_Component('VEVENT');
185 $timezone = new Sabre_VObject_Component('VTIMEZONE');
186 $timezone->TZID = '/freeassociation.sourceforge.net/Tzfile/Europe/Amsterdam';
187 $timezone->{'X-LIC-LOCATION'} = 'Europe/Amsterdam';
189 $calendar = new Sabre_VObject_Component('VCALENDAR');
190 $calendar->add($event);
191 $calendar->add($timezone);
193 $dt = $elem->getDateTime();
195 $this->assertInstanceOf('DateTime', $dt);
196 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
197 $this->assertEquals('Europe/Amsterdam', $dt->getTimeZone()->getName());
198 $this->assertEquals(Sabre_VObject_Property_DateTime::LOCALTZ, $elem->getDateType());
202 function testGetDateTimeBadTimeZone() {
204 $default = date_default_timezone_get();
205 date_default_timezone_set('Canada/Eastern');
207 $elem = new Sabre_VObject_Property_DateTime('DTSTART','19850704T013000');
208 $elem['TZID'] = 'Moon';
211 $event = new Sabre_VObject_Component('VEVENT');
214 $timezone = new Sabre_VObject_Component('VTIMEZONE');
215 $timezone->TZID = 'Moon';
216 $timezone->{'X-LIC-LOCATION'} = 'Moon';
218 $calendar = new Sabre_VObject_Component('VCALENDAR');
219 $calendar->add($event);
220 $calendar->add($timezone);
222 $dt = $elem->getDateTime();
224 $this->assertInstanceOf('DateTime', $dt);
225 $this->assertEquals('1985-07-04 01:30:00', $dt->format('Y-m-d H:i:s'));
226 $this->assertEquals('Canada/Eastern', $dt->getTimeZone()->getName());
227 $this->assertEquals(Sabre_VObject_Property_DateTime::LOCALTZ, $elem->getDateType());
228 date_default_timezone_set($default);