File: unittest_date.py

package info (click to toggle)
logilab-common 0.30.0-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 892 kB
  • ctags: 1,818
  • sloc: python: 9,743; makefile: 41; sh: 8
file content (71 lines) | stat: -rw-r--r-- 2,935 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""
Unittests for date helpers
"""

from logilab.common.testlib import TestCase, unittest_main

from logilab.common.date import date_range

try:
    from mx.DateTime import Date, RelativeDate, now
    from logilab.common.date import endOfMonth, add_days_worked, nb_open_days
except ImportError:
    from datetime import date as Date
    endOfMonth = add_days_worked = nb_open_days = None

class DateTC(TestCase):
    
    def test_day(self):
        """enumerate days"""
        r = list(date_range(Date(2000,1,1), Date(2000,1,4)))
        expected = [Date(2000,1,1), Date(2000,1,2), Date(2000,1,3)]
        self.assertListEquals(r, expected)
        r = list(date_range(Date(2000,1,31), Date(2000,2,3)))
        expected = [Date(2000,1,31), Date(2000,2,1), Date(2000,2,2)]
        self.assertListEquals(r, expected)

    def test_month(self):
        """enumerate months"""
        if endOfMonth is None:
            self.skip('mx.DateTime is not installed')
        r = list(date_range(Date(2000,1,2), Date(2000,4,4), endOfMonth))
        expected = [Date(2000,1,2), Date(2000,2,29), Date(2000,3,31)]
        self.assertListEquals(r, expected)
        r = list(date_range(Date(2000,11,30), Date(2001,2,3), endOfMonth))
        expected = [Date(2000,11,30), Date(2000,12,31), Date(2001,1,31)]
        self.assertListEquals(r, expected)

    def test_add_days_worked(self):
        if add_days_worked is None:
            self.skip('mx.DateTime is not installed')
        add = add_days_worked
        # normal
        self.assertEquals(add(Date(2008, 1, 3), 1), Date(2008, 1, 4))
        # skip week-end
        self.assertEquals(add(Date(2008, 1, 3), 2), Date(2008, 1, 7))
        # skip 2 week-ends
        self.assertEquals(add(Date(2008, 1, 3), 8), Date(2008, 1, 15))
        # skip holiday + week-end
        self.assertEquals(add(Date(2008, 4, 30), 2), Date(2008, 5, 4))

    def test_nb_open_days(self):
        if nb_open_days is None:
            self.skip('mx.DateTime is not installed')
        nb = nb_open_days
        self.assertEquals(nb(Date(2008, 3, 4), Date(2008, 3, 7)), 3) 
        self.assertEquals(nb(Date(2008, 3, 4), Date(2008, 3, 5)), 1) 
        self.assertEquals(nb(Date(2008, 3, 7), Date(2008, 3, 10)), 1) 
        self.assertEquals(nb(Date(2008, 3, 7), Date(2008, 3, 17)), 6) 
        self.assertEquals(nb(Date(2008, 3, 18), Date(2008, 3, 26)), 5) 
        self.assertEquals(nb(Date(2008, 3, 7), Date(2008, 3, 8)), 1) 
        self.assertEquals(nb(Date(2008, 3, 7), Date(2008, 3, 9)), 1) 
        self.assertEquals(nb(Date(2008, 3, 8), Date(2008, 3, 9)), 0) 
        self.assertEquals(nb(Date(2008, 3, 8), Date(2008, 3, 10)), 0) 
        self.assertEquals(nb(Date(2008, 3, 8), Date(2008, 3, 11)), 1) 
        x = now()
        self.assertEquals(nb(x,x), 0)
        self.assertEquals(nb(x,x+0.5), 1)
        self.assertRaises(AssertionError, nb, x, x-1)
    
if __name__ == '__main__':
    unittest_main()