AbstractFieldTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. declare(strict_types=1);
  3. namespace Cron\Tests;
  4. use Cron\DayOfWeekField;
  5. use Cron\HoursField;
  6. use Cron\MinutesField;
  7. use Cron\MonthField;
  8. use PHPUnit\Framework\TestCase;
  9. /**
  10. * @author Michael Dowling <mtdowling@gmail.com>
  11. */
  12. class AbstractFieldTest extends TestCase
  13. {
  14. /**
  15. * @covers \Cron\AbstractField::isRange
  16. */
  17. public function testTestsIfRange(): void
  18. {
  19. $f = new DayOfWeekField();
  20. $this->assertTrue($f->isRange('1-2'));
  21. $this->assertFalse($f->isRange('2'));
  22. }
  23. /**
  24. * @covers \Cron\AbstractField::isIncrementsOfRanges
  25. */
  26. public function testTestsIfIncrementsOfRanges(): void
  27. {
  28. $f = new DayOfWeekField();
  29. $this->assertFalse($f->isIncrementsOfRanges('1-2'));
  30. $this->assertTrue($f->isIncrementsOfRanges('1/2'));
  31. $this->assertTrue($f->isIncrementsOfRanges('*/2'));
  32. $this->assertTrue($f->isIncrementsOfRanges('3-12/2'));
  33. }
  34. /**
  35. * @covers \Cron\AbstractField::isInRange
  36. */
  37. public function testTestsIfInRange(): void
  38. {
  39. $f = new DayOfWeekField();
  40. $this->assertTrue($f->isInRange(1, '1-2'));
  41. $this->assertTrue($f->isInRange(2, '1-2'));
  42. $this->assertTrue($f->isInRange(5, '4-12'));
  43. $this->assertFalse($f->isInRange(3, '4-12'));
  44. $this->assertFalse($f->isInRange(13, '4-12'));
  45. }
  46. /**
  47. * @covers \Cron\AbstractField::isInIncrementsOfRanges
  48. */
  49. public function testTestsIfInIncrementsOfRangesOnZeroStartRange(): void
  50. {
  51. $f = new MinutesField();
  52. $this->assertTrue($f->isInIncrementsOfRanges(3, '3-59/2'));
  53. $this->assertTrue($f->isInIncrementsOfRanges(13, '3-59/2'));
  54. $this->assertTrue($f->isInIncrementsOfRanges(15, '3-59/2'));
  55. $this->assertTrue($f->isInIncrementsOfRanges(14, '*/2'));
  56. $this->assertFalse($f->isInIncrementsOfRanges(2, '3-59/13'));
  57. $this->assertFalse($f->isInIncrementsOfRanges(14, '*/13'));
  58. $this->assertFalse($f->isInIncrementsOfRanges(14, '3-59/2'));
  59. $this->assertFalse($f->isInIncrementsOfRanges(3, '2-59'));
  60. $this->assertFalse($f->isInIncrementsOfRanges(3, '2'));
  61. $this->assertFalse($f->isInIncrementsOfRanges(3, '*'));
  62. $this->assertFalse($f->isInIncrementsOfRanges(0, '*/0'));
  63. $this->assertFalse($f->isInIncrementsOfRanges(1, '*/0'));
  64. $this->assertTrue($f->isInIncrementsOfRanges(4, '4/1'));
  65. $this->assertFalse($f->isInIncrementsOfRanges(14, '4/1'));
  66. $this->assertFalse($f->isInIncrementsOfRanges(34, '4/1'));
  67. }
  68. /**
  69. * @covers \Cron\AbstractField::isInIncrementsOfRanges
  70. */
  71. public function testTestsIfInIncrementsOfRangesOnOneStartRange(): void
  72. {
  73. $f = new MonthField();
  74. $this->assertTrue($f->isInIncrementsOfRanges(3, '3-12/2'));
  75. $this->assertFalse($f->isInIncrementsOfRanges(13, '3-12/2'));
  76. $this->assertFalse($f->isInIncrementsOfRanges(15, '3-12/2'));
  77. $this->assertTrue($f->isInIncrementsOfRanges(3, '*/2'));
  78. $this->assertFalse($f->isInIncrementsOfRanges(3, '*/3'));
  79. $this->assertTrue($f->isInIncrementsOfRanges(7, '*/3'));
  80. $this->assertFalse($f->isInIncrementsOfRanges(14, '3-12/2'));
  81. $this->assertFalse($f->isInIncrementsOfRanges(3, '2-12'));
  82. $this->assertFalse($f->isInIncrementsOfRanges(3, '2'));
  83. $this->assertFalse($f->isInIncrementsOfRanges(3, '*'));
  84. $this->assertFalse($f->isInIncrementsOfRanges(0, '*/0'));
  85. $this->assertFalse($f->isInIncrementsOfRanges(1, '*/0'));
  86. $this->assertTrue($f->isInIncrementsOfRanges(4, '4/1'));
  87. $this->assertFalse($f->isInIncrementsOfRanges(14, '4/1'));
  88. $this->assertFalse($f->isInIncrementsOfRanges(34, '4/1'));
  89. }
  90. /**
  91. * @covers \Cron\AbstractField::isSatisfied
  92. */
  93. public function testTestsIfSatisfied(): void
  94. {
  95. $f = new DayOfWeekField();
  96. $this->assertTrue($f->isSatisfied(12, '3-13'));
  97. $this->assertFalse($f->isSatisfied(15, '3-7/2'));
  98. $this->assertTrue($f->isSatisfied(12, '*'));
  99. $this->assertTrue($f->isSatisfied(12, '12'));
  100. $this->assertFalse($f->isSatisfied(12, '3-11'));
  101. $this->assertFalse($f->isSatisfied(12, '3-7/2'));
  102. $this->assertFalse($f->isSatisfied(12, '11'));
  103. }
  104. /**
  105. * Allows ranges and lists to coexist in the same expression.
  106. *
  107. * @see https://github.com/dragonmantank/cron-expression/issues/5
  108. */
  109. public function testAllowRangesAndLists(): void
  110. {
  111. $expression = '5-7,11-13';
  112. $f = new HoursField();
  113. $this->assertTrue($f->validate($expression));
  114. }
  115. /**
  116. * Makes sure that various types of ranges expand out properly.
  117. *
  118. * @see https://github.com/dragonmantank/cron-expression/issues/5
  119. */
  120. public function testGetRangeForExpressionExpandsCorrectly(): void
  121. {
  122. $f = new HoursField();
  123. $this->assertSame([5, 6, 7, 11, 12, 13], $f->getRangeForExpression('5-7,11-13', 23));
  124. $this->assertSame(['5', '6', '7', '11', '12', '13'], $f->getRangeForExpression('5,6,7,11,12,13', 23));
  125. $this->assertSame([0, 6, 12, 18], $f->getRangeForExpression('*/6', 23));
  126. $this->assertSame([5, 11], $f->getRangeForExpression('5-13/6', 23));
  127. }
  128. }