|
9 | 9 | HolidayCalendarFactory, next_workday, previous_workday,
|
10 | 10 | before_nearest_workday, EasterMonday, GoodFriday,
|
11 | 11 | after_nearest_workday, weekend_to_monday)
|
| 12 | +from pytz import utc |
12 | 13 | import nose
|
13 | 14 |
|
14 | 15 | class TestCalendar(tm.TestCase):
|
@@ -55,87 +56,119 @@ def setUp(self):
|
55 | 56 | self.start_date = datetime(2011, 1, 1)
|
56 | 57 | self.end_date = datetime(2020, 12, 31)
|
57 | 58 |
|
| 59 | + def check_results(self, holiday, start, end, expected): |
| 60 | + self.assertEqual(list(holiday.dates(start, end)), expected) |
| 61 | + # Verify that timezone info is preserved. |
| 62 | + self.assertEqual( |
| 63 | + list( |
| 64 | + holiday.dates( |
| 65 | + utc.localize(Timestamp(start)), |
| 66 | + utc.localize(Timestamp(end)), |
| 67 | + ) |
| 68 | + ), |
| 69 | + [utc.localize(dt) for dt in expected], |
| 70 | + ) |
| 71 | + |
58 | 72 | def test_usmemorialday(self):
|
59 |
| - holidays = USMemorialDay.dates(self.start_date, |
60 |
| - self.end_date) |
61 |
| - holidayList = [ |
62 |
| - datetime(2011, 5, 30), |
63 |
| - datetime(2012, 5, 28), |
64 |
| - datetime(2013, 5, 27), |
65 |
| - datetime(2014, 5, 26), |
66 |
| - datetime(2015, 5, 25), |
67 |
| - datetime(2016, 5, 30), |
68 |
| - datetime(2017, 5, 29), |
69 |
| - datetime(2018, 5, 28), |
70 |
| - datetime(2019, 5, 27), |
71 |
| - datetime(2020, 5, 25), |
72 |
| - ] |
73 |
| - self.assertEqual(list(holidays), holidayList) |
| 73 | + self.check_results( |
| 74 | + holiday=USMemorialDay, |
| 75 | + start=self.start_date, |
| 76 | + end=self.end_date, |
| 77 | + expected=[ |
| 78 | + datetime(2011, 5, 30), |
| 79 | + datetime(2012, 5, 28), |
| 80 | + datetime(2013, 5, 27), |
| 81 | + datetime(2014, 5, 26), |
| 82 | + datetime(2015, 5, 25), |
| 83 | + datetime(2016, 5, 30), |
| 84 | + datetime(2017, 5, 29), |
| 85 | + datetime(2018, 5, 28), |
| 86 | + datetime(2019, 5, 27), |
| 87 | + datetime(2020, 5, 25), |
| 88 | + ], |
| 89 | + ) |
74 | 90 |
|
75 | 91 | def test_non_observed_holiday(self):
|
76 |
| - july_3rd = Holiday('July 4th Eve', month=7, day=3) |
77 |
| - result = july_3rd.dates("2001-01-01", "2003-03-03") |
78 |
| - expected = [Timestamp('2001-07-03 00:00:00'), |
79 |
| - Timestamp('2002-07-03 00:00:00')] |
80 |
| - self.assertEqual(list(result), expected) |
81 |
| - july_3rd = Holiday('July 4th Eve', month=7, day=3, |
82 |
| - days_of_week=(0, 1, 2, 3)) |
83 |
| - result = july_3rd.dates("2001-01-01", "2008-03-03") |
84 |
| - expected = [Timestamp('2001-07-03 00:00:00'), |
85 |
| - Timestamp('2002-07-03 00:00:00'), |
86 |
| - Timestamp('2003-07-03 00:00:00'), |
87 |
| - Timestamp('2006-07-03 00:00:00'), |
88 |
| - Timestamp('2007-07-03 00:00:00')] |
89 |
| - self.assertEqual(list(result), expected) |
| 92 | + |
| 93 | + self.check_results( |
| 94 | + Holiday('July 4th Eve', month=7, day=3), |
| 95 | + start="2001-01-01", |
| 96 | + end="2003-03-03", |
| 97 | + expected=[ |
| 98 | + Timestamp('2001-07-03 00:00:00'), |
| 99 | + Timestamp('2002-07-03 00:00:00') |
| 100 | + ] |
| 101 | + ) |
| 102 | + |
| 103 | + self.check_results( |
| 104 | + Holiday('July 4th Eve', month=7, day=3, days_of_week=(0, 1, 2, 3)), |
| 105 | + start="2001-01-01", |
| 106 | + end="2008-03-03", |
| 107 | + expected=[ |
| 108 | + Timestamp('2001-07-03 00:00:00'), |
| 109 | + Timestamp('2002-07-03 00:00:00'), |
| 110 | + Timestamp('2003-07-03 00:00:00'), |
| 111 | + Timestamp('2006-07-03 00:00:00'), |
| 112 | + Timestamp('2007-07-03 00:00:00'), |
| 113 | + ] |
| 114 | + ) |
90 | 115 |
|
91 | 116 | def test_easter(self):
|
92 |
| - holidays = EasterMonday.dates(self.start_date, |
93 |
| - self.end_date) |
94 |
| - holidayList = [Timestamp('2011-04-25 00:00:00'), |
95 |
| - Timestamp('2012-04-09 00:00:00'), |
96 |
| - Timestamp('2013-04-01 00:00:00'), |
97 |
| - Timestamp('2014-04-21 00:00:00'), |
98 |
| - Timestamp('2015-04-06 00:00:00'), |
99 |
| - Timestamp('2016-03-28 00:00:00'), |
100 |
| - Timestamp('2017-04-17 00:00:00'), |
101 |
| - Timestamp('2018-04-02 00:00:00'), |
102 |
| - Timestamp('2019-04-22 00:00:00'), |
103 |
| - Timestamp('2020-04-13 00:00:00')] |
104 |
| - |
105 |
| - |
106 |
| - self.assertEqual(list(holidays), holidayList) |
107 |
| - holidays = GoodFriday.dates(self.start_date, |
108 |
| - self.end_date) |
109 |
| - holidayList = [Timestamp('2011-04-22 00:00:00'), |
110 |
| - Timestamp('2012-04-06 00:00:00'), |
111 |
| - Timestamp('2013-03-29 00:00:00'), |
112 |
| - Timestamp('2014-04-18 00:00:00'), |
113 |
| - Timestamp('2015-04-03 00:00:00'), |
114 |
| - Timestamp('2016-03-25 00:00:00'), |
115 |
| - Timestamp('2017-04-14 00:00:00'), |
116 |
| - Timestamp('2018-03-30 00:00:00'), |
117 |
| - Timestamp('2019-04-19 00:00:00'), |
118 |
| - Timestamp('2020-04-10 00:00:00')] |
119 |
| - self.assertEqual(list(holidays), holidayList) |
120 |
| - |
| 117 | + |
| 118 | + self.check_results( |
| 119 | + EasterMonday, |
| 120 | + start=self.start_date, |
| 121 | + end=self.end_date, |
| 122 | + expected=[ |
| 123 | + Timestamp('2011-04-25 00:00:00'), |
| 124 | + Timestamp('2012-04-09 00:00:00'), |
| 125 | + Timestamp('2013-04-01 00:00:00'), |
| 126 | + Timestamp('2014-04-21 00:00:00'), |
| 127 | + Timestamp('2015-04-06 00:00:00'), |
| 128 | + Timestamp('2016-03-28 00:00:00'), |
| 129 | + Timestamp('2017-04-17 00:00:00'), |
| 130 | + Timestamp('2018-04-02 00:00:00'), |
| 131 | + Timestamp('2019-04-22 00:00:00'), |
| 132 | + Timestamp('2020-04-13 00:00:00'), |
| 133 | + ], |
| 134 | + ) |
| 135 | + self.check_results( |
| 136 | + GoodFriday, |
| 137 | + start=self.start_date, |
| 138 | + end=self.end_date, |
| 139 | + expected=[ |
| 140 | + Timestamp('2011-04-22 00:00:00'), |
| 141 | + Timestamp('2012-04-06 00:00:00'), |
| 142 | + Timestamp('2013-03-29 00:00:00'), |
| 143 | + Timestamp('2014-04-18 00:00:00'), |
| 144 | + Timestamp('2015-04-03 00:00:00'), |
| 145 | + Timestamp('2016-03-25 00:00:00'), |
| 146 | + Timestamp('2017-04-14 00:00:00'), |
| 147 | + Timestamp('2018-03-30 00:00:00'), |
| 148 | + Timestamp('2019-04-19 00:00:00'), |
| 149 | + Timestamp('2020-04-10 00:00:00'), |
| 150 | + ], |
| 151 | + ) |
121 | 152 |
|
122 | 153 | def test_usthanksgivingday(self):
|
123 |
| - holidays = USThanksgivingDay.dates(self.start_date, |
124 |
| - self.end_date) |
125 |
| - holidayList = [ |
126 |
| - datetime(2011, 11, 24), |
127 |
| - datetime(2012, 11, 22), |
128 |
| - datetime(2013, 11, 28), |
129 |
| - datetime(2014, 11, 27), |
130 |
| - datetime(2015, 11, 26), |
131 |
| - datetime(2016, 11, 24), |
132 |
| - datetime(2017, 11, 23), |
133 |
| - datetime(2018, 11, 22), |
134 |
| - datetime(2019, 11, 28), |
135 |
| - datetime(2020, 11, 26), |
136 |
| - ] |
137 |
| - |
138 |
| - self.assertEqual(list(holidays), holidayList) |
| 154 | + |
| 155 | + self.check_results( |
| 156 | + USThanksgivingDay, |
| 157 | + start=self.start_date, |
| 158 | + end=self.end_date, |
| 159 | + expected=[ |
| 160 | + datetime(2011, 11, 24), |
| 161 | + datetime(2012, 11, 22), |
| 162 | + datetime(2013, 11, 28), |
| 163 | + datetime(2014, 11, 27), |
| 164 | + datetime(2015, 11, 26), |
| 165 | + datetime(2016, 11, 24), |
| 166 | + datetime(2017, 11, 23), |
| 167 | + datetime(2018, 11, 22), |
| 168 | + datetime(2019, 11, 28), |
| 169 | + datetime(2020, 11, 26), |
| 170 | + ], |
| 171 | + ) |
139 | 172 |
|
140 | 173 | def test_argument_types(self):
|
141 | 174 | holidays = USThanksgivingDay.dates(self.start_date,
|
|
0 commit comments