Package logilab :: Package common :: Package test :: Module unittest_date
[frames] | no frames]

Source Code for Module logilab.common.test.unittest_date

  1  """ 
  2  Unittests for date helpers 
  3  """ 
  4  from logilab.common.testlib import TestCase, unittest_main 
  5   
  6  from logilab.common.date import date_range, endOfMonth 
  7  from logilab.common.date import add_days_worked, nb_open_days, \ 
  8           get_national_holidays 
  9   
 10  from datetime import date, datetime, timedelta 
 11   
 12  try: 
 13      from mx.DateTime import Date as mxDate, DateTime as mxDateTime, \ 
 14           now as mxNow, RelativeDateTime, RelativeDate 
 15  except ImportError: 
 16      mxDate = mxDateTime = RelativeDateTime = mxNow = None 
 17   
18 -class DateTC(TestCase):
19 datecls = date 20 datetimecls = datetime 21 timedeltacls = timedelta 22 now = datetime.now 23
24 - def test_day(self):
25 """enumerate days""" 26 r = list(date_range(self.datecls(2000,1,1), self.datecls(2000,1,4))) 27 expected = [self.datecls(2000,1,1), self.datecls(2000,1,2), self.datecls(2000,1,3)] 28 self.assertListEquals(r, expected) 29 r = list(date_range(self.datecls(2000,1,31), self.datecls(2000,2,3))) 30 expected = [self.datecls(2000,1,31), self.datecls(2000,2,1), self.datecls(2000,2,2)] 31 self.assertListEquals(r, expected)
32
33 - def test_add_days_worked(self):
34 add = add_days_worked 35 # normal 36 self.assertEquals(add(self.datecls(2008, 1, 3), 1), self.datecls(2008, 1, 4)) 37 # skip week-end 38 self.assertEquals(add(self.datecls(2008, 1, 3), 2), self.datecls(2008, 1, 7)) 39 # skip 2 week-ends 40 self.assertEquals(add(self.datecls(2008, 1, 3), 8), self.datecls(2008, 1, 15)) 41 # skip holiday + week-end 42 self.assertEquals(add(self.datecls(2008, 4, 30), 2), self.datecls(2008, 5, 5))
43
45 holidays = get_national_holidays 46 yield self.assertEquals, holidays(self.datecls(2008, 4, 29), self.datecls(2008, 5, 2)), \ 47 [self.datecls(2008, 5, 1)] 48 yield self.assertEquals, holidays(self.datecls(2008, 5, 7), self.datecls(2008, 5, 8)), [] 49 x = self.datetimecls(2008, 5, 7, 12, 12, 12) 50 yield self.assertEquals, holidays(x, x + self.timedeltacls(days=1)), []
51
53 nb = nb_open_days 54 x = self.now() 55 y = x - self.timedeltacls(seconds=1) 56 self.assertRaises(AssertionError, nb, x, y)
57
58 - def assertOpenDays(self, start, stop, expected):
59 got = nb_open_days(start, stop) 60 self.assertEquals(got, expected)
61
63 self.assertOpenDays(self.datecls(2008, 3, 4), self.datecls(2008, 3, 7), 3)
64
66 self.assertOpenDays(self.datecls(2008, 3, 4), self.datecls(2008, 3, 5), 1)
67
69 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 10), 1)
70
72 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 17), 6)
73
75 """week-end + easter monday""" 76 self.assertOpenDays(self.datecls(2008, 3, 18), self.datecls(2008, 3, 26), 5)
77
79 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 8), 1)
80
82 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 9), 1)
83
85 self.assertOpenDays(self.datecls(2008, 3, 8), self.datecls(2008, 3, 9), 0)
86
88 self.assertOpenDays(self.datecls(2008, 3, 8), self.datecls(2008, 3, 10), 0)
89
91 self.assertOpenDays(self.datecls(2008, 3, 8), self.datecls(2008, 3, 11), 1)
92
93 - def test_open_days_now_now(self):
94 x = self.now() 95 self.assertOpenDays(x, x, 0)
96
98 self.assertOpenDays(self.datetimecls(2008, 5, 7, 14), self.datetimecls(2008, 5, 8, 0), 1)
99
101 self.assertOpenDays(self.datetimecls(2008, 5, 9, 14), self.datetimecls(2008, 5, 10, 14), 1)
102
103 - def test_open_days_afternoon(self):
104 self.assertOpenDays(self.datetimecls(2008, 5, 6, 14), self.datetimecls(2008, 5, 7, 14), 1)
105 106
107 -class MxDateTC(DateTC):
108 datecls = mxDate 109 datetimecls = mxDateTime 110 timedeltacls = RelativeDateTime 111 now = mxNow 112
113 - def check_mx(self):
114 if mxDate is None: 115 self.skip('mx.DateTime is not installed')
116
117 - def setUp(self):
118 self.check_mx()
119
120 - def test_month(self):
121 """enumerate months""" 122 r = list(date_range(self.datecls(2000,1,2), self.datecls(2000,4,4), endOfMonth)) 123 expected = [self.datecls(2000,1,2), self.datecls(2000,2,29), self.datecls(2000,3,31)] 124 self.assertListEquals(r, expected) 125 r = list(date_range(self.datecls(2000,11,30), self.datecls(2001,2,3), endOfMonth)) 126 expected = [self.datecls(2000,11,30), self.datecls(2000,12,31), self.datecls(2001,1,31)] 127 self.assertListEquals(r, expected)
128 129 if __name__ == '__main__': 130 unittest_main() 131