blob: 9ff10884619c72e3e6197a3e88bb545f99610f07 [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
2936
2937
niemeyer68ae2752003-09-28 01:20:02 +00002938class ParserTest(unittest.TestCase):
2939 def setUp(self):
niemeyer97e19252003-10-06 05:52:04 +00002940 self.tzinfos = {"BRST": -10800}
niemeyer68ae2752003-09-28 01:20:02 +00002941 self.brsttz = tzoffset("BRST", -10800)
2942 self.default = datetime(2003, 9, 25)
2943
2944 def testDateCommandFormat(self):
2945 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
niemeyer97e19252003-10-06 05:52:04 +00002946 tzinfos=self.tzinfos),
niemeyer68ae2752003-09-28 01:20:02 +00002947 datetime(2003, 9, 25, 10, 36, 28,
2948 tzinfo=self.brsttz))
2949
niemeyer672e2eb2005-02-23 00:04:12 +00002950 def testDateCommandFormatUnicode(self):
2951 self.assertEqual(parse(u"Thu Sep 25 10:36:28 BRST 2003",
2952 tzinfos=self.tzinfos),
2953 datetime(2003, 9, 25, 10, 36, 28,
2954 tzinfo=self.brsttz))
2955
2956
niemeyer68ae2752003-09-28 01:20:02 +00002957 def testDateCommandFormatReversed(self):
2958 self.assertEqual(parse("2003 10:36:28 BRST 25 Sep Thu",
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
2963 def testDateCommandFormatIgnoreTz(self):
2964 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
2965 ignoretz=True),
2966 datetime(2003, 9, 25, 10, 36, 28))
2967
2968 def testDateCommandFormatStrip1(self):
2969 self.assertEqual(parse("Thu Sep 25 10:36:28 2003"),
2970 datetime(2003, 9, 25, 10, 36, 28))
2971
2972 def testDateCommandFormatStrip2(self):
2973 self.assertEqual(parse("Thu Sep 25 10:36:28", default=self.default),
2974 datetime(2003, 9, 25, 10, 36, 28))
2975
2976 def testDateCommandFormatStrip3(self):
2977 self.assertEqual(parse("Thu Sep 10:36:28", default=self.default),
2978 datetime(2003, 9, 25, 10, 36, 28))
2979
2980 def testDateCommandFormatStrip4(self):
2981 self.assertEqual(parse("Thu 10:36:28", default=self.default),
2982 datetime(2003, 9, 25, 10, 36, 28))
2983
2984 def testDateCommandFormatStrip5(self):
2985 self.assertEqual(parse("Sep 10:36:28", default=self.default),
2986 datetime(2003, 9, 25, 10, 36, 28))
2987
2988 def testDateCommandFormatStrip6(self):
2989 self.assertEqual(parse("10:36:28", default=self.default),
2990 datetime(2003, 9, 25, 10, 36, 28))
2991
2992 def testDateCommandFormatStrip7(self):
2993 self.assertEqual(parse("10:36", default=self.default),
2994 datetime(2003, 9, 25, 10, 36))
2995
2996 def testDateCommandFormatStrip8(self):
2997 self.assertEqual(parse("Thu Sep 25 2003"),
2998 datetime(2003, 9, 25))
2999
3000 def testDateCommandFormatStrip9(self):
3001 self.assertEqual(parse("Sep 25 2003"),
3002 datetime(2003, 9, 25))
3003
3004 def testDateCommandFormatStrip9(self):
3005 self.assertEqual(parse("Sep 2003", default=self.default),
3006 datetime(2003, 9, 25))
3007
3008 def testDateCommandFormatStrip10(self):
3009 self.assertEqual(parse("Sep", default=self.default),
3010 datetime(2003, 9, 25))
3011
3012 def testDateCommandFormatStrip11(self):
3013 self.assertEqual(parse("2003", default=self.default),
3014 datetime(2003, 9, 25))
3015
3016 def testDateRCommandFormat(self):
3017 self.assertEqual(parse("Thu, 25 Sep 2003 10:49:41 -0300"),
3018 datetime(2003, 9, 25, 10, 49, 41,
3019 tzinfo=self.brsttz))
3020
3021 def testISOFormat(self):
3022 self.assertEqual(parse("2003-09-25T10:49:41.5-03:00"),
3023 datetime(2003, 9, 25, 10, 49, 41, 500000,
3024 tzinfo=self.brsttz))
3025
3026 def testISOFormatStrip1(self):
3027 self.assertEqual(parse("2003-09-25T10:49:41-03:00"),
3028 datetime(2003, 9, 25, 10, 49, 41,
3029 tzinfo=self.brsttz))
3030
3031 def testISOFormatStrip2(self):
3032 self.assertEqual(parse("2003-09-25T10:49:41"),
3033 datetime(2003, 9, 25, 10, 49, 41))
3034
3035 def testISOFormatStrip3(self):
3036 self.assertEqual(parse("2003-09-25T10:49"),
3037 datetime(2003, 9, 25, 10, 49))
3038
3039 def testISOFormatStrip4(self):
3040 self.assertEqual(parse("2003-09-25T10"),
3041 datetime(2003, 9, 25, 10))
3042
3043 def testISOFormatStrip5(self):
3044 self.assertEqual(parse("2003-09-25"),
3045 datetime(2003, 9, 25))
3046
3047 def testISOStrippedFormat(self):
3048 self.assertEqual(parse("20030925T104941.5-0300"),
3049 datetime(2003, 9, 25, 10, 49, 41, 500000,
3050 tzinfo=self.brsttz))
3051
3052 def testISOStrippedFormatStrip1(self):
3053 self.assertEqual(parse("20030925T104941-0300"),
3054 datetime(2003, 9, 25, 10, 49, 41,
3055 tzinfo=self.brsttz))
3056
3057 def testISOStrippedFormatStrip2(self):
3058 self.assertEqual(parse("20030925T104941"),
3059 datetime(2003, 9, 25, 10, 49, 41))
3060
3061 def testISOStrippedFormatStrip3(self):
3062 self.assertEqual(parse("20030925T1049"),
3063 datetime(2003, 9, 25, 10, 49, 0))
3064
3065 def testISOStrippedFormatStrip4(self):
3066 self.assertEqual(parse("20030925T10"),
3067 datetime(2003, 9, 25, 10))
3068
3069 def testISOStrippedFormatStrip5(self):
3070 self.assertEqual(parse("20030925"),
3071 datetime(2003, 9, 25))
3072
niemeyer6c067e02003-10-09 02:54:58 +00003073 def testNoSeparator1(self):
3074 self.assertEqual(parse("199709020908"),
3075 datetime(1997, 9, 2, 9, 8))
3076
3077 def testNoSeparator2(self):
3078 self.assertEqual(parse("19970902090807"),
3079 datetime(1997, 9, 2, 9, 8, 7))
3080
niemeyer68ae2752003-09-28 01:20:02 +00003081 def testDateWithDash1(self):
3082 self.assertEqual(parse("2003-09-25"),
3083 datetime(2003, 9, 25))
3084
3085 def testDateWithDash2(self):
3086 self.assertEqual(parse("2003-Sep-25"),
3087 datetime(2003, 9, 25))
3088
3089 def testDateWithDash3(self):
3090 self.assertEqual(parse("25-Sep-2003"),
3091 datetime(2003, 9, 25))
3092
3093 def testDateWithDash4(self):
3094 self.assertEqual(parse("25-Sep-2003"),
3095 datetime(2003, 9, 25))
3096
3097 def testDateWithDash5(self):
3098 self.assertEqual(parse("Sep-25-2003"),
3099 datetime(2003, 9, 25))
3100
3101 def testDateWithDash6(self):
3102 self.assertEqual(parse("09-25-2003"),
3103 datetime(2003, 9, 25))
3104
3105 def testDateWithDash7(self):
3106 self.assertEqual(parse("25-09-2003"),
3107 datetime(2003, 9, 25))
3108
3109 def testDateWithDash8(self):
3110 self.assertEqual(parse("10-09-2003", dayfirst=True),
3111 datetime(2003, 9, 10))
3112
3113 def testDateWithDash9(self):
3114 self.assertEqual(parse("10-09-2003"),
3115 datetime(2003, 10, 9))
3116
3117 def testDateWithDash10(self):
3118 self.assertEqual(parse("10-09-03"),
3119 datetime(2003, 10, 9))
3120
3121 def testDateWithDash11(self):
3122 self.assertEqual(parse("10-09-03", yearfirst=True),
3123 datetime(2010, 9, 3))
3124
3125 def testDateWithDot1(self):
3126 self.assertEqual(parse("2003.09.25"),
3127 datetime(2003, 9, 25))
3128
3129 def testDateWithDot2(self):
3130 self.assertEqual(parse("2003.Sep.25"),
3131 datetime(2003, 9, 25))
3132
3133 def testDateWithDot3(self):
3134 self.assertEqual(parse("25.Sep.2003"),
3135 datetime(2003, 9, 25))
3136
3137 def testDateWithDot4(self):
3138 self.assertEqual(parse("25.Sep.2003"),
3139 datetime(2003, 9, 25))
3140
3141 def testDateWithDot5(self):
3142 self.assertEqual(parse("Sep.25.2003"),
3143 datetime(2003, 9, 25))
3144
3145 def testDateWithDot6(self):
3146 self.assertEqual(parse("09.25.2003"),
3147 datetime(2003, 9, 25))
3148
3149 def testDateWithDot7(self):
3150 self.assertEqual(parse("25.09.2003"),
3151 datetime(2003, 9, 25))
3152
3153 def testDateWithDot8(self):
3154 self.assertEqual(parse("10.09.2003", dayfirst=True),
3155 datetime(2003, 9, 10))
3156
3157 def testDateWithDot9(self):
3158 self.assertEqual(parse("10.09.2003"),
3159 datetime(2003, 10, 9))
3160
3161 def testDateWithDot10(self):
3162 self.assertEqual(parse("10.09.03"),
3163 datetime(2003, 10, 9))
3164
3165 def testDateWithDot11(self):
3166 self.assertEqual(parse("10.09.03", yearfirst=True),
3167 datetime(2010, 9, 3))
3168
3169 def testDateWithSlash1(self):
3170 self.assertEqual(parse("2003/09/25"),
3171 datetime(2003, 9, 25))
3172
3173 def testDateWithSlash2(self):
3174 self.assertEqual(parse("2003/Sep/25"),
3175 datetime(2003, 9, 25))
3176
3177 def testDateWithSlash3(self):
3178 self.assertEqual(parse("25/Sep/2003"),
3179 datetime(2003, 9, 25))
3180
3181 def testDateWithSlash4(self):
3182 self.assertEqual(parse("25/Sep/2003"),
3183 datetime(2003, 9, 25))
3184
3185 def testDateWithSlash5(self):
3186 self.assertEqual(parse("Sep/25/2003"),
3187 datetime(2003, 9, 25))
3188
3189 def testDateWithSlash6(self):
3190 self.assertEqual(parse("09/25/2003"),
3191 datetime(2003, 9, 25))
3192
3193 def testDateWithSlash7(self):
3194 self.assertEqual(parse("25/09/2003"),
3195 datetime(2003, 9, 25))
3196
3197 def testDateWithSlash8(self):
3198 self.assertEqual(parse("10/09/2003", dayfirst=True),
3199 datetime(2003, 9, 10))
3200
3201 def testDateWithSlash9(self):
3202 self.assertEqual(parse("10/09/2003"),
3203 datetime(2003, 10, 9))
3204
3205 def testDateWithSlash10(self):
3206 self.assertEqual(parse("10/09/03"),
3207 datetime(2003, 10, 9))
3208
3209 def testDateWithSlash11(self):
3210 self.assertEqual(parse("10/09/03", yearfirst=True),
3211 datetime(2010, 9, 3))
3212
3213 def testDateWithSpace12(self):
3214 self.assertEqual(parse("25 09 03"),
3215 datetime(2003, 9, 25))
3216
3217 def testDateWithSpace13(self):
3218 self.assertEqual(parse("25 09 03"),
3219 datetime(2003, 9, 25))
3220
3221 def testDateWithSpace1(self):
3222 self.assertEqual(parse("2003 09 25"),
3223 datetime(2003, 9, 25))
3224
3225 def testDateWithSpace2(self):
3226 self.assertEqual(parse("2003 Sep 25"),
3227 datetime(2003, 9, 25))
3228
3229 def testDateWithSpace3(self):
3230 self.assertEqual(parse("25 Sep 2003"),
3231 datetime(2003, 9, 25))
3232
3233 def testDateWithSpace4(self):
3234 self.assertEqual(parse("25 Sep 2003"),
3235 datetime(2003, 9, 25))
3236
3237 def testDateWithSpace5(self):
3238 self.assertEqual(parse("Sep 25 2003"),
3239 datetime(2003, 9, 25))
3240
3241 def testDateWithSpace6(self):
3242 self.assertEqual(parse("09 25 2003"),
3243 datetime(2003, 9, 25))
3244
3245 def testDateWithSpace7(self):
3246 self.assertEqual(parse("25 09 2003"),
3247 datetime(2003, 9, 25))
3248
3249 def testDateWithSpace8(self):
3250 self.assertEqual(parse("10 09 2003", dayfirst=True),
3251 datetime(2003, 9, 10))
3252
3253 def testDateWithSpace9(self):
3254 self.assertEqual(parse("10 09 2003"),
3255 datetime(2003, 10, 9))
3256
3257 def testDateWithSpace10(self):
3258 self.assertEqual(parse("10 09 03"),
3259 datetime(2003, 10, 9))
3260
3261 def testDateWithSpace11(self):
3262 self.assertEqual(parse("10 09 03", yearfirst=True),
3263 datetime(2010, 9, 3))
3264
3265 def testDateWithSpace12(self):
3266 self.assertEqual(parse("25 09 03"),
3267 datetime(2003, 9, 25))
3268
3269 def testDateWithSpace13(self):
3270 self.assertEqual(parse("25 09 03"),
3271 datetime(2003, 9, 25))
3272
3273 def testStrangelyOrderedDate1(self):
3274 self.assertEqual(parse("03 25 Sep"),
3275 datetime(2003, 9, 25))
3276
3277 def testStrangelyOrderedDate2(self):
3278 self.assertEqual(parse("2003 25 Sep"),
3279 datetime(2003, 9, 25))
3280
3281 def testStrangelyOrderedDate3(self):
3282 self.assertEqual(parse("25 03 Sep"),
3283 datetime(2025, 9, 3))
3284
3285 def testHourWithLetters(self):
3286 self.assertEqual(parse("10h36m28.5s", default=self.default),
3287 datetime(2003, 9, 25, 10, 36, 28, 500000))
3288
3289 def testHourWithLettersStrip1(self):
3290 self.assertEqual(parse("10h36m28s", default=self.default),
3291 datetime(2003, 9, 25, 10, 36, 28))
3292
3293 def testHourWithLettersStrip1(self):
3294 self.assertEqual(parse("10h36m", default=self.default),
3295 datetime(2003, 9, 25, 10, 36))
3296
3297 def testHourWithLettersStrip2(self):
3298 self.assertEqual(parse("10h", default=self.default),
3299 datetime(2003, 9, 25, 10))
3300
3301 def testHourAmPm1(self):
3302 self.assertEqual(parse("10h am", default=self.default),
3303 datetime(2003, 9, 25, 10))
3304
3305 def testHourAmPm2(self):
3306 self.assertEqual(parse("10h pm", default=self.default),
3307 datetime(2003, 9, 25, 22))
3308
3309 def testHourAmPm3(self):
3310 self.assertEqual(parse("10am", default=self.default),
3311 datetime(2003, 9, 25, 10))
3312
3313 def testHourAmPm4(self):
3314 self.assertEqual(parse("10pm", default=self.default),
3315 datetime(2003, 9, 25, 22))
3316
3317 def testHourAmPm5(self):
3318 self.assertEqual(parse("10:00 am", default=self.default),
3319 datetime(2003, 9, 25, 10))
3320
3321 def testHourAmPm6(self):
3322 self.assertEqual(parse("10:00 pm", default=self.default),
3323 datetime(2003, 9, 25, 22))
3324
3325 def testHourAmPm7(self):
3326 self.assertEqual(parse("10:00am", default=self.default),
3327 datetime(2003, 9, 25, 10))
3328
3329 def testHourAmPm8(self):
3330 self.assertEqual(parse("10:00pm", default=self.default),
3331 datetime(2003, 9, 25, 22))
3332
3333 def testHourAmPm9(self):
3334 self.assertEqual(parse("10:00a.m", default=self.default),
3335 datetime(2003, 9, 25, 10))
3336
3337 def testHourAmPm10(self):
3338 self.assertEqual(parse("10:00p.m", default=self.default),
3339 datetime(2003, 9, 25, 22))
3340
3341 def testHourAmPm11(self):
3342 self.assertEqual(parse("10:00a.m.", default=self.default),
3343 datetime(2003, 9, 25, 10))
3344
3345 def testHourAmPm12(self):
3346 self.assertEqual(parse("10:00p.m.", default=self.default),
3347 datetime(2003, 9, 25, 22))
3348
3349 def testPertain(self):
3350 self.assertEqual(parse("Sep 03", default=self.default),
3351 datetime(2003, 9, 3))
3352 self.assertEqual(parse("Sep of 03", default=self.default),
3353 datetime(2003, 9, 25))
3354
3355 def testWeekdayAlone(self):
3356 self.assertEqual(parse("Wed", default=self.default),
3357 datetime(2003, 10, 1))
3358
3359 def testLongWeekday(self):
3360 self.assertEqual(parse("Wednesday", default=self.default),
3361 datetime(2003, 10, 1))
3362
3363 def testLongMonth(self):
3364 self.assertEqual(parse("October", default=self.default),
3365 datetime(2003, 10, 25))
niemeyer075fba22004-07-16 20:50:19 +00003366
3367 def testZeroYear(self):
3368 self.assertEqual(parse("31-Dec-00", default=self.default),
3369 datetime(2000, 12, 31))
niemeyer68ae2752003-09-28 01:20:02 +00003370
3371 def testFuzzy(self):
3372 s = "Today is 25 of September of 2003, exactly " \
3373 "at 10:49:41 with timezone -03:00."
3374 self.assertEqual(parse(s, fuzzy=True),
3375 datetime(2003, 9, 25, 10, 49, 41,
3376 tzinfo=self.brsttz))
3377
3378 def testExtraSpace(self):
3379 self.assertEqual(parse(" July 4 , 1976 12:01:02 am "),
3380 datetime(1976, 7, 4, 0, 1, 2))
3381
3382 def testRandomFormat1(self):
3383 self.assertEqual(parse("Wed, July 10, '96"),
3384 datetime(1996, 7, 10, 0, 0))
3385
3386 def testRandomFormat2(self):
3387 self.assertEqual(parse("1996.07.10 AD at 15:08:56 PDT",
3388 ignoretz=True),
3389 datetime(1996, 7, 10, 15, 8, 56))
3390
3391 def testRandomFormat3(self):
3392 self.assertEqual(parse("1996.July.10 AD 12:08 PM"),
3393 datetime(1996, 7, 10, 12, 8))
3394
3395 def testRandomFormat4(self):
3396 self.assertEqual(parse("Tuesday, April 12, 1952 AD 3:30:42pm PST",
3397 ignoretz=True),
3398 datetime(1952, 4, 12, 15, 30, 42))
3399
3400 def testRandomFormat5(self):
3401 self.assertEqual(parse("November 5, 1994, 8:15:30 am EST",
3402 ignoretz=True),
3403 datetime(1994, 11, 5, 8, 15, 30))
3404
3405 def testRandomFormat6(self):
3406 self.assertEqual(parse("1994-11-05T08:15:30-05:00",
3407 ignoretz=True),
3408 datetime(1994, 11, 5, 8, 15, 30))
3409
3410 def testRandomFormat7(self):
3411 self.assertEqual(parse("1994-11-05T08:15:30Z",
3412 ignoretz=True),
3413 datetime(1994, 11, 5, 8, 15, 30))
3414
3415 def testRandomFormat8(self):
3416 self.assertEqual(parse("July 4, 1976"), datetime(1976, 7, 4))
3417
3418 def testRandomFormat9(self):
3419 self.assertEqual(parse("7 4 1976"), datetime(1976, 7, 4))
3420
3421 def testRandomFormat10(self):
3422 self.assertEqual(parse("4 jul 1976"), datetime(1976, 7, 4))
3423
3424 def testRandomFormat11(self):
3425 self.assertEqual(parse("7-4-76"), datetime(1976, 7, 4))
3426
3427 def testRandomFormat12(self):
3428 self.assertEqual(parse("19760704"), datetime(1976, 7, 4))
3429
3430 def testRandomFormat13(self):
3431 self.assertEqual(parse("0:01:02", default=self.default),
3432 datetime(2003, 9, 25, 0, 1, 2))
3433
3434 def testRandomFormat14(self):
3435 self.assertEqual(parse("12h 01m02s am", default=self.default),
3436 datetime(2003, 9, 25, 0, 1, 2))
3437
3438 def testRandomFormat15(self):
3439 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3440 datetime(1976, 7, 4, 0, 1, 2))
3441
3442 def testRandomFormat16(self):
3443 self.assertEqual(parse("0:01:02 on July 4, 1976"),
3444 datetime(1976, 7, 4, 0, 1, 2))
3445
3446 def testRandomFormat17(self):
3447 self.assertEqual(parse("1976-07-04T00:01:02Z", ignoretz=True),
3448 datetime(1976, 7, 4, 0, 1, 2))
3449
3450 def testRandomFormat18(self):
3451 self.assertEqual(parse("July 4, 1976 12:01:02 am"),
3452 datetime(1976, 7, 4, 0, 1, 2))
3453
3454 def testRandomFormat19(self):
3455 self.assertEqual(parse("Mon Jan 2 04:24:27 1995"),
3456 datetime(1995, 1, 2, 4, 24, 27))
3457
3458 def testRandomFormat20(self):
3459 self.assertEqual(parse("Tue Apr 4 00:22:12 PDT 1995", ignoretz=True),
3460 datetime(1995, 4, 4, 0, 22, 12))
3461
3462 def testRandomFormat21(self):
3463 self.assertEqual(parse("04.04.95 00:22"),
3464 datetime(1995, 4, 4, 0, 22))
3465
3466 def testRandomFormat22(self):
3467 self.assertEqual(parse("Jan 1 1999 11:23:34.578"),
3468 datetime(1999, 1, 1, 11, 23, 34, 578000))
3469
3470 def testRandomFormat23(self):
3471 self.assertEqual(parse("950404 122212"),
3472 datetime(1995, 4, 4, 12, 22, 12))
3473
3474 def testRandomFormat24(self):
3475 self.assertEqual(parse("0:00 PM, PST", default=self.default,
3476 ignoretz=True),
3477 datetime(2003, 9, 25, 12, 0))
3478
3479 def testRandomFormat25(self):
3480 self.assertEqual(parse("12:08 PM", default=self.default),
3481 datetime(2003, 9, 25, 12, 8))
3482
3483 def testRandomFormat26(self):
3484 self.assertEqual(parse("5:50 A.M. on June 13, 1990"),
3485 datetime(1990, 6, 13, 5, 50))
3486
3487 def testRandomFormat27(self):
3488 self.assertEqual(parse("3rd of May 2001"), datetime(2001, 5, 3))
3489
3490 def testRandomFormat28(self):
3491 self.assertEqual(parse("5th of March 2001"), datetime(2001, 3, 5))
3492
3493 def testRandomFormat29(self):
3494 self.assertEqual(parse("1st of May 2003"), datetime(2003, 5, 1))
3495
3496 def testRandomFormat30(self):
3497 self.assertEqual(parse("01h02m03", default=self.default),
3498 datetime(2003, 9, 25, 1, 2, 3))
3499
3500 def testRandomFormat31(self):
3501 self.assertEqual(parse("01h02", default=self.default),
3502 datetime(2003, 9, 25, 1, 2))
3503
3504 def testRandomFormat32(self):
3505 self.assertEqual(parse("01h02s", default=self.default),
3506 datetime(2003, 9, 25, 1, 0, 2))
3507
3508 def testRandomFormat33(self):
3509 self.assertEqual(parse("01m02", default=self.default),
3510 datetime(2003, 9, 25, 0, 1, 2))
3511
3512 def testRandomFormat34(self):
3513 self.assertEqual(parse("01m02h", default=self.default),
3514 datetime(2003, 9, 25, 2, 1))
3515
niemeyer8bfedd82005-07-03 13:40:11 +00003516 def testRandomFormat35(self):
3517 self.assertEqual(parse("2004 10 Apr 11h30m", default=self.default),
3518 datetime(2004, 4, 10, 11, 30))
3519
niemeyer091722d2003-10-10 20:37:11 +00003520 def testIncreasingCTime(self):
3521 # This test will check 200 different years, every month, every day,
niemeyer075fba22004-07-16 20:50:19 +00003522 # every hour, every minute, every second, and every weekday, using
niemeyer091722d2003-10-10 20:37:11 +00003523 # a delta of more or less 1 year, 1 month, 1 day, 1 minute and
3524 # 1 second.
3525 delta = timedelta(days=365+31+1, seconds=1+60+60*60)
3526 dt = datetime(1900, 1, 1, 0, 0, 0, 0)
3527 for i in range(200):
3528 self.assertEqual(parse(dt.ctime()), dt)
3529 dt += delta
3530
3531 def testIncreasingISOFormat(self):
3532 delta = timedelta(days=365+31+1, seconds=1+60+60*60)
3533 dt = datetime(1900, 1, 1, 0, 0, 0, 0)
3534 for i in range(200):
3535 self.assertEqual(parse(dt.isoformat()), dt)
3536 dt += delta
3537
niemeyer68ae2752003-09-28 01:20:02 +00003538class EasterTest(unittest.TestCase):
3539 easterlist = [
3540 # WESTERN ORTHODOX
3541 (date(1990, 4, 15), date(1990, 4, 15)),
3542 (date(1991, 3, 31), date(1991, 4, 7)),
3543 (date(1992, 4, 19), date(1992, 4, 26)),
3544 (date(1993, 4, 11), date(1993, 4, 18)),
3545 (date(1994, 4, 3), date(1994, 5, 1)),
3546 (date(1995, 4, 16), date(1995, 4, 23)),
3547 (date(1996, 4, 7), date(1996, 4, 14)),
3548 (date(1997, 3, 30), date(1997, 4, 27)),
3549 (date(1998, 4, 12), date(1998, 4, 19)),
3550 (date(1999, 4, 4), date(1999, 4, 11)),
3551
3552 (date(2000, 4, 23), date(2000, 4, 30)),
3553 (date(2001, 4, 15), date(2001, 4, 15)),
3554 (date(2002, 3, 31), date(2002, 5, 5)),
3555 (date(2003, 4, 20), date(2003, 4, 27)),
3556 (date(2004, 4, 11), date(2004, 4, 11)),
3557 (date(2005, 3, 27), date(2005, 5, 1)),
3558 (date(2006, 4, 16), date(2006, 4, 23)),
3559 (date(2007, 4, 8), date(2007, 4, 8)),
3560 (date(2008, 3, 23), date(2008, 4, 27)),
3561 (date(2009, 4, 12), date(2009, 4, 19)),
3562
3563 (date(2010, 4, 4), date(2010, 4, 4)),
3564 (date(2011, 4, 24), date(2011, 4, 24)),
3565 (date(2012, 4, 8), date(2012, 4, 15)),
3566 (date(2013, 3, 31), date(2013, 5, 5)),
3567 (date(2014, 4, 20), date(2014, 4, 20)),
3568 (date(2015, 4, 5), date(2015, 4, 12)),
3569 (date(2016, 3, 27), date(2016, 5, 1)),
3570 (date(2017, 4, 16), date(2017, 4, 16)),
3571 (date(2018, 4, 1), date(2018, 4, 8)),
3572 (date(2019, 4, 21), date(2019, 4, 28)),
3573
3574 (date(2020, 4, 12), date(2020, 4, 19)),
3575 (date(2021, 4, 4), date(2021, 5, 2)),
3576 (date(2022, 4, 17), date(2022, 4, 24)),
3577 (date(2023, 4, 9), date(2023, 4, 16)),
3578 (date(2024, 3, 31), date(2024, 5, 5)),
3579 (date(2025, 4, 20), date(2025, 4, 20)),
3580 (date(2026, 4, 5), date(2026, 4, 12)),
3581 (date(2027, 3, 28), date(2027, 5, 2)),
3582 (date(2028, 4, 16), date(2028, 4, 16)),
3583 (date(2029, 4, 1), date(2029, 4, 8)),
3584
3585 (date(2030, 4, 21), date(2030, 4, 28)),
3586 (date(2031, 4, 13), date(2031, 4, 13)),
3587 (date(2032, 3, 28), date(2032, 5, 2)),
3588 (date(2033, 4, 17), date(2033, 4, 24)),
3589 (date(2034, 4, 9), date(2034, 4, 9)),
3590 (date(2035, 3, 25), date(2035, 4, 29)),
3591 (date(2036, 4, 13), date(2036, 4, 20)),
3592 (date(2037, 4, 5), date(2037, 4, 5)),
3593 (date(2038, 4, 25), date(2038, 4, 25)),
3594 (date(2039, 4, 10), date(2039, 4, 17)),
3595
3596 (date(2040, 4, 1), date(2040, 5, 6)),
3597 (date(2041, 4, 21), date(2041, 4, 21)),
3598 (date(2042, 4, 6), date(2042, 4, 13)),
3599 (date(2043, 3, 29), date(2043, 5, 3)),
3600 (date(2044, 4, 17), date(2044, 4, 24)),
3601 (date(2045, 4, 9), date(2045, 4, 9)),
3602 (date(2046, 3, 25), date(2046, 4, 29)),
3603 (date(2047, 4, 14), date(2047, 4, 21)),
3604 (date(2048, 4, 5), date(2048, 4, 5)),
3605 (date(2049, 4, 18), date(2049, 4, 25)),
3606
3607 (date(2050, 4, 10), date(2050, 4, 17)),
3608 ]
3609
3610 def testEaster(self):
3611 for western, orthodox in self.easterlist:
3612 self.assertEqual(western, easter(western.year, EASTER_WESTERN))
3613 self.assertEqual(orthodox, easter(orthodox.year, EASTER_ORTHODOX))
3614
3615class TZTest(unittest.TestCase):
3616
niemeyer36139372003-10-07 01:48:15 +00003617 TZFILE_EST5EDT = """
niemeyer68ae2752003-09-28 01:20:02 +00003618VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh
3619ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e
3620S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0
3621YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg
3622yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db
3623wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW
36248uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b
3625YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g
3626BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR
3627iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x
3628znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H
3629cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w
3630Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH
3631JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM
3632jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w
36334GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg
3634b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8
3635o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3636AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3637AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
3638AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
3639AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU
3640AEVQVAAAAAABAAAAAQ==
3641 """
3642
niemeyer36139372003-10-07 01:48:15 +00003643 TZICAL_EST5EDT = """
3644BEGIN:VTIMEZONE
3645TZID:US-Eastern
3646LAST-MODIFIED:19870101T000000Z
3647TZURL:http://zones.stds_r_us.net/tz/US-Eastern
3648BEGIN:STANDARD
3649DTSTART:19671029T020000
3650RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
3651TZOFFSETFROM:-0400
3652TZOFFSETTO:-0500
3653TZNAME:EST
3654END:STANDARD
3655BEGIN:DAYLIGHT
3656DTSTART:19870405T020000
3657RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
3658TZOFFSETFROM:-0500
3659TZOFFSETTO:-0400
3660TZNAME:EDT
3661END:DAYLIGHT
3662END:VTIMEZONE
3663 """
3664
niemeyer68ae2752003-09-28 01:20:02 +00003665 def testStrStart1(self):
3666 self.assertEqual(datetime(2003,4,6,1,59,
3667 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3668 self.assertEqual(datetime(2003,4,6,2,00,
3669 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3670
3671 def testStrEnd1(self):
3672 self.assertEqual(datetime(2003,10,26,0,59,
3673 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
3674 self.assertEqual(datetime(2003,10,26,1,00,
3675 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
3676
3677 def testStrStart2(self):
3678 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3679 self.assertEqual(datetime(2003,4,6,1,59,
3680 tzinfo=tzstr(s)).tzname(), "EST")
3681 self.assertEqual(datetime(2003,4,6,2,00,
3682 tzinfo=tzstr(s)).tzname(), "EDT")
3683
3684 def testStrEnd2(self):
3685 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
3686 self.assertEqual(datetime(2003,10,26,0,59,
3687 tzinfo=tzstr(s)).tzname(), "EDT")
3688 self.assertEqual(datetime(2003,10,26,1,00,
3689 tzinfo=tzstr(s)).tzname(), "EST")
3690
3691 def testStrStart3(self):
3692 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3693 self.assertEqual(datetime(2003,4,6,1,59,
3694 tzinfo=tzstr(s)).tzname(), "EST")
3695 self.assertEqual(datetime(2003,4,6,2,00,
3696 tzinfo=tzstr(s)).tzname(), "EDT")
3697
3698 def testStrEnd3(self):
3699 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
3700 self.assertEqual(datetime(2003,10,26,0,59,
3701 tzinfo=tzstr(s)).tzname(), "EDT")
3702 self.assertEqual(datetime(2003,10,26,1,00,
3703 tzinfo=tzstr(s)).tzname(), "EST")
3704
3705 def testStrStart4(self):
3706 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
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 testStrEnd4(self):
3713 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
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 testStrStart5(self):
3720 s = "EST5EDT4,95/02:00:00,298/02:00"
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 testStrEnd5(self):
3727 s = "EST5EDT4,95/02:00:00,298/02"
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 testStrStart6(self):
3734 s = "EST5EDT4,J96/02:00:00,J299/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 testStrEnd6(self):
3741 s = "EST5EDT4,J96/02:00:00,J299/02"
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 testStrCmp1(self):
3748 self.assertEqual(tzstr("EST5EDT"),
3749 tzstr("EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"))
3750
3751 def testStrCmp2(self):
3752 self.assertEqual(tzstr("EST5EDT"),
3753 tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200,3600"))
3754
3755 def testRangeCmp1(self):
3756 self.assertEqual(tzstr("EST5EDT"),
3757 tzrange("EST", -18000, "EDT", -14400,
3758 relativedelta(hours=+2,
3759 month=4, day=1,
niemeyerb47d12a2003-09-29 20:00:21 +00003760 weekday=SU(+1)),
niemeyer68ae2752003-09-28 01:20:02 +00003761 relativedelta(hours=+1,
3762 month=10, day=31,
niemeyerb47d12a2003-09-29 20:00:21 +00003763 weekday=SU(-1))))
niemeyer68ae2752003-09-28 01:20:02 +00003764
3765 def testRangeCmp2(self):
3766 self.assertEqual(tzstr("EST5EDT"),
3767 tzrange("EST", -18000, "EDT"))
3768
3769 def testFileStart1(self):
niemeyer36139372003-10-07 01:48:15 +00003770 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
niemeyer68ae2752003-09-28 01:20:02 +00003771 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3772 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3773
3774 def testFileEnd1(self):
niemeyer36139372003-10-07 01:48:15 +00003775 tz = tzfile(StringIO(base64.decodestring(self.TZFILE_EST5EDT)))
3776 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3777 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3778
niemeyer38fbb772005-07-19 23:35:26 +00003779 def testZoneInfoFileStart1(self):
3780 tz = zoneinfo.gettz("EST5EDT")
3781 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3782 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3783
3784 def testZoneInfoFileEnd1(self):
3785 tz = zoneinfo.gettz("EST5EDT")
3786 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3787 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3788
niemeyer36139372003-10-07 01:48:15 +00003789 def testICalStart1(self):
3790 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
3791 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
3792 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
3793
3794 def testICalEnd1(self):
3795 tz = tzical(StringIO(self.TZICAL_EST5EDT)).get()
niemeyer68ae2752003-09-28 01:20:02 +00003796 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
3797 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
3798
3799if __name__ == "__main__":
3800 unittest.main()
3801
3802# vim:ts=4:sw=4