Mercurial > hg > rc1
comparison vendor/sabre/vobject/tests/VObject/Splitter/ICalendarTest.php @ 7:430dbd5346f7
vendor sabre as distributed
| author | Charlie Root |
|---|---|
| date | Sat, 13 Jan 2018 09:06:10 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 6:cec75ba50afc | 7:430dbd5346f7 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 namespace Sabre\VObject\Splitter; | |
| 4 | |
| 5 use Sabre\VObject; | |
| 6 | |
| 7 class ICalendarTest extends \PHPUnit_Framework_TestCase { | |
| 8 | |
| 9 protected $version; | |
| 10 | |
| 11 function setUp() { | |
| 12 $this->version = VObject\Version::VERSION; | |
| 13 } | |
| 14 | |
| 15 function createStream($data) { | |
| 16 | |
| 17 $stream = fopen('php://memory','r+'); | |
| 18 fwrite($stream, $data); | |
| 19 rewind($stream); | |
| 20 return $stream; | |
| 21 | |
| 22 } | |
| 23 | |
| 24 function testICalendarImportValidEvent() { | |
| 25 | |
| 26 $data = <<<EOT | |
| 27 BEGIN:VCALENDAR | |
| 28 BEGIN:VEVENT | |
| 29 UID:foo | |
| 30 DTSTAMP:20140122T233226Z | |
| 31 DTSTART:20140101T070000Z | |
| 32 END:VEVENT | |
| 33 END:VCALENDAR | |
| 34 EOT; | |
| 35 $tempFile = $this->createStream($data); | |
| 36 | |
| 37 $objects = new ICalendar($tempFile); | |
| 38 | |
| 39 $return = ""; | |
| 40 while($object=$objects->getNext()) { | |
| 41 $return .= $object->serialize(); | |
| 42 } | |
| 43 $this->assertEquals(array(), VObject\Reader::read($return)->validate()); | |
| 44 } | |
| 45 | |
| 46 /** | |
| 47 * @expectedException Sabre\VObject\ParseException | |
| 48 */ | |
| 49 function testICalendarImportWrongType() { | |
| 50 | |
| 51 $data = <<<EOT | |
| 52 BEGIN:VCARD | |
| 53 UID:foo1 | |
| 54 END:VCARD | |
| 55 BEGIN:VCARD | |
| 56 UID:foo2 | |
| 57 END:VCARD | |
| 58 EOT; | |
| 59 $tempFile = $this->createStream($data); | |
| 60 | |
| 61 $objects = new ICalendar($tempFile); | |
| 62 | |
| 63 } | |
| 64 | |
| 65 function testICalendarImportEndOfData() { | |
| 66 $data = <<<EOT | |
| 67 BEGIN:VCALENDAR | |
| 68 BEGIN:VEVENT | |
| 69 UID:foo | |
| 70 DTSTAMP:20140122T233226Z | |
| 71 END:VEVENT | |
| 72 END:VCALENDAR | |
| 73 EOT; | |
| 74 $tempFile = $this->createStream($data); | |
| 75 | |
| 76 $objects = new ICalendar($tempFile); | |
| 77 | |
| 78 $return = ""; | |
| 79 while($object=$objects->getNext()) { | |
| 80 $return .= $object->serialize(); | |
| 81 } | |
| 82 $this->assertNull($object=$objects->getNext()); | |
| 83 } | |
| 84 | |
| 85 /** | |
| 86 * @expectedException Sabre\VObject\ParseException | |
| 87 */ | |
| 88 function testICalendarImportInvalidEvent() { | |
| 89 $data = <<<EOT | |
| 90 EOT; | |
| 91 $tempFile = $this->createStream($data); | |
| 92 $objects = new ICalendar($tempFile); | |
| 93 | |
| 94 } | |
| 95 | |
| 96 function testICalendarImportMultipleValidEvents() { | |
| 97 | |
| 98 $event[] = <<<EOT | |
| 99 BEGIN:VEVENT | |
| 100 UID:foo1 | |
| 101 DTSTAMP:20140122T233226Z | |
| 102 DTSTART:20140101T050000Z | |
| 103 END:VEVENT | |
| 104 EOT; | |
| 105 | |
| 106 $event[] = <<<EOT | |
| 107 BEGIN:VEVENT | |
| 108 UID:foo2 | |
| 109 DTSTAMP:20140122T233226Z | |
| 110 DTSTART:20140101T060000Z | |
| 111 END:VEVENT | |
| 112 EOT; | |
| 113 | |
| 114 $data = <<<EOT | |
| 115 BEGIN:VCALENDAR | |
| 116 $event[0] | |
| 117 $event[1] | |
| 118 END:VCALENDAR | |
| 119 | |
| 120 EOT; | |
| 121 $tempFile = $this->createStream($data); | |
| 122 | |
| 123 $objects = new ICalendar($tempFile); | |
| 124 | |
| 125 $return = ""; | |
| 126 $i = 0; | |
| 127 while($object=$objects->getNext()) { | |
| 128 | |
| 129 $expected = <<<EOT | |
| 130 BEGIN:VCALENDAR | |
| 131 VERSION:2.0 | |
| 132 PRODID:-//Sabre//Sabre VObject $this->version//EN | |
| 133 CALSCALE:GREGORIAN | |
| 134 $event[$i] | |
| 135 END:VCALENDAR | |
| 136 | |
| 137 EOT; | |
| 138 | |
| 139 $return .= $object->serialize(); | |
| 140 $expected = str_replace("\n", "\r\n", $expected); | |
| 141 $this->assertEquals($expected, $object->serialize()); | |
| 142 $i++; | |
| 143 } | |
| 144 $this->assertEquals(array(), VObject\Reader::read($return)->validate()); | |
| 145 } | |
| 146 | |
| 147 function testICalendarImportEventWithoutUID() { | |
| 148 | |
| 149 $data = <<<EOT | |
| 150 BEGIN:VCALENDAR | |
| 151 VERSION:2.0 | |
| 152 PRODID:-//Sabre//Sabre VObject $this->version//EN | |
| 153 CALSCALE:GREGORIAN | |
| 154 BEGIN:VEVENT | |
| 155 DTSTART:20140101T040000Z | |
| 156 DTSTAMP:20140122T233226Z | |
| 157 END:VEVENT | |
| 158 END:VCALENDAR | |
| 159 | |
| 160 EOT; | |
| 161 $tempFile = $this->createStream($data); | |
| 162 | |
| 163 $objects = new ICalendar($tempFile); | |
| 164 | |
| 165 $return = ""; | |
| 166 while($object=$objects->getNext()) { | |
| 167 $return .= $object->serialize(); | |
| 168 } | |
| 169 | |
| 170 $messages = VObject\Reader::read($return)->validate(); | |
| 171 | |
| 172 if ($messages) { | |
| 173 $messages = array_map( | |
| 174 function($item) { return $item['message']; }, | |
| 175 $messages | |
| 176 ); | |
| 177 $this->fail('Validation errors: ' . implode("\n", $messages)); | |
| 178 } else { | |
| 179 $this->assertEquals(array(), $messages); | |
| 180 } | |
| 181 } | |
| 182 | |
| 183 function testICalendarImportMultipleVTIMEZONESAndMultipleValidEvents() { | |
| 184 | |
| 185 $timezones = <<<EOT | |
| 186 BEGIN:VTIMEZONE | |
| 187 TZID:Europe/Berlin | |
| 188 BEGIN:DAYLIGHT | |
| 189 TZOFFSETFROM:+0100 | |
| 190 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU | |
| 191 DTSTART:19810329T020000 | |
| 192 TZNAME:MESZ | |
| 193 TZOFFSETTO:+0200 | |
| 194 END:DAYLIGHT | |
| 195 BEGIN:STANDARD | |
| 196 TZOFFSETFROM:+0200 | |
| 197 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU | |
| 198 DTSTART:19961027T030000 | |
| 199 TZNAME:MEZ | |
| 200 TZOFFSETTO:+0100 | |
| 201 END:STANDARD | |
| 202 END:VTIMEZONE | |
| 203 BEGIN:VTIMEZONE | |
| 204 TZID:Europe/London | |
| 205 BEGIN:DAYLIGHT | |
| 206 TZOFFSETFROM:+0000 | |
| 207 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU | |
| 208 DTSTART:19810329T010000 | |
| 209 TZNAME:GMT+01:00 | |
| 210 TZOFFSETTO:+0100 | |
| 211 END:DAYLIGHT | |
| 212 BEGIN:STANDARD | |
| 213 TZOFFSETFROM:+0100 | |
| 214 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU | |
| 215 DTSTART:19961027T020000 | |
| 216 TZNAME:GMT | |
| 217 TZOFFSETTO:+0000 | |
| 218 END:STANDARD | |
| 219 END:VTIMEZONE | |
| 220 EOT; | |
| 221 | |
| 222 $event[] = <<<EOT | |
| 223 BEGIN:VEVENT | |
| 224 UID:foo1 | |
| 225 DTSTAMP:20140122T232710Z | |
| 226 DTSTART:20140101T010000Z | |
| 227 END:VEVENT | |
| 228 EOT; | |
| 229 | |
| 230 $event[] = <<<EOT | |
| 231 BEGIN:VEVENT | |
| 232 UID:foo2 | |
| 233 DTSTAMP:20140122T232710Z | |
| 234 DTSTART:20140101T020000Z | |
| 235 END:VEVENT | |
| 236 EOT; | |
| 237 | |
| 238 $event[] = <<<EOT | |
| 239 BEGIN:VEVENT | |
| 240 UID:foo3 | |
| 241 DTSTAMP:20140122T232710Z | |
| 242 DTSTART:20140101T030000Z | |
| 243 END:VEVENT | |
| 244 EOT; | |
| 245 | |
| 246 $data = <<<EOT | |
| 247 BEGIN:VCALENDAR | |
| 248 $timezones | |
| 249 $event[0] | |
| 250 $event[1] | |
| 251 $event[2] | |
| 252 END:VCALENDAR | |
| 253 | |
| 254 EOT; | |
| 255 $tempFile = $this->createStream($data); | |
| 256 | |
| 257 $objects = new ICalendar($tempFile); | |
| 258 | |
| 259 $return = ""; | |
| 260 $i = 0; | |
| 261 while($object=$objects->getNext()) { | |
| 262 | |
| 263 $expected = <<<EOT | |
| 264 BEGIN:VCALENDAR | |
| 265 VERSION:2.0 | |
| 266 PRODID:-//Sabre//Sabre VObject $this->version//EN | |
| 267 CALSCALE:GREGORIAN | |
| 268 $timezones | |
| 269 $event[$i] | |
| 270 END:VCALENDAR | |
| 271 | |
| 272 EOT; | |
| 273 $expected = str_replace("\n", "\r\n", $expected); | |
| 274 | |
| 275 $this->assertEquals($expected, $object->serialize()); | |
| 276 $return .= $object->serialize(); | |
| 277 $i++; | |
| 278 | |
| 279 } | |
| 280 | |
| 281 $this->assertEquals(array(), VObject\Reader::read($return)->validate()); | |
| 282 } | |
| 283 | |
| 284 function testICalendarImportWithOutVTIMEZONES() { | |
| 285 | |
| 286 $data = <<<EOT | |
| 287 BEGIN:VCALENDAR | |
| 288 VERSION:2.0 | |
| 289 PRODID:-//Apple Inc.//Mac OS X 10.8//EN | |
| 290 CALSCALE:GREGORIAN | |
| 291 BEGIN:VEVENT | |
| 292 CREATED:20120605T072109Z | |
| 293 UID:D6716295-C10F-4B20-82F9-E1A3026C7DCF | |
| 294 DTEND;VALUE=DATE:20120717 | |
| 295 TRANSP:TRANSPARENT | |
| 296 SUMMARY:Start Vorbereitung | |
| 297 DTSTART;VALUE=DATE:20120716 | |
| 298 DTSTAMP:20120605T072115Z | |
| 299 SEQUENCE:2 | |
| 300 BEGIN:VALARM | |
| 301 X-WR-ALARMUID:A99EDA6A-35EB-4446-B8BC-CDA3C60C627D | |
| 302 UID:A99EDA6A-35EB-4446-B8BC-CDA3C60C627D | |
| 303 TRIGGER:-PT15H | |
| 304 X-APPLE-DEFAULT-ALARM:TRUE | |
| 305 ATTACH;VALUE=URI:Basso | |
| 306 ACTION:AUDIO | |
| 307 END:VALARM | |
| 308 END:VEVENT | |
| 309 END:VCALENDAR | |
| 310 | |
| 311 EOT; | |
| 312 $tempFile = $this->createStream($data); | |
| 313 | |
| 314 $objects = new ICalendar($tempFile); | |
| 315 | |
| 316 $return = ""; | |
| 317 while($object=$objects->getNext()) { | |
| 318 $return .= $object->serialize(); | |
| 319 } | |
| 320 | |
| 321 $messages = VObject\Reader::read($return)->validate(); | |
| 322 $this->assertEquals(array(), $messages); | |
| 323 } | |
| 324 | |
| 325 } |
