1<?php 2/** 3 * @category Horde 4 * @package Icalendar 5 * @subpackage UnitTests 6 */ 7 8/** 9 * @category Horde 10 * @package Icalendar 11 * @subpackage UnitTests 12 */ 13class Horde_Icalendar_ParseTest extends Horde_Test_Case 14{ 15 public function testEmptyData() 16 { 17 $ical = new Horde_Icalendar(); 18 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/empty.ics')); 19 $this->assertEquals( 20 array(), 21 $ical->getComponents() 22 ); 23 $ical->parsevCalendar(''); 24 $this->assertEquals( 25 array(), 26 $ical->getComponents() 27 ); 28 } 29 30 public function testEscapes() 31 { 32 $ical = new Horde_Icalendar(); 33 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/escapes1.ics')); 34 $this->assertEquals( 35 array('There is a comma (escaped with a baskslash) in this sentence and some important words after it, see anything here?'), 36 $ical->getComponent(0)->getAttributeValues('DESCRIPTION') 37 ); 38 $this->assertEquals( 39 array('There are important words after this dash - see anything here or have the words gone?'), 40 $ical->getComponent(1)->getAttributeValues('DESCRIPTION') 41 ); 42 $this->assertEquals( 43 array('mailto:a@b.c'), 44 $ical->getComponent(1)->getAttributeValues('ORGANIZER') 45 ); 46 $this->assertEquals( 47 array('Foo'), 48 $ical->getComponent(0)->getAttributeValues('CATEGORIES') 49 ); 50 $this->assertEquals( 51 array('Foo', 'Foo,Bar', 'Bar'), 52 $ical->getComponent(1)->getAttributeValues('CATEGORIES') 53 ); 54 } 55 56 public function testQuotedParameters() 57 { 58 $ical = new Horde_Icalendar(); 59 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/quoted-params.ics')); 60 $attr = $ical->getComponent(0)->getAttribute('ORGANIZER', true); 61 $this->assertEquals( 62 'Klä,rchen; Mül:ler', 63 $attr[0]['CN'] 64 ); 65 } 66 67 public function testVcalendar20() 68 { 69 $ical = new Horde_Icalendar(); 70 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/vcal20.ics')); 71 72 $this->assertEquals( 73 array( 74 0 => 75 array( 76 'name' => 'PRODID', 77 'params' => 78 array( 79 ), 80 'value' => '-//Google Inc//Google Calendar 70.9054//EN', 81 'values' => 82 array( 83 0 => '-//Google Inc//Google Calendar 70.9054//EN', 84 ), 85 ), 86 1 => 87 array( 88 'name' => 'VERSION', 89 'params' => 90 array( 91 ), 92 'value' => '2.0', 93 'values' => 94 array( 95 0 => '2.0', 96 ), 97 ), 98 2 => 99 array( 100 'name' => 'CALSCALE', 101 'params' => 102 array( 103 ), 104 'value' => 'GREGORIAN', 105 'values' => 106 array( 107 0 => 'GREGORIAN', 108 ), 109 ), 110 3 => 111 array( 112 'name' => 'METHOD', 113 'params' => 114 array( 115 ), 116 'value' => 'PUBLISH', 117 'values' => 118 array( 119 0 => 'PUBLISH', 120 ), 121 ), 122 4 => 123 array( 124 'name' => 'X-WR-CALNAME', 125 'params' => 126 array( 127 ), 128 'value' => 'PEAR - PHP Extension and Application Repository', 129 'values' => 130 array( 131 0 => 'PEAR - PHP Extension and Application Repository', 132 ), 133 ), 134 5 => 135 array( 136 'name' => 'X-WR-TIMEZONE', 137 'params' => 138 array( 139 ), 140 'value' => 'Atlantic/Reykjavik', 141 'values' => 142 array( 143 0 => 'Atlantic/Reykjavik', 144 ), 145 ), 146 6 => 147 array( 148 'name' => 'X-WR-CALDESC', 149 'params' => 150 array( 151 ), 152 'value' => 'pear.php.net activity calendar, bug triage, group meetings, qa, conferences or similar', 153 'values' => 154 array( 155 0 => 'pear.php.net activity calendar, bug triage, group meetings, qa, conferences or similar', 156 ), 157 ), 158 ), 159 $ical->getAllAttributes() 160 ); 161 162 $this->assertEquals( 163 array( 164 0 => 165 array( 166 'name' => 'DTSTART', 167 'params' => 168 array( 169 ), 170 'value' => 1224950400, 171 'values' => 172 array( 173 0 => 1224950400, 174 ), 175 ), 176 1 => 177 array( 178 'name' => 'DTEND', 179 'params' => 180 array( 181 ), 182 'value' => 1224968400, 183 'values' => 184 array( 185 0 => 1224968400, 186 ), 187 ), 188 2 => 189 array( 190 'name' => 'DTSTAMP', 191 'params' => 192 array( 193 ), 194 'value' => 1219138073, 195 'values' => 196 array( 197 0 => 1219138073, 198 ), 199 ), 200 3 => 201 array( 202 'name' => 'UID', 203 'params' => 204 array( 205 ), 206 'value' => 'ntnrt4go4482q2trk18bt62c0o@google.com', 207 'values' => 208 array( 209 0 => 'ntnrt4go4482q2trk18bt62c0o@google.com', 210 ), 211 ), 212 4 => 213 array( 214 'name' => 'RECURRENCE-ID', 215 'params' => 216 array( 217 ), 218 'value' => 1224950400, 219 'values' => 220 array( 221 0 => 1224950400, 222 ), 223 ), 224 5 => 225 array( 226 'name' => 'CLASS', 227 'params' => 228 array( 229 ), 230 'value' => 'PUBLIC', 231 'values' => 232 array( 233 0 => 'PUBLIC', 234 ), 235 ), 236 6 => 237 array( 238 'name' => 'CREATED', 239 'params' => 240 array( 241 ), 242 'value' => 1204763165, 243 'values' => 244 array( 245 0 => 1204763165, 246 ), 247 ), 248 7 => 249 array( 250 'name' => 'DESCRIPTION', 251 'params' => 252 array( 253 ), 254 'value' => 'Bug Triage session 255 256Not been invited ? Want to attend ? Let us know and we\'ll add you!', 257 'values' => 258 array( 259 0 => 'Bug Triage session 260 261Not been invited ? Want to attend ? Let us know and we\'ll add you!', 262 ), 263 ), 264 8 => 265 array( 266 'name' => 'LAST-MODIFIED', 267 'params' => 268 array( 269 ), 270 'value' => 1216413606, 271 'values' => 272 array( 273 0 => 1216413606, 274 ), 275 ), 276 9 => 277 array( 278 'name' => 'LOCATION', 279 'params' => 280 array( 281 ), 282 'value' => '#pear-bugs Efnet', 283 'values' => 284 array( 285 0 => '#pear-bugs Efnet', 286 ), 287 ), 288 10 => 289 array( 290 'name' => 'SEQUENCE', 291 'params' => 292 array( 293 ), 294 'value' => 2, 295 'values' => 296 array( 297 0 => 2, 298 ), 299 ), 300 11 => 301 array( 302 'name' => 'STATUS', 303 'params' => 304 array( 305 ), 306 'value' => 'CONFIRMED', 307 'values' => 308 array( 309 0 => 'CONFIRMED', 310 ), 311 ), 312 12 => 313 array( 314 'name' => 'SUMMARY', 315 'params' => 316 array( 317 ), 318 'value' => 'Bug Triage', 319 'values' => 320 array( 321 0 => 'Bug Triage', 322 ), 323 ), 324 13 => 325 array( 326 'name' => 'TRANSP', 327 'params' => 328 array( 329 ), 330 'value' => 'OPAQUE', 331 'values' => 332 array( 333 0 => 'OPAQUE', 334 ), 335 ), 336 14 => 337 array( 338 'name' => 'CATEGORIES', 339 'params' => 340 array( 341 ), 342 'value' => 'foo,bar,fuz buz,blah, blah', 343 'values' => 344 array( 345 0 => 'foo', 346 1 => 'bar', 347 2 => 'fuz buz', 348 3 => 'blah, blah', 349 ), 350 ), 351 ), 352 $ical->getComponent(0)->getAllAttributes() 353 ); 354 } 355 356 public function testBug7423() 357 { 358 $ical = new Horde_Icalendar(); 359 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/bug7423.ics')); 360 $this->assertEquals( 361 array('SUMMARY' => 'birthday'), 362 $ical->getComponent(0)->toHash(true) 363 ); 364 } 365 366 public function testBug14153() 367 { 368 $ical = new Horde_Icalendar(); 369 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/bug14153.ics')); 370 $params = $ical->getComponent(1)->getAttribute('DTSTART', true); 371 $tz = $params[0]['TZID']; 372 $start = $ical->getComponent(1)->getAttribute('DTSTART'); 373 $dtstart = new Horde_Date($start, $tz); 374 $this->assertEquals((string)$dtstart, '2015-10-03 15:00:00'); 375 } 376 377 public function testBug14132() 378 { 379 $ical = new Horde_Icalendar(); 380 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/bug14132.ics')); 381 $params = $ical->getComponent(1)->getAttribute('DTSTART', true); 382 $tz = $params[0]['TZID']; 383 $start = $ical->getComponent(1)->getAttribute('DTSTART'); 384 $dtstart = new Horde_Date($start, $tz); 385 $this->assertEquals((string)$dtstart, '2015-10-09 03:00:00'); 386 } 387 388 public function testBug14132_2() 389 { 390 $ical = new Horde_Icalendar(); 391 $ical->parsevCalendar(file_get_contents(__DIR__ . '/fixtures/bug14132_2.ics')); 392 $params = $ical->getComponent(1)->getAttribute('DTSTART', true); 393 $tz = $params[0]['TZID']; 394 $start = $ical->getComponent(1)->getAttribute('DTSTART'); 395 $dtstart = new Horde_Date($start, $tz); 396 $this->assertEquals((string)$dtstart, '2015-10-09 03:00:00'); 397 } 398 399} 400