blob: ff67105a340ed619a1c5d6097cdf628f8853fd9b [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,
niemeyer34788e42005-12-22 19:00:19 +0000281 count=4,
282 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +0000283 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +0000284 [datetime(1997, 12, 31, 9, 0),
285 datetime(1998, 1, 1, 9, 0),
286 datetime(1998, 4, 10, 9, 0),
287 datetime(1998, 7, 19, 9, 0)])
288
289 def testYearlyByYearDayNeg(self):
290 self.assertEqual(list(rrule(YEARLY,
291 count=4,
292 byyearday=(-365,-266,-166,-1),
293 dtstart=parse("19970902T090000"))),
294 [datetime(1997, 12, 31, 9, 0),
295 datetime(1998, 1, 1, 9, 0),
niemeyer7d8be1a2003-10-09 01:09:42 +0000296 datetime(1998, 4, 10, 9, 0),
297 datetime(1998, 7, 19, 9, 0)])
298
299 def testYearlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000300 self.assertEqual(list(rrule(YEARLY,
niemeyer34788e42005-12-22 19:00:19 +0000301 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +0000302 bymonth=(4,7),
niemeyer34788e42005-12-22 19:00:19 +0000303 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +0000304 dtstart=parse("19970902T090000"))),
305 [datetime(1998, 4, 10, 9, 0),
306 datetime(1998, 7, 19, 9, 0),
niemeyer34788e42005-12-22 19:00:19 +0000307 datetime(1999, 4, 10, 9, 0),
308 datetime(1999, 7, 19, 9, 0)])
309
310 def testYearlyByMonthAndYearDayNeg(self):
311 self.assertEqual(list(rrule(YEARLY,
312 count=4,
313 bymonth=(4,7),
314 byyearday=(-365,-266,-166,-1),
315 dtstart=parse("19970902T090000"))),
316 [datetime(1998, 4, 10, 9, 0),
317 datetime(1998, 7, 19, 9, 0),
318 datetime(1999, 4, 10, 9, 0),
319 datetime(1999, 7, 19, 9, 0)])
niemeyer7d8be1a2003-10-09 01:09:42 +0000320
321 def testYearlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +0000322 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000323 count=3,
324 byweekno=20,
325 dtstart=parse("19970902T090000"))),
326 [datetime(1998, 5, 11, 9, 0),
327 datetime(1998, 5, 12, 9, 0),
328 datetime(1998, 5, 13, 9, 0)])
329
330 def testYearlyByWeekNoAndWeekDay(self):
331 # That's a nice one. The first days of week number one
332 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +0000333 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000334 count=3,
335 byweekno=1,
336 byweekday=MO,
337 dtstart=parse("19970902T090000"))),
338 [datetime(1997, 12, 29, 9, 0),
339 datetime(1999, 1, 4, 9, 0),
340 datetime(2000, 1, 3, 9, 0)])
341
342 def testYearlyByWeekNoAndWeekDayLarge(self):
343 # Another nice test. The last days of week number 52/53
344 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +0000345 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000346 count=3,
347 byweekno=52,
348 byweekday=SU,
349 dtstart=parse("19970902T090000"))),
350 [datetime(1997, 12, 28, 9, 0),
351 datetime(1998, 12, 27, 9, 0),
352 datetime(2000, 1, 2, 9, 0)])
353
354 def testYearlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +0000355 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000356 count=3,
357 byweekno=-1,
358 byweekday=SU,
359 dtstart=parse("19970902T090000"))),
360 [datetime(1997, 12, 28, 9, 0),
361 datetime(1999, 1, 3, 9, 0),
362 datetime(2000, 1, 2, 9, 0)])
363
364 def testYearlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +0000365 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000366 count=3,
367 byeaster=0,
368 dtstart=parse("19970902T090000"))),
369 [datetime(1998, 4, 12, 9, 0),
370 datetime(1999, 4, 4, 9, 0),
371 datetime(2000, 4, 23, 9, 0)])
372
373 def testYearlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000374 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000375 count=3,
376 byeaster=1,
377 dtstart=parse("19970902T090000"))),
378 [datetime(1998, 4, 13, 9, 0),
379 datetime(1999, 4, 5, 9, 0),
380 datetime(2000, 4, 24, 9, 0)])
381
382 def testYearlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +0000383 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000384 count=3,
385 byeaster=-1,
386 dtstart=parse("19970902T090000"))),
387 [datetime(1998, 4, 11, 9, 0),
388 datetime(1999, 4, 3, 9, 0),
389 datetime(2000, 4, 22, 9, 0)])
390
391 def testYearlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000392 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000393 count=3,
394 byweekno=53,
395 byweekday=MO,
396 dtstart=parse("19970902T090000"))),
397 [datetime(1998, 12, 28, 9, 0),
398 datetime(2004, 12, 27, 9, 0),
399 datetime(2009, 12, 28, 9, 0)])
400
401 def testYearlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000402 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000403 count=3,
404 byweekno=53,
405 byweekday=MO,
406 dtstart=parse("19970902T090000"))),
407 [datetime(1998, 12, 28, 9, 0),
408 datetime(2004, 12, 27, 9, 0),
409 datetime(2009, 12, 28, 9, 0)])
410
411 def testYearlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +0000412 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000413 count=3,
414 byhour=(6,18),
415 dtstart=parse("19970902T090000"))),
416 [datetime(1997, 9, 2, 18, 0),
417 datetime(1998, 9, 2, 6, 0),
418 datetime(1998, 9, 2, 18, 0)])
419
420 def testYearlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000421 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000422 count=3,
423 byminute=(6,18),
424 dtstart=parse("19970902T090000"))),
425 [datetime(1997, 9, 2, 9, 6),
426 datetime(1997, 9, 2, 9, 18),
427 datetime(1998, 9, 2, 9, 6)])
428
429 def testYearlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000430 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000431 count=3,
432 bysecond=(6,18),
433 dtstart=parse("19970902T090000"))),
434 [datetime(1997, 9, 2, 9, 0, 6),
435 datetime(1997, 9, 2, 9, 0, 18),
436 datetime(1998, 9, 2, 9, 0, 6)])
437
438 def testYearlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000439 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000440 count=3,
441 byhour=(6,18),
442 byminute=(6,18),
443 dtstart=parse("19970902T090000"))),
444 [datetime(1997, 9, 2, 18, 6),
445 datetime(1997, 9, 2, 18, 18),
446 datetime(1998, 9, 2, 6, 6)])
447
448 def testYearlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000449 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000450 count=3,
451 byhour=(6,18),
452 bysecond=(6,18),
453 dtstart=parse("19970902T090000"))),
454 [datetime(1997, 9, 2, 18, 0, 6),
455 datetime(1997, 9, 2, 18, 0, 18),
456 datetime(1998, 9, 2, 6, 0, 6)])
457
458 def testYearlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000459 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000460 count=3,
461 byminute=(6,18),
462 bysecond=(6,18),
463 dtstart=parse("19970902T090000"))),
464 [datetime(1997, 9, 2, 9, 6, 6),
465 datetime(1997, 9, 2, 9, 6, 18),
466 datetime(1997, 9, 2, 9, 18, 6)])
467
468 def testYearlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000469 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000470 count=3,
471 byhour=(6,18),
472 byminute=(6,18),
473 bysecond=(6,18),
474 dtstart=parse("19970902T090000"))),
475 [datetime(1997, 9, 2, 18, 6, 6),
476 datetime(1997, 9, 2, 18, 6, 18),
477 datetime(1997, 9, 2, 18, 18, 6)])
478
479 def testYearlyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000480 self.assertEqual(list(rrule(YEARLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000481 count=3,
482 bymonthday=15,
483 byhour=(6,18),
484 bysetpos=(3,-3),
485 dtstart=parse("19970902T090000"))),
486 [datetime(1997, 11, 15, 18, 0),
487 datetime(1998, 2, 15, 6, 0),
488 datetime(1998, 11, 15, 18, 0)])
489
niemeyercb08a352003-10-08 06:02:06 +0000490 def testMonthly(self):
niemeyer4da06a42004-07-16 21:21:22 +0000491 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000492 count=3,
493 dtstart=parse("19970902T090000"))),
494 [datetime(1997, 9, 2, 9, 0),
495 datetime(1997, 10, 2, 9, 0),
496 datetime(1997, 11, 2, 9, 0)])
497
niemeyercb08a352003-10-08 06:02:06 +0000498 def testMonthlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +0000499 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000500 count=3,
501 interval=2,
502 dtstart=parse("19970902T090000"))),
503 [datetime(1997, 9, 2, 9, 0),
504 datetime(1997, 11, 2, 9, 0),
505 datetime(1998, 1, 2, 9, 0)])
506
507 def testMonthlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000508 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000509 count=3,
510 interval=18,
511 dtstart=parse("19970902T090000"))),
512 [datetime(1997, 9, 2, 9, 0),
513 datetime(1999, 3, 2, 9, 0),
514 datetime(2000, 9, 2, 9, 0)])
515
516 def testMonthlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +0000517 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000518 count=3,
519 bymonth=(1,3),
520 dtstart=parse("19970902T090000"))),
521 [datetime(1998, 1, 2, 9, 0),
522 datetime(1998, 3, 2, 9, 0),
523 datetime(1999, 1, 2, 9, 0)])
524
525
526 def testMonthlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000527 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000528 count=3,
529 bymonthday=(1,3),
530 dtstart=parse("19970902T090000"))),
531 [datetime(1997, 9, 3, 9, 0),
532 datetime(1997, 10, 1, 9, 0),
533 datetime(1997, 10, 3, 9, 0)])
534
535 def testMonthlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000536 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000537 count=3,
538 bymonth=(1,3),
539 bymonthday=(5,7),
540 dtstart=parse("19970902T090000"))),
541 [datetime(1998, 1, 5, 9, 0),
542 datetime(1998, 1, 7, 9, 0),
543 datetime(1998, 3, 5, 9, 0)])
544
545 def testMonthlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000546 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000547 count=3,
548 byweekday=(TU,TH),
549 dtstart=parse("19970902T090000"))),
550 [datetime(1997, 9, 2, 9, 0),
551 datetime(1997, 9, 4, 9, 0),
552 datetime(1997, 9, 9, 9, 0)])
553
niemeyer7d8be1a2003-10-09 01:09:42 +0000554 def testMonthlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000555 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000556 count=3,
557 byweekday=(TU(1),TH(-1)),
558 dtstart=parse("19970902T090000"))),
559 [datetime(1997, 9, 2, 9, 0),
560 datetime(1997, 9, 25, 9, 0),
561 datetime(1997, 10, 7, 9, 0)])
562
563 def testMonthlyByNWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000564 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000565 count=3,
566 byweekday=(TU(3),TH(-3)),
567 dtstart=parse("19970902T090000"))),
568 [datetime(1997, 9, 11, 9, 0),
569 datetime(1997, 9, 16, 9, 0),
570 datetime(1997, 10, 16, 9, 0)])
571
niemeyercb08a352003-10-08 06:02:06 +0000572 def testMonthlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000573 self.assertEqual(list(rrule(MONTHLY,
niemeyercb08a352003-10-08 06:02:06 +0000574 count=3,
575 bymonth=(1,3),
576 byweekday=(TU,TH),
577 dtstart=parse("19970902T090000"))),
578 [datetime(1998, 1, 1, 9, 0),
579 datetime(1998, 1, 6, 9, 0),
580 datetime(1998, 1, 8, 9, 0)])
581
niemeyer7d8be1a2003-10-09 01:09:42 +0000582 def testMonthlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000583 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000584 count=3,
585 bymonth=(1,3),
586 byweekday=(TU(1),TH(-1)),
587 dtstart=parse("19970902T090000"))),
588 [datetime(1998, 1, 6, 9, 0),
589 datetime(1998, 1, 29, 9, 0),
590 datetime(1998, 3, 3, 9, 0)])
591
592 def testMonthlyByMonthAndNWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000593 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000594 count=3,
595 bymonth=(1,3),
596 byweekday=(TU(3),TH(-3)),
597 dtstart=parse("19970902T090000"))),
598 [datetime(1998, 1, 15, 9, 0),
599 datetime(1998, 1, 20, 9, 0),
600 datetime(1998, 3, 12, 9, 0)])
601
602 def testMonthlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000603 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000604 count=3,
605 bymonthday=(1,3),
606 byweekday=(TU,TH),
607 dtstart=parse("19970902T090000"))),
608 [datetime(1998, 1, 1, 9, 0),
609 datetime(1998, 2, 3, 9, 0),
610 datetime(1998, 3, 3, 9, 0)])
611
612 def testMonthlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000613 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000614 count=3,
615 bymonth=(1,3),
616 bymonthday=(1,3),
617 byweekday=(TU,TH),
618 dtstart=parse("19970902T090000"))),
619 [datetime(1998, 1, 1, 9, 0),
620 datetime(1998, 3, 3, 9, 0),
621 datetime(2001, 3, 1, 9, 0)])
622
623 def testMonthlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000624 self.assertEqual(list(rrule(MONTHLY,
niemeyer34788e42005-12-22 19:00:19 +0000625 count=4,
626 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +0000627 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +0000628 [datetime(1997, 12, 31, 9, 0),
629 datetime(1998, 1, 1, 9, 0),
630 datetime(1998, 4, 10, 9, 0),
631 datetime(1998, 7, 19, 9, 0)])
632
633 def testMonthlyByYearDayNeg(self):
634 self.assertEqual(list(rrule(MONTHLY,
635 count=4,
636 byyearday=(-365,-266,-166,-1),
637 dtstart=parse("19970902T090000"))),
638 [datetime(1997, 12, 31, 9, 0),
639 datetime(1998, 1, 1, 9, 0),
niemeyer7d8be1a2003-10-09 01:09:42 +0000640 datetime(1998, 4, 10, 9, 0),
641 datetime(1998, 7, 19, 9, 0)])
642
643 def testMonthlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000644 self.assertEqual(list(rrule(MONTHLY,
niemeyer34788e42005-12-22 19:00:19 +0000645 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +0000646 bymonth=(4,7),
niemeyer34788e42005-12-22 19:00:19 +0000647 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +0000648 dtstart=parse("19970902T090000"))),
649 [datetime(1998, 4, 10, 9, 0),
650 datetime(1998, 7, 19, 9, 0),
niemeyer34788e42005-12-22 19:00:19 +0000651 datetime(1999, 4, 10, 9, 0),
652 datetime(1999, 7, 19, 9, 0)])
653
654 def testMonthlyByMonthAndYearDayNeg(self):
655 self.assertEqual(list(rrule(MONTHLY,
656 count=4,
657 bymonth=(4,7),
658 byyearday=(-365,-266,-166,-1),
659 dtstart=parse("19970902T090000"))),
660 [datetime(1998, 4, 10, 9, 0),
661 datetime(1998, 7, 19, 9, 0),
662 datetime(1999, 4, 10, 9, 0),
663 datetime(1999, 7, 19, 9, 0)])
664
niemeyer7d8be1a2003-10-09 01:09:42 +0000665
666 def testMonthlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +0000667 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000668 count=3,
669 byweekno=20,
670 dtstart=parse("19970902T090000"))),
671 [datetime(1998, 5, 11, 9, 0),
672 datetime(1998, 5, 12, 9, 0),
673 datetime(1998, 5, 13, 9, 0)])
674
675 def testMonthlyByWeekNoAndWeekDay(self):
676 # That's a nice one. The first days of week number one
677 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +0000678 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000679 count=3,
680 byweekno=1,
681 byweekday=MO,
682 dtstart=parse("19970902T090000"))),
683 [datetime(1997, 12, 29, 9, 0),
684 datetime(1999, 1, 4, 9, 0),
685 datetime(2000, 1, 3, 9, 0)])
686
687 def testMonthlyByWeekNoAndWeekDayLarge(self):
688 # Another nice test. The last days of week number 52/53
689 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +0000690 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000691 count=3,
692 byweekno=52,
693 byweekday=SU,
694 dtstart=parse("19970902T090000"))),
695 [datetime(1997, 12, 28, 9, 0),
696 datetime(1998, 12, 27, 9, 0),
697 datetime(2000, 1, 2, 9, 0)])
698
699 def testMonthlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +0000700 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000701 count=3,
702 byweekno=-1,
703 byweekday=SU,
704 dtstart=parse("19970902T090000"))),
705 [datetime(1997, 12, 28, 9, 0),
706 datetime(1999, 1, 3, 9, 0),
707 datetime(2000, 1, 2, 9, 0)])
708
709 def testMonthlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +0000710 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000711 count=3,
712 byweekno=53,
713 byweekday=MO,
714 dtstart=parse("19970902T090000"))),
715 [datetime(1998, 12, 28, 9, 0),
716 datetime(2004, 12, 27, 9, 0),
717 datetime(2009, 12, 28, 9, 0)])
718
719 def testMonthlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +0000720 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000721 count=3,
722 byeaster=0,
723 dtstart=parse("19970902T090000"))),
724 [datetime(1998, 4, 12, 9, 0),
725 datetime(1999, 4, 4, 9, 0),
726 datetime(2000, 4, 23, 9, 0)])
727
728 def testMonthlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000729 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000730 count=3,
731 byeaster=1,
732 dtstart=parse("19970902T090000"))),
733 [datetime(1998, 4, 13, 9, 0),
734 datetime(1999, 4, 5, 9, 0),
735 datetime(2000, 4, 24, 9, 0)])
736
737 def testMonthlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +0000738 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000739 count=3,
740 byeaster=-1,
741 dtstart=parse("19970902T090000"))),
742 [datetime(1998, 4, 11, 9, 0),
743 datetime(1999, 4, 3, 9, 0),
744 datetime(2000, 4, 22, 9, 0)])
745
746 def testMonthlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +0000747 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000748 count=3,
749 byhour=(6,18),
750 dtstart=parse("19970902T090000"))),
751 [datetime(1997, 9, 2, 18, 0),
752 datetime(1997, 10, 2, 6, 0),
753 datetime(1997, 10, 2, 18, 0)])
754
755 def testMonthlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000756 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000757 count=3,
758 byminute=(6,18),
759 dtstart=parse("19970902T090000"))),
760 [datetime(1997, 9, 2, 9, 6),
761 datetime(1997, 9, 2, 9, 18),
762 datetime(1997, 10, 2, 9, 6)])
763
764 def testMonthlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000765 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000766 count=3,
767 bysecond=(6,18),
768 dtstart=parse("19970902T090000"))),
769 [datetime(1997, 9, 2, 9, 0, 6),
770 datetime(1997, 9, 2, 9, 0, 18),
771 datetime(1997, 10, 2, 9, 0, 6)])
772
773 def testMonthlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +0000774 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000775 count=3,
776 byhour=(6,18),
777 byminute=(6,18),
778 dtstart=parse("19970902T090000"))),
779 [datetime(1997, 9, 2, 18, 6),
780 datetime(1997, 9, 2, 18, 18),
781 datetime(1997, 10, 2, 6, 6)])
782
783 def testMonthlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000784 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000785 count=3,
786 byhour=(6,18),
787 bysecond=(6,18),
788 dtstart=parse("19970902T090000"))),
789 [datetime(1997, 9, 2, 18, 0, 6),
790 datetime(1997, 9, 2, 18, 0, 18),
791 datetime(1997, 10, 2, 6, 0, 6)])
792
793 def testMonthlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000794 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000795 count=3,
796 byminute=(6,18),
797 bysecond=(6,18),
798 dtstart=parse("19970902T090000"))),
799 [datetime(1997, 9, 2, 9, 6, 6),
800 datetime(1997, 9, 2, 9, 6, 18),
801 datetime(1997, 9, 2, 9, 18, 6)])
802
803 def testMonthlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +0000804 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000805 count=3,
806 byhour=(6,18),
807 byminute=(6,18),
808 bysecond=(6,18),
809 dtstart=parse("19970902T090000"))),
810 [datetime(1997, 9, 2, 18, 6, 6),
811 datetime(1997, 9, 2, 18, 6, 18),
812 datetime(1997, 9, 2, 18, 18, 6)])
813
814 def testMonthlyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +0000815 self.assertEqual(list(rrule(MONTHLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000816 count=3,
817 bymonthday=(13,17),
818 byhour=(6,18),
819 bysetpos=(3,-3),
820 dtstart=parse("19970902T090000"))),
821 [datetime(1997, 9, 13, 18, 0),
822 datetime(1997, 9, 17, 6, 0),
823 datetime(1997, 10, 13, 18, 0)])
824
niemeyercb08a352003-10-08 06:02:06 +0000825 def testWeekly(self):
niemeyer4da06a42004-07-16 21:21:22 +0000826 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000827 count=3,
828 dtstart=parse("19970902T090000"))),
829 [datetime(1997, 9, 2, 9, 0),
830 datetime(1997, 9, 9, 9, 0),
831 datetime(1997, 9, 16, 9, 0)])
832
niemeyercb08a352003-10-08 06:02:06 +0000833 def testWeeklyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +0000834 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000835 count=3,
836 interval=2,
837 dtstart=parse("19970902T090000"))),
838 [datetime(1997, 9, 2, 9, 0),
839 datetime(1997, 9, 16, 9, 0),
840 datetime(1997, 9, 30, 9, 0)])
841
842 def testWeeklyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +0000843 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000844 count=3,
845 interval=20,
846 dtstart=parse("19970902T090000"))),
847 [datetime(1997, 9, 2, 9, 0),
848 datetime(1998, 1, 20, 9, 0),
849 datetime(1998, 6, 9, 9, 0)])
850
851 def testWeeklyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +0000852 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000853 count=3,
854 bymonth=(1,3),
855 dtstart=parse("19970902T090000"))),
856 [datetime(1998, 1, 6, 9, 0),
857 datetime(1998, 1, 13, 9, 0),
858 datetime(1998, 1, 20, 9, 0)])
859
860 def testWeeklyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000861 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000862 count=3,
863 bymonthday=(1,3),
864 dtstart=parse("19970902T090000"))),
865 [datetime(1997, 9, 3, 9, 0),
866 datetime(1997, 10, 1, 9, 0),
867 datetime(1997, 10, 3, 9, 0)])
868
869 def testWeeklyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000870 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000871 count=3,
872 bymonth=(1,3),
873 bymonthday=(5,7),
874 dtstart=parse("19970902T090000"))),
875 [datetime(1998, 1, 5, 9, 0),
876 datetime(1998, 1, 7, 9, 0),
877 datetime(1998, 3, 5, 9, 0)])
878
879 def testWeeklyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000880 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000881 count=3,
882 byweekday=(TU,TH),
883 dtstart=parse("19970902T090000"))),
884 [datetime(1997, 9, 2, 9, 0),
885 datetime(1997, 9, 4, 9, 0),
886 datetime(1997, 9, 9, 9, 0)])
887
niemeyer7d8be1a2003-10-09 01:09:42 +0000888 def testWeeklyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000889 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000890 count=3,
891 byweekday=(TU(1),TH(-1)),
892 dtstart=parse("19970902T090000"))),
893 [datetime(1997, 9, 2, 9, 0),
894 datetime(1997, 9, 4, 9, 0),
895 datetime(1997, 9, 9, 9, 0)])
896
niemeyercb08a352003-10-08 06:02:06 +0000897 def testWeeklyByMonthAndWeekDay(self):
898 # This test is interesting, because it crosses the year
899 # boundary in a weekly period to find day '1' as a
900 # valid recurrence.
niemeyer4da06a42004-07-16 21:21:22 +0000901 self.assertEqual(list(rrule(WEEKLY,
niemeyercb08a352003-10-08 06:02:06 +0000902 count=3,
903 bymonth=(1,3),
904 byweekday=(TU,TH),
905 dtstart=parse("19970902T090000"))),
906 [datetime(1998, 1, 1, 9, 0),
907 datetime(1998, 1, 6, 9, 0),
908 datetime(1998, 1, 8, 9, 0)])
909
niemeyer7d8be1a2003-10-09 01:09:42 +0000910 def testWeeklyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000911 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000912 count=3,
913 bymonth=(1,3),
914 byweekday=(TU(1),TH(-1)),
915 dtstart=parse("19970902T090000"))),
916 [datetime(1998, 1, 1, 9, 0),
917 datetime(1998, 1, 6, 9, 0),
918 datetime(1998, 1, 8, 9, 0)])
919
920 def testWeeklyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000921 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000922 count=3,
923 bymonthday=(1,3),
924 byweekday=(TU,TH),
925 dtstart=parse("19970902T090000"))),
926 [datetime(1998, 1, 1, 9, 0),
927 datetime(1998, 2, 3, 9, 0),
928 datetime(1998, 3, 3, 9, 0)])
929
930 def testWeeklyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000931 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000932 count=3,
933 bymonth=(1,3),
934 bymonthday=(1,3),
935 byweekday=(TU,TH),
936 dtstart=parse("19970902T090000"))),
937 [datetime(1998, 1, 1, 9, 0),
938 datetime(1998, 3, 3, 9, 0),
939 datetime(2001, 3, 1, 9, 0)])
940
941 def testWeeklyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000942 self.assertEqual(list(rrule(WEEKLY,
niemeyer34788e42005-12-22 19:00:19 +0000943 count=4,
944 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +0000945 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +0000946 [datetime(1997, 12, 31, 9, 0),
947 datetime(1998, 1, 1, 9, 0),
948 datetime(1998, 4, 10, 9, 0),
949 datetime(1998, 7, 19, 9, 0)])
950
951 def testWeeklyByYearDayNeg(self):
952 self.assertEqual(list(rrule(WEEKLY,
953 count=4,
954 byyearday=(-365,-266,-166,-1),
955 dtstart=parse("19970902T090000"))),
956 [datetime(1997, 12, 31, 9, 0),
957 datetime(1998, 1, 1, 9, 0),
niemeyer7d8be1a2003-10-09 01:09:42 +0000958 datetime(1998, 4, 10, 9, 0),
959 datetime(1998, 7, 19, 9, 0)])
960
961 def testWeeklyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +0000962 self.assertEqual(list(rrule(WEEKLY,
niemeyer34788e42005-12-22 19:00:19 +0000963 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +0000964 bymonth=(1,7),
niemeyer34788e42005-12-22 19:00:19 +0000965 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +0000966 dtstart=parse("19970902T090000"))),
967 [datetime(1998, 1, 1, 9, 0),
968 datetime(1998, 7, 19, 9, 0),
niemeyer34788e42005-12-22 19:00:19 +0000969 datetime(1999, 1, 1, 9, 0),
970 datetime(1999, 7, 19, 9, 0)])
971
972 def testWeeklyByMonthAndYearDayNeg(self):
973 self.assertEqual(list(rrule(WEEKLY,
974 count=4,
975 bymonth=(1,7),
976 byyearday=(-365,-266,-166,-1),
977 dtstart=parse("19970902T090000"))),
978 [datetime(1998, 1, 1, 9, 0),
979 datetime(1998, 7, 19, 9, 0),
980 datetime(1999, 1, 1, 9, 0),
981 datetime(1999, 7, 19, 9, 0)])
niemeyer7d8be1a2003-10-09 01:09:42 +0000982
983 def testWeeklyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +0000984 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000985 count=3,
986 byweekno=20,
987 dtstart=parse("19970902T090000"))),
988 [datetime(1998, 5, 11, 9, 0),
989 datetime(1998, 5, 12, 9, 0),
990 datetime(1998, 5, 13, 9, 0)])
991
992 def testWeeklyByWeekNoAndWeekDay(self):
993 # That's a nice one. The first days of week number one
994 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +0000995 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +0000996 count=3,
997 byweekno=1,
998 byweekday=MO,
999 dtstart=parse("19970902T090000"))),
1000 [datetime(1997, 12, 29, 9, 0),
1001 datetime(1999, 1, 4, 9, 0),
1002 datetime(2000, 1, 3, 9, 0)])
1003
1004 def testWeeklyByWeekNoAndWeekDayLarge(self):
1005 # Another nice test. The last days of week number 52/53
1006 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +00001007 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001008 count=3,
1009 byweekno=52,
1010 byweekday=SU,
1011 dtstart=parse("19970902T090000"))),
1012 [datetime(1997, 12, 28, 9, 0),
1013 datetime(1998, 12, 27, 9, 0),
1014 datetime(2000, 1, 2, 9, 0)])
1015
1016 def testWeeklyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001017 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001018 count=3,
1019 byweekno=-1,
1020 byweekday=SU,
1021 dtstart=parse("19970902T090000"))),
1022 [datetime(1997, 12, 28, 9, 0),
1023 datetime(1999, 1, 3, 9, 0),
1024 datetime(2000, 1, 2, 9, 0)])
1025
1026 def testWeeklyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001027 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001028 count=3,
1029 byweekno=53,
1030 byweekday=MO,
1031 dtstart=parse("19970902T090000"))),
1032 [datetime(1998, 12, 28, 9, 0),
1033 datetime(2004, 12, 27, 9, 0),
1034 datetime(2009, 12, 28, 9, 0)])
1035
1036 def testWeeklyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001037 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001038 count=3,
1039 byeaster=0,
1040 dtstart=parse("19970902T090000"))),
1041 [datetime(1998, 4, 12, 9, 0),
1042 datetime(1999, 4, 4, 9, 0),
1043 datetime(2000, 4, 23, 9, 0)])
1044
1045 def testWeeklyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001046 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001047 count=3,
1048 byeaster=1,
1049 dtstart=parse("19970902T090000"))),
1050 [datetime(1998, 4, 13, 9, 0),
1051 datetime(1999, 4, 5, 9, 0),
1052 datetime(2000, 4, 24, 9, 0)])
1053
1054 def testWeeklyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001055 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001056 count=3,
1057 byeaster=-1,
1058 dtstart=parse("19970902T090000"))),
1059 [datetime(1998, 4, 11, 9, 0),
1060 datetime(1999, 4, 3, 9, 0),
1061 datetime(2000, 4, 22, 9, 0)])
1062
1063 def testWeeklyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001064 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001065 count=3,
1066 byhour=(6,18),
1067 dtstart=parse("19970902T090000"))),
1068 [datetime(1997, 9, 2, 18, 0),
1069 datetime(1997, 9, 9, 6, 0),
1070 datetime(1997, 9, 9, 18, 0)])
1071
1072 def testWeeklyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001073 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001074 count=3,
1075 byminute=(6,18),
1076 dtstart=parse("19970902T090000"))),
1077 [datetime(1997, 9, 2, 9, 6),
1078 datetime(1997, 9, 2, 9, 18),
1079 datetime(1997, 9, 9, 9, 6)])
1080
1081 def testWeeklyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001082 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001083 count=3,
1084 bysecond=(6,18),
1085 dtstart=parse("19970902T090000"))),
1086 [datetime(1997, 9, 2, 9, 0, 6),
1087 datetime(1997, 9, 2, 9, 0, 18),
1088 datetime(1997, 9, 9, 9, 0, 6)])
1089
1090 def testWeeklyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001091 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001092 count=3,
1093 byhour=(6,18),
1094 byminute=(6,18),
1095 dtstart=parse("19970902T090000"))),
1096 [datetime(1997, 9, 2, 18, 6),
1097 datetime(1997, 9, 2, 18, 18),
1098 datetime(1997, 9, 9, 6, 6)])
1099
1100 def testWeeklyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001101 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001102 count=3,
1103 byhour=(6,18),
1104 bysecond=(6,18),
1105 dtstart=parse("19970902T090000"))),
1106 [datetime(1997, 9, 2, 18, 0, 6),
1107 datetime(1997, 9, 2, 18, 0, 18),
1108 datetime(1997, 9, 9, 6, 0, 6)])
1109
1110 def testWeeklyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001111 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001112 count=3,
1113 byminute=(6,18),
1114 bysecond=(6,18),
1115 dtstart=parse("19970902T090000"))),
1116 [datetime(1997, 9, 2, 9, 6, 6),
1117 datetime(1997, 9, 2, 9, 6, 18),
1118 datetime(1997, 9, 2, 9, 18, 6)])
1119
1120 def testWeeklyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001121 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001122 count=3,
1123 byhour=(6,18),
1124 byminute=(6,18),
1125 bysecond=(6,18),
1126 dtstart=parse("19970902T090000"))),
1127 [datetime(1997, 9, 2, 18, 6, 6),
1128 datetime(1997, 9, 2, 18, 6, 18),
1129 datetime(1997, 9, 2, 18, 18, 6)])
1130
1131 def testWeeklyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001132 self.assertEqual(list(rrule(WEEKLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001133 count=3,
1134 byweekday=(TU,TH),
1135 byhour=(6,18),
1136 bysetpos=(3,-3),
1137 dtstart=parse("19970902T090000"))),
1138 [datetime(1997, 9, 2, 18, 0),
1139 datetime(1997, 9, 4, 6, 0),
1140 datetime(1997, 9, 9, 18, 0)])
1141
niemeyercb08a352003-10-08 06:02:06 +00001142 def testDaily(self):
niemeyer4da06a42004-07-16 21:21:22 +00001143 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001144 count=3,
1145 dtstart=parse("19970902T090000"))),
1146 [datetime(1997, 9, 2, 9, 0),
1147 datetime(1997, 9, 3, 9, 0),
1148 datetime(1997, 9, 4, 9, 0)])
1149
niemeyercb08a352003-10-08 06:02:06 +00001150 def testDailyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001151 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001152 count=3,
1153 interval=2,
1154 dtstart=parse("19970902T090000"))),
1155 [datetime(1997, 9, 2, 9, 0),
1156 datetime(1997, 9, 4, 9, 0),
1157 datetime(1997, 9, 6, 9, 0)])
1158
1159 def testDailyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001160 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001161 count=3,
1162 interval=92,
1163 dtstart=parse("19970902T090000"))),
1164 [datetime(1997, 9, 2, 9, 0),
1165 datetime(1997, 12, 3, 9, 0),
1166 datetime(1998, 3, 5, 9, 0)])
1167
1168 def testDailyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001169 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001170 count=3,
1171 bymonth=(1,3),
1172 dtstart=parse("19970902T090000"))),
1173 [datetime(1998, 1, 1, 9, 0),
1174 datetime(1998, 1, 2, 9, 0),
1175 datetime(1998, 1, 3, 9, 0)])
1176
1177 def testDailyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001178 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001179 count=3,
1180 bymonthday=(1,3),
1181 dtstart=parse("19970902T090000"))),
1182 [datetime(1997, 9, 3, 9, 0),
1183 datetime(1997, 10, 1, 9, 0),
1184 datetime(1997, 10, 3, 9, 0)])
1185
1186 def testDailyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001187 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001188 count=3,
1189 bymonth=(1,3),
1190 bymonthday=(5,7),
1191 dtstart=parse("19970902T090000"))),
1192 [datetime(1998, 1, 5, 9, 0),
1193 datetime(1998, 1, 7, 9, 0),
1194 datetime(1998, 3, 5, 9, 0)])
1195
1196 def testDailyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001197 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001198 count=3,
1199 byweekday=(TU,TH),
1200 dtstart=parse("19970902T090000"))),
1201 [datetime(1997, 9, 2, 9, 0),
1202 datetime(1997, 9, 4, 9, 0),
1203 datetime(1997, 9, 9, 9, 0)])
1204
niemeyer7d8be1a2003-10-09 01:09:42 +00001205 def testDailyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001206 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001207 count=3,
1208 byweekday=(TU(1),TH(-1)),
1209 dtstart=parse("19970902T090000"))),
1210 [datetime(1997, 9, 2, 9, 0),
1211 datetime(1997, 9, 4, 9, 0),
1212 datetime(1997, 9, 9, 9, 0)])
1213
niemeyercb08a352003-10-08 06:02:06 +00001214 def testDailyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001215 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00001216 count=3,
1217 bymonth=(1,3),
1218 byweekday=(TU,TH),
1219 dtstart=parse("19970902T090000"))),
1220 [datetime(1998, 1, 1, 9, 0),
1221 datetime(1998, 1, 6, 9, 0),
1222 datetime(1998, 1, 8, 9, 0)])
1223
niemeyer7d8be1a2003-10-09 01:09:42 +00001224 def testDailyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001225 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001226 count=3,
1227 bymonth=(1,3),
1228 byweekday=(TU(1),TH(-1)),
1229 dtstart=parse("19970902T090000"))),
1230 [datetime(1998, 1, 1, 9, 0),
1231 datetime(1998, 1, 6, 9, 0),
1232 datetime(1998, 1, 8, 9, 0)])
1233
1234 def testDailyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001235 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001236 count=3,
1237 bymonthday=(1,3),
1238 byweekday=(TU,TH),
1239 dtstart=parse("19970902T090000"))),
1240 [datetime(1998, 1, 1, 9, 0),
1241 datetime(1998, 2, 3, 9, 0),
1242 datetime(1998, 3, 3, 9, 0)])
1243
1244 def testDailyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001245 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001246 count=3,
1247 bymonth=(1,3),
1248 bymonthday=(1,3),
1249 byweekday=(TU,TH),
1250 dtstart=parse("19970902T090000"))),
1251 [datetime(1998, 1, 1, 9, 0),
1252 datetime(1998, 3, 3, 9, 0),
1253 datetime(2001, 3, 1, 9, 0)])
1254
1255 def testDailyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001256 self.assertEqual(list(rrule(DAILY,
niemeyer34788e42005-12-22 19:00:19 +00001257 count=4,
1258 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00001259 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +00001260 [datetime(1997, 12, 31, 9, 0),
1261 datetime(1998, 1, 1, 9, 0),
1262 datetime(1998, 4, 10, 9, 0),
1263 datetime(1998, 7, 19, 9, 0)])
1264
1265 def testDailyByYearDayNeg(self):
1266 self.assertEqual(list(rrule(DAILY,
1267 count=4,
1268 byyearday=(-365,-266,-166,-1),
1269 dtstart=parse("19970902T090000"))),
1270 [datetime(1997, 12, 31, 9, 0),
1271 datetime(1998, 1, 1, 9, 0),
niemeyer7d8be1a2003-10-09 01:09:42 +00001272 datetime(1998, 4, 10, 9, 0),
1273 datetime(1998, 7, 19, 9, 0)])
1274
1275 def testDailyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001276 self.assertEqual(list(rrule(DAILY,
niemeyer34788e42005-12-22 19:00:19 +00001277 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +00001278 bymonth=(1,7),
niemeyer34788e42005-12-22 19:00:19 +00001279 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00001280 dtstart=parse("19970902T090000"))),
1281 [datetime(1998, 1, 1, 9, 0),
1282 datetime(1998, 7, 19, 9, 0),
niemeyer34788e42005-12-22 19:00:19 +00001283 datetime(1999, 1, 1, 9, 0),
1284 datetime(1999, 7, 19, 9, 0)])
1285
1286 def testDailyByMonthAndYearDayNeg(self):
1287 self.assertEqual(list(rrule(DAILY,
1288 count=4,
1289 bymonth=(1,7),
1290 byyearday=(-365,-266,-166,-1),
1291 dtstart=parse("19970902T090000"))),
1292 [datetime(1998, 1, 1, 9, 0),
1293 datetime(1998, 7, 19, 9, 0),
1294 datetime(1999, 1, 1, 9, 0),
1295 datetime(1999, 7, 19, 9, 0)])
niemeyer7d8be1a2003-10-09 01:09:42 +00001296
1297 def testDailyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00001298 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001299 count=3,
1300 byweekno=20,
1301 dtstart=parse("19970902T090000"))),
1302 [datetime(1998, 5, 11, 9, 0),
1303 datetime(1998, 5, 12, 9, 0),
1304 datetime(1998, 5, 13, 9, 0)])
1305
1306 def testDailyByWeekNoAndWeekDay(self):
1307 # That's a nice one. The first days of week number one
1308 # may be in the last year.
niemeyer4da06a42004-07-16 21:21:22 +00001309 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001310 count=3,
1311 byweekno=1,
1312 byweekday=MO,
1313 dtstart=parse("19970902T090000"))),
1314 [datetime(1997, 12, 29, 9, 0),
1315 datetime(1999, 1, 4, 9, 0),
1316 datetime(2000, 1, 3, 9, 0)])
1317
1318 def testDailyByWeekNoAndWeekDayLarge(self):
1319 # Another nice test. The last days of week number 52/53
1320 # may be in the next year.
niemeyer4da06a42004-07-16 21:21:22 +00001321 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001322 count=3,
1323 byweekno=52,
1324 byweekday=SU,
1325 dtstart=parse("19970902T090000"))),
1326 [datetime(1997, 12, 28, 9, 0),
1327 datetime(1998, 12, 27, 9, 0),
1328 datetime(2000, 1, 2, 9, 0)])
1329
1330 def testDailyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001331 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001332 count=3,
1333 byweekno=-1,
1334 byweekday=SU,
1335 dtstart=parse("19970902T090000"))),
1336 [datetime(1997, 12, 28, 9, 0),
1337 datetime(1999, 1, 3, 9, 0),
1338 datetime(2000, 1, 2, 9, 0)])
1339
1340 def testDailyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001341 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001342 count=3,
1343 byweekno=53,
1344 byweekday=MO,
1345 dtstart=parse("19970902T090000"))),
1346 [datetime(1998, 12, 28, 9, 0),
1347 datetime(2004, 12, 27, 9, 0),
1348 datetime(2009, 12, 28, 9, 0)])
1349
1350 def testDailyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001351 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001352 count=3,
1353 byeaster=0,
1354 dtstart=parse("19970902T090000"))),
1355 [datetime(1998, 4, 12, 9, 0),
1356 datetime(1999, 4, 4, 9, 0),
1357 datetime(2000, 4, 23, 9, 0)])
1358
1359 def testDailyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001360 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001361 count=3,
1362 byeaster=1,
1363 dtstart=parse("19970902T090000"))),
1364 [datetime(1998, 4, 13, 9, 0),
1365 datetime(1999, 4, 5, 9, 0),
1366 datetime(2000, 4, 24, 9, 0)])
1367
1368 def testDailyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001369 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001370 count=3,
1371 byeaster=-1,
1372 dtstart=parse("19970902T090000"))),
1373 [datetime(1998, 4, 11, 9, 0),
1374 datetime(1999, 4, 3, 9, 0),
1375 datetime(2000, 4, 22, 9, 0)])
1376
1377 def testDailyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001378 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001379 count=3,
1380 byhour=(6,18),
1381 dtstart=parse("19970902T090000"))),
1382 [datetime(1997, 9, 2, 18, 0),
1383 datetime(1997, 9, 3, 6, 0),
1384 datetime(1997, 9, 3, 18, 0)])
1385
1386 def testDailyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001387 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001388 count=3,
1389 byminute=(6,18),
1390 dtstart=parse("19970902T090000"))),
1391 [datetime(1997, 9, 2, 9, 6),
1392 datetime(1997, 9, 2, 9, 18),
1393 datetime(1997, 9, 3, 9, 6)])
1394
1395 def testDailyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001396 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001397 count=3,
1398 bysecond=(6,18),
1399 dtstart=parse("19970902T090000"))),
1400 [datetime(1997, 9, 2, 9, 0, 6),
1401 datetime(1997, 9, 2, 9, 0, 18),
1402 datetime(1997, 9, 3, 9, 0, 6)])
1403
1404 def testDailyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001405 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001406 count=3,
1407 byhour=(6,18),
1408 byminute=(6,18),
1409 dtstart=parse("19970902T090000"))),
1410 [datetime(1997, 9, 2, 18, 6),
1411 datetime(1997, 9, 2, 18, 18),
1412 datetime(1997, 9, 3, 6, 6)])
1413
1414 def testDailyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001415 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001416 count=3,
1417 byhour=(6,18),
1418 bysecond=(6,18),
1419 dtstart=parse("19970902T090000"))),
1420 [datetime(1997, 9, 2, 18, 0, 6),
1421 datetime(1997, 9, 2, 18, 0, 18),
1422 datetime(1997, 9, 3, 6, 0, 6)])
1423
1424 def testDailyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001425 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001426 count=3,
1427 byminute=(6,18),
1428 bysecond=(6,18),
1429 dtstart=parse("19970902T090000"))),
1430 [datetime(1997, 9, 2, 9, 6, 6),
1431 datetime(1997, 9, 2, 9, 6, 18),
1432 datetime(1997, 9, 2, 9, 18, 6)])
1433
1434 def testDailyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001435 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001436 count=3,
1437 byhour=(6,18),
1438 byminute=(6,18),
1439 bysecond=(6,18),
1440 dtstart=parse("19970902T090000"))),
1441 [datetime(1997, 9, 2, 18, 6, 6),
1442 datetime(1997, 9, 2, 18, 6, 18),
1443 datetime(1997, 9, 2, 18, 18, 6)])
1444
1445 def testDailyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001446 self.assertEqual(list(rrule(DAILY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001447 count=3,
1448 byhour=(6,18),
1449 byminute=(15,45),
1450 bysetpos=(3,-3),
1451 dtstart=parse("19970902T090000"))),
1452 [datetime(1997, 9, 2, 18, 15),
1453 datetime(1997, 9, 3, 6, 45),
1454 datetime(1997, 9, 3, 18, 15)])
1455
niemeyercb08a352003-10-08 06:02:06 +00001456 def testHourly(self):
niemeyer4da06a42004-07-16 21:21:22 +00001457 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001458 count=3,
1459 dtstart=parse("19970902T090000"))),
1460 [datetime(1997, 9, 2, 9, 0),
1461 datetime(1997, 9, 2, 10, 0),
1462 datetime(1997, 9, 2, 11, 0)])
1463
niemeyercb08a352003-10-08 06:02:06 +00001464 def testHourlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001465 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001466 count=3,
1467 interval=2,
1468 dtstart=parse("19970902T090000"))),
1469 [datetime(1997, 9, 2, 9, 0),
1470 datetime(1997, 9, 2, 11, 0),
1471 datetime(1997, 9, 2, 13, 0)])
1472
1473 def testHourlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001474 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001475 count=3,
1476 interval=769,
1477 dtstart=parse("19970902T090000"))),
1478 [datetime(1997, 9, 2, 9, 0),
1479 datetime(1997, 10, 4, 10, 0),
1480 datetime(1997, 11, 5, 11, 0)])
1481
1482 def testHourlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001483 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001484 count=3,
1485 bymonth=(1,3),
1486 dtstart=parse("19970902T090000"))),
1487 [datetime(1998, 1, 1, 0, 0),
1488 datetime(1998, 1, 1, 1, 0),
1489 datetime(1998, 1, 1, 2, 0)])
1490
1491 def testHourlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001492 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001493 count=3,
1494 bymonthday=(1,3),
1495 dtstart=parse("19970902T090000"))),
1496 [datetime(1997, 9, 3, 0, 0),
1497 datetime(1997, 9, 3, 1, 0),
1498 datetime(1997, 9, 3, 2, 0)])
1499
1500 def testHourlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001501 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001502 count=3,
1503 bymonth=(1,3),
1504 bymonthday=(5,7),
1505 dtstart=parse("19970902T090000"))),
1506 [datetime(1998, 1, 5, 0, 0),
1507 datetime(1998, 1, 5, 1, 0),
1508 datetime(1998, 1, 5, 2, 0)])
1509
1510 def testHourlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001511 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001512 count=3,
1513 byweekday=(TU,TH),
1514 dtstart=parse("19970902T090000"))),
1515 [datetime(1997, 9, 2, 9, 0),
1516 datetime(1997, 9, 2, 10, 0),
1517 datetime(1997, 9, 2, 11, 0)])
1518
niemeyer7d8be1a2003-10-09 01:09:42 +00001519 def testHourlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001520 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001521 count=3,
1522 byweekday=(TU(1),TH(-1)),
1523 dtstart=parse("19970902T090000"))),
1524 [datetime(1997, 9, 2, 9, 0),
1525 datetime(1997, 9, 2, 10, 0),
1526 datetime(1997, 9, 2, 11, 0)])
1527
niemeyercb08a352003-10-08 06:02:06 +00001528 def testHourlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001529 self.assertEqual(list(rrule(HOURLY,
niemeyercb08a352003-10-08 06:02:06 +00001530 count=3,
1531 bymonth=(1,3),
1532 byweekday=(TU,TH),
1533 dtstart=parse("19970902T090000"))),
1534 [datetime(1998, 1, 1, 0, 0),
1535 datetime(1998, 1, 1, 1, 0),
1536 datetime(1998, 1, 1, 2, 0)])
1537
niemeyer7d8be1a2003-10-09 01:09:42 +00001538 def testHourlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001539 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001540 count=3,
1541 bymonth=(1,3),
1542 byweekday=(TU(1),TH(-1)),
1543 dtstart=parse("19970902T090000"))),
1544 [datetime(1998, 1, 1, 0, 0),
1545 datetime(1998, 1, 1, 1, 0),
1546 datetime(1998, 1, 1, 2, 0)])
1547
1548 def testHourlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001549 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001550 count=3,
1551 bymonthday=(1,3),
1552 byweekday=(TU,TH),
1553 dtstart=parse("19970902T090000"))),
1554 [datetime(1998, 1, 1, 0, 0),
1555 datetime(1998, 1, 1, 1, 0),
1556 datetime(1998, 1, 1, 2, 0)])
1557
1558 def testHourlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001559 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001560 count=3,
1561 bymonth=(1,3),
1562 bymonthday=(1,3),
1563 byweekday=(TU,TH),
1564 dtstart=parse("19970902T090000"))),
1565 [datetime(1998, 1, 1, 0, 0),
1566 datetime(1998, 1, 1, 1, 0),
1567 datetime(1998, 1, 1, 2, 0)])
1568
1569 def testHourlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001570 self.assertEqual(list(rrule(HOURLY,
niemeyer34788e42005-12-22 19:00:19 +00001571 count=4,
1572 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00001573 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +00001574 [datetime(1997, 12, 31, 0, 0),
1575 datetime(1997, 12, 31, 1, 0),
1576 datetime(1997, 12, 31, 2, 0),
1577 datetime(1997, 12, 31, 3, 0)])
1578
1579 def testHourlyByYearDayNeg(self):
1580 self.assertEqual(list(rrule(HOURLY,
1581 count=4,
1582 byyearday=(-365,-266,-166,-1),
1583 dtstart=parse("19970902T090000"))),
1584 [datetime(1997, 12, 31, 0, 0),
1585 datetime(1997, 12, 31, 1, 0),
1586 datetime(1997, 12, 31, 2, 0),
1587 datetime(1997, 12, 31, 3, 0)])
niemeyer7d8be1a2003-10-09 01:09:42 +00001588
1589 def testHourlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001590 self.assertEqual(list(rrule(HOURLY,
niemeyer34788e42005-12-22 19:00:19 +00001591 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +00001592 bymonth=(4,7),
niemeyer34788e42005-12-22 19:00:19 +00001593 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00001594 dtstart=parse("19970902T090000"))),
1595 [datetime(1998, 4, 10, 0, 0),
1596 datetime(1998, 4, 10, 1, 0),
niemeyer34788e42005-12-22 19:00:19 +00001597 datetime(1998, 4, 10, 2, 0),
1598 datetime(1998, 4, 10, 3, 0)])
1599
1600 def testHourlyByMonthAndYearDayNeg(self):
1601 self.assertEqual(list(rrule(HOURLY,
1602 count=4,
1603 bymonth=(4,7),
1604 byyearday=(-365,-266,-166,-1),
1605 dtstart=parse("19970902T090000"))),
1606 [datetime(1998, 4, 10, 0, 0),
1607 datetime(1998, 4, 10, 1, 0),
1608 datetime(1998, 4, 10, 2, 0),
1609 datetime(1998, 4, 10, 3, 0)])
niemeyer7d8be1a2003-10-09 01:09:42 +00001610
1611 def testHourlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00001612 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001613 count=3,
1614 byweekno=20,
1615 dtstart=parse("19970902T090000"))),
1616 [datetime(1998, 5, 11, 0, 0),
1617 datetime(1998, 5, 11, 1, 0),
1618 datetime(1998, 5, 11, 2, 0)])
1619
1620 def testHourlyByWeekNoAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001621 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001622 count=3,
1623 byweekno=1,
1624 byweekday=MO,
1625 dtstart=parse("19970902T090000"))),
1626 [datetime(1997, 12, 29, 0, 0),
1627 datetime(1997, 12, 29, 1, 0),
1628 datetime(1997, 12, 29, 2, 0)])
1629
1630 def testHourlyByWeekNoAndWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001631 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001632 count=3,
1633 byweekno=52,
1634 byweekday=SU,
1635 dtstart=parse("19970902T090000"))),
1636 [datetime(1997, 12, 28, 0, 0),
1637 datetime(1997, 12, 28, 1, 0),
1638 datetime(1997, 12, 28, 2, 0)])
1639
1640 def testHourlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001641 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001642 count=3,
1643 byweekno=-1,
1644 byweekday=SU,
1645 dtstart=parse("19970902T090000"))),
1646 [datetime(1997, 12, 28, 0, 0),
1647 datetime(1997, 12, 28, 1, 0),
1648 datetime(1997, 12, 28, 2, 0)])
1649
1650 def testHourlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001651 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001652 count=3,
1653 byweekno=53,
1654 byweekday=MO,
1655 dtstart=parse("19970902T090000"))),
1656 [datetime(1998, 12, 28, 0, 0),
1657 datetime(1998, 12, 28, 1, 0),
1658 datetime(1998, 12, 28, 2, 0)])
1659
1660 def testHourlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001661 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001662 count=3,
1663 byeaster=0,
1664 dtstart=parse("19970902T090000"))),
1665 [datetime(1998, 4, 12, 0, 0),
1666 datetime(1998, 4, 12, 1, 0),
1667 datetime(1998, 4, 12, 2, 0)])
1668
1669 def testHourlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001670 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001671 count=3,
1672 byeaster=1,
1673 dtstart=parse("19970902T090000"))),
1674 [datetime(1998, 4, 13, 0, 0),
1675 datetime(1998, 4, 13, 1, 0),
1676 datetime(1998, 4, 13, 2, 0)])
1677
1678 def testHourlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001679 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001680 count=3,
1681 byeaster=-1,
1682 dtstart=parse("19970902T090000"))),
1683 [datetime(1998, 4, 11, 0, 0),
1684 datetime(1998, 4, 11, 1, 0),
1685 datetime(1998, 4, 11, 2, 0)])
1686
1687 def testHourlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001688 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001689 count=3,
1690 byhour=(6,18),
1691 dtstart=parse("19970902T090000"))),
1692 [datetime(1997, 9, 2, 18, 0),
1693 datetime(1997, 9, 3, 6, 0),
1694 datetime(1997, 9, 3, 18, 0)])
1695
1696 def testHourlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001697 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001698 count=3,
1699 byminute=(6,18),
1700 dtstart=parse("19970902T090000"))),
1701 [datetime(1997, 9, 2, 9, 6),
1702 datetime(1997, 9, 2, 9, 18),
1703 datetime(1997, 9, 2, 10, 6)])
1704
1705 def testHourlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001706 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001707 count=3,
1708 bysecond=(6,18),
1709 dtstart=parse("19970902T090000"))),
1710 [datetime(1997, 9, 2, 9, 0, 6),
1711 datetime(1997, 9, 2, 9, 0, 18),
1712 datetime(1997, 9, 2, 10, 0, 6)])
1713
1714 def testHourlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00001715 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001716 count=3,
1717 byhour=(6,18),
1718 byminute=(6,18),
1719 dtstart=parse("19970902T090000"))),
1720 [datetime(1997, 9, 2, 18, 6),
1721 datetime(1997, 9, 2, 18, 18),
1722 datetime(1997, 9, 3, 6, 6)])
1723
1724 def testHourlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001725 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001726 count=3,
1727 byhour=(6,18),
1728 bysecond=(6,18),
1729 dtstart=parse("19970902T090000"))),
1730 [datetime(1997, 9, 2, 18, 0, 6),
1731 datetime(1997, 9, 2, 18, 0, 18),
1732 datetime(1997, 9, 3, 6, 0, 6)])
1733
1734 def testHourlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001735 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001736 count=3,
1737 byminute=(6,18),
1738 bysecond=(6,18),
1739 dtstart=parse("19970902T090000"))),
1740 [datetime(1997, 9, 2, 9, 6, 6),
1741 datetime(1997, 9, 2, 9, 6, 18),
1742 datetime(1997, 9, 2, 9, 18, 6)])
1743
1744 def testHourlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00001745 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001746 count=3,
1747 byhour=(6,18),
1748 byminute=(6,18),
1749 bysecond=(6,18),
1750 dtstart=parse("19970902T090000"))),
1751 [datetime(1997, 9, 2, 18, 6, 6),
1752 datetime(1997, 9, 2, 18, 6, 18),
1753 datetime(1997, 9, 2, 18, 18, 6)])
1754
1755 def testHourlyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001756 self.assertEqual(list(rrule(HOURLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001757 count=3,
1758 byminute=(15,45),
1759 bysecond=(15,45),
1760 bysetpos=(3,-3),
1761 dtstart=parse("19970902T090000"))),
1762 [datetime(1997, 9, 2, 9, 15, 45),
1763 datetime(1997, 9, 2, 9, 45, 15),
1764 datetime(1997, 9, 2, 10, 15, 45)])
1765
niemeyercb08a352003-10-08 06:02:06 +00001766 def testMinutely(self):
niemeyer4da06a42004-07-16 21:21:22 +00001767 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001768 count=3,
1769 dtstart=parse("19970902T090000"))),
1770 [datetime(1997, 9, 2, 9, 0),
1771 datetime(1997, 9, 2, 9, 1),
1772 datetime(1997, 9, 2, 9, 2)])
1773
niemeyercb08a352003-10-08 06:02:06 +00001774 def testMinutelyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00001775 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001776 count=3,
1777 interval=2,
1778 dtstart=parse("19970902T090000"))),
1779 [datetime(1997, 9, 2, 9, 0),
1780 datetime(1997, 9, 2, 9, 2),
1781 datetime(1997, 9, 2, 9, 4)])
1782
1783 def testMinutelyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001784 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001785 count=3,
1786 interval=1501,
1787 dtstart=parse("19970902T090000"))),
1788 [datetime(1997, 9, 2, 9, 0),
1789 datetime(1997, 9, 3, 10, 1),
1790 datetime(1997, 9, 4, 11, 2)])
1791
1792 def testMinutelyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00001793 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001794 count=3,
1795 bymonth=(1,3),
1796 dtstart=parse("19970902T090000"))),
1797 [datetime(1998, 1, 1, 0, 0),
1798 datetime(1998, 1, 1, 0, 1),
1799 datetime(1998, 1, 1, 0, 2)])
1800
1801 def testMinutelyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001802 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001803 count=3,
1804 bymonthday=(1,3),
1805 dtstart=parse("19970902T090000"))),
1806 [datetime(1997, 9, 3, 0, 0),
1807 datetime(1997, 9, 3, 0, 1),
1808 datetime(1997, 9, 3, 0, 2)])
1809
1810 def testMinutelyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001811 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001812 count=3,
1813 bymonth=(1,3),
1814 bymonthday=(5,7),
1815 dtstart=parse("19970902T090000"))),
1816 [datetime(1998, 1, 5, 0, 0),
1817 datetime(1998, 1, 5, 0, 1),
1818 datetime(1998, 1, 5, 0, 2)])
1819
1820 def testMinutelyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001821 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001822 count=3,
1823 byweekday=(TU,TH),
1824 dtstart=parse("19970902T090000"))),
1825 [datetime(1997, 9, 2, 9, 0),
1826 datetime(1997, 9, 2, 9, 1),
1827 datetime(1997, 9, 2, 9, 2)])
1828
niemeyer7d8be1a2003-10-09 01:09:42 +00001829 def testMinutelyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001830 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001831 count=3,
1832 byweekday=(TU(1),TH(-1)),
1833 dtstart=parse("19970902T090000"))),
1834 [datetime(1997, 9, 2, 9, 0),
1835 datetime(1997, 9, 2, 9, 1),
1836 datetime(1997, 9, 2, 9, 2)])
1837
niemeyercb08a352003-10-08 06:02:06 +00001838 def testMinutelyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001839 self.assertEqual(list(rrule(MINUTELY,
niemeyercb08a352003-10-08 06:02:06 +00001840 count=3,
1841 bymonth=(1,3),
1842 byweekday=(TU,TH),
1843 dtstart=parse("19970902T090000"))),
1844 [datetime(1998, 1, 1, 0, 0),
1845 datetime(1998, 1, 1, 0, 1),
1846 datetime(1998, 1, 1, 0, 2)])
1847
niemeyer7d8be1a2003-10-09 01:09:42 +00001848 def testMinutelyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001849 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001850 count=3,
1851 bymonth=(1,3),
1852 byweekday=(TU(1),TH(-1)),
1853 dtstart=parse("19970902T090000"))),
1854 [datetime(1998, 1, 1, 0, 0),
1855 datetime(1998, 1, 1, 0, 1),
1856 datetime(1998, 1, 1, 0, 2)])
1857
1858 def testMinutelyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001859 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001860 count=3,
1861 bymonthday=(1,3),
1862 byweekday=(TU,TH),
1863 dtstart=parse("19970902T090000"))),
1864 [datetime(1998, 1, 1, 0, 0),
1865 datetime(1998, 1, 1, 0, 1),
1866 datetime(1998, 1, 1, 0, 2)])
1867
1868 def testMinutelyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001869 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001870 count=3,
1871 bymonth=(1,3),
1872 bymonthday=(1,3),
1873 byweekday=(TU,TH),
1874 dtstart=parse("19970902T090000"))),
1875 [datetime(1998, 1, 1, 0, 0),
1876 datetime(1998, 1, 1, 0, 1),
1877 datetime(1998, 1, 1, 0, 2)])
1878
1879 def testMinutelyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001880 self.assertEqual(list(rrule(MINUTELY,
niemeyer34788e42005-12-22 19:00:19 +00001881 count=4,
1882 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00001883 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +00001884 [datetime(1997, 12, 31, 0, 0),
1885 datetime(1997, 12, 31, 0, 1),
1886 datetime(1997, 12, 31, 0, 2),
1887 datetime(1997, 12, 31, 0, 3)])
1888
1889 def testMinutelyByYearDayNeg(self):
1890 self.assertEqual(list(rrule(MINUTELY,
1891 count=4,
1892 byyearday=(-365,-266,-166,-1),
1893 dtstart=parse("19970902T090000"))),
1894 [datetime(1997, 12, 31, 0, 0),
1895 datetime(1997, 12, 31, 0, 1),
1896 datetime(1997, 12, 31, 0, 2),
1897 datetime(1997, 12, 31, 0, 3)])
niemeyer7d8be1a2003-10-09 01:09:42 +00001898
1899 def testMinutelyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001900 self.assertEqual(list(rrule(MINUTELY,
niemeyer34788e42005-12-22 19:00:19 +00001901 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +00001902 bymonth=(4,7),
niemeyer34788e42005-12-22 19:00:19 +00001903 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00001904 dtstart=parse("19970902T090000"))),
1905 [datetime(1998, 4, 10, 0, 0),
1906 datetime(1998, 4, 10, 0, 1),
niemeyer34788e42005-12-22 19:00:19 +00001907 datetime(1998, 4, 10, 0, 2),
1908 datetime(1998, 4, 10, 0, 3)])
1909
1910 def testMinutelyByMonthAndYearDayNeg(self):
1911 self.assertEqual(list(rrule(MINUTELY,
1912 count=4,
1913 bymonth=(4,7),
1914 byyearday=(-365,-266,-166,-1),
1915 dtstart=parse("19970902T090000"))),
1916 [datetime(1998, 4, 10, 0, 0),
1917 datetime(1998, 4, 10, 0, 1),
1918 datetime(1998, 4, 10, 0, 2),
1919 datetime(1998, 4, 10, 0, 3)])
niemeyer7d8be1a2003-10-09 01:09:42 +00001920
1921 def testMinutelyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00001922 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001923 count=3,
1924 byweekno=20,
1925 dtstart=parse("19970902T090000"))),
1926 [datetime(1998, 5, 11, 0, 0),
1927 datetime(1998, 5, 11, 0, 1),
1928 datetime(1998, 5, 11, 0, 2)])
1929
1930 def testMinutelyByWeekNoAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00001931 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001932 count=3,
1933 byweekno=1,
1934 byweekday=MO,
1935 dtstart=parse("19970902T090000"))),
1936 [datetime(1997, 12, 29, 0, 0),
1937 datetime(1997, 12, 29, 0, 1),
1938 datetime(1997, 12, 29, 0, 2)])
1939
1940 def testMinutelyByWeekNoAndWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00001941 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001942 count=3,
1943 byweekno=52,
1944 byweekday=SU,
1945 dtstart=parse("19970902T090000"))),
1946 [datetime(1997, 12, 28, 0, 0),
1947 datetime(1997, 12, 28, 0, 1),
1948 datetime(1997, 12, 28, 0, 2)])
1949
1950 def testMinutelyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00001951 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001952 count=3,
1953 byweekno=-1,
1954 byweekday=SU,
1955 dtstart=parse("19970902T090000"))),
1956 [datetime(1997, 12, 28, 0, 0),
1957 datetime(1997, 12, 28, 0, 1),
1958 datetime(1997, 12, 28, 0, 2)])
1959
1960 def testMinutelyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00001961 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001962 count=3,
1963 byweekno=53,
1964 byweekday=MO,
1965 dtstart=parse("19970902T090000"))),
1966 [datetime(1998, 12, 28, 0, 0),
1967 datetime(1998, 12, 28, 0, 1),
1968 datetime(1998, 12, 28, 0, 2)])
1969
1970 def testMinutelyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00001971 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001972 count=3,
1973 byeaster=0,
1974 dtstart=parse("19970902T090000"))),
1975 [datetime(1998, 4, 12, 0, 0),
1976 datetime(1998, 4, 12, 0, 1),
1977 datetime(1998, 4, 12, 0, 2)])
1978
1979 def testMinutelyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00001980 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001981 count=3,
1982 byeaster=1,
1983 dtstart=parse("19970902T090000"))),
1984 [datetime(1998, 4, 13, 0, 0),
1985 datetime(1998, 4, 13, 0, 1),
1986 datetime(1998, 4, 13, 0, 2)])
1987
1988 def testMinutelyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00001989 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001990 count=3,
1991 byeaster=-1,
1992 dtstart=parse("19970902T090000"))),
1993 [datetime(1998, 4, 11, 0, 0),
1994 datetime(1998, 4, 11, 0, 1),
1995 datetime(1998, 4, 11, 0, 2)])
1996
1997 def testMinutelyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00001998 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00001999 count=3,
2000 byhour=(6,18),
2001 dtstart=parse("19970902T090000"))),
2002 [datetime(1997, 9, 2, 18, 0),
2003 datetime(1997, 9, 2, 18, 1),
2004 datetime(1997, 9, 2, 18, 2)])
2005
2006 def testMinutelyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00002007 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002008 count=3,
2009 byminute=(6,18),
2010 dtstart=parse("19970902T090000"))),
2011 [datetime(1997, 9, 2, 9, 6),
2012 datetime(1997, 9, 2, 9, 18),
2013 datetime(1997, 9, 2, 10, 6)])
2014
2015 def testMinutelyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002016 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002017 count=3,
2018 bysecond=(6,18),
2019 dtstart=parse("19970902T090000"))),
2020 [datetime(1997, 9, 2, 9, 0, 6),
2021 datetime(1997, 9, 2, 9, 0, 18),
2022 datetime(1997, 9, 2, 9, 1, 6)])
2023
2024 def testMinutelyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00002025 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002026 count=3,
2027 byhour=(6,18),
2028 byminute=(6,18),
2029 dtstart=parse("19970902T090000"))),
2030 [datetime(1997, 9, 2, 18, 6),
2031 datetime(1997, 9, 2, 18, 18),
2032 datetime(1997, 9, 3, 6, 6)])
2033
2034 def testMinutelyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002035 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002036 count=3,
2037 byhour=(6,18),
2038 bysecond=(6,18),
2039 dtstart=parse("19970902T090000"))),
2040 [datetime(1997, 9, 2, 18, 0, 6),
2041 datetime(1997, 9, 2, 18, 0, 18),
2042 datetime(1997, 9, 2, 18, 1, 6)])
2043
2044 def testMinutelyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002045 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002046 count=3,
2047 byminute=(6,18),
2048 bysecond=(6,18),
2049 dtstart=parse("19970902T090000"))),
2050 [datetime(1997, 9, 2, 9, 6, 6),
2051 datetime(1997, 9, 2, 9, 6, 18),
2052 datetime(1997, 9, 2, 9, 18, 6)])
2053
2054 def testMinutelyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002055 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002056 count=3,
2057 byhour=(6,18),
2058 byminute=(6,18),
2059 bysecond=(6,18),
2060 dtstart=parse("19970902T090000"))),
2061 [datetime(1997, 9, 2, 18, 6, 6),
2062 datetime(1997, 9, 2, 18, 6, 18),
2063 datetime(1997, 9, 2, 18, 18, 6)])
2064
2065 def testMinutelyBySetPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00002066 self.assertEqual(list(rrule(MINUTELY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002067 count=3,
2068 bysecond=(15,30,45),
2069 bysetpos=(3,-3),
2070 dtstart=parse("19970902T090000"))),
2071 [datetime(1997, 9, 2, 9, 0, 15),
2072 datetime(1997, 9, 2, 9, 0, 45),
2073 datetime(1997, 9, 2, 9, 1, 15)])
2074
niemeyercb08a352003-10-08 06:02:06 +00002075 def testSecondly(self):
niemeyer4da06a42004-07-16 21:21:22 +00002076 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002077 count=3,
2078 dtstart=parse("19970902T090000"))),
2079 [datetime(1997, 9, 2, 9, 0, 0),
2080 datetime(1997, 9, 2, 9, 0, 1),
2081 datetime(1997, 9, 2, 9, 0, 2)])
2082
niemeyercb08a352003-10-08 06:02:06 +00002083 def testSecondlyInterval(self):
niemeyer4da06a42004-07-16 21:21:22 +00002084 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002085 count=3,
2086 interval=2,
2087 dtstart=parse("19970902T090000"))),
2088 [datetime(1997, 9, 2, 9, 0, 0),
2089 datetime(1997, 9, 2, 9, 0, 2),
2090 datetime(1997, 9, 2, 9, 0, 4)])
2091
2092 def testSecondlyIntervalLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00002093 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002094 count=3,
2095 interval=90061,
2096 dtstart=parse("19970902T090000"))),
2097 [datetime(1997, 9, 2, 9, 0, 0),
2098 datetime(1997, 9, 3, 10, 1, 1),
2099 datetime(1997, 9, 4, 11, 2, 2)])
2100
2101 def testSecondlyByMonth(self):
niemeyer4da06a42004-07-16 21:21:22 +00002102 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002103 count=3,
2104 bymonth=(1,3),
2105 dtstart=parse("19970902T090000"))),
2106 [datetime(1998, 1, 1, 0, 0, 0),
2107 datetime(1998, 1, 1, 0, 0, 1),
2108 datetime(1998, 1, 1, 0, 0, 2)])
2109
2110 def testSecondlyByMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002111 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002112 count=3,
2113 bymonthday=(1,3),
2114 dtstart=parse("19970902T090000"))),
2115 [datetime(1997, 9, 3, 0, 0, 0),
2116 datetime(1997, 9, 3, 0, 0, 1),
2117 datetime(1997, 9, 3, 0, 0, 2)])
2118
2119 def testSecondlyByMonthAndMonthDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002120 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002121 count=3,
2122 bymonth=(1,3),
2123 bymonthday=(5,7),
2124 dtstart=parse("19970902T090000"))),
2125 [datetime(1998, 1, 5, 0, 0, 0),
2126 datetime(1998, 1, 5, 0, 0, 1),
2127 datetime(1998, 1, 5, 0, 0, 2)])
2128
2129 def testSecondlyByWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002130 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002131 count=3,
2132 byweekday=(TU,TH),
2133 dtstart=parse("19970902T090000"))),
2134 [datetime(1997, 9, 2, 9, 0, 0),
2135 datetime(1997, 9, 2, 9, 0, 1),
2136 datetime(1997, 9, 2, 9, 0, 2)])
2137
niemeyer7d8be1a2003-10-09 01:09:42 +00002138 def testSecondlyByNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002139 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002140 count=3,
2141 byweekday=(TU(1),TH(-1)),
2142 dtstart=parse("19970902T090000"))),
2143 [datetime(1997, 9, 2, 9, 0, 0),
2144 datetime(1997, 9, 2, 9, 0, 1),
2145 datetime(1997, 9, 2, 9, 0, 2)])
2146
niemeyercb08a352003-10-08 06:02:06 +00002147 def testSecondlyByMonthAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002148 self.assertEqual(list(rrule(SECONDLY,
niemeyercb08a352003-10-08 06:02:06 +00002149 count=3,
2150 bymonth=(1,3),
2151 byweekday=(TU,TH),
2152 dtstart=parse("19970902T090000"))),
2153 [datetime(1998, 1, 1, 0, 0, 0),
2154 datetime(1998, 1, 1, 0, 0, 1),
2155 datetime(1998, 1, 1, 0, 0, 2)])
2156
niemeyer7d8be1a2003-10-09 01:09:42 +00002157 def testSecondlyByMonthAndNWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002158 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002159 count=3,
2160 bymonth=(1,3),
2161 byweekday=(TU(1),TH(-1)),
2162 dtstart=parse("19970902T090000"))),
2163 [datetime(1998, 1, 1, 0, 0, 0),
2164 datetime(1998, 1, 1, 0, 0, 1),
2165 datetime(1998, 1, 1, 0, 0, 2)])
2166
2167 def testSecondlyByMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002168 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002169 count=3,
2170 bymonthday=(1,3),
2171 byweekday=(TU,TH),
2172 dtstart=parse("19970902T090000"))),
2173 [datetime(1998, 1, 1, 0, 0, 0),
2174 datetime(1998, 1, 1, 0, 0, 1),
2175 datetime(1998, 1, 1, 0, 0, 2)])
2176
2177 def testSecondlyByMonthAndMonthDayAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002178 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002179 count=3,
2180 bymonth=(1,3),
2181 bymonthday=(1,3),
2182 byweekday=(TU,TH),
2183 dtstart=parse("19970902T090000"))),
2184 [datetime(1998, 1, 1, 0, 0, 0),
2185 datetime(1998, 1, 1, 0, 0, 1),
2186 datetime(1998, 1, 1, 0, 0, 2)])
2187
2188 def testSecondlyByYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002189 self.assertEqual(list(rrule(SECONDLY,
niemeyer34788e42005-12-22 19:00:19 +00002190 count=4,
2191 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00002192 dtstart=parse("19970902T090000"))),
niemeyer34788e42005-12-22 19:00:19 +00002193 [datetime(1997, 12, 31, 0, 0, 0),
2194 datetime(1997, 12, 31, 0, 0, 1),
2195 datetime(1997, 12, 31, 0, 0, 2),
2196 datetime(1997, 12, 31, 0, 0, 3)])
2197
2198 def testSecondlyByYearDayNeg(self):
2199 self.assertEqual(list(rrule(SECONDLY,
2200 count=4,
2201 byyearday=(-365,-266,-166,-1),
2202 dtstart=parse("19970902T090000"))),
2203 [datetime(1997, 12, 31, 0, 0, 0),
2204 datetime(1997, 12, 31, 0, 0, 1),
2205 datetime(1997, 12, 31, 0, 0, 2),
2206 datetime(1997, 12, 31, 0, 0, 3)])
niemeyer7d8be1a2003-10-09 01:09:42 +00002207
2208 def testSecondlyByMonthAndYearDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002209 self.assertEqual(list(rrule(SECONDLY,
niemeyer34788e42005-12-22 19:00:19 +00002210 count=4,
niemeyer7d8be1a2003-10-09 01:09:42 +00002211 bymonth=(4,7),
niemeyer34788e42005-12-22 19:00:19 +00002212 byyearday=(1,100,200,365),
niemeyer7d8be1a2003-10-09 01:09:42 +00002213 dtstart=parse("19970902T090000"))),
2214 [datetime(1998, 4, 10, 0, 0, 0),
2215 datetime(1998, 4, 10, 0, 0, 1),
niemeyer34788e42005-12-22 19:00:19 +00002216 datetime(1998, 4, 10, 0, 0, 2),
2217 datetime(1998, 4, 10, 0, 0, 3)])
2218
2219 def testSecondlyByMonthAndYearDayNeg(self):
2220 self.assertEqual(list(rrule(SECONDLY,
2221 count=4,
2222 bymonth=(4,7),
2223 byyearday=(-365,-266,-166,-1),
2224 dtstart=parse("19970902T090000"))),
2225 [datetime(1998, 4, 10, 0, 0, 0),
2226 datetime(1998, 4, 10, 0, 0, 1),
2227 datetime(1998, 4, 10, 0, 0, 2),
2228 datetime(1998, 4, 10, 0, 0, 3)])
niemeyer7d8be1a2003-10-09 01:09:42 +00002229
2230 def testSecondlyByWeekNo(self):
niemeyer4da06a42004-07-16 21:21:22 +00002231 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002232 count=3,
2233 byweekno=20,
2234 dtstart=parse("19970902T090000"))),
2235 [datetime(1998, 5, 11, 0, 0, 0),
2236 datetime(1998, 5, 11, 0, 0, 1),
2237 datetime(1998, 5, 11, 0, 0, 2)])
2238
2239 def testSecondlyByWeekNoAndWeekDay(self):
niemeyer4da06a42004-07-16 21:21:22 +00002240 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002241 count=3,
2242 byweekno=1,
2243 byweekday=MO,
2244 dtstart=parse("19970902T090000"))),
2245 [datetime(1997, 12, 29, 0, 0, 0),
2246 datetime(1997, 12, 29, 0, 0, 1),
2247 datetime(1997, 12, 29, 0, 0, 2)])
2248
2249 def testSecondlyByWeekNoAndWeekDayLarge(self):
niemeyer4da06a42004-07-16 21:21:22 +00002250 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002251 count=3,
2252 byweekno=52,
2253 byweekday=SU,
2254 dtstart=parse("19970902T090000"))),
2255 [datetime(1997, 12, 28, 0, 0, 0),
2256 datetime(1997, 12, 28, 0, 0, 1),
2257 datetime(1997, 12, 28, 0, 0, 2)])
2258
2259 def testSecondlyByWeekNoAndWeekDayLast(self):
niemeyer4da06a42004-07-16 21:21:22 +00002260 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002261 count=3,
2262 byweekno=-1,
2263 byweekday=SU,
2264 dtstart=parse("19970902T090000"))),
2265 [datetime(1997, 12, 28, 0, 0, 0),
2266 datetime(1997, 12, 28, 0, 0, 1),
2267 datetime(1997, 12, 28, 0, 0, 2)])
2268
2269 def testSecondlyByWeekNoAndWeekDay53(self):
niemeyer4da06a42004-07-16 21:21:22 +00002270 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002271 count=3,
2272 byweekno=53,
2273 byweekday=MO,
2274 dtstart=parse("19970902T090000"))),
2275 [datetime(1998, 12, 28, 0, 0, 0),
2276 datetime(1998, 12, 28, 0, 0, 1),
2277 datetime(1998, 12, 28, 0, 0, 2)])
2278
2279 def testSecondlyByEaster(self):
niemeyer4da06a42004-07-16 21:21:22 +00002280 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002281 count=3,
2282 byeaster=0,
2283 dtstart=parse("19970902T090000"))),
2284 [datetime(1998, 4, 12, 0, 0, 0),
2285 datetime(1998, 4, 12, 0, 0, 1),
2286 datetime(1998, 4, 12, 0, 0, 2)])
2287
2288 def testSecondlyByEasterPos(self):
niemeyer4da06a42004-07-16 21:21:22 +00002289 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002290 count=3,
2291 byeaster=1,
2292 dtstart=parse("19970902T090000"))),
2293 [datetime(1998, 4, 13, 0, 0, 0),
2294 datetime(1998, 4, 13, 0, 0, 1),
2295 datetime(1998, 4, 13, 0, 0, 2)])
2296
2297 def testSecondlyByEasterNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00002298 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002299 count=3,
2300 byeaster=-1,
2301 dtstart=parse("19970902T090000"))),
2302 [datetime(1998, 4, 11, 0, 0, 0),
2303 datetime(1998, 4, 11, 0, 0, 1),
2304 datetime(1998, 4, 11, 0, 0, 2)])
2305
2306 def testSecondlyByHour(self):
niemeyer4da06a42004-07-16 21:21:22 +00002307 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002308 count=3,
2309 byhour=(6,18),
2310 dtstart=parse("19970902T090000"))),
2311 [datetime(1997, 9, 2, 18, 0, 0),
2312 datetime(1997, 9, 2, 18, 0, 1),
2313 datetime(1997, 9, 2, 18, 0, 2)])
2314
2315 def testSecondlyByMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00002316 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002317 count=3,
2318 byminute=(6,18),
2319 dtstart=parse("19970902T090000"))),
2320 [datetime(1997, 9, 2, 9, 6, 0),
2321 datetime(1997, 9, 2, 9, 6, 1),
2322 datetime(1997, 9, 2, 9, 6, 2)])
2323
2324 def testSecondlyBySecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002325 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002326 count=3,
2327 bysecond=(6,18),
2328 dtstart=parse("19970902T090000"))),
2329 [datetime(1997, 9, 2, 9, 0, 6),
2330 datetime(1997, 9, 2, 9, 0, 18),
2331 datetime(1997, 9, 2, 9, 1, 6)])
2332
2333 def testSecondlyByHourAndMinute(self):
niemeyer4da06a42004-07-16 21:21:22 +00002334 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002335 count=3,
2336 byhour=(6,18),
2337 byminute=(6,18),
2338 dtstart=parse("19970902T090000"))),
2339 [datetime(1997, 9, 2, 18, 6, 0),
2340 datetime(1997, 9, 2, 18, 6, 1),
2341 datetime(1997, 9, 2, 18, 6, 2)])
2342
2343 def testSecondlyByHourAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002344 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002345 count=3,
2346 byhour=(6,18),
2347 bysecond=(6,18),
2348 dtstart=parse("19970902T090000"))),
2349 [datetime(1997, 9, 2, 18, 0, 6),
2350 datetime(1997, 9, 2, 18, 0, 18),
2351 datetime(1997, 9, 2, 18, 1, 6)])
2352
2353 def testSecondlyByMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002354 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002355 count=3,
2356 byminute=(6,18),
2357 bysecond=(6,18),
2358 dtstart=parse("19970902T090000"))),
2359 [datetime(1997, 9, 2, 9, 6, 6),
2360 datetime(1997, 9, 2, 9, 6, 18),
2361 datetime(1997, 9, 2, 9, 18, 6)])
2362
2363 def testSecondlyByHourAndMinuteAndSecond(self):
niemeyer4da06a42004-07-16 21:21:22 +00002364 self.assertEqual(list(rrule(SECONDLY,
niemeyer7d8be1a2003-10-09 01:09:42 +00002365 count=3,
2366 byhour=(6,18),
2367 byminute=(6,18),
2368 bysecond=(6,18),
2369 dtstart=parse("19970902T090000"))),
2370 [datetime(1997, 9, 2, 18, 6, 6),
2371 datetime(1997, 9, 2, 18, 6, 18),
2372 datetime(1997, 9, 2, 18, 18, 6)])
2373
niemeyercb08a352003-10-08 06:02:06 +00002374 def testUntilNotMatching(self):
niemeyer4da06a42004-07-16 21:21:22 +00002375 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002376 count=3,
2377 dtstart=parse("19970902T090000"),
2378 until=parse("19970905T080000"))),
2379 [datetime(1997, 9, 2, 9, 0),
2380 datetime(1997, 9, 3, 9, 0),
2381 datetime(1997, 9, 4, 9, 0)])
2382
2383 def testUntilMatching(self):
niemeyer4da06a42004-07-16 21:21:22 +00002384 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002385 count=3,
2386 dtstart=parse("19970902T090000"),
2387 until=parse("19970904T090000"))),
2388 [datetime(1997, 9, 2, 9, 0),
2389 datetime(1997, 9, 3, 9, 0),
2390 datetime(1997, 9, 4, 9, 0)])
2391
2392 def testUntilSingle(self):
niemeyer4da06a42004-07-16 21:21:22 +00002393 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002394 count=3,
2395 dtstart=parse("19970902T090000"),
2396 until=parse("19970902T090000"))),
2397 [datetime(1997, 9, 2, 9, 0)])
2398
2399 def testUntilEmpty(self):
niemeyer4da06a42004-07-16 21:21:22 +00002400 self.assertEqual(list(rrule(DAILY,
niemeyercb08a352003-10-08 06:02:06 +00002401 count=3,
2402 dtstart=parse("19970902T090000"),
2403 until=parse("19970901T090000"))),
2404 [])
2405
niemeyer8d468492003-10-09 16:49:35 +00002406 def testUntilWithDate(self):
niemeyer4da06a42004-07-16 21:21:22 +00002407 self.assertEqual(list(rrule(DAILY,
niemeyer8d468492003-10-09 16:49:35 +00002408 count=3,
2409 dtstart=parse("19970902T090000"),
2410 until=date(1997, 9, 5))),
2411 [datetime(1997, 9, 2, 9, 0),
2412 datetime(1997, 9, 3, 9, 0),
2413 datetime(1997, 9, 4, 9, 0)])
2414
niemeyercee1a1b2003-10-09 01:39:15 +00002415 def testWkStIntervalMO(self):
niemeyer4da06a42004-07-16 21:21:22 +00002416 self.assertEqual(list(rrule(WEEKLY,
niemeyercee1a1b2003-10-09 01:39:15 +00002417 count=3,
2418 interval=2,
2419 byweekday=(TU,SU),
2420 wkst=MO,
2421 dtstart=parse("19970902T090000"))),
2422 [datetime(1997, 9, 2, 9, 0),
2423 datetime(1997, 9, 7, 9, 0),
2424 datetime(1997, 9, 16, 9, 0)])
2425
2426 def testWkStIntervalSU(self):
niemeyer4da06a42004-07-16 21:21:22 +00002427 self.assertEqual(list(rrule(WEEKLY,
niemeyercee1a1b2003-10-09 01:39:15 +00002428 count=3,
2429 interval=2,
2430 byweekday=(TU,SU),
2431 wkst=SU,
2432 dtstart=parse("19970902T090000"))),
2433 [datetime(1997, 9, 2, 9, 0),
2434 datetime(1997, 9, 14, 9, 0),
2435 datetime(1997, 9, 16, 9, 0)])
2436
niemeyer46c89302003-10-09 16:23:36 +00002437 def testDTStartIsDate(self):
niemeyer4da06a42004-07-16 21:21:22 +00002438 self.assertEqual(list(rrule(DAILY,
niemeyer46c89302003-10-09 16:23:36 +00002439 count=3,
2440 dtstart=date(1997, 9, 2))),
2441 [datetime(1997, 9, 2, 0, 0),
2442 datetime(1997, 9, 3, 0, 0),
2443 datetime(1997, 9, 4, 0, 0)])
2444
2445 def testDTStartWithMicroseconds(self):
niemeyer4da06a42004-07-16 21:21:22 +00002446 self.assertEqual(list(rrule(DAILY,
niemeyer46c89302003-10-09 16:23:36 +00002447 count=3,
2448 dtstart=parse("19970902T090000.5"))),
2449 [datetime(1997, 9, 2, 9, 0),
2450 datetime(1997, 9, 3, 9, 0),
2451 datetime(1997, 9, 4, 9, 0)])
2452
niemeyer7ac367e2003-10-10 19:16:28 +00002453 def testMaxYear(self):
niemeyer4da06a42004-07-16 21:21:22 +00002454 self.assertEqual(list(rrule(YEARLY,
niemeyer7ac367e2003-10-10 19:16:28 +00002455 count=3,
2456 bymonth=2,
2457 bymonthday=31,
2458 dtstart=parse("99970902T090000"))),
2459 [])
2460
2461 def testGetItem(self):
niemeyer4da06a42004-07-16 21:21:22 +00002462 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002463 count=3,
2464 dtstart=parse("19970902T090000"))[0],
2465 datetime(1997, 9, 2, 9, 0))
2466
2467 def testGetItemNeg(self):
niemeyer4da06a42004-07-16 21:21:22 +00002468 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002469 count=3,
2470 dtstart=parse("19970902T090000"))[-1],
2471 datetime(1997, 9, 4, 9, 0))
2472
2473 def testGetItemSlice(self):
niemeyer4da06a42004-07-16 21:21:22 +00002474 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002475 #count=3,
2476 dtstart=parse("19970902T090000"))[1:2],
2477 [datetime(1997, 9, 3, 9, 0)])
2478
2479 def testGetItemSliceEmpty(self):
niemeyer4da06a42004-07-16 21:21:22 +00002480 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002481 count=3,
2482 dtstart=parse("19970902T090000"))[:],
2483 [datetime(1997, 9, 2, 9, 0),
2484 datetime(1997, 9, 3, 9, 0),
2485 datetime(1997, 9, 4, 9, 0)])
2486
2487 def testGetItemSliceStep(self):
niemeyer4da06a42004-07-16 21:21:22 +00002488 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002489 count=3,
2490 dtstart=parse("19970902T090000"))[::-2],
2491 [datetime(1997, 9, 4, 9, 0),
2492 datetime(1997, 9, 2, 9, 0)])
2493
2494 def testCount(self):
niemeyer4da06a42004-07-16 21:21:22 +00002495 self.assertEqual(rrule(DAILY,
niemeyer7ac367e2003-10-10 19:16:28 +00002496 count=3,
2497 dtstart=parse("19970902T090000")).count(),
2498 3)
2499
niemeyer61faaf32003-10-10 19:31:00 +00002500 def testContains(self):
niemeyer4da06a42004-07-16 21:21:22 +00002501 rr = rrule(DAILY, count=3, dtstart=parse("19970902T090000"))
niemeyer61faaf32003-10-10 19:31:00 +00002502 self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True)
2503
2504 def testContainsNot(self):
niemeyer4da06a42004-07-16 21:21:22 +00002505 rr = rrule(DAILY, count=3, dtstart=parse("19970902T090000"))
niemeyer61faaf32003-10-10 19:31:00 +00002506 self.assertEqual(datetime(1997, 9, 3, 9, 0) not in rr, False)
2507
2508 def testBefore(self):
niemeyer4da06a42004-07-16 21:21:22 +00002509 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002510 #count=5,
2511 dtstart=parse("19970902T090000"))
2512 .before(parse("19970905T090000")),
2513 datetime(1997, 9, 4, 9, 0))
2514
2515 def testBeforeInc(self):
niemeyer4da06a42004-07-16 21:21:22 +00002516 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002517 #count=5,
2518 dtstart=parse("19970902T090000"))
2519 .before(parse("19970905T090000"), inc=True),
2520 datetime(1997, 9, 5, 9, 0))
2521
2522 def testAfter(self):
niemeyer4da06a42004-07-16 21:21:22 +00002523 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002524 #count=5,
2525 dtstart=parse("19970902T090000"))
2526 .after(parse("19970904T090000")),
2527 datetime(1997, 9, 5, 9, 0))
2528
2529 def testAfterInc(self):
niemeyer4da06a42004-07-16 21:21:22 +00002530 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002531 #count=5,
2532 dtstart=parse("19970902T090000"))
2533 .after(parse("19970904T090000"), inc=True),
2534 datetime(1997, 9, 4, 9, 0))
2535
2536 def testBetween(self):
niemeyer4da06a42004-07-16 21:21:22 +00002537 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002538 #count=5,
2539 dtstart=parse("19970902T090000"))
2540 .between(parse("19970902T090000"),
2541 parse("19970906T090000")),
2542 [datetime(1997, 9, 3, 9, 0),
2543 datetime(1997, 9, 4, 9, 0),
2544 datetime(1997, 9, 5, 9, 0)])
2545
2546 def testBetweenInc(self):
niemeyer4da06a42004-07-16 21:21:22 +00002547 self.assertEqual(rrule(DAILY,
niemeyer61faaf32003-10-10 19:31:00 +00002548 #count=5,
2549 dtstart=parse("19970902T090000"))
2550 .between(parse("19970902T090000"),
2551 parse("19970906T090000"), inc=True),
2552 [datetime(1997, 9, 2, 9, 0),
2553 datetime(1997, 9, 3, 9, 0),
2554 datetime(1997, 9, 4, 9, 0),
2555 datetime(1997, 9, 5, 9, 0),
2556 datetime(1997, 9, 6, 9, 0)])
2557
niemeyer7ac367e2003-10-10 19:16:28 +00002558 def testCachePre(self):
niemeyer4da06a42004-07-16 21:21:22 +00002559 rr = rrule(DAILY, count=15, cache=True,
niemeyer7ac367e2003-10-10 19:16:28 +00002560 dtstart=parse("19970902T090000"))
2561 self.assertEqual(list(rr),
2562 [datetime(1997, 9, 2, 9, 0),
2563 datetime(1997, 9, 3, 9, 0),
2564 datetime(1997, 9, 4, 9, 0),
2565 datetime(1997, 9, 5, 9, 0),
2566 datetime(1997, 9, 6, 9, 0),
2567 datetime(1997, 9, 7, 9, 0),
2568 datetime(1997, 9, 8, 9, 0),
2569 datetime(1997, 9, 9, 9, 0),
2570 datetime(1997, 9, 10, 9, 0),
2571 datetime(1997, 9, 11, 9, 0),
2572 datetime(1997, 9, 12, 9, 0),
2573 datetime(1997, 9, 13, 9, 0),
2574 datetime(1997, 9, 14, 9, 0),
2575 datetime(1997, 9, 15, 9, 0),
2576 datetime(1997, 9, 16, 9, 0)])
2577
2578 def testCachePost(self):
niemeyer4da06a42004-07-16 21:21:22 +00002579 rr = rrule(DAILY, count=15, cache=True,
niemeyer7ac367e2003-10-10 19:16:28 +00002580 dtstart=parse("19970902T090000"))
2581 for x in rr: pass
2582 self.assertEqual(list(rr),
2583 [datetime(1997, 9, 2, 9, 0),
2584 datetime(1997, 9, 3, 9, 0),
2585 datetime(1997, 9, 4, 9, 0),
2586 datetime(1997, 9, 5, 9, 0),
2587 datetime(1997, 9, 6, 9, 0),
2588 datetime(1997, 9, 7, 9, 0),
2589 datetime(1997, 9, 8, 9, 0),
2590 datetime(1997, 9, 9, 9, 0),
2591 datetime(1997, 9, 10, 9, 0),
2592 datetime(1997, 9, 11, 9, 0),
2593 datetime(1997, 9, 12, 9, 0),
2594 datetime(1997, 9, 13, 9, 0),
2595 datetime(1997, 9, 14, 9, 0),
2596 datetime(1997, 9, 15, 9, 0),
2597 datetime(1997, 9, 16, 9, 0)])
2598
2599 def testCachePostInternal(self):
niemeyer4da06a42004-07-16 21:21:22 +00002600 rr = rrule(DAILY, count=15, cache=True,
niemeyer7ac367e2003-10-10 19:16:28 +00002601 dtstart=parse("19970902T090000"))
2602 for x in rr: pass
2603 self.assertEqual(rr._cache,
2604 [datetime(1997, 9, 2, 9, 0),
2605 datetime(1997, 9, 3, 9, 0),
2606 datetime(1997, 9, 4, 9, 0),
2607 datetime(1997, 9, 5, 9, 0),
2608 datetime(1997, 9, 6, 9, 0),
2609 datetime(1997, 9, 7, 9, 0),
2610 datetime(1997, 9, 8, 9, 0),
2611 datetime(1997, 9, 9, 9, 0),
2612 datetime(1997, 9, 10, 9, 0),
2613 datetime(1997, 9, 11, 9, 0),
2614 datetime(1997, 9, 12, 9, 0),
2615 datetime(1997, 9, 13, 9, 0),
2616 datetime(1997, 9, 14, 9, 0),
2617 datetime(1997, 9, 15, 9, 0),
2618 datetime(1997, 9, 16, 9, 0)])
2619
niemeyer61faaf32003-10-10 19:31:00 +00002620 def testCachePreContains(self):
niemeyer4da06a42004-07-16 21:21:22 +00002621 rr = rrule(DAILY, count=3, cache=True,
niemeyer61faaf32003-10-10 19:31:00 +00002622 dtstart=parse("19970902T090000"))
2623 self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True)
2624
2625 def testCachePostContains(self):
niemeyer4da06a42004-07-16 21:21:22 +00002626 rr = rrule(DAILY, count=3, cache=True,
niemeyer61faaf32003-10-10 19:31:00 +00002627 dtstart=parse("19970902T090000"))
2628 for x in rr: pass
2629 self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True)
2630
niemeyerdcad96c2003-10-09 02:47:09 +00002631 def testSet(self):
2632 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002633 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyerdcad96c2003-10-09 02:47:09 +00002634 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002635 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyerdcad96c2003-10-09 02:47:09 +00002636 dtstart=parse("19970902T090000")))
2637 self.assertEqual(list(set),
2638 [datetime(1997, 9, 2, 9, 0),
2639 datetime(1997, 9, 4, 9, 0),
2640 datetime(1997, 9, 9, 9, 0)])
2641
2642 def testSetDate(self):
2643 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002644 set.rrule(rrule(YEARLY, count=1, byweekday=TU,
niemeyerdcad96c2003-10-09 02:47:09 +00002645 dtstart=parse("19970902T090000")))
2646 set.rdate(datetime(1997, 9, 4, 9))
2647 set.rdate(datetime(1997, 9, 9, 9))
2648 self.assertEqual(list(set),
2649 [datetime(1997, 9, 2, 9, 0),
2650 datetime(1997, 9, 4, 9, 0),
2651 datetime(1997, 9, 9, 9, 0)])
2652
2653 def testSetExRule(self):
2654 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002655 set.rrule(rrule(YEARLY, count=6, byweekday=(TU,TH),
niemeyerdcad96c2003-10-09 02:47:09 +00002656 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002657 set.exrule(rrule(YEARLY, count=3, byweekday=TH,
niemeyerdcad96c2003-10-09 02:47:09 +00002658 dtstart=parse("19970902T090000")))
2659 self.assertEqual(list(set),
2660 [datetime(1997, 9, 2, 9, 0),
2661 datetime(1997, 9, 9, 9, 0),
2662 datetime(1997, 9, 16, 9, 0)])
2663
2664 def testSetExDate(self):
2665 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002666 set.rrule(rrule(YEARLY, count=6, byweekday=(TU,TH),
niemeyerdcad96c2003-10-09 02:47:09 +00002667 dtstart=parse("19970902T090000")))
2668 set.exdate(datetime(1997, 9, 4, 9))
2669 set.exdate(datetime(1997, 9, 11, 9))
2670 set.exdate(datetime(1997, 9, 18, 9))
2671 self.assertEqual(list(set),
2672 [datetime(1997, 9, 2, 9, 0),
2673 datetime(1997, 9, 9, 9, 0),
2674 datetime(1997, 9, 16, 9, 0)])
2675
niemeyer4da06a42004-07-16 21:21:22 +00002676 def testSetExDateRevOrder(self):
2677 set = rruleset()
2678 set.rrule(rrule(MONTHLY, count=5, bymonthday=10,
2679 dtstart=parse("20040101T090000")))
2680 set.exdate(datetime(2004, 4, 10, 9, 0))
2681 set.exdate(datetime(2004, 2, 10, 9, 0))
2682 self.assertEqual(list(set),
2683 [datetime(2004, 1, 10, 9, 0),
2684 datetime(2004, 3, 10, 9, 0),
2685 datetime(2004, 5, 10, 9, 0)])
2686
niemeyerdcad96c2003-10-09 02:47:09 +00002687 def testSetDateAndExDate(self):
2688 set = rruleset()
2689 set.rdate(datetime(1997, 9, 2, 9))
2690 set.rdate(datetime(1997, 9, 4, 9))
2691 set.rdate(datetime(1997, 9, 9, 9))
2692 set.rdate(datetime(1997, 9, 11, 9))
2693 set.rdate(datetime(1997, 9, 16, 9))
2694 set.rdate(datetime(1997, 9, 18, 9))
2695 set.exdate(datetime(1997, 9, 4, 9))
2696 set.exdate(datetime(1997, 9, 11, 9))
2697 set.exdate(datetime(1997, 9, 18, 9))
2698 self.assertEqual(list(set),
2699 [datetime(1997, 9, 2, 9, 0),
2700 datetime(1997, 9, 9, 9, 0),
2701 datetime(1997, 9, 16, 9, 0)])
2702
2703 def testSetDateAndExRule(self):
2704 set = rruleset()
2705 set.rdate(datetime(1997, 9, 2, 9))
2706 set.rdate(datetime(1997, 9, 4, 9))
2707 set.rdate(datetime(1997, 9, 9, 9))
2708 set.rdate(datetime(1997, 9, 11, 9))
2709 set.rdate(datetime(1997, 9, 16, 9))
2710 set.rdate(datetime(1997, 9, 18, 9))
niemeyer4da06a42004-07-16 21:21:22 +00002711 set.exrule(rrule(YEARLY, count=3, byweekday=TH,
niemeyerdcad96c2003-10-09 02:47:09 +00002712 dtstart=parse("19970902T090000")))
2713 self.assertEqual(list(set),
2714 [datetime(1997, 9, 2, 9, 0),
2715 datetime(1997, 9, 9, 9, 0),
2716 datetime(1997, 9, 16, 9, 0)])
2717
niemeyer7ac367e2003-10-10 19:16:28 +00002718 def testSetCount(self):
2719 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002720 set.rrule(rrule(YEARLY, count=6, byweekday=(TU,TH),
niemeyer7ac367e2003-10-10 19:16:28 +00002721 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002722 set.exrule(rrule(YEARLY, count=3, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002723 dtstart=parse("19970902T090000")))
2724 self.assertEqual(set.count(), 3)
2725
2726 def testSetCachePre(self):
2727 set = rruleset()
niemeyer4da06a42004-07-16 21:21:22 +00002728 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyer7ac367e2003-10-10 19:16:28 +00002729 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002730 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002731 dtstart=parse("19970902T090000")))
2732 self.assertEqual(list(set),
2733 [datetime(1997, 9, 2, 9, 0),
2734 datetime(1997, 9, 4, 9, 0),
2735 datetime(1997, 9, 9, 9, 0)])
2736
2737 def testSetCachePost(self):
2738 set = rruleset(cache=True)
niemeyer4da06a42004-07-16 21:21:22 +00002739 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyer7ac367e2003-10-10 19:16:28 +00002740 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002741 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002742 dtstart=parse("19970902T090000")))
2743 for x in set: pass
2744 self.assertEqual(list(set),
2745 [datetime(1997, 9, 2, 9, 0),
2746 datetime(1997, 9, 4, 9, 0),
2747 datetime(1997, 9, 9, 9, 0)])
2748
2749 def testSetCachePostInternal(self):
2750 set = rruleset(cache=True)
niemeyer4da06a42004-07-16 21:21:22 +00002751 set.rrule(rrule(YEARLY, count=2, byweekday=TU,
niemeyer7ac367e2003-10-10 19:16:28 +00002752 dtstart=parse("19970902T090000")))
niemeyer4da06a42004-07-16 21:21:22 +00002753 set.rrule(rrule(YEARLY, count=1, byweekday=TH,
niemeyer7ac367e2003-10-10 19:16:28 +00002754 dtstart=parse("19970902T090000")))
2755 for x in set: pass
2756 self.assertEqual(list(set._cache),
2757 [datetime(1997, 9, 2, 9, 0),
2758 datetime(1997, 9, 4, 9, 0),
2759 datetime(1997, 9, 9, 9, 0)])
2760
niemeyerdcad96c2003-10-09 02:47:09 +00002761 def testStr(self):
2762 self.assertEqual(list(rrulestr(
2763 "DTSTART:19970902T090000\n"
2764 "RRULE:FREQ=YEARLY;COUNT=3\n"
2765 )),
2766 [datetime(1997, 9, 2, 9, 0),
2767 datetime(1998, 9, 2, 9, 0),
2768 datetime(1999, 9, 2, 9, 0)])
2769
2770 def testStrType(self):
2771 self.assertEqual(isinstance(rrulestr(
2772 "DTSTART:19970902T090000\n"
2773 "RRULE:FREQ=YEARLY;COUNT=3\n"
2774 ), rrule), True)
2775
2776 def testStrForceSetType(self):
2777 self.assertEqual(isinstance(rrulestr(
2778 "DTSTART:19970902T090000\n"
2779 "RRULE:FREQ=YEARLY;COUNT=3\n"
2780 , forceset=True), rruleset), True)
2781
2782 def testStrSetType(self):
2783 self.assertEqual(isinstance(rrulestr(
2784 "DTSTART:19970902T090000\n"
2785 "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n"
2786 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n"
2787 ), rruleset), True)
2788
2789 def testStrCase(self):
2790 self.assertEqual(list(rrulestr(
2791 "dtstart:19970902T090000\n"
2792 "rrule:freq=yearly;count=3\n"
2793 )),
2794 [datetime(1997, 9, 2, 9, 0),
2795 datetime(1998, 9, 2, 9, 0),
2796 datetime(1999, 9, 2, 9, 0)])
2797
2798 def testStrSpaces(self):
2799 self.assertEqual(list(rrulestr(
2800 " DTSTART:19970902T090000 "
2801 " RRULE:FREQ=YEARLY;COUNT=3 "
2802 )),
2803 [datetime(1997, 9, 2, 9, 0),
2804 datetime(1998, 9, 2, 9, 0),
2805 datetime(1999, 9, 2, 9, 0)])
2806
2807 def testStrSpacesAndLines(self):
2808 self.assertEqual(list(rrulestr(
2809 " DTSTART:19970902T090000 \n"
2810 " \n"
2811 " RRULE:FREQ=YEARLY;COUNT=3 \n"
2812 )),
2813 [datetime(1997, 9, 2, 9, 0),
2814 datetime(1998, 9, 2, 9, 0),
2815 datetime(1999, 9, 2, 9, 0)])
2816
2817 def testStrNoDTStart(self):
2818 self.assertEqual(list(rrulestr(
2819 "RRULE:FREQ=YEARLY;COUNT=3\n"
2820 , dtstart=parse("19970902T090000"))),
2821 [datetime(1997, 9, 2, 9, 0),
2822 datetime(1998, 9, 2, 9, 0),
2823 datetime(1999, 9, 2, 9, 0)])
2824
2825 def testStrValueOnly(self):
2826 self.assertEqual(list(rrulestr(
2827 "FREQ=YEARLY;COUNT=3\n"
2828 , dtstart=parse("19970902T090000"))),
2829 [datetime(1997, 9, 2, 9, 0),
2830 datetime(1998, 9, 2, 9, 0),
2831 datetime(1999, 9, 2, 9, 0)])
2832
2833 def testStrUnfold(self):
2834 self.assertEqual(list(rrulestr(
2835 "FREQ=YEA\n RLY;COUNT=3\n", unfold=True,
2836 dtstart=parse("19970902T090000"))),
2837 [datetime(1997, 9, 2, 9, 0),
2838 datetime(1998, 9, 2, 9, 0),
2839 datetime(1999, 9, 2, 9, 0)])
2840
2841 def testStrSet(self):
2842 self.assertEqual(list(rrulestr(
2843 "DTSTART:19970902T090000\n"
2844 "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n"
2845 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n"
2846 )),
2847 [datetime(1997, 9, 2, 9, 0),
2848 datetime(1997, 9, 4, 9, 0),
2849 datetime(1997, 9, 9, 9, 0)])
2850
2851 def testStrSetDate(self):
2852 self.assertEqual(list(rrulestr(
2853 "DTSTART:19970902T090000\n"
2854 "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TU\n"
2855 "RDATE:19970904T090000\n"
2856 "RDATE:19970909T090000\n"
2857 )),
2858 [datetime(1997, 9, 2, 9, 0),
2859 datetime(1997, 9, 4, 9, 0),
2860 datetime(1997, 9, 9, 9, 0)])
2861
2862 def testStrSetExRule(self):
2863 self.assertEqual(list(rrulestr(
2864 "DTSTART:19970902T090000\n"
2865 "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n"
2866 "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n"
2867 )),
2868 [datetime(1997, 9, 2, 9, 0),
2869 datetime(1997, 9, 9, 9, 0),
2870 datetime(1997, 9, 16, 9, 0)])
2871
2872 def testStrSetExDate(self):
2873 self.assertEqual(list(rrulestr(
2874 "DTSTART:19970902T090000\n"
2875 "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n"
2876 "EXDATE:19970904T090000\n"
2877 "EXDATE:19970911T090000\n"
2878 "EXDATE:19970918T090000\n"
2879 )),
2880 [datetime(1997, 9, 2, 9, 0),
2881 datetime(1997, 9, 9, 9, 0),
2882 datetime(1997, 9, 16, 9, 0)])
2883
2884 def testStrSetDateAndExDate(self):
2885 self.assertEqual(list(rrulestr(
2886 "DTSTART:19970902T090000\n"
2887 "RDATE:19970902T090000\n"
2888 "RDATE:19970904T090000\n"
2889 "RDATE:19970909T090000\n"
2890 "RDATE:19970911T090000\n"
2891 "RDATE:19970916T090000\n"
2892 "RDATE:19970918T090000\n"
2893 "EXDATE:19970904T090000\n"
2894 "EXDATE:19970911T090000\n"
2895 "EXDATE:19970918T090000\n"
2896 )),
2897 [datetime(1997, 9, 2, 9, 0),
2898 datetime(1997, 9, 9, 9, 0),
2899 datetime(1997, 9, 16, 9, 0)])
2900
2901 def testStrSetDateAndExRule(self):
2902 self.assertEqual(list(rrulestr(
2903 "DTSTART:19970902T090000\n"
2904 "RDATE:19970902T090000\n"
2905 "RDATE:19970904T090000\n"
2906 "RDATE:19970909T090000\n"
2907 "RDATE:19970911T090000\n"
2908 "RDATE:19970916T090000\n"
2909 "RDATE:19970918T090000\n"
2910 "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n"
2911 )),
2912 [datetime(1997, 9, 2, 9, 0),
2913 datetime(1997, 9, 9, 9, 0),
2914 datetime(1997, 9, 16, 9, 0)])
2915
2916 def testStrKeywords(self):
2917 self.assertEqual(list(rrulestr(
2918 "DTSTART:19970902T090000\n"
2919 "RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=3;"
2920 "BYMONTH=3;BYWEEKDAY=TH;BYMONTHDAY=3;"
2921 "BYHOUR=3;BYMINUTE=3;BYSECOND=3\n"
2922 )),
2923 [datetime(2033, 3, 3, 3, 3, 3),
2924 datetime(2039, 3, 3, 3, 3, 3),
2925 datetime(2072, 3, 3, 3, 3, 3)])
2926
2927 def testStrNWeekDay(self):
2928 self.assertEqual(list(rrulestr(
2929 "DTSTART:19970902T090000\n"
2930 "RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n"
2931 )),
2932 [datetime(1997, 12, 25, 9, 0),
2933 datetime(1998, 1, 6, 9, 0),
2934 datetime(1998, 12, 31, 9, 0)])
2935
niemeyerf79a1322006-10-25 17:15:13 +00002936 def testBadBySetPos(self):
2937 self.assertRaises(ValueError,
2938 rrule, MONTHLY,
2939 count=1,
2940 bysetpos=0,
2941 dtstart=parse("19970902T090000"))
2942
2943 def testBadBySetPosMany(self):
2944 self.assertRaises(ValueError,
2945 rrule, MONTHLY,
2946 count=1,
2947 bysetpos=(-1,0,1),
2948 dtstart=parse("19970902T090000"))
niemeyerdcad96c2003-10-09 02:47:09 +00002949
2950
niemeyer68ae2752003-09-28 01:20:02 +00002951class ParserTest(unittest.TestCase):
2952 def setUp(self):
niemeyer97e19252003-10-06 05:52:04 +00002953 self.tzinfos = {"BRST": -10800}
niemeyer68ae2752003-09-28 01:20:02 +00002954 self.brsttz = tzoffset("BRST", -10800)
2955 self.default = datetime(2003, 9, 25)
2956
2957 def testDateCommandFormat(self):
2958 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
niemeyer97e19252003-10-06 05:52:04 +00002959 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002960 datetime(2003, 9, 25, 10, 36, 28,
2961 tzinfo=self.brsttz))
2962
niemeyer672e2eb2005-02-23 00:04:12 +00002963 def testDateCommandFormatUnicode(self):
2964 self.assertEqual(parse(u"Thu Sep 25 10:36:28 BRST 2003",
2965 tzinfos=self.tzinfos),
2966 datetime(2003, 9, 25, 10, 36, 28,
2967 tzinfo=self.brsttz))
2968
2969
niemeyer68ae2752003-09-28 01:20:02 +00002970 def testDateCommandFormatReversed(self):
2971 self.assertEqual(parse("2003 10:36:28 BRST 25 Sep Thu",
niemeyer97e19252003-10-06 05:52:04 +00002972 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002973 datetime(2003, 9, 25, 10, 36, 28,
2974 tzinfo=self.brsttz))
2975
2976 def testDateCommandFormatIgnoreTz(self):
2977 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
2978 ignoretz=True),
2979 datetime(2003, 9, 25, 10, 36, 28))
2980
2981 def testDateCommandFormatStrip1(self):
2982 self.assertEqual(parse("Thu Sep 25 10:36:28 2003"),
2983 datetime(2003, 9, 25, 10, 36, 28))
2984
2985 def testDateCommandFormatStrip2(self):
2986 self.assertEqual(parse("Thu Sep 25 10:36:28", default=self.default),
2987 datetime(2003, 9, 25, 10, 36, 28))
2988
2989 def testDateCommandFormatStrip3(self):
2990 self.assertEqual(parse("Thu Sep 10:36:28", default=self.default),
2991 datetime(2003, 9, 25, 10, 36, 28))
2992
2993 def testDateCommandFormatStrip4(self):
2994 self.assertEqual(parse("Thu 10:36:28", default=self.default),
2995 datetime(2003, 9, 25, 10, 36, 28))
2996
2997 def testDateCommandFormatStrip5(self):
2998 self.assertEqual(parse("Sep 10:36:28", default=self.default),
2999 datetime(2003, 9, 25, 10, 36, 28))
3000
3001 def testDateCommandFormatStrip6(self):
3002 self.assertEqual(parse("10:36:28", default=self.default),
3003 datetime(2003, 9, 25, 10, 36, 28))
3004
3005 def testDateCommandFormatStrip7(self):
3006 self.assertEqual(parse("10:36", default=self.default),
3007 datetime(2003, 9, 25, 10, 36))
3008
3009 def testDateCommandFormatStrip8(self):
3010 self.assertEqual(parse("Thu Sep 25 2003"),
3011 datetime(2003, 9, 25))
3012
3013 def testDateCommandFormatStrip9(self):
3014 self.assertEqual(parse("Sep 25 2003"),
3015 datetime(2003, 9, 25))
3016
3017 def testDateCommandFormatStrip9(self):
3018 self.assertEqual(parse("Sep 2003", default=self.default),
3019 datetime(2003, 9, 25))
3020
3021 def testDateCommandFormatStrip10(self):
3022 self.assertEqual(parse("Sep", default=self.default),
3023 datetime(2003, 9, 25))
3024
3025 def testDateCommandFormatStrip11(self):
3026 self.assertEqual(parse("2003", default=self.default),
3027 datetime(2003, 9, 25))
3028
3029 def testDateRCommandFormat(self):
3030 self.assertEqual(parse("Thu, 25 Sep 2003 10:49:41 -0300"),
3031 datetime(2003, 9, 25, 10, 49, 41,
3032 tzinfo=self.brsttz))
3033
3034 def testISOFormat(self):
3035 self.assertEqual(parse("2003-09-25T10:49:41.5-03:00"),
3036 datetime(2003, 9, 25, 10, 49, 41, 500000,
3037 tzinfo=self.brsttz))
3038
3039 def testISOFormatStrip1(self):
3040 self.assertEqual(parse("2003-09-25T10:49:41-03:00"),
3041 datetime(2003, 9, 25, 10, 49, 41,
3042 tzinfo=self.brsttz))
3043
3044 def testISOFormatStrip2(self):
3045 self.assertEqual(parse("2003-09-25T10:49:41"),
3046 datetime(2003, 9, 25, 10, 49, 41))
3047
3048 def testISOFormatStrip3(self):
3049 self.assertEqual(parse("2003-09-25T10:49"),
3050 datetime(2003, 9, 25, 10, 49))
3051
3052 def testISOFormatStrip4(self):
3053 self.assertEqual(parse("2003-09-25T10"),
3054 datetime(2003, 9, 25, 10))
3055
3056 def testISOFormatStrip5(self):
3057 self.assertEqual(parse("2003-09-25"),
3058 datetime(2003, 9, 25))
3059
3060 def testISOStrippedFormat(self):
3061 self.assertEqual(parse("20030925T104941.5-0300"),
3062 datetime(2003, 9, 25, 10, 49, 41, 500000,
3063 tzinfo=self.brsttz))
3064
3065 def testISOStrippedFormatStrip1(self):
3066 self.assertEqual(parse("20030925T104941-0300"),
3067 datetime(2003, 9, 25, 10, 49, 41,
3068 tzinfo=self.brsttz))
3069
3070 def testISOStrippedFormatStrip2(self):
3071 self.assertEqual(parse("20030925T104941"),
3072 datetime(2003, 9, 25, 10, 49, 41))
3073
3074 def testISOStrippedFormatStrip3(self):
3075 self.assertEqual(parse("20030925T1049"),
3076 datetime(2003, 9, 25, 10, 49, 0))
3077
3078 def testISOStrippedFormatStrip4(self):
3079 self.assertEqual(parse("20030925T10"),
3080 datetime(2003, 9, 25, 10))
3081
3082 def testISOStrippedFormatStrip5(self):
3083 self.assertEqual(parse("20030925"),
3084 datetime(2003, 9, 25))
3085
niemeyer6c067e02003-10-09 02:54:58 +00003086 def testNoSeparator1(self):
3087 self.assertEqual(parse("199709020908"),
3088 datetime(1997, 9, 2, 9, 8))
3089
3090 def testNoSeparator2(self):
3091 self.assertEqual(parse("19970902090807"),
3092 datetime(1997, 9, 2, 9, 8, 7))
3093
niemeyer68ae2752003-09-28 01:20:02 +00003094 def testDateWithDash1(self):
3095 self.assertEqual(parse("2003-09-25"),
3096 datetime(2003, 9, 25))
3097
3098 def testDateWithDash2(self):
3099 self.assertEqual(parse("2003-Sep-25"),
3100 datetime(2003, 9, 25))
3101
3102 def testDateWithDash3(self):
3103 self.assertEqual(parse("25-Sep-2003"),
3104 datetime(2003, 9, 25))
3105
3106 def testDateWithDash4(self):
3107 self.assertEqual(parse("25-Sep-2003"),
3108 datetime(2003, 9, 25))
3109
3110 def testDateWithDash5(self):
3111 self.assertEqual(parse("Sep-25-2003"),
3112 datetime(2003, 9, 25))
3113
3114 def testDateWithDash6(self):
3115 self.assertEqual(parse("09-25-2003"),
3116 datetime(2003, 9, 25))
3117
3118 def testDateWithDash7(self):
3119 self.assertEqual(parse("25-09-2003"),
3120 datetime(2003, 9, 25))
3121
3122 def testDateWithDash8(self):
3123 self.assertEqual(parse("10-09-2003", dayfirst=True),
3124 datetime(2003, 9, 10))
3125
3126 def testDateWithDash9(self):
3127 self.assertEqual(parse("10-09-2003"),
3128 datetime(2003, 10, 9))
3129
3130 def testDateWithDash10(self):
3131 self.assertEqual(parse("10-09-03"),
3132 datetime(2003, 10, 9))
3133
3134 def testDateWithDash11(self):
3135 self.assertEqual(parse("10-09-03", yearfirst=True),
3136 datetime(2010, 9, 3))
3137
3138 def testDateWithDot1(self):
3139 self.assertEqual(parse("2003.09.25"),
3140 datetime(2003, 9, 25))
3141
3142 def testDateWithDot2(self):
3143 self.assertEqual(parse("2003.Sep.25"),
3144 datetime(2003, 9, 25))
3145
3146 def testDateWithDot3(self):
3147 self.assertEqual(parse("25.Sep.2003"),
3148 datetime(2003, 9, 25))
3149
3150 def testDateWithDot4(self):
3151 self.assertEqual(parse("25.Sep.2003"),
3152 datetime(2003, 9, 25))
3153
3154 def testDateWithDot5(self):
3155 self.assertEqual(parse("Sep.25.2003"),
3156 datetime(2003, 9, 25))
3157
3158 def testDateWithDot6(self):
3159 self.assertEqual(parse("09.25.2003"),
3160 datetime(2003, 9, 25))
3161
3162 def testDateWithDot7(self):
3163 self.assertEqual(parse("25.09.2003"),
3164 datetime(2003, 9, 25))
3165
3166 def testDateWithDot8(self):
3167 self.assertEqual(parse("10.09.2003", dayfirst=True),
3168 datetime(2003, 9, 10))
3169
3170 def testDateWithDot9(self):
3171 self.assertEqual(parse("10.09.2003"),
3172 datetime(2003, 10, 9))
3173
3174 def testDateWithDot10(self):
3175 self.assertEqual(parse("10.09.03"),
3176 datetime(2003, 10, 9))
3177
3178 def testDateWithDot11(self):
3179 self.assertEqual(parse("10.09.03", yearfirst=True),
3180 datetime(2010, 9, 3))
3181
3182 def testDateWithSlash1(self):
3183 self.assertEqual(parse("2003/09/25"),
3184 datetime(2003, 9, 25))
3185
3186 def testDateWithSlash2(self):
3187 self.assertEqual(parse("2003/Sep/25"),
3188 datetime(2003, 9, 25))
3189
3190 def testDateWithSlash3(self):
3191 self.assertEqual(parse("25/Sep/2003"),
3192 datetime(2003, 9, 25))
3193
3194 def testDateWithSlash4(self):
3195 self.assertEqual(parse("25/Sep/2003"),
3196 datetime(2003, 9, 25))
3197
3198 def testDateWithSlash5(self):
3199 self.assertEqual(parse("Sep/25/2003"),
3200 datetime(2003, 9, 25))
3201
3202 def testDateWithSlash6(self):
3203 self.assertEqual(parse("09/25/2003"),
3204 datetime(2003, 9, 25))
3205
3206 def testDateWithSlash7(self):
3207 self.assertEqual(parse("25/09/2003"),
3208 datetime(2003, 9, 25))
3209
3210 def testDateWithSlash8(self):
3211 self.assertEqual(parse("10/09/2003", dayfirst=True),
3212 datetime(2003, 9, 10))
3213
3214 def testDateWithSlash9(self):
3215 self.assertEqual(parse("10/09/2003"),
3216 datetime(2003, 10, 9))
3217
3218 def testDateWithSlash10(self):
3219 self.assertEqual(parse("10/09/03"),
3220 datetime(2003, 10, 9))
3221
3222 def testDateWithSlash11(self):
3223 self.assertEqual(parse("10/09/03", yearfirst=True),
3224 datetime(2010, 9, 3))
3225
3226 def testDateWithSpace12(self):
3227 self.assertEqual(parse("25 09 03"),
3228 datetime(2003, 9, 25))
3229
3230 def testDateWithSpace13(self):
3231 self.assertEqual(parse("25 09 03"),
3232 datetime(2003, 9, 25))
3233
3234 def testDateWithSpace1(self):
3235 self.assertEqual(parse("2003 09 25"),
3236 datetime(2003, 9, 25))
3237
3238 def testDateWithSpace2(self):
3239 self.assertEqual(parse("2003 Sep 25"),
3240 datetime(2003, 9, 25))
3241
3242 def testDateWithSpace3(self):
3243 self.assertEqual(parse("25 Sep 2003"),
3244 datetime(2003, 9, 25))
3245
3246 def testDateWithSpace4(self):
3247 self.assertEqual(parse("25 Sep 2003"),
3248 datetime(2003, 9, 25))
3249
3250 def testDateWithSpace5(self):
3251 self.assertEqual(parse("Sep 25 2003"),
3252 datetime(2003, 9, 25))
3253
3254 def testDateWithSpace6(self):
3255 self.assertEqual(parse("09 25 2003"),
3256 datetime(2003, 9, 25))
3257
3258 def testDateWithSpace7(self):
3259 self.assertEqual(parse("25 09 2003"),
3260 datetime(2003, 9, 25))
3261
3262 def testDateWithSpace8(self):
3263 self.assertEqual(parse("10 09 2003", dayfirst=True),
3264 datetime(2003, 9, 10))
3265
3266 def testDateWithSpace9(self):
3267 self.assertEqual(parse("10 09 2003"),
3268 datetime(2003, 10, 9))
3269
3270 def testDateWithSpace10(self):
3271 self.assertEqual(parse("10 09 03"),
3272 datetime(2003, 10, 9))
3273
3274 def testDateWithSpace11(self):
3275 self.assertEqual(parse("10 09 03", yearfirst=True),
3276 datetime(2010, 9, 3))
3277
3278 def testDateWithSpace12(self):
3279 self.assertEqual(parse("25 09 03"),
3280 datetime(2003, 9, 25))
3281
3282 def testDateWithSpace13(self):
3283 self.assertEqual(parse("25 09 03"),
3284 datetime(2003, 9, 25))
3285
3286 def testStrangelyOrderedDate1(self):
3287 self.assertEqual(parse("03 25 Sep"),
3288 datetime(2003, 9, 25))
3289
3290 def testStrangelyOrderedDate2(self):
3291 self.assertEqual(parse("2003 25 Sep"),
3292 datetime(2003, 9, 25))
3293
3294 def testStrangelyOrderedDate3(self):
3295 self.assertEqual(parse("25 03 Sep"),
3296 datetime(2025, 9, 3))
3297
3298 def testHourWithLetters(self):
3299 self.assertEqual(parse("10h36m28.5s", default=self.default),
3300 datetime(2003, 9, 25, 10, 36, 28, 500000))
3301
3302 def testHourWithLettersStrip1(self):
3303 self.assertEqual(parse("10h36m28s", default=self.default),
3304 datetime(2003, 9, 25, 10, 36, 28))
3305
3306 def testHourWithLettersStrip1(self):
3307 self.assertEqual(parse("10h36m", default=self.default),
3308 datetime(2003, 9, 25, 10, 36))
3309
3310 def testHourWithLettersStrip2(self):
3311 self.assertEqual(parse("10h", default=self.default),
3312 datetime(2003, 9, 25, 10))
3313
3314 def testHourAmPm1(self):
3315 self.assertEqual(parse("10h am", default=self.default),
3316 datetime(2003, 9, 25, 10))
3317
3318 def testHourAmPm2(self):
3319 self.assertEqual(parse("10h pm", default=self.default),
3320 datetime(2003, 9, 25, 22))
3321
3322 def testHourAmPm3(self):
3323 self.assertEqual(parse("10am", default=self.default),
3324 datetime(2003, 9, 25, 10))
3325
3326 def testHourAmPm4(self):
3327 self.assertEqual(parse("10pm", default=self.default),
3328 datetime(2003, 9, 25, 22))
3329
3330 def testHourAmPm5(self):
3331 self.assertEqual(parse("10:00 am", default=self.default),
3332 datetime(2003, 9, 25, 10))
3333
3334 def testHourAmPm6(self):
3335 self.assertEqual(parse("10:00 pm", default=self.default),
3336 datetime(2003, 9, 25, 22))
3337
3338 def testHourAmPm7(self):
3339 self.assertEqual(parse("10:00am", default=self.default),
3340 datetime(2003, 9, 25, 10))
3341
3342 def testHourAmPm8(self):
3343 self.assertEqual(parse("10:00pm", default=self.default),
3344 datetime(2003, 9, 25, 22))
3345
3346 def testHourAmPm9(self):
3347 self.assertEqual(parse("10:00a.m", default=self.default),
3348 datetime(2003, 9, 25, 10))
3349
3350 def testHourAmPm10(self):
3351 self.assertEqual(parse("10:00p.m", default=self.default),
3352 datetime(2003, 9, 25, 22))
3353
3354 def testHourAmPm11(self):
3355 self.assertEqual(parse("10:00a.m.", default=self.default),
3356 datetime(2003, 9, 25, 10))
3357
3358 def testHourAmPm12(self):
3359 self.assertEqual(parse("10:00p.m.", default=self.default),
3360 datetime(2003, 9, 25, 22))
3361
3362 def testPertain(self):
3363 self.assertEqual(parse("Sep 03", default=self.default),
3364 datetime(2003, 9, 3))
3365 self.assertEqual(parse("Sep of 03", default=self.default),
3366 datetime(2003, 9, 25))
3367
3368 def testWeekdayAlone(self):
3369 self.assertEqual(parse("Wed", default=self.default),
3370 datetime(2003, 10, 1))
3371
3372 def testLongWeekday(self):
3373 self.assertEqual(parse("Wednesday", default=self.default),
3374 datetime(2003, 10, 1))
3375
3376 def testLongMonth(self):
3377 self.assertEqual(parse("October", default=self.default),
3378 datetime(2003, 10, 25))
niemeyer075fba22004-07-16 20:50:19 +00003379
3380 def testZeroYear(self):
3381 self.assertEqual(parse("31-Dec-00", default=self.default),
3382 datetime(2000, 12, 31))
niemeyer68ae2752003-09-28 01:20:02 +00003383
3384 def testFuzzy(self):
3385 s = "Today is 25 of September of 2003, exactly " \
3386 "at 10:49:41 with timezone -03:00."
3387 self.assertEqual(parse(s, fuzzy=True),
3388 datetime(2003, 9, 25, 10, 49, 41,
3389 tzinfo=self.brsttz))
3390
3391 def testExtraSpace(self):
3392 self.assertEqual(parse(" July 4 , 1976 12:01:02 am "),
3393 datetime(1976, 7, 4, 0, 1, 2))
3394
3395 def testRandomFormat1(self):
3396 self.assertEqual(parse("Wed, July 10, '96"),
3397 datetime(1996, 7, 10, 0, 0))
3398
3399 def testRandomFormat2(self):
3400 self.assertEqual(parse("1996.07.10 AD at 15:08:56 PDT",
3401 ignoretz=True),
3402 datetime(1996, 7, 10, 15, 8, 56))
3403
3404 def testRandomFormat3(self):
3405 self.assertEqual(parse("1996.July.10 AD 12:08 PM"),
3406 datetime(1996, 7, 10, 12, 8))
3407
3408 def testRandomFormat4(self):
3409 self.assertEqual(parse("Tuesday, April 12, 1952 AD 3:30:42pm PST",
3410 ignoretz=True),
3411 datetime(1952, 4, 12, 15, 30, 42))
3412
3413 def testRandomFormat5(self):
3414 self.assertEqual(parse("November 5, 1994, 8:15:30 am EST",
3415 ignoretz=True),
3416 datetime(1994, 11, 5, 8, 15, 30))
3417
3418 def testRandomFormat6(self):
3419 self.assertEqual(parse("1994-11-05T08:15:30-05:00",
3420 ignoretz=True),
3421 datetime(1994, 11, 5, 8, 15, 30))
3422
3423 def testRandomFormat7(self):
3424 self.assertEqual(parse("1994-11-05T08:15:30Z",
3425 ignoretz=True),
3426 datetime(1994, 11, 5, 8, 15, 30))
3427
3428 def testRandomFormat8(self):
3429 self.assertEqual(parse("July 4, 1976"), datetime(1976, 7, 4))
3430
3431 def testRandomFormat9(self):
3432 self.assertEqual(parse("7 4 1976"), datetime(1976, 7, 4))
3433
3434 def testRandomFormat10(self):
3435 self.assertEqual(parse("4 jul 1976"), datetime(1976, 7, 4))
3436
3437 def testRandomFormat11(self):
3438 self.assertEqual(parse("7-4-76"), datetime(1976, 7, 4))
3439
3440 def testRandomFormat12(self):
3441 self.assertEqual(parse("19760704"), datetime(1976, 7, 4))
3442
3443 def testRandomFormat13(self):
3444 self.assertEqual(parse("0:01:02", default=self.default),
3445 datetime(2003, 9, 25, 0, 1, 2))
3446
3447 def testRandomFormat14(self):
3448 self.assertEqual(parse("12h 01m02s am", default=self.default),
3449 datetime(2003, 9, 25, 0, 1, 2))
3450
3451 def testRandomFormat15(self):
3452 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3453 datetime(1976, 7, 4, 0, 1, 2))
3454
3455 def testRandomFormat16(self):
3456 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3457 datetime(1976, 7, 4, 0, 1, 2))
3458
3459 def testRandomFormat17(self):
3460 self.assertEqual(parse("1976-07-04T00:01:02Z", ignoretz=True),
3461 datetime(1976, 7, 4, 0, 1, 2))
3462
3463 def testRandomFormat18(self):
3464 self.assertEqual(parse("July 4, 1976 12:01:02 am"),
3465 datetime(1976, 7, 4, 0, 1, 2))
3466
3467 def testRandomFormat19(self):
3468 self.assertEqual(parse("Mon Jan 2 04:24:27 1995"),
3469 datetime(1995, 1, 2, 4, 24, 27))
3470
3471 def testRandomFormat20(self):
3472 self.assertEqual(parse("Tue Apr 4 00:22:12 PDT 1995", ignoretz=True),
3473 datetime(1995, 4, 4, 0, 22, 12))
3474
3475 def testRandomFormat21(self):
3476 self.assertEqual(parse("04.04.95 00:22"),
3477 datetime(1995, 4, 4, 0, 22))
3478
3479 def testRandomFormat22(self):
3480 self.assertEqual(parse("Jan 1 1999 11:23:34.578"),
3481 datetime(1999, 1, 1, 11, 23, 34, 578000))
3482
3483 def testRandomFormat23(self):
3484 self.assertEqual(parse("950404 122212"),
3485 datetime(1995, 4, 4, 12, 22, 12))
3486
3487 def testRandomFormat24(self):
3488 self.assertEqual(parse("0:00 PM, PST", default=self.default,
3489 ignoretz=True),
3490 datetime(2003, 9, 25, 12, 0))
3491
3492 def testRandomFormat25(self):
3493 self.assertEqual(parse("12:08 PM", default=self.default),
3494 datetime(2003, 9, 25, 12, 8))
3495
3496 def testRandomFormat26(self):
3497 self.assertEqual(parse("5:50 A.M. on June 13, 1990"),
3498 datetime(1990, 6, 13, 5, 50))
3499
3500 def testRandomFormat27(self):
3501 self.assertEqual(parse("3rd of May 2001"), datetime(2001, 5, 3))
3502
3503 def testRandomFormat28(self):
3504 self.assertEqual(parse("5th of March 2001"), datetime(2001, 3, 5))
3505
3506 def testRandomFormat29(self):
3507 self.assertEqual(parse("1st of May 2003"), datetime(2003, 5, 1))
3508
3509 def testRandomFormat30(self):
3510 self.assertEqual(parse("01h02m03", default=self.default),
3511 datetime(2003, 9, 25, 1, 2, 3))
3512
3513 def testRandomFormat31(self):
3514 self.assertEqual(parse("01h02", default=self.default),
3515 datetime(2003, 9, 25, 1, 2))
3516
3517 def testRandomFormat32(self):
3518 self.assertEqual(parse("01h02s", default=self.default),
3519 datetime(2003, 9, 25, 1, 0, 2))
3520
3521 def testRandomFormat33(self):
3522 self.assertEqual(parse("01m02", default=self.default),
3523 datetime(2003, 9, 25, 0, 1, 2))
3524
3525 def testRandomFormat34(self):
3526 self.assertEqual(parse("01m02h", default=self.default),
3527 datetime(2003, 9, 25, 2, 1))
3528
niemeyer8bfedd82005-07-03 13:40:11 +00003529 def testRandomFormat35(self):
3530 self.assertEqual(parse("2004 10 Apr 11h30m", default=self.default),
3531 datetime(2004, 4, 10, 11, 30))
3532
niemeyer091722d2003-10-10 20:37:11 +00003533 def testIncreasingCTime(self):
3534 # This test will check 200 different years, every month, every day,
niemeyer075fba22004-07-16 20:50:19 +00003535 # every hour, every minute, every second, and every weekday, using
niemeyer091722d2003-10-10 20:37:11 +00003536 # a delta of more or less 1 year, 1 month, 1 day, 1 minute and
3537 # 1 second.
3538 delta = timedelta(days=365+31+1, seconds=1+60+60*60)
3539 dt = datetime(1900, 1, 1, 0, 0, 0, 0)
3540 for i in range(200):
3541 self.assertEqual(parse(dt.ctime()), dt)
3542 dt += delta
3543
3544 def testIncreasingISOFormat(self):
3545 delta = timedelta(days=365+31+1, seconds=1+60+60*60)
3546 dt = datetime(1900, 1, 1, 0, 0, 0, 0)
3547 for i in range(200):
3548 self.assertEqual(parse(dt.isoformat()), dt)
3549 dt += delta
3550
niemeyer68ae2752003-09-28 01:20:02 +00003551class EasterTest(unittest.TestCase):
3552 easterlist = [
3553 # WESTERN ORTHODOX
3554 (date(1990, 4, 15), date(1990, 4, 15)),
3555 (date(1991, 3, 31), date(1991, 4, 7)),
3556 (date(1992, 4, 19), date(1992, 4, 26)),
3557 (date(1993, 4, 11), date(1993, 4, 18)),
3558 (date(1994, 4, 3), date(1994, 5, 1)),
3559 (date(1995, 4, 16), date(1995, 4, 23)),
3560 (date(1996, 4, 7), date(1996, 4, 14)),
3561 (date(1997, 3, 30), date(1997, 4, 27)),
3562 (date(1998, 4, 12), date(1998, 4, 19)),
3563 (date(1999, 4, 4), date(1999, 4, 11)),
3564
3565 (date(2000, 4, 23), date(2000, 4, 30)),
3566 (date(2001, 4, 15), date(2001, 4, 15)),
3567 (date(2002, 3, 31), date(2002, 5, 5)),
3568 (date(2003, 4, 20), date(2003, 4, 27)),
3569 (date(2004, 4, 11), date(2004, 4, 11)),
3570 (date(2005, 3, 27), date(2005, 5, 1)),
3571 (date(2006, 4, 16), date(2006, 4, 23)),
3572 (date(2007, 4, 8), date(2007, 4, 8)),
3573 (date(2008, 3, 23), date(2008, 4, 27)),
3574 (date(2009, 4, 12), date(2009, 4, 19)),
3575
3576 (date(2010, 4, 4), date(2010, 4, 4)),
3577 (date(2011, 4, 24), date(2011, 4, 24)),
3578 (date(2012, 4, 8), date(2012, 4, 15)),
3579 (date(2013, 3, 31), date(2013, 5, 5)),
3580 (date(2014, 4, 20), date(2014, 4, 20)),
3581 (date(2015, 4, 5), date(2015, 4, 12)),
3582 (date(2016, 3, 27), date(2016, 5, 1)),
3583 (date(2017, 4, 16), date(2017, 4, 16)),
3584 (date(2018, 4, 1), date(2018, 4, 8)),
3585 (date(2019, 4, 21), date(2019, 4, 28)),
3586
3587 (date(2020, 4, 12), date(2020, 4, 19)),
3588 (date(2021, 4, 4), date(2021, 5, 2)),
3589 (date(2022, 4, 17), date(2022, 4, 24)),
3590 (date(2023, 4, 9), date(2023, 4, 16)),
3591 (date(2024, 3, 31), date(2024, 5, 5)),
3592 (date(2025, 4, 20), date(2025, 4, 20)),
3593 (date(2026, 4, 5), date(2026, 4, 12)),
3594 (date(2027, 3, 28), date(2027, 5, 2)),
3595 (date(2028, 4, 16), date(2028, 4, 16)),
3596 (date(2029, 4, 1), date(2029, 4, 8)),
3597
3598 (date(2030, 4, 21), date(2030, 4, 28)),
3599 (date(2031, 4, 13), date(2031, 4, 13)),
3600 (date(2032, 3, 28), date(2032, 5, 2)),
3601 (date(2033, 4, 17), date(2033, 4, 24)),
3602 (date(2034, 4, 9), date(2034, 4, 9)),
3603 (date(2035, 3, 25), date(2035, 4, 29)),
3604 (date(2036, 4, 13), date(2036, 4, 20)),
3605 (date(2037, 4, 5), date(2037, 4, 5)),
3606 (date(2038, 4, 25), date(2038, 4, 25)),
3607 (date(2039, 4, 10), date(2039, 4, 17)),
3608
3609 (date(2040, 4, 1), date(2040, 5, 6)),
3610 (date(2041, 4, 21), date(2041, 4, 21)),
3611 (date(2042, 4, 6), date(2042, 4, 13)),
3612 (date(2043, 3, 29), date(2043, 5, 3)),
3613 (date(2044, 4, 17), date(2044, 4, 24)),
3614 (date(2045, 4, 9), date(2045, 4, 9)),
3615 (date(2046, 3, 25), date(2046, 4, 29)),
3616 (date(2047, 4, 14), date(2047, 4, 21)),
3617 (date(2048, 4, 5), date(2048, 4, 5)),
3618 (date(2049, 4, 18), date(2049, 4, 25)),
3619
3620 (date(2050, 4, 10), date(2050, 4, 17)),
3621 ]
3622
3623 def testEaster(self):
3624 for western, orthodox in self.easterlist:
3625 self.assertEqual(western, easter(western.year, EASTER_WESTERN))
3626 self.assertEqual(orthodox, easter(orthodox.year, EASTER_ORTHODOX))
3627
3628class TZTest(unittest.TestCase):
3629
niemeyer36139372003-10-07 01:48:15 +00003630 TZFILE_EST5EDT = """
niemeyer68ae2752003-09-28 01:20:02 +00003631VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh
3632ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e
3633S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0
3634YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg
3635yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db
3636wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW
36378uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b
3638YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g
3639BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR
3640iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x
3641znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H
3642cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w
3643Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH
3644JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM
3645jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w
36464GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg
3647b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8
3648o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3649AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3650AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
3651AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3652AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU
3653AEVQVAAAAAABAAAAAQ==
3654 """
3655
niemeyer224c8312006-04-28 19:49:03 +00003656 EUROPE_HELSINKI = """
3657VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAAAAAB1AAAABQAAAA2kc28Yy85RYMy/hdAV
3658I+uQFhPckBcDzZAX876QGOOvkBnToJAaw5GQG7y9EBysrhAdnJ8QHoyQEB98gRAgbHIQIVxjECJM
3659VBAjPEUQJCw2ECUcJxAmDBgQJwVDkCf1NJAo5SWQKdUWkCrFB5ArtPiQLKTpkC2U2pAuhMuQL3S8
3660kDBkrZAxXdkQMnK0EDM9uxA0UpYQNR2dEDYyeBA2/X8QOBuUkDjdYRA5+3aQOr1DEDvbWJA8pl+Q
3661Pbs6kD6GQZA/mxyQQGYjkEGEORBCRgWQQ2QbEEQl55BFQ/0QRgXJkEcj3xBH7uYQSQPBEEnOyBBK
366246MQS66qEEzMv5BNjowQTqyhkE9ubhBQjIOQUVeKkFJsZZBTN2yQVExHkFUXTpBWLCmQVvcwkFgV
3663RhBY1xKQWfUoEFq29JBb1QoQXKAREF207BBef/MQX5TOEGBf1RBhfeqQYj+3EGNdzJBkH5kQZT2u
3664kGYItZBnHZCQZ+iXkGj9cpBpyHmQat1UkGuoW5BsxnEQbYg9kG6mUxBvaB+QcIY1EHFRPBByZhcQ
3665czEeEHRF+RB1EQAQdi8VkHbw4hB4DveQeNDEEHnu2ZB6sKYQe867kHyZwpB9rp2QfnmkkH+Of5AC
3666AQIDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQD
3667BAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAME
3668AwQAABdoAAAAACowAQQAABwgAAkAACowAQQAABwgAAlITVQARUVTVABFRVQAAAAAAQEAAAABAQ==
3669 """
3670
niemeyer36139372003-10-07 01:48:15 +00003671 TZICAL_EST5EDT = """
3672BEGIN:VTIMEZONE
3673TZID:US-Eastern
3674LAST-MODIFIED:19870101T000000Z
3675TZURL:http://zones.stds_r_us.net/tz/US-Eastern
3676BEGIN:STANDARD
3677DTSTART:19671029T020000
3678RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
3679TZOFFSETFROM:-0400
3680TZOFFSETTO:-0500
3681TZNAME:EST
3682END:STANDARD
3683BEGIN:DAYLIGHT
3684DTSTART:19870405T020000
3685RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
3686TZOFFSETFROM:-0500
3687TZOFFSETTO:-0400
3688TZNAME:EDT
3689END:DAYLIGHT
3690END:VTIMEZONE
3691 """
3692
niemeyer68ae2752003-09-28 01:20:02 +00003693 def testStrStart1(self):
3694 self.assertEqual(datetime(2003,4,6,1,59,
3695 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3696 self.assertEqual(datetime(2003,4,6,2,00,
3697 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3698
3699 def testStrEnd1(self):
3700 self.assertEqual(datetime(2003,10,26,0,59,
3701 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3702 self.assertEqual(datetime(2003,10,26,1,00,
3703 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3704
3705 def testStrStart2(self):
3706 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3707 self.assertEqual(datetime(2003,4,6,1,59,
3708 tzinfo=tzstr(s)).tzname(), "EST")
3709 self.assertEqual(datetime(2003,4,6,2,00,
3710 tzinfo=tzstr(s)).tzname(), "EDT")
3711
3712 def testStrEnd2(self):
3713 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3714 self.assertEqual(datetime(2003,10,26,0,59,
3715 tzinfo=tzstr(s)).tzname(), "EDT")
3716 self.assertEqual(datetime(2003,10,26,1,00,
3717 tzinfo=tzstr(s)).tzname(), "EST")
3718
3719 def testStrStart3(self):
3720 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3721 self.assertEqual(datetime(2003,4,6,1,59,
3722 tzinfo=tzstr(s)).tzname(), "EST")
3723 self.assertEqual(datetime(2003,4,6,2,00,
3724 tzinfo=tzstr(s)).tzname(), "EDT")
3725
3726 def testStrEnd3(self):
3727 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3728 self.assertEqual(datetime(2003,10,26,0,59,
3729 tzinfo=tzstr(s)).tzname(), "EDT")
3730 self.assertEqual(datetime(2003,10,26,1,00,
3731 tzinfo=tzstr(s)).tzname(), "EST")
3732
3733 def testStrStart4(self):
3734 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
3735 self.assertEqual(datetime(2003,4,6,1,59,
3736 tzinfo=tzstr(s)).tzname(), "EST")
3737 self.assertEqual(datetime(2003,4,6,2,00,
3738 tzinfo=tzstr(s)).tzname(), "EDT")
3739
3740 def testStrEnd4(self):
3741 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
3742 self.assertEqual(datetime(2003,10,26,0,59,
3743 tzinfo=tzstr(s)).tzname(), "EDT")
3744 self.assertEqual(datetime(2003,10,26,1,00,
3745 tzinfo=tzstr(s)).tzname(), "EST")
3746
3747 def testStrStart5(self):
3748 s = "EST5EDT4,95/02:00:00,298/02:00"
3749 self.assertEqual(datetime(2003,4,6,1,59,
3750 tzinfo=tzstr(s)).tzname(), "EST")
3751 self.assertEqual(datetime(2003,4,6,2,00,
3752 tzinfo=tzstr(s)).tzname(), "EDT")
3753
3754 def testStrEnd5(self):
3755 s = "EST5EDT4,95/02:00:00,298/02"
3756 self.assertEqual(datetime(2003,10,26,0,59,
3757 tzinfo=tzstr(s)).tzname(), "EDT")
3758 self.assertEqual(datetime(2003,10,26,1,00,
3759 tzinfo=tzstr(s)).tzname(), "EST")
3760
3761 def testStrStart6(self):
3762 s = "EST5EDT4,J96/02:00:00,J299/02:00"
3763 self.assertEqual(datetime(2003,4,6,1,59,
3764 tzinfo=tzstr(s)).tzname(), "EST")
3765 self.assertEqual(datetime(2003,4,6,2,00,
3766 tzinfo=tzstr(s)).tzname(), "EDT")
3767
3768 def testStrEnd6(self):
3769 s = "EST5EDT4,J96/02:00:00,J299/02"
3770 self.assertEqual(datetime(2003,10,26,0,59,
3771 tzinfo=tzstr(s)).tzname(), "EDT")
3772 self.assertEqual(datetime(2003,10,26,1,00,
3773 tzinfo=tzstr(s)).tzname(), "EST")
3774
3775 def testStrCmp1(self):
3776 self.assertEqual(tzstr("EST5EDT"),
3777 tzstr("EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"))
3778
3779 def testStrCmp2(self):
3780 self.assertEqual(tzstr("EST5EDT"),
3781 tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200,3600"))
3782
3783 def testRangeCmp1(self):
3784 self.assertEqual(tzstr("EST5EDT"),
3785 tzrange("EST", -18000, "EDT", -14400,
3786 relativedelta(hours=+2,
3787 month=4, day=1,
niemeyerb47d12a2003-09-29 20:00:21 +00003788 weekday=SU(+1)),
niemeyer68ae2752003-09-28 01:20:02 +00003789 relativedelta(hours=+1,
3790 month=10, day=31,
niemeyerb47d12a2003-09-29 20:00:21 +00003791 weekday=SU(-1))))
niemeyer68ae2752003-09-28 01:20:02 +00003792
3793 def testRangeCmp2(self):
3794 self.assertEqual(tzstr("EST5EDT"),
3795 tzrange("EST", -18000, "EDT"))
3796
3797 def testFileStart1(self):
niemeyer36139372003-10-07 01:48:15 +00003798 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
niemeyer68ae2752003-09-28 01:20:02 +00003799 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3800 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3801
3802 def testFileEnd1(self):
niemeyer36139372003-10-07 01:48:15 +00003803 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
3804 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3805 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3806
niemeyer38fbb772005-07-19 23:35:26 +00003807 def testZoneInfoFileStart1(self):
3808 tz = zoneinfo.gettz("EST5EDT")
3809 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3810 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3811
3812 def testZoneInfoFileEnd1(self):
3813 tz = zoneinfo.gettz("EST5EDT")
3814 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3815 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3816
niemeyer36139372003-10-07 01:48:15 +00003817 def testICalStart1(self):
3818 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
3819 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3820 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3821
3822 def testICalEnd1(self):
3823 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
niemeyer68ae2752003-09-28 01:20:02 +00003824 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3825 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3826
niemeyer224c8312006-04-28 19:49:03 +00003827 def testRoundNonFullMinutes(self):
3828 # This timezone has an offset of 5992 seconds in 1900-01-01.
3829 tz = tzfile(StringIO(base64.decodestring(self.EUROPE_HELSINKI)))
3830 self.assertEquals(str(datetime(1900,1,1,0,0, tzinfo=tz)),
3831 "1900-01-01 00:00:00+01:40")
3832
niemeyer68ae2752003-09-28 01:20:02 +00003833if __name__ == "__main__":
3834 unittest.main()
3835
3836# vim:ts=4:sw=4