blob: 74b9820479f22367dec3dbde838ee2616a04fc7f [file] [log] [blame]
niemeyer68ae2752003-09-28 01:20:02 +00001#!/usr/bin/python
2import unittest
3from cStringIO import StringIO
4import base64
5import os
6
7# Add build directory to search path
8if os.path.exists("build"):
9 from distutils.util import get_platform
10 import sys
11 s = "build/lib.%s-%.3s" % (get_platform(), sys.version)
12 s = os.path.join(os.getcwd(), s)
13 sys.path.insert(0,s)
14
15from dateutil.relativedelta import *
16from dateutil.parser import *
17from dateutil.easter import *
niemeyercb08a352003-10-08 06:02:06 +000018from dateutil.rrule import *
niemeyer68ae2752003-09-28 01:20:02 +000019from dateutil.tz import *
20
21from datetime import *
22
23import calendar
24import time
25
26class RelativeDeltaTest(unittest.TestCase):
27 now = datetime(2003, 9, 17, 20, 54, 47, 282310)
28 today = date(2003, 9, 17)
29
30 def testNextMonth(self):
31 self.assertEqual(self.now+relativedelta(months=+1),
32 datetime(2003, 10, 17, 20, 54, 47, 282310))
33
34 def testNextMonthPlusOneWeek(self):
35 self.assertEqual(self.now+relativedelta(months=+1, weeks=+1),
36 datetime(2003, 10, 24, 20, 54, 47, 282310))
37 def testNextMonthPlusOneWeek10am(self):
38 self.assertEqual(self.today +
39 relativedelta(months=+1, weeks=+1, hour=10),
40 datetime(2003, 10, 24, 10, 0))
41
42 def testNextMonthPlusOneWeek10amDiff(self):
43 self.assertEqual(relativedelta(datetime(2003, 10, 24, 10, 0),
44 self.today),
45 relativedelta(months=+1, days=+7, hours=+10))
46
47 def testOneMonthBeforeOneYear(self):
48 self.assertEqual(self.now+relativedelta(years=+1, months=-1),
49 datetime(2004, 8, 17, 20, 54, 47, 282310))
50
51 def testMonthsOfDiffNumOfDays(self):
52 self.assertEqual(date(2003, 1, 27)+relativedelta(months=+1),
53 date(2003, 2, 27))
54 self.assertEqual(date(2003, 1, 31)+relativedelta(months=+1),
55 date(2003, 2, 28))
56 self.assertEqual(date(2003, 1, 31)+relativedelta(months=+2),
57 date(2003, 3, 31))
58
59 def testMonthsOfDiffNumOfDaysWithYears(self):
60 self.assertEqual(date(2000, 2, 28)+relativedelta(years=+1),
61 date(2001, 2, 28))
62 self.assertEqual(date(2000, 2, 29)+relativedelta(years=+1),
63 date(2001, 2, 28))
64
65 self.assertEqual(date(1999, 2, 28)+relativedelta(years=+1),
66 date(2000, 2, 28))
67 self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1),
68 date(2000, 3, 1))
69 self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1),
70 date(2000, 3, 1))
71
72 self.assertEqual(date(2001, 2, 28)+relativedelta(years=-1),
73 date(2000, 2, 28))
74 self.assertEqual(date(2001, 3, 1)+relativedelta(years=-1),
75 date(2000, 3, 1))
76
77 def testNextFriday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000078 self.assertEqual(self.today+relativedelta(weekday=FR),
79 date(2003, 9, 19))
80
81 def testNextFridayInt(self):
82 self.assertEqual(self.today+relativedelta(weekday=calendar.FRIDAY),
niemeyer68ae2752003-09-28 01:20:02 +000083 date(2003, 9, 19))
84
85 def testLastFridayInThisMonth(self):
niemeyerb47d12a2003-09-29 20:00:21 +000086 self.assertEqual(self.today+relativedelta(day=31, weekday=FR(-1)),
niemeyer68ae2752003-09-28 01:20:02 +000087 date(2003, 9, 26))
88
89 def testNextWednesdayIsToday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000090 self.assertEqual(self.today+relativedelta(weekday=WE),
niemeyer68ae2752003-09-28 01:20:02 +000091 date(2003, 9, 17))
92
93
94 def testNextWenesdayNotToday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000095 self.assertEqual(self.today+relativedelta(days=+1, weekday=WE),
niemeyer68ae2752003-09-28 01:20:02 +000096 date(2003, 9, 24))
97
98 def test15thISOYearWeek(self):
99 self.assertEqual(date(2003, 1, 1) +
niemeyerb47d12a2003-09-29 20:00:21 +0000100 relativedelta(day=4, weeks=+14, weekday=MO(-1)),
niemeyer68ae2752003-09-28 01:20:02 +0000101 date(2003, 4, 7))
102
103 def testMillenniumAge(self):
104 self.assertEqual(relativedelta(self.now, date(2001,1,1)),
105 relativedelta(years=+2, months=+8, days=+16,
106 hours=+20, minutes=+54, seconds=+47,
107 microseconds=+282310))
108
109 def testJohnAge(self):
110 self.assertEqual(relativedelta(self.now,
111 datetime(1978, 4, 5, 12, 0)),
112 relativedelta(years=+25, months=+5, days=+12,
113 hours=+8, minutes=+54, seconds=+47,
114 microseconds=+282310))
115
116 def testJohnAgeWithDate(self):
117 self.assertEqual(relativedelta(self.today,
118 datetime(1978, 4, 5, 12, 0)),
119 relativedelta(years=+25, months=+5, days=+11,
120 hours=+12))
121
122 def testYearDay(self):
123 self.assertEqual(date(2003, 1, 1)+relativedelta(yearday=260),
124 date(2003, 9, 17))
125 self.assertEqual(date(2002, 1, 1)+relativedelta(yearday=260),
126 date(2002, 9, 17))
127 self.assertEqual(date(2000, 1, 1)+relativedelta(yearday=260),
128 date(2000, 9, 16))
129 self.assertEqual(self.today+relativedelta(yearday=261),
130 date(2003, 9, 18))
131
132 def testNonLeapYearDay(self):
133 self.assertEqual(date(2003, 1, 1)+relativedelta(nlyearday=260),
134 date(2003, 9, 17))
135 self.assertEqual(date(2002, 1, 1)+relativedelta(nlyearday=260),
136 date(2002, 9, 17))
137 self.assertEqual(date(2000, 1, 1)+relativedelta(nlyearday=260),
138 date(2000, 9, 17))
139 self.assertEqual(self.today+relativedelta(yearday=261),
140 date(2003, 9, 18))
141
niemeyercb08a352003-10-08 06:02:06 +0000142class RRuleTest(unittest.TestCase):
143
144 def testYearly(self):
145 self.assertEqual(list(rrule(FREQ_YEARLY,
146 count=3,
147 dtstart=parse("19970902T090000"))),
148 [datetime(1997, 9, 2, 9, 0),
149 datetime(1998, 9, 2, 9, 0),
150 datetime(1999, 9, 2, 9, 0)])
151
niemeyercb08a352003-10-08 06:02:06 +0000152 def testYearlyInterval(self):
153 self.assertEqual(list(rrule(FREQ_YEARLY,
154 count=3,
155 interval=2,
156 dtstart=parse("19970902T090000"))),
157 [datetime(1997, 9, 2, 9, 0),
158 datetime(1999, 9, 2, 9, 0),
159 datetime(2001, 9, 2, 9, 0)])
160
161 def testYearlyIntervalLarge(self):
162 self.assertEqual(list(rrule(FREQ_YEARLY,
163 count=3,
164 interval=100,
165 dtstart=parse("19970902T090000"))),
166 [datetime(1997, 9, 2, 9, 0),
167 datetime(2097, 9, 2, 9, 0),
168 datetime(2197, 9, 2, 9, 0)])
169
170 def testYearlyByMonth(self):
171 self.assertEqual(list(rrule(FREQ_YEARLY,
172 count=3,
173 bymonth=(1,3),
174 dtstart=parse("19970902T090000"))),
175 [datetime(1998, 1, 2, 9, 0),
176 datetime(1998, 3, 2, 9, 0),
177 datetime(1999, 1, 2, 9, 0)])
178
179 def testYearlyByMonthDay(self):
180 self.assertEqual(list(rrule(FREQ_YEARLY,
181 count=3,
182 bymonthday=(1,3),
183 dtstart=parse("19970902T090000"))),
184 [datetime(1997, 9, 3, 9, 0),
185 datetime(1997, 10, 1, 9, 0),
186 datetime(1997, 10, 3, 9, 0)])
187
188 def testYearlyByMonthAndMonthDay(self):
189 self.assertEqual(list(rrule(FREQ_YEARLY,
190 count=3,
191 bymonth=(1,3),
192 bymonthday=(5,7),
193 dtstart=parse("19970902T090000"))),
194 [datetime(1998, 1, 5, 9, 0),
195 datetime(1998, 1, 7, 9, 0),
196 datetime(1998, 3, 5, 9, 0)])
197
198 def testYearlyByWeekDay(self):
199 self.assertEqual(list(rrule(FREQ_YEARLY,
200 count=3,
201 byweekday=(TU,TH),
202 dtstart=parse("19970902T090000"))),
203 [datetime(1997, 9, 2, 9, 0),
204 datetime(1997, 9, 4, 9, 0),
205 datetime(1997, 9, 9, 9, 0)])
206
niemeyer7d8be1a2003-10-09 01:09:42 +0000207 def testYearlyByNWeekDay(self):
208 self.assertEqual(list(rrule(FREQ_YEARLY,
209 count=3,
210 byweekday=(TU(1),TH(-1)),
211 dtstart=parse("19970902T090000"))),
212 [datetime(1997, 12, 25, 9, 0),
213 datetime(1998, 1, 6, 9, 0),
214 datetime(1998, 12, 31, 9, 0)])
215
216 def testYearlyByNWeekDayLarge(self):
217 self.assertEqual(list(rrule(FREQ_YEARLY,
218 count=3,
219 byweekday=(TU(3),TH(-3)),
220 dtstart=parse("19970902T090000"))),
221 [datetime(1997, 12, 11, 9, 0),
222 datetime(1998, 1, 20, 9, 0),
223 datetime(1998, 12, 17, 9, 0)])
224
niemeyercb08a352003-10-08 06:02:06 +0000225 def testYearlyByMonthAndWeekDay(self):
226 self.assertEqual(list(rrule(FREQ_YEARLY,
227 count=3,
228 bymonth=(1,3),
229 byweekday=(TU,TH),
230 dtstart=parse("19970902T090000"))),
231 [datetime(1998, 1, 1, 9, 0),
232 datetime(1998, 1, 6, 9, 0),
233 datetime(1998, 1, 8, 9, 0)])
234
niemeyer7d8be1a2003-10-09 01:09:42 +0000235 def testYearlyByMonthAndNWeekDay(self):
236 self.assertEqual(list(rrule(FREQ_YEARLY,
237 count=3,
238 bymonth=(1,3),
239 byweekday=(TU(1),TH(-1)),
240 dtstart=parse("19970902T090000"))),
241 [datetime(1998, 1, 6, 9, 0),
242 datetime(1998, 1, 29, 9, 0),
243 datetime(1998, 3, 3, 9, 0)])
244
245 def testYearlyByMonthAndNWeekDayLarge(self):
246 # This is interesting because the TH(-3) ends up before
247 # the TU(3).
248 self.assertEqual(list(rrule(FREQ_YEARLY,
249 count=3,
250 bymonth=(1,3),
251 byweekday=(TU(3),TH(-3)),
252 dtstart=parse("19970902T090000"))),
253 [datetime(1998, 1, 15, 9, 0),
254 datetime(1998, 1, 20, 9, 0),
255 datetime(1998, 3, 12, 9, 0)])
256
257 def testYearlyByMonthDayAndWeekDay(self):
258 self.assertEqual(list(rrule(FREQ_YEARLY,
259 count=3,
260 bymonthday=(1,3),
261 byweekday=(TU,TH),
262 dtstart=parse("19970902T090000"))),
263 [datetime(1998, 1, 1, 9, 0),
264 datetime(1998, 2, 3, 9, 0),
265 datetime(1998, 3, 3, 9, 0)])
266
267 def testYearlyByMonthAndMonthDayAndWeekDay(self):
268 self.assertEqual(list(rrule(FREQ_YEARLY,
269 count=3,
270 bymonth=(1,3),
271 bymonthday=(1,3),
272 byweekday=(TU,TH),
273 dtstart=parse("19970902T090000"))),
274 [datetime(1998, 1, 1, 9, 0),
275 datetime(1998, 3, 3, 9, 0),
276 datetime(2001, 3, 1, 9, 0)])
277
278 def testYearlyByYearDay(self):
279 self.assertEqual(list(rrule(FREQ_YEARLY,
280 count=3,
281 byyearday=(1,100,200),
282 dtstart=parse("19970902T090000"))),
283 [datetime(1998, 1, 1, 9, 0),
284 datetime(1998, 4, 10, 9, 0),
285 datetime(1998, 7, 19, 9, 0)])
286
287 def testYearlyByMonthAndYearDay(self):
288 self.assertEqual(list(rrule(FREQ_YEARLY,
289 count=3,
290 bymonth=(4,7),
291 byyearday=(1,100,200),
292 dtstart=parse("19970902T090000"))),
293 [datetime(1998, 4, 10, 9, 0),
294 datetime(1998, 7, 19, 9, 0),
295 datetime(1999, 4, 10, 9, 0)])
296
297 def testYearlyByWeekNo(self):
298 self.assertEqual(list(rrule(FREQ_YEARLY,
299 count=3,
300 byweekno=20,
301 dtstart=parse("19970902T090000"))),
302 [datetime(1998, 5, 11, 9, 0),
303 datetime(1998, 5, 12, 9, 0),
304 datetime(1998, 5, 13, 9, 0)])
305
306 def testYearlyByWeekNoAndWeekDay(self):
307 # That's a nice one. The first days of week number one
308 # may be in the last year.
309 self.assertEqual(list(rrule(FREQ_YEARLY,
310 count=3,
311 byweekno=1,
312 byweekday=MO,
313 dtstart=parse("19970902T090000"))),
314 [datetime(1997, 12, 29, 9, 0),
315 datetime(1999, 1, 4, 9, 0),
316 datetime(2000, 1, 3, 9, 0)])
317
318 def testYearlyByWeekNoAndWeekDayLarge(self):
319 # Another nice test. The last days of week number 52/53
320 # may be in the next year.
321 self.assertEqual(list(rrule(FREQ_YEARLY,
322 count=3,
323 byweekno=52,
324 byweekday=SU,
325 dtstart=parse("19970902T090000"))),
326 [datetime(1997, 12, 28, 9, 0),
327 datetime(1998, 12, 27, 9, 0),
328 datetime(2000, 1, 2, 9, 0)])
329
330 def testYearlyByWeekNoAndWeekDayLast(self):
331 self.assertEqual(list(rrule(FREQ_YEARLY,
332 count=3,
333 byweekno=-1,
334 byweekday=SU,
335 dtstart=parse("19970902T090000"))),
336 [datetime(1997, 12, 28, 9, 0),
337 datetime(1999, 1, 3, 9, 0),
338 datetime(2000, 1, 2, 9, 0)])
339
340 def testYearlyByEaster(self):
341 self.assertEqual(list(rrule(FREQ_YEARLY,
342 count=3,
343 byeaster=0,
344 dtstart=parse("19970902T090000"))),
345 [datetime(1998, 4, 12, 9, 0),
346 datetime(1999, 4, 4, 9, 0),
347 datetime(2000, 4, 23, 9, 0)])
348
349 def testYearlyByEasterPos(self):
350 self.assertEqual(list(rrule(FREQ_YEARLY,
351 count=3,
352 byeaster=1,
353 dtstart=parse("19970902T090000"))),
354 [datetime(1998, 4, 13, 9, 0),
355 datetime(1999, 4, 5, 9, 0),
356 datetime(2000, 4, 24, 9, 0)])
357
358 def testYearlyByEasterNeg(self):
359 self.assertEqual(list(rrule(FREQ_YEARLY,
360 count=3,
361 byeaster=-1,
362 dtstart=parse("19970902T090000"))),
363 [datetime(1998, 4, 11, 9, 0),
364 datetime(1999, 4, 3, 9, 0),
365 datetime(2000, 4, 22, 9, 0)])
366
367 def testYearlyByWeekNoAndWeekDay53(self):
368 self.assertEqual(list(rrule(FREQ_YEARLY,
369 count=3,
370 byweekno=53,
371 byweekday=MO,
372 dtstart=parse("19970902T090000"))),
373 [datetime(1998, 12, 28, 9, 0),
374 datetime(2004, 12, 27, 9, 0),
375 datetime(2009, 12, 28, 9, 0)])
376
377 def testYearlyByWeekNoAndWeekDay53(self):
378 self.assertEqual(list(rrule(FREQ_YEARLY,
379 count=3,
380 byweekno=53,
381 byweekday=MO,
382 dtstart=parse("19970902T090000"))),
383 [datetime(1998, 12, 28, 9, 0),
384 datetime(2004, 12, 27, 9, 0),
385 datetime(2009, 12, 28, 9, 0)])
386
387 def testYearlyByHour(self):
388 self.assertEqual(list(rrule(FREQ_YEARLY,
389 count=3,
390 byhour=(6,18),
391 dtstart=parse("19970902T090000"))),
392 [datetime(1997, 9, 2, 18, 0),
393 datetime(1998, 9, 2, 6, 0),
394 datetime(1998, 9, 2, 18, 0)])
395
396 def testYearlyByMinute(self):
397 self.assertEqual(list(rrule(FREQ_YEARLY,
398 count=3,
399 byminute=(6,18),
400 dtstart=parse("19970902T090000"))),
401 [datetime(1997, 9, 2, 9, 6),
402 datetime(1997, 9, 2, 9, 18),
403 datetime(1998, 9, 2, 9, 6)])
404
405 def testYearlyBySecond(self):
406 self.assertEqual(list(rrule(FREQ_YEARLY,
407 count=3,
408 bysecond=(6,18),
409 dtstart=parse("19970902T090000"))),
410 [datetime(1997, 9, 2, 9, 0, 6),
411 datetime(1997, 9, 2, 9, 0, 18),
412 datetime(1998, 9, 2, 9, 0, 6)])
413
414 def testYearlyByHourAndMinute(self):
415 self.assertEqual(list(rrule(FREQ_YEARLY,
416 count=3,
417 byhour=(6,18),
418 byminute=(6,18),
419 dtstart=parse("19970902T090000"))),
420 [datetime(1997, 9, 2, 18, 6),
421 datetime(1997, 9, 2, 18, 18),
422 datetime(1998, 9, 2, 6, 6)])
423
424 def testYearlyByHourAndSecond(self):
425 self.assertEqual(list(rrule(FREQ_YEARLY,
426 count=3,
427 byhour=(6,18),
428 bysecond=(6,18),
429 dtstart=parse("19970902T090000"))),
430 [datetime(1997, 9, 2, 18, 0, 6),
431 datetime(1997, 9, 2, 18, 0, 18),
432 datetime(1998, 9, 2, 6, 0, 6)])
433
434 def testYearlyByMinuteAndSecond(self):
435 self.assertEqual(list(rrule(FREQ_YEARLY,
436 count=3,
437 byminute=(6,18),
438 bysecond=(6,18),
439 dtstart=parse("19970902T090000"))),
440 [datetime(1997, 9, 2, 9, 6, 6),
441 datetime(1997, 9, 2, 9, 6, 18),
442 datetime(1997, 9, 2, 9, 18, 6)])
443
444 def testYearlyByHourAndMinuteAndSecond(self):
445 self.assertEqual(list(rrule(FREQ_YEARLY,
446 count=3,
447 byhour=(6,18),
448 byminute=(6,18),
449 bysecond=(6,18),
450 dtstart=parse("19970902T090000"))),
451 [datetime(1997, 9, 2, 18, 6, 6),
452 datetime(1997, 9, 2, 18, 6, 18),
453 datetime(1997, 9, 2, 18, 18, 6)])
454
455 def testYearlyBySetPos(self):
456 self.assertEqual(list(rrule(FREQ_YEARLY,
457 count=3,
458 bymonthday=15,
459 byhour=(6,18),
460 bysetpos=(3,-3),
461 dtstart=parse("19970902T090000"))),
462 [datetime(1997, 11, 15, 18, 0),
463 datetime(1998, 2, 15, 6, 0),
464 datetime(1998, 11, 15, 18, 0)])
465
niemeyercb08a352003-10-08 06:02:06 +0000466 def testMonthly(self):
467 self.assertEqual(list(rrule(FREQ_MONTHLY,
468 count=3,
469 dtstart=parse("19970902T090000"))),
470 [datetime(1997, 9, 2, 9, 0),
471 datetime(1997, 10, 2, 9, 0),
472 datetime(1997, 11, 2, 9, 0)])
473
niemeyercb08a352003-10-08 06:02:06 +0000474 def testMonthlyInterval(self):
475 self.assertEqual(list(rrule(FREQ_MONTHLY,
476 count=3,
477 interval=2,
478 dtstart=parse("19970902T090000"))),
479 [datetime(1997, 9, 2, 9, 0),
480 datetime(1997, 11, 2, 9, 0),
481 datetime(1998, 1, 2, 9, 0)])
482
483 def testMonthlyIntervalLarge(self):
484 self.assertEqual(list(rrule(FREQ_MONTHLY,
485 count=3,
486 interval=18,
487 dtstart=parse("19970902T090000"))),
488 [datetime(1997, 9, 2, 9, 0),
489 datetime(1999, 3, 2, 9, 0),
490 datetime(2000, 9, 2, 9, 0)])
491
492 def testMonthlyByMonth(self):
493 self.assertEqual(list(rrule(FREQ_MONTHLY,
494 count=3,
495 bymonth=(1,3),
496 dtstart=parse("19970902T090000"))),
497 [datetime(1998, 1, 2, 9, 0),
498 datetime(1998, 3, 2, 9, 0),
499 datetime(1999, 1, 2, 9, 0)])
500
501
502 def testMonthlyByMonthDay(self):
503 self.assertEqual(list(rrule(FREQ_MONTHLY,
504 count=3,
505 bymonthday=(1,3),
506 dtstart=parse("19970902T090000"))),
507 [datetime(1997, 9, 3, 9, 0),
508 datetime(1997, 10, 1, 9, 0),
509 datetime(1997, 10, 3, 9, 0)])
510
511 def testMonthlyByMonthAndMonthDay(self):
512 self.assertEqual(list(rrule(FREQ_MONTHLY,
513 count=3,
514 bymonth=(1,3),
515 bymonthday=(5,7),
516 dtstart=parse("19970902T090000"))),
517 [datetime(1998, 1, 5, 9, 0),
518 datetime(1998, 1, 7, 9, 0),
519 datetime(1998, 3, 5, 9, 0)])
520
521 def testMonthlyByWeekDay(self):
522 self.assertEqual(list(rrule(FREQ_MONTHLY,
523 count=3,
524 byweekday=(TU,TH),
525 dtstart=parse("19970902T090000"))),
526 [datetime(1997, 9, 2, 9, 0),
527 datetime(1997, 9, 4, 9, 0),
528 datetime(1997, 9, 9, 9, 0)])
529
niemeyer7d8be1a2003-10-09 01:09:42 +0000530 def testMonthlyByNWeekDay(self):
531 self.assertEqual(list(rrule(FREQ_MONTHLY,
532 count=3,
533 byweekday=(TU(1),TH(-1)),
534 dtstart=parse("19970902T090000"))),
535 [datetime(1997, 9, 2, 9, 0),
536 datetime(1997, 9, 25, 9, 0),
537 datetime(1997, 10, 7, 9, 0)])
538
539 def testMonthlyByNWeekDayLarge(self):
540 self.assertEqual(list(rrule(FREQ_MONTHLY,
541 count=3,
542 byweekday=(TU(3),TH(-3)),
543 dtstart=parse("19970902T090000"))),
544 [datetime(1997, 9, 11, 9, 0),
545 datetime(1997, 9, 16, 9, 0),
546 datetime(1997, 10, 16, 9, 0)])
547
niemeyercb08a352003-10-08 06:02:06 +0000548 def testMonthlyByMonthAndWeekDay(self):
549 self.assertEqual(list(rrule(FREQ_MONTHLY,
550 count=3,
551 bymonth=(1,3),
552 byweekday=(TU,TH),
553 dtstart=parse("19970902T090000"))),
554 [datetime(1998, 1, 1, 9, 0),
555 datetime(1998, 1, 6, 9, 0),
556 datetime(1998, 1, 8, 9, 0)])
557
niemeyer7d8be1a2003-10-09 01:09:42 +0000558 def testMonthlyByMonthAndNWeekDay(self):
559 self.assertEqual(list(rrule(FREQ_MONTHLY,
560 count=3,
561 bymonth=(1,3),
562 byweekday=(TU(1),TH(-1)),
563 dtstart=parse("19970902T090000"))),
564 [datetime(1998, 1, 6, 9, 0),
565 datetime(1998, 1, 29, 9, 0),
566 datetime(1998, 3, 3, 9, 0)])
567
568 def testMonthlyByMonthAndNWeekDayLarge(self):
569 self.assertEqual(list(rrule(FREQ_MONTHLY,
570 count=3,
571 bymonth=(1,3),
572 byweekday=(TU(3),TH(-3)),
573 dtstart=parse("19970902T090000"))),
574 [datetime(1998, 1, 15, 9, 0),
575 datetime(1998, 1, 20, 9, 0),
576 datetime(1998, 3, 12, 9, 0)])
577
578 def testMonthlyByMonthDayAndWeekDay(self):
579 self.assertEqual(list(rrule(FREQ_MONTHLY,
580 count=3,
581 bymonthday=(1,3),
582 byweekday=(TU,TH),
583 dtstart=parse("19970902T090000"))),
584 [datetime(1998, 1, 1, 9, 0),
585 datetime(1998, 2, 3, 9, 0),
586 datetime(1998, 3, 3, 9, 0)])
587
588 def testMonthlyByMonthAndMonthDayAndWeekDay(self):
589 self.assertEqual(list(rrule(FREQ_MONTHLY,
590 count=3,
591 bymonth=(1,3),
592 bymonthday=(1,3),
593 byweekday=(TU,TH),
594 dtstart=parse("19970902T090000"))),
595 [datetime(1998, 1, 1, 9, 0),
596 datetime(1998, 3, 3, 9, 0),
597 datetime(2001, 3, 1, 9, 0)])
598
599 def testMonthlyByYearDay(self):
600 self.assertEqual(list(rrule(FREQ_MONTHLY,
601 count=3,
602 byyearday=(1,100,200),
603 dtstart=parse("19970902T090000"))),
604 [datetime(1998, 1, 1, 9, 0),
605 datetime(1998, 4, 10, 9, 0),
606 datetime(1998, 7, 19, 9, 0)])
607
608 def testMonthlyByMonthAndYearDay(self):
609 self.assertEqual(list(rrule(FREQ_MONTHLY,
610 count=3,
611 bymonth=(4,7),
612 byyearday=(1,100,200),
613 dtstart=parse("19970902T090000"))),
614 [datetime(1998, 4, 10, 9, 0),
615 datetime(1998, 7, 19, 9, 0),
616 datetime(1999, 4, 10, 9, 0)])
617
618 def testMonthlyByWeekNo(self):
619 self.assertEqual(list(rrule(FREQ_MONTHLY,
620 count=3,
621 byweekno=20,
622 dtstart=parse("19970902T090000"))),
623 [datetime(1998, 5, 11, 9, 0),
624 datetime(1998, 5, 12, 9, 0),
625 datetime(1998, 5, 13, 9, 0)])
626
627 def testMonthlyByWeekNoAndWeekDay(self):
628 # That's a nice one. The first days of week number one
629 # may be in the last year.
630 self.assertEqual(list(rrule(FREQ_MONTHLY,
631 count=3,
632 byweekno=1,
633 byweekday=MO,
634 dtstart=parse("19970902T090000"))),
635 [datetime(1997, 12, 29, 9, 0),
636 datetime(1999, 1, 4, 9, 0),
637 datetime(2000, 1, 3, 9, 0)])
638
639 def testMonthlyByWeekNoAndWeekDayLarge(self):
640 # Another nice test. The last days of week number 52/53
641 # may be in the next year.
642 self.assertEqual(list(rrule(FREQ_MONTHLY,
643 count=3,
644 byweekno=52,
645 byweekday=SU,
646 dtstart=parse("19970902T090000"))),
647 [datetime(1997, 12, 28, 9, 0),
648 datetime(1998, 12, 27, 9, 0),
649 datetime(2000, 1, 2, 9, 0)])
650
651 def testMonthlyByWeekNoAndWeekDayLast(self):
652 self.assertEqual(list(rrule(FREQ_MONTHLY,
653 count=3,
654 byweekno=-1,
655 byweekday=SU,
656 dtstart=parse("19970902T090000"))),
657 [datetime(1997, 12, 28, 9, 0),
658 datetime(1999, 1, 3, 9, 0),
659 datetime(2000, 1, 2, 9, 0)])
660
661 def testMonthlyByWeekNoAndWeekDay53(self):
662 self.assertEqual(list(rrule(FREQ_MONTHLY,
663 count=3,
664 byweekno=53,
665 byweekday=MO,
666 dtstart=parse("19970902T090000"))),
667 [datetime(1998, 12, 28, 9, 0),
668 datetime(2004, 12, 27, 9, 0),
669 datetime(2009, 12, 28, 9, 0)])
670
671 def testMonthlyByEaster(self):
672 self.assertEqual(list(rrule(FREQ_MONTHLY,
673 count=3,
674 byeaster=0,
675 dtstart=parse("19970902T090000"))),
676 [datetime(1998, 4, 12, 9, 0),
677 datetime(1999, 4, 4, 9, 0),
678 datetime(2000, 4, 23, 9, 0)])
679
680 def testMonthlyByEasterPos(self):
681 self.assertEqual(list(rrule(FREQ_MONTHLY,
682 count=3,
683 byeaster=1,
684 dtstart=parse("19970902T090000"))),
685 [datetime(1998, 4, 13, 9, 0),
686 datetime(1999, 4, 5, 9, 0),
687 datetime(2000, 4, 24, 9, 0)])
688
689 def testMonthlyByEasterNeg(self):
690 self.assertEqual(list(rrule(FREQ_MONTHLY,
691 count=3,
692 byeaster=-1,
693 dtstart=parse("19970902T090000"))),
694 [datetime(1998, 4, 11, 9, 0),
695 datetime(1999, 4, 3, 9, 0),
696 datetime(2000, 4, 22, 9, 0)])
697
698 def testMonthlyByHour(self):
699 self.assertEqual(list(rrule(FREQ_MONTHLY,
700 count=3,
701 byhour=(6,18),
702 dtstart=parse("19970902T090000"))),
703 [datetime(1997, 9, 2, 18, 0),
704 datetime(1997, 10, 2, 6, 0),
705 datetime(1997, 10, 2, 18, 0)])
706
707 def testMonthlyByMinute(self):
708 self.assertEqual(list(rrule(FREQ_MONTHLY,
709 count=3,
710 byminute=(6,18),
711 dtstart=parse("19970902T090000"))),
712 [datetime(1997, 9, 2, 9, 6),
713 datetime(1997, 9, 2, 9, 18),
714 datetime(1997, 10, 2, 9, 6)])
715
716 def testMonthlyBySecond(self):
717 self.assertEqual(list(rrule(FREQ_MONTHLY,
718 count=3,
719 bysecond=(6,18),
720 dtstart=parse("19970902T090000"))),
721 [datetime(1997, 9, 2, 9, 0, 6),
722 datetime(1997, 9, 2, 9, 0, 18),
723 datetime(1997, 10, 2, 9, 0, 6)])
724
725 def testMonthlyByHourAndMinute(self):
726 self.assertEqual(list(rrule(FREQ_MONTHLY,
727 count=3,
728 byhour=(6,18),
729 byminute=(6,18),
730 dtstart=parse("19970902T090000"))),
731 [datetime(1997, 9, 2, 18, 6),
732 datetime(1997, 9, 2, 18, 18),
733 datetime(1997, 10, 2, 6, 6)])
734
735 def testMonthlyByHourAndSecond(self):
736 self.assertEqual(list(rrule(FREQ_MONTHLY,
737 count=3,
738 byhour=(6,18),
739 bysecond=(6,18),
740 dtstart=parse("19970902T090000"))),
741 [datetime(1997, 9, 2, 18, 0, 6),
742 datetime(1997, 9, 2, 18, 0, 18),
743 datetime(1997, 10, 2, 6, 0, 6)])
744
745 def testMonthlyByMinuteAndSecond(self):
746 self.assertEqual(list(rrule(FREQ_MONTHLY,
747 count=3,
748 byminute=(6,18),
749 bysecond=(6,18),
750 dtstart=parse("19970902T090000"))),
751 [datetime(1997, 9, 2, 9, 6, 6),
752 datetime(1997, 9, 2, 9, 6, 18),
753 datetime(1997, 9, 2, 9, 18, 6)])
754
755 def testMonthlyByHourAndMinuteAndSecond(self):
756 self.assertEqual(list(rrule(FREQ_MONTHLY,
757 count=3,
758 byhour=(6,18),
759 byminute=(6,18),
760 bysecond=(6,18),
761 dtstart=parse("19970902T090000"))),
762 [datetime(1997, 9, 2, 18, 6, 6),
763 datetime(1997, 9, 2, 18, 6, 18),
764 datetime(1997, 9, 2, 18, 18, 6)])
765
766 def testMonthlyBySetPos(self):
767 self.assertEqual(list(rrule(FREQ_MONTHLY,
768 count=3,
769 bymonthday=(13,17),
770 byhour=(6,18),
771 bysetpos=(3,-3),
772 dtstart=parse("19970902T090000"))),
773 [datetime(1997, 9, 13, 18, 0),
774 datetime(1997, 9, 17, 6, 0),
775 datetime(1997, 10, 13, 18, 0)])
776
niemeyercb08a352003-10-08 06:02:06 +0000777 def testWeekly(self):
778 self.assertEqual(list(rrule(FREQ_WEEKLY,
779 count=3,
780 dtstart=parse("19970902T090000"))),
781 [datetime(1997, 9, 2, 9, 0),
782 datetime(1997, 9, 9, 9, 0),
783 datetime(1997, 9, 16, 9, 0)])
784
niemeyercb08a352003-10-08 06:02:06 +0000785 def testWeeklyInterval(self):
786 self.assertEqual(list(rrule(FREQ_WEEKLY,
787 count=3,
788 interval=2,
789 dtstart=parse("19970902T090000"))),
790 [datetime(1997, 9, 2, 9, 0),
791 datetime(1997, 9, 16, 9, 0),
792 datetime(1997, 9, 30, 9, 0)])
793
794 def testWeeklyIntervalLarge(self):
795 self.assertEqual(list(rrule(FREQ_WEEKLY,
796 count=3,
797 interval=20,
798 dtstart=parse("19970902T090000"))),
799 [datetime(1997, 9, 2, 9, 0),
800 datetime(1998, 1, 20, 9, 0),
801 datetime(1998, 6, 9, 9, 0)])
802
803 def testWeeklyByMonth(self):
804 self.assertEqual(list(rrule(FREQ_WEEKLY,
805 count=3,
806 bymonth=(1,3),
807 dtstart=parse("19970902T090000"))),
808 [datetime(1998, 1, 6, 9, 0),
809 datetime(1998, 1, 13, 9, 0),
810 datetime(1998, 1, 20, 9, 0)])
811
812 def testWeeklyByMonthDay(self):
813 self.assertEqual(list(rrule(FREQ_WEEKLY,
814 count=3,
815 bymonthday=(1,3),
816 dtstart=parse("19970902T090000"))),
817 [datetime(1997, 9, 3, 9, 0),
818 datetime(1997, 10, 1, 9, 0),
819 datetime(1997, 10, 3, 9, 0)])
820
821 def testWeeklyByMonthAndMonthDay(self):
822 self.assertEqual(list(rrule(FREQ_WEEKLY,
823 count=3,
824 bymonth=(1,3),
825 bymonthday=(5,7),
826 dtstart=parse("19970902T090000"))),
827 [datetime(1998, 1, 5, 9, 0),
828 datetime(1998, 1, 7, 9, 0),
829 datetime(1998, 3, 5, 9, 0)])
830
831 def testWeeklyByWeekDay(self):
832 self.assertEqual(list(rrule(FREQ_WEEKLY,
833 count=3,
834 byweekday=(TU,TH),
835 dtstart=parse("19970902T090000"))),
836 [datetime(1997, 9, 2, 9, 0),
837 datetime(1997, 9, 4, 9, 0),
838 datetime(1997, 9, 9, 9, 0)])
839
niemeyer7d8be1a2003-10-09 01:09:42 +0000840 def testWeeklyByNWeekDay(self):
841 self.assertEqual(list(rrule(FREQ_WEEKLY,
842 count=3,
843 byweekday=(TU(1),TH(-1)),
844 dtstart=parse("19970902T090000"))),
845 [datetime(1997, 9, 2, 9, 0),
846 datetime(1997, 9, 4, 9, 0),
847 datetime(1997, 9, 9, 9, 0)])
848
niemeyercb08a352003-10-08 06:02:06 +0000849 def testWeeklyByMonthAndWeekDay(self):
850 # This test is interesting, because it crosses the year
851 # boundary in a weekly period to find day '1' as a
852 # valid recurrence.
853 self.assertEqual(list(rrule(FREQ_WEEKLY,
854 count=3,
855 bymonth=(1,3),
856 byweekday=(TU,TH),
857 dtstart=parse("19970902T090000"))),
858 [datetime(1998, 1, 1, 9, 0),
859 datetime(1998, 1, 6, 9, 0),
860 datetime(1998, 1, 8, 9, 0)])
861
niemeyer7d8be1a2003-10-09 01:09:42 +0000862 def testWeeklyByMonthAndNWeekDay(self):
863 self.assertEqual(list(rrule(FREQ_WEEKLY,
864 count=3,
865 bymonth=(1,3),
866 byweekday=(TU(1),TH(-1)),
867 dtstart=parse("19970902T090000"))),
868 [datetime(1998, 1, 1, 9, 0),
869 datetime(1998, 1, 6, 9, 0),
870 datetime(1998, 1, 8, 9, 0)])
871
872 def testWeeklyByMonthDayAndWeekDay(self):
873 self.assertEqual(list(rrule(FREQ_WEEKLY,
874 count=3,
875 bymonthday=(1,3),
876 byweekday=(TU,TH),
877 dtstart=parse("19970902T090000"))),
878 [datetime(1998, 1, 1, 9, 0),
879 datetime(1998, 2, 3, 9, 0),
880 datetime(1998, 3, 3, 9, 0)])
881
882 def testWeeklyByMonthAndMonthDayAndWeekDay(self):
883 self.assertEqual(list(rrule(FREQ_WEEKLY,
884 count=3,
885 bymonth=(1,3),
886 bymonthday=(1,3),
887 byweekday=(TU,TH),
888 dtstart=parse("19970902T090000"))),
889 [datetime(1998, 1, 1, 9, 0),
890 datetime(1998, 3, 3, 9, 0),
891 datetime(2001, 3, 1, 9, 0)])
892
893 def testWeeklyByYearDay(self):
894 self.assertEqual(list(rrule(FREQ_WEEKLY,
895 count=3,
896 byyearday=(1,100,200),
897 dtstart=parse("19970902T090000"))),
898 [datetime(1998, 1, 1, 9, 0),
899 datetime(1998, 4, 10, 9, 0),
900 datetime(1998, 7, 19, 9, 0)])
901
902 def testWeeklyByMonthAndYearDay(self):
903 self.assertEqual(list(rrule(FREQ_WEEKLY,
904 count=3,
905 bymonth=(1,7),
906 byyearday=(1,100,200),
907 dtstart=parse("19970902T090000"))),
908 [datetime(1998, 1, 1, 9, 0),
909 datetime(1998, 7, 19, 9, 0),
910 datetime(1999, 1, 1, 9, 0)])
911
912 def testWeeklyByWeekNo(self):
913 self.assertEqual(list(rrule(FREQ_WEEKLY,
914 count=3,
915 byweekno=20,
916 dtstart=parse("19970902T090000"))),
917 [datetime(1998, 5, 11, 9, 0),
918 datetime(1998, 5, 12, 9, 0),
919 datetime(1998, 5, 13, 9, 0)])
920
921 def testWeeklyByWeekNoAndWeekDay(self):
922 # That's a nice one. The first days of week number one
923 # may be in the last year.
924 self.assertEqual(list(rrule(FREQ_WEEKLY,
925 count=3,
926 byweekno=1,
927 byweekday=MO,
928 dtstart=parse("19970902T090000"))),
929 [datetime(1997, 12, 29, 9, 0),
930 datetime(1999, 1, 4, 9, 0),
931 datetime(2000, 1, 3, 9, 0)])
932
933 def testWeeklyByWeekNoAndWeekDayLarge(self):
934 # Another nice test. The last days of week number 52/53
935 # may be in the next year.
936 self.assertEqual(list(rrule(FREQ_WEEKLY,
937 count=3,
938 byweekno=52,
939 byweekday=SU,
940 dtstart=parse("19970902T090000"))),
941 [datetime(1997, 12, 28, 9, 0),
942 datetime(1998, 12, 27, 9, 0),
943 datetime(2000, 1, 2, 9, 0)])
944
945 def testWeeklyByWeekNoAndWeekDayLast(self):
946 self.assertEqual(list(rrule(FREQ_WEEKLY,
947 count=3,
948 byweekno=-1,
949 byweekday=SU,
950 dtstart=parse("19970902T090000"))),
951 [datetime(1997, 12, 28, 9, 0),
952 datetime(1999, 1, 3, 9, 0),
953 datetime(2000, 1, 2, 9, 0)])
954
955 def testWeeklyByWeekNoAndWeekDay53(self):
956 self.assertEqual(list(rrule(FREQ_WEEKLY,
957 count=3,
958 byweekno=53,
959 byweekday=MO,
960 dtstart=parse("19970902T090000"))),
961 [datetime(1998, 12, 28, 9, 0),
962 datetime(2004, 12, 27, 9, 0),
963 datetime(2009, 12, 28, 9, 0)])
964
965 def testWeeklyByEaster(self):
966 self.assertEqual(list(rrule(FREQ_WEEKLY,
967 count=3,
968 byeaster=0,
969 dtstart=parse("19970902T090000"))),
970 [datetime(1998, 4, 12, 9, 0),
971 datetime(1999, 4, 4, 9, 0),
972 datetime(2000, 4, 23, 9, 0)])
973
974 def testWeeklyByEasterPos(self):
975 self.assertEqual(list(rrule(FREQ_WEEKLY,
976 count=3,
977 byeaster=1,
978 dtstart=parse("19970902T090000"))),
979 [datetime(1998, 4, 13, 9, 0),
980 datetime(1999, 4, 5, 9, 0),
981 datetime(2000, 4, 24, 9, 0)])
982
983 def testWeeklyByEasterNeg(self):
984 self.assertEqual(list(rrule(FREQ_WEEKLY,
985 count=3,
986 byeaster=-1,
987 dtstart=parse("19970902T090000"))),
988 [datetime(1998, 4, 11, 9, 0),
989 datetime(1999, 4, 3, 9, 0),
990 datetime(2000, 4, 22, 9, 0)])
991
992 def testWeeklyByHour(self):
993 self.assertEqual(list(rrule(FREQ_WEEKLY,
994 count=3,
995 byhour=(6,18),
996 dtstart=parse("19970902T090000"))),
997 [datetime(1997, 9, 2, 18, 0),
998 datetime(1997, 9, 9, 6, 0),
999 datetime(1997, 9, 9, 18, 0)])
1000
1001 def testWeeklyByMinute(self):
1002 self.assertEqual(list(rrule(FREQ_WEEKLY,
1003 count=3,
1004 byminute=(6,18),
1005 dtstart=parse("19970902T090000"))),
1006 [datetime(1997, 9, 2, 9, 6),
1007 datetime(1997, 9, 2, 9, 18),
1008 datetime(1997, 9, 9, 9, 6)])
1009
1010 def testWeeklyBySecond(self):
1011 self.assertEqual(list(rrule(FREQ_WEEKLY,
1012 count=3,
1013 bysecond=(6,18),
1014 dtstart=parse("19970902T090000"))),
1015 [datetime(1997, 9, 2, 9, 0, 6),
1016 datetime(1997, 9, 2, 9, 0, 18),
1017 datetime(1997, 9, 9, 9, 0, 6)])
1018
1019 def testWeeklyByHourAndMinute(self):
1020 self.assertEqual(list(rrule(FREQ_WEEKLY,
1021 count=3,
1022 byhour=(6,18),
1023 byminute=(6,18),
1024 dtstart=parse("19970902T090000"))),
1025 [datetime(1997, 9, 2, 18, 6),
1026 datetime(1997, 9, 2, 18, 18),
1027 datetime(1997, 9, 9, 6, 6)])
1028
1029 def testWeeklyByHourAndSecond(self):
1030 self.assertEqual(list(rrule(FREQ_WEEKLY,
1031 count=3,
1032 byhour=(6,18),
1033 bysecond=(6,18),
1034 dtstart=parse("19970902T090000"))),
1035 [datetime(1997, 9, 2, 18, 0, 6),
1036 datetime(1997, 9, 2, 18, 0, 18),
1037 datetime(1997, 9, 9, 6, 0, 6)])
1038
1039 def testWeeklyByMinuteAndSecond(self):
1040 self.assertEqual(list(rrule(FREQ_WEEKLY,
1041 count=3,
1042 byminute=(6,18),
1043 bysecond=(6,18),
1044 dtstart=parse("19970902T090000"))),
1045 [datetime(1997, 9, 2, 9, 6, 6),
1046 datetime(1997, 9, 2, 9, 6, 18),
1047 datetime(1997, 9, 2, 9, 18, 6)])
1048
1049 def testWeeklyByHourAndMinuteAndSecond(self):
1050 self.assertEqual(list(rrule(FREQ_WEEKLY,
1051 count=3,
1052 byhour=(6,18),
1053 byminute=(6,18),
1054 bysecond=(6,18),
1055 dtstart=parse("19970902T090000"))),
1056 [datetime(1997, 9, 2, 18, 6, 6),
1057 datetime(1997, 9, 2, 18, 6, 18),
1058 datetime(1997, 9, 2, 18, 18, 6)])
1059
1060 def testWeeklyBySetPos(self):
1061 self.assertEqual(list(rrule(FREQ_WEEKLY,
1062 count=3,
1063 byweekday=(TU,TH),
1064 byhour=(6,18),
1065 bysetpos=(3,-3),
1066 dtstart=parse("19970902T090000"))),
1067 [datetime(1997, 9, 2, 18, 0),
1068 datetime(1997, 9, 4, 6, 0),
1069 datetime(1997, 9, 9, 18, 0)])
1070
niemeyercb08a352003-10-08 06:02:06 +00001071 def testDaily(self):
1072 self.assertEqual(list(rrule(FREQ_DAILY,
1073 count=3,
1074 dtstart=parse("19970902T090000"))),
1075 [datetime(1997, 9, 2, 9, 0),
1076 datetime(1997, 9, 3, 9, 0),
1077 datetime(1997, 9, 4, 9, 0)])
1078
niemeyercb08a352003-10-08 06:02:06 +00001079 def testDailyInterval(self):
1080 self.assertEqual(list(rrule(FREQ_DAILY,
1081 count=3,
1082 interval=2,
1083 dtstart=parse("19970902T090000"))),
1084 [datetime(1997, 9, 2, 9, 0),
1085 datetime(1997, 9, 4, 9, 0),
1086 datetime(1997, 9, 6, 9, 0)])
1087
1088 def testDailyIntervalLarge(self):
1089 self.assertEqual(list(rrule(FREQ_DAILY,
1090 count=3,
1091 interval=92,
1092 dtstart=parse("19970902T090000"))),
1093 [datetime(1997, 9, 2, 9, 0),
1094 datetime(1997, 12, 3, 9, 0),
1095 datetime(1998, 3, 5, 9, 0)])
1096
1097 def testDailyByMonth(self):
1098 self.assertEqual(list(rrule(FREQ_DAILY,
1099 count=3,
1100 bymonth=(1,3),
1101 dtstart=parse("19970902T090000"))),
1102 [datetime(1998, 1, 1, 9, 0),
1103 datetime(1998, 1, 2, 9, 0),
1104 datetime(1998, 1, 3, 9, 0)])
1105
1106 def testDailyByMonthDay(self):
1107 self.assertEqual(list(rrule(FREQ_DAILY,
1108 count=3,
1109 bymonthday=(1,3),
1110 dtstart=parse("19970902T090000"))),
1111 [datetime(1997, 9, 3, 9, 0),
1112 datetime(1997, 10, 1, 9, 0),
1113 datetime(1997, 10, 3, 9, 0)])
1114
1115 def testDailyByMonthAndMonthDay(self):
1116 self.assertEqual(list(rrule(FREQ_DAILY,
1117 count=3,
1118 bymonth=(1,3),
1119 bymonthday=(5,7),
1120 dtstart=parse("19970902T090000"))),
1121 [datetime(1998, 1, 5, 9, 0),
1122 datetime(1998, 1, 7, 9, 0),
1123 datetime(1998, 3, 5, 9, 0)])
1124
1125 def testDailyByWeekDay(self):
1126 self.assertEqual(list(rrule(FREQ_DAILY,
1127 count=3,
1128 byweekday=(TU,TH),
1129 dtstart=parse("19970902T090000"))),
1130 [datetime(1997, 9, 2, 9, 0),
1131 datetime(1997, 9, 4, 9, 0),
1132 datetime(1997, 9, 9, 9, 0)])
1133
niemeyer7d8be1a2003-10-09 01:09:42 +00001134 def testDailyByNWeekDay(self):
1135 self.assertEqual(list(rrule(FREQ_DAILY,
1136 count=3,
1137 byweekday=(TU(1),TH(-1)),
1138 dtstart=parse("19970902T090000"))),
1139 [datetime(1997, 9, 2, 9, 0),
1140 datetime(1997, 9, 4, 9, 0),
1141 datetime(1997, 9, 9, 9, 0)])
1142
niemeyercb08a352003-10-08 06:02:06 +00001143 def testDailyByMonthAndWeekDay(self):
1144 self.assertEqual(list(rrule(FREQ_DAILY,
1145 count=3,
1146 bymonth=(1,3),
1147 byweekday=(TU,TH),
1148 dtstart=parse("19970902T090000"))),
1149 [datetime(1998, 1, 1, 9, 0),
1150 datetime(1998, 1, 6, 9, 0),
1151 datetime(1998, 1, 8, 9, 0)])
1152
niemeyer7d8be1a2003-10-09 01:09:42 +00001153 def testDailyByMonthAndNWeekDay(self):
1154 self.assertEqual(list(rrule(FREQ_DAILY,
1155 count=3,
1156 bymonth=(1,3),
1157 byweekday=(TU(1),TH(-1)),
1158 dtstart=parse("19970902T090000"))),
1159 [datetime(1998, 1, 1, 9, 0),
1160 datetime(1998, 1, 6, 9, 0),
1161 datetime(1998, 1, 8, 9, 0)])
1162
1163 def testDailyByMonthDayAndWeekDay(self):
1164 self.assertEqual(list(rrule(FREQ_DAILY,
1165 count=3,
1166 bymonthday=(1,3),
1167 byweekday=(TU,TH),
1168 dtstart=parse("19970902T090000"))),
1169 [datetime(1998, 1, 1, 9, 0),
1170 datetime(1998, 2, 3, 9, 0),
1171 datetime(1998, 3, 3, 9, 0)])
1172
1173 def testDailyByMonthAndMonthDayAndWeekDay(self):
1174 self.assertEqual(list(rrule(FREQ_DAILY,
1175 count=3,
1176 bymonth=(1,3),
1177 bymonthday=(1,3),
1178 byweekday=(TU,TH),
1179 dtstart=parse("19970902T090000"))),
1180 [datetime(1998, 1, 1, 9, 0),
1181 datetime(1998, 3, 3, 9, 0),
1182 datetime(2001, 3, 1, 9, 0)])
1183
1184 def testDailyByYearDay(self):
1185 self.assertEqual(list(rrule(FREQ_DAILY,
1186 count=3,
1187 byyearday=(1,100,200),
1188 dtstart=parse("19970902T090000"))),
1189 [datetime(1998, 1, 1, 9, 0),
1190 datetime(1998, 4, 10, 9, 0),
1191 datetime(1998, 7, 19, 9, 0)])
1192
1193 def testDailyByMonthAndYearDay(self):
1194 self.assertEqual(list(rrule(FREQ_DAILY,
1195 count=3,
1196 bymonth=(1,7),
1197 byyearday=(1,100,200),
1198 dtstart=parse("19970902T090000"))),
1199 [datetime(1998, 1, 1, 9, 0),
1200 datetime(1998, 7, 19, 9, 0),
1201 datetime(1999, 1, 1, 9, 0)])
1202
1203 def testDailyByWeekNo(self):
1204 self.assertEqual(list(rrule(FREQ_DAILY,
1205 count=3,
1206 byweekno=20,
1207 dtstart=parse("19970902T090000"))),
1208 [datetime(1998, 5, 11, 9, 0),
1209 datetime(1998, 5, 12, 9, 0),
1210 datetime(1998, 5, 13, 9, 0)])
1211
1212 def testDailyByWeekNoAndWeekDay(self):
1213 # That's a nice one. The first days of week number one
1214 # may be in the last year.
1215 self.assertEqual(list(rrule(FREQ_DAILY,
1216 count=3,
1217 byweekno=1,
1218 byweekday=MO,
1219 dtstart=parse("19970902T090000"))),
1220 [datetime(1997, 12, 29, 9, 0),
1221 datetime(1999, 1, 4, 9, 0),
1222 datetime(2000, 1, 3, 9, 0)])
1223
1224 def testDailyByWeekNoAndWeekDayLarge(self):
1225 # Another nice test. The last days of week number 52/53
1226 # may be in the next year.
1227 self.assertEqual(list(rrule(FREQ_DAILY,
1228 count=3,
1229 byweekno=52,
1230 byweekday=SU,
1231 dtstart=parse("19970902T090000"))),
1232 [datetime(1997, 12, 28, 9, 0),
1233 datetime(1998, 12, 27, 9, 0),
1234 datetime(2000, 1, 2, 9, 0)])
1235
1236 def testDailyByWeekNoAndWeekDayLast(self):
1237 self.assertEqual(list(rrule(FREQ_DAILY,
1238 count=3,
1239 byweekno=-1,
1240 byweekday=SU,
1241 dtstart=parse("19970902T090000"))),
1242 [datetime(1997, 12, 28, 9, 0),
1243 datetime(1999, 1, 3, 9, 0),
1244 datetime(2000, 1, 2, 9, 0)])
1245
1246 def testDailyByWeekNoAndWeekDay53(self):
1247 self.assertEqual(list(rrule(FREQ_DAILY,
1248 count=3,
1249 byweekno=53,
1250 byweekday=MO,
1251 dtstart=parse("19970902T090000"))),
1252 [datetime(1998, 12, 28, 9, 0),
1253 datetime(2004, 12, 27, 9, 0),
1254 datetime(2009, 12, 28, 9, 0)])
1255
1256 def testDailyByEaster(self):
1257 self.assertEqual(list(rrule(FREQ_DAILY,
1258 count=3,
1259 byeaster=0,
1260 dtstart=parse("19970902T090000"))),
1261 [datetime(1998, 4, 12, 9, 0),
1262 datetime(1999, 4, 4, 9, 0),
1263 datetime(2000, 4, 23, 9, 0)])
1264
1265 def testDailyByEasterPos(self):
1266 self.assertEqual(list(rrule(FREQ_DAILY,
1267 count=3,
1268 byeaster=1,
1269 dtstart=parse("19970902T090000"))),
1270 [datetime(1998, 4, 13, 9, 0),
1271 datetime(1999, 4, 5, 9, 0),
1272 datetime(2000, 4, 24, 9, 0)])
1273
1274 def testDailyByEasterNeg(self):
1275 self.assertEqual(list(rrule(FREQ_DAILY,
1276 count=3,
1277 byeaster=-1,
1278 dtstart=parse("19970902T090000"))),
1279 [datetime(1998, 4, 11, 9, 0),
1280 datetime(1999, 4, 3, 9, 0),
1281 datetime(2000, 4, 22, 9, 0)])
1282
1283 def testDailyByHour(self):
1284 self.assertEqual(list(rrule(FREQ_DAILY,
1285 count=3,
1286 byhour=(6,18),
1287 dtstart=parse("19970902T090000"))),
1288 [datetime(1997, 9, 2, 18, 0),
1289 datetime(1997, 9, 3, 6, 0),
1290 datetime(1997, 9, 3, 18, 0)])
1291
1292 def testDailyByMinute(self):
1293 self.assertEqual(list(rrule(FREQ_DAILY,
1294 count=3,
1295 byminute=(6,18),
1296 dtstart=parse("19970902T090000"))),
1297 [datetime(1997, 9, 2, 9, 6),
1298 datetime(1997, 9, 2, 9, 18),
1299 datetime(1997, 9, 3, 9, 6)])
1300
1301 def testDailyBySecond(self):
1302 self.assertEqual(list(rrule(FREQ_DAILY,
1303 count=3,
1304 bysecond=(6,18),
1305 dtstart=parse("19970902T090000"))),
1306 [datetime(1997, 9, 2, 9, 0, 6),
1307 datetime(1997, 9, 2, 9, 0, 18),
1308 datetime(1997, 9, 3, 9, 0, 6)])
1309
1310 def testDailyByHourAndMinute(self):
1311 self.assertEqual(list(rrule(FREQ_DAILY,
1312 count=3,
1313 byhour=(6,18),
1314 byminute=(6,18),
1315 dtstart=parse("19970902T090000"))),
1316 [datetime(1997, 9, 2, 18, 6),
1317 datetime(1997, 9, 2, 18, 18),
1318 datetime(1997, 9, 3, 6, 6)])
1319
1320 def testDailyByHourAndSecond(self):
1321 self.assertEqual(list(rrule(FREQ_DAILY,
1322 count=3,
1323 byhour=(6,18),
1324 bysecond=(6,18),
1325 dtstart=parse("19970902T090000"))),
1326 [datetime(1997, 9, 2, 18, 0, 6),
1327 datetime(1997, 9, 2, 18, 0, 18),
1328 datetime(1997, 9, 3, 6, 0, 6)])
1329
1330 def testDailyByMinuteAndSecond(self):
1331 self.assertEqual(list(rrule(FREQ_DAILY,
1332 count=3,
1333 byminute=(6,18),
1334 bysecond=(6,18),
1335 dtstart=parse("19970902T090000"))),
1336 [datetime(1997, 9, 2, 9, 6, 6),
1337 datetime(1997, 9, 2, 9, 6, 18),
1338 datetime(1997, 9, 2, 9, 18, 6)])
1339
1340 def testDailyByHourAndMinuteAndSecond(self):
1341 self.assertEqual(list(rrule(FREQ_DAILY,
1342 count=3,
1343 byhour=(6,18),
1344 byminute=(6,18),
1345 bysecond=(6,18),
1346 dtstart=parse("19970902T090000"))),
1347 [datetime(1997, 9, 2, 18, 6, 6),
1348 datetime(1997, 9, 2, 18, 6, 18),
1349 datetime(1997, 9, 2, 18, 18, 6)])
1350
1351 def testDailyBySetPos(self):
1352 self.assertEqual(list(rrule(FREQ_DAILY,
1353 count=3,
1354 byhour=(6,18),
1355 byminute=(15,45),
1356 bysetpos=(3,-3),
1357 dtstart=parse("19970902T090000"))),
1358 [datetime(1997, 9, 2, 18, 15),
1359 datetime(1997, 9, 3, 6, 45),
1360 datetime(1997, 9, 3, 18, 15)])
1361
niemeyercb08a352003-10-08 06:02:06 +00001362 def testHourly(self):
1363 self.assertEqual(list(rrule(FREQ_HOURLY,
1364 count=3,
1365 dtstart=parse("19970902T090000"))),
1366 [datetime(1997, 9, 2, 9, 0),
1367 datetime(1997, 9, 2, 10, 0),
1368 datetime(1997, 9, 2, 11, 0)])
1369
niemeyercb08a352003-10-08 06:02:06 +00001370 def testHourlyInterval(self):
1371 self.assertEqual(list(rrule(FREQ_HOURLY,
1372 count=3,
1373 interval=2,
1374 dtstart=parse("19970902T090000"))),
1375 [datetime(1997, 9, 2, 9, 0),
1376 datetime(1997, 9, 2, 11, 0),
1377 datetime(1997, 9, 2, 13, 0)])
1378
1379 def testHourlyIntervalLarge(self):
1380 self.assertEqual(list(rrule(FREQ_HOURLY,
1381 count=3,
1382 interval=769,
1383 dtstart=parse("19970902T090000"))),
1384 [datetime(1997, 9, 2, 9, 0),
1385 datetime(1997, 10, 4, 10, 0),
1386 datetime(1997, 11, 5, 11, 0)])
1387
1388 def testHourlyByMonth(self):
1389 self.assertEqual(list(rrule(FREQ_HOURLY,
1390 count=3,
1391 bymonth=(1,3),
1392 dtstart=parse("19970902T090000"))),
1393 [datetime(1998, 1, 1, 0, 0),
1394 datetime(1998, 1, 1, 1, 0),
1395 datetime(1998, 1, 1, 2, 0)])
1396
1397 def testHourlyByMonthDay(self):
1398 self.assertEqual(list(rrule(FREQ_HOURLY,
1399 count=3,
1400 bymonthday=(1,3),
1401 dtstart=parse("19970902T090000"))),
1402 [datetime(1997, 9, 3, 0, 0),
1403 datetime(1997, 9, 3, 1, 0),
1404 datetime(1997, 9, 3, 2, 0)])
1405
1406 def testHourlyByMonthAndMonthDay(self):
1407 self.assertEqual(list(rrule(FREQ_HOURLY,
1408 count=3,
1409 bymonth=(1,3),
1410 bymonthday=(5,7),
1411 dtstart=parse("19970902T090000"))),
1412 [datetime(1998, 1, 5, 0, 0),
1413 datetime(1998, 1, 5, 1, 0),
1414 datetime(1998, 1, 5, 2, 0)])
1415
1416 def testHourlyByWeekDay(self):
1417 self.assertEqual(list(rrule(FREQ_HOURLY,
1418 count=3,
1419 byweekday=(TU,TH),
1420 dtstart=parse("19970902T090000"))),
1421 [datetime(1997, 9, 2, 9, 0),
1422 datetime(1997, 9, 2, 10, 0),
1423 datetime(1997, 9, 2, 11, 0)])
1424
niemeyer7d8be1a2003-10-09 01:09:42 +00001425 def testHourlyByNWeekDay(self):
1426 self.assertEqual(list(rrule(FREQ_HOURLY,
1427 count=3,
1428 byweekday=(TU(1),TH(-1)),
1429 dtstart=parse("19970902T090000"))),
1430 [datetime(1997, 9, 2, 9, 0),
1431 datetime(1997, 9, 2, 10, 0),
1432 datetime(1997, 9, 2, 11, 0)])
1433
niemeyercb08a352003-10-08 06:02:06 +00001434 def testHourlyByMonthAndWeekDay(self):
1435 self.assertEqual(list(rrule(FREQ_HOURLY,
1436 count=3,
1437 bymonth=(1,3),
1438 byweekday=(TU,TH),
1439 dtstart=parse("19970902T090000"))),
1440 [datetime(1998, 1, 1, 0, 0),
1441 datetime(1998, 1, 1, 1, 0),
1442 datetime(1998, 1, 1, 2, 0)])
1443
niemeyer7d8be1a2003-10-09 01:09:42 +00001444 def testHourlyByMonthAndNWeekDay(self):
1445 self.assertEqual(list(rrule(FREQ_HOURLY,
1446 count=3,
1447 bymonth=(1,3),
1448 byweekday=(TU(1),TH(-1)),
1449 dtstart=parse("19970902T090000"))),
1450 [datetime(1998, 1, 1, 0, 0),
1451 datetime(1998, 1, 1, 1, 0),
1452 datetime(1998, 1, 1, 2, 0)])
1453
1454 def testHourlyByMonthDayAndWeekDay(self):
1455 self.assertEqual(list(rrule(FREQ_HOURLY,
1456 count=3,
1457 bymonthday=(1,3),
1458 byweekday=(TU,TH),
1459 dtstart=parse("19970902T090000"))),
1460 [datetime(1998, 1, 1, 0, 0),
1461 datetime(1998, 1, 1, 1, 0),
1462 datetime(1998, 1, 1, 2, 0)])
1463
1464 def testHourlyByMonthAndMonthDayAndWeekDay(self):
1465 self.assertEqual(list(rrule(FREQ_HOURLY,
1466 count=3,
1467 bymonth=(1,3),
1468 bymonthday=(1,3),
1469 byweekday=(TU,TH),
1470 dtstart=parse("19970902T090000"))),
1471 [datetime(1998, 1, 1, 0, 0),
1472 datetime(1998, 1, 1, 1, 0),
1473 datetime(1998, 1, 1, 2, 0)])
1474
1475 def testHourlyByYearDay(self):
1476 self.assertEqual(list(rrule(FREQ_HOURLY,
1477 count=3,
1478 byyearday=(1,100,200),
1479 dtstart=parse("19970902T090000"))),
1480 [datetime(1998, 1, 1, 0, 0),
1481 datetime(1998, 1, 1, 1, 0),
1482 datetime(1998, 1, 1, 2, 0)])
1483
1484 def testHourlyByMonthAndYearDay(self):
1485 self.assertEqual(list(rrule(FREQ_HOURLY,
1486 count=3,
1487 bymonth=(4,7),
1488 byyearday=(1,100,200),
1489 dtstart=parse("19970902T090000"))),
1490 [datetime(1998, 4, 10, 0, 0),
1491 datetime(1998, 4, 10, 1, 0),
1492 datetime(1998, 4, 10, 2, 0)])
1493
1494 def testHourlyByWeekNo(self):
1495 self.assertEqual(list(rrule(FREQ_HOURLY,
1496 count=3,
1497 byweekno=20,
1498 dtstart=parse("19970902T090000"))),
1499 [datetime(1998, 5, 11, 0, 0),
1500 datetime(1998, 5, 11, 1, 0),
1501 datetime(1998, 5, 11, 2, 0)])
1502
1503 def testHourlyByWeekNoAndWeekDay(self):
1504 self.assertEqual(list(rrule(FREQ_HOURLY,
1505 count=3,
1506 byweekno=1,
1507 byweekday=MO,
1508 dtstart=parse("19970902T090000"))),
1509 [datetime(1997, 12, 29, 0, 0),
1510 datetime(1997, 12, 29, 1, 0),
1511 datetime(1997, 12, 29, 2, 0)])
1512
1513 def testHourlyByWeekNoAndWeekDayLarge(self):
1514 self.assertEqual(list(rrule(FREQ_HOURLY,
1515 count=3,
1516 byweekno=52,
1517 byweekday=SU,
1518 dtstart=parse("19970902T090000"))),
1519 [datetime(1997, 12, 28, 0, 0),
1520 datetime(1997, 12, 28, 1, 0),
1521 datetime(1997, 12, 28, 2, 0)])
1522
1523 def testHourlyByWeekNoAndWeekDayLast(self):
1524 self.assertEqual(list(rrule(FREQ_HOURLY,
1525 count=3,
1526 byweekno=-1,
1527 byweekday=SU,
1528 dtstart=parse("19970902T090000"))),
1529 [datetime(1997, 12, 28, 0, 0),
1530 datetime(1997, 12, 28, 1, 0),
1531 datetime(1997, 12, 28, 2, 0)])
1532
1533 def testHourlyByWeekNoAndWeekDay53(self):
1534 self.assertEqual(list(rrule(FREQ_HOURLY,
1535 count=3,
1536 byweekno=53,
1537 byweekday=MO,
1538 dtstart=parse("19970902T090000"))),
1539 [datetime(1998, 12, 28, 0, 0),
1540 datetime(1998, 12, 28, 1, 0),
1541 datetime(1998, 12, 28, 2, 0)])
1542
1543 def testHourlyByEaster(self):
1544 self.assertEqual(list(rrule(FREQ_HOURLY,
1545 count=3,
1546 byeaster=0,
1547 dtstart=parse("19970902T090000"))),
1548 [datetime(1998, 4, 12, 0, 0),
1549 datetime(1998, 4, 12, 1, 0),
1550 datetime(1998, 4, 12, 2, 0)])
1551
1552 def testHourlyByEasterPos(self):
1553 self.assertEqual(list(rrule(FREQ_HOURLY,
1554 count=3,
1555 byeaster=1,
1556 dtstart=parse("19970902T090000"))),
1557 [datetime(1998, 4, 13, 0, 0),
1558 datetime(1998, 4, 13, 1, 0),
1559 datetime(1998, 4, 13, 2, 0)])
1560
1561 def testHourlyByEasterNeg(self):
1562 self.assertEqual(list(rrule(FREQ_HOURLY,
1563 count=3,
1564 byeaster=-1,
1565 dtstart=parse("19970902T090000"))),
1566 [datetime(1998, 4, 11, 0, 0),
1567 datetime(1998, 4, 11, 1, 0),
1568 datetime(1998, 4, 11, 2, 0)])
1569
1570 def testHourlyByHour(self):
1571 self.assertEqual(list(rrule(FREQ_HOURLY,
1572 count=3,
1573 byhour=(6,18),
1574 dtstart=parse("19970902T090000"))),
1575 [datetime(1997, 9, 2, 18, 0),
1576 datetime(1997, 9, 3, 6, 0),
1577 datetime(1997, 9, 3, 18, 0)])
1578
1579 def testHourlyByMinute(self):
1580 self.assertEqual(list(rrule(FREQ_HOURLY,
1581 count=3,
1582 byminute=(6,18),
1583 dtstart=parse("19970902T090000"))),
1584 [datetime(1997, 9, 2, 9, 6),
1585 datetime(1997, 9, 2, 9, 18),
1586 datetime(1997, 9, 2, 10, 6)])
1587
1588 def testHourlyBySecond(self):
1589 self.assertEqual(list(rrule(FREQ_HOURLY,
1590 count=3,
1591 bysecond=(6,18),
1592 dtstart=parse("19970902T090000"))),
1593 [datetime(1997, 9, 2, 9, 0, 6),
1594 datetime(1997, 9, 2, 9, 0, 18),
1595 datetime(1997, 9, 2, 10, 0, 6)])
1596
1597 def testHourlyByHourAndMinute(self):
1598 self.assertEqual(list(rrule(FREQ_HOURLY,
1599 count=3,
1600 byhour=(6,18),
1601 byminute=(6,18),
1602 dtstart=parse("19970902T090000"))),
1603 [datetime(1997, 9, 2, 18, 6),
1604 datetime(1997, 9, 2, 18, 18),
1605 datetime(1997, 9, 3, 6, 6)])
1606
1607 def testHourlyByHourAndSecond(self):
1608 self.assertEqual(list(rrule(FREQ_HOURLY,
1609 count=3,
1610 byhour=(6,18),
1611 bysecond=(6,18),
1612 dtstart=parse("19970902T090000"))),
1613 [datetime(1997, 9, 2, 18, 0, 6),
1614 datetime(1997, 9, 2, 18, 0, 18),
1615 datetime(1997, 9, 3, 6, 0, 6)])
1616
1617 def testHourlyByMinuteAndSecond(self):
1618 self.assertEqual(list(rrule(FREQ_HOURLY,
1619 count=3,
1620 byminute=(6,18),
1621 bysecond=(6,18),
1622 dtstart=parse("19970902T090000"))),
1623 [datetime(1997, 9, 2, 9, 6, 6),
1624 datetime(1997, 9, 2, 9, 6, 18),
1625 datetime(1997, 9, 2, 9, 18, 6)])
1626
1627 def testHourlyByHourAndMinuteAndSecond(self):
1628 self.assertEqual(list(rrule(FREQ_HOURLY,
1629 count=3,
1630 byhour=(6,18),
1631 byminute=(6,18),
1632 bysecond=(6,18),
1633 dtstart=parse("19970902T090000"))),
1634 [datetime(1997, 9, 2, 18, 6, 6),
1635 datetime(1997, 9, 2, 18, 6, 18),
1636 datetime(1997, 9, 2, 18, 18, 6)])
1637
1638 def testHourlyBySetPos(self):
1639 self.assertEqual(list(rrule(FREQ_HOURLY,
1640 count=3,
1641 byminute=(15,45),
1642 bysecond=(15,45),
1643 bysetpos=(3,-3),
1644 dtstart=parse("19970902T090000"))),
1645 [datetime(1997, 9, 2, 9, 15, 45),
1646 datetime(1997, 9, 2, 9, 45, 15),
1647 datetime(1997, 9, 2, 10, 15, 45)])
1648
niemeyercb08a352003-10-08 06:02:06 +00001649 def testMinutely(self):
1650 self.assertEqual(list(rrule(FREQ_MINUTELY,
1651 count=3,
1652 dtstart=parse("19970902T090000"))),
1653 [datetime(1997, 9, 2, 9, 0),
1654 datetime(1997, 9, 2, 9, 1),
1655 datetime(1997, 9, 2, 9, 2)])
1656
niemeyercb08a352003-10-08 06:02:06 +00001657 def testMinutelyInterval(self):
1658 self.assertEqual(list(rrule(FREQ_MINUTELY,
1659 count=3,
1660 interval=2,
1661 dtstart=parse("19970902T090000"))),
1662 [datetime(1997, 9, 2, 9, 0),
1663 datetime(1997, 9, 2, 9, 2),
1664 datetime(1997, 9, 2, 9, 4)])
1665
1666 def testMinutelyIntervalLarge(self):
1667 self.assertEqual(list(rrule(FREQ_MINUTELY,
1668 count=3,
1669 interval=1501,
1670 dtstart=parse("19970902T090000"))),
1671 [datetime(1997, 9, 2, 9, 0),
1672 datetime(1997, 9, 3, 10, 1),
1673 datetime(1997, 9, 4, 11, 2)])
1674
1675 def testMinutelyByMonth(self):
1676 self.assertEqual(list(rrule(FREQ_MINUTELY,
1677 count=3,
1678 bymonth=(1,3),
1679 dtstart=parse("19970902T090000"))),
1680 [datetime(1998, 1, 1, 0, 0),
1681 datetime(1998, 1, 1, 0, 1),
1682 datetime(1998, 1, 1, 0, 2)])
1683
1684 def testMinutelyByMonthDay(self):
1685 self.assertEqual(list(rrule(FREQ_MINUTELY,
1686 count=3,
1687 bymonthday=(1,3),
1688 dtstart=parse("19970902T090000"))),
1689 [datetime(1997, 9, 3, 0, 0),
1690 datetime(1997, 9, 3, 0, 1),
1691 datetime(1997, 9, 3, 0, 2)])
1692
1693 def testMinutelyByMonthAndMonthDay(self):
1694 self.assertEqual(list(rrule(FREQ_MINUTELY,
1695 count=3,
1696 bymonth=(1,3),
1697 bymonthday=(5,7),
1698 dtstart=parse("19970902T090000"))),
1699 [datetime(1998, 1, 5, 0, 0),
1700 datetime(1998, 1, 5, 0, 1),
1701 datetime(1998, 1, 5, 0, 2)])
1702
1703 def testMinutelyByWeekDay(self):
1704 self.assertEqual(list(rrule(FREQ_MINUTELY,
1705 count=3,
1706 byweekday=(TU,TH),
1707 dtstart=parse("19970902T090000"))),
1708 [datetime(1997, 9, 2, 9, 0),
1709 datetime(1997, 9, 2, 9, 1),
1710 datetime(1997, 9, 2, 9, 2)])
1711
niemeyer7d8be1a2003-10-09 01:09:42 +00001712 def testMinutelyByNWeekDay(self):
1713 self.assertEqual(list(rrule(FREQ_MINUTELY,
1714 count=3,
1715 byweekday=(TU(1),TH(-1)),
1716 dtstart=parse("19970902T090000"))),
1717 [datetime(1997, 9, 2, 9, 0),
1718 datetime(1997, 9, 2, 9, 1),
1719 datetime(1997, 9, 2, 9, 2)])
1720
niemeyercb08a352003-10-08 06:02:06 +00001721 def testMinutelyByMonthAndWeekDay(self):
1722 self.assertEqual(list(rrule(FREQ_MINUTELY,
1723 count=3,
1724 bymonth=(1,3),
1725 byweekday=(TU,TH),
1726 dtstart=parse("19970902T090000"))),
1727 [datetime(1998, 1, 1, 0, 0),
1728 datetime(1998, 1, 1, 0, 1),
1729 datetime(1998, 1, 1, 0, 2)])
1730
niemeyer7d8be1a2003-10-09 01:09:42 +00001731 def testMinutelyByMonthAndNWeekDay(self):
1732 self.assertEqual(list(rrule(FREQ_MINUTELY,
1733 count=3,
1734 bymonth=(1,3),
1735 byweekday=(TU(1),TH(-1)),
1736 dtstart=parse("19970902T090000"))),
1737 [datetime(1998, 1, 1, 0, 0),
1738 datetime(1998, 1, 1, 0, 1),
1739 datetime(1998, 1, 1, 0, 2)])
1740
1741 def testMinutelyByMonthDayAndWeekDay(self):
1742 self.assertEqual(list(rrule(FREQ_MINUTELY,
1743 count=3,
1744 bymonthday=(1,3),
1745 byweekday=(TU,TH),
1746 dtstart=parse("19970902T090000"))),
1747 [datetime(1998, 1, 1, 0, 0),
1748 datetime(1998, 1, 1, 0, 1),
1749 datetime(1998, 1, 1, 0, 2)])
1750
1751 def testMinutelyByMonthAndMonthDayAndWeekDay(self):
1752 self.assertEqual(list(rrule(FREQ_MINUTELY,
1753 count=3,
1754 bymonth=(1,3),
1755 bymonthday=(1,3),
1756 byweekday=(TU,TH),
1757 dtstart=parse("19970902T090000"))),
1758 [datetime(1998, 1, 1, 0, 0),
1759 datetime(1998, 1, 1, 0, 1),
1760 datetime(1998, 1, 1, 0, 2)])
1761
1762 def testMinutelyByYearDay(self):
1763 self.assertEqual(list(rrule(FREQ_MINUTELY,
1764 count=3,
1765 byyearday=(1,100,200),
1766 dtstart=parse("19970902T090000"))),
1767 [datetime(1998, 1, 1, 0, 0),
1768 datetime(1998, 1, 1, 0, 1),
1769 datetime(1998, 1, 1, 0, 2)])
1770
1771 def testMinutelyByMonthAndYearDay(self):
1772 self.assertEqual(list(rrule(FREQ_MINUTELY,
1773 count=3,
1774 bymonth=(4,7),
1775 byyearday=(1,100,200),
1776 dtstart=parse("19970902T090000"))),
1777 [datetime(1998, 4, 10, 0, 0),
1778 datetime(1998, 4, 10, 0, 1),
1779 datetime(1998, 4, 10, 0, 2)])
1780
1781 def testMinutelyByWeekNo(self):
1782 self.assertEqual(list(rrule(FREQ_MINUTELY,
1783 count=3,
1784 byweekno=20,
1785 dtstart=parse("19970902T090000"))),
1786 [datetime(1998, 5, 11, 0, 0),
1787 datetime(1998, 5, 11, 0, 1),
1788 datetime(1998, 5, 11, 0, 2)])
1789
1790 def testMinutelyByWeekNoAndWeekDay(self):
1791 self.assertEqual(list(rrule(FREQ_MINUTELY,
1792 count=3,
1793 byweekno=1,
1794 byweekday=MO,
1795 dtstart=parse("19970902T090000"))),
1796 [datetime(1997, 12, 29, 0, 0),
1797 datetime(1997, 12, 29, 0, 1),
1798 datetime(1997, 12, 29, 0, 2)])
1799
1800 def testMinutelyByWeekNoAndWeekDayLarge(self):
1801 self.assertEqual(list(rrule(FREQ_MINUTELY,
1802 count=3,
1803 byweekno=52,
1804 byweekday=SU,
1805 dtstart=parse("19970902T090000"))),
1806 [datetime(1997, 12, 28, 0, 0),
1807 datetime(1997, 12, 28, 0, 1),
1808 datetime(1997, 12, 28, 0, 2)])
1809
1810 def testMinutelyByWeekNoAndWeekDayLast(self):
1811 self.assertEqual(list(rrule(FREQ_MINUTELY,
1812 count=3,
1813 byweekno=-1,
1814 byweekday=SU,
1815 dtstart=parse("19970902T090000"))),
1816 [datetime(1997, 12, 28, 0, 0),
1817 datetime(1997, 12, 28, 0, 1),
1818 datetime(1997, 12, 28, 0, 2)])
1819
1820 def testMinutelyByWeekNoAndWeekDay53(self):
1821 self.assertEqual(list(rrule(FREQ_MINUTELY,
1822 count=3,
1823 byweekno=53,
1824 byweekday=MO,
1825 dtstart=parse("19970902T090000"))),
1826 [datetime(1998, 12, 28, 0, 0),
1827 datetime(1998, 12, 28, 0, 1),
1828 datetime(1998, 12, 28, 0, 2)])
1829
1830 def testMinutelyByEaster(self):
1831 self.assertEqual(list(rrule(FREQ_MINUTELY,
1832 count=3,
1833 byeaster=0,
1834 dtstart=parse("19970902T090000"))),
1835 [datetime(1998, 4, 12, 0, 0),
1836 datetime(1998, 4, 12, 0, 1),
1837 datetime(1998, 4, 12, 0, 2)])
1838
1839 def testMinutelyByEasterPos(self):
1840 self.assertEqual(list(rrule(FREQ_MINUTELY,
1841 count=3,
1842 byeaster=1,
1843 dtstart=parse("19970902T090000"))),
1844 [datetime(1998, 4, 13, 0, 0),
1845 datetime(1998, 4, 13, 0, 1),
1846 datetime(1998, 4, 13, 0, 2)])
1847
1848 def testMinutelyByEasterNeg(self):
1849 self.assertEqual(list(rrule(FREQ_MINUTELY,
1850 count=3,
1851 byeaster=-1,
1852 dtstart=parse("19970902T090000"))),
1853 [datetime(1998, 4, 11, 0, 0),
1854 datetime(1998, 4, 11, 0, 1),
1855 datetime(1998, 4, 11, 0, 2)])
1856
1857 def testMinutelyByHour(self):
1858 self.assertEqual(list(rrule(FREQ_MINUTELY,
1859 count=3,
1860 byhour=(6,18),
1861 dtstart=parse("19970902T090000"))),
1862 [datetime(1997, 9, 2, 18, 0),
1863 datetime(1997, 9, 2, 18, 1),
1864 datetime(1997, 9, 2, 18, 2)])
1865
1866 def testMinutelyByMinute(self):
1867 self.assertEqual(list(rrule(FREQ_MINUTELY,
1868 count=3,
1869 byminute=(6,18),
1870 dtstart=parse("19970902T090000"))),
1871 [datetime(1997, 9, 2, 9, 6),
1872 datetime(1997, 9, 2, 9, 18),
1873 datetime(1997, 9, 2, 10, 6)])
1874
1875 def testMinutelyBySecond(self):
1876 self.assertEqual(list(rrule(FREQ_MINUTELY,
1877 count=3,
1878 bysecond=(6,18),
1879 dtstart=parse("19970902T090000"))),
1880 [datetime(1997, 9, 2, 9, 0, 6),
1881 datetime(1997, 9, 2, 9, 0, 18),
1882 datetime(1997, 9, 2, 9, 1, 6)])
1883
1884 def testMinutelyByHourAndMinute(self):
1885 self.assertEqual(list(rrule(FREQ_MINUTELY,
1886 count=3,
1887 byhour=(6,18),
1888 byminute=(6,18),
1889 dtstart=parse("19970902T090000"))),
1890 [datetime(1997, 9, 2, 18, 6),
1891 datetime(1997, 9, 2, 18, 18),
1892 datetime(1997, 9, 3, 6, 6)])
1893
1894 def testMinutelyByHourAndSecond(self):
1895 self.assertEqual(list(rrule(FREQ_MINUTELY,
1896 count=3,
1897 byhour=(6,18),
1898 bysecond=(6,18),
1899 dtstart=parse("19970902T090000"))),
1900 [datetime(1997, 9, 2, 18, 0, 6),
1901 datetime(1997, 9, 2, 18, 0, 18),
1902 datetime(1997, 9, 2, 18, 1, 6)])
1903
1904 def testMinutelyByMinuteAndSecond(self):
1905 self.assertEqual(list(rrule(FREQ_MINUTELY,
1906 count=3,
1907 byminute=(6,18),
1908 bysecond=(6,18),
1909 dtstart=parse("19970902T090000"))),
1910 [datetime(1997, 9, 2, 9, 6, 6),
1911 datetime(1997, 9, 2, 9, 6, 18),
1912 datetime(1997, 9, 2, 9, 18, 6)])
1913
1914 def testMinutelyByHourAndMinuteAndSecond(self):
1915 self.assertEqual(list(rrule(FREQ_MINUTELY,
1916 count=3,
1917 byhour=(6,18),
1918 byminute=(6,18),
1919 bysecond=(6,18),
1920 dtstart=parse("19970902T090000"))),
1921 [datetime(1997, 9, 2, 18, 6, 6),
1922 datetime(1997, 9, 2, 18, 6, 18),
1923 datetime(1997, 9, 2, 18, 18, 6)])
1924
1925 def testMinutelyBySetPos(self):
1926 self.assertEqual(list(rrule(FREQ_MINUTELY,
1927 count=3,
1928 bysecond=(15,30,45),
1929 bysetpos=(3,-3),
1930 dtstart=parse("19970902T090000"))),
1931 [datetime(1997, 9, 2, 9, 0, 15),
1932 datetime(1997, 9, 2, 9, 0, 45),
1933 datetime(1997, 9, 2, 9, 1, 15)])
1934
niemeyercb08a352003-10-08 06:02:06 +00001935 def testSecondly(self):
1936 self.assertEqual(list(rrule(FREQ_SECONDLY,
1937 count=3,
1938 dtstart=parse("19970902T090000"))),
1939 [datetime(1997, 9, 2, 9, 0, 0),
1940 datetime(1997, 9, 2, 9, 0, 1),
1941 datetime(1997, 9, 2, 9, 0, 2)])
1942
niemeyercb08a352003-10-08 06:02:06 +00001943 def testSecondlyInterval(self):
1944 self.assertEqual(list(rrule(FREQ_SECONDLY,
1945 count=3,
1946 interval=2,
1947 dtstart=parse("19970902T090000"))),
1948 [datetime(1997, 9, 2, 9, 0, 0),
1949 datetime(1997, 9, 2, 9, 0, 2),
1950 datetime(1997, 9, 2, 9, 0, 4)])
1951
1952 def testSecondlyIntervalLarge(self):
1953 self.assertEqual(list(rrule(FREQ_SECONDLY,
1954 count=3,
1955 interval=90061,
1956 dtstart=parse("19970902T090000"))),
1957 [datetime(1997, 9, 2, 9, 0, 0),
1958 datetime(1997, 9, 3, 10, 1, 1),
1959 datetime(1997, 9, 4, 11, 2, 2)])
1960
1961 def testSecondlyByMonth(self):
1962 self.assertEqual(list(rrule(FREQ_SECONDLY,
1963 count=3,
1964 bymonth=(1,3),
1965 dtstart=parse("19970902T090000"))),
1966 [datetime(1998, 1, 1, 0, 0, 0),
1967 datetime(1998, 1, 1, 0, 0, 1),
1968 datetime(1998, 1, 1, 0, 0, 2)])
1969
1970 def testSecondlyByMonthDay(self):
1971 self.assertEqual(list(rrule(FREQ_SECONDLY,
1972 count=3,
1973 bymonthday=(1,3),
1974 dtstart=parse("19970902T090000"))),
1975 [datetime(1997, 9, 3, 0, 0, 0),
1976 datetime(1997, 9, 3, 0, 0, 1),
1977 datetime(1997, 9, 3, 0, 0, 2)])
1978
1979 def testSecondlyByMonthAndMonthDay(self):
1980 self.assertEqual(list(rrule(FREQ_SECONDLY,
1981 count=3,
1982 bymonth=(1,3),
1983 bymonthday=(5,7),
1984 dtstart=parse("19970902T090000"))),
1985 [datetime(1998, 1, 5, 0, 0, 0),
1986 datetime(1998, 1, 5, 0, 0, 1),
1987 datetime(1998, 1, 5, 0, 0, 2)])
1988
1989 def testSecondlyByWeekDay(self):
1990 self.assertEqual(list(rrule(FREQ_SECONDLY,
1991 count=3,
1992 byweekday=(TU,TH),
1993 dtstart=parse("19970902T090000"))),
1994 [datetime(1997, 9, 2, 9, 0, 0),
1995 datetime(1997, 9, 2, 9, 0, 1),
1996 datetime(1997, 9, 2, 9, 0, 2)])
1997
niemeyer7d8be1a2003-10-09 01:09:42 +00001998 def testSecondlyByNWeekDay(self):
1999 self.assertEqual(list(rrule(FREQ_SECONDLY,
2000 count=3,
2001 byweekday=(TU(1),TH(-1)),
2002 dtstart=parse("19970902T090000"))),
2003 [datetime(1997, 9, 2, 9, 0, 0),
2004 datetime(1997, 9, 2, 9, 0, 1),
2005 datetime(1997, 9, 2, 9, 0, 2)])
2006
niemeyercb08a352003-10-08 06:02:06 +00002007 def testSecondlyByMonthAndWeekDay(self):
2008 self.assertEqual(list(rrule(FREQ_SECONDLY,
2009 count=3,
2010 bymonth=(1,3),
2011 byweekday=(TU,TH),
2012 dtstart=parse("19970902T090000"))),
2013 [datetime(1998, 1, 1, 0, 0, 0),
2014 datetime(1998, 1, 1, 0, 0, 1),
2015 datetime(1998, 1, 1, 0, 0, 2)])
2016
niemeyer7d8be1a2003-10-09 01:09:42 +00002017 def testSecondlyByMonthAndNWeekDay(self):
2018 self.assertEqual(list(rrule(FREQ_SECONDLY,
2019 count=3,
2020 bymonth=(1,3),
2021 byweekday=(TU(1),TH(-1)),
2022 dtstart=parse("19970902T090000"))),
2023 [datetime(1998, 1, 1, 0, 0, 0),
2024 datetime(1998, 1, 1, 0, 0, 1),
2025 datetime(1998, 1, 1, 0, 0, 2)])
2026
2027 def testSecondlyByMonthDayAndWeekDay(self):
2028 self.assertEqual(list(rrule(FREQ_SECONDLY,
2029 count=3,
2030 bymonthday=(1,3),
2031 byweekday=(TU,TH),
2032 dtstart=parse("19970902T090000"))),
2033 [datetime(1998, 1, 1, 0, 0, 0),
2034 datetime(1998, 1, 1, 0, 0, 1),
2035 datetime(1998, 1, 1, 0, 0, 2)])
2036
2037 def testSecondlyByMonthAndMonthDayAndWeekDay(self):
2038 self.assertEqual(list(rrule(FREQ_SECONDLY,
2039 count=3,
2040 bymonth=(1,3),
2041 bymonthday=(1,3),
2042 byweekday=(TU,TH),
2043 dtstart=parse("19970902T090000"))),
2044 [datetime(1998, 1, 1, 0, 0, 0),
2045 datetime(1998, 1, 1, 0, 0, 1),
2046 datetime(1998, 1, 1, 0, 0, 2)])
2047
2048 def testSecondlyByYearDay(self):
2049 self.assertEqual(list(rrule(FREQ_SECONDLY,
2050 count=3,
2051 byyearday=(1,100,200),
2052 dtstart=parse("19970902T090000"))),
2053 [datetime(1998, 1, 1, 0, 0, 0),
2054 datetime(1998, 1, 1, 0, 0, 1),
2055 datetime(1998, 1, 1, 0, 0, 2)])
2056
2057 def testSecondlyByMonthAndYearDay(self):
2058 self.assertEqual(list(rrule(FREQ_SECONDLY,
2059 count=3,
2060 bymonth=(4,7),
2061 byyearday=(1,100,200),
2062 dtstart=parse("19970902T090000"))),
2063 [datetime(1998, 4, 10, 0, 0, 0),
2064 datetime(1998, 4, 10, 0, 0, 1),
2065 datetime(1998, 4, 10, 0, 0, 2)])
2066
2067 def testSecondlyByWeekNo(self):
2068 self.assertEqual(list(rrule(FREQ_SECONDLY,
2069 count=3,
2070 byweekno=20,
2071 dtstart=parse("19970902T090000"))),
2072 [datetime(1998, 5, 11, 0, 0, 0),
2073 datetime(1998, 5, 11, 0, 0, 1),
2074 datetime(1998, 5, 11, 0, 0, 2)])
2075
2076 def testSecondlyByWeekNoAndWeekDay(self):
2077 self.assertEqual(list(rrule(FREQ_SECONDLY,
2078 count=3,
2079 byweekno=1,
2080 byweekday=MO,
2081 dtstart=parse("19970902T090000"))),
2082 [datetime(1997, 12, 29, 0, 0, 0),
2083 datetime(1997, 12, 29, 0, 0, 1),
2084 datetime(1997, 12, 29, 0, 0, 2)])
2085
2086 def testSecondlyByWeekNoAndWeekDayLarge(self):
2087 self.assertEqual(list(rrule(FREQ_SECONDLY,
2088 count=3,
2089 byweekno=52,
2090 byweekday=SU,
2091 dtstart=parse("19970902T090000"))),
2092 [datetime(1997, 12, 28, 0, 0, 0),
2093 datetime(1997, 12, 28, 0, 0, 1),
2094 datetime(1997, 12, 28, 0, 0, 2)])
2095
2096 def testSecondlyByWeekNoAndWeekDayLast(self):
2097 self.assertEqual(list(rrule(FREQ_SECONDLY,
2098 count=3,
2099 byweekno=-1,
2100 byweekday=SU,
2101 dtstart=parse("19970902T090000"))),
2102 [datetime(1997, 12, 28, 0, 0, 0),
2103 datetime(1997, 12, 28, 0, 0, 1),
2104 datetime(1997, 12, 28, 0, 0, 2)])
2105
2106 def testSecondlyByWeekNoAndWeekDay53(self):
2107 self.assertEqual(list(rrule(FREQ_SECONDLY,
2108 count=3,
2109 byweekno=53,
2110 byweekday=MO,
2111 dtstart=parse("19970902T090000"))),
2112 [datetime(1998, 12, 28, 0, 0, 0),
2113 datetime(1998, 12, 28, 0, 0, 1),
2114 datetime(1998, 12, 28, 0, 0, 2)])
2115
2116 def testSecondlyByEaster(self):
2117 self.assertEqual(list(rrule(FREQ_SECONDLY,
2118 count=3,
2119 byeaster=0,
2120 dtstart=parse("19970902T090000"))),
2121 [datetime(1998, 4, 12, 0, 0, 0),
2122 datetime(1998, 4, 12, 0, 0, 1),
2123 datetime(1998, 4, 12, 0, 0, 2)])
2124
2125 def testSecondlyByEasterPos(self):
2126 self.assertEqual(list(rrule(FREQ_SECONDLY,
2127 count=3,
2128 byeaster=1,
2129 dtstart=parse("19970902T090000"))),
2130 [datetime(1998, 4, 13, 0, 0, 0),
2131 datetime(1998, 4, 13, 0, 0, 1),
2132 datetime(1998, 4, 13, 0, 0, 2)])
2133
2134 def testSecondlyByEasterNeg(self):
2135 self.assertEqual(list(rrule(FREQ_SECONDLY,
2136 count=3,
2137 byeaster=-1,
2138 dtstart=parse("19970902T090000"))),
2139 [datetime(1998, 4, 11, 0, 0, 0),
2140 datetime(1998, 4, 11, 0, 0, 1),
2141 datetime(1998, 4, 11, 0, 0, 2)])
2142
2143 def testSecondlyByHour(self):
2144 self.assertEqual(list(rrule(FREQ_SECONDLY,
2145 count=3,
2146 byhour=(6,18),
2147 dtstart=parse("19970902T090000"))),
2148 [datetime(1997, 9, 2, 18, 0, 0),
2149 datetime(1997, 9, 2, 18, 0, 1),
2150 datetime(1997, 9, 2, 18, 0, 2)])
2151
2152 def testSecondlyByMinute(self):
2153 self.assertEqual(list(rrule(FREQ_SECONDLY,
2154 count=3,
2155 byminute=(6,18),
2156 dtstart=parse("19970902T090000"))),
2157 [datetime(1997, 9, 2, 9, 6, 0),
2158 datetime(1997, 9, 2, 9, 6, 1),
2159 datetime(1997, 9, 2, 9, 6, 2)])
2160
2161 def testSecondlyBySecond(self):
2162 self.assertEqual(list(rrule(FREQ_SECONDLY,
2163 count=3,
2164 bysecond=(6,18),
2165 dtstart=parse("19970902T090000"))),
2166 [datetime(1997, 9, 2, 9, 0, 6),
2167 datetime(1997, 9, 2, 9, 0, 18),
2168 datetime(1997, 9, 2, 9, 1, 6)])
2169
2170 def testSecondlyByHourAndMinute(self):
2171 self.assertEqual(list(rrule(FREQ_SECONDLY,
2172 count=3,
2173 byhour=(6,18),
2174 byminute=(6,18),
2175 dtstart=parse("19970902T090000"))),
2176 [datetime(1997, 9, 2, 18, 6, 0),
2177 datetime(1997, 9, 2, 18, 6, 1),
2178 datetime(1997, 9, 2, 18, 6, 2)])
2179
2180 def testSecondlyByHourAndSecond(self):
2181 self.assertEqual(list(rrule(FREQ_SECONDLY,
2182 count=3,
2183 byhour=(6,18),
2184 bysecond=(6,18),
2185 dtstart=parse("19970902T090000"))),
2186 [datetime(1997, 9, 2, 18, 0, 6),
2187 datetime(1997, 9, 2, 18, 0, 18),
2188 datetime(1997, 9, 2, 18, 1, 6)])
2189
2190 def testSecondlyByMinuteAndSecond(self):
2191 self.assertEqual(list(rrule(FREQ_SECONDLY,
2192 count=3,
2193 byminute=(6,18),
2194 bysecond=(6,18),
2195 dtstart=parse("19970902T090000"))),
2196 [datetime(1997, 9, 2, 9, 6, 6),
2197 datetime(1997, 9, 2, 9, 6, 18),
2198 datetime(1997, 9, 2, 9, 18, 6)])
2199
2200 def testSecondlyByHourAndMinuteAndSecond(self):
2201 self.assertEqual(list(rrule(FREQ_SECONDLY,
2202 count=3,
2203 byhour=(6,18),
2204 byminute=(6,18),
2205 bysecond=(6,18),
2206 dtstart=parse("19970902T090000"))),
2207 [datetime(1997, 9, 2, 18, 6, 6),
2208 datetime(1997, 9, 2, 18, 6, 18),
2209 datetime(1997, 9, 2, 18, 18, 6)])
2210
niemeyercb08a352003-10-08 06:02:06 +00002211 def testUntilNotMatching(self):
2212 self.assertEqual(list(rrule(FREQ_DAILY,
2213 count=3,
2214 dtstart=parse("19970902T090000"),
2215 until=parse("19970905T080000"))),
2216 [datetime(1997, 9, 2, 9, 0),
2217 datetime(1997, 9, 3, 9, 0),
2218 datetime(1997, 9, 4, 9, 0)])
2219
2220 def testUntilMatching(self):
2221 self.assertEqual(list(rrule(FREQ_DAILY,
2222 count=3,
2223 dtstart=parse("19970902T090000"),
2224 until=parse("19970904T090000"))),
2225 [datetime(1997, 9, 2, 9, 0),
2226 datetime(1997, 9, 3, 9, 0),
2227 datetime(1997, 9, 4, 9, 0)])
2228
2229 def testUntilSingle(self):
2230 self.assertEqual(list(rrule(FREQ_DAILY,
2231 count=3,
2232 dtstart=parse("19970902T090000"),
2233 until=parse("19970902T090000"))),
2234 [datetime(1997, 9, 2, 9, 0)])
2235
2236 def testUntilEmpty(self):
2237 self.assertEqual(list(rrule(FREQ_DAILY,
2238 count=3,
2239 dtstart=parse("19970902T090000"),
2240 until=parse("19970901T090000"))),
2241 [])
2242
niemeyer8d468492003-10-09 16:49:35 +00002243 def testUntilWithDate(self):
2244 self.assertEqual(list(rrule(FREQ_DAILY,
2245 count=3,
2246 dtstart=parse("19970902T090000"),
2247 until=date(1997, 9, 5))),
2248 [datetime(1997, 9, 2, 9, 0),
2249 datetime(1997, 9, 3, 9, 0),
2250 datetime(1997, 9, 4, 9, 0)])
2251
niemeyercee1a1b2003-10-09 01:39:15 +00002252 def testWkStIntervalMO(self):
2253 self.assertEqual(list(rrule(FREQ_WEEKLY,
2254 count=3,
2255 interval=2,
2256 byweekday=(TU,SU),
2257 wkst=MO,
2258 dtstart=parse("19970902T090000"))),
2259 [datetime(1997, 9, 2, 9, 0),
2260 datetime(1997, 9, 7, 9, 0),
2261 datetime(1997, 9, 16, 9, 0)])
2262
2263 def testWkStIntervalSU(self):
2264 self.assertEqual(list(rrule(FREQ_WEEKLY,
2265 count=3,
2266 interval=2,
2267 byweekday=(TU,SU),
2268 wkst=SU,
2269 dtstart=parse("19970902T090000"))),
2270 [datetime(1997, 9, 2, 9, 0),
2271 datetime(1997, 9, 14, 9, 0),
2272 datetime(1997, 9, 16, 9, 0)])
2273
niemeyer46c89302003-10-09 16:23:36 +00002274 def testDTStartIsDate(self):
2275 self.assertEqual(list(rrule(FREQ_DAILY,
2276 count=3,
2277 dtstart=date(1997, 9, 2))),
2278 [datetime(1997, 9, 2, 0, 0),
2279 datetime(1997, 9, 3, 0, 0),
2280 datetime(1997, 9, 4, 0, 0)])
2281
2282 def testDTStartWithMicroseconds(self):
2283 self.assertEqual(list(rrule(FREQ_DAILY,
2284 count=3,
2285 dtstart=parse("19970902T090000.5"))),
2286 [datetime(1997, 9, 2, 9, 0),
2287 datetime(1997, 9, 3, 9, 0),
2288 datetime(1997, 9, 4, 9, 0)])
2289
niemeyerdcad96c2003-10-09 02:47:09 +00002290 def testSet(self):
2291 set = rruleset()
2292 set.rrule(rrule(FREQ_YEARLY, count=2, byweekday=TU,
2293 dtstart=parse("19970902T090000")))
2294 set.rrule(rrule(FREQ_YEARLY, count=1, byweekday=TH,
2295 dtstart=parse("19970902T090000")))
2296 self.assertEqual(list(set),
2297 [datetime(1997, 9, 2, 9, 0),
2298 datetime(1997, 9, 4, 9, 0),
2299 datetime(1997, 9, 9, 9, 0)])
2300
2301 def testSetDate(self):
2302 set = rruleset()
2303 set.rrule(rrule(FREQ_YEARLY, count=1, byweekday=TU,
2304 dtstart=parse("19970902T090000")))
2305 set.rdate(datetime(1997, 9, 4, 9))
2306 set.rdate(datetime(1997, 9, 9, 9))
2307 self.assertEqual(list(set),
2308 [datetime(1997, 9, 2, 9, 0),
2309 datetime(1997, 9, 4, 9, 0),
2310 datetime(1997, 9, 9, 9, 0)])
2311
2312 def testSetExRule(self):
2313 set = rruleset()
2314 set.rrule(rrule(FREQ_YEARLY, count=6, byweekday=(TU,TH),
2315 dtstart=parse("19970902T090000")))
2316 set.exrule(rrule(FREQ_YEARLY, count=3, byweekday=TH,
2317 dtstart=parse("19970902T090000")))
2318 self.assertEqual(list(set),
2319 [datetime(1997, 9, 2, 9, 0),
2320 datetime(1997, 9, 9, 9, 0),
2321 datetime(1997, 9, 16, 9, 0)])
2322
2323 def testSetExDate(self):
2324 set = rruleset()
2325 set.rrule(rrule(FREQ_YEARLY, count=6, byweekday=(TU,TH),
2326 dtstart=parse("19970902T090000")))
2327 set.exdate(datetime(1997, 9, 4, 9))
2328 set.exdate(datetime(1997, 9, 11, 9))
2329 set.exdate(datetime(1997, 9, 18, 9))
2330 self.assertEqual(list(set),
2331 [datetime(1997, 9, 2, 9, 0),
2332 datetime(1997, 9, 9, 9, 0),
2333 datetime(1997, 9, 16, 9, 0)])
2334
2335 def testSetDateAndExDate(self):
2336 set = rruleset()
2337 set.rdate(datetime(1997, 9, 2, 9))
2338 set.rdate(datetime(1997, 9, 4, 9))
2339 set.rdate(datetime(1997, 9, 9, 9))
2340 set.rdate(datetime(1997, 9, 11, 9))
2341 set.rdate(datetime(1997, 9, 16, 9))
2342 set.rdate(datetime(1997, 9, 18, 9))
2343 set.exdate(datetime(1997, 9, 4, 9))
2344 set.exdate(datetime(1997, 9, 11, 9))
2345 set.exdate(datetime(1997, 9, 18, 9))
2346 self.assertEqual(list(set),
2347 [datetime(1997, 9, 2, 9, 0),
2348 datetime(1997, 9, 9, 9, 0),
2349 datetime(1997, 9, 16, 9, 0)])
2350
2351 def testSetDateAndExRule(self):
2352 set = rruleset()
2353 set.rdate(datetime(1997, 9, 2, 9))
2354 set.rdate(datetime(1997, 9, 4, 9))
2355 set.rdate(datetime(1997, 9, 9, 9))
2356 set.rdate(datetime(1997, 9, 11, 9))
2357 set.rdate(datetime(1997, 9, 16, 9))
2358 set.rdate(datetime(1997, 9, 18, 9))
2359 set.exrule(rrule(FREQ_YEARLY, count=3, byweekday=TH,
2360 dtstart=parse("19970902T090000")))
2361 self.assertEqual(list(set),
2362 [datetime(1997, 9, 2, 9, 0),
2363 datetime(1997, 9, 9, 9, 0),
2364 datetime(1997, 9, 16, 9, 0)])
2365
2366 def testStr(self):
2367 self.assertEqual(list(rrulestr(
2368 "DTSTART:19970902T090000\n"
2369 "RRULE:FREQ=YEARLY;COUNT=3\n"
2370 )),
2371 [datetime(1997, 9, 2, 9, 0),
2372 datetime(1998, 9, 2, 9, 0),
2373 datetime(1999, 9, 2, 9, 0)])
2374
2375 def testStrType(self):
2376 self.assertEqual(isinstance(rrulestr(
2377 "DTSTART:19970902T090000\n"
2378 "RRULE:FREQ=YEARLY;COUNT=3\n"
2379 ), rrule), True)
2380
2381 def testStrForceSetType(self):
2382 self.assertEqual(isinstance(rrulestr(
2383 "DTSTART:19970902T090000\n"
2384 "RRULE:FREQ=YEARLY;COUNT=3\n"
2385 , forceset=True), rruleset), True)
2386
2387 def testStrSetType(self):
2388 self.assertEqual(isinstance(rrulestr(
2389 "DTSTART:19970902T090000\n"
2390 "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n"
2391 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n"
2392 ), rruleset), True)
2393
2394 def testStrCase(self):
2395 self.assertEqual(list(rrulestr(
2396 "dtstart:19970902T090000\n"
2397 "rrule:freq=yearly;count=3\n"
2398 )),
2399 [datetime(1997, 9, 2, 9, 0),
2400 datetime(1998, 9, 2, 9, 0),
2401 datetime(1999, 9, 2, 9, 0)])
2402
2403 def testStrSpaces(self):
2404 self.assertEqual(list(rrulestr(
2405 " DTSTART:19970902T090000 "
2406 " RRULE:FREQ=YEARLY;COUNT=3 "
2407 )),
2408 [datetime(1997, 9, 2, 9, 0),
2409 datetime(1998, 9, 2, 9, 0),
2410 datetime(1999, 9, 2, 9, 0)])
2411
2412 def testStrSpacesAndLines(self):
2413 self.assertEqual(list(rrulestr(
2414 " DTSTART:19970902T090000 \n"
2415 " \n"
2416 " RRULE:FREQ=YEARLY;COUNT=3 \n"
2417 )),
2418 [datetime(1997, 9, 2, 9, 0),
2419 datetime(1998, 9, 2, 9, 0),
2420 datetime(1999, 9, 2, 9, 0)])
2421
2422 def testStrNoDTStart(self):
2423 self.assertEqual(list(rrulestr(
2424 "RRULE:FREQ=YEARLY;COUNT=3\n"
2425 , dtstart=parse("19970902T090000"))),
2426 [datetime(1997, 9, 2, 9, 0),
2427 datetime(1998, 9, 2, 9, 0),
2428 datetime(1999, 9, 2, 9, 0)])
2429
2430 def testStrValueOnly(self):
2431 self.assertEqual(list(rrulestr(
2432 "FREQ=YEARLY;COUNT=3\n"
2433 , dtstart=parse("19970902T090000"))),
2434 [datetime(1997, 9, 2, 9, 0),
2435 datetime(1998, 9, 2, 9, 0),
2436 datetime(1999, 9, 2, 9, 0)])
2437
2438 def testStrUnfold(self):
2439 self.assertEqual(list(rrulestr(
2440 "FREQ=YEA\n RLY;COUNT=3\n", unfold=True,
2441 dtstart=parse("19970902T090000"))),
2442 [datetime(1997, 9, 2, 9, 0),
2443 datetime(1998, 9, 2, 9, 0),
2444 datetime(1999, 9, 2, 9, 0)])
2445
2446 def testStrSet(self):
2447 self.assertEqual(list(rrulestr(
2448 "DTSTART:19970902T090000\n"
2449 "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n"
2450 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n"
2451 )),
2452 [datetime(1997, 9, 2, 9, 0),
2453 datetime(1997, 9, 4, 9, 0),
2454 datetime(1997, 9, 9, 9, 0)])
2455
2456 def testStrSetDate(self):
2457 self.assertEqual(list(rrulestr(
2458 "DTSTART:19970902T090000\n"
2459 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TU\n"
2460 "RDATE:19970904T090000\n"
2461 "RDATE:19970909T090000\n"
2462 )),
2463 [datetime(1997, 9, 2, 9, 0),
2464 datetime(1997, 9, 4, 9, 0),
2465 datetime(1997, 9, 9, 9, 0)])
2466
2467 def testStrSetExRule(self):
2468 self.assertEqual(list(rrulestr(
2469 "DTSTART:19970902T090000\n"
2470 "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n"
2471 "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n"
2472 )),
2473 [datetime(1997, 9, 2, 9, 0),
2474 datetime(1997, 9, 9, 9, 0),
2475 datetime(1997, 9, 16, 9, 0)])
2476
2477 def testStrSetExDate(self):
2478 self.assertEqual(list(rrulestr(
2479 "DTSTART:19970902T090000\n"
2480 "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n"
2481 "EXDATE:19970904T090000\n"
2482 "EXDATE:19970911T090000\n"
2483 "EXDATE:19970918T090000\n"
2484 )),
2485 [datetime(1997, 9, 2, 9, 0),
2486 datetime(1997, 9, 9, 9, 0),
2487 datetime(1997, 9, 16, 9, 0)])
2488
2489 def testStrSetDateAndExDate(self):
2490 self.assertEqual(list(rrulestr(
2491 "DTSTART:19970902T090000\n"
2492 "RDATE:19970902T090000\n"
2493 "RDATE:19970904T090000\n"
2494 "RDATE:19970909T090000\n"
2495 "RDATE:19970911T090000\n"
2496 "RDATE:19970916T090000\n"
2497 "RDATE:19970918T090000\n"
2498 "EXDATE:19970904T090000\n"
2499 "EXDATE:19970911T090000\n"
2500 "EXDATE:19970918T090000\n"
2501 )),
2502 [datetime(1997, 9, 2, 9, 0),
2503 datetime(1997, 9, 9, 9, 0),
2504 datetime(1997, 9, 16, 9, 0)])
2505
2506 def testStrSetDateAndExRule(self):
2507 self.assertEqual(list(rrulestr(
2508 "DTSTART:19970902T090000\n"
2509 "RDATE:19970902T090000\n"
2510 "RDATE:19970904T090000\n"
2511 "RDATE:19970909T090000\n"
2512 "RDATE:19970911T090000\n"
2513 "RDATE:19970916T090000\n"
2514 "RDATE:19970918T090000\n"
2515 "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n"
2516 )),
2517 [datetime(1997, 9, 2, 9, 0),
2518 datetime(1997, 9, 9, 9, 0),
2519 datetime(1997, 9, 16, 9, 0)])
2520
2521 def testStrKeywords(self):
2522 self.assertEqual(list(rrulestr(
2523 "DTSTART:19970902T090000\n"
2524 "RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=3;"
2525 "BYMONTH=3;BYWEEKDAY=TH;BYMONTHDAY=3;"
2526 "BYHOUR=3;BYMINUTE=3;BYSECOND=3\n"
2527 )),
2528 [datetime(2033, 3, 3, 3, 3, 3),
2529 datetime(2039, 3, 3, 3, 3, 3),
2530 datetime(2072, 3, 3, 3, 3, 3)])
2531
2532 def testStrNWeekDay(self):
2533 self.assertEqual(list(rrulestr(
2534 "DTSTART:19970902T090000\n"
2535 "RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n"
2536 )),
2537 [datetime(1997, 12, 25, 9, 0),
2538 datetime(1998, 1, 6, 9, 0),
2539 datetime(1998, 12, 31, 9, 0)])
2540
2541
2542
niemeyer68ae2752003-09-28 01:20:02 +00002543class ParserTest(unittest.TestCase):
2544 def setUp(self):
niemeyer97e19252003-10-06 05:52:04 +00002545 self.tzinfos = {"BRST": -10800}
niemeyer68ae2752003-09-28 01:20:02 +00002546 self.brsttz = tzoffset("BRST", -10800)
2547 self.default = datetime(2003, 9, 25)
2548
2549 def testDateCommandFormat(self):
2550 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
niemeyer97e19252003-10-06 05:52:04 +00002551 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002552 datetime(2003, 9, 25, 10, 36, 28,
2553 tzinfo=self.brsttz))
2554
2555 def testDateCommandFormatReversed(self):
2556 self.assertEqual(parse("2003 10:36:28 BRST 25 Sep Thu",
niemeyer97e19252003-10-06 05:52:04 +00002557 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002558 datetime(2003, 9, 25, 10, 36, 28,
2559 tzinfo=self.brsttz))
2560
2561 def testDateCommandFormatIgnoreTz(self):
2562 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
2563 ignoretz=True),
2564 datetime(2003, 9, 25, 10, 36, 28))
2565
2566 def testDateCommandFormatStrip1(self):
2567 self.assertEqual(parse("Thu Sep 25 10:36:28 2003"),
2568 datetime(2003, 9, 25, 10, 36, 28))
2569
2570 def testDateCommandFormatStrip2(self):
2571 self.assertEqual(parse("Thu Sep 25 10:36:28", default=self.default),
2572 datetime(2003, 9, 25, 10, 36, 28))
2573
2574 def testDateCommandFormatStrip3(self):
2575 self.assertEqual(parse("Thu Sep 10:36:28", default=self.default),
2576 datetime(2003, 9, 25, 10, 36, 28))
2577
2578 def testDateCommandFormatStrip4(self):
2579 self.assertEqual(parse("Thu 10:36:28", default=self.default),
2580 datetime(2003, 9, 25, 10, 36, 28))
2581
2582 def testDateCommandFormatStrip5(self):
2583 self.assertEqual(parse("Sep 10:36:28", default=self.default),
2584 datetime(2003, 9, 25, 10, 36, 28))
2585
2586 def testDateCommandFormatStrip6(self):
2587 self.assertEqual(parse("10:36:28", default=self.default),
2588 datetime(2003, 9, 25, 10, 36, 28))
2589
2590 def testDateCommandFormatStrip7(self):
2591 self.assertEqual(parse("10:36", default=self.default),
2592 datetime(2003, 9, 25, 10, 36))
2593
2594 def testDateCommandFormatStrip8(self):
2595 self.assertEqual(parse("Thu Sep 25 2003"),
2596 datetime(2003, 9, 25))
2597
2598 def testDateCommandFormatStrip9(self):
2599 self.assertEqual(parse("Sep 25 2003"),
2600 datetime(2003, 9, 25))
2601
2602 def testDateCommandFormatStrip9(self):
2603 self.assertEqual(parse("Sep 2003", default=self.default),
2604 datetime(2003, 9, 25))
2605
2606 def testDateCommandFormatStrip10(self):
2607 self.assertEqual(parse("Sep", default=self.default),
2608 datetime(2003, 9, 25))
2609
2610 def testDateCommandFormatStrip11(self):
2611 self.assertEqual(parse("2003", default=self.default),
2612 datetime(2003, 9, 25))
2613
2614 def testDateRCommandFormat(self):
2615 self.assertEqual(parse("Thu, 25 Sep 2003 10:49:41 -0300"),
2616 datetime(2003, 9, 25, 10, 49, 41,
2617 tzinfo=self.brsttz))
2618
2619 def testISOFormat(self):
2620 self.assertEqual(parse("2003-09-25T10:49:41.5-03:00"),
2621 datetime(2003, 9, 25, 10, 49, 41, 500000,
2622 tzinfo=self.brsttz))
2623
2624 def testISOFormatStrip1(self):
2625 self.assertEqual(parse("2003-09-25T10:49:41-03:00"),
2626 datetime(2003, 9, 25, 10, 49, 41,
2627 tzinfo=self.brsttz))
2628
2629 def testISOFormatStrip2(self):
2630 self.assertEqual(parse("2003-09-25T10:49:41"),
2631 datetime(2003, 9, 25, 10, 49, 41))
2632
2633 def testISOFormatStrip3(self):
2634 self.assertEqual(parse("2003-09-25T10:49"),
2635 datetime(2003, 9, 25, 10, 49))
2636
2637 def testISOFormatStrip4(self):
2638 self.assertEqual(parse("2003-09-25T10"),
2639 datetime(2003, 9, 25, 10))
2640
2641 def testISOFormatStrip5(self):
2642 self.assertEqual(parse("2003-09-25"),
2643 datetime(2003, 9, 25))
2644
2645 def testISOStrippedFormat(self):
2646 self.assertEqual(parse("20030925T104941.5-0300"),
2647 datetime(2003, 9, 25, 10, 49, 41, 500000,
2648 tzinfo=self.brsttz))
2649
2650 def testISOStrippedFormatStrip1(self):
2651 self.assertEqual(parse("20030925T104941-0300"),
2652 datetime(2003, 9, 25, 10, 49, 41,
2653 tzinfo=self.brsttz))
2654
2655 def testISOStrippedFormatStrip2(self):
2656 self.assertEqual(parse("20030925T104941"),
2657 datetime(2003, 9, 25, 10, 49, 41))
2658
2659 def testISOStrippedFormatStrip3(self):
2660 self.assertEqual(parse("20030925T1049"),
2661 datetime(2003, 9, 25, 10, 49, 0))
2662
2663 def testISOStrippedFormatStrip4(self):
2664 self.assertEqual(parse("20030925T10"),
2665 datetime(2003, 9, 25, 10))
2666
2667 def testISOStrippedFormatStrip5(self):
2668 self.assertEqual(parse("20030925"),
2669 datetime(2003, 9, 25))
2670
niemeyer6c067e02003-10-09 02:54:58 +00002671 def testNoSeparator1(self):
2672 self.assertEqual(parse("199709020908"),
2673 datetime(1997, 9, 2, 9, 8))
2674
2675 def testNoSeparator2(self):
2676 self.assertEqual(parse("19970902090807"),
2677 datetime(1997, 9, 2, 9, 8, 7))
2678
niemeyer68ae2752003-09-28 01:20:02 +00002679 def testDateWithDash1(self):
2680 self.assertEqual(parse("2003-09-25"),
2681 datetime(2003, 9, 25))
2682
2683 def testDateWithDash2(self):
2684 self.assertEqual(parse("2003-Sep-25"),
2685 datetime(2003, 9, 25))
2686
2687 def testDateWithDash3(self):
2688 self.assertEqual(parse("25-Sep-2003"),
2689 datetime(2003, 9, 25))
2690
2691 def testDateWithDash4(self):
2692 self.assertEqual(parse("25-Sep-2003"),
2693 datetime(2003, 9, 25))
2694
2695 def testDateWithDash5(self):
2696 self.assertEqual(parse("Sep-25-2003"),
2697 datetime(2003, 9, 25))
2698
2699 def testDateWithDash6(self):
2700 self.assertEqual(parse("09-25-2003"),
2701 datetime(2003, 9, 25))
2702
2703 def testDateWithDash7(self):
2704 self.assertEqual(parse("25-09-2003"),
2705 datetime(2003, 9, 25))
2706
2707 def testDateWithDash8(self):
2708 self.assertEqual(parse("10-09-2003", dayfirst=True),
2709 datetime(2003, 9, 10))
2710
2711 def testDateWithDash9(self):
2712 self.assertEqual(parse("10-09-2003"),
2713 datetime(2003, 10, 9))
2714
2715 def testDateWithDash10(self):
2716 self.assertEqual(parse("10-09-03"),
2717 datetime(2003, 10, 9))
2718
2719 def testDateWithDash11(self):
2720 self.assertEqual(parse("10-09-03", yearfirst=True),
2721 datetime(2010, 9, 3))
2722
2723 def testDateWithDot1(self):
2724 self.assertEqual(parse("2003.09.25"),
2725 datetime(2003, 9, 25))
2726
2727 def testDateWithDot2(self):
2728 self.assertEqual(parse("2003.Sep.25"),
2729 datetime(2003, 9, 25))
2730
2731 def testDateWithDot3(self):
2732 self.assertEqual(parse("25.Sep.2003"),
2733 datetime(2003, 9, 25))
2734
2735 def testDateWithDot4(self):
2736 self.assertEqual(parse("25.Sep.2003"),
2737 datetime(2003, 9, 25))
2738
2739 def testDateWithDot5(self):
2740 self.assertEqual(parse("Sep.25.2003"),
2741 datetime(2003, 9, 25))
2742
2743 def testDateWithDot6(self):
2744 self.assertEqual(parse("09.25.2003"),
2745 datetime(2003, 9, 25))
2746
2747 def testDateWithDot7(self):
2748 self.assertEqual(parse("25.09.2003"),
2749 datetime(2003, 9, 25))
2750
2751 def testDateWithDot8(self):
2752 self.assertEqual(parse("10.09.2003", dayfirst=True),
2753 datetime(2003, 9, 10))
2754
2755 def testDateWithDot9(self):
2756 self.assertEqual(parse("10.09.2003"),
2757 datetime(2003, 10, 9))
2758
2759 def testDateWithDot10(self):
2760 self.assertEqual(parse("10.09.03"),
2761 datetime(2003, 10, 9))
2762
2763 def testDateWithDot11(self):
2764 self.assertEqual(parse("10.09.03", yearfirst=True),
2765 datetime(2010, 9, 3))
2766
2767 def testDateWithSlash1(self):
2768 self.assertEqual(parse("2003/09/25"),
2769 datetime(2003, 9, 25))
2770
2771 def testDateWithSlash2(self):
2772 self.assertEqual(parse("2003/Sep/25"),
2773 datetime(2003, 9, 25))
2774
2775 def testDateWithSlash3(self):
2776 self.assertEqual(parse("25/Sep/2003"),
2777 datetime(2003, 9, 25))
2778
2779 def testDateWithSlash4(self):
2780 self.assertEqual(parse("25/Sep/2003"),
2781 datetime(2003, 9, 25))
2782
2783 def testDateWithSlash5(self):
2784 self.assertEqual(parse("Sep/25/2003"),
2785 datetime(2003, 9, 25))
2786
2787 def testDateWithSlash6(self):
2788 self.assertEqual(parse("09/25/2003"),
2789 datetime(2003, 9, 25))
2790
2791 def testDateWithSlash7(self):
2792 self.assertEqual(parse("25/09/2003"),
2793 datetime(2003, 9, 25))
2794
2795 def testDateWithSlash8(self):
2796 self.assertEqual(parse("10/09/2003", dayfirst=True),
2797 datetime(2003, 9, 10))
2798
2799 def testDateWithSlash9(self):
2800 self.assertEqual(parse("10/09/2003"),
2801 datetime(2003, 10, 9))
2802
2803 def testDateWithSlash10(self):
2804 self.assertEqual(parse("10/09/03"),
2805 datetime(2003, 10, 9))
2806
2807 def testDateWithSlash11(self):
2808 self.assertEqual(parse("10/09/03", yearfirst=True),
2809 datetime(2010, 9, 3))
2810
2811 def testDateWithSpace12(self):
2812 self.assertEqual(parse("25 09 03"),
2813 datetime(2003, 9, 25))
2814
2815 def testDateWithSpace13(self):
2816 self.assertEqual(parse("25 09 03"),
2817 datetime(2003, 9, 25))
2818
2819 def testDateWithSpace1(self):
2820 self.assertEqual(parse("2003 09 25"),
2821 datetime(2003, 9, 25))
2822
2823 def testDateWithSpace2(self):
2824 self.assertEqual(parse("2003 Sep 25"),
2825 datetime(2003, 9, 25))
2826
2827 def testDateWithSpace3(self):
2828 self.assertEqual(parse("25 Sep 2003"),
2829 datetime(2003, 9, 25))
2830
2831 def testDateWithSpace4(self):
2832 self.assertEqual(parse("25 Sep 2003"),
2833 datetime(2003, 9, 25))
2834
2835 def testDateWithSpace5(self):
2836 self.assertEqual(parse("Sep 25 2003"),
2837 datetime(2003, 9, 25))
2838
2839 def testDateWithSpace6(self):
2840 self.assertEqual(parse("09 25 2003"),
2841 datetime(2003, 9, 25))
2842
2843 def testDateWithSpace7(self):
2844 self.assertEqual(parse("25 09 2003"),
2845 datetime(2003, 9, 25))
2846
2847 def testDateWithSpace8(self):
2848 self.assertEqual(parse("10 09 2003", dayfirst=True),
2849 datetime(2003, 9, 10))
2850
2851 def testDateWithSpace9(self):
2852 self.assertEqual(parse("10 09 2003"),
2853 datetime(2003, 10, 9))
2854
2855 def testDateWithSpace10(self):
2856 self.assertEqual(parse("10 09 03"),
2857 datetime(2003, 10, 9))
2858
2859 def testDateWithSpace11(self):
2860 self.assertEqual(parse("10 09 03", yearfirst=True),
2861 datetime(2010, 9, 3))
2862
2863 def testDateWithSpace12(self):
2864 self.assertEqual(parse("25 09 03"),
2865 datetime(2003, 9, 25))
2866
2867 def testDateWithSpace13(self):
2868 self.assertEqual(parse("25 09 03"),
2869 datetime(2003, 9, 25))
2870
2871 def testStrangelyOrderedDate1(self):
2872 self.assertEqual(parse("03 25 Sep"),
2873 datetime(2003, 9, 25))
2874
2875 def testStrangelyOrderedDate2(self):
2876 self.assertEqual(parse("2003 25 Sep"),
2877 datetime(2003, 9, 25))
2878
2879 def testStrangelyOrderedDate3(self):
2880 self.assertEqual(parse("25 03 Sep"),
2881 datetime(2025, 9, 3))
2882
2883 def testHourWithLetters(self):
2884 self.assertEqual(parse("10h36m28.5s", default=self.default),
2885 datetime(2003, 9, 25, 10, 36, 28, 500000))
2886
2887 def testHourWithLettersStrip1(self):
2888 self.assertEqual(parse("10h36m28s", default=self.default),
2889 datetime(2003, 9, 25, 10, 36, 28))
2890
2891 def testHourWithLettersStrip1(self):
2892 self.assertEqual(parse("10h36m", default=self.default),
2893 datetime(2003, 9, 25, 10, 36))
2894
2895 def testHourWithLettersStrip2(self):
2896 self.assertEqual(parse("10h", default=self.default),
2897 datetime(2003, 9, 25, 10))
2898
2899 def testHourAmPm1(self):
2900 self.assertEqual(parse("10h am", default=self.default),
2901 datetime(2003, 9, 25, 10))
2902
2903 def testHourAmPm2(self):
2904 self.assertEqual(parse("10h pm", default=self.default),
2905 datetime(2003, 9, 25, 22))
2906
2907 def testHourAmPm3(self):
2908 self.assertEqual(parse("10am", default=self.default),
2909 datetime(2003, 9, 25, 10))
2910
2911 def testHourAmPm4(self):
2912 self.assertEqual(parse("10pm", default=self.default),
2913 datetime(2003, 9, 25, 22))
2914
2915 def testHourAmPm5(self):
2916 self.assertEqual(parse("10:00 am", default=self.default),
2917 datetime(2003, 9, 25, 10))
2918
2919 def testHourAmPm6(self):
2920 self.assertEqual(parse("10:00 pm", default=self.default),
2921 datetime(2003, 9, 25, 22))
2922
2923 def testHourAmPm7(self):
2924 self.assertEqual(parse("10:00am", default=self.default),
2925 datetime(2003, 9, 25, 10))
2926
2927 def testHourAmPm8(self):
2928 self.assertEqual(parse("10:00pm", default=self.default),
2929 datetime(2003, 9, 25, 22))
2930
2931 def testHourAmPm9(self):
2932 self.assertEqual(parse("10:00a.m", default=self.default),
2933 datetime(2003, 9, 25, 10))
2934
2935 def testHourAmPm10(self):
2936 self.assertEqual(parse("10:00p.m", default=self.default),
2937 datetime(2003, 9, 25, 22))
2938
2939 def testHourAmPm11(self):
2940 self.assertEqual(parse("10:00a.m.", default=self.default),
2941 datetime(2003, 9, 25, 10))
2942
2943 def testHourAmPm12(self):
2944 self.assertEqual(parse("10:00p.m.", default=self.default),
2945 datetime(2003, 9, 25, 22))
2946
2947 def testPertain(self):
2948 self.assertEqual(parse("Sep 03", default=self.default),
2949 datetime(2003, 9, 3))
2950 self.assertEqual(parse("Sep of 03", default=self.default),
2951 datetime(2003, 9, 25))
2952
2953 def testWeekdayAlone(self):
2954 self.assertEqual(parse("Wed", default=self.default),
2955 datetime(2003, 10, 1))
2956
2957 def testLongWeekday(self):
2958 self.assertEqual(parse("Wednesday", default=self.default),
2959 datetime(2003, 10, 1))
2960
2961 def testLongMonth(self):
2962 self.assertEqual(parse("October", default=self.default),
2963 datetime(2003, 10, 25))
2964
2965 def testFuzzy(self):
2966 s = "Today is 25 of September of 2003, exactly " \
2967 "at 10:49:41 with timezone -03:00."
2968 self.assertEqual(parse(s, fuzzy=True),
2969 datetime(2003, 9, 25, 10, 49, 41,
2970 tzinfo=self.brsttz))
2971
2972 def testExtraSpace(self):
2973 self.assertEqual(parse(" July 4 , 1976 12:01:02 am "),
2974 datetime(1976, 7, 4, 0, 1, 2))
2975
2976 def testRandomFormat1(self):
2977 self.assertEqual(parse("Wed, July 10, '96"),
2978 datetime(1996, 7, 10, 0, 0))
2979
2980 def testRandomFormat2(self):
2981 self.assertEqual(parse("1996.07.10 AD at 15:08:56 PDT",
2982 ignoretz=True),
2983 datetime(1996, 7, 10, 15, 8, 56))
2984
2985 def testRandomFormat3(self):
2986 self.assertEqual(parse("1996.July.10 AD 12:08 PM"),
2987 datetime(1996, 7, 10, 12, 8))
2988
2989 def testRandomFormat4(self):
2990 self.assertEqual(parse("Tuesday, April 12, 1952 AD 3:30:42pm PST",
2991 ignoretz=True),
2992 datetime(1952, 4, 12, 15, 30, 42))
2993
2994 def testRandomFormat5(self):
2995 self.assertEqual(parse("November 5, 1994, 8:15:30 am EST",
2996 ignoretz=True),
2997 datetime(1994, 11, 5, 8, 15, 30))
2998
2999 def testRandomFormat6(self):
3000 self.assertEqual(parse("1994-11-05T08:15:30-05:00",
3001 ignoretz=True),
3002 datetime(1994, 11, 5, 8, 15, 30))
3003
3004 def testRandomFormat7(self):
3005 self.assertEqual(parse("1994-11-05T08:15:30Z",
3006 ignoretz=True),
3007 datetime(1994, 11, 5, 8, 15, 30))
3008
3009 def testRandomFormat8(self):
3010 self.assertEqual(parse("July 4, 1976"), datetime(1976, 7, 4))
3011
3012 def testRandomFormat9(self):
3013 self.assertEqual(parse("7 4 1976"), datetime(1976, 7, 4))
3014
3015 def testRandomFormat10(self):
3016 self.assertEqual(parse("4 jul 1976"), datetime(1976, 7, 4))
3017
3018 def testRandomFormat11(self):
3019 self.assertEqual(parse("7-4-76"), datetime(1976, 7, 4))
3020
3021 def testRandomFormat12(self):
3022 self.assertEqual(parse("19760704"), datetime(1976, 7, 4))
3023
3024 def testRandomFormat13(self):
3025 self.assertEqual(parse("0:01:02", default=self.default),
3026 datetime(2003, 9, 25, 0, 1, 2))
3027
3028 def testRandomFormat14(self):
3029 self.assertEqual(parse("12h 01m02s am", default=self.default),
3030 datetime(2003, 9, 25, 0, 1, 2))
3031
3032 def testRandomFormat15(self):
3033 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3034 datetime(1976, 7, 4, 0, 1, 2))
3035
3036 def testRandomFormat16(self):
3037 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3038 datetime(1976, 7, 4, 0, 1, 2))
3039
3040 def testRandomFormat17(self):
3041 self.assertEqual(parse("1976-07-04T00:01:02Z", ignoretz=True),
3042 datetime(1976, 7, 4, 0, 1, 2))
3043
3044 def testRandomFormat18(self):
3045 self.assertEqual(parse("July 4, 1976 12:01:02 am"),
3046 datetime(1976, 7, 4, 0, 1, 2))
3047
3048 def testRandomFormat19(self):
3049 self.assertEqual(parse("Mon Jan 2 04:24:27 1995"),
3050 datetime(1995, 1, 2, 4, 24, 27))
3051
3052 def testRandomFormat20(self):
3053 self.assertEqual(parse("Tue Apr 4 00:22:12 PDT 1995", ignoretz=True),
3054 datetime(1995, 4, 4, 0, 22, 12))
3055
3056 def testRandomFormat21(self):
3057 self.assertEqual(parse("04.04.95 00:22"),
3058 datetime(1995, 4, 4, 0, 22))
3059
3060 def testRandomFormat22(self):
3061 self.assertEqual(parse("Jan 1 1999 11:23:34.578"),
3062 datetime(1999, 1, 1, 11, 23, 34, 578000))
3063
3064 def testRandomFormat23(self):
3065 self.assertEqual(parse("950404 122212"),
3066 datetime(1995, 4, 4, 12, 22, 12))
3067
3068 def testRandomFormat24(self):
3069 self.assertEqual(parse("0:00 PM, PST", default=self.default,
3070 ignoretz=True),
3071 datetime(2003, 9, 25, 12, 0))
3072
3073 def testRandomFormat25(self):
3074 self.assertEqual(parse("12:08 PM", default=self.default),
3075 datetime(2003, 9, 25, 12, 8))
3076
3077 def testRandomFormat26(self):
3078 self.assertEqual(parse("5:50 A.M. on June 13, 1990"),
3079 datetime(1990, 6, 13, 5, 50))
3080
3081 def testRandomFormat27(self):
3082 self.assertEqual(parse("3rd of May 2001"), datetime(2001, 5, 3))
3083
3084 def testRandomFormat28(self):
3085 self.assertEqual(parse("5th of March 2001"), datetime(2001, 3, 5))
3086
3087 def testRandomFormat29(self):
3088 self.assertEqual(parse("1st of May 2003"), datetime(2003, 5, 1))
3089
3090 def testRandomFormat30(self):
3091 self.assertEqual(parse("01h02m03", default=self.default),
3092 datetime(2003, 9, 25, 1, 2, 3))
3093
3094 def testRandomFormat31(self):
3095 self.assertEqual(parse("01h02", default=self.default),
3096 datetime(2003, 9, 25, 1, 2))
3097
3098 def testRandomFormat32(self):
3099 self.assertEqual(parse("01h02s", default=self.default),
3100 datetime(2003, 9, 25, 1, 0, 2))
3101
3102 def testRandomFormat33(self):
3103 self.assertEqual(parse("01m02", default=self.default),
3104 datetime(2003, 9, 25, 0, 1, 2))
3105
3106 def testRandomFormat34(self):
3107 self.assertEqual(parse("01m02h", default=self.default),
3108 datetime(2003, 9, 25, 2, 1))
3109
3110class EasterTest(unittest.TestCase):
3111 easterlist = [
3112 # WESTERN ORTHODOX
3113 (date(1990, 4, 15), date(1990, 4, 15)),
3114 (date(1991, 3, 31), date(1991, 4, 7)),
3115 (date(1992, 4, 19), date(1992, 4, 26)),
3116 (date(1993, 4, 11), date(1993, 4, 18)),
3117 (date(1994, 4, 3), date(1994, 5, 1)),
3118 (date(1995, 4, 16), date(1995, 4, 23)),
3119 (date(1996, 4, 7), date(1996, 4, 14)),
3120 (date(1997, 3, 30), date(1997, 4, 27)),
3121 (date(1998, 4, 12), date(1998, 4, 19)),
3122 (date(1999, 4, 4), date(1999, 4, 11)),
3123
3124 (date(2000, 4, 23), date(2000, 4, 30)),
3125 (date(2001, 4, 15), date(2001, 4, 15)),
3126 (date(2002, 3, 31), date(2002, 5, 5)),
3127 (date(2003, 4, 20), date(2003, 4, 27)),
3128 (date(2004, 4, 11), date(2004, 4, 11)),
3129 (date(2005, 3, 27), date(2005, 5, 1)),
3130 (date(2006, 4, 16), date(2006, 4, 23)),
3131 (date(2007, 4, 8), date(2007, 4, 8)),
3132 (date(2008, 3, 23), date(2008, 4, 27)),
3133 (date(2009, 4, 12), date(2009, 4, 19)),
3134
3135 (date(2010, 4, 4), date(2010, 4, 4)),
3136 (date(2011, 4, 24), date(2011, 4, 24)),
3137 (date(2012, 4, 8), date(2012, 4, 15)),
3138 (date(2013, 3, 31), date(2013, 5, 5)),
3139 (date(2014, 4, 20), date(2014, 4, 20)),
3140 (date(2015, 4, 5), date(2015, 4, 12)),
3141 (date(2016, 3, 27), date(2016, 5, 1)),
3142 (date(2017, 4, 16), date(2017, 4, 16)),
3143 (date(2018, 4, 1), date(2018, 4, 8)),
3144 (date(2019, 4, 21), date(2019, 4, 28)),
3145
3146 (date(2020, 4, 12), date(2020, 4, 19)),
3147 (date(2021, 4, 4), date(2021, 5, 2)),
3148 (date(2022, 4, 17), date(2022, 4, 24)),
3149 (date(2023, 4, 9), date(2023, 4, 16)),
3150 (date(2024, 3, 31), date(2024, 5, 5)),
3151 (date(2025, 4, 20), date(2025, 4, 20)),
3152 (date(2026, 4, 5), date(2026, 4, 12)),
3153 (date(2027, 3, 28), date(2027, 5, 2)),
3154 (date(2028, 4, 16), date(2028, 4, 16)),
3155 (date(2029, 4, 1), date(2029, 4, 8)),
3156
3157 (date(2030, 4, 21), date(2030, 4, 28)),
3158 (date(2031, 4, 13), date(2031, 4, 13)),
3159 (date(2032, 3, 28), date(2032, 5, 2)),
3160 (date(2033, 4, 17), date(2033, 4, 24)),
3161 (date(2034, 4, 9), date(2034, 4, 9)),
3162 (date(2035, 3, 25), date(2035, 4, 29)),
3163 (date(2036, 4, 13), date(2036, 4, 20)),
3164 (date(2037, 4, 5), date(2037, 4, 5)),
3165 (date(2038, 4, 25), date(2038, 4, 25)),
3166 (date(2039, 4, 10), date(2039, 4, 17)),
3167
3168 (date(2040, 4, 1), date(2040, 5, 6)),
3169 (date(2041, 4, 21), date(2041, 4, 21)),
3170 (date(2042, 4, 6), date(2042, 4, 13)),
3171 (date(2043, 3, 29), date(2043, 5, 3)),
3172 (date(2044, 4, 17), date(2044, 4, 24)),
3173 (date(2045, 4, 9), date(2045, 4, 9)),
3174 (date(2046, 3, 25), date(2046, 4, 29)),
3175 (date(2047, 4, 14), date(2047, 4, 21)),
3176 (date(2048, 4, 5), date(2048, 4, 5)),
3177 (date(2049, 4, 18), date(2049, 4, 25)),
3178
3179 (date(2050, 4, 10), date(2050, 4, 17)),
3180 ]
3181
3182 def testEaster(self):
3183 for western, orthodox in self.easterlist:
3184 self.assertEqual(western, easter(western.year, EASTER_WESTERN))
3185 self.assertEqual(orthodox, easter(orthodox.year, EASTER_ORTHODOX))
3186
3187class TZTest(unittest.TestCase):
3188
niemeyer36139372003-10-07 01:48:15 +00003189 TZFILE_EST5EDT = """
niemeyer68ae2752003-09-28 01:20:02 +00003190VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh
3191ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e
3192S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0
3193YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg
3194yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db
3195wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW
31968uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b
3197YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g
3198BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR
3199iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x
3200znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H
3201cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w
3202Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH
3203JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM
3204jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w
32054GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg
3206b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8
3207o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3208AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3209AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
3210AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3211AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU
3212AEVQVAAAAAABAAAAAQ==
3213 """
3214
niemeyer36139372003-10-07 01:48:15 +00003215 TZICAL_EST5EDT = """
3216BEGIN:VTIMEZONE
3217TZID:US-Eastern
3218LAST-MODIFIED:19870101T000000Z
3219TZURL:http://zones.stds_r_us.net/tz/US-Eastern
3220BEGIN:STANDARD
3221DTSTART:19671029T020000
3222RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
3223TZOFFSETFROM:-0400
3224TZOFFSETTO:-0500
3225TZNAME:EST
3226END:STANDARD
3227BEGIN:DAYLIGHT
3228DTSTART:19870405T020000
3229RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
3230TZOFFSETFROM:-0500
3231TZOFFSETTO:-0400
3232TZNAME:EDT
3233END:DAYLIGHT
3234END:VTIMEZONE
3235 """
3236
niemeyer68ae2752003-09-28 01:20:02 +00003237 def testStrStart1(self):
3238 self.assertEqual(datetime(2003,4,6,1,59,
3239 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3240 self.assertEqual(datetime(2003,4,6,2,00,
3241 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3242
3243 def testStrEnd1(self):
3244 self.assertEqual(datetime(2003,10,26,0,59,
3245 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3246 self.assertEqual(datetime(2003,10,26,1,00,
3247 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3248
3249 def testStrStart2(self):
3250 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3251 self.assertEqual(datetime(2003,4,6,1,59,
3252 tzinfo=tzstr(s)).tzname(), "EST")
3253 self.assertEqual(datetime(2003,4,6,2,00,
3254 tzinfo=tzstr(s)).tzname(), "EDT")
3255
3256 def testStrEnd2(self):
3257 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3258 self.assertEqual(datetime(2003,10,26,0,59,
3259 tzinfo=tzstr(s)).tzname(), "EDT")
3260 self.assertEqual(datetime(2003,10,26,1,00,
3261 tzinfo=tzstr(s)).tzname(), "EST")
3262
3263 def testStrStart3(self):
3264 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3265 self.assertEqual(datetime(2003,4,6,1,59,
3266 tzinfo=tzstr(s)).tzname(), "EST")
3267 self.assertEqual(datetime(2003,4,6,2,00,
3268 tzinfo=tzstr(s)).tzname(), "EDT")
3269
3270 def testStrEnd3(self):
3271 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3272 self.assertEqual(datetime(2003,10,26,0,59,
3273 tzinfo=tzstr(s)).tzname(), "EDT")
3274 self.assertEqual(datetime(2003,10,26,1,00,
3275 tzinfo=tzstr(s)).tzname(), "EST")
3276
3277 def testStrStart4(self):
3278 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
3279 self.assertEqual(datetime(2003,4,6,1,59,
3280 tzinfo=tzstr(s)).tzname(), "EST")
3281 self.assertEqual(datetime(2003,4,6,2,00,
3282 tzinfo=tzstr(s)).tzname(), "EDT")
3283
3284 def testStrEnd4(self):
3285 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
3286 self.assertEqual(datetime(2003,10,26,0,59,
3287 tzinfo=tzstr(s)).tzname(), "EDT")
3288 self.assertEqual(datetime(2003,10,26,1,00,
3289 tzinfo=tzstr(s)).tzname(), "EST")
3290
3291 def testStrStart5(self):
3292 s = "EST5EDT4,95/02:00:00,298/02:00"
3293 self.assertEqual(datetime(2003,4,6,1,59,
3294 tzinfo=tzstr(s)).tzname(), "EST")
3295 self.assertEqual(datetime(2003,4,6,2,00,
3296 tzinfo=tzstr(s)).tzname(), "EDT")
3297
3298 def testStrEnd5(self):
3299 s = "EST5EDT4,95/02:00:00,298/02"
3300 self.assertEqual(datetime(2003,10,26,0,59,
3301 tzinfo=tzstr(s)).tzname(), "EDT")
3302 self.assertEqual(datetime(2003,10,26,1,00,
3303 tzinfo=tzstr(s)).tzname(), "EST")
3304
3305 def testStrStart6(self):
3306 s = "EST5EDT4,J96/02:00:00,J299/02:00"
3307 self.assertEqual(datetime(2003,4,6,1,59,
3308 tzinfo=tzstr(s)).tzname(), "EST")
3309 self.assertEqual(datetime(2003,4,6,2,00,
3310 tzinfo=tzstr(s)).tzname(), "EDT")
3311
3312 def testStrEnd6(self):
3313 s = "EST5EDT4,J96/02:00:00,J299/02"
3314 self.assertEqual(datetime(2003,10,26,0,59,
3315 tzinfo=tzstr(s)).tzname(), "EDT")
3316 self.assertEqual(datetime(2003,10,26,1,00,
3317 tzinfo=tzstr(s)).tzname(), "EST")
3318
3319 def testStrCmp1(self):
3320 self.assertEqual(tzstr("EST5EDT"),
3321 tzstr("EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"))
3322
3323 def testStrCmp2(self):
3324 self.assertEqual(tzstr("EST5EDT"),
3325 tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200,3600"))
3326
3327 def testRangeCmp1(self):
3328 self.assertEqual(tzstr("EST5EDT"),
3329 tzrange("EST", -18000, "EDT", -14400,
3330 relativedelta(hours=+2,
3331 month=4, day=1,
niemeyerb47d12a2003-09-29 20:00:21 +00003332 weekday=SU(+1)),
niemeyer68ae2752003-09-28 01:20:02 +00003333 relativedelta(hours=+1,
3334 month=10, day=31,
niemeyerb47d12a2003-09-29 20:00:21 +00003335 weekday=SU(-1))))
niemeyer68ae2752003-09-28 01:20:02 +00003336
3337 def testRangeCmp2(self):
3338 self.assertEqual(tzstr("EST5EDT"),
3339 tzrange("EST", -18000, "EDT"))
3340
3341 def testFileStart1(self):
niemeyer36139372003-10-07 01:48:15 +00003342 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
niemeyer68ae2752003-09-28 01:20:02 +00003343 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3344 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3345
3346 def testFileEnd1(self):
niemeyer36139372003-10-07 01:48:15 +00003347 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
3348 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3349 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3350
3351 def testICalStart1(self):
3352 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
3353 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3354 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3355
3356 def testICalEnd1(self):
3357 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
niemeyer68ae2752003-09-28 01:20:02 +00003358 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3359 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3360
3361if __name__ == "__main__":
3362 unittest.main()
3363
3364# vim:ts=4:sw=4