Mercurial > hg > rc1
comparison vendor/sabre/vobject/tests/VObject/Recur/RRuleIteratorTest.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\Recur; | |
| 4 | |
| 5 use DateTime; | |
| 6 use DateTimeZone; | |
| 7 | |
| 8 class RRuleIteratorTest extends \PHPUnit_Framework_TestCase { | |
| 9 | |
| 10 function testHourly() { | |
| 11 | |
| 12 $this->parse( | |
| 13 'FREQ=HOURLY;INTERVAL=3;COUNT=12', | |
| 14 '2011-10-07 12:00:00', | |
| 15 array( | |
| 16 '2011-10-07 12:00:00', | |
| 17 '2011-10-07 15:00:00', | |
| 18 '2011-10-07 18:00:00', | |
| 19 '2011-10-07 21:00:00', | |
| 20 '2011-10-08 00:00:00', | |
| 21 '2011-10-08 03:00:00', | |
| 22 '2011-10-08 06:00:00', | |
| 23 '2011-10-08 09:00:00', | |
| 24 '2011-10-08 12:00:00', | |
| 25 '2011-10-08 15:00:00', | |
| 26 '2011-10-08 18:00:00', | |
| 27 '2011-10-08 21:00:00', | |
| 28 ) | |
| 29 ); | |
| 30 | |
| 31 } | |
| 32 | |
| 33 function testDaily() { | |
| 34 | |
| 35 $this->parse( | |
| 36 'FREQ=DAILY;INTERVAL=3;UNTIL=20111025T000000Z', | |
| 37 '2011-10-07', | |
| 38 array( | |
| 39 '2011-10-07 00:00:00', | |
| 40 '2011-10-10 00:00:00', | |
| 41 '2011-10-13 00:00:00', | |
| 42 '2011-10-16 00:00:00', | |
| 43 '2011-10-19 00:00:00', | |
| 44 '2011-10-22 00:00:00', | |
| 45 '2011-10-25 00:00:00', | |
| 46 ) | |
| 47 ); | |
| 48 | |
| 49 } | |
| 50 | |
| 51 function testDailyByDayByHour() { | |
| 52 | |
| 53 $this->parse( | |
| 54 'FREQ=DAILY;BYDAY=SA,SU;BYHOUR=6,7', | |
| 55 '2011-10-08 06:00:00', | |
| 56 array( | |
| 57 '2011-10-08 06:00:00', | |
| 58 '2011-10-08 07:00:00', | |
| 59 '2011-10-09 06:00:00', | |
| 60 '2011-10-09 07:00:00', | |
| 61 '2011-10-15 06:00:00', | |
| 62 '2011-10-15 07:00:00', | |
| 63 '2011-10-16 06:00:00', | |
| 64 '2011-10-16 07:00:00', | |
| 65 '2011-10-22 06:00:00', | |
| 66 '2011-10-22 07:00:00', | |
| 67 '2011-10-23 06:00:00', | |
| 68 '2011-10-23 07:00:00', | |
| 69 ) | |
| 70 ); | |
| 71 | |
| 72 } | |
| 73 | |
| 74 function testDailyByHour() { | |
| 75 | |
| 76 $this->parse( | |
| 77 'FREQ=DAILY;INTERVAL=2;BYHOUR=10,11,12,13,14,15', | |
| 78 '2012-10-11 12:00:00', | |
| 79 array( | |
| 80 '2012-10-11 12:00:00', | |
| 81 '2012-10-11 13:00:00', | |
| 82 '2012-10-11 14:00:00', | |
| 83 '2012-10-11 15:00:00', | |
| 84 '2012-10-13 10:00:00', | |
| 85 '2012-10-13 11:00:00', | |
| 86 '2012-10-13 12:00:00', | |
| 87 '2012-10-13 13:00:00', | |
| 88 '2012-10-13 14:00:00', | |
| 89 '2012-10-13 15:00:00', | |
| 90 '2012-10-15 10:00:00', | |
| 91 '2012-10-15 11:00:00', | |
| 92 ) | |
| 93 ); | |
| 94 | |
| 95 } | |
| 96 | |
| 97 function testDailyByDay() { | |
| 98 | |
| 99 $this->parse( | |
| 100 'FREQ=DAILY;INTERVAL=2;BYDAY=TU,WE,FR', | |
| 101 '2011-10-07 12:00:00', | |
| 102 array( | |
| 103 '2011-10-07 12:00:00', | |
| 104 '2011-10-11 12:00:00', | |
| 105 '2011-10-19 12:00:00', | |
| 106 '2011-10-21 12:00:00', | |
| 107 '2011-10-25 12:00:00', | |
| 108 '2011-11-02 12:00:00', | |
| 109 '2011-11-04 12:00:00', | |
| 110 '2011-11-08 12:00:00', | |
| 111 '2011-11-16 12:00:00', | |
| 112 '2011-11-18 12:00:00', | |
| 113 '2011-11-22 12:00:00', | |
| 114 '2011-11-30 12:00:00', | |
| 115 ) | |
| 116 ); | |
| 117 | |
| 118 } | |
| 119 | |
| 120 function testDailyCount() { | |
| 121 | |
| 122 $this->parse( | |
| 123 'FREQ=DAILY;COUNT=5', | |
| 124 '2014-08-01 18:03:00', | |
| 125 array( | |
| 126 '2014-08-01 18:03:00', | |
| 127 '2014-08-02 18:03:00', | |
| 128 '2014-08-03 18:03:00', | |
| 129 '2014-08-04 18:03:00', | |
| 130 '2014-08-05 18:03:00', | |
| 131 ) | |
| 132 ); | |
| 133 | |
| 134 } | |
| 135 | |
| 136 function testDailyByMonth() { | |
| 137 | |
| 138 $this->parse( | |
| 139 'FREQ=DAILY;BYMONTH=9,10;BYDAY=SU', | |
| 140 '2007-10-04 16:00:00', | |
| 141 array( | |
| 142 "2013-09-29 16:00:00", | |
| 143 "2013-10-06 16:00:00", | |
| 144 "2013-10-13 16:00:00", | |
| 145 "2013-10-20 16:00:00", | |
| 146 "2013-10-27 16:00:00", | |
| 147 "2014-09-07 16:00:00" | |
| 148 ), | |
| 149 '2013-09-28' | |
| 150 ); | |
| 151 | |
| 152 } | |
| 153 | |
| 154 function testWeekly() { | |
| 155 | |
| 156 $this->parse( | |
| 157 'FREQ=WEEKLY;INTERVAL=2;COUNT=10', | |
| 158 '2011-10-07 00:00:00', | |
| 159 array( | |
| 160 '2011-10-07 00:00:00', | |
| 161 '2011-10-21 00:00:00', | |
| 162 '2011-11-04 00:00:00', | |
| 163 '2011-11-18 00:00:00', | |
| 164 '2011-12-02 00:00:00', | |
| 165 '2011-12-16 00:00:00', | |
| 166 '2011-12-30 00:00:00', | |
| 167 '2012-01-13 00:00:00', | |
| 168 '2012-01-27 00:00:00', | |
| 169 '2012-02-10 00:00:00', | |
| 170 ) | |
| 171 ); | |
| 172 | |
| 173 } | |
| 174 | |
| 175 function testWeeklyByDay() { | |
| 176 | |
| 177 $this->parse( | |
| 178 'FREQ=WEEKLY;INTERVAL=1;COUNT=4;BYDAY=MO;WKST=SA', | |
| 179 '2014-08-01 00:00:00', | |
| 180 array( | |
| 181 '2014-08-01 00:00:00', | |
| 182 '2014-08-04 00:00:00', | |
| 183 '2014-08-11 00:00:00', | |
| 184 '2014-08-18 00:00:00', | |
| 185 ) | |
| 186 ); | |
| 187 | |
| 188 } | |
| 189 | |
| 190 function testWeeklyByDay2() { | |
| 191 | |
| 192 $this->parse( | |
| 193 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,WE,FR;WKST=SU', | |
| 194 '2011-10-07 00:00:00', | |
| 195 array( | |
| 196 '2011-10-07 00:00:00', | |
| 197 '2011-10-18 00:00:00', | |
| 198 '2011-10-19 00:00:00', | |
| 199 '2011-10-21 00:00:00', | |
| 200 '2011-11-01 00:00:00', | |
| 201 '2011-11-02 00:00:00', | |
| 202 '2011-11-04 00:00:00', | |
| 203 '2011-11-15 00:00:00', | |
| 204 '2011-11-16 00:00:00', | |
| 205 '2011-11-18 00:00:00', | |
| 206 '2011-11-29 00:00:00', | |
| 207 '2011-11-30 00:00:00', | |
| 208 ) | |
| 209 ); | |
| 210 | |
| 211 } | |
| 212 | |
| 213 function testWeeklyByDayByHour() { | |
| 214 | |
| 215 $this->parse( | |
| 216 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,WE,FR;WKST=MO;BYHOUR=8,9,10', | |
| 217 '2011-10-07 08:00:00', | |
| 218 array( | |
| 219 '2011-10-07 08:00:00', | |
| 220 '2011-10-07 09:00:00', | |
| 221 '2011-10-07 10:00:00', | |
| 222 '2011-10-18 08:00:00', | |
| 223 '2011-10-18 09:00:00', | |
| 224 '2011-10-18 10:00:00', | |
| 225 '2011-10-19 08:00:00', | |
| 226 '2011-10-19 09:00:00', | |
| 227 '2011-10-19 10:00:00', | |
| 228 '2011-10-21 08:00:00', | |
| 229 '2011-10-21 09:00:00', | |
| 230 '2011-10-21 10:00:00', | |
| 231 '2011-11-01 08:00:00', | |
| 232 '2011-11-01 09:00:00', | |
| 233 '2011-11-01 10:00:00', | |
| 234 ) | |
| 235 ); | |
| 236 | |
| 237 } | |
| 238 | |
| 239 function testWeeklyByDaySpecificHour() { | |
| 240 | |
| 241 $this->parse( | |
| 242 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,WE,FR;WKST=SU', | |
| 243 '2011-10-07 18:00:00', | |
| 244 array( | |
| 245 '2011-10-07 18:00:00', | |
| 246 '2011-10-18 18:00:00', | |
| 247 '2011-10-19 18:00:00', | |
| 248 '2011-10-21 18:00:00', | |
| 249 '2011-11-01 18:00:00', | |
| 250 '2011-11-02 18:00:00', | |
| 251 '2011-11-04 18:00:00', | |
| 252 '2011-11-15 18:00:00', | |
| 253 '2011-11-16 18:00:00', | |
| 254 '2011-11-18 18:00:00', | |
| 255 '2011-11-29 18:00:00', | |
| 256 '2011-11-30 18:00:00', | |
| 257 ) | |
| 258 ); | |
| 259 | |
| 260 } | |
| 261 | |
| 262 function testMonthly() { | |
| 263 | |
| 264 $this->parse( | |
| 265 'FREQ=MONTHLY;INTERVAL=3;COUNT=5', | |
| 266 '2011-12-05 00:00:00', | |
| 267 array( | |
| 268 '2011-12-05 00:00:00', | |
| 269 '2012-03-05 00:00:00', | |
| 270 '2012-06-05 00:00:00', | |
| 271 '2012-09-05 00:00:00', | |
| 272 '2012-12-05 00:00:00', | |
| 273 ) | |
| 274 ); | |
| 275 | |
| 276 } | |
| 277 | |
| 278 function testMonlthyEndOfMonth() { | |
| 279 | |
| 280 $this->parse( | |
| 281 'FREQ=MONTHLY;INTERVAL=2;COUNT=12', | |
| 282 '2011-12-31 00:00:00', | |
| 283 array( | |
| 284 '2011-12-31 00:00:00', | |
| 285 '2012-08-31 00:00:00', | |
| 286 '2012-10-31 00:00:00', | |
| 287 '2012-12-31 00:00:00', | |
| 288 '2013-08-31 00:00:00', | |
| 289 '2013-10-31 00:00:00', | |
| 290 '2013-12-31 00:00:00', | |
| 291 '2014-08-31 00:00:00', | |
| 292 '2014-10-31 00:00:00', | |
| 293 '2014-12-31 00:00:00', | |
| 294 '2015-08-31 00:00:00', | |
| 295 '2015-10-31 00:00:00', | |
| 296 ) | |
| 297 ); | |
| 298 | |
| 299 } | |
| 300 | |
| 301 function testMonthlyByMonthDay() { | |
| 302 | |
| 303 $this->parse( | |
| 304 'FREQ=MONTHLY;INTERVAL=5;COUNT=9;BYMONTHDAY=1,31,-7', | |
| 305 '2011-01-01 00:00:00', | |
| 306 array( | |
| 307 '2011-01-01 00:00:00', | |
| 308 '2011-01-25 00:00:00', | |
| 309 '2011-01-31 00:00:00', | |
| 310 '2011-06-01 00:00:00', | |
| 311 '2011-06-24 00:00:00', | |
| 312 '2011-11-01 00:00:00', | |
| 313 '2011-11-24 00:00:00', | |
| 314 '2012-04-01 00:00:00', | |
| 315 '2012-04-24 00:00:00', | |
| 316 ) | |
| 317 ); | |
| 318 | |
| 319 } | |
| 320 | |
| 321 function testMonthlyByDay() { | |
| 322 | |
| 323 $this->parse( | |
| 324 'FREQ=MONTHLY;INTERVAL=2;COUNT=16;BYDAY=MO,-2TU,+1WE,3TH', | |
| 325 '2011-01-03 00:00:00', | |
| 326 array( | |
| 327 '2011-01-03 00:00:00', | |
| 328 '2011-01-05 00:00:00', | |
| 329 '2011-01-10 00:00:00', | |
| 330 '2011-01-17 00:00:00', | |
| 331 '2011-01-18 00:00:00', | |
| 332 '2011-01-20 00:00:00', | |
| 333 '2011-01-24 00:00:00', | |
| 334 '2011-01-31 00:00:00', | |
| 335 '2011-03-02 00:00:00', | |
| 336 '2011-03-07 00:00:00', | |
| 337 '2011-03-14 00:00:00', | |
| 338 '2011-03-17 00:00:00', | |
| 339 '2011-03-21 00:00:00', | |
| 340 '2011-03-22 00:00:00', | |
| 341 '2011-03-28 00:00:00', | |
| 342 '2011-05-02 00:00:00', | |
| 343 ) | |
| 344 ); | |
| 345 | |
| 346 } | |
| 347 | |
| 348 function testMonthlyByDayByMonthDay() { | |
| 349 | |
| 350 $this->parse( | |
| 351 'FREQ=MONTHLY;COUNT=10;BYDAY=MO;BYMONTHDAY=1', | |
| 352 '2011-08-01 00:00:00', | |
| 353 array( | |
| 354 '2011-08-01 00:00:00', | |
| 355 '2012-10-01 00:00:00', | |
| 356 '2013-04-01 00:00:00', | |
| 357 '2013-07-01 00:00:00', | |
| 358 '2014-09-01 00:00:00', | |
| 359 '2014-12-01 00:00:00', | |
| 360 '2015-06-01 00:00:00', | |
| 361 '2016-02-01 00:00:00', | |
| 362 '2016-08-01 00:00:00', | |
| 363 '2017-05-01 00:00:00', | |
| 364 ) | |
| 365 ); | |
| 366 | |
| 367 } | |
| 368 | |
| 369 function testMonthlyByDayBySetPos() { | |
| 370 | |
| 371 $this->parse( | |
| 372 'FREQ=MONTHLY;COUNT=10;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=1,-1', | |
| 373 '2011-01-03 00:00:00', | |
| 374 array( | |
| 375 '2011-01-03 00:00:00', | |
| 376 '2011-01-31 00:00:00', | |
| 377 '2011-02-01 00:00:00', | |
| 378 '2011-02-28 00:00:00', | |
| 379 '2011-03-01 00:00:00', | |
| 380 '2011-03-31 00:00:00', | |
| 381 '2011-04-01 00:00:00', | |
| 382 '2011-04-29 00:00:00', | |
| 383 '2011-05-02 00:00:00', | |
| 384 '2011-05-31 00:00:00', | |
| 385 ) | |
| 386 ); | |
| 387 | |
| 388 } | |
| 389 | |
| 390 function testYearly() { | |
| 391 | |
| 392 $this->parse( | |
| 393 'FREQ=YEARLY;COUNT=10;INTERVAL=3', | |
| 394 '2011-01-01 00:00:00', | |
| 395 array( | |
| 396 '2011-01-01 00:00:00', | |
| 397 '2014-01-01 00:00:00', | |
| 398 '2017-01-01 00:00:00', | |
| 399 '2020-01-01 00:00:00', | |
| 400 '2023-01-01 00:00:00', | |
| 401 '2026-01-01 00:00:00', | |
| 402 '2029-01-01 00:00:00', | |
| 403 '2032-01-01 00:00:00', | |
| 404 '2035-01-01 00:00:00', | |
| 405 '2038-01-01 00:00:00', | |
| 406 ) | |
| 407 ); | |
| 408 } | |
| 409 | |
| 410 function testYearlyLeapYear() { | |
| 411 | |
| 412 $this->parse( | |
| 413 'FREQ=YEARLY;COUNT=3', | |
| 414 '2012-02-29 00:00:00', | |
| 415 array( | |
| 416 '2012-02-29 00:00:00', | |
| 417 '2016-02-29 00:00:00', | |
| 418 '2020-02-29 00:00:00', | |
| 419 ) | |
| 420 ); | |
| 421 } | |
| 422 | |
| 423 function testYearlyByMonth() { | |
| 424 | |
| 425 $this->parse( | |
| 426 'FREQ=YEARLY;COUNT=8;INTERVAL=4;BYMONTH=4,10', | |
| 427 '2011-04-07 00:00:00', | |
| 428 array( | |
| 429 '2011-04-07 00:00:00', | |
| 430 '2011-10-07 00:00:00', | |
| 431 '2015-04-07 00:00:00', | |
| 432 '2015-10-07 00:00:00', | |
| 433 '2019-04-07 00:00:00', | |
| 434 '2019-10-07 00:00:00', | |
| 435 '2023-04-07 00:00:00', | |
| 436 '2023-10-07 00:00:00', | |
| 437 ) | |
| 438 ); | |
| 439 | |
| 440 } | |
| 441 | |
| 442 function testYearlyByMonthByDay() { | |
| 443 | |
| 444 $this->parse( | |
| 445 'FREQ=YEARLY;COUNT=8;INTERVAL=5;BYMONTH=4,10;BYDAY=1MO,-1SU', | |
| 446 '2011-04-04 00:00:00', | |
| 447 array( | |
| 448 '2011-04-04 00:00:00', | |
| 449 '2011-04-24 00:00:00', | |
| 450 '2011-10-03 00:00:00', | |
| 451 '2011-10-30 00:00:00', | |
| 452 '2016-04-04 00:00:00', | |
| 453 '2016-04-24 00:00:00', | |
| 454 '2016-10-03 00:00:00', | |
| 455 '2016-10-30 00:00:00', | |
| 456 ) | |
| 457 ); | |
| 458 | |
| 459 } | |
| 460 | |
| 461 function testFastForward() { | |
| 462 | |
| 463 // The idea is that we're fast-forwarding too far in the future, so | |
| 464 // there will be no results left. | |
| 465 $this->parse( | |
| 466 'FREQ=YEARLY;COUNT=8;INTERVAL=5;BYMONTH=4,10;BYDAY=1MO,-1SU', | |
| 467 '2011-04-04 00:00:00', | |
| 468 array(), | |
| 469 '2020-05-05 00:00:00' | |
| 470 ); | |
| 471 | |
| 472 } | |
| 473 | |
| 474 /** | |
| 475 * The bug that was in the | |
| 476 * system before would fail on the 5th tuesday of the month, if the 5th | |
| 477 * tuesday did not exist. | |
| 478 * | |
| 479 * A pretty slow test. Had to be marked as 'medium' for phpunit to not die | |
| 480 * after 1 second. Would be good to optimize later. | |
| 481 * | |
| 482 * @medium | |
| 483 */ | |
| 484 function testFifthTuesdayProblem() { | |
| 485 | |
| 486 $this->parse( | |
| 487 'FREQ=MONTHLY;INTERVAL=1;UNTIL=20071030T035959Z;BYDAY=5TU', | |
| 488 '2007-10-04 14:46:42', | |
| 489 array( | |
| 490 "2007-10-04 14:46:42", | |
| 491 ) | |
| 492 ); | |
| 493 | |
| 494 } | |
| 495 | |
| 496 /** | |
| 497 * This bug came from a Fruux customer. This would result in a never-ending | |
| 498 * request. | |
| 499 */ | |
| 500 function testFastFowardTooFar() { | |
| 501 | |
| 502 $this->parse( | |
| 503 'FREQ=WEEKLY;BYDAY=MO;UNTIL=20090704T205959Z;INTERVAL=1', | |
| 504 '2009-04-20 18:00:00', | |
| 505 array( | |
| 506 '2009-04-20 18:00:00', | |
| 507 '2009-04-27 18:00:00', | |
| 508 '2009-05-04 18:00:00', | |
| 509 '2009-05-11 18:00:00', | |
| 510 '2009-05-18 18:00:00', | |
| 511 '2009-05-25 18:00:00', | |
| 512 '2009-06-01 18:00:00', | |
| 513 '2009-06-08 18:00:00', | |
| 514 '2009-06-15 18:00:00', | |
| 515 '2009-06-22 18:00:00', | |
| 516 '2009-06-29 18:00:00', | |
| 517 ) | |
| 518 ); | |
| 519 | |
| 520 } | |
| 521 | |
| 522 /** | |
| 523 * This also at one point caused an infinite loop. We're keeping the test. | |
| 524 */ | |
| 525 function testYearlyByMonthLoop() { | |
| 526 | |
| 527 $this->parse( | |
| 528 'FREQ=YEARLY;INTERVAL=1;UNTIL=20120203T225959Z;BYMONTH=2;BYSETPOS=1;BYDAY=SU,MO,TU,WE,TH,FR,SA', | |
| 529 '2012-01-01 15:45:00', | |
| 530 array( | |
| 531 '2012-02-01 15:45:00', | |
| 532 ), | |
| 533 '2012-01-29 23:00:00' | |
| 534 ); | |
| 535 | |
| 536 | |
| 537 } | |
| 538 | |
| 539 /** | |
| 540 * Something, somewhere produced an ics with an interval set to 0. Because | |
| 541 * this means we increase the current day (or week, month) by 0, this also | |
| 542 * results in an infinite loop. | |
| 543 * | |
| 544 * @expectedException InvalidArgumentException | |
| 545 */ | |
| 546 function testZeroInterval() { | |
| 547 | |
| 548 $this->parse( | |
| 549 'FREQ=YEARLY;INTERVAL=0', | |
| 550 '2012-08-24 14:57:00', | |
| 551 array(), | |
| 552 '2013-01-01 23:00:00' | |
| 553 ); | |
| 554 | |
| 555 } | |
| 556 | |
| 557 /** | |
| 558 * @expectedException InvalidArgumentException | |
| 559 */ | |
| 560 function testInvalidFreq() { | |
| 561 | |
| 562 $this->parse( | |
| 563 'FREQ=SMONTHLY;INTERVAL=3;UNTIL=20111025T000000Z', | |
| 564 '2011-10-07', | |
| 565 array() | |
| 566 ); | |
| 567 | |
| 568 } | |
| 569 | |
| 570 /** | |
| 571 * @expectedException InvalidArgumentException | |
| 572 */ | |
| 573 function testByDayBadOffset() { | |
| 574 | |
| 575 $this->parse( | |
| 576 'FREQ=WEEKLY;INTERVAL=1;COUNT=4;BYDAY=0MO;WKST=SA', | |
| 577 '2014-08-01 00:00:00', | |
| 578 array() | |
| 579 ); | |
| 580 | |
| 581 } | |
| 582 | |
| 583 function testUntilBeginHAsTimezone() { | |
| 584 | |
| 585 $this->parse( | |
| 586 'FREQ=WEEKLY;UNTIL=20131118T183000', | |
| 587 '2013-09-23 18:30:00', | |
| 588 array( | |
| 589 '2013-09-23 18:30:00', | |
| 590 '2013-09-30 18:30:00', | |
| 591 '2013-10-07 18:30:00', | |
| 592 '2013-10-14 18:30:00', | |
| 593 '2013-10-21 18:30:00', | |
| 594 '2013-10-28 18:30:00', | |
| 595 '2013-11-04 18:30:00', | |
| 596 '2013-11-11 18:30:00', | |
| 597 '2013-11-18 18:30:00', | |
| 598 ), | |
| 599 null, | |
| 600 'America/New_York' | |
| 601 ); | |
| 602 | |
| 603 } | |
| 604 | |
| 605 function testUntilBeforeDtStart() { | |
| 606 | |
| 607 $this->parse( | |
| 608 'FREQ=DAILY;UNTIL=20140101T000000Z', | |
| 609 '2014-08-02 00:15:00', | |
| 610 array( | |
| 611 '2014-08-02 00:15:00', | |
| 612 ) | |
| 613 ); | |
| 614 | |
| 615 } | |
| 616 | |
| 617 function testIgnoredStuff() { | |
| 618 | |
| 619 $this->parse( | |
| 620 'FREQ=DAILY;BYSECOND=1;BYMINUTE=1;BYYEARDAY=1;BYWEEKNO=1;COUNT=2', | |
| 621 '2014-08-02 00:15:00', | |
| 622 array( | |
| 623 '2014-08-02 00:15:00', | |
| 624 '2014-08-03 00:15:00', | |
| 625 ) | |
| 626 ); | |
| 627 | |
| 628 } | |
| 629 | |
| 630 /** | |
| 631 * @expectedException InvalidArgumentException | |
| 632 */ | |
| 633 function testUnsupportedPart() { | |
| 634 | |
| 635 $this->parse( | |
| 636 'FREQ=DAILY;BYWODAN=1', | |
| 637 '2014-08-02 00:15:00', | |
| 638 array() | |
| 639 ); | |
| 640 | |
| 641 } | |
| 642 | |
| 643 function testIteratorFunctions() { | |
| 644 | |
| 645 $parser = new RRuleIterator('FREQ=DAILY', new DateTime('2014-08-02 00:00:13')); | |
| 646 $parser->next(); | |
| 647 $this->assertEquals( | |
| 648 new DateTime('2014-08-03 00:00:13'), | |
| 649 $parser->current() | |
| 650 ); | |
| 651 $this->assertEquals( | |
| 652 1, | |
| 653 $parser->key() | |
| 654 ); | |
| 655 | |
| 656 $parser->rewind(); | |
| 657 | |
| 658 $this->assertEquals( | |
| 659 new DateTime('2014-08-02 00:00:13'), | |
| 660 $parser->current() | |
| 661 ); | |
| 662 $this->assertEquals( | |
| 663 0, | |
| 664 $parser->key() | |
| 665 ); | |
| 666 | |
| 667 } | |
| 668 | |
| 669 function parse($rule, $start, $expected, $fastForward = null, $tz = 'UTC') { | |
| 670 | |
| 671 $dt = new DateTime($start, new DateTimeZone($tz)); | |
| 672 $parser = new RRuleIterator($rule, $dt); | |
| 673 | |
| 674 if ($fastForward) { | |
| 675 $parser->fastForward(new DateTime($fastForward)); | |
| 676 } | |
| 677 | |
| 678 $result = array(); | |
| 679 while($parser->valid()) { | |
| 680 | |
| 681 $item = $parser->current(); | |
| 682 $result[] = $item->format('Y-m-d H:i:s'); | |
| 683 | |
| 684 if ($parser->isInfinite() && count($result) >= count($expected)) { | |
| 685 break; | |
| 686 } | |
| 687 $parser->next(); | |
| 688 | |
| 689 } | |
| 690 | |
| 691 $this->assertEquals( | |
| 692 $expected, | |
| 693 $result | |
| 694 ); | |
| 695 | |
| 696 } | |
| 697 | |
| 698 } |
