blob: 2dc486fee8963daee089e3c8c9ce2e1973da0945 [file] [log] [blame]
Fred Draked077ca12001-12-12 05:38:08 +00001import calendar
2import unittest
3
Walter Dörwald21d3a322003-05-01 17:45:56 +00004from test import test_support
Fred Draked077ca12001-12-12 05:38:08 +00005
6
7class CalendarTestCase(unittest.TestCase):
8 def test_isleap(self):
9 # Make sure that the return is right for a few years, and
10 # ensure that the return values are 1 or 0, not just true or
11 # false (see SF bug #485794). Specific additional tests may
12 # be appropriate; this tests a single "cycle".
13 self.assertEqual(calendar.isleap(2000), 1)
14 self.assertEqual(calendar.isleap(2001), 0)
15 self.assertEqual(calendar.isleap(2002), 0)
16 self.assertEqual(calendar.isleap(2003), 0)
17
18 def test_setfirstweekday(self):
19 self.assertRaises(ValueError, calendar.setfirstweekday, 'flabber')
20 self.assertRaises(ValueError, calendar.setfirstweekday, -1)
21 self.assertRaises(ValueError, calendar.setfirstweekday, 200)
22 orig = calendar.firstweekday()
23 calendar.setfirstweekday(calendar.SUNDAY)
24 self.assertEqual(calendar.firstweekday(), calendar.SUNDAY)
25 calendar.setfirstweekday(calendar.MONDAY)
26 self.assertEqual(calendar.firstweekday(), calendar.MONDAY)
27 calendar.setfirstweekday(orig)
28
Skip Montanaro693c6c42002-03-15 03:57:04 +000029 def test_enumerateweekdays(self):
30 self.assertRaises(IndexError, calendar.day_abbr.__getitem__, -10)
31 self.assertRaises(IndexError, calendar.day_name.__getitem__, 10)
32 self.assertEqual(len([d for d in calendar.day_abbr]), 7)
Fred Draked077ca12001-12-12 05:38:08 +000033
Tim Peters0c2c8e72002-03-23 03:26:53 +000034 def test_days(self):
35 for attr in "day_name", "day_abbr":
36 value = getattr(calendar, attr)
37 self.assertEqual(len(value), 7)
38 self.assertEqual(len(value[:]), 7)
39 # ensure they're all unique
40 d = {}
41 for v in value:
42 d[v] = 1
43 self.assertEqual(len(d), 7)
44
45 def test_months(self):
46 for attr in "month_name", "month_abbr":
47 value = getattr(calendar, attr)
48 self.assertEqual(len(value), 13)
49 self.assertEqual(len(value[:]), 13)
50 self.assertEqual(value[0], "")
51 # ensure they're all unique
52 d = {}
53 for v in value:
54 d[v] = 1
55 self.assertEqual(len(d), 13)
56
Walter Dörwald59ad4562004-07-02 19:00:09 +000057
58class MonthCalendarTestCase(unittest.TestCase):
59 def setUp(self):
60 self.oldfirstweekday = calendar.firstweekday()
61 calendar.setfirstweekday(self.firstweekday)
62
63 def tearDown(self):
64 calendar.setfirstweekday(self.oldfirstweekday)
65
66 def check_weeks(self, year, month, weeks):
67 cal = calendar.monthcalendar(year, month)
68 self.assertEqual(len(cal), len(weeks))
69 for i in xrange(len(weeks)):
70 self.assertEqual(weeks[i], sum(day != 0 for day in cal[i]))
71
72
73class MondayTestCase(MonthCalendarTestCase):
74 firstweekday = calendar.MONDAY
75
76 def test_february(self):
77 # A 28-day february starting of monday (7+7+7+7 days)
78 self.check_weeks(1999, 2, (7, 7, 7, 7))
79
80 # A 28-day february starting of tuesday (6+7+7+7+1 days)
81 self.check_weeks(2005, 2, (6, 7, 7, 7, 1))
82
83 # A 28-day february starting of sunday (1+7+7+7+6 days)
84 self.check_weeks(1987, 2, (1, 7, 7, 7, 6))
85
86 # A 29-day february starting of monday (7+7+7+7+1 days)
87 self.check_weeks(1988, 2, (7, 7, 7, 7, 1))
88
89 # A 29-day february starting of tuesday (6+7+7+7+2 days)
90 self.check_weeks(1972, 2, (6, 7, 7, 7, 2))
91
92 # A 29-day february starting of sunday (1+7+7+7+7 days)
93 self.check_weeks(2004, 2, (1, 7, 7, 7, 7))
94
95 def test_april(self):
96 # A 30-day april starting of monday (7+7+7+7+2 days)
97 self.check_weeks(1935, 4, (7, 7, 7, 7, 2))
98
99 # A 30-day april starting of tuesday (6+7+7+7+3 days)
100 self.check_weeks(1975, 4, (6, 7, 7, 7, 3))
101
102 # A 30-day april starting of sunday (1+7+7+7+7+1 days)
103 self.check_weeks(1945, 4, (1, 7, 7, 7, 7, 1))
104
105 # A 30-day april starting of saturday (2+7+7+7+7 days)
106 self.check_weeks(1995, 4, (2, 7, 7, 7, 7))
107
108 # A 30-day april starting of friday (3+7+7+7+6 days)
109 self.check_weeks(1994, 4, (3, 7, 7, 7, 6))
110
111 def test_december(self):
112 # A 31-day december starting of monday (7+7+7+7+3 days)
113 self.check_weeks(1980, 12, (7, 7, 7, 7, 3))
114
115 # A 31-day december starting of tuesday (6+7+7+7+4 days)
116 self.check_weeks(1987, 12, (6, 7, 7, 7, 4))
117
118 # A 31-day december starting of sunday (1+7+7+7+7+2 days)
119 self.check_weeks(1968, 12, (1, 7, 7, 7, 7, 2))
120
121 # A 31-day december starting of thursday (4+7+7+7+6 days)
122 self.check_weeks(1988, 12, (4, 7, 7, 7, 6))
123
124 # A 31-day december starting of friday (3+7+7+7+7 days)
125 self.check_weeks(2017, 12, (3, 7, 7, 7, 7))
126
127 # A 31-day december starting of saturday (2+7+7+7+7+1 days)
128 self.check_weeks(2068, 12, (2, 7, 7, 7, 7, 1))
129
130
Walter Dörwald302fa6d2004-07-08 17:14:17 +0000131class SundayTestCase(MonthCalendarTestCase):
132 firstweekday = calendar.SUNDAY
133
134 def test_february(self):
135 # A 28-day february starting of sunday (7+7+7+7 days)
136 self.check_weeks(2009, 2, (7, 7, 7, 7))
137
138 # A 28-day february starting of monday (6+7+7+7+1 days)
139 self.check_weeks(1999, 2, (6, 7, 7, 7, 1))
140
141 # A 28-day february starting of saturday (1+7+7+7+6 days)
142 self.check_weeks(1997, 2, (1, 7, 7, 7, 6))
143
144 # A 29-day february starting of sunday (7+7+7+7+1 days)
145 self.check_weeks(2004, 2, (7, 7, 7, 7, 1))
146
147 # A 29-day february starting of monday (6+7+7+7+2 days)
148 self.check_weeks(1960, 2, (6, 7, 7, 7, 2))
149
150 # A 29-day february starting of saturday (1+7+7+7+7 days)
151 self.check_weeks(1964, 2, (1, 7, 7, 7, 7))
152
153 def test_april(self):
154 # A 30-day april starting of sunday (7+7+7+7+2 days)
155 self.check_weeks(1923, 4, (7, 7, 7, 7, 2))
156
157 # A 30-day april starting of monday (6+7+7+7+3 days)
158 self.check_weeks(1918, 4, (6, 7, 7, 7, 3))
159
160 # A 30-day april starting of saturday (1+7+7+7+7+1 days)
161 self.check_weeks(1950, 4, (1, 7, 7, 7, 7, 1))
162
163 # A 30-day april starting of friday (2+7+7+7+7 days)
164 self.check_weeks(1960, 4, (2, 7, 7, 7, 7))
165
166 # A 30-day april starting of thursday (3+7+7+7+6 days)
167 self.check_weeks(1909, 4, (3, 7, 7, 7, 6))
168
169 def test_december(self):
170 # A 31-day december starting of sunday (7+7+7+7+3 days)
171 self.check_weeks(2080, 12, (7, 7, 7, 7, 3))
172
173 # A 31-day december starting of monday (6+7+7+7+4 days)
174 self.check_weeks(1941, 12, (6, 7, 7, 7, 4))
175
176 # A 31-day december starting of saturday (1+7+7+7+7+2 days)
177 self.check_weeks(1923, 12, (1, 7, 7, 7, 7, 2))
178
179 # A 31-day december starting of wednesday (4+7+7+7+6 days)
180 self.check_weeks(1948, 12, (4, 7, 7, 7, 6))
181
182 # A 31-day december starting of thursday (3+7+7+7+7 days)
183 self.check_weeks(1927, 12, (3, 7, 7, 7, 7))
184
185 # A 31-day december starting of friday (2+7+7+7+7+1 days)
186 self.check_weeks(1995, 12, (2, 7, 7, 7, 7, 1))
187
188
Fred Draked077ca12001-12-12 05:38:08 +0000189def test_main():
Walter Dörwald59ad4562004-07-02 19:00:09 +0000190 test_support.run_unittest(
191 CalendarTestCase,
Walter Dörwald302fa6d2004-07-08 17:14:17 +0000192 MondayTestCase,
193 SundayTestCase
Walter Dörwald59ad4562004-07-02 19:00:09 +0000194 )
195
Fred Draked077ca12001-12-12 05:38:08 +0000196
197if __name__ == "__main__":
198 test_main()