@@ -24,14 +24,21 @@ cron_test_() ->
24
24
fun (_ ) ->
25
25
application :stop (erlcron )
26
26
end ,
27
- {timeout , 30 , [
27
+ [ {timeout , 30 , [
28
28
? FuncTest (set_alarm ),
29
29
? FuncTest (travel_back_in_time ),
30
30
? FuncTest (cancel_alarm ),
31
31
? FuncTest (big_time_jump ),
32
32
? FuncTest (cron ),
33
33
? FuncTest (validation )
34
- ]}}.
34
+ ]},
35
+ {timeout , 30 , [
36
+ ? FuncTest (weekly )
37
+ ]},
38
+ {timeout , 30 , [
39
+ ? FuncTest (weekly_every )
40
+ ]}
41
+ ]}.
35
42
36
43
set_alarm () ->
37
44
erlcron :set_datetime ({{2000 ,1 ,1 },{8 ,0 ,0 }}),
@@ -139,6 +146,26 @@ validation() ->
139
146
? assertMatch ({error ,{invalid_days_in_schedule ,{monthly ," A" ,{55 ,am }}}},
140
147
ecrn_agent :validate ({monthly , 65 , {55 , am }})).
141
148
149
+ weekly () ->
150
+ DateF = fun (Offset ) -> {2000 , 1 , 1 + Offset } end ,
151
+ erlcron :set_datetime ({DateF (0 ), {7 ,0 ,0 }}),
152
+ Self = self (),
153
+ erlcron :cron (weekly , {{weekly , [sat , sun ], {9 ,0 ,0 }}, fun () -> Self ! weekly end }),
154
+ Pattern = [1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 ],
155
+ collect_weekly (DateF , {8 , 0 , 0 }, {10 , 0 , 0 }, Pattern ),
156
+ erlcron :cancel (weekly ).
157
+
158
+ weekly_every () ->
159
+ DateF = fun (Offset ) -> {2000 , 1 , 1 + Offset } end ,
160
+ erlcron :set_datetime ({DateF (0 ), {7 ,0 ,0 }}),
161
+ Self = self (),
162
+ erlcron :cron (weekly , {{weekly , [sat , mon ],
163
+ {every , {29 , sec }, {between , {9 , 0 , 0 }, {9 , 1 , 0 }}}},
164
+ fun () -> Self ! weekly end }),
165
+ Pattern = [3 , 0 , 3 , 0 , 0 , 0 , 0 , 3 ],
166
+ collect_weekly (DateF , {8 , 0 , 0 }, {10 , 0 , 0 }, Pattern ),
167
+ erlcron :cancel (weekly ).
168
+
142
169
% %%===================================================================
143
170
% %% Internal Functions
144
171
% %%===================================================================
@@ -155,3 +182,16 @@ collect(Msg, Timeout, I, Count) ->
155
182
after
156
183
Timeout -> I
157
184
end .
185
+
186
+ % check that for each day generated by DateF(I) for increasing I, Pattern[I]
187
+ % weekly messages are received
188
+ collect_weekly (DateF , TimeBefore , TimeAfter , Pattern ) ->
189
+ collect_weekly (DateF , TimeBefore , TimeAfter , Pattern , 0 ).
190
+
191
+ collect_weekly (DateF , TimeBefore , TimeAfter , [N | PatternTail ], I ) ->
192
+ erlcron :set_datetime ({DateF (I ), TimeBefore }),
193
+ ? assertMatch (0 , collect (weekly , 1000 , 1 )),
194
+ erlcron :set_datetime ({DateF (I ), TimeAfter }),
195
+ ? assertMatch (N , collect (weekly , 1000 , N )),
196
+ collect_weekly (DateF , TimeBefore , TimeAfter , PatternTail , I + 1 );
197
+ collect_weekly (_DateF , _TimeBefore , _TimeAfter , [], _I ) -> ok .
0 commit comments