blob: b007a6712f04e2060a7ebcd149b27ec2b6bcb209 [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 *
niemeyer38fbb772005-07-19 23:35:26 +000020from dateutil import zoneinfo
niemeyer68ae2752003-09-28 01:20:02 +000021
22from datetime import *
23
24import calendar
25import time
26
27class RelativeDeltaTest(unittest.TestCase):
28 now = datetime(2003, 9, 17, 20, 54, 47, 282310)
29 today = date(2003, 9, 17)
30
31 def testNextMonth(self):
32 self.assertEqual(self.now+relativedelta(months=+1),
33 datetime(2003, 10, 17, 20, 54, 47, 282310))
34
35 def testNextMonthPlusOneWeek(self):
36 self.assertEqual(self.now+relativedelta(months=+1, weeks=+1),
37 datetime(2003, 10, 24, 20, 54, 47, 282310))
38 def testNextMonthPlusOneWeek10am(self):
39 self.assertEqual(self.today +
40 relativedelta(months=+1, weeks=+1, hour=10),
41 datetime(2003, 10, 24, 10, 0))
42
43 def testNextMonthPlusOneWeek10amDiff(self):
44 self.assertEqual(relativedelta(datetime(2003, 10, 24, 10, 0),
45 self.today),
46 relativedelta(months=+1, days=+7, hours=+10))
47
48 def testOneMonthBeforeOneYear(self):
49 self.assertEqual(self.now+relativedelta(years=+1, months=-1),
50 datetime(2004, 8, 17, 20, 54, 47, 282310))
51
52 def testMonthsOfDiffNumOfDays(self):
53 self.assertEqual(date(2003, 1, 27)+relativedelta(months=+1),
54 date(2003, 2, 27))
55 self.assertEqual(date(2003, 1, 31)+relativedelta(months=+1),
56 date(2003, 2, 28))
57 self.assertEqual(date(2003, 1, 31)+relativedelta(months=+2),
58 date(2003, 3, 31))
59
60 def testMonthsOfDiffNumOfDaysWithYears(self):
61 self.assertEqual(date(2000, 2, 28)+relativedelta(years=+1),
62 date(2001, 2, 28))
63 self.assertEqual(date(2000, 2, 29)+relativedelta(years=+1),
64 date(2001, 2, 28))
65
66 self.assertEqual(date(1999, 2, 28)+relativedelta(years=+1),
67 date(2000, 2, 28))
68 self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1),
69 date(2000, 3, 1))
70 self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1),
71 date(2000, 3, 1))
72
73 self.assertEqual(date(2001, 2, 28)+relativedelta(years=-1),
74 date(2000, 2, 28))
75 self.assertEqual(date(2001, 3, 1)+relativedelta(years=-1),
76 date(2000, 3, 1))
77
78 def testNextFriday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000079 self.assertEqual(self.today+relativedelta(weekday=FR),
80 date(2003, 9, 19))
81
82 def testNextFridayInt(self):
83 self.assertEqual(self.today+relativedelta(weekday=calendar.FRIDAY),
niemeyer68ae2752003-09-28 01:20:02 +000084 date(2003, 9, 19))
85
86 def testLastFridayInThisMonth(self):
niemeyerb47d12a2003-09-29 20:00:21 +000087 self.assertEqual(self.today+relativedelta(day=31, weekday=FR(-1)),
niemeyer68ae2752003-09-28 01:20:02 +000088 date(2003, 9, 26))
89
90 def testNextWednesdayIsToday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000091 self.assertEqual(self.today+relativedelta(weekday=WE),
niemeyer68ae2752003-09-28 01:20:02 +000092 date(2003, 9, 17))
93
94
95 def testNextWenesdayNotToday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000096 self.assertEqual(self.today+relativedelta(days=+1, weekday=WE),
niemeyer68ae2752003-09-28 01:20:02 +000097 date(2003, 9, 24))
98
99 def test15thISOYearWeek(self):
100 self.assertEqual(date(2003, 1, 1) +
niemeyerb47d12a2003-09-29 20:00:21 +0000101 relativedelta(day=4, weeks=+14, weekday=MO(-1)),
niemeyer68ae2752003-09-28 01:20:02 +0000102 date(2003, 4, 7))
103
104 def testMillenniumAge(self):
105 self.assertEqual(relativedelta(self.now, date(2001,1,1)),
106 relativedelta(years=+2, months=+8, days=+16,
107 hours=+20, minutes=+54, seconds=+47,
108 microseconds=+282310))
109
110 def testJohnAge(self):
111 self.assertEqual(relativedelta(self.now,
112 datetime(1978, 4, 5, 12, 0)),
113 relativedelta(years=+25, months=+5, days=+12,
114 hours=+8, minutes=+54, seconds=+47,
115 microseconds=+282310))
116
117 def testJohnAgeWithDate(self):
118 self.assertEqual(relativedelta(self.today,
119 datetime(1978, 4, 5, 12, 0)),
120 relativedelta(years=+25, months=+5, days=+11,
121 hours=+12))
122
123 def testYearDay(self):
124 self.assertEqual(date(2003, 1, 1)+relativedelta(yearday=260),
125 date(2003, 9, 17))
126 self.assertEqual(date(2002, 1, 1)+relativedelta(yearday=260),
127 date(2002, 9, 17))
128 self.assertEqual(date(2000, 1, 1)+relativedelta(yearday=260),
129 date(2000, 9, 16))
130 self.assertEqual(self.today+relativedelta(yearday=261),
131 date(2003, 9, 18))
132
133 def testNonLeapYearDay(self):
134 self.assertEqual(date(2003, 1, 1)+relativedelta(nlyearday=260),
135 date(2003, 9, 17))
136 self.assertEqual(date(2002, 1, 1)+relativedelta(nlyearday=260),
137 date(2002, 9, 17))
138 self.assertEqual(date(2000, 1, 1)+relativedelta(nlyearday=260),
139 date(2000, 9, 17))
140 self.assertEqual(self.today+relativedelta(yearday=261),
141 date(2003, 9, 18))
142
niemeyercb08a352003-10-08 06:02:06 +0000143class RRuleTest(unittest.TestCase):
144
145 def testYearly(self):
niemeyer4da06a42004-07-16 21:21:22 +0000146 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000147 count=3,
148 dtstart=parse("19970902T090000"))),
149 [datetime(1997, 9, 2, 9, 0),
150 datetime(1998, 9, 2, 9, 0),
151 datetime(1999, 9, 2, 9, 0)])
152
niemeyercb08a352003-10-08 06:02:06 +0000153 def testYearlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +0000154 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000155 count=3,
156 interval=2,
157 dtstart=parse("19970902T090000"))),
158 [datetime(1997, 9, 2, 9, 0),
159 datetime(1999, 9, 2, 9, 0),
160 datetime(2001, 9, 2, 9, 0)])
161
162 def testYearlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000163 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000164 count=3,
165 interval=100,
166 dtstart=parse("19970902T090000"))),
167 [datetime(1997, 9, 2, 9, 0),
168 datetime(2097, 9, 2, 9, 0),
169 datetime(2197, 9, 2, 9, 0)])
170
171 def testYearlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +0000172 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000173 count=3,
174 bymonth=(1,3),
175 dtstart=parse("19970902T090000"))),
176 [datetime(1998, 1, 2, 9, 0),
177 datetime(1998, 3, 2, 9, 0),
178 datetime(1999, 1, 2, 9, 0)])
179
180 def testYearlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000181 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000182 count=3,
183 bymonthday=(1,3),
184 dtstart=parse("19970902T090000"))),
185 [datetime(1997, 9, 3, 9, 0),
186 datetime(1997, 10, 1, 9, 0),
187 datetime(1997, 10, 3, 9, 0)])
188
189 def testYearlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000190 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000191 count=3,
192 bymonth=(1,3),
193 bymonthday=(5,7),
194 dtstart=parse("19970902T090000"))),
195 [datetime(1998, 1, 5, 9, 0),
196 datetime(1998, 1, 7, 9, 0),
197 datetime(1998, 3, 5, 9, 0)])
198
199 def testYearlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000200 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000201 count=3,
202 byweekday=(TU,TH),
203 dtstart=parse("19970902T090000"))),
204 [datetime(1997, 9, 2, 9, 0),
205 datetime(1997, 9, 4, 9, 0),
206 datetime(1997, 9, 9, 9, 0)])
207
niemeyer7d8be1a2003-10-09 01:09:42 +0000208 def testYearlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000209 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000210 count=3,
211 byweekday=(TU(1),TH(-1)),
212 dtstart=parse("19970902T090000"))),
213 [datetime(1997, 12, 25, 9, 0),
214 datetime(1998, 1, 6, 9, 0),
215 datetime(1998, 12, 31, 9, 0)])
216
217 def testYearlyByNWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000218 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000219 count=3,
220 byweekday=(TU(3),TH(-3)),
221 dtstart=parse("19970902T090000"))),
222 [datetime(1997, 12, 11, 9, 0),
223 datetime(1998, 1, 20, 9, 0),
224 datetime(1998, 12, 17, 9, 0)])
225
niemeyercb08a352003-10-08 06:02:06 +0000226 def testYearlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000227 self.assertEqual(list(rrule(YEARLY,
niemeyercb08a352003-10-08 06:02:06 +0000228 count=3,
229 bymonth=(1,3),
230 byweekday=(TU,TH),
231 dtstart=parse("19970902T090000"))),
232 [datetime(1998, 1, 1, 9, 0),
233 datetime(1998, 1, 6, 9, 0),
234 datetime(1998, 1, 8, 9, 0)])
235
niemeyer7d8be1a2003-10-09 01:09:42 +0000236 def testYearlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000237 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000238 count=3,
239 bymonth=(1,3),
240 byweekday=(TU(1),TH(-1)),
241 dtstart=parse("19970902T090000"))),
242 [datetime(1998, 1, 6, 9, 0),
243 datetime(1998, 1, 29, 9, 0),
244 datetime(1998, 3, 3, 9, 0)])
245
246 def testYearlyByMonthAndNWeekDayLarge(self):
247 # This is interesting because the TH(-3) ends up before
248 # the TU(3).
niemeyer4da06a42004-07-16 21:21:22 +0000249 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000250 count=3,
251 bymonth=(1,3),
252 byweekday=(TU(3),TH(-3)),
253 dtstart=parse("19970902T090000"))),
254 [datetime(1998, 1, 15, 9, 0),
255 datetime(1998, 1, 20, 9, 0),
256 datetime(1998, 3, 12, 9, 0)])
257
258 def testYearlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000259 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000260 count=3,
261 bymonthday=(1,3),
262 byweekday=(TU,TH),
263 dtstart=parse("19970902T090000"))),
264 [datetime(1998, 1, 1, 9, 0),
265 datetime(1998, 2, 3, 9, 0),
266 datetime(1998, 3, 3, 9, 0)])
267
268 def testYearlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000269 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000270 count=3,
271 bymonth=(1,3),
272 bymonthday=(1,3),
273 byweekday=(TU,TH),
274 dtstart=parse("19970902T090000"))),
275 [datetime(1998, 1, 1, 9, 0),
276 datetime(1998, 3, 3, 9, 0),
277 datetime(2001, 3, 1, 9, 0)])
278
279 def testYearlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000280 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000281 count=3,
282 byyearday=(1,100,200),
283 dtstart=parse("19970902T090000"))),
284 [datetime(1998, 1, 1, 9, 0),
285 datetime(1998, 4, 10, 9, 0),
286 datetime(1998, 7, 19, 9, 0)])
287
288 def testYearlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000289 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000290 count=3,
291 bymonth=(4,7),
292 byyearday=(1,100,200),
293 dtstart=parse("19970902T090000"))),
294 [datetime(1998, 4, 10, 9, 0),
295 datetime(1998, 7, 19, 9, 0),
296 datetime(1999, 4, 10, 9, 0)])
297
298 def testYearlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +0000299 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000300 count=3,
301 byweekno=20,
302 dtstart=parse("19970902T090000"))),
303 [datetime(1998, 5, 11, 9, 0),
304 datetime(1998, 5, 12, 9, 0),
305 datetime(1998, 5, 13, 9, 0)])
306
307 def testYearlyByWeekNoAndWeekDay(self):
308 # That's a nice one. The first days of week number one
309 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +0000310 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000311 count=3,
312 byweekno=1,
313 byweekday=MO,
314 dtstart=parse("19970902T090000"))),
315 [datetime(1997, 12, 29, 9, 0),
316 datetime(1999, 1, 4, 9, 0),
317 datetime(2000, 1, 3, 9, 0)])
318
319 def testYearlyByWeekNoAndWeekDayLarge(self):
320 # Another nice test. The last days of week number 52/53
321 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +0000322 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000323 count=3,
324 byweekno=52,
325 byweekday=SU,
326 dtstart=parse("19970902T090000"))),
327 [datetime(1997, 12, 28, 9, 0),
328 datetime(1998, 12, 27, 9, 0),
329 datetime(2000, 1, 2, 9, 0)])
330
331 def testYearlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +0000332 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000333 count=3,
334 byweekno=-1,
335 byweekday=SU,
336 dtstart=parse("19970902T090000"))),
337 [datetime(1997, 12, 28, 9, 0),
338 datetime(1999, 1, 3, 9, 0),
339 datetime(2000, 1, 2, 9, 0)])
340
341 def testYearlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +0000342 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000343 count=3,
344 byeaster=0,
345 dtstart=parse("19970902T090000"))),
346 [datetime(1998, 4, 12, 9, 0),
347 datetime(1999, 4, 4, 9, 0),
348 datetime(2000, 4, 23, 9, 0)])
349
350 def testYearlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000351 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000352 count=3,
353 byeaster=1,
354 dtstart=parse("19970902T090000"))),
355 [datetime(1998, 4, 13, 9, 0),
356 datetime(1999, 4, 5, 9, 0),
357 datetime(2000, 4, 24, 9, 0)])
358
359 def testYearlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +0000360 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000361 count=3,
362 byeaster=-1,
363 dtstart=parse("19970902T090000"))),
364 [datetime(1998, 4, 11, 9, 0),
365 datetime(1999, 4, 3, 9, 0),
366 datetime(2000, 4, 22, 9, 0)])
367
368 def testYearlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000369 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000370 count=3,
371 byweekno=53,
372 byweekday=MO,
373 dtstart=parse("19970902T090000"))),
374 [datetime(1998, 12, 28, 9, 0),
375 datetime(2004, 12, 27, 9, 0),
376 datetime(2009, 12, 28, 9, 0)])
377
378 def testYearlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000379 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000380 count=3,
381 byweekno=53,
382 byweekday=MO,
383 dtstart=parse("19970902T090000"))),
384 [datetime(1998, 12, 28, 9, 0),
385 datetime(2004, 12, 27, 9, 0),
386 datetime(2009, 12, 28, 9, 0)])
387
388 def testYearlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +0000389 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000390 count=3,
391 byhour=(6,18),
392 dtstart=parse("19970902T090000"))),
393 [datetime(1997, 9, 2, 18, 0),
394 datetime(1998, 9, 2, 6, 0),
395 datetime(1998, 9, 2, 18, 0)])
396
397 def testYearlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000398 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000399 count=3,
400 byminute=(6,18),
401 dtstart=parse("19970902T090000"))),
402 [datetime(1997, 9, 2, 9, 6),
403 datetime(1997, 9, 2, 9, 18),
404 datetime(1998, 9, 2, 9, 6)])
405
406 def testYearlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000407 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000408 count=3,
409 bysecond=(6,18),
410 dtstart=parse("19970902T090000"))),
411 [datetime(1997, 9, 2, 9, 0, 6),
412 datetime(1997, 9, 2, 9, 0, 18),
413 datetime(1998, 9, 2, 9, 0, 6)])
414
415 def testYearlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000416 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000417 count=3,
418 byhour=(6,18),
419 byminute=(6,18),
420 dtstart=parse("19970902T090000"))),
421 [datetime(1997, 9, 2, 18, 6),
422 datetime(1997, 9, 2, 18, 18),
423 datetime(1998, 9, 2, 6, 6)])
424
425 def testYearlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000426 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000427 count=3,
428 byhour=(6,18),
429 bysecond=(6,18),
430 dtstart=parse("19970902T090000"))),
431 [datetime(1997, 9, 2, 18, 0, 6),
432 datetime(1997, 9, 2, 18, 0, 18),
433 datetime(1998, 9, 2, 6, 0, 6)])
434
435 def testYearlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000436 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000437 count=3,
438 byminute=(6,18),
439 bysecond=(6,18),
440 dtstart=parse("19970902T090000"))),
441 [datetime(1997, 9, 2, 9, 6, 6),
442 datetime(1997, 9, 2, 9, 6, 18),
443 datetime(1997, 9, 2, 9, 18, 6)])
444
445 def testYearlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000446 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000447 count=3,
448 byhour=(6,18),
449 byminute=(6,18),
450 bysecond=(6,18),
451 dtstart=parse("19970902T090000"))),
452 [datetime(1997, 9, 2, 18, 6, 6),
453 datetime(1997, 9, 2, 18, 6, 18),
454 datetime(1997, 9, 2, 18, 18, 6)])
455
456 def testYearlyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000457 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000458 count=3,
459 bymonthday=15,
460 byhour=(6,18),
461 bysetpos=(3,-3),
462 dtstart=parse("19970902T090000"))),
463 [datetime(1997, 11, 15, 18, 0),
464 datetime(1998, 2, 15, 6, 0),
465 datetime(1998, 11, 15, 18, 0)])
466
niemeyercb08a352003-10-08 06:02:06 +0000467 def testMonthly(self):
niemeyer4da06a42004-07-16 21:21:22 +0000468 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000469 count=3,
470 dtstart=parse("19970902T090000"))),
471 [datetime(1997, 9, 2, 9, 0),
472 datetime(1997, 10, 2, 9, 0),
473 datetime(1997, 11, 2, 9, 0)])
474
niemeyercb08a352003-10-08 06:02:06 +0000475 def testMonthlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +0000476 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000477 count=3,
478 interval=2,
479 dtstart=parse("19970902T090000"))),
480 [datetime(1997, 9, 2, 9, 0),
481 datetime(1997, 11, 2, 9, 0),
482 datetime(1998, 1, 2, 9, 0)])
483
484 def testMonthlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000485 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000486 count=3,
487 interval=18,
488 dtstart=parse("19970902T090000"))),
489 [datetime(1997, 9, 2, 9, 0),
490 datetime(1999, 3, 2, 9, 0),
491 datetime(2000, 9, 2, 9, 0)])
492
493 def testMonthlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +0000494 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000495 count=3,
496 bymonth=(1,3),
497 dtstart=parse("19970902T090000"))),
498 [datetime(1998, 1, 2, 9, 0),
499 datetime(1998, 3, 2, 9, 0),
500 datetime(1999, 1, 2, 9, 0)])
501
502
503 def testMonthlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000504 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000505 count=3,
506 bymonthday=(1,3),
507 dtstart=parse("19970902T090000"))),
508 [datetime(1997, 9, 3, 9, 0),
509 datetime(1997, 10, 1, 9, 0),
510 datetime(1997, 10, 3, 9, 0)])
511
512 def testMonthlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000513 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000514 count=3,
515 bymonth=(1,3),
516 bymonthday=(5,7),
517 dtstart=parse("19970902T090000"))),
518 [datetime(1998, 1, 5, 9, 0),
519 datetime(1998, 1, 7, 9, 0),
520 datetime(1998, 3, 5, 9, 0)])
521
522 def testMonthlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000523 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000524 count=3,
525 byweekday=(TU,TH),
526 dtstart=parse("19970902T090000"))),
527 [datetime(1997, 9, 2, 9, 0),
528 datetime(1997, 9, 4, 9, 0),
529 datetime(1997, 9, 9, 9, 0)])
530
niemeyer7d8be1a2003-10-09 01:09:42 +0000531 def testMonthlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000532 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000533 count=3,
534 byweekday=(TU(1),TH(-1)),
535 dtstart=parse("19970902T090000"))),
536 [datetime(1997, 9, 2, 9, 0),
537 datetime(1997, 9, 25, 9, 0),
538 datetime(1997, 10, 7, 9, 0)])
539
540 def testMonthlyByNWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000541 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000542 count=3,
543 byweekday=(TU(3),TH(-3)),
544 dtstart=parse("19970902T090000"))),
545 [datetime(1997, 9, 11, 9, 0),
546 datetime(1997, 9, 16, 9, 0),
547 datetime(1997, 10, 16, 9, 0)])
548
niemeyercb08a352003-10-08 06:02:06 +0000549 def testMonthlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000550 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000551 count=3,
552 bymonth=(1,3),
553 byweekday=(TU,TH),
554 dtstart=parse("19970902T090000"))),
555 [datetime(1998, 1, 1, 9, 0),
556 datetime(1998, 1, 6, 9, 0),
557 datetime(1998, 1, 8, 9, 0)])
558
niemeyer7d8be1a2003-10-09 01:09:42 +0000559 def testMonthlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000560 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000561 count=3,
562 bymonth=(1,3),
563 byweekday=(TU(1),TH(-1)),
564 dtstart=parse("19970902T090000"))),
565 [datetime(1998, 1, 6, 9, 0),
566 datetime(1998, 1, 29, 9, 0),
567 datetime(1998, 3, 3, 9, 0)])
568
569 def testMonthlyByMonthAndNWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000570 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000571 count=3,
572 bymonth=(1,3),
573 byweekday=(TU(3),TH(-3)),
574 dtstart=parse("19970902T090000"))),
575 [datetime(1998, 1, 15, 9, 0),
576 datetime(1998, 1, 20, 9, 0),
577 datetime(1998, 3, 12, 9, 0)])
578
579 def testMonthlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000580 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000581 count=3,
582 bymonthday=(1,3),
583 byweekday=(TU,TH),
584 dtstart=parse("19970902T090000"))),
585 [datetime(1998, 1, 1, 9, 0),
586 datetime(1998, 2, 3, 9, 0),
587 datetime(1998, 3, 3, 9, 0)])
588
589 def testMonthlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000590 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000591 count=3,
592 bymonth=(1,3),
593 bymonthday=(1,3),
594 byweekday=(TU,TH),
595 dtstart=parse("19970902T090000"))),
596 [datetime(1998, 1, 1, 9, 0),
597 datetime(1998, 3, 3, 9, 0),
598 datetime(2001, 3, 1, 9, 0)])
599
600 def testMonthlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000601 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000602 count=3,
603 byyearday=(1,100,200),
604 dtstart=parse("19970902T090000"))),
605 [datetime(1998, 1, 1, 9, 0),
606 datetime(1998, 4, 10, 9, 0),
607 datetime(1998, 7, 19, 9, 0)])
608
609 def testMonthlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000610 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000611 count=3,
612 bymonth=(4,7),
613 byyearday=(1,100,200),
614 dtstart=parse("19970902T090000"))),
615 [datetime(1998, 4, 10, 9, 0),
616 datetime(1998, 7, 19, 9, 0),
617 datetime(1999, 4, 10, 9, 0)])
618
619 def testMonthlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +0000620 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000621 count=3,
622 byweekno=20,
623 dtstart=parse("19970902T090000"))),
624 [datetime(1998, 5, 11, 9, 0),
625 datetime(1998, 5, 12, 9, 0),
626 datetime(1998, 5, 13, 9, 0)])
627
628 def testMonthlyByWeekNoAndWeekDay(self):
629 # That's a nice one. The first days of week number one
630 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +0000631 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000632 count=3,
633 byweekno=1,
634 byweekday=MO,
635 dtstart=parse("19970902T090000"))),
636 [datetime(1997, 12, 29, 9, 0),
637 datetime(1999, 1, 4, 9, 0),
638 datetime(2000, 1, 3, 9, 0)])
639
640 def testMonthlyByWeekNoAndWeekDayLarge(self):
641 # Another nice test. The last days of week number 52/53
642 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +0000643 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000644 count=3,
645 byweekno=52,
646 byweekday=SU,
647 dtstart=parse("19970902T090000"))),
648 [datetime(1997, 12, 28, 9, 0),
649 datetime(1998, 12, 27, 9, 0),
650 datetime(2000, 1, 2, 9, 0)])
651
652 def testMonthlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +0000653 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000654 count=3,
655 byweekno=-1,
656 byweekday=SU,
657 dtstart=parse("19970902T090000"))),
658 [datetime(1997, 12, 28, 9, 0),
659 datetime(1999, 1, 3, 9, 0),
660 datetime(2000, 1, 2, 9, 0)])
661
662 def testMonthlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000663 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000664 count=3,
665 byweekno=53,
666 byweekday=MO,
667 dtstart=parse("19970902T090000"))),
668 [datetime(1998, 12, 28, 9, 0),
669 datetime(2004, 12, 27, 9, 0),
670 datetime(2009, 12, 28, 9, 0)])
671
672 def testMonthlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +0000673 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000674 count=3,
675 byeaster=0,
676 dtstart=parse("19970902T090000"))),
677 [datetime(1998, 4, 12, 9, 0),
678 datetime(1999, 4, 4, 9, 0),
679 datetime(2000, 4, 23, 9, 0)])
680
681 def testMonthlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000682 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000683 count=3,
684 byeaster=1,
685 dtstart=parse("19970902T090000"))),
686 [datetime(1998, 4, 13, 9, 0),
687 datetime(1999, 4, 5, 9, 0),
688 datetime(2000, 4, 24, 9, 0)])
689
690 def testMonthlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +0000691 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000692 count=3,
693 byeaster=-1,
694 dtstart=parse("19970902T090000"))),
695 [datetime(1998, 4, 11, 9, 0),
696 datetime(1999, 4, 3, 9, 0),
697 datetime(2000, 4, 22, 9, 0)])
698
699 def testMonthlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +0000700 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000701 count=3,
702 byhour=(6,18),
703 dtstart=parse("19970902T090000"))),
704 [datetime(1997, 9, 2, 18, 0),
705 datetime(1997, 10, 2, 6, 0),
706 datetime(1997, 10, 2, 18, 0)])
707
708 def testMonthlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000709 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000710 count=3,
711 byminute=(6,18),
712 dtstart=parse("19970902T090000"))),
713 [datetime(1997, 9, 2, 9, 6),
714 datetime(1997, 9, 2, 9, 18),
715 datetime(1997, 10, 2, 9, 6)])
716
717 def testMonthlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000718 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000719 count=3,
720 bysecond=(6,18),
721 dtstart=parse("19970902T090000"))),
722 [datetime(1997, 9, 2, 9, 0, 6),
723 datetime(1997, 9, 2, 9, 0, 18),
724 datetime(1997, 10, 2, 9, 0, 6)])
725
726 def testMonthlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000727 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000728 count=3,
729 byhour=(6,18),
730 byminute=(6,18),
731 dtstart=parse("19970902T090000"))),
732 [datetime(1997, 9, 2, 18, 6),
733 datetime(1997, 9, 2, 18, 18),
734 datetime(1997, 10, 2, 6, 6)])
735
736 def testMonthlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000737 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000738 count=3,
739 byhour=(6,18),
740 bysecond=(6,18),
741 dtstart=parse("19970902T090000"))),
742 [datetime(1997, 9, 2, 18, 0, 6),
743 datetime(1997, 9, 2, 18, 0, 18),
744 datetime(1997, 10, 2, 6, 0, 6)])
745
746 def testMonthlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000747 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000748 count=3,
749 byminute=(6,18),
750 bysecond=(6,18),
751 dtstart=parse("19970902T090000"))),
752 [datetime(1997, 9, 2, 9, 6, 6),
753 datetime(1997, 9, 2, 9, 6, 18),
754 datetime(1997, 9, 2, 9, 18, 6)])
755
756 def testMonthlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000757 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000758 count=3,
759 byhour=(6,18),
760 byminute=(6,18),
761 bysecond=(6,18),
762 dtstart=parse("19970902T090000"))),
763 [datetime(1997, 9, 2, 18, 6, 6),
764 datetime(1997, 9, 2, 18, 6, 18),
765 datetime(1997, 9, 2, 18, 18, 6)])
766
767 def testMonthlyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000768 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000769 count=3,
770 bymonthday=(13,17),
771 byhour=(6,18),
772 bysetpos=(3,-3),
773 dtstart=parse("19970902T090000"))),
774 [datetime(1997, 9, 13, 18, 0),
775 datetime(1997, 9, 17, 6, 0),
776 datetime(1997, 10, 13, 18, 0)])
777
niemeyercb08a352003-10-08 06:02:06 +0000778 def testWeekly(self):
niemeyer4da06a42004-07-16 21:21:22 +0000779 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000780 count=3,
781 dtstart=parse("19970902T090000"))),
782 [datetime(1997, 9, 2, 9, 0),
783 datetime(1997, 9, 9, 9, 0),
784 datetime(1997, 9, 16, 9, 0)])
785
niemeyercb08a352003-10-08 06:02:06 +0000786 def testWeeklyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +0000787 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000788 count=3,
789 interval=2,
790 dtstart=parse("19970902T090000"))),
791 [datetime(1997, 9, 2, 9, 0),
792 datetime(1997, 9, 16, 9, 0),
793 datetime(1997, 9, 30, 9, 0)])
794
795 def testWeeklyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000796 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000797 count=3,
798 interval=20,
799 dtstart=parse("19970902T090000"))),
800 [datetime(1997, 9, 2, 9, 0),
801 datetime(1998, 1, 20, 9, 0),
802 datetime(1998, 6, 9, 9, 0)])
803
804 def testWeeklyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +0000805 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000806 count=3,
807 bymonth=(1,3),
808 dtstart=parse("19970902T090000"))),
809 [datetime(1998, 1, 6, 9, 0),
810 datetime(1998, 1, 13, 9, 0),
811 datetime(1998, 1, 20, 9, 0)])
812
813 def testWeeklyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000814 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000815 count=3,
816 bymonthday=(1,3),
817 dtstart=parse("19970902T090000"))),
818 [datetime(1997, 9, 3, 9, 0),
819 datetime(1997, 10, 1, 9, 0),
820 datetime(1997, 10, 3, 9, 0)])
821
822 def testWeeklyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000823 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000824 count=3,
825 bymonth=(1,3),
826 bymonthday=(5,7),
827 dtstart=parse("19970902T090000"))),
828 [datetime(1998, 1, 5, 9, 0),
829 datetime(1998, 1, 7, 9, 0),
830 datetime(1998, 3, 5, 9, 0)])
831
832 def testWeeklyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000833 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000834 count=3,
835 byweekday=(TU,TH),
836 dtstart=parse("19970902T090000"))),
837 [datetime(1997, 9, 2, 9, 0),
838 datetime(1997, 9, 4, 9, 0),
839 datetime(1997, 9, 9, 9, 0)])
840
niemeyer7d8be1a2003-10-09 01:09:42 +0000841 def testWeeklyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000842 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000843 count=3,
844 byweekday=(TU(1),TH(-1)),
845 dtstart=parse("19970902T090000"))),
846 [datetime(1997, 9, 2, 9, 0),
847 datetime(1997, 9, 4, 9, 0),
848 datetime(1997, 9, 9, 9, 0)])
849
niemeyercb08a352003-10-08 06:02:06 +0000850 def testWeeklyByMonthAndWeekDay(self):
851 # This test is interesting, because it crosses the year
852 # boundary in a weekly period to find day '1' as a
853 # valid recurrence.
niemeyer4da06a42004-07-16 21:21:22 +0000854 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000855 count=3,
856 bymonth=(1,3),
857 byweekday=(TU,TH),
858 dtstart=parse("19970902T090000"))),
859 [datetime(1998, 1, 1, 9, 0),
860 datetime(1998, 1, 6, 9, 0),
861 datetime(1998, 1, 8, 9, 0)])
862
niemeyer7d8be1a2003-10-09 01:09:42 +0000863 def testWeeklyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000864 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000865 count=3,
866 bymonth=(1,3),
867 byweekday=(TU(1),TH(-1)),
868 dtstart=parse("19970902T090000"))),
869 [datetime(1998, 1, 1, 9, 0),
870 datetime(1998, 1, 6, 9, 0),
871 datetime(1998, 1, 8, 9, 0)])
872
873 def testWeeklyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000874 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000875 count=3,
876 bymonthday=(1,3),
877 byweekday=(TU,TH),
878 dtstart=parse("19970902T090000"))),
879 [datetime(1998, 1, 1, 9, 0),
880 datetime(1998, 2, 3, 9, 0),
881 datetime(1998, 3, 3, 9, 0)])
882
883 def testWeeklyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000884 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000885 count=3,
886 bymonth=(1,3),
887 bymonthday=(1,3),
888 byweekday=(TU,TH),
889 dtstart=parse("19970902T090000"))),
890 [datetime(1998, 1, 1, 9, 0),
891 datetime(1998, 3, 3, 9, 0),
892 datetime(2001, 3, 1, 9, 0)])
893
894 def testWeeklyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000895 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000896 count=3,
897 byyearday=(1,100,200),
898 dtstart=parse("19970902T090000"))),
899 [datetime(1998, 1, 1, 9, 0),
900 datetime(1998, 4, 10, 9, 0),
901 datetime(1998, 7, 19, 9, 0)])
902
903 def testWeeklyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000904 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000905 count=3,
906 bymonth=(1,7),
907 byyearday=(1,100,200),
908 dtstart=parse("19970902T090000"))),
909 [datetime(1998, 1, 1, 9, 0),
910 datetime(1998, 7, 19, 9, 0),
911 datetime(1999, 1, 1, 9, 0)])
912
913 def testWeeklyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +0000914 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000915 count=3,
916 byweekno=20,
917 dtstart=parse("19970902T090000"))),
918 [datetime(1998, 5, 11, 9, 0),
919 datetime(1998, 5, 12, 9, 0),
920 datetime(1998, 5, 13, 9, 0)])
921
922 def testWeeklyByWeekNoAndWeekDay(self):
923 # That's a nice one. The first days of week number one
924 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +0000925 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000926 count=3,
927 byweekno=1,
928 byweekday=MO,
929 dtstart=parse("19970902T090000"))),
930 [datetime(1997, 12, 29, 9, 0),
931 datetime(1999, 1, 4, 9, 0),
932 datetime(2000, 1, 3, 9, 0)])
933
934 def testWeeklyByWeekNoAndWeekDayLarge(self):
935 # Another nice test. The last days of week number 52/53
936 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +0000937 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000938 count=3,
939 byweekno=52,
940 byweekday=SU,
941 dtstart=parse("19970902T090000"))),
942 [datetime(1997, 12, 28, 9, 0),
943 datetime(1998, 12, 27, 9, 0),
944 datetime(2000, 1, 2, 9, 0)])
945
946 def testWeeklyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +0000947 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000948 count=3,
949 byweekno=-1,
950 byweekday=SU,
951 dtstart=parse("19970902T090000"))),
952 [datetime(1997, 12, 28, 9, 0),
953 datetime(1999, 1, 3, 9, 0),
954 datetime(2000, 1, 2, 9, 0)])
955
956 def testWeeklyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000957 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000958 count=3,
959 byweekno=53,
960 byweekday=MO,
961 dtstart=parse("19970902T090000"))),
962 [datetime(1998, 12, 28, 9, 0),
963 datetime(2004, 12, 27, 9, 0),
964 datetime(2009, 12, 28, 9, 0)])
965
966 def testWeeklyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +0000967 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000968 count=3,
969 byeaster=0,
970 dtstart=parse("19970902T090000"))),
971 [datetime(1998, 4, 12, 9, 0),
972 datetime(1999, 4, 4, 9, 0),
973 datetime(2000, 4, 23, 9, 0)])
974
975 def testWeeklyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000976 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000977 count=3,
978 byeaster=1,
979 dtstart=parse("19970902T090000"))),
980 [datetime(1998, 4, 13, 9, 0),
981 datetime(1999, 4, 5, 9, 0),
982 datetime(2000, 4, 24, 9, 0)])
983
984 def testWeeklyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +0000985 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000986 count=3,
987 byeaster=-1,
988 dtstart=parse("19970902T090000"))),
989 [datetime(1998, 4, 11, 9, 0),
990 datetime(1999, 4, 3, 9, 0),
991 datetime(2000, 4, 22, 9, 0)])
992
993 def testWeeklyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +0000994 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000995 count=3,
996 byhour=(6,18),
997 dtstart=parse("19970902T090000"))),
998 [datetime(1997, 9, 2, 18, 0),
999 datetime(1997, 9, 9, 6, 0),
1000 datetime(1997, 9, 9, 18, 0)])
1001
1002 def testWeeklyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001003 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001004 count=3,
1005 byminute=(6,18),
1006 dtstart=parse("19970902T090000"))),
1007 [datetime(1997, 9, 2, 9, 6),
1008 datetime(1997, 9, 2, 9, 18),
1009 datetime(1997, 9, 9, 9, 6)])
1010
1011 def testWeeklyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001012 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001013 count=3,
1014 bysecond=(6,18),
1015 dtstart=parse("19970902T090000"))),
1016 [datetime(1997, 9, 2, 9, 0, 6),
1017 datetime(1997, 9, 2, 9, 0, 18),
1018 datetime(1997, 9, 9, 9, 0, 6)])
1019
1020 def testWeeklyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001021 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001022 count=3,
1023 byhour=(6,18),
1024 byminute=(6,18),
1025 dtstart=parse("19970902T090000"))),
1026 [datetime(1997, 9, 2, 18, 6),
1027 datetime(1997, 9, 2, 18, 18),
1028 datetime(1997, 9, 9, 6, 6)])
1029
1030 def testWeeklyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001031 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001032 count=3,
1033 byhour=(6,18),
1034 bysecond=(6,18),
1035 dtstart=parse("19970902T090000"))),
1036 [datetime(1997, 9, 2, 18, 0, 6),
1037 datetime(1997, 9, 2, 18, 0, 18),
1038 datetime(1997, 9, 9, 6, 0, 6)])
1039
1040 def testWeeklyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001041 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001042 count=3,
1043 byminute=(6,18),
1044 bysecond=(6,18),
1045 dtstart=parse("19970902T090000"))),
1046 [datetime(1997, 9, 2, 9, 6, 6),
1047 datetime(1997, 9, 2, 9, 6, 18),
1048 datetime(1997, 9, 2, 9, 18, 6)])
1049
1050 def testWeeklyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001051 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001052 count=3,
1053 byhour=(6,18),
1054 byminute=(6,18),
1055 bysecond=(6,18),
1056 dtstart=parse("19970902T090000"))),
1057 [datetime(1997, 9, 2, 18, 6, 6),
1058 datetime(1997, 9, 2, 18, 6, 18),
1059 datetime(1997, 9, 2, 18, 18, 6)])
1060
1061 def testWeeklyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001062 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001063 count=3,
1064 byweekday=(TU,TH),
1065 byhour=(6,18),
1066 bysetpos=(3,-3),
1067 dtstart=parse("19970902T090000"))),
1068 [datetime(1997, 9, 2, 18, 0),
1069 datetime(1997, 9, 4, 6, 0),
1070 datetime(1997, 9, 9, 18, 0)])
1071
niemeyercb08a352003-10-08 06:02:06 +00001072 def testDaily(self):
niemeyer4da06a42004-07-16 21:21:22 +00001073 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001074 count=3,
1075 dtstart=parse("19970902T090000"))),
1076 [datetime(1997, 9, 2, 9, 0),
1077 datetime(1997, 9, 3, 9, 0),
1078 datetime(1997, 9, 4, 9, 0)])
1079
niemeyercb08a352003-10-08 06:02:06 +00001080 def testDailyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001081 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001082 count=3,
1083 interval=2,
1084 dtstart=parse("19970902T090000"))),
1085 [datetime(1997, 9, 2, 9, 0),
1086 datetime(1997, 9, 4, 9, 0),
1087 datetime(1997, 9, 6, 9, 0)])
1088
1089 def testDailyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001090 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001091 count=3,
1092 interval=92,
1093 dtstart=parse("19970902T090000"))),
1094 [datetime(1997, 9, 2, 9, 0),
1095 datetime(1997, 12, 3, 9, 0),
1096 datetime(1998, 3, 5, 9, 0)])
1097
1098 def testDailyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001099 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001100 count=3,
1101 bymonth=(1,3),
1102 dtstart=parse("19970902T090000"))),
1103 [datetime(1998, 1, 1, 9, 0),
1104 datetime(1998, 1, 2, 9, 0),
1105 datetime(1998, 1, 3, 9, 0)])
1106
1107 def testDailyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001108 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001109 count=3,
1110 bymonthday=(1,3),
1111 dtstart=parse("19970902T090000"))),
1112 [datetime(1997, 9, 3, 9, 0),
1113 datetime(1997, 10, 1, 9, 0),
1114 datetime(1997, 10, 3, 9, 0)])
1115
1116 def testDailyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001117 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001118 count=3,
1119 bymonth=(1,3),
1120 bymonthday=(5,7),
1121 dtstart=parse("19970902T090000"))),
1122 [datetime(1998, 1, 5, 9, 0),
1123 datetime(1998, 1, 7, 9, 0),
1124 datetime(1998, 3, 5, 9, 0)])
1125
1126 def testDailyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001127 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001128 count=3,
1129 byweekday=(TU,TH),
1130 dtstart=parse("19970902T090000"))),
1131 [datetime(1997, 9, 2, 9, 0),
1132 datetime(1997, 9, 4, 9, 0),
1133 datetime(1997, 9, 9, 9, 0)])
1134
niemeyer7d8be1a2003-10-09 01:09:42 +00001135 def testDailyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001136 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001137 count=3,
1138 byweekday=(TU(1),TH(-1)),
1139 dtstart=parse("19970902T090000"))),
1140 [datetime(1997, 9, 2, 9, 0),
1141 datetime(1997, 9, 4, 9, 0),
1142 datetime(1997, 9, 9, 9, 0)])
1143
niemeyercb08a352003-10-08 06:02:06 +00001144 def testDailyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001145 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001146 count=3,
1147 bymonth=(1,3),
1148 byweekday=(TU,TH),
1149 dtstart=parse("19970902T090000"))),
1150 [datetime(1998, 1, 1, 9, 0),
1151 datetime(1998, 1, 6, 9, 0),
1152 datetime(1998, 1, 8, 9, 0)])
1153
niemeyer7d8be1a2003-10-09 01:09:42 +00001154 def testDailyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001155 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001156 count=3,
1157 bymonth=(1,3),
1158 byweekday=(TU(1),TH(-1)),
1159 dtstart=parse("19970902T090000"))),
1160 [datetime(1998, 1, 1, 9, 0),
1161 datetime(1998, 1, 6, 9, 0),
1162 datetime(1998, 1, 8, 9, 0)])
1163
1164 def testDailyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001165 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001166 count=3,
1167 bymonthday=(1,3),
1168 byweekday=(TU,TH),
1169 dtstart=parse("19970902T090000"))),
1170 [datetime(1998, 1, 1, 9, 0),
1171 datetime(1998, 2, 3, 9, 0),
1172 datetime(1998, 3, 3, 9, 0)])
1173
1174 def testDailyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001175 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001176 count=3,
1177 bymonth=(1,3),
1178 bymonthday=(1,3),
1179 byweekday=(TU,TH),
1180 dtstart=parse("19970902T090000"))),
1181 [datetime(1998, 1, 1, 9, 0),
1182 datetime(1998, 3, 3, 9, 0),
1183 datetime(2001, 3, 1, 9, 0)])
1184
1185 def testDailyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001186 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001187 count=3,
1188 byyearday=(1,100,200),
1189 dtstart=parse("19970902T090000"))),
1190 [datetime(1998, 1, 1, 9, 0),
1191 datetime(1998, 4, 10, 9, 0),
1192 datetime(1998, 7, 19, 9, 0)])
1193
1194 def testDailyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001195 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001196 count=3,
1197 bymonth=(1,7),
1198 byyearday=(1,100,200),
1199 dtstart=parse("19970902T090000"))),
1200 [datetime(1998, 1, 1, 9, 0),
1201 datetime(1998, 7, 19, 9, 0),
1202 datetime(1999, 1, 1, 9, 0)])
1203
1204 def testDailyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00001205 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001206 count=3,
1207 byweekno=20,
1208 dtstart=parse("19970902T090000"))),
1209 [datetime(1998, 5, 11, 9, 0),
1210 datetime(1998, 5, 12, 9, 0),
1211 datetime(1998, 5, 13, 9, 0)])
1212
1213 def testDailyByWeekNoAndWeekDay(self):
1214 # That's a nice one. The first days of week number one
1215 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +00001216 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001217 count=3,
1218 byweekno=1,
1219 byweekday=MO,
1220 dtstart=parse("19970902T090000"))),
1221 [datetime(1997, 12, 29, 9, 0),
1222 datetime(1999, 1, 4, 9, 0),
1223 datetime(2000, 1, 3, 9, 0)])
1224
1225 def testDailyByWeekNoAndWeekDayLarge(self):
1226 # Another nice test. The last days of week number 52/53
1227 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +00001228 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001229 count=3,
1230 byweekno=52,
1231 byweekday=SU,
1232 dtstart=parse("19970902T090000"))),
1233 [datetime(1997, 12, 28, 9, 0),
1234 datetime(1998, 12, 27, 9, 0),
1235 datetime(2000, 1, 2, 9, 0)])
1236
1237 def testDailyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001238 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001239 count=3,
1240 byweekno=-1,
1241 byweekday=SU,
1242 dtstart=parse("19970902T090000"))),
1243 [datetime(1997, 12, 28, 9, 0),
1244 datetime(1999, 1, 3, 9, 0),
1245 datetime(2000, 1, 2, 9, 0)])
1246
1247 def testDailyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001248 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001249 count=3,
1250 byweekno=53,
1251 byweekday=MO,
1252 dtstart=parse("19970902T090000"))),
1253 [datetime(1998, 12, 28, 9, 0),
1254 datetime(2004, 12, 27, 9, 0),
1255 datetime(2009, 12, 28, 9, 0)])
1256
1257 def testDailyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001258 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001259 count=3,
1260 byeaster=0,
1261 dtstart=parse("19970902T090000"))),
1262 [datetime(1998, 4, 12, 9, 0),
1263 datetime(1999, 4, 4, 9, 0),
1264 datetime(2000, 4, 23, 9, 0)])
1265
1266 def testDailyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001267 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001268 count=3,
1269 byeaster=1,
1270 dtstart=parse("19970902T090000"))),
1271 [datetime(1998, 4, 13, 9, 0),
1272 datetime(1999, 4, 5, 9, 0),
1273 datetime(2000, 4, 24, 9, 0)])
1274
1275 def testDailyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001276 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001277 count=3,
1278 byeaster=-1,
1279 dtstart=parse("19970902T090000"))),
1280 [datetime(1998, 4, 11, 9, 0),
1281 datetime(1999, 4, 3, 9, 0),
1282 datetime(2000, 4, 22, 9, 0)])
1283
1284 def testDailyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001285 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001286 count=3,
1287 byhour=(6,18),
1288 dtstart=parse("19970902T090000"))),
1289 [datetime(1997, 9, 2, 18, 0),
1290 datetime(1997, 9, 3, 6, 0),
1291 datetime(1997, 9, 3, 18, 0)])
1292
1293 def testDailyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001294 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001295 count=3,
1296 byminute=(6,18),
1297 dtstart=parse("19970902T090000"))),
1298 [datetime(1997, 9, 2, 9, 6),
1299 datetime(1997, 9, 2, 9, 18),
1300 datetime(1997, 9, 3, 9, 6)])
1301
1302 def testDailyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001303 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001304 count=3,
1305 bysecond=(6,18),
1306 dtstart=parse("19970902T090000"))),
1307 [datetime(1997, 9, 2, 9, 0, 6),
1308 datetime(1997, 9, 2, 9, 0, 18),
1309 datetime(1997, 9, 3, 9, 0, 6)])
1310
1311 def testDailyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001312 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001313 count=3,
1314 byhour=(6,18),
1315 byminute=(6,18),
1316 dtstart=parse("19970902T090000"))),
1317 [datetime(1997, 9, 2, 18, 6),
1318 datetime(1997, 9, 2, 18, 18),
1319 datetime(1997, 9, 3, 6, 6)])
1320
1321 def testDailyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001322 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001323 count=3,
1324 byhour=(6,18),
1325 bysecond=(6,18),
1326 dtstart=parse("19970902T090000"))),
1327 [datetime(1997, 9, 2, 18, 0, 6),
1328 datetime(1997, 9, 2, 18, 0, 18),
1329 datetime(1997, 9, 3, 6, 0, 6)])
1330
1331 def testDailyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001332 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001333 count=3,
1334 byminute=(6,18),
1335 bysecond=(6,18),
1336 dtstart=parse("19970902T090000"))),
1337 [datetime(1997, 9, 2, 9, 6, 6),
1338 datetime(1997, 9, 2, 9, 6, 18),
1339 datetime(1997, 9, 2, 9, 18, 6)])
1340
1341 def testDailyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001342 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001343 count=3,
1344 byhour=(6,18),
1345 byminute=(6,18),
1346 bysecond=(6,18),
1347 dtstart=parse("19970902T090000"))),
1348 [datetime(1997, 9, 2, 18, 6, 6),
1349 datetime(1997, 9, 2, 18, 6, 18),
1350 datetime(1997, 9, 2, 18, 18, 6)])
1351
1352 def testDailyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001353 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001354 count=3,
1355 byhour=(6,18),
1356 byminute=(15,45),
1357 bysetpos=(3,-3),
1358 dtstart=parse("19970902T090000"))),
1359 [datetime(1997, 9, 2, 18, 15),
1360 datetime(1997, 9, 3, 6, 45),
1361 datetime(1997, 9, 3, 18, 15)])
1362
niemeyercb08a352003-10-08 06:02:06 +00001363 def testHourly(self):
niemeyer4da06a42004-07-16 21:21:22 +00001364 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001365 count=3,
1366 dtstart=parse("19970902T090000"))),
1367 [datetime(1997, 9, 2, 9, 0),
1368 datetime(1997, 9, 2, 10, 0),
1369 datetime(1997, 9, 2, 11, 0)])
1370
niemeyercb08a352003-10-08 06:02:06 +00001371 def testHourlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001372 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001373 count=3,
1374 interval=2,
1375 dtstart=parse("19970902T090000"))),
1376 [datetime(1997, 9, 2, 9, 0),
1377 datetime(1997, 9, 2, 11, 0),
1378 datetime(1997, 9, 2, 13, 0)])
1379
1380 def testHourlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001381 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001382 count=3,
1383 interval=769,
1384 dtstart=parse("19970902T090000"))),
1385 [datetime(1997, 9, 2, 9, 0),
1386 datetime(1997, 10, 4, 10, 0),
1387 datetime(1997, 11, 5, 11, 0)])
1388
1389 def testHourlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001390 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001391 count=3,
1392 bymonth=(1,3),
1393 dtstart=parse("19970902T090000"))),
1394 [datetime(1998, 1, 1, 0, 0),
1395 datetime(1998, 1, 1, 1, 0),
1396 datetime(1998, 1, 1, 2, 0)])
1397
1398 def testHourlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001399 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001400 count=3,
1401 bymonthday=(1,3),
1402 dtstart=parse("19970902T090000"))),
1403 [datetime(1997, 9, 3, 0, 0),
1404 datetime(1997, 9, 3, 1, 0),
1405 datetime(1997, 9, 3, 2, 0)])
1406
1407 def testHourlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001408 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001409 count=3,
1410 bymonth=(1,3),
1411 bymonthday=(5,7),
1412 dtstart=parse("19970902T090000"))),
1413 [datetime(1998, 1, 5, 0, 0),
1414 datetime(1998, 1, 5, 1, 0),
1415 datetime(1998, 1, 5, 2, 0)])
1416
1417 def testHourlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001418 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001419 count=3,
1420 byweekday=(TU,TH),
1421 dtstart=parse("19970902T090000"))),
1422 [datetime(1997, 9, 2, 9, 0),
1423 datetime(1997, 9, 2, 10, 0),
1424 datetime(1997, 9, 2, 11, 0)])
1425
niemeyer7d8be1a2003-10-09 01:09:42 +00001426 def testHourlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001427 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001428 count=3,
1429 byweekday=(TU(1),TH(-1)),
1430 dtstart=parse("19970902T090000"))),
1431 [datetime(1997, 9, 2, 9, 0),
1432 datetime(1997, 9, 2, 10, 0),
1433 datetime(1997, 9, 2, 11, 0)])
1434
niemeyercb08a352003-10-08 06:02:06 +00001435 def testHourlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001436 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001437 count=3,
1438 bymonth=(1,3),
1439 byweekday=(TU,TH),
1440 dtstart=parse("19970902T090000"))),
1441 [datetime(1998, 1, 1, 0, 0),
1442 datetime(1998, 1, 1, 1, 0),
1443 datetime(1998, 1, 1, 2, 0)])
1444
niemeyer7d8be1a2003-10-09 01:09:42 +00001445 def testHourlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001446 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001447 count=3,
1448 bymonth=(1,3),
1449 byweekday=(TU(1),TH(-1)),
1450 dtstart=parse("19970902T090000"))),
1451 [datetime(1998, 1, 1, 0, 0),
1452 datetime(1998, 1, 1, 1, 0),
1453 datetime(1998, 1, 1, 2, 0)])
1454
1455 def testHourlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001456 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001457 count=3,
1458 bymonthday=(1,3),
1459 byweekday=(TU,TH),
1460 dtstart=parse("19970902T090000"))),
1461 [datetime(1998, 1, 1, 0, 0),
1462 datetime(1998, 1, 1, 1, 0),
1463 datetime(1998, 1, 1, 2, 0)])
1464
1465 def testHourlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001466 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001467 count=3,
1468 bymonth=(1,3),
1469 bymonthday=(1,3),
1470 byweekday=(TU,TH),
1471 dtstart=parse("19970902T090000"))),
1472 [datetime(1998, 1, 1, 0, 0),
1473 datetime(1998, 1, 1, 1, 0),
1474 datetime(1998, 1, 1, 2, 0)])
1475
1476 def testHourlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001477 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001478 count=3,
1479 byyearday=(1,100,200),
1480 dtstart=parse("19970902T090000"))),
1481 [datetime(1998, 1, 1, 0, 0),
1482 datetime(1998, 1, 1, 1, 0),
1483 datetime(1998, 1, 1, 2, 0)])
1484
1485 def testHourlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001486 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001487 count=3,
1488 bymonth=(4,7),
1489 byyearday=(1,100,200),
1490 dtstart=parse("19970902T090000"))),
1491 [datetime(1998, 4, 10, 0, 0),
1492 datetime(1998, 4, 10, 1, 0),
1493 datetime(1998, 4, 10, 2, 0)])
1494
1495 def testHourlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00001496 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001497 count=3,
1498 byweekno=20,
1499 dtstart=parse("19970902T090000"))),
1500 [datetime(1998, 5, 11, 0, 0),
1501 datetime(1998, 5, 11, 1, 0),
1502 datetime(1998, 5, 11, 2, 0)])
1503
1504 def testHourlyByWeekNoAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001505 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001506 count=3,
1507 byweekno=1,
1508 byweekday=MO,
1509 dtstart=parse("19970902T090000"))),
1510 [datetime(1997, 12, 29, 0, 0),
1511 datetime(1997, 12, 29, 1, 0),
1512 datetime(1997, 12, 29, 2, 0)])
1513
1514 def testHourlyByWeekNoAndWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001515 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001516 count=3,
1517 byweekno=52,
1518 byweekday=SU,
1519 dtstart=parse("19970902T090000"))),
1520 [datetime(1997, 12, 28, 0, 0),
1521 datetime(1997, 12, 28, 1, 0),
1522 datetime(1997, 12, 28, 2, 0)])
1523
1524 def testHourlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001525 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001526 count=3,
1527 byweekno=-1,
1528 byweekday=SU,
1529 dtstart=parse("19970902T090000"))),
1530 [datetime(1997, 12, 28, 0, 0),
1531 datetime(1997, 12, 28, 1, 0),
1532 datetime(1997, 12, 28, 2, 0)])
1533
1534 def testHourlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001535 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001536 count=3,
1537 byweekno=53,
1538 byweekday=MO,
1539 dtstart=parse("19970902T090000"))),
1540 [datetime(1998, 12, 28, 0, 0),
1541 datetime(1998, 12, 28, 1, 0),
1542 datetime(1998, 12, 28, 2, 0)])
1543
1544 def testHourlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001545 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001546 count=3,
1547 byeaster=0,
1548 dtstart=parse("19970902T090000"))),
1549 [datetime(1998, 4, 12, 0, 0),
1550 datetime(1998, 4, 12, 1, 0),
1551 datetime(1998, 4, 12, 2, 0)])
1552
1553 def testHourlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001554 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001555 count=3,
1556 byeaster=1,
1557 dtstart=parse("19970902T090000"))),
1558 [datetime(1998, 4, 13, 0, 0),
1559 datetime(1998, 4, 13, 1, 0),
1560 datetime(1998, 4, 13, 2, 0)])
1561
1562 def testHourlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001563 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001564 count=3,
1565 byeaster=-1,
1566 dtstart=parse("19970902T090000"))),
1567 [datetime(1998, 4, 11, 0, 0),
1568 datetime(1998, 4, 11, 1, 0),
1569 datetime(1998, 4, 11, 2, 0)])
1570
1571 def testHourlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001572 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001573 count=3,
1574 byhour=(6,18),
1575 dtstart=parse("19970902T090000"))),
1576 [datetime(1997, 9, 2, 18, 0),
1577 datetime(1997, 9, 3, 6, 0),
1578 datetime(1997, 9, 3, 18, 0)])
1579
1580 def testHourlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001581 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001582 count=3,
1583 byminute=(6,18),
1584 dtstart=parse("19970902T090000"))),
1585 [datetime(1997, 9, 2, 9, 6),
1586 datetime(1997, 9, 2, 9, 18),
1587 datetime(1997, 9, 2, 10, 6)])
1588
1589 def testHourlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001590 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001591 count=3,
1592 bysecond=(6,18),
1593 dtstart=parse("19970902T090000"))),
1594 [datetime(1997, 9, 2, 9, 0, 6),
1595 datetime(1997, 9, 2, 9, 0, 18),
1596 datetime(1997, 9, 2, 10, 0, 6)])
1597
1598 def testHourlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001599 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001600 count=3,
1601 byhour=(6,18),
1602 byminute=(6,18),
1603 dtstart=parse("19970902T090000"))),
1604 [datetime(1997, 9, 2, 18, 6),
1605 datetime(1997, 9, 2, 18, 18),
1606 datetime(1997, 9, 3, 6, 6)])
1607
1608 def testHourlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001609 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001610 count=3,
1611 byhour=(6,18),
1612 bysecond=(6,18),
1613 dtstart=parse("19970902T090000"))),
1614 [datetime(1997, 9, 2, 18, 0, 6),
1615 datetime(1997, 9, 2, 18, 0, 18),
1616 datetime(1997, 9, 3, 6, 0, 6)])
1617
1618 def testHourlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001619 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001620 count=3,
1621 byminute=(6,18),
1622 bysecond=(6,18),
1623 dtstart=parse("19970902T090000"))),
1624 [datetime(1997, 9, 2, 9, 6, 6),
1625 datetime(1997, 9, 2, 9, 6, 18),
1626 datetime(1997, 9, 2, 9, 18, 6)])
1627
1628 def testHourlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001629 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001630 count=3,
1631 byhour=(6,18),
1632 byminute=(6,18),
1633 bysecond=(6,18),
1634 dtstart=parse("19970902T090000"))),
1635 [datetime(1997, 9, 2, 18, 6, 6),
1636 datetime(1997, 9, 2, 18, 6, 18),
1637 datetime(1997, 9, 2, 18, 18, 6)])
1638
1639 def testHourlyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001640 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001641 count=3,
1642 byminute=(15,45),
1643 bysecond=(15,45),
1644 bysetpos=(3,-3),
1645 dtstart=parse("19970902T090000"))),
1646 [datetime(1997, 9, 2, 9, 15, 45),
1647 datetime(1997, 9, 2, 9, 45, 15),
1648 datetime(1997, 9, 2, 10, 15, 45)])
1649
niemeyercb08a352003-10-08 06:02:06 +00001650 def testMinutely(self):
niemeyer4da06a42004-07-16 21:21:22 +00001651 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001652 count=3,
1653 dtstart=parse("19970902T090000"))),
1654 [datetime(1997, 9, 2, 9, 0),
1655 datetime(1997, 9, 2, 9, 1),
1656 datetime(1997, 9, 2, 9, 2)])
1657
niemeyercb08a352003-10-08 06:02:06 +00001658 def testMinutelyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001659 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001660 count=3,
1661 interval=2,
1662 dtstart=parse("19970902T090000"))),
1663 [datetime(1997, 9, 2, 9, 0),
1664 datetime(1997, 9, 2, 9, 2),
1665 datetime(1997, 9, 2, 9, 4)])
1666
1667 def testMinutelyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001668 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001669 count=3,
1670 interval=1501,
1671 dtstart=parse("19970902T090000"))),
1672 [datetime(1997, 9, 2, 9, 0),
1673 datetime(1997, 9, 3, 10, 1),
1674 datetime(1997, 9, 4, 11, 2)])
1675
1676 def testMinutelyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001677 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001678 count=3,
1679 bymonth=(1,3),
1680 dtstart=parse("19970902T090000"))),
1681 [datetime(1998, 1, 1, 0, 0),
1682 datetime(1998, 1, 1, 0, 1),
1683 datetime(1998, 1, 1, 0, 2)])
1684
1685 def testMinutelyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001686 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001687 count=3,
1688 bymonthday=(1,3),
1689 dtstart=parse("19970902T090000"))),
1690 [datetime(1997, 9, 3, 0, 0),
1691 datetime(1997, 9, 3, 0, 1),
1692 datetime(1997, 9, 3, 0, 2)])
1693
1694 def testMinutelyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001695 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001696 count=3,
1697 bymonth=(1,3),
1698 bymonthday=(5,7),
1699 dtstart=parse("19970902T090000"))),
1700 [datetime(1998, 1, 5, 0, 0),
1701 datetime(1998, 1, 5, 0, 1),
1702 datetime(1998, 1, 5, 0, 2)])
1703
1704 def testMinutelyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001705 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001706 count=3,
1707 byweekday=(TU,TH),
1708 dtstart=parse("19970902T090000"))),
1709 [datetime(1997, 9, 2, 9, 0),
1710 datetime(1997, 9, 2, 9, 1),
1711 datetime(1997, 9, 2, 9, 2)])
1712
niemeyer7d8be1a2003-10-09 01:09:42 +00001713 def testMinutelyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001714 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001715 count=3,
1716 byweekday=(TU(1),TH(-1)),
1717 dtstart=parse("19970902T090000"))),
1718 [datetime(1997, 9, 2, 9, 0),
1719 datetime(1997, 9, 2, 9, 1),
1720 datetime(1997, 9, 2, 9, 2)])
1721
niemeyercb08a352003-10-08 06:02:06 +00001722 def testMinutelyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001723 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001724 count=3,
1725 bymonth=(1,3),
1726 byweekday=(TU,TH),
1727 dtstart=parse("19970902T090000"))),
1728 [datetime(1998, 1, 1, 0, 0),
1729 datetime(1998, 1, 1, 0, 1),
1730 datetime(1998, 1, 1, 0, 2)])
1731
niemeyer7d8be1a2003-10-09 01:09:42 +00001732 def testMinutelyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001733 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001734 count=3,
1735 bymonth=(1,3),
1736 byweekday=(TU(1),TH(-1)),
1737 dtstart=parse("19970902T090000"))),
1738 [datetime(1998, 1, 1, 0, 0),
1739 datetime(1998, 1, 1, 0, 1),
1740 datetime(1998, 1, 1, 0, 2)])
1741
1742 def testMinutelyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001743 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001744 count=3,
1745 bymonthday=(1,3),
1746 byweekday=(TU,TH),
1747 dtstart=parse("19970902T090000"))),
1748 [datetime(1998, 1, 1, 0, 0),
1749 datetime(1998, 1, 1, 0, 1),
1750 datetime(1998, 1, 1, 0, 2)])
1751
1752 def testMinutelyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001753 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001754 count=3,
1755 bymonth=(1,3),
1756 bymonthday=(1,3),
1757 byweekday=(TU,TH),
1758 dtstart=parse("19970902T090000"))),
1759 [datetime(1998, 1, 1, 0, 0),
1760 datetime(1998, 1, 1, 0, 1),
1761 datetime(1998, 1, 1, 0, 2)])
1762
1763 def testMinutelyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001764 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001765 count=3,
1766 byyearday=(1,100,200),
1767 dtstart=parse("19970902T090000"))),
1768 [datetime(1998, 1, 1, 0, 0),
1769 datetime(1998, 1, 1, 0, 1),
1770 datetime(1998, 1, 1, 0, 2)])
1771
1772 def testMinutelyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001773 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001774 count=3,
1775 bymonth=(4,7),
1776 byyearday=(1,100,200),
1777 dtstart=parse("19970902T090000"))),
1778 [datetime(1998, 4, 10, 0, 0),
1779 datetime(1998, 4, 10, 0, 1),
1780 datetime(1998, 4, 10, 0, 2)])
1781
1782 def testMinutelyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00001783 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001784 count=3,
1785 byweekno=20,
1786 dtstart=parse("19970902T090000"))),
1787 [datetime(1998, 5, 11, 0, 0),
1788 datetime(1998, 5, 11, 0, 1),
1789 datetime(1998, 5, 11, 0, 2)])
1790
1791 def testMinutelyByWeekNoAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001792 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001793 count=3,
1794 byweekno=1,
1795 byweekday=MO,
1796 dtstart=parse("19970902T090000"))),
1797 [datetime(1997, 12, 29, 0, 0),
1798 datetime(1997, 12, 29, 0, 1),
1799 datetime(1997, 12, 29, 0, 2)])
1800
1801 def testMinutelyByWeekNoAndWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001802 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001803 count=3,
1804 byweekno=52,
1805 byweekday=SU,
1806 dtstart=parse("19970902T090000"))),
1807 [datetime(1997, 12, 28, 0, 0),
1808 datetime(1997, 12, 28, 0, 1),
1809 datetime(1997, 12, 28, 0, 2)])
1810
1811 def testMinutelyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001812 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001813 count=3,
1814 byweekno=-1,
1815 byweekday=SU,
1816 dtstart=parse("19970902T090000"))),
1817 [datetime(1997, 12, 28, 0, 0),
1818 datetime(1997, 12, 28, 0, 1),
1819 datetime(1997, 12, 28, 0, 2)])
1820
1821 def testMinutelyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001822 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001823 count=3,
1824 byweekno=53,
1825 byweekday=MO,
1826 dtstart=parse("19970902T090000"))),
1827 [datetime(1998, 12, 28, 0, 0),
1828 datetime(1998, 12, 28, 0, 1),
1829 datetime(1998, 12, 28, 0, 2)])
1830
1831 def testMinutelyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001832 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001833 count=3,
1834 byeaster=0,
1835 dtstart=parse("19970902T090000"))),
1836 [datetime(1998, 4, 12, 0, 0),
1837 datetime(1998, 4, 12, 0, 1),
1838 datetime(1998, 4, 12, 0, 2)])
1839
1840 def testMinutelyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001841 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001842 count=3,
1843 byeaster=1,
1844 dtstart=parse("19970902T090000"))),
1845 [datetime(1998, 4, 13, 0, 0),
1846 datetime(1998, 4, 13, 0, 1),
1847 datetime(1998, 4, 13, 0, 2)])
1848
1849 def testMinutelyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001850 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001851 count=3,
1852 byeaster=-1,
1853 dtstart=parse("19970902T090000"))),
1854 [datetime(1998, 4, 11, 0, 0),
1855 datetime(1998, 4, 11, 0, 1),
1856 datetime(1998, 4, 11, 0, 2)])
1857
1858 def testMinutelyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001859 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001860 count=3,
1861 byhour=(6,18),
1862 dtstart=parse("19970902T090000"))),
1863 [datetime(1997, 9, 2, 18, 0),
1864 datetime(1997, 9, 2, 18, 1),
1865 datetime(1997, 9, 2, 18, 2)])
1866
1867 def testMinutelyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001868 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001869 count=3,
1870 byminute=(6,18),
1871 dtstart=parse("19970902T090000"))),
1872 [datetime(1997, 9, 2, 9, 6),
1873 datetime(1997, 9, 2, 9, 18),
1874 datetime(1997, 9, 2, 10, 6)])
1875
1876 def testMinutelyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001877 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001878 count=3,
1879 bysecond=(6,18),
1880 dtstart=parse("19970902T090000"))),
1881 [datetime(1997, 9, 2, 9, 0, 6),
1882 datetime(1997, 9, 2, 9, 0, 18),
1883 datetime(1997, 9, 2, 9, 1, 6)])
1884
1885 def testMinutelyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001886 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001887 count=3,
1888 byhour=(6,18),
1889 byminute=(6,18),
1890 dtstart=parse("19970902T090000"))),
1891 [datetime(1997, 9, 2, 18, 6),
1892 datetime(1997, 9, 2, 18, 18),
1893 datetime(1997, 9, 3, 6, 6)])
1894
1895 def testMinutelyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001896 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001897 count=3,
1898 byhour=(6,18),
1899 bysecond=(6,18),
1900 dtstart=parse("19970902T090000"))),
1901 [datetime(1997, 9, 2, 18, 0, 6),
1902 datetime(1997, 9, 2, 18, 0, 18),
1903 datetime(1997, 9, 2, 18, 1, 6)])
1904
1905 def testMinutelyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001906 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001907 count=3,
1908 byminute=(6,18),
1909 bysecond=(6,18),
1910 dtstart=parse("19970902T090000"))),
1911 [datetime(1997, 9, 2, 9, 6, 6),
1912 datetime(1997, 9, 2, 9, 6, 18),
1913 datetime(1997, 9, 2, 9, 18, 6)])
1914
1915 def testMinutelyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001916 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001917 count=3,
1918 byhour=(6,18),
1919 byminute=(6,18),
1920 bysecond=(6,18),
1921 dtstart=parse("19970902T090000"))),
1922 [datetime(1997, 9, 2, 18, 6, 6),
1923 datetime(1997, 9, 2, 18, 6, 18),
1924 datetime(1997, 9, 2, 18, 18, 6)])
1925
1926 def testMinutelyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001927 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001928 count=3,
1929 bysecond=(15,30,45),
1930 bysetpos=(3,-3),
1931 dtstart=parse("19970902T090000"))),
1932 [datetime(1997, 9, 2, 9, 0, 15),
1933 datetime(1997, 9, 2, 9, 0, 45),
1934 datetime(1997, 9, 2, 9, 1, 15)])
1935
niemeyercb08a352003-10-08 06:02:06 +00001936 def testSecondly(self):
niemeyer4da06a42004-07-16 21:21:22 +00001937 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001938 count=3,
1939 dtstart=parse("19970902T090000"))),
1940 [datetime(1997, 9, 2, 9, 0, 0),
1941 datetime(1997, 9, 2, 9, 0, 1),
1942 datetime(1997, 9, 2, 9, 0, 2)])
1943
niemeyercb08a352003-10-08 06:02:06 +00001944 def testSecondlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001945 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001946 count=3,
1947 interval=2,
1948 dtstart=parse("19970902T090000"))),
1949 [datetime(1997, 9, 2, 9, 0, 0),
1950 datetime(1997, 9, 2, 9, 0, 2),
1951 datetime(1997, 9, 2, 9, 0, 4)])
1952
1953 def testSecondlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001954 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001955 count=3,
1956 interval=90061,
1957 dtstart=parse("19970902T090000"))),
1958 [datetime(1997, 9, 2, 9, 0, 0),
1959 datetime(1997, 9, 3, 10, 1, 1),
1960 datetime(1997, 9, 4, 11, 2, 2)])
1961
1962 def testSecondlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001963 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001964 count=3,
1965 bymonth=(1,3),
1966 dtstart=parse("19970902T090000"))),
1967 [datetime(1998, 1, 1, 0, 0, 0),
1968 datetime(1998, 1, 1, 0, 0, 1),
1969 datetime(1998, 1, 1, 0, 0, 2)])
1970
1971 def testSecondlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001972 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001973 count=3,
1974 bymonthday=(1,3),
1975 dtstart=parse("19970902T090000"))),
1976 [datetime(1997, 9, 3, 0, 0, 0),
1977 datetime(1997, 9, 3, 0, 0, 1),
1978 datetime(1997, 9, 3, 0, 0, 2)])
1979
1980 def testSecondlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001981 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001982 count=3,
1983 bymonth=(1,3),
1984 bymonthday=(5,7),
1985 dtstart=parse("19970902T090000"))),
1986 [datetime(1998, 1, 5, 0, 0, 0),
1987 datetime(1998, 1, 5, 0, 0, 1),
1988 datetime(1998, 1, 5, 0, 0, 2)])
1989
1990 def testSecondlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001991 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00001992 count=3,
1993 byweekday=(TU,TH),
1994 dtstart=parse("19970902T090000"))),
1995 [datetime(1997, 9, 2, 9, 0, 0),
1996 datetime(1997, 9, 2, 9, 0, 1),
1997 datetime(1997, 9, 2, 9, 0, 2)])
1998
niemeyer7d8be1a2003-10-09 01:09:42 +00001999 def testSecondlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002000 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002001 count=3,
2002 byweekday=(TU(1),TH(-1)),
2003 dtstart=parse("19970902T090000"))),
2004 [datetime(1997, 9, 2, 9, 0, 0),
2005 datetime(1997, 9, 2, 9, 0, 1),
2006 datetime(1997, 9, 2, 9, 0, 2)])
2007
niemeyercb08a352003-10-08 06:02:06 +00002008 def testSecondlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002009 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002010 count=3,
2011 bymonth=(1,3),
2012 byweekday=(TU,TH),
2013 dtstart=parse("19970902T090000"))),
2014 [datetime(1998, 1, 1, 0, 0, 0),
2015 datetime(1998, 1, 1, 0, 0, 1),
2016 datetime(1998, 1, 1, 0, 0, 2)])
2017
niemeyer7d8be1a2003-10-09 01:09:42 +00002018 def testSecondlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002019 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002020 count=3,
2021 bymonth=(1,3),
2022 byweekday=(TU(1),TH(-1)),
2023 dtstart=parse("19970902T090000"))),
2024 [datetime(1998, 1, 1, 0, 0, 0),
2025 datetime(1998, 1, 1, 0, 0, 1),
2026 datetime(1998, 1, 1, 0, 0, 2)])
2027
2028 def testSecondlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002029 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002030 count=3,
2031 bymonthday=(1,3),
2032 byweekday=(TU,TH),
2033 dtstart=parse("19970902T090000"))),
2034 [datetime(1998, 1, 1, 0, 0, 0),
2035 datetime(1998, 1, 1, 0, 0, 1),
2036 datetime(1998, 1, 1, 0, 0, 2)])
2037
2038 def testSecondlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002039 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002040 count=3,
2041 bymonth=(1,3),
2042 bymonthday=(1,3),
2043 byweekday=(TU,TH),
2044 dtstart=parse("19970902T090000"))),
2045 [datetime(1998, 1, 1, 0, 0, 0),
2046 datetime(1998, 1, 1, 0, 0, 1),
2047 datetime(1998, 1, 1, 0, 0, 2)])
2048
2049 def testSecondlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002050 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002051 count=3,
2052 byyearday=(1,100,200),
2053 dtstart=parse("19970902T090000"))),
2054 [datetime(1998, 1, 1, 0, 0, 0),
2055 datetime(1998, 1, 1, 0, 0, 1),
2056 datetime(1998, 1, 1, 0, 0, 2)])
2057
2058 def testSecondlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002059 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002060 count=3,
2061 bymonth=(4,7),
2062 byyearday=(1,100,200),
2063 dtstart=parse("19970902T090000"))),
2064 [datetime(1998, 4, 10, 0, 0, 0),
2065 datetime(1998, 4, 10, 0, 0, 1),
2066 datetime(1998, 4, 10, 0, 0, 2)])
2067
2068 def testSecondlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00002069 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002070 count=3,
2071 byweekno=20,
2072 dtstart=parse("19970902T090000"))),
2073 [datetime(1998, 5, 11, 0, 0, 0),
2074 datetime(1998, 5, 11, 0, 0, 1),
2075 datetime(1998, 5, 11, 0, 0, 2)])
2076
2077 def testSecondlyByWeekNoAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002078 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002079 count=3,
2080 byweekno=1,
2081 byweekday=MO,
2082 dtstart=parse("19970902T090000"))),
2083 [datetime(1997, 12, 29, 0, 0, 0),
2084 datetime(1997, 12, 29, 0, 0, 1),
2085 datetime(1997, 12, 29, 0, 0, 2)])
2086
2087 def testSecondlyByWeekNoAndWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00002088 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002089 count=3,
2090 byweekno=52,
2091 byweekday=SU,
2092 dtstart=parse("19970902T090000"))),
2093 [datetime(1997, 12, 28, 0, 0, 0),
2094 datetime(1997, 12, 28, 0, 0, 1),
2095 datetime(1997, 12, 28, 0, 0, 2)])
2096
2097 def testSecondlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00002098 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002099 count=3,
2100 byweekno=-1,
2101 byweekday=SU,
2102 dtstart=parse("19970902T090000"))),
2103 [datetime(1997, 12, 28, 0, 0, 0),
2104 datetime(1997, 12, 28, 0, 0, 1),
2105 datetime(1997, 12, 28, 0, 0, 2)])
2106
2107 def testSecondlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00002108 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002109 count=3,
2110 byweekno=53,
2111 byweekday=MO,
2112 dtstart=parse("19970902T090000"))),
2113 [datetime(1998, 12, 28, 0, 0, 0),
2114 datetime(1998, 12, 28, 0, 0, 1),
2115 datetime(1998, 12, 28, 0, 0, 2)])
2116
2117 def testSecondlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00002118 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002119 count=3,
2120 byeaster=0,
2121 dtstart=parse("19970902T090000"))),
2122 [datetime(1998, 4, 12, 0, 0, 0),
2123 datetime(1998, 4, 12, 0, 0, 1),
2124 datetime(1998, 4, 12, 0, 0, 2)])
2125
2126 def testSecondlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00002127 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002128 count=3,
2129 byeaster=1,
2130 dtstart=parse("19970902T090000"))),
2131 [datetime(1998, 4, 13, 0, 0, 0),
2132 datetime(1998, 4, 13, 0, 0, 1),
2133 datetime(1998, 4, 13, 0, 0, 2)])
2134
2135 def testSecondlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00002136 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002137 count=3,
2138 byeaster=-1,
2139 dtstart=parse("19970902T090000"))),
2140 [datetime(1998, 4, 11, 0, 0, 0),
2141 datetime(1998, 4, 11, 0, 0, 1),
2142 datetime(1998, 4, 11, 0, 0, 2)])
2143
2144 def testSecondlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00002145 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002146 count=3,
2147 byhour=(6,18),
2148 dtstart=parse("19970902T090000"))),
2149 [datetime(1997, 9, 2, 18, 0, 0),
2150 datetime(1997, 9, 2, 18, 0, 1),
2151 datetime(1997, 9, 2, 18, 0, 2)])
2152
2153 def testSecondlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00002154 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002155 count=3,
2156 byminute=(6,18),
2157 dtstart=parse("19970902T090000"))),
2158 [datetime(1997, 9, 2, 9, 6, 0),
2159 datetime(1997, 9, 2, 9, 6, 1),
2160 datetime(1997, 9, 2, 9, 6, 2)])
2161
2162 def testSecondlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002163 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002164 count=3,
2165 bysecond=(6,18),
2166 dtstart=parse("19970902T090000"))),
2167 [datetime(1997, 9, 2, 9, 0, 6),
2168 datetime(1997, 9, 2, 9, 0, 18),
2169 datetime(1997, 9, 2, 9, 1, 6)])
2170
2171 def testSecondlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00002172 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002173 count=3,
2174 byhour=(6,18),
2175 byminute=(6,18),
2176 dtstart=parse("19970902T090000"))),
2177 [datetime(1997, 9, 2, 18, 6, 0),
2178 datetime(1997, 9, 2, 18, 6, 1),
2179 datetime(1997, 9, 2, 18, 6, 2)])
2180
2181 def testSecondlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002182 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002183 count=3,
2184 byhour=(6,18),
2185 bysecond=(6,18),
2186 dtstart=parse("19970902T090000"))),
2187 [datetime(1997, 9, 2, 18, 0, 6),
2188 datetime(1997, 9, 2, 18, 0, 18),
2189 datetime(1997, 9, 2, 18, 1, 6)])
2190
2191 def testSecondlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002192 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002193 count=3,
2194 byminute=(6,18),
2195 bysecond=(6,18),
2196 dtstart=parse("19970902T090000"))),
2197 [datetime(1997, 9, 2, 9, 6, 6),
2198 datetime(1997, 9, 2, 9, 6, 18),
2199 datetime(1997, 9, 2, 9, 18, 6)])
2200
2201 def testSecondlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002202 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002203 count=3,
2204 byhour=(6,18),
2205 byminute=(6,18),
2206 bysecond=(6,18),
2207 dtstart=parse("19970902T090000"))),
2208 [datetime(1997, 9, 2, 18, 6, 6),
2209 datetime(1997, 9, 2, 18, 6, 18),
2210 datetime(1997, 9, 2, 18, 18, 6)])
2211
niemeyercb08a352003-10-08 06:02:06 +00002212 def testUntilNotMatching(self):
niemeyer4da06a42004-07-16 21:21:22 +00002213 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002214 count=3,
2215 dtstart=parse("19970902T090000"),
2216 until=parse("19970905T080000"))),
2217 [datetime(1997, 9, 2, 9, 0),
2218 datetime(1997, 9, 3, 9, 0),
2219 datetime(1997, 9, 4, 9, 0)])
2220
2221 def testUntilMatching(self):
niemeyer4da06a42004-07-16 21:21:22 +00002222 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002223 count=3,
2224 dtstart=parse("19970902T090000"),
2225 until=parse("19970904T090000"))),
2226 [datetime(1997, 9, 2, 9, 0),
2227 datetime(1997, 9, 3, 9, 0),
2228 datetime(1997, 9, 4, 9, 0)])
2229
2230 def testUntilSingle(self):
niemeyer4da06a42004-07-16 21:21:22 +00002231 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002232 count=3,
2233 dtstart=parse("19970902T090000"),
2234 until=parse("19970902T090000"))),
2235 [datetime(1997, 9, 2, 9, 0)])
2236
2237 def testUntilEmpty(self):
niemeyer4da06a42004-07-16 21:21:22 +00002238 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002239 count=3,
2240 dtstart=parse("19970902T090000"),
2241 until=parse("19970901T090000"))),
2242 [])
2243
niemeyer8d468492003-10-09 16:49:35 +00002244 def testUntilWithDate(self):
niemeyer4da06a42004-07-16 21:21:22 +00002245 self.assertEqual(list(rrule(DAILY,
niemeyer8d468492003-10-09 16:49:35 +00002246 count=3,
2247 dtstart=parse("19970902T090000"),
2248 until=date(1997, 9, 5))),
2249 [datetime(1997, 9, 2, 9, 0),
2250 datetime(1997, 9, 3, 9, 0),
2251 datetime(1997, 9, 4, 9, 0)])
2252
niemeyercee1a1b2003-10-09 01:39:15 +00002253 def testWkStIntervalMO(self):
niemeyer4da06a42004-07-16 21:21:22 +00002254 self.assertEqual(list(rrule(WEEKLY,
niemeyercee1a1b2003-10-09 01:39:15 +00002255 count=3,
2256 interval=2,
2257 byweekday=(TU,SU),
2258 wkst=MO,
2259 dtstart=parse("19970902T090000"))),
2260 [datetime(1997, 9, 2, 9, 0),
2261 datetime(1997, 9, 7, 9, 0),
2262 datetime(1997, 9, 16, 9, 0)])
2263
2264 def testWkStIntervalSU(self):
niemeyer4da06a42004-07-16 21:21:22 +00002265 self.assertEqual(list(rrule(WEEKLY,
niemeyercee1a1b2003-10-09 01:39:15 +00002266 count=3,
2267 interval=2,
2268 byweekday=(TU,SU),
2269 wkst=SU,
2270 dtstart=parse("19970902T090000"))),
2271 [datetime(1997, 9, 2, 9, 0),
2272 datetime(1997, 9, 14, 9, 0),
2273 datetime(1997, 9, 16, 9, 0)])
2274
niemeyer46c89302003-10-09 16:23:36 +00002275 def testDTStartIsDate(self):
niemeyer4da06a42004-07-16 21:21:22 +00002276 self.assertEqual(list(rrule(DAILY,
niemeyer46c89302003-10-09 16:23:36 +00002277 count=3,
2278 dtstart=date(1997, 9, 2))),
2279 [datetime(1997, 9, 2, 0, 0),
2280 datetime(1997, 9, 3, 0, 0),
2281 datetime(1997, 9, 4, 0, 0)])
2282
2283 def testDTStartWithMicroseconds(self):
niemeyer4da06a42004-07-16 21:21:22 +00002284 self.assertEqual(list(rrule(DAILY,
niemeyer46c89302003-10-09 16:23:36 +00002285 count=3,
2286 dtstart=parse("19970902T090000.5"))),
2287 [datetime(1997, 9, 2, 9, 0),
2288 datetime(1997, 9, 3, 9, 0),
2289 datetime(1997, 9, 4, 9, 0)])
2290
niemeyer7ac367e2003-10-10 19:16:28 +00002291 def testMaxYear(self):
niemeyer4da06a42004-07-16 21:21:22 +00002292 self.assertEqual(list(rrule(YEARLY,
niemeyer7ac367e2003-10-10 19:16:28 +00002293 count=3,
2294 bymonth=2,
2295 bymonthday=31,
2296 dtstart=parse("99970902T090000"))),
2297 [])
2298
2299 def testGetItem(self):
niemeyer4da06a42004-07-16 21:21:22 +00002300 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002301 count=3,
2302 dtstart=parse("19970902T090000"))[0],
2303 datetime(1997, 9, 2, 9, 0))
2304
2305 def testGetItemNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00002306 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002307 count=3,
2308 dtstart=parse("19970902T090000"))[-1],
2309 datetime(1997, 9, 4, 9, 0))
2310
2311 def testGetItemSlice(self):
niemeyer4da06a42004-07-16 21:21:22 +00002312 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002313 #count=3,
2314 dtstart=parse("19970902T090000"))[1:2],
2315 [datetime(1997, 9, 3, 9, 0)])
2316
2317 def testGetItemSliceEmpty(self):
niemeyer4da06a42004-07-16 21:21:22 +00002318 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002319 count=3,
2320 dtstart=parse("19970902T090000"))[:],
2321 [datetime(1997, 9, 2, 9, 0),
2322 datetime(1997, 9, 3, 9, 0),
2323 datetime(1997, 9, 4, 9, 0)])
2324
2325 def testGetItemSliceStep(self):
niemeyer4da06a42004-07-16 21:21:22 +00002326 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002327 count=3,
2328 dtstart=parse("19970902T090000"))[::-2],
2329 [datetime(1997, 9, 4, 9, 0),
2330 datetime(1997, 9, 2, 9, 0)])
2331
2332 def testCount(self):
niemeyer4da06a42004-07-16 21:21:22 +00002333 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002334 count=3,
2335 dtstart=parse("19970902T090000")).count(),
2336 3)
2337
niemeyer61faaf32003-10-10 19:31:00 +00002338 def testContains(self):
niemeyer4da06a42004-07-16 21:21:22 +00002339 rr = rrule(DAILY, count=3, dtstart=parse("19970902T090000"))
niemeyer61faaf32003-10-10 19:31:00 +00002340 self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True)
2341
2342 def testContainsNot(self):
niemeyer4da06a42004-07-16 21:21:22 +00002343 rr = rrule(DAILY, count=3, dtstart=parse("19970902T090000"))
niemeyer61faaf32003-10-10 19:31:00 +00002344 self.assertEqual(datetime(1997, 9, 3, 9, 0) not in rr, False)
2345
2346 def testBefore(self):
niemeyer4da06a42004-07-16 21:21:22 +00002347 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002348 #count=5,
2349 dtstart=parse("19970902T090000"))
2350 .before(parse("19970905T090000")),
2351 datetime(1997, 9, 4, 9, 0))
2352
2353 def testBeforeInc(self):
niemeyer4da06a42004-07-16 21:21:22 +00002354 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002355 #count=5,
2356 dtstart=parse("19970902T090000"))
2357 .before(parse("19970905T090000"), inc=True),
2358 datetime(1997, 9, 5, 9, 0))
2359
2360 def testAfter(self):
niemeyer4da06a42004-07-16 21:21:22 +00002361 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002362 #count=5,
2363 dtstart=parse("19970902T090000"))
2364 .after(parse("19970904T090000")),
2365 datetime(1997, 9, 5, 9, 0))
2366
2367 def testAfterInc(self):
niemeyer4da06a42004-07-16 21:21:22 +00002368 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002369 #count=5,
2370 dtstart=parse("19970902T090000"))
2371 .after(parse("19970904T090000"), inc=True),
2372 datetime(1997, 9, 4, 9, 0))
2373
2374 def testBetween(self):
niemeyer4da06a42004-07-16 21:21:22 +00002375 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002376 #count=5,
2377 dtstart=parse("19970902T090000"))
2378 .between(parse("19970902T090000"),
2379 parse("19970906T090000")),
2380 [datetime(1997, 9, 3, 9, 0),
2381 datetime(1997, 9, 4, 9, 0),
2382 datetime(1997, 9, 5, 9, 0)])
2383
2384 def testBetweenInc(self):
niemeyer4da06a42004-07-16 21:21:22 +00002385 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002386 #count=5,
2387 dtstart=parse("19970902T090000"))
2388 .between(parse("19970902T090000"),
2389 parse("19970906T090000"), inc=True),
2390 [datetime(1997, 9, 2, 9, 0),
2391 datetime(1997, 9, 3, 9, 0),
2392 datetime(1997, 9, 4, 9, 0),
2393 datetime(1997, 9, 5, 9, 0),
2394 datetime(1997, 9, 6, 9, 0)])
2395
niemeyer7ac367e2003-10-10 19:16:28 +00002396 def testCachePre(self):
niemeyer4da06a42004-07-16 21:21:22 +00002397 rr = rrule(DAILY, count=15, cache=True,
niemeyer7ac367e2003-10-10 19:16:28 +00002398 dtstart=parse("19970902T090000"))
2399 self.assertEqual(list(rr),
2400 [datetime(1997, 9, 2, 9, 0),
2401 datetime(1997, 9, 3, 9, 0),
2402 datetime(1997, 9, 4, 9, 0),
2403 datetime(1997, 9, 5, 9, 0),
2404 datetime(1997, 9, 6, 9, 0),
2405 datetime(1997, 9, 7, 9, 0),
2406 datetime(1997, 9, 8, 9, 0),
2407 datetime(1997, 9, 9, 9, 0),
2408 datetime(1997, 9, 10, 9, 0),
2409 datetime(1997, 9, 11, 9, 0),
2410 datetime(1997, 9, 12, 9, 0),
2411 datetime(1997, 9, 13, 9, 0),
2412 datetime(1997, 9, 14, 9, 0),
2413 datetime(1997, 9, 15, 9, 0),
2414 datetime(1997, 9, 16, 9, 0)])
2415
2416 def testCachePost(self):
niemeyer4da06a42004-07-16 21:21:22 +00002417 rr = rrule(DAILY, count=15, cache=True,
niemeyer7ac367e2003-10-10 19:16:28 +00002418 dtstart=parse("19970902T090000"))
2419 for x in rr: pass
2420 self.assertEqual(list(rr),
2421 [datetime(1997, 9, 2, 9, 0),
2422 datetime(1997, 9, 3, 9, 0),
2423 datetime(1997, 9, 4, 9, 0),
2424 datetime(1997, 9, 5, 9, 0),
2425 datetime(1997, 9, 6, 9, 0),
2426 datetime(1997, 9, 7, 9, 0),
2427 datetime(1997, 9, 8, 9, 0),
2428 datetime(1997, 9, 9, 9, 0),
2429 datetime(1997, 9, 10, 9, 0),
2430 datetime(1997, 9, 11, 9, 0),
2431 datetime(1997, 9, 12, 9, 0),
2432 datetime(1997, 9, 13, 9, 0),
2433 datetime(1997, 9, 14, 9, 0),
2434 datetime(1997, 9, 15, 9, 0),
2435 datetime(1997, 9, 16, 9, 0)])
2436
2437 def testCachePostInternal(self):
niemeyer4da06a42004-07-16 21:21:22 +00002438 rr = rrule(DAILY, count=15, cache=True,
niemeyer7ac367e2003-10-10 19:16:28 +00002439 dtstart=parse("19970902T090000"))
2440 for x in rr: pass
2441 self.assertEqual(rr._cache,
2442 [datetime(1997, 9, 2, 9, 0),
2443 datetime(1997, 9, 3, 9, 0),
2444 datetime(1997, 9, 4, 9, 0),
2445 datetime(1997, 9, 5, 9, 0),
2446 datetime(1997, 9, 6, 9, 0),
2447 datetime(1997, 9, 7, 9, 0),
2448 datetime(1997, 9, 8, 9, 0),
2449 datetime(1997, 9, 9, 9, 0),
2450 datetime(1997, 9, 10, 9, 0),
2451 datetime(1997, 9, 11, 9, 0),
2452 datetime(1997, 9, 12, 9, 0),
2453 datetime(1997, 9, 13, 9, 0),
2454 datetime(1997, 9, 14, 9, 0),
2455 datetime(1997, 9, 15, 9, 0),
2456 datetime(1997, 9, 16, 9, 0)])
2457
niemeyer61faaf32003-10-10 19:31:00 +00002458 def testCachePreContains(self):
niemeyer4da06a42004-07-16 21:21:22 +00002459 rr = rrule(DAILY, count=3, cache=True,
niemeyer61faaf32003-10-10 19:31:00 +00002460 dtstart=parse("19970902T090000"))
2461 self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True)
2462
2463 def testCachePostContains(self):
niemeyer4da06a42004-07-16 21:21:22 +00002464 rr = rrule(DAILY, count=3, cache=True,
niemeyer61faaf32003-10-10 19:31:00 +00002465 dtstart=parse("19970902T090000"))
2466 for x in rr: pass
2467 self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True)
2468
niemeyerdcad96c2003-10-09 02:47:09 +00002469 def testSet(self):
2470 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002471 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyerdcad96c2003-10-09 02:47:09 +00002472 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002473 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyerdcad96c2003-10-09 02:47:09 +00002474 dtstart=parse("19970902T090000")))
2475 self.assertEqual(list(set),
2476 [datetime(1997, 9, 2, 9, 0),
2477 datetime(1997, 9, 4, 9, 0),
2478 datetime(1997, 9, 9, 9, 0)])
2479
2480 def testSetDate(self):
2481 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002482 set.rrule(rrule(YEARLY, count=1, byweekday=TU,
niemeyerdcad96c2003-10-09 02:47:09 +00002483 dtstart=parse("19970902T090000")))
2484 set.rdate(datetime(1997, 9, 4, 9))
2485 set.rdate(datetime(1997, 9, 9, 9))
2486 self.assertEqual(list(set),
2487 [datetime(1997, 9, 2, 9, 0),
2488 datetime(1997, 9, 4, 9, 0),
2489 datetime(1997, 9, 9, 9, 0)])
2490
2491 def testSetExRule(self):
2492 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002493 set.rrule(rrule(YEARLY, count=6, byweekday=(TU,TH),
niemeyerdcad96c2003-10-09 02:47:09 +00002494 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002495 set.exrule(rrule(YEARLY, count=3, byweekday=TH,
niemeyerdcad96c2003-10-09 02:47:09 +00002496 dtstart=parse("19970902T090000")))
2497 self.assertEqual(list(set),
2498 [datetime(1997, 9, 2, 9, 0),
2499 datetime(1997, 9, 9, 9, 0),
2500 datetime(1997, 9, 16, 9, 0)])
2501
2502 def testSetExDate(self):
2503 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002504 set.rrule(rrule(YEARLY, count=6, byweekday=(TU,TH),
niemeyerdcad96c2003-10-09 02:47:09 +00002505 dtstart=parse("19970902T090000")))
2506 set.exdate(datetime(1997, 9, 4, 9))
2507 set.exdate(datetime(1997, 9, 11, 9))
2508 set.exdate(datetime(1997, 9, 18, 9))
2509 self.assertEqual(list(set),
2510 [datetime(1997, 9, 2, 9, 0),
2511 datetime(1997, 9, 9, 9, 0),
2512 datetime(1997, 9, 16, 9, 0)])
2513
niemeyer4da06a42004-07-16 21:21:22 +00002514 def testSetExDateRevOrder(self):
2515 set = rruleset()
2516 set.rrule(rrule(MONTHLY, count=5, bymonthday=10,
2517 dtstart=parse("20040101T090000")))
2518 set.exdate(datetime(2004, 4, 10, 9, 0))
2519 set.exdate(datetime(2004, 2, 10, 9, 0))
2520 self.assertEqual(list(set),
2521 [datetime(2004, 1, 10, 9, 0),
2522 datetime(2004, 3, 10, 9, 0),
2523 datetime(2004, 5, 10, 9, 0)])
2524
niemeyerdcad96c2003-10-09 02:47:09 +00002525 def testSetDateAndExDate(self):
2526 set = rruleset()
2527 set.rdate(datetime(1997, 9, 2, 9))
2528 set.rdate(datetime(1997, 9, 4, 9))
2529 set.rdate(datetime(1997, 9, 9, 9))
2530 set.rdate(datetime(1997, 9, 11, 9))
2531 set.rdate(datetime(1997, 9, 16, 9))
2532 set.rdate(datetime(1997, 9, 18, 9))
2533 set.exdate(datetime(1997, 9, 4, 9))
2534 set.exdate(datetime(1997, 9, 11, 9))
2535 set.exdate(datetime(1997, 9, 18, 9))
2536 self.assertEqual(list(set),
2537 [datetime(1997, 9, 2, 9, 0),
2538 datetime(1997, 9, 9, 9, 0),
2539 datetime(1997, 9, 16, 9, 0)])
2540
2541 def testSetDateAndExRule(self):
2542 set = rruleset()
2543 set.rdate(datetime(1997, 9, 2, 9))
2544 set.rdate(datetime(1997, 9, 4, 9))
2545 set.rdate(datetime(1997, 9, 9, 9))
2546 set.rdate(datetime(1997, 9, 11, 9))
2547 set.rdate(datetime(1997, 9, 16, 9))
2548 set.rdate(datetime(1997, 9, 18, 9))
niemeyer4da06a42004-07-16 21:21:22 +00002549 set.exrule(rrule(YEARLY, count=3, byweekday=TH,
niemeyerdcad96c2003-10-09 02:47:09 +00002550 dtstart=parse("19970902T090000")))
2551 self.assertEqual(list(set),
2552 [datetime(1997, 9, 2, 9, 0),
2553 datetime(1997, 9, 9, 9, 0),
2554 datetime(1997, 9, 16, 9, 0)])
2555
niemeyer7ac367e2003-10-10 19:16:28 +00002556 def testSetCount(self):
2557 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002558 set.rrule(rrule(YEARLY, count=6, byweekday=(TU,TH),
niemeyer7ac367e2003-10-10 19:16:28 +00002559 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002560 set.exrule(rrule(YEARLY, count=3, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002561 dtstart=parse("19970902T090000")))
2562 self.assertEqual(set.count(), 3)
2563
2564 def testSetCachePre(self):
2565 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002566 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyer7ac367e2003-10-10 19:16:28 +00002567 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002568 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002569 dtstart=parse("19970902T090000")))
2570 self.assertEqual(list(set),
2571 [datetime(1997, 9, 2, 9, 0),
2572 datetime(1997, 9, 4, 9, 0),
2573 datetime(1997, 9, 9, 9, 0)])
2574
2575 def testSetCachePost(self):
2576 set = rruleset(cache=True)
niemeyer4da06a42004-07-16 21:21:22 +00002577 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyer7ac367e2003-10-10 19:16:28 +00002578 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002579 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002580 dtstart=parse("19970902T090000")))
2581 for x in set: pass
2582 self.assertEqual(list(set),
2583 [datetime(1997, 9, 2, 9, 0),
2584 datetime(1997, 9, 4, 9, 0),
2585 datetime(1997, 9, 9, 9, 0)])
2586
2587 def testSetCachePostInternal(self):
2588 set = rruleset(cache=True)
niemeyer4da06a42004-07-16 21:21:22 +00002589 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyer7ac367e2003-10-10 19:16:28 +00002590 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002591 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002592 dtstart=parse("19970902T090000")))
2593 for x in set: pass
2594 self.assertEqual(list(set._cache),
2595 [datetime(1997, 9, 2, 9, 0),
2596 datetime(1997, 9, 4, 9, 0),
2597 datetime(1997, 9, 9, 9, 0)])
2598
niemeyerdcad96c2003-10-09 02:47:09 +00002599 def testStr(self):
2600 self.assertEqual(list(rrulestr(
2601 "DTSTART:19970902T090000\n"
2602 "RRULE:FREQ=YEARLY;COUNT=3\n"
2603 )),
2604 [datetime(1997, 9, 2, 9, 0),
2605 datetime(1998, 9, 2, 9, 0),
2606 datetime(1999, 9, 2, 9, 0)])
2607
2608 def testStrType(self):
2609 self.assertEqual(isinstance(rrulestr(
2610 "DTSTART:19970902T090000\n"
2611 "RRULE:FREQ=YEARLY;COUNT=3\n"
2612 ), rrule), True)
2613
2614 def testStrForceSetType(self):
2615 self.assertEqual(isinstance(rrulestr(
2616 "DTSTART:19970902T090000\n"
2617 "RRULE:FREQ=YEARLY;COUNT=3\n"
2618 , forceset=True), rruleset), True)
2619
2620 def testStrSetType(self):
2621 self.assertEqual(isinstance(rrulestr(
2622 "DTSTART:19970902T090000\n"
2623 "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n"
2624 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n"
2625 ), rruleset), True)
2626
2627 def testStrCase(self):
2628 self.assertEqual(list(rrulestr(
2629 "dtstart:19970902T090000\n"
2630 "rrule:freq=yearly;count=3\n"
2631 )),
2632 [datetime(1997, 9, 2, 9, 0),
2633 datetime(1998, 9, 2, 9, 0),
2634 datetime(1999, 9, 2, 9, 0)])
2635
2636 def testStrSpaces(self):
2637 self.assertEqual(list(rrulestr(
2638 " DTSTART:19970902T090000 "
2639 " RRULE:FREQ=YEARLY;COUNT=3 "
2640 )),
2641 [datetime(1997, 9, 2, 9, 0),
2642 datetime(1998, 9, 2, 9, 0),
2643 datetime(1999, 9, 2, 9, 0)])
2644
2645 def testStrSpacesAndLines(self):
2646 self.assertEqual(list(rrulestr(
2647 " DTSTART:19970902T090000 \n"
2648 " \n"
2649 " RRULE:FREQ=YEARLY;COUNT=3 \n"
2650 )),
2651 [datetime(1997, 9, 2, 9, 0),
2652 datetime(1998, 9, 2, 9, 0),
2653 datetime(1999, 9, 2, 9, 0)])
2654
2655 def testStrNoDTStart(self):
2656 self.assertEqual(list(rrulestr(
2657 "RRULE:FREQ=YEARLY;COUNT=3\n"
2658 , dtstart=parse("19970902T090000"))),
2659 [datetime(1997, 9, 2, 9, 0),
2660 datetime(1998, 9, 2, 9, 0),
2661 datetime(1999, 9, 2, 9, 0)])
2662
2663 def testStrValueOnly(self):
2664 self.assertEqual(list(rrulestr(
2665 "FREQ=YEARLY;COUNT=3\n"
2666 , dtstart=parse("19970902T090000"))),
2667 [datetime(1997, 9, 2, 9, 0),
2668 datetime(1998, 9, 2, 9, 0),
2669 datetime(1999, 9, 2, 9, 0)])
2670
2671 def testStrUnfold(self):
2672 self.assertEqual(list(rrulestr(
2673 "FREQ=YEA\n RLY;COUNT=3\n", unfold=True,
2674 dtstart=parse("19970902T090000"))),
2675 [datetime(1997, 9, 2, 9, 0),
2676 datetime(1998, 9, 2, 9, 0),
2677 datetime(1999, 9, 2, 9, 0)])
2678
2679 def testStrSet(self):
2680 self.assertEqual(list(rrulestr(
2681 "DTSTART:19970902T090000\n"
2682 "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n"
2683 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n"
2684 )),
2685 [datetime(1997, 9, 2, 9, 0),
2686 datetime(1997, 9, 4, 9, 0),
2687 datetime(1997, 9, 9, 9, 0)])
2688
2689 def testStrSetDate(self):
2690 self.assertEqual(list(rrulestr(
2691 "DTSTART:19970902T090000\n"
2692 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TU\n"
2693 "RDATE:19970904T090000\n"
2694 "RDATE:19970909T090000\n"
2695 )),
2696 [datetime(1997, 9, 2, 9, 0),
2697 datetime(1997, 9, 4, 9, 0),
2698 datetime(1997, 9, 9, 9, 0)])
2699
2700 def testStrSetExRule(self):
2701 self.assertEqual(list(rrulestr(
2702 "DTSTART:19970902T090000\n"
2703 "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n"
2704 "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n"
2705 )),
2706 [datetime(1997, 9, 2, 9, 0),
2707 datetime(1997, 9, 9, 9, 0),
2708 datetime(1997, 9, 16, 9, 0)])
2709
2710 def testStrSetExDate(self):
2711 self.assertEqual(list(rrulestr(
2712 "DTSTART:19970902T090000\n"
2713 "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n"
2714 "EXDATE:19970904T090000\n"
2715 "EXDATE:19970911T090000\n"
2716 "EXDATE:19970918T090000\n"
2717 )),
2718 [datetime(1997, 9, 2, 9, 0),
2719 datetime(1997, 9, 9, 9, 0),
2720 datetime(1997, 9, 16, 9, 0)])
2721
2722 def testStrSetDateAndExDate(self):
2723 self.assertEqual(list(rrulestr(
2724 "DTSTART:19970902T090000\n"
2725 "RDATE:19970902T090000\n"
2726 "RDATE:19970904T090000\n"
2727 "RDATE:19970909T090000\n"
2728 "RDATE:19970911T090000\n"
2729 "RDATE:19970916T090000\n"
2730 "RDATE:19970918T090000\n"
2731 "EXDATE:19970904T090000\n"
2732 "EXDATE:19970911T090000\n"
2733 "EXDATE:19970918T090000\n"
2734 )),
2735 [datetime(1997, 9, 2, 9, 0),
2736 datetime(1997, 9, 9, 9, 0),
2737 datetime(1997, 9, 16, 9, 0)])
2738
2739 def testStrSetDateAndExRule(self):
2740 self.assertEqual(list(rrulestr(
2741 "DTSTART:19970902T090000\n"
2742 "RDATE:19970902T090000\n"
2743 "RDATE:19970904T090000\n"
2744 "RDATE:19970909T090000\n"
2745 "RDATE:19970911T090000\n"
2746 "RDATE:19970916T090000\n"
2747 "RDATE:19970918T090000\n"
2748 "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n"
2749 )),
2750 [datetime(1997, 9, 2, 9, 0),
2751 datetime(1997, 9, 9, 9, 0),
2752 datetime(1997, 9, 16, 9, 0)])
2753
2754 def testStrKeywords(self):
2755 self.assertEqual(list(rrulestr(
2756 "DTSTART:19970902T090000\n"
2757 "RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=3;"
2758 "BYMONTH=3;BYWEEKDAY=TH;BYMONTHDAY=3;"
2759 "BYHOUR=3;BYMINUTE=3;BYSECOND=3\n"
2760 )),
2761 [datetime(2033, 3, 3, 3, 3, 3),
2762 datetime(2039, 3, 3, 3, 3, 3),
2763 datetime(2072, 3, 3, 3, 3, 3)])
2764
2765 def testStrNWeekDay(self):
2766 self.assertEqual(list(rrulestr(
2767 "DTSTART:19970902T090000\n"
2768 "RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n"
2769 )),
2770 [datetime(1997, 12, 25, 9, 0),
2771 datetime(1998, 1, 6, 9, 0),
2772 datetime(1998, 12, 31, 9, 0)])
2773
2774
2775
niemeyer68ae2752003-09-28 01:20:02 +00002776class ParserTest(unittest.TestCase):
2777 def setUp(self):
niemeyer97e19252003-10-06 05:52:04 +00002778 self.tzinfos = {"BRST": -10800}
niemeyer68ae2752003-09-28 01:20:02 +00002779 self.brsttz = tzoffset("BRST", -10800)
2780 self.default = datetime(2003, 9, 25)
2781
2782 def testDateCommandFormat(self):
2783 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
niemeyer97e19252003-10-06 05:52:04 +00002784 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002785 datetime(2003, 9, 25, 10, 36, 28,
2786 tzinfo=self.brsttz))
2787
niemeyer672e2eb2005-02-23 00:04:12 +00002788 def testDateCommandFormatUnicode(self):
2789 self.assertEqual(parse(u"Thu Sep 25 10:36:28 BRST 2003",
2790 tzinfos=self.tzinfos),
2791 datetime(2003, 9, 25, 10, 36, 28,
2792 tzinfo=self.brsttz))
2793
2794
niemeyer68ae2752003-09-28 01:20:02 +00002795 def testDateCommandFormatReversed(self):
2796 self.assertEqual(parse("2003 10:36:28 BRST 25 Sep Thu",
niemeyer97e19252003-10-06 05:52:04 +00002797 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002798 datetime(2003, 9, 25, 10, 36, 28,
2799 tzinfo=self.brsttz))
2800
2801 def testDateCommandFormatIgnoreTz(self):
2802 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
2803 ignoretz=True),
2804 datetime(2003, 9, 25, 10, 36, 28))
2805
2806 def testDateCommandFormatStrip1(self):
2807 self.assertEqual(parse("Thu Sep 25 10:36:28 2003"),
2808 datetime(2003, 9, 25, 10, 36, 28))
2809
2810 def testDateCommandFormatStrip2(self):
2811 self.assertEqual(parse("Thu Sep 25 10:36:28", default=self.default),
2812 datetime(2003, 9, 25, 10, 36, 28))
2813
2814 def testDateCommandFormatStrip3(self):
2815 self.assertEqual(parse("Thu Sep 10:36:28", default=self.default),
2816 datetime(2003, 9, 25, 10, 36, 28))
2817
2818 def testDateCommandFormatStrip4(self):
2819 self.assertEqual(parse("Thu 10:36:28", default=self.default),
2820 datetime(2003, 9, 25, 10, 36, 28))
2821
2822 def testDateCommandFormatStrip5(self):
2823 self.assertEqual(parse("Sep 10:36:28", default=self.default),
2824 datetime(2003, 9, 25, 10, 36, 28))
2825
2826 def testDateCommandFormatStrip6(self):
2827 self.assertEqual(parse("10:36:28", default=self.default),
2828 datetime(2003, 9, 25, 10, 36, 28))
2829
2830 def testDateCommandFormatStrip7(self):
2831 self.assertEqual(parse("10:36", default=self.default),
2832 datetime(2003, 9, 25, 10, 36))
2833
2834 def testDateCommandFormatStrip8(self):
2835 self.assertEqual(parse("Thu Sep 25 2003"),
2836 datetime(2003, 9, 25))
2837
2838 def testDateCommandFormatStrip9(self):
2839 self.assertEqual(parse("Sep 25 2003"),
2840 datetime(2003, 9, 25))
2841
2842 def testDateCommandFormatStrip9(self):
2843 self.assertEqual(parse("Sep 2003", default=self.default),
2844 datetime(2003, 9, 25))
2845
2846 def testDateCommandFormatStrip10(self):
2847 self.assertEqual(parse("Sep", default=self.default),
2848 datetime(2003, 9, 25))
2849
2850 def testDateCommandFormatStrip11(self):
2851 self.assertEqual(parse("2003", default=self.default),
2852 datetime(2003, 9, 25))
2853
2854 def testDateRCommandFormat(self):
2855 self.assertEqual(parse("Thu, 25 Sep 2003 10:49:41 -0300"),
2856 datetime(2003, 9, 25, 10, 49, 41,
2857 tzinfo=self.brsttz))
2858
2859 def testISOFormat(self):
2860 self.assertEqual(parse("2003-09-25T10:49:41.5-03:00"),
2861 datetime(2003, 9, 25, 10, 49, 41, 500000,
2862 tzinfo=self.brsttz))
2863
2864 def testISOFormatStrip1(self):
2865 self.assertEqual(parse("2003-09-25T10:49:41-03:00"),
2866 datetime(2003, 9, 25, 10, 49, 41,
2867 tzinfo=self.brsttz))
2868
2869 def testISOFormatStrip2(self):
2870 self.assertEqual(parse("2003-09-25T10:49:41"),
2871 datetime(2003, 9, 25, 10, 49, 41))
2872
2873 def testISOFormatStrip3(self):
2874 self.assertEqual(parse("2003-09-25T10:49"),
2875 datetime(2003, 9, 25, 10, 49))
2876
2877 def testISOFormatStrip4(self):
2878 self.assertEqual(parse("2003-09-25T10"),
2879 datetime(2003, 9, 25, 10))
2880
2881 def testISOFormatStrip5(self):
2882 self.assertEqual(parse("2003-09-25"),
2883 datetime(2003, 9, 25))
2884
2885 def testISOStrippedFormat(self):
2886 self.assertEqual(parse("20030925T104941.5-0300"),
2887 datetime(2003, 9, 25, 10, 49, 41, 500000,
2888 tzinfo=self.brsttz))
2889
2890 def testISOStrippedFormatStrip1(self):
2891 self.assertEqual(parse("20030925T104941-0300"),
2892 datetime(2003, 9, 25, 10, 49, 41,
2893 tzinfo=self.brsttz))
2894
2895 def testISOStrippedFormatStrip2(self):
2896 self.assertEqual(parse("20030925T104941"),
2897 datetime(2003, 9, 25, 10, 49, 41))
2898
2899 def testISOStrippedFormatStrip3(self):
2900 self.assertEqual(parse("20030925T1049"),
2901 datetime(2003, 9, 25, 10, 49, 0))
2902
2903 def testISOStrippedFormatStrip4(self):
2904 self.assertEqual(parse("20030925T10"),
2905 datetime(2003, 9, 25, 10))
2906
2907 def testISOStrippedFormatStrip5(self):
2908 self.assertEqual(parse("20030925"),
2909 datetime(2003, 9, 25))
2910
niemeyer6c067e02003-10-09 02:54:58 +00002911 def testNoSeparator1(self):
2912 self.assertEqual(parse("199709020908"),
2913 datetime(1997, 9, 2, 9, 8))
2914
2915 def testNoSeparator2(self):
2916 self.assertEqual(parse("19970902090807"),
2917 datetime(1997, 9, 2, 9, 8, 7))
2918
niemeyer68ae2752003-09-28 01:20:02 +00002919 def testDateWithDash1(self):
2920 self.assertEqual(parse("2003-09-25"),
2921 datetime(2003, 9, 25))
2922
2923 def testDateWithDash2(self):
2924 self.assertEqual(parse("2003-Sep-25"),
2925 datetime(2003, 9, 25))
2926
2927 def testDateWithDash3(self):
2928 self.assertEqual(parse("25-Sep-2003"),
2929 datetime(2003, 9, 25))
2930
2931 def testDateWithDash4(self):
2932 self.assertEqual(parse("25-Sep-2003"),
2933 datetime(2003, 9, 25))
2934
2935 def testDateWithDash5(self):
2936 self.assertEqual(parse("Sep-25-2003"),
2937 datetime(2003, 9, 25))
2938
2939 def testDateWithDash6(self):
2940 self.assertEqual(parse("09-25-2003"),
2941 datetime(2003, 9, 25))
2942
2943 def testDateWithDash7(self):
2944 self.assertEqual(parse("25-09-2003"),
2945 datetime(2003, 9, 25))
2946
2947 def testDateWithDash8(self):
2948 self.assertEqual(parse("10-09-2003", dayfirst=True),
2949 datetime(2003, 9, 10))
2950
2951 def testDateWithDash9(self):
2952 self.assertEqual(parse("10-09-2003"),
2953 datetime(2003, 10, 9))
2954
2955 def testDateWithDash10(self):
2956 self.assertEqual(parse("10-09-03"),
2957 datetime(2003, 10, 9))
2958
2959 def testDateWithDash11(self):
2960 self.assertEqual(parse("10-09-03", yearfirst=True),
2961 datetime(2010, 9, 3))
2962
2963 def testDateWithDot1(self):
2964 self.assertEqual(parse("2003.09.25"),
2965 datetime(2003, 9, 25))
2966
2967 def testDateWithDot2(self):
2968 self.assertEqual(parse("2003.Sep.25"),
2969 datetime(2003, 9, 25))
2970
2971 def testDateWithDot3(self):
2972 self.assertEqual(parse("25.Sep.2003"),
2973 datetime(2003, 9, 25))
2974
2975 def testDateWithDot4(self):
2976 self.assertEqual(parse("25.Sep.2003"),
2977 datetime(2003, 9, 25))
2978
2979 def testDateWithDot5(self):
2980 self.assertEqual(parse("Sep.25.2003"),
2981 datetime(2003, 9, 25))
2982
2983 def testDateWithDot6(self):
2984 self.assertEqual(parse("09.25.2003"),
2985 datetime(2003, 9, 25))
2986
2987 def testDateWithDot7(self):
2988 self.assertEqual(parse("25.09.2003"),
2989 datetime(2003, 9, 25))
2990
2991 def testDateWithDot8(self):
2992 self.assertEqual(parse("10.09.2003", dayfirst=True),
2993 datetime(2003, 9, 10))
2994
2995 def testDateWithDot9(self):
2996 self.assertEqual(parse("10.09.2003"),
2997 datetime(2003, 10, 9))
2998
2999 def testDateWithDot10(self):
3000 self.assertEqual(parse("10.09.03"),
3001 datetime(2003, 10, 9))
3002
3003 def testDateWithDot11(self):
3004 self.assertEqual(parse("10.09.03", yearfirst=True),
3005 datetime(2010, 9, 3))
3006
3007 def testDateWithSlash1(self):
3008 self.assertEqual(parse("2003/09/25"),
3009 datetime(2003, 9, 25))
3010
3011 def testDateWithSlash2(self):
3012 self.assertEqual(parse("2003/Sep/25"),
3013 datetime(2003, 9, 25))
3014
3015 def testDateWithSlash3(self):
3016 self.assertEqual(parse("25/Sep/2003"),
3017 datetime(2003, 9, 25))
3018
3019 def testDateWithSlash4(self):
3020 self.assertEqual(parse("25/Sep/2003"),
3021 datetime(2003, 9, 25))
3022
3023 def testDateWithSlash5(self):
3024 self.assertEqual(parse("Sep/25/2003"),
3025 datetime(2003, 9, 25))
3026
3027 def testDateWithSlash6(self):
3028 self.assertEqual(parse("09/25/2003"),
3029 datetime(2003, 9, 25))
3030
3031 def testDateWithSlash7(self):
3032 self.assertEqual(parse("25/09/2003"),
3033 datetime(2003, 9, 25))
3034
3035 def testDateWithSlash8(self):
3036 self.assertEqual(parse("10/09/2003", dayfirst=True),
3037 datetime(2003, 9, 10))
3038
3039 def testDateWithSlash9(self):
3040 self.assertEqual(parse("10/09/2003"),
3041 datetime(2003, 10, 9))
3042
3043 def testDateWithSlash10(self):
3044 self.assertEqual(parse("10/09/03"),
3045 datetime(2003, 10, 9))
3046
3047 def testDateWithSlash11(self):
3048 self.assertEqual(parse("10/09/03", yearfirst=True),
3049 datetime(2010, 9, 3))
3050
3051 def testDateWithSpace12(self):
3052 self.assertEqual(parse("25 09 03"),
3053 datetime(2003, 9, 25))
3054
3055 def testDateWithSpace13(self):
3056 self.assertEqual(parse("25 09 03"),
3057 datetime(2003, 9, 25))
3058
3059 def testDateWithSpace1(self):
3060 self.assertEqual(parse("2003 09 25"),
3061 datetime(2003, 9, 25))
3062
3063 def testDateWithSpace2(self):
3064 self.assertEqual(parse("2003 Sep 25"),
3065 datetime(2003, 9, 25))
3066
3067 def testDateWithSpace3(self):
3068 self.assertEqual(parse("25 Sep 2003"),
3069 datetime(2003, 9, 25))
3070
3071 def testDateWithSpace4(self):
3072 self.assertEqual(parse("25 Sep 2003"),
3073 datetime(2003, 9, 25))
3074
3075 def testDateWithSpace5(self):
3076 self.assertEqual(parse("Sep 25 2003"),
3077 datetime(2003, 9, 25))
3078
3079 def testDateWithSpace6(self):
3080 self.assertEqual(parse("09 25 2003"),
3081 datetime(2003, 9, 25))
3082
3083 def testDateWithSpace7(self):
3084 self.assertEqual(parse("25 09 2003"),
3085 datetime(2003, 9, 25))
3086
3087 def testDateWithSpace8(self):
3088 self.assertEqual(parse("10 09 2003", dayfirst=True),
3089 datetime(2003, 9, 10))
3090
3091 def testDateWithSpace9(self):
3092 self.assertEqual(parse("10 09 2003"),
3093 datetime(2003, 10, 9))
3094
3095 def testDateWithSpace10(self):
3096 self.assertEqual(parse("10 09 03"),
3097 datetime(2003, 10, 9))
3098
3099 def testDateWithSpace11(self):
3100 self.assertEqual(parse("10 09 03", yearfirst=True),
3101 datetime(2010, 9, 3))
3102
3103 def testDateWithSpace12(self):
3104 self.assertEqual(parse("25 09 03"),
3105 datetime(2003, 9, 25))
3106
3107 def testDateWithSpace13(self):
3108 self.assertEqual(parse("25 09 03"),
3109 datetime(2003, 9, 25))
3110
3111 def testStrangelyOrderedDate1(self):
3112 self.assertEqual(parse("03 25 Sep"),
3113 datetime(2003, 9, 25))
3114
3115 def testStrangelyOrderedDate2(self):
3116 self.assertEqual(parse("2003 25 Sep"),
3117 datetime(2003, 9, 25))
3118
3119 def testStrangelyOrderedDate3(self):
3120 self.assertEqual(parse("25 03 Sep"),
3121 datetime(2025, 9, 3))
3122
3123 def testHourWithLetters(self):
3124 self.assertEqual(parse("10h36m28.5s", default=self.default),
3125 datetime(2003, 9, 25, 10, 36, 28, 500000))
3126
3127 def testHourWithLettersStrip1(self):
3128 self.assertEqual(parse("10h36m28s", default=self.default),
3129 datetime(2003, 9, 25, 10, 36, 28))
3130
3131 def testHourWithLettersStrip1(self):
3132 self.assertEqual(parse("10h36m", default=self.default),
3133 datetime(2003, 9, 25, 10, 36))
3134
3135 def testHourWithLettersStrip2(self):
3136 self.assertEqual(parse("10h", default=self.default),
3137 datetime(2003, 9, 25, 10))
3138
3139 def testHourAmPm1(self):
3140 self.assertEqual(parse("10h am", default=self.default),
3141 datetime(2003, 9, 25, 10))
3142
3143 def testHourAmPm2(self):
3144 self.assertEqual(parse("10h pm", default=self.default),
3145 datetime(2003, 9, 25, 22))
3146
3147 def testHourAmPm3(self):
3148 self.assertEqual(parse("10am", default=self.default),
3149 datetime(2003, 9, 25, 10))
3150
3151 def testHourAmPm4(self):
3152 self.assertEqual(parse("10pm", default=self.default),
3153 datetime(2003, 9, 25, 22))
3154
3155 def testHourAmPm5(self):
3156 self.assertEqual(parse("10:00 am", default=self.default),
3157 datetime(2003, 9, 25, 10))
3158
3159 def testHourAmPm6(self):
3160 self.assertEqual(parse("10:00 pm", default=self.default),
3161 datetime(2003, 9, 25, 22))
3162
3163 def testHourAmPm7(self):
3164 self.assertEqual(parse("10:00am", default=self.default),
3165 datetime(2003, 9, 25, 10))
3166
3167 def testHourAmPm8(self):
3168 self.assertEqual(parse("10:00pm", default=self.default),
3169 datetime(2003, 9, 25, 22))
3170
3171 def testHourAmPm9(self):
3172 self.assertEqual(parse("10:00a.m", default=self.default),
3173 datetime(2003, 9, 25, 10))
3174
3175 def testHourAmPm10(self):
3176 self.assertEqual(parse("10:00p.m", default=self.default),
3177 datetime(2003, 9, 25, 22))
3178
3179 def testHourAmPm11(self):
3180 self.assertEqual(parse("10:00a.m.", default=self.default),
3181 datetime(2003, 9, 25, 10))
3182
3183 def testHourAmPm12(self):
3184 self.assertEqual(parse("10:00p.m.", default=self.default),
3185 datetime(2003, 9, 25, 22))
3186
3187 def testPertain(self):
3188 self.assertEqual(parse("Sep 03", default=self.default),
3189 datetime(2003, 9, 3))
3190 self.assertEqual(parse("Sep of 03", default=self.default),
3191 datetime(2003, 9, 25))
3192
3193 def testWeekdayAlone(self):
3194 self.assertEqual(parse("Wed", default=self.default),
3195 datetime(2003, 10, 1))
3196
3197 def testLongWeekday(self):
3198 self.assertEqual(parse("Wednesday", default=self.default),
3199 datetime(2003, 10, 1))
3200
3201 def testLongMonth(self):
3202 self.assertEqual(parse("October", default=self.default),
3203 datetime(2003, 10, 25))
niemeyer075fba22004-07-16 20:50:19 +00003204
3205 def testZeroYear(self):
3206 self.assertEqual(parse("31-Dec-00", default=self.default),
3207 datetime(2000, 12, 31))
niemeyer68ae2752003-09-28 01:20:02 +00003208
3209 def testFuzzy(self):
3210 s = "Today is 25 of September of 2003, exactly " \
3211 "at 10:49:41 with timezone -03:00."
3212 self.assertEqual(parse(s, fuzzy=True),
3213 datetime(2003, 9, 25, 10, 49, 41,
3214 tzinfo=self.brsttz))
3215
3216 def testExtraSpace(self):
3217 self.assertEqual(parse(" July 4 , 1976 12:01:02 am "),
3218 datetime(1976, 7, 4, 0, 1, 2))
3219
3220 def testRandomFormat1(self):
3221 self.assertEqual(parse("Wed, July 10, '96"),
3222 datetime(1996, 7, 10, 0, 0))
3223
3224 def testRandomFormat2(self):
3225 self.assertEqual(parse("1996.07.10 AD at 15:08:56 PDT",
3226 ignoretz=True),
3227 datetime(1996, 7, 10, 15, 8, 56))
3228
3229 def testRandomFormat3(self):
3230 self.assertEqual(parse("1996.July.10 AD 12:08 PM"),
3231 datetime(1996, 7, 10, 12, 8))
3232
3233 def testRandomFormat4(self):
3234 self.assertEqual(parse("Tuesday, April 12, 1952 AD 3:30:42pm PST",
3235 ignoretz=True),
3236 datetime(1952, 4, 12, 15, 30, 42))
3237
3238 def testRandomFormat5(self):
3239 self.assertEqual(parse("November 5, 1994, 8:15:30 am EST",
3240 ignoretz=True),
3241 datetime(1994, 11, 5, 8, 15, 30))
3242
3243 def testRandomFormat6(self):
3244 self.assertEqual(parse("1994-11-05T08:15:30-05:00",
3245 ignoretz=True),
3246 datetime(1994, 11, 5, 8, 15, 30))
3247
3248 def testRandomFormat7(self):
3249 self.assertEqual(parse("1994-11-05T08:15:30Z",
3250 ignoretz=True),
3251 datetime(1994, 11, 5, 8, 15, 30))
3252
3253 def testRandomFormat8(self):
3254 self.assertEqual(parse("July 4, 1976"), datetime(1976, 7, 4))
3255
3256 def testRandomFormat9(self):
3257 self.assertEqual(parse("7 4 1976"), datetime(1976, 7, 4))
3258
3259 def testRandomFormat10(self):
3260 self.assertEqual(parse("4 jul 1976"), datetime(1976, 7, 4))
3261
3262 def testRandomFormat11(self):
3263 self.assertEqual(parse("7-4-76"), datetime(1976, 7, 4))
3264
3265 def testRandomFormat12(self):
3266 self.assertEqual(parse("19760704"), datetime(1976, 7, 4))
3267
3268 def testRandomFormat13(self):
3269 self.assertEqual(parse("0:01:02", default=self.default),
3270 datetime(2003, 9, 25, 0, 1, 2))
3271
3272 def testRandomFormat14(self):
3273 self.assertEqual(parse("12h 01m02s am", default=self.default),
3274 datetime(2003, 9, 25, 0, 1, 2))
3275
3276 def testRandomFormat15(self):
3277 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3278 datetime(1976, 7, 4, 0, 1, 2))
3279
3280 def testRandomFormat16(self):
3281 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3282 datetime(1976, 7, 4, 0, 1, 2))
3283
3284 def testRandomFormat17(self):
3285 self.assertEqual(parse("1976-07-04T00:01:02Z", ignoretz=True),
3286 datetime(1976, 7, 4, 0, 1, 2))
3287
3288 def testRandomFormat18(self):
3289 self.assertEqual(parse("July 4, 1976 12:01:02 am"),
3290 datetime(1976, 7, 4, 0, 1, 2))
3291
3292 def testRandomFormat19(self):
3293 self.assertEqual(parse("Mon Jan 2 04:24:27 1995"),
3294 datetime(1995, 1, 2, 4, 24, 27))
3295
3296 def testRandomFormat20(self):
3297 self.assertEqual(parse("Tue Apr 4 00:22:12 PDT 1995", ignoretz=True),
3298 datetime(1995, 4, 4, 0, 22, 12))
3299
3300 def testRandomFormat21(self):
3301 self.assertEqual(parse("04.04.95 00:22"),
3302 datetime(1995, 4, 4, 0, 22))
3303
3304 def testRandomFormat22(self):
3305 self.assertEqual(parse("Jan 1 1999 11:23:34.578"),
3306 datetime(1999, 1, 1, 11, 23, 34, 578000))
3307
3308 def testRandomFormat23(self):
3309 self.assertEqual(parse("950404 122212"),
3310 datetime(1995, 4, 4, 12, 22, 12))
3311
3312 def testRandomFormat24(self):
3313 self.assertEqual(parse("0:00 PM, PST", default=self.default,
3314 ignoretz=True),
3315 datetime(2003, 9, 25, 12, 0))
3316
3317 def testRandomFormat25(self):
3318 self.assertEqual(parse("12:08 PM", default=self.default),
3319 datetime(2003, 9, 25, 12, 8))
3320
3321 def testRandomFormat26(self):
3322 self.assertEqual(parse("5:50 A.M. on June 13, 1990"),
3323 datetime(1990, 6, 13, 5, 50))
3324
3325 def testRandomFormat27(self):
3326 self.assertEqual(parse("3rd of May 2001"), datetime(2001, 5, 3))
3327
3328 def testRandomFormat28(self):
3329 self.assertEqual(parse("5th of March 2001"), datetime(2001, 3, 5))
3330
3331 def testRandomFormat29(self):
3332 self.assertEqual(parse("1st of May 2003"), datetime(2003, 5, 1))
3333
3334 def testRandomFormat30(self):
3335 self.assertEqual(parse("01h02m03", default=self.default),
3336 datetime(2003, 9, 25, 1, 2, 3))
3337
3338 def testRandomFormat31(self):
3339 self.assertEqual(parse("01h02", default=self.default),
3340 datetime(2003, 9, 25, 1, 2))
3341
3342 def testRandomFormat32(self):
3343 self.assertEqual(parse("01h02s", default=self.default),
3344 datetime(2003, 9, 25, 1, 0, 2))
3345
3346 def testRandomFormat33(self):
3347 self.assertEqual(parse("01m02", default=self.default),
3348 datetime(2003, 9, 25, 0, 1, 2))
3349
3350 def testRandomFormat34(self):
3351 self.assertEqual(parse("01m02h", default=self.default),
3352 datetime(2003, 9, 25, 2, 1))
3353
niemeyer8bfedd82005-07-03 13:40:11 +00003354 def testRandomFormat35(self):
3355 self.assertEqual(parse("2004 10 Apr 11h30m", default=self.default),
3356 datetime(2004, 4, 10, 11, 30))
3357
niemeyer091722d2003-10-10 20:37:11 +00003358 def testIncreasingCTime(self):
3359 # This test will check 200 different years, every month, every day,
niemeyer075fba22004-07-16 20:50:19 +00003360 # every hour, every minute, every second, and every weekday, using
niemeyer091722d2003-10-10 20:37:11 +00003361 # a delta of more or less 1 year, 1 month, 1 day, 1 minute and
3362 # 1 second.
3363 delta = timedelta(days=365+31+1, seconds=1+60+60*60)
3364 dt = datetime(1900, 1, 1, 0, 0, 0, 0)
3365 for i in range(200):
3366 self.assertEqual(parse(dt.ctime()), dt)
3367 dt += delta
3368
3369 def testIncreasingISOFormat(self):
3370 delta = timedelta(days=365+31+1, seconds=1+60+60*60)
3371 dt = datetime(1900, 1, 1, 0, 0, 0, 0)
3372 for i in range(200):
3373 self.assertEqual(parse(dt.isoformat()), dt)
3374 dt += delta
3375
niemeyer68ae2752003-09-28 01:20:02 +00003376class EasterTest(unittest.TestCase):
3377 easterlist = [
3378 # WESTERN ORTHODOX
3379 (date(1990, 4, 15), date(1990, 4, 15)),
3380 (date(1991, 3, 31), date(1991, 4, 7)),
3381 (date(1992, 4, 19), date(1992, 4, 26)),
3382 (date(1993, 4, 11), date(1993, 4, 18)),
3383 (date(1994, 4, 3), date(1994, 5, 1)),
3384 (date(1995, 4, 16), date(1995, 4, 23)),
3385 (date(1996, 4, 7), date(1996, 4, 14)),
3386 (date(1997, 3, 30), date(1997, 4, 27)),
3387 (date(1998, 4, 12), date(1998, 4, 19)),
3388 (date(1999, 4, 4), date(1999, 4, 11)),
3389
3390 (date(2000, 4, 23), date(2000, 4, 30)),
3391 (date(2001, 4, 15), date(2001, 4, 15)),
3392 (date(2002, 3, 31), date(2002, 5, 5)),
3393 (date(2003, 4, 20), date(2003, 4, 27)),
3394 (date(2004, 4, 11), date(2004, 4, 11)),
3395 (date(2005, 3, 27), date(2005, 5, 1)),
3396 (date(2006, 4, 16), date(2006, 4, 23)),
3397 (date(2007, 4, 8), date(2007, 4, 8)),
3398 (date(2008, 3, 23), date(2008, 4, 27)),
3399 (date(2009, 4, 12), date(2009, 4, 19)),
3400
3401 (date(2010, 4, 4), date(2010, 4, 4)),
3402 (date(2011, 4, 24), date(2011, 4, 24)),
3403 (date(2012, 4, 8), date(2012, 4, 15)),
3404 (date(2013, 3, 31), date(2013, 5, 5)),
3405 (date(2014, 4, 20), date(2014, 4, 20)),
3406 (date(2015, 4, 5), date(2015, 4, 12)),
3407 (date(2016, 3, 27), date(2016, 5, 1)),
3408 (date(2017, 4, 16), date(2017, 4, 16)),
3409 (date(2018, 4, 1), date(2018, 4, 8)),
3410 (date(2019, 4, 21), date(2019, 4, 28)),
3411
3412 (date(2020, 4, 12), date(2020, 4, 19)),
3413 (date(2021, 4, 4), date(2021, 5, 2)),
3414 (date(2022, 4, 17), date(2022, 4, 24)),
3415 (date(2023, 4, 9), date(2023, 4, 16)),
3416 (date(2024, 3, 31), date(2024, 5, 5)),
3417 (date(2025, 4, 20), date(2025, 4, 20)),
3418 (date(2026, 4, 5), date(2026, 4, 12)),
3419 (date(2027, 3, 28), date(2027, 5, 2)),
3420 (date(2028, 4, 16), date(2028, 4, 16)),
3421 (date(2029, 4, 1), date(2029, 4, 8)),
3422
3423 (date(2030, 4, 21), date(2030, 4, 28)),
3424 (date(2031, 4, 13), date(2031, 4, 13)),
3425 (date(2032, 3, 28), date(2032, 5, 2)),
3426 (date(2033, 4, 17), date(2033, 4, 24)),
3427 (date(2034, 4, 9), date(2034, 4, 9)),
3428 (date(2035, 3, 25), date(2035, 4, 29)),
3429 (date(2036, 4, 13), date(2036, 4, 20)),
3430 (date(2037, 4, 5), date(2037, 4, 5)),
3431 (date(2038, 4, 25), date(2038, 4, 25)),
3432 (date(2039, 4, 10), date(2039, 4, 17)),
3433
3434 (date(2040, 4, 1), date(2040, 5, 6)),
3435 (date(2041, 4, 21), date(2041, 4, 21)),
3436 (date(2042, 4, 6), date(2042, 4, 13)),
3437 (date(2043, 3, 29), date(2043, 5, 3)),
3438 (date(2044, 4, 17), date(2044, 4, 24)),
3439 (date(2045, 4, 9), date(2045, 4, 9)),
3440 (date(2046, 3, 25), date(2046, 4, 29)),
3441 (date(2047, 4, 14), date(2047, 4, 21)),
3442 (date(2048, 4, 5), date(2048, 4, 5)),
3443 (date(2049, 4, 18), date(2049, 4, 25)),
3444
3445 (date(2050, 4, 10), date(2050, 4, 17)),
3446 ]
3447
3448 def testEaster(self):
3449 for western, orthodox in self.easterlist:
3450 self.assertEqual(western, easter(western.year, EASTER_WESTERN))
3451 self.assertEqual(orthodox, easter(orthodox.year, EASTER_ORTHODOX))
3452
3453class TZTest(unittest.TestCase):
3454
niemeyer36139372003-10-07 01:48:15 +00003455 TZFILE_EST5EDT = """
niemeyer68ae2752003-09-28 01:20:02 +00003456VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh
3457ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e
3458S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0
3459YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg
3460yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db
3461wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW
34628uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b
3463YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g
3464BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR
3465iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x
3466znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H
3467cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w
3468Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH
3469JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM
3470jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w
34714GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg
3472b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8
3473o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3474AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3475AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
3476AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3477AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU
3478AEVQVAAAAAABAAAAAQ==
3479 """
3480
niemeyer36139372003-10-07 01:48:15 +00003481 TZICAL_EST5EDT = """
3482BEGIN:VTIMEZONE
3483TZID:US-Eastern
3484LAST-MODIFIED:19870101T000000Z
3485TZURL:http://zones.stds_r_us.net/tz/US-Eastern
3486BEGIN:STANDARD
3487DTSTART:19671029T020000
3488RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
3489TZOFFSETFROM:-0400
3490TZOFFSETTO:-0500
3491TZNAME:EST
3492END:STANDARD
3493BEGIN:DAYLIGHT
3494DTSTART:19870405T020000
3495RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
3496TZOFFSETFROM:-0500
3497TZOFFSETTO:-0400
3498TZNAME:EDT
3499END:DAYLIGHT
3500END:VTIMEZONE
3501 """
3502
niemeyer68ae2752003-09-28 01:20:02 +00003503 def testStrStart1(self):
3504 self.assertEqual(datetime(2003,4,6,1,59,
3505 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3506 self.assertEqual(datetime(2003,4,6,2,00,
3507 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3508
3509 def testStrEnd1(self):
3510 self.assertEqual(datetime(2003,10,26,0,59,
3511 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3512 self.assertEqual(datetime(2003,10,26,1,00,
3513 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3514
3515 def testStrStart2(self):
3516 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3517 self.assertEqual(datetime(2003,4,6,1,59,
3518 tzinfo=tzstr(s)).tzname(), "EST")
3519 self.assertEqual(datetime(2003,4,6,2,00,
3520 tzinfo=tzstr(s)).tzname(), "EDT")
3521
3522 def testStrEnd2(self):
3523 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3524 self.assertEqual(datetime(2003,10,26,0,59,
3525 tzinfo=tzstr(s)).tzname(), "EDT")
3526 self.assertEqual(datetime(2003,10,26,1,00,
3527 tzinfo=tzstr(s)).tzname(), "EST")
3528
3529 def testStrStart3(self):
3530 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3531 self.assertEqual(datetime(2003,4,6,1,59,
3532 tzinfo=tzstr(s)).tzname(), "EST")
3533 self.assertEqual(datetime(2003,4,6,2,00,
3534 tzinfo=tzstr(s)).tzname(), "EDT")
3535
3536 def testStrEnd3(self):
3537 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3538 self.assertEqual(datetime(2003,10,26,0,59,
3539 tzinfo=tzstr(s)).tzname(), "EDT")
3540 self.assertEqual(datetime(2003,10,26,1,00,
3541 tzinfo=tzstr(s)).tzname(), "EST")
3542
3543 def testStrStart4(self):
3544 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
3545 self.assertEqual(datetime(2003,4,6,1,59,
3546 tzinfo=tzstr(s)).tzname(), "EST")
3547 self.assertEqual(datetime(2003,4,6,2,00,
3548 tzinfo=tzstr(s)).tzname(), "EDT")
3549
3550 def testStrEnd4(self):
3551 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
3552 self.assertEqual(datetime(2003,10,26,0,59,
3553 tzinfo=tzstr(s)).tzname(), "EDT")
3554 self.assertEqual(datetime(2003,10,26,1,00,
3555 tzinfo=tzstr(s)).tzname(), "EST")
3556
3557 def testStrStart5(self):
3558 s = "EST5EDT4,95/02:00:00,298/02:00"
3559 self.assertEqual(datetime(2003,4,6,1,59,
3560 tzinfo=tzstr(s)).tzname(), "EST")
3561 self.assertEqual(datetime(2003,4,6,2,00,
3562 tzinfo=tzstr(s)).tzname(), "EDT")
3563
3564 def testStrEnd5(self):
3565 s = "EST5EDT4,95/02:00:00,298/02"
3566 self.assertEqual(datetime(2003,10,26,0,59,
3567 tzinfo=tzstr(s)).tzname(), "EDT")
3568 self.assertEqual(datetime(2003,10,26,1,00,
3569 tzinfo=tzstr(s)).tzname(), "EST")
3570
3571 def testStrStart6(self):
3572 s = "EST5EDT4,J96/02:00:00,J299/02:00"
3573 self.assertEqual(datetime(2003,4,6,1,59,
3574 tzinfo=tzstr(s)).tzname(), "EST")
3575 self.assertEqual(datetime(2003,4,6,2,00,
3576 tzinfo=tzstr(s)).tzname(), "EDT")
3577
3578 def testStrEnd6(self):
3579 s = "EST5EDT4,J96/02:00:00,J299/02"
3580 self.assertEqual(datetime(2003,10,26,0,59,
3581 tzinfo=tzstr(s)).tzname(), "EDT")
3582 self.assertEqual(datetime(2003,10,26,1,00,
3583 tzinfo=tzstr(s)).tzname(), "EST")
3584
3585 def testStrCmp1(self):
3586 self.assertEqual(tzstr("EST5EDT"),
3587 tzstr("EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"))
3588
3589 def testStrCmp2(self):
3590 self.assertEqual(tzstr("EST5EDT"),
3591 tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200,3600"))
3592
3593 def testRangeCmp1(self):
3594 self.assertEqual(tzstr("EST5EDT"),
3595 tzrange("EST", -18000, "EDT", -14400,
3596 relativedelta(hours=+2,
3597 month=4, day=1,
niemeyerb47d12a2003-09-29 20:00:21 +00003598 weekday=SU(+1)),
niemeyer68ae2752003-09-28 01:20:02 +00003599 relativedelta(hours=+1,
3600 month=10, day=31,
niemeyerb47d12a2003-09-29 20:00:21 +00003601 weekday=SU(-1))))
niemeyer68ae2752003-09-28 01:20:02 +00003602
3603 def testRangeCmp2(self):
3604 self.assertEqual(tzstr("EST5EDT"),
3605 tzrange("EST", -18000, "EDT"))
3606
3607 def testFileStart1(self):
niemeyer36139372003-10-07 01:48:15 +00003608 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
niemeyer68ae2752003-09-28 01:20:02 +00003609 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3610 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3611
3612 def testFileEnd1(self):
niemeyer36139372003-10-07 01:48:15 +00003613 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
3614 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3615 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3616
niemeyer38fbb772005-07-19 23:35:26 +00003617 def testZoneInfoFileStart1(self):
3618 tz = zoneinfo.gettz("EST5EDT")
3619 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3620 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3621
3622 def testZoneInfoFileEnd1(self):
3623 tz = zoneinfo.gettz("EST5EDT")
3624 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3625 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3626
niemeyer36139372003-10-07 01:48:15 +00003627 def testICalStart1(self):
3628 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
3629 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3630 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3631
3632 def testICalEnd1(self):
3633 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
niemeyer68ae2752003-09-28 01:20:02 +00003634 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3635 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3636
3637if __name__ == "__main__":
3638 unittest.main()
3639
3640# vim:ts=4:sw=4