blob: 4f1e66c267aefa944498d3e72cbfa585d83371ca [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 *
18from dateutil.tz import *
19
20from datetime import *
21
22import calendar
23import time
24
25class RelativeDeltaTest(unittest.TestCase):
26 now = datetime(2003, 9, 17, 20, 54, 47, 282310)
27 today = date(2003, 9, 17)
28
29 def testNextMonth(self):
30 self.assertEqual(self.now+relativedelta(months=+1),
31 datetime(2003, 10, 17, 20, 54, 47, 282310))
32
33 def testNextMonthPlusOneWeek(self):
34 self.assertEqual(self.now+relativedelta(months=+1, weeks=+1),
35 datetime(2003, 10, 24, 20, 54, 47, 282310))
36 def testNextMonthPlusOneWeek10am(self):
37 self.assertEqual(self.today +
38 relativedelta(months=+1, weeks=+1, hour=10),
39 datetime(2003, 10, 24, 10, 0))
40
41 def testNextMonthPlusOneWeek10amDiff(self):
42 self.assertEqual(relativedelta(datetime(2003, 10, 24, 10, 0),
43 self.today),
44 relativedelta(months=+1, days=+7, hours=+10))
45
46 def testOneMonthBeforeOneYear(self):
47 self.assertEqual(self.now+relativedelta(years=+1, months=-1),
48 datetime(2004, 8, 17, 20, 54, 47, 282310))
49
50 def testMonthsOfDiffNumOfDays(self):
51 self.assertEqual(date(2003, 1, 27)+relativedelta(months=+1),
52 date(2003, 2, 27))
53 self.assertEqual(date(2003, 1, 31)+relativedelta(months=+1),
54 date(2003, 2, 28))
55 self.assertEqual(date(2003, 1, 31)+relativedelta(months=+2),
56 date(2003, 3, 31))
57
58 def testMonthsOfDiffNumOfDaysWithYears(self):
59 self.assertEqual(date(2000, 2, 28)+relativedelta(years=+1),
60 date(2001, 2, 28))
61 self.assertEqual(date(2000, 2, 29)+relativedelta(years=+1),
62 date(2001, 2, 28))
63
64 self.assertEqual(date(1999, 2, 28)+relativedelta(years=+1),
65 date(2000, 2, 28))
66 self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1),
67 date(2000, 3, 1))
68 self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1),
69 date(2000, 3, 1))
70
71 self.assertEqual(date(2001, 2, 28)+relativedelta(years=-1),
72 date(2000, 2, 28))
73 self.assertEqual(date(2001, 3, 1)+relativedelta(years=-1),
74 date(2000, 3, 1))
75
76 def testNextFriday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000077 self.assertEqual(self.today+relativedelta(weekday=FR),
78 date(2003, 9, 19))
79
80 def testNextFridayInt(self):
81 self.assertEqual(self.today+relativedelta(weekday=calendar.FRIDAY),
niemeyer68ae2752003-09-28 01:20:02 +000082 date(2003, 9, 19))
83
84 def testLastFridayInThisMonth(self):
niemeyerb47d12a2003-09-29 20:00:21 +000085 self.assertEqual(self.today+relativedelta(day=31, weekday=FR(-1)),
niemeyer68ae2752003-09-28 01:20:02 +000086 date(2003, 9, 26))
87
88 def testNextWednesdayIsToday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000089 self.assertEqual(self.today+relativedelta(weekday=WE),
niemeyer68ae2752003-09-28 01:20:02 +000090 date(2003, 9, 17))
91
92
93 def testNextWenesdayNotToday(self):
niemeyerb47d12a2003-09-29 20:00:21 +000094 self.assertEqual(self.today+relativedelta(days=+1, weekday=WE),
niemeyer68ae2752003-09-28 01:20:02 +000095 date(2003, 9, 24))
96
97 def test15thISOYearWeek(self):
98 self.assertEqual(date(2003, 1, 1) +
niemeyerb47d12a2003-09-29 20:00:21 +000099 relativedelta(day=4, weeks=+14, weekday=MO(-1)),
niemeyer68ae2752003-09-28 01:20:02 +0000100 date(2003, 4, 7))
101
102 def testMillenniumAge(self):
103 self.assertEqual(relativedelta(self.now, date(2001,1,1)),
104 relativedelta(years=+2, months=+8, days=+16,
105 hours=+20, minutes=+54, seconds=+47,
106 microseconds=+282310))
107
108 def testJohnAge(self):
109 self.assertEqual(relativedelta(self.now,
110 datetime(1978, 4, 5, 12, 0)),
111 relativedelta(years=+25, months=+5, days=+12,
112 hours=+8, minutes=+54, seconds=+47,
113 microseconds=+282310))
114
115 def testJohnAgeWithDate(self):
116 self.assertEqual(relativedelta(self.today,
117 datetime(1978, 4, 5, 12, 0)),
118 relativedelta(years=+25, months=+5, days=+11,
119 hours=+12))
120
121 def testYearDay(self):
122 self.assertEqual(date(2003, 1, 1)+relativedelta(yearday=260),
123 date(2003, 9, 17))
124 self.assertEqual(date(2002, 1, 1)+relativedelta(yearday=260),
125 date(2002, 9, 17))
126 self.assertEqual(date(2000, 1, 1)+relativedelta(yearday=260),
127 date(2000, 9, 16))
128 self.assertEqual(self.today+relativedelta(yearday=261),
129 date(2003, 9, 18))
130
131 def testNonLeapYearDay(self):
132 self.assertEqual(date(2003, 1, 1)+relativedelta(nlyearday=260),
133 date(2003, 9, 17))
134 self.assertEqual(date(2002, 1, 1)+relativedelta(nlyearday=260),
135 date(2002, 9, 17))
136 self.assertEqual(date(2000, 1, 1)+relativedelta(nlyearday=260),
137 date(2000, 9, 17))
138 self.assertEqual(self.today+relativedelta(yearday=261),
139 date(2003, 9, 18))
140
141class ParserTest(unittest.TestCase):
142 def setUp(self):
143 self.tzoffsets = {"BRST": -10800}
144 self.brsttz = tzoffset("BRST", -10800)
145 self.default = datetime(2003, 9, 25)
146
147 def testDateCommandFormat(self):
148 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
149 tzoffsets=self.tzoffsets),
150 datetime(2003, 9, 25, 10, 36, 28,
151 tzinfo=self.brsttz))
152
153 def testDateCommandFormatReversed(self):
154 self.assertEqual(parse("2003 10:36:28 BRST 25 Sep Thu",
155 tzoffsets=self.tzoffsets),
156 datetime(2003, 9, 25, 10, 36, 28,
157 tzinfo=self.brsttz))
158
159 def testDateCommandFormatIgnoreTz(self):
160 self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
161 ignoretz=True),
162 datetime(2003, 9, 25, 10, 36, 28))
163
164 def testDateCommandFormatStrip1(self):
165 self.assertEqual(parse("Thu Sep 25 10:36:28 2003"),
166 datetime(2003, 9, 25, 10, 36, 28))
167
168 def testDateCommandFormatStrip2(self):
169 self.assertEqual(parse("Thu Sep 25 10:36:28", default=self.default),
170 datetime(2003, 9, 25, 10, 36, 28))
171
172 def testDateCommandFormatStrip3(self):
173 self.assertEqual(parse("Thu Sep 10:36:28", default=self.default),
174 datetime(2003, 9, 25, 10, 36, 28))
175
176 def testDateCommandFormatStrip4(self):
177 self.assertEqual(parse("Thu 10:36:28", default=self.default),
178 datetime(2003, 9, 25, 10, 36, 28))
179
180 def testDateCommandFormatStrip5(self):
181 self.assertEqual(parse("Sep 10:36:28", default=self.default),
182 datetime(2003, 9, 25, 10, 36, 28))
183
184 def testDateCommandFormatStrip6(self):
185 self.assertEqual(parse("10:36:28", default=self.default),
186 datetime(2003, 9, 25, 10, 36, 28))
187
188 def testDateCommandFormatStrip7(self):
189 self.assertEqual(parse("10:36", default=self.default),
190 datetime(2003, 9, 25, 10, 36))
191
192 def testDateCommandFormatStrip8(self):
193 self.assertEqual(parse("Thu Sep 25 2003"),
194 datetime(2003, 9, 25))
195
196 def testDateCommandFormatStrip9(self):
197 self.assertEqual(parse("Sep 25 2003"),
198 datetime(2003, 9, 25))
199
200 def testDateCommandFormatStrip9(self):
201 self.assertEqual(parse("Sep 2003", default=self.default),
202 datetime(2003, 9, 25))
203
204 def testDateCommandFormatStrip10(self):
205 self.assertEqual(parse("Sep", default=self.default),
206 datetime(2003, 9, 25))
207
208 def testDateCommandFormatStrip11(self):
209 self.assertEqual(parse("2003", default=self.default),
210 datetime(2003, 9, 25))
211
212 def testDateRCommandFormat(self):
213 self.assertEqual(parse("Thu, 25 Sep 2003 10:49:41 -0300"),
214 datetime(2003, 9, 25, 10, 49, 41,
215 tzinfo=self.brsttz))
216
217 def testISOFormat(self):
218 self.assertEqual(parse("2003-09-25T10:49:41.5-03:00"),
219 datetime(2003, 9, 25, 10, 49, 41, 500000,
220 tzinfo=self.brsttz))
221
222 def testISOFormatStrip1(self):
223 self.assertEqual(parse("2003-09-25T10:49:41-03:00"),
224 datetime(2003, 9, 25, 10, 49, 41,
225 tzinfo=self.brsttz))
226
227 def testISOFormatStrip2(self):
228 self.assertEqual(parse("2003-09-25T10:49:41"),
229 datetime(2003, 9, 25, 10, 49, 41))
230
231 def testISOFormatStrip3(self):
232 self.assertEqual(parse("2003-09-25T10:49"),
233 datetime(2003, 9, 25, 10, 49))
234
235 def testISOFormatStrip4(self):
236 self.assertEqual(parse("2003-09-25T10"),
237 datetime(2003, 9, 25, 10))
238
239 def testISOFormatStrip5(self):
240 self.assertEqual(parse("2003-09-25"),
241 datetime(2003, 9, 25))
242
243 def testISOStrippedFormat(self):
244 self.assertEqual(parse("20030925T104941.5-0300"),
245 datetime(2003, 9, 25, 10, 49, 41, 500000,
246 tzinfo=self.brsttz))
247
248 def testISOStrippedFormatStrip1(self):
249 self.assertEqual(parse("20030925T104941-0300"),
250 datetime(2003, 9, 25, 10, 49, 41,
251 tzinfo=self.brsttz))
252
253 def testISOStrippedFormatStrip2(self):
254 self.assertEqual(parse("20030925T104941"),
255 datetime(2003, 9, 25, 10, 49, 41))
256
257 def testISOStrippedFormatStrip3(self):
258 self.assertEqual(parse("20030925T1049"),
259 datetime(2003, 9, 25, 10, 49, 0))
260
261 def testISOStrippedFormatStrip4(self):
262 self.assertEqual(parse("20030925T10"),
263 datetime(2003, 9, 25, 10))
264
265 def testISOStrippedFormatStrip5(self):
266 self.assertEqual(parse("20030925"),
267 datetime(2003, 9, 25))
268
269 def testDateWithDash1(self):
270 self.assertEqual(parse("2003-09-25"),
271 datetime(2003, 9, 25))
272
273 def testDateWithDash2(self):
274 self.assertEqual(parse("2003-Sep-25"),
275 datetime(2003, 9, 25))
276
277 def testDateWithDash3(self):
278 self.assertEqual(parse("25-Sep-2003"),
279 datetime(2003, 9, 25))
280
281 def testDateWithDash4(self):
282 self.assertEqual(parse("25-Sep-2003"),
283 datetime(2003, 9, 25))
284
285 def testDateWithDash5(self):
286 self.assertEqual(parse("Sep-25-2003"),
287 datetime(2003, 9, 25))
288
289 def testDateWithDash6(self):
290 self.assertEqual(parse("09-25-2003"),
291 datetime(2003, 9, 25))
292
293 def testDateWithDash7(self):
294 self.assertEqual(parse("25-09-2003"),
295 datetime(2003, 9, 25))
296
297 def testDateWithDash8(self):
298 self.assertEqual(parse("10-09-2003", dayfirst=True),
299 datetime(2003, 9, 10))
300
301 def testDateWithDash9(self):
302 self.assertEqual(parse("10-09-2003"),
303 datetime(2003, 10, 9))
304
305 def testDateWithDash10(self):
306 self.assertEqual(parse("10-09-03"),
307 datetime(2003, 10, 9))
308
309 def testDateWithDash11(self):
310 self.assertEqual(parse("10-09-03", yearfirst=True),
311 datetime(2010, 9, 3))
312
313 def testDateWithDot1(self):
314 self.assertEqual(parse("2003.09.25"),
315 datetime(2003, 9, 25))
316
317 def testDateWithDot2(self):
318 self.assertEqual(parse("2003.Sep.25"),
319 datetime(2003, 9, 25))
320
321 def testDateWithDot3(self):
322 self.assertEqual(parse("25.Sep.2003"),
323 datetime(2003, 9, 25))
324
325 def testDateWithDot4(self):
326 self.assertEqual(parse("25.Sep.2003"),
327 datetime(2003, 9, 25))
328
329 def testDateWithDot5(self):
330 self.assertEqual(parse("Sep.25.2003"),
331 datetime(2003, 9, 25))
332
333 def testDateWithDot6(self):
334 self.assertEqual(parse("09.25.2003"),
335 datetime(2003, 9, 25))
336
337 def testDateWithDot7(self):
338 self.assertEqual(parse("25.09.2003"),
339 datetime(2003, 9, 25))
340
341 def testDateWithDot8(self):
342 self.assertEqual(parse("10.09.2003", dayfirst=True),
343 datetime(2003, 9, 10))
344
345 def testDateWithDot9(self):
346 self.assertEqual(parse("10.09.2003"),
347 datetime(2003, 10, 9))
348
349 def testDateWithDot10(self):
350 self.assertEqual(parse("10.09.03"),
351 datetime(2003, 10, 9))
352
353 def testDateWithDot11(self):
354 self.assertEqual(parse("10.09.03", yearfirst=True),
355 datetime(2010, 9, 3))
356
357 def testDateWithSlash1(self):
358 self.assertEqual(parse("2003/09/25"),
359 datetime(2003, 9, 25))
360
361 def testDateWithSlash2(self):
362 self.assertEqual(parse("2003/Sep/25"),
363 datetime(2003, 9, 25))
364
365 def testDateWithSlash3(self):
366 self.assertEqual(parse("25/Sep/2003"),
367 datetime(2003, 9, 25))
368
369 def testDateWithSlash4(self):
370 self.assertEqual(parse("25/Sep/2003"),
371 datetime(2003, 9, 25))
372
373 def testDateWithSlash5(self):
374 self.assertEqual(parse("Sep/25/2003"),
375 datetime(2003, 9, 25))
376
377 def testDateWithSlash6(self):
378 self.assertEqual(parse("09/25/2003"),
379 datetime(2003, 9, 25))
380
381 def testDateWithSlash7(self):
382 self.assertEqual(parse("25/09/2003"),
383 datetime(2003, 9, 25))
384
385 def testDateWithSlash8(self):
386 self.assertEqual(parse("10/09/2003", dayfirst=True),
387 datetime(2003, 9, 10))
388
389 def testDateWithSlash9(self):
390 self.assertEqual(parse("10/09/2003"),
391 datetime(2003, 10, 9))
392
393 def testDateWithSlash10(self):
394 self.assertEqual(parse("10/09/03"),
395 datetime(2003, 10, 9))
396
397 def testDateWithSlash11(self):
398 self.assertEqual(parse("10/09/03", yearfirst=True),
399 datetime(2010, 9, 3))
400
401 def testDateWithSpace12(self):
402 self.assertEqual(parse("25 09 03"),
403 datetime(2003, 9, 25))
404
405 def testDateWithSpace13(self):
406 self.assertEqual(parse("25 09 03"),
407 datetime(2003, 9, 25))
408
409 def testDateWithSpace1(self):
410 self.assertEqual(parse("2003 09 25"),
411 datetime(2003, 9, 25))
412
413 def testDateWithSpace2(self):
414 self.assertEqual(parse("2003 Sep 25"),
415 datetime(2003, 9, 25))
416
417 def testDateWithSpace3(self):
418 self.assertEqual(parse("25 Sep 2003"),
419 datetime(2003, 9, 25))
420
421 def testDateWithSpace4(self):
422 self.assertEqual(parse("25 Sep 2003"),
423 datetime(2003, 9, 25))
424
425 def testDateWithSpace5(self):
426 self.assertEqual(parse("Sep 25 2003"),
427 datetime(2003, 9, 25))
428
429 def testDateWithSpace6(self):
430 self.assertEqual(parse("09 25 2003"),
431 datetime(2003, 9, 25))
432
433 def testDateWithSpace7(self):
434 self.assertEqual(parse("25 09 2003"),
435 datetime(2003, 9, 25))
436
437 def testDateWithSpace8(self):
438 self.assertEqual(parse("10 09 2003", dayfirst=True),
439 datetime(2003, 9, 10))
440
441 def testDateWithSpace9(self):
442 self.assertEqual(parse("10 09 2003"),
443 datetime(2003, 10, 9))
444
445 def testDateWithSpace10(self):
446 self.assertEqual(parse("10 09 03"),
447 datetime(2003, 10, 9))
448
449 def testDateWithSpace11(self):
450 self.assertEqual(parse("10 09 03", yearfirst=True),
451 datetime(2010, 9, 3))
452
453 def testDateWithSpace12(self):
454 self.assertEqual(parse("25 09 03"),
455 datetime(2003, 9, 25))
456
457 def testDateWithSpace13(self):
458 self.assertEqual(parse("25 09 03"),
459 datetime(2003, 9, 25))
460
461 def testStrangelyOrderedDate1(self):
462 self.assertEqual(parse("03 25 Sep"),
463 datetime(2003, 9, 25))
464
465 def testStrangelyOrderedDate2(self):
466 self.assertEqual(parse("2003 25 Sep"),
467 datetime(2003, 9, 25))
468
469 def testStrangelyOrderedDate3(self):
470 self.assertEqual(parse("25 03 Sep"),
471 datetime(2025, 9, 3))
472
473 def testHourWithLetters(self):
474 self.assertEqual(parse("10h36m28.5s", default=self.default),
475 datetime(2003, 9, 25, 10, 36, 28, 500000))
476
477 def testHourWithLettersStrip1(self):
478 self.assertEqual(parse("10h36m28s", default=self.default),
479 datetime(2003, 9, 25, 10, 36, 28))
480
481 def testHourWithLettersStrip1(self):
482 self.assertEqual(parse("10h36m", default=self.default),
483 datetime(2003, 9, 25, 10, 36))
484
485 def testHourWithLettersStrip2(self):
486 self.assertEqual(parse("10h", default=self.default),
487 datetime(2003, 9, 25, 10))
488
489 def testHourAmPm1(self):
490 self.assertEqual(parse("10h am", default=self.default),
491 datetime(2003, 9, 25, 10))
492
493 def testHourAmPm2(self):
494 self.assertEqual(parse("10h pm", default=self.default),
495 datetime(2003, 9, 25, 22))
496
497 def testHourAmPm3(self):
498 self.assertEqual(parse("10am", default=self.default),
499 datetime(2003, 9, 25, 10))
500
501 def testHourAmPm4(self):
502 self.assertEqual(parse("10pm", default=self.default),
503 datetime(2003, 9, 25, 22))
504
505 def testHourAmPm5(self):
506 self.assertEqual(parse("10:00 am", default=self.default),
507 datetime(2003, 9, 25, 10))
508
509 def testHourAmPm6(self):
510 self.assertEqual(parse("10:00 pm", default=self.default),
511 datetime(2003, 9, 25, 22))
512
513 def testHourAmPm7(self):
514 self.assertEqual(parse("10:00am", default=self.default),
515 datetime(2003, 9, 25, 10))
516
517 def testHourAmPm8(self):
518 self.assertEqual(parse("10:00pm", default=self.default),
519 datetime(2003, 9, 25, 22))
520
521 def testHourAmPm9(self):
522 self.assertEqual(parse("10:00a.m", default=self.default),
523 datetime(2003, 9, 25, 10))
524
525 def testHourAmPm10(self):
526 self.assertEqual(parse("10:00p.m", default=self.default),
527 datetime(2003, 9, 25, 22))
528
529 def testHourAmPm11(self):
530 self.assertEqual(parse("10:00a.m.", default=self.default),
531 datetime(2003, 9, 25, 10))
532
533 def testHourAmPm12(self):
534 self.assertEqual(parse("10:00p.m.", default=self.default),
535 datetime(2003, 9, 25, 22))
536
537 def testPertain(self):
538 self.assertEqual(parse("Sep 03", default=self.default),
539 datetime(2003, 9, 3))
540 self.assertEqual(parse("Sep of 03", default=self.default),
541 datetime(2003, 9, 25))
542
543 def testWeekdayAlone(self):
544 self.assertEqual(parse("Wed", default=self.default),
545 datetime(2003, 10, 1))
546
547 def testLongWeekday(self):
548 self.assertEqual(parse("Wednesday", default=self.default),
549 datetime(2003, 10, 1))
550
551 def testLongMonth(self):
552 self.assertEqual(parse("October", default=self.default),
553 datetime(2003, 10, 25))
554
555 def testFuzzy(self):
556 s = "Today is 25 of September of 2003, exactly " \
557 "at 10:49:41 with timezone -03:00."
558 self.assertEqual(parse(s, fuzzy=True),
559 datetime(2003, 9, 25, 10, 49, 41,
560 tzinfo=self.brsttz))
561
562 def testExtraSpace(self):
563 self.assertEqual(parse(" July 4 , 1976 12:01:02 am "),
564 datetime(1976, 7, 4, 0, 1, 2))
565
566 def testRandomFormat1(self):
567 self.assertEqual(parse("Wed, July 10, '96"),
568 datetime(1996, 7, 10, 0, 0))
569
570 def testRandomFormat2(self):
571 self.assertEqual(parse("1996.07.10 AD at 15:08:56 PDT",
572 ignoretz=True),
573 datetime(1996, 7, 10, 15, 8, 56))
574
575 def testRandomFormat3(self):
576 self.assertEqual(parse("1996.July.10 AD 12:08 PM"),
577 datetime(1996, 7, 10, 12, 8))
578
579 def testRandomFormat4(self):
580 self.assertEqual(parse("Tuesday, April 12, 1952 AD 3:30:42pm PST",
581 ignoretz=True),
582 datetime(1952, 4, 12, 15, 30, 42))
583
584 def testRandomFormat5(self):
585 self.assertEqual(parse("November 5, 1994, 8:15:30 am EST",
586 ignoretz=True),
587 datetime(1994, 11, 5, 8, 15, 30))
588
589 def testRandomFormat6(self):
590 self.assertEqual(parse("1994-11-05T08:15:30-05:00",
591 ignoretz=True),
592 datetime(1994, 11, 5, 8, 15, 30))
593
594 def testRandomFormat7(self):
595 self.assertEqual(parse("1994-11-05T08:15:30Z",
596 ignoretz=True),
597 datetime(1994, 11, 5, 8, 15, 30))
598
599 def testRandomFormat8(self):
600 self.assertEqual(parse("July 4, 1976"), datetime(1976, 7, 4))
601
602 def testRandomFormat9(self):
603 self.assertEqual(parse("7 4 1976"), datetime(1976, 7, 4))
604
605 def testRandomFormat10(self):
606 self.assertEqual(parse("4 jul 1976"), datetime(1976, 7, 4))
607
608 def testRandomFormat11(self):
609 self.assertEqual(parse("7-4-76"), datetime(1976, 7, 4))
610
611 def testRandomFormat12(self):
612 self.assertEqual(parse("19760704"), datetime(1976, 7, 4))
613
614 def testRandomFormat13(self):
615 self.assertEqual(parse("0:01:02", default=self.default),
616 datetime(2003, 9, 25, 0, 1, 2))
617
618 def testRandomFormat14(self):
619 self.assertEqual(parse("12h 01m02s am", default=self.default),
620 datetime(2003, 9, 25, 0, 1, 2))
621
622 def testRandomFormat15(self):
623 self.assertEqual(parse("0:01:02 on July 4, 1976"),
624 datetime(1976, 7, 4, 0, 1, 2))
625
626 def testRandomFormat16(self):
627 self.assertEqual(parse("0:01:02 on July 4, 1976"),
628 datetime(1976, 7, 4, 0, 1, 2))
629
630 def testRandomFormat17(self):
631 self.assertEqual(parse("1976-07-04T00:01:02Z", ignoretz=True),
632 datetime(1976, 7, 4, 0, 1, 2))
633
634 def testRandomFormat18(self):
635 self.assertEqual(parse("July 4, 1976 12:01:02 am"),
636 datetime(1976, 7, 4, 0, 1, 2))
637
638 def testRandomFormat19(self):
639 self.assertEqual(parse("Mon Jan 2 04:24:27 1995"),
640 datetime(1995, 1, 2, 4, 24, 27))
641
642 def testRandomFormat20(self):
643 self.assertEqual(parse("Tue Apr 4 00:22:12 PDT 1995", ignoretz=True),
644 datetime(1995, 4, 4, 0, 22, 12))
645
646 def testRandomFormat21(self):
647 self.assertEqual(parse("04.04.95 00:22"),
648 datetime(1995, 4, 4, 0, 22))
649
650 def testRandomFormat22(self):
651 self.assertEqual(parse("Jan 1 1999 11:23:34.578"),
652 datetime(1999, 1, 1, 11, 23, 34, 578000))
653
654 def testRandomFormat23(self):
655 self.assertEqual(parse("950404 122212"),
656 datetime(1995, 4, 4, 12, 22, 12))
657
658 def testRandomFormat24(self):
659 self.assertEqual(parse("0:00 PM, PST", default=self.default,
660 ignoretz=True),
661 datetime(2003, 9, 25, 12, 0))
662
663 def testRandomFormat25(self):
664 self.assertEqual(parse("12:08 PM", default=self.default),
665 datetime(2003, 9, 25, 12, 8))
666
667 def testRandomFormat26(self):
668 self.assertEqual(parse("5:50 A.M. on June 13, 1990"),
669 datetime(1990, 6, 13, 5, 50))
670
671 def testRandomFormat27(self):
672 self.assertEqual(parse("3rd of May 2001"), datetime(2001, 5, 3))
673
674 def testRandomFormat28(self):
675 self.assertEqual(parse("5th of March 2001"), datetime(2001, 3, 5))
676
677 def testRandomFormat29(self):
678 self.assertEqual(parse("1st of May 2003"), datetime(2003, 5, 1))
679
680 def testRandomFormat30(self):
681 self.assertEqual(parse("01h02m03", default=self.default),
682 datetime(2003, 9, 25, 1, 2, 3))
683
684 def testRandomFormat31(self):
685 self.assertEqual(parse("01h02", default=self.default),
686 datetime(2003, 9, 25, 1, 2))
687
688 def testRandomFormat32(self):
689 self.assertEqual(parse("01h02s", default=self.default),
690 datetime(2003, 9, 25, 1, 0, 2))
691
692 def testRandomFormat33(self):
693 self.assertEqual(parse("01m02", default=self.default),
694 datetime(2003, 9, 25, 0, 1, 2))
695
696 def testRandomFormat34(self):
697 self.assertEqual(parse("01m02h", default=self.default),
698 datetime(2003, 9, 25, 2, 1))
699
700class EasterTest(unittest.TestCase):
701 easterlist = [
702 # WESTERN ORTHODOX
703 (date(1990, 4, 15), date(1990, 4, 15)),
704 (date(1991, 3, 31), date(1991, 4, 7)),
705 (date(1992, 4, 19), date(1992, 4, 26)),
706 (date(1993, 4, 11), date(1993, 4, 18)),
707 (date(1994, 4, 3), date(1994, 5, 1)),
708 (date(1995, 4, 16), date(1995, 4, 23)),
709 (date(1996, 4, 7), date(1996, 4, 14)),
710 (date(1997, 3, 30), date(1997, 4, 27)),
711 (date(1998, 4, 12), date(1998, 4, 19)),
712 (date(1999, 4, 4), date(1999, 4, 11)),
713
714 (date(2000, 4, 23), date(2000, 4, 30)),
715 (date(2001, 4, 15), date(2001, 4, 15)),
716 (date(2002, 3, 31), date(2002, 5, 5)),
717 (date(2003, 4, 20), date(2003, 4, 27)),
718 (date(2004, 4, 11), date(2004, 4, 11)),
719 (date(2005, 3, 27), date(2005, 5, 1)),
720 (date(2006, 4, 16), date(2006, 4, 23)),
721 (date(2007, 4, 8), date(2007, 4, 8)),
722 (date(2008, 3, 23), date(2008, 4, 27)),
723 (date(2009, 4, 12), date(2009, 4, 19)),
724
725 (date(2010, 4, 4), date(2010, 4, 4)),
726 (date(2011, 4, 24), date(2011, 4, 24)),
727 (date(2012, 4, 8), date(2012, 4, 15)),
728 (date(2013, 3, 31), date(2013, 5, 5)),
729 (date(2014, 4, 20), date(2014, 4, 20)),
730 (date(2015, 4, 5), date(2015, 4, 12)),
731 (date(2016, 3, 27), date(2016, 5, 1)),
732 (date(2017, 4, 16), date(2017, 4, 16)),
733 (date(2018, 4, 1), date(2018, 4, 8)),
734 (date(2019, 4, 21), date(2019, 4, 28)),
735
736 (date(2020, 4, 12), date(2020, 4, 19)),
737 (date(2021, 4, 4), date(2021, 5, 2)),
738 (date(2022, 4, 17), date(2022, 4, 24)),
739 (date(2023, 4, 9), date(2023, 4, 16)),
740 (date(2024, 3, 31), date(2024, 5, 5)),
741 (date(2025, 4, 20), date(2025, 4, 20)),
742 (date(2026, 4, 5), date(2026, 4, 12)),
743 (date(2027, 3, 28), date(2027, 5, 2)),
744 (date(2028, 4, 16), date(2028, 4, 16)),
745 (date(2029, 4, 1), date(2029, 4, 8)),
746
747 (date(2030, 4, 21), date(2030, 4, 28)),
748 (date(2031, 4, 13), date(2031, 4, 13)),
749 (date(2032, 3, 28), date(2032, 5, 2)),
750 (date(2033, 4, 17), date(2033, 4, 24)),
751 (date(2034, 4, 9), date(2034, 4, 9)),
752 (date(2035, 3, 25), date(2035, 4, 29)),
753 (date(2036, 4, 13), date(2036, 4, 20)),
754 (date(2037, 4, 5), date(2037, 4, 5)),
755 (date(2038, 4, 25), date(2038, 4, 25)),
756 (date(2039, 4, 10), date(2039, 4, 17)),
757
758 (date(2040, 4, 1), date(2040, 5, 6)),
759 (date(2041, 4, 21), date(2041, 4, 21)),
760 (date(2042, 4, 6), date(2042, 4, 13)),
761 (date(2043, 3, 29), date(2043, 5, 3)),
762 (date(2044, 4, 17), date(2044, 4, 24)),
763 (date(2045, 4, 9), date(2045, 4, 9)),
764 (date(2046, 3, 25), date(2046, 4, 29)),
765 (date(2047, 4, 14), date(2047, 4, 21)),
766 (date(2048, 4, 5), date(2048, 4, 5)),
767 (date(2049, 4, 18), date(2049, 4, 25)),
768
769 (date(2050, 4, 10), date(2050, 4, 17)),
770 ]
771
772 def testEaster(self):
773 for western, orthodox in self.easterlist:
774 self.assertEqual(western, easter(western.year, EASTER_WESTERN))
775 self.assertEqual(orthodox, easter(orthodox.year, EASTER_ORTHODOX))
776
777class TZTest(unittest.TestCase):
778
779 EST5EDT = """
780VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh
781ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e
782S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0
783YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg
784yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db
785wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW
7868uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b
787YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g
788BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR
789iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x
790znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H
791cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w
792Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH
793JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM
794jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w
7954GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg
796b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8
797o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
798AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
799AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
800AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB
801AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU
802AEVQVAAAAAABAAAAAQ==
803 """
804
805 def testStrStart1(self):
806 self.assertEqual(datetime(2003,4,6,1,59,
807 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
808 self.assertEqual(datetime(2003,4,6,2,00,
809 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
810
811 def testStrEnd1(self):
812 self.assertEqual(datetime(2003,10,26,0,59,
813 tzinfo=tzstr("EST5EDT")).tzname(), "EDT")
814 self.assertEqual(datetime(2003,10,26,1,00,
815 tzinfo=tzstr("EST5EDT")).tzname(), "EST")
816
817 def testStrStart2(self):
818 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
819 self.assertEqual(datetime(2003,4,6,1,59,
820 tzinfo=tzstr(s)).tzname(), "EST")
821 self.assertEqual(datetime(2003,4,6,2,00,
822 tzinfo=tzstr(s)).tzname(), "EDT")
823
824 def testStrEnd2(self):
825 s = "EST5EDT,4,0,6,7200,10,0,26,7200,3600"
826 self.assertEqual(datetime(2003,10,26,0,59,
827 tzinfo=tzstr(s)).tzname(), "EDT")
828 self.assertEqual(datetime(2003,10,26,1,00,
829 tzinfo=tzstr(s)).tzname(), "EST")
830
831 def testStrStart3(self):
832 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
833 self.assertEqual(datetime(2003,4,6,1,59,
834 tzinfo=tzstr(s)).tzname(), "EST")
835 self.assertEqual(datetime(2003,4,6,2,00,
836 tzinfo=tzstr(s)).tzname(), "EDT")
837
838 def testStrEnd3(self):
839 s = "EST5EDT,4,1,0,7200,10,-1,0,7200,3600"
840 self.assertEqual(datetime(2003,10,26,0,59,
841 tzinfo=tzstr(s)).tzname(), "EDT")
842 self.assertEqual(datetime(2003,10,26,1,00,
843 tzinfo=tzstr(s)).tzname(), "EST")
844
845 def testStrStart4(self):
846 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
847 self.assertEqual(datetime(2003,4,6,1,59,
848 tzinfo=tzstr(s)).tzname(), "EST")
849 self.assertEqual(datetime(2003,4,6,2,00,
850 tzinfo=tzstr(s)).tzname(), "EDT")
851
852 def testStrEnd4(self):
853 s = "EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"
854 self.assertEqual(datetime(2003,10,26,0,59,
855 tzinfo=tzstr(s)).tzname(), "EDT")
856 self.assertEqual(datetime(2003,10,26,1,00,
857 tzinfo=tzstr(s)).tzname(), "EST")
858
859 def testStrStart5(self):
860 s = "EST5EDT4,95/02:00:00,298/02:00"
861 self.assertEqual(datetime(2003,4,6,1,59,
862 tzinfo=tzstr(s)).tzname(), "EST")
863 self.assertEqual(datetime(2003,4,6,2,00,
864 tzinfo=tzstr(s)).tzname(), "EDT")
865
866 def testStrEnd5(self):
867 s = "EST5EDT4,95/02:00:00,298/02"
868 self.assertEqual(datetime(2003,10,26,0,59,
869 tzinfo=tzstr(s)).tzname(), "EDT")
870 self.assertEqual(datetime(2003,10,26,1,00,
871 tzinfo=tzstr(s)).tzname(), "EST")
872
873 def testStrStart6(self):
874 s = "EST5EDT4,J96/02:00:00,J299/02:00"
875 self.assertEqual(datetime(2003,4,6,1,59,
876 tzinfo=tzstr(s)).tzname(), "EST")
877 self.assertEqual(datetime(2003,4,6,2,00,
878 tzinfo=tzstr(s)).tzname(), "EDT")
879
880 def testStrEnd6(self):
881 s = "EST5EDT4,J96/02:00:00,J299/02"
882 self.assertEqual(datetime(2003,10,26,0,59,
883 tzinfo=tzstr(s)).tzname(), "EDT")
884 self.assertEqual(datetime(2003,10,26,1,00,
885 tzinfo=tzstr(s)).tzname(), "EST")
886
887 def testStrCmp1(self):
888 self.assertEqual(tzstr("EST5EDT"),
889 tzstr("EST5EDT4,M4.1.0/02:00:00,M10-5-0/02:00"))
890
891 def testStrCmp2(self):
892 self.assertEqual(tzstr("EST5EDT"),
893 tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200,3600"))
894
895 def testRangeCmp1(self):
896 self.assertEqual(tzstr("EST5EDT"),
897 tzrange("EST", -18000, "EDT", -14400,
898 relativedelta(hours=+2,
899 month=4, day=1,
niemeyerb47d12a2003-09-29 20:00:21 +0000900 weekday=SU(+1)),
niemeyer68ae2752003-09-28 01:20:02 +0000901 relativedelta(hours=+1,
902 month=10, day=31,
niemeyerb47d12a2003-09-29 20:00:21 +0000903 weekday=SU(-1))))
niemeyer68ae2752003-09-28 01:20:02 +0000904
905 def testRangeCmp2(self):
906 self.assertEqual(tzstr("EST5EDT"),
907 tzrange("EST", -18000, "EDT"))
908
909 def testFileStart1(self):
910 tz = tzfile(StringIO(base64.decodestring(self.EST5EDT)))
911 self.assertEqual(datetime(2003,4,6,1,59,tzinfo=tz).tzname(), "EST")
912 self.assertEqual(datetime(2003,4,6,2,00,tzinfo=tz).tzname(), "EDT")
913
914 def testFileEnd1(self):
915 tz = tzfile(StringIO(base64.decodestring(self.EST5EDT)))
916 self.assertEqual(datetime(2003,10,26,0,59,tzinfo=tz).tzname(), "EDT")
917 self.assertEqual(datetime(2003,10,26,1,00,tzinfo=tz).tzname(), "EST")
918
919if __name__ == "__main__":
920 unittest.main()
921
922# vim:ts=4:sw=4