1 package com.atlassian.scheduler.core.tests;
2
3 import org.junit.Test;
4
5 import static com.atlassian.scheduler.core.tests.CronExpressionAssertions.satisfiedBy;
6 import static com.atlassian.scheduler.core.tests.CronExpressionAssertions.unsatisfiedBy;
7
8
9
10
11
12
13 public class CronExpressionDayOfWeekTest extends AbstractCronExpressionTest {
14 public CronExpressionDayOfWeekTest(CronFactory cronFactory) {
15 super(cronFactory);
16 }
17
18 @Test
19 public void testLastDayOfWeekIsSaturday() {
20
21 assertCron("L (Saturday)", "0 0 0 ? * L",
22 unsatisfiedBy(0, 0, 0, 10, 1, 2014),
23 satisfiedBy(0, 0, 0, 11, 1, 2014),
24 unsatisfiedBy(0, 0, 0, 12, 1, 2014),
25 satisfiedBy(0, 0, 0, 18, 1, 2014),
26 unsatisfiedBy(0, 0, 0, 24, 1, 2014),
27 satisfiedBy(0, 0, 0, 25, 1, 2014),
28 unsatisfiedBy(0, 0, 0, 26, 1, 2014),
29 unsatisfiedBy(0, 0, 0, 31, 1, 2014),
30 satisfiedBy(0, 0, 0, 1, 2, 2014));
31 }
32
33 @Test
34 public void testLastDayOfWeekForMonth() {
35
36
37 assertCron("5L", "0 0 0 ? * 5L",
38 unsatisfiedBy(0, 0, 0, 9, 1, 2014),
39 unsatisfiedBy(0, 0, 0, 23, 1, 2014),
40 unsatisfiedBy(0, 0, 0, 23, 1, 2014),
41 unsatisfiedBy(0, 0, 0, 29, 1, 2014),
42 satisfiedBy(0, 0, 0, 30, 1, 2014),
43 unsatisfiedBy(0, 0, 0, 31, 1, 2014),
44 unsatisfiedBy(0, 0, 0, 6, 2, 2014),
45 satisfiedBy(0, 0, 0, 27, 2, 2014),
46 unsatisfiedBy(0, 0, 0, 28, 2, 2014),
47 satisfiedBy(0, 0, 0, 29, 2, 2024));
48
49 assertCron("7L", "0 0 0 ? * 7L",
50 unsatisfiedBy(0, 0, 0, 11, 1, 2014),
51 satisfiedBy(0, 0, 0, 25, 1, 2014),
52 unsatisfiedBy(0, 0, 0, 1, 2, 2014));
53 }
54
55 @Test
56 public void testEnglishDayOfWeek() {
57 assertCron("MON", "0 0 0 ? 2 MON",
58 satisfiedBy(0, 0, 0, 3, 2, 2014),
59 satisfiedBy(0, 0, 0, 10, 2, 2014),
60 satisfiedBy(0, 0, 0, 17, 2, 2014),
61 satisfiedBy(0, 0, 0, 24, 2, 2014),
62 unsatisfiedBy(1, 0, 0, 3, 2, 2014),
63 unsatisfiedBy(0, 1, 0, 3, 2, 2014),
64 unsatisfiedBy(0, 0, 1, 3, 2, 2014),
65 unsatisfiedBy(0, 0, 0, 4, 2, 2014),
66 unsatisfiedBy(0, 0, 0, 3, 3, 2014),
67 satisfiedBy(0, 0, 0, 2, 2, 2015));
68 }
69
70 @Test
71 public void testEnglishDayOfWeekNormalRange() {
72 assertCron("MON-THU - Other field mismatches", "1 1 1 ? * MON-THU",
73 unsatisfiedBy(0, 1, 1, 3, 2, 2014),
74 unsatisfiedBy(2, 1, 1, 3, 2, 2014),
75 unsatisfiedBy(1, 0, 1, 3, 2, 2014),
76 unsatisfiedBy(1, 2, 1, 3, 2, 2014),
77 unsatisfiedBy(1, 1, 0, 3, 2, 2014),
78 unsatisfiedBy(1, 1, 2, 3, 2, 2014));
79
80 assertCron("Checking MON-THU - Simple checks", "1 1 1 ? * MON-THU",
81 unsatisfiedBy(1, 1, 1, 27, 4, 2014),
82 satisfiedBy(1, 1, 1, 28, 4, 2014),
83 satisfiedBy(1, 1, 1, 29, 4, 2014),
84 satisfiedBy(1, 1, 1, 30, 4, 2014),
85 satisfiedBy(1, 1, 1, 1, 5, 2014),
86 unsatisfiedBy(1, 1, 1, 2, 5, 2014),
87 unsatisfiedBy(1, 1, 1, 3, 5, 2014),
88 unsatisfiedBy(1, 1, 1, 4, 5, 2014),
89 satisfiedBy(1, 1, 1, 5, 5, 2014),
90 satisfiedBy(1, 1, 1, 6, 5, 2014));
91 }
92
93 @Test
94 public void testEnglishDayOfWeekWrappedRange() {
95 assertCron("Checking THU-MON - Other field mismatches", "1 1 1 ? * THU-MON",
96 unsatisfiedBy(0, 1, 1, 3, 2, 2014),
97 unsatisfiedBy(2, 1, 1, 3, 2, 2014),
98 unsatisfiedBy(1, 0, 1, 3, 2, 2014),
99 unsatisfiedBy(1, 2, 1, 3, 2, 2014),
100 unsatisfiedBy(1, 1, 0, 3, 2, 2014),
101 unsatisfiedBy(1, 1, 2, 3, 2, 2014));
102
103 assertCron("Checking THU-MON - Simple checks", "1 1 1 ? * THU-MON",
104 satisfiedBy(1, 1, 1, 27, 4, 2014),
105 satisfiedBy(1, 1, 1, 28, 4, 2014),
106 unsatisfiedBy(1, 1, 1, 29, 4, 2014),
107 unsatisfiedBy(1, 1, 1, 30, 4, 2014),
108 satisfiedBy(1, 1, 1, 1, 5, 2014),
109 satisfiedBy(1, 1, 1, 2, 5, 2014),
110 satisfiedBy(1, 1, 1, 3, 5, 2014),
111 satisfiedBy(1, 1, 1, 4, 5, 2014),
112 satisfiedBy(1, 1, 1, 5, 5, 2014),
113 unsatisfiedBy(1, 1, 1, 6, 5, 2014));
114
115 }
116
117 @Test
118 public void testThirdMondayOfMonthUsingName() {
119 nthDay3rdMonday("5 6 7 ? 1 MON#3");
120 }
121
122 @Test
123 public void testThirdMondayOfMonthUsingNumber() {
124 nthDay3rdMonday("5 6 7 ? 1 2#3");
125 }
126
127 private void nthDay3rdMonday(final String cronExpression) {
128 assertCron("3rd Monday - Other field mismatches", cronExpression,
129 unsatisfiedBy(4, 6, 7, 20, 1, 2014),
130 unsatisfiedBy(5, 5, 7, 20, 1, 2014),
131 unsatisfiedBy(5, 6, 6, 20, 1, 2014),
132 unsatisfiedBy(5, 6, 7, 20, 2, 2014),
133 unsatisfiedBy(5, 6, 7, 20, 1, 2015));
134
135 assertCron("3rd Monday - simple checks", cronExpression,
136 satisfiedBy(5, 6, 7, 21, 1, 2013),
137 unsatisfiedBy(5, 6, 7, 13, 1, 2014),
138 unsatisfiedBy(5, 6, 7, 19, 1, 2014),
139 satisfiedBy(5, 6, 7, 20, 1, 2014),
140 unsatisfiedBy(5, 6, 7, 21, 1, 2014),
141 unsatisfiedBy(5, 6, 7, 27, 1, 2014),
142 unsatisfiedBy(5, 6, 7, 17, 2, 2014),
143 satisfiedBy(5, 6, 7, 20, 1, 2014),
144 satisfiedBy(5, 6, 7, 18, 1, 2016),
145 satisfiedBy(5, 6, 7, 16, 1, 2017));
146 }
147
148 @Test
149 public void testNthDayOfMonth() {
150 assertCron("TUE#4 (4th Tuesday)", "9 9 9 ? * TUE#4",
151 unsatisfiedBy(9, 9, 9, 21, 1, 2014),
152 unsatisfiedBy(9, 9, 9, 27, 1, 2014),
153 satisfiedBy(9, 9, 9, 28, 1, 2014),
154 unsatisfiedBy(9, 9, 9, 29, 1, 2014),
155 unsatisfiedBy(9, 9, 9, 4, 2, 2014),
156 satisfiedBy(9, 9, 9, 25, 2, 2014),
157 satisfiedBy(9, 9, 9, 22, 4, 2014),
158 satisfiedBy(9, 9, 9, 24, 1, 2017),
159 satisfiedBy(9, 9, 9, 28, 3, 2017));
160
161 assertCron("4#5 (5th Wednesday)", "9 9 9 ? * 4#5",
162 satisfiedBy(9, 9, 9, 29, 2, 2012),
163 unsatisfiedBy(9, 9, 9, 28, 1, 2014),
164 unsatisfiedBy(9, 9, 9, 4, 2, 2014),
165 unsatisfiedBy(9, 9, 9, 31, 3, 2014),
166 satisfiedBy(9, 9, 9, 30, 4, 2014),
167 satisfiedBy(9, 9, 9, 31, 12, 2014),
168 satisfiedBy(9, 9, 9, 29, 3, 2017));
169 }
170 }