VEventTest.php 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace Sabre\VObject\Component;
  3. class VEventTest extends \PHPUnit_Framework_TestCase {
  4. /**
  5. * @dataProvider timeRangeTestData
  6. */
  7. function testInTimeRange(VEvent $vevent, $start, $end, $outcome) {
  8. $this->assertEquals($outcome, $vevent->isInTimeRange($start, $end));
  9. }
  10. function timeRangeTestData() {
  11. $tests = [];
  12. $calendar = new VCalendar();
  13. $vevent = $calendar->createComponent('VEVENT');
  14. $vevent->DTSTART = '20111223T120000Z';
  15. $tests[] = [$vevent, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true];
  16. $tests[] = [$vevent, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false];
  17. $vevent2 = clone $vevent;
  18. $vevent2->DTEND = '20111225T120000Z';
  19. $tests[] = [$vevent2, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true];
  20. $tests[] = [$vevent2, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false];
  21. $vevent3 = clone $vevent;
  22. $vevent3->DURATION = 'P1D';
  23. $tests[] = [$vevent3, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true];
  24. $tests[] = [$vevent3, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false];
  25. $vevent4 = clone $vevent;
  26. $vevent4->DTSTART = '20111225';
  27. $vevent4->DTSTART['VALUE'] = 'DATE';
  28. $tests[] = [$vevent4, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true];
  29. $tests[] = [$vevent4, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false];
  30. // Event with no end date should be treated as lasting the entire day.
  31. $tests[] = [$vevent4, new \DateTime('2011-12-25 16:00:00'), new \DateTime('2011-12-25 17:00:00'), true];
  32. // DTEND is non inclusive so all day events should not be returned on the next day.
  33. $tests[] = [$vevent4, new \DateTime('2011-12-26 00:00:00'), new \DateTime('2011-12-26 17:00:00'), false];
  34. // The timezone of timerange in question also needs to be considered.
  35. $tests[] = [$vevent4, new \DateTime('2011-12-26 00:00:00', new \DateTimeZone('Europe/Berlin')), new \DateTime('2011-12-26 17:00:00', new \DateTimeZone('Europe/Berlin')), false];
  36. $vevent5 = clone $vevent;
  37. $vevent5->DURATION = 'P1D';
  38. $vevent5->RRULE = 'FREQ=YEARLY';
  39. $tests[] = [$vevent5, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true];
  40. $tests[] = [$vevent5, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false];
  41. $tests[] = [$vevent5, new \DateTime('2013-12-01'), new \DateTime('2013-12-31'), true];
  42. $vevent6 = clone $vevent;
  43. $vevent6->DTSTART = '20111225';
  44. $vevent6->DTSTART['VALUE'] = 'DATE';
  45. $vevent6->DTEND = '20111225';
  46. $vevent6->DTEND['VALUE'] = 'DATE';
  47. $tests[] = [$vevent6, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true];
  48. $tests[] = [$vevent6, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false];
  49. // Added this test to ensure that recurrence rules with no DTEND also
  50. // get checked for the entire day.
  51. $vevent7 = clone $vevent;
  52. $vevent7->DTSTART = '20120101';
  53. $vevent7->DTSTART['VALUE'] = 'DATE';
  54. $vevent7->RRULE = 'FREQ=MONTHLY';
  55. $tests[] = [$vevent7, new \DateTime('2012-02-01 15:00:00'), new \DateTime('2012-02-02'), true];
  56. // The timezone of timerange in question should also be considered.
  57. $tests[] = [$vevent7, new \DateTime('2012-02-02 00:00:00', new \DateTimeZone('Europe/Berlin')), new \DateTime('2012-02-03 00:00:00', new \DateTimeZone('Europe/Berlin')), false];
  58. // Added this test to check recurring events that have no instances.
  59. $vevent8 = clone $vevent;
  60. $vevent8->DTSTART = '20130329T140000';
  61. $vevent8->DTEND = '20130329T153000';
  62. $vevent8->RRULE = ['FREQ' => 'WEEKLY', 'BYDAY' => ['FR'], 'UNTIL' => '20130412T115959Z'];
  63. $vevent8->add('EXDATE', '20130405T140000');
  64. $vevent8->add('EXDATE', '20130329T140000');
  65. $tests[] = [$vevent8, new \DateTime('2013-03-01'), new \DateTime('2013-04-01'), false];
  66. return $tests;
  67. }
  68. }