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

Source Code for Module logilab.common.test.x

  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   
  8  from datetime import date, datetime, timedelta 
  9   
 10  try: 
 11      from mx.DateTime import Date as mxDate, DateTime as mxDateTime, \ 
 12           now as mxNow, RelativeDateTime, RelativeDate 
 13      from logilab.common.date import add_days_worked, nb_open_days, \ 
 14           get_national_holidays 
 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 asdasd 37 self.assertEquals(add(self.datecls(2008, 1, 3), 1), self.datecls(2008, 1, 4)) 38 self.assertEquals(add(self.datecls(2009, 6, 3), 1), self.datecls(2009, 6, 4)) 39 # skip week-end 40 self.assertEquals(add(self.datecls(2008, 1, 3), 2), self.datecls(2008, 1, 7)) 41 self.assertEquals(add(self.datecls(2009, 6, 5), 2), self.datecls(2009, 6, 9)) 42 # skip 2 week-ends 43 self.assertEquals(add(self.datecls(2008, 1, 3), 8), self.datecls(2008, 1, 15)) 44 self.assertEquals(add(self.datecls(2009, 6, 4), 9), self.datecls(2009, 6, 15)) 45 # skip holiday + week-end 46 self.assertEquals(add(self.datecls(2008, 4, 30), 2), self.datecls(2008, 5, 5)) 47 self.assertEquals(add(self.datecls(2009, 6, 4), 9), self.datecls(2009, 6, 15))
48
50 holidays = get_national_holidays 51 yield self.assertEquals, holidays(self.datecls(2008, 4, 29), self.datecls(2008, 5, 2)), \ 52 [self.datecls(2008, 5, 1)] 53 yield self.assertEquals, holidays(self.datecls(2008, 5, 7), self.datecls(2008, 5, 8)), [] 54 x = self.datetimecls(2008, 5, 7, 12, 12, 12) 55 yield self.assertEquals, holidays(x, x + self.timedeltacls(days=1)), []
56
58 nb = nb_open_days 59 x = self.now() 60 y = x - self.timedeltacls(seconds=1) 61 self.assertRaises(AssertionError, nb, x, y)
62
63 - def assertOpenDays(self, start, stop, expected):
64 got = nb_open_days(start, stop) 65 self.assertEquals(got, expected)
66
68 self.assertOpenDays(self.datecls(2008, 3, 4), self.datecls(2008, 3, 7), 3)
69
71 self.assertOpenDays(self.datecls(2008, 3, 4), self.datecls(2008, 3, 5), 1)
72
74 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 10), 1)
75
77 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 17), 6)
78
80 """week-end + easter monday""" 81 self.assertOpenDays(self.datecls(2008, 3, 18), self.datecls(2008, 3, 26), 5)
82
84 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 8), 1)
85
87 self.assertOpenDays(self.datecls(2008, 3, 7), self.datecls(2008, 3, 9), 1)
88
90 self.assertOpenDays(self.datecls(2008, 3, 8), self.datecls(2008, 3, 9), 0)
91
93 self.assertOpenDays(self.datecls(2008, 3, 8), self.datecls(2008, 3, 10), 0)
94
96 self.assertOpenDays(self.datecls(2008, 3, 8), self.datecls(2008, 3, 11), 1)
97
98 - def test_open_days_now_now(self):
99 x = self.now() 100 self.assertOpenDays(x, x, 0)
101
103 self.assertOpenDays(self.datetimecls(2008, 5, 7, 14), self.datetimecls(2008, 5, 8, 0), 1)
104
106 self.assertOpenDays(self.datetimecls(2008, 5, 9, 14), self.datetimecls(2008, 5, 10, 14), 1)
107
108 - def test_open_days_afternoon(self):
109 self.assertOpenDays(self.datetimecls(2008, 5, 6, 14), self.datetimecls(2008, 5, 7, 14), 1)
110 111
112 -class MxDateTC(DateTC):
113 datecls = mxDate 114 datetimecls = mxDateTime 115 timedeltacls = RelativeDateTime 116 now = mxNow 117
118 - def check_mx(self):
119 if mxDate is None: 120 self.skip('mx.DateTime is not installed')
121
122 - def setUp(self):
123 self.check_mx()
124
125 - def test_month(self):
126 """enumerate months""" 127 r = list(date_range(self.datecls(2000,1,2), self.datecls(2000,4,4), endOfMonth)) 128 expected = [self.datecls(2000,1,2), self.datecls(2000,2,29), self.datecls(2000,3,31)] 129 self.assertListEquals(r, expected) 130 r = list(date_range(self.datecls(2000,11,30), self.datecls(2001,2,3), endOfMonth)) 131 expected = [self.datecls(2000,11,30), self.datecls(2000,12,31), self.datecls(2001,1,31)] 132 self.assertListEquals(r, expected)
133 134 if __name__ == '__main__': 135 unittest_main() 136