Code

6b04d518508b63eb0ee5d25b9fcc2bf7d54b2880
[roundup.git] / test / test_dates.py
1 #
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
3 # This module is free software, and you may redistribute it and/or modify
4 # under the same terms as Python, so long as this copyright message and
5 # disclaimer are retained in their original form.
6 #
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
10 # POSSIBILITY OF SUCH DAMAGE.
11 #
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 # FOR A PARTICULAR PURPOSE.  THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
17
18 # $Id: test_dates.py,v 1.10 2002-02-21 23:11:45 richard Exp $ 
20 import unittest, time
22 from roundup.date import Date, Interval
24 class DateTestCase(unittest.TestCase):
25     def testDateInterval(self):
26         ae = self.assertEqual
27         date = Date("2000-06-26.00:34:02 + 2d")
28         ae(str(date), '2000-06-28.00:34:02')
29         date = Date("2000-02-27 + 2d")
30         ae(str(date), '2000-02-29.00:00:00')
31         date = Date("2001-02-27 + 2d")
32         ae(str(date), '2001-03-01.00:00:00')
34     def testDate(self):
35         ae = self.assertEqual
36         date = Date("2000-04-17")
37         ae(str(date), '2000-04-17.00:00:00')
38         date = Date("2000-4-7")
39         ae(str(date), '2000-04-07.00:00:00')
40         date = Date("2000-4-17")
41         ae(str(date), '2000-04-17.00:00:00')
42         date = Date("01-25")
43         y, m, d, x, x, x, x, x, x = time.gmtime(time.time())
44         ae(str(date), '%s-01-25.00:00:00'%y)
45         date = Date("2000-04-17.03:45")
46         ae(str(date), '2000-04-17.03:45:00')
47         date = Date("08-13.22:13")
48         ae(str(date), '%s-08-13.22:13:00'%y)
49         date = Date("11-07.09:32:43")
50         ae(str(date), '%s-11-07.09:32:43'%y)
51         date = Date("14:25")
52         ae(str(date), '%s-%02d-%02d.14:25:00'%(y, m, d))
53         date = Date("8:47:11")
54         ae(str(date), '%s-%02d-%02d.08:47:11'%(y, m, d))
56     def testOffset(self):
57         ae = self.assertEqual
58         date = Date("2000-04-17", -5)
59         ae(str(date), '2000-04-17.00:00:00')
60         date = Date("01-25", -5)
61         y, m, d, x, x, x, x, x, x = time.gmtime(time.time())
62         ae(str(date), '%s-01-25.00:00:00'%y)
63         date = Date("2000-04-17.03:45", -5)
64         ae(str(date), '2000-04-17.08:45:00')
65         date = Date("08-13.22:13", -5)
66         ae(str(date), '%s-08-14.03:13:00'%y)
67         date = Date("11-07.09:32:43", -5)
68         ae(str(date), '%s-11-07.14:32:43'%y)
69         date = Date("14:25", -5)
70         ae(str(date), '%s-%02d-%02d.19:25:00'%(y, m, d))
71         date = Date("8:47:11", -5)
72         ae(str(date), '%s-%02d-%02d.13:47:11'%(y, m, d))
74         # now check calculations
75         date = Date('2000-01-01') + Interval('- 2y 2m')
76         ae(str(date), '1997-11-01.00:00:00')
77         date = Date('2000-01-01') + Interval('+ 2m')
78         ae(str(date), '2000-03-01.00:00:00')
80         date = Date('2000-01-01') + Interval('60d')
81         ae(str(date), '2000-03-01.00:00:00')
82         date = Date('2001-01-01') + Interval('60d')
83         ae(str(date), '2001-03-02.00:00:00')
85         date = Date('2000-02-28.23:59:59') + Interval('00:00:01')
86         ae(str(date), '2000-02-29.00:00:00')
87         date = Date('2001-02-28.23:59:59') + Interval('00:00:01')
88         ae(str(date), '2001-03-01.00:00:00')
90         date = Date('2000-02-28.23:58:59') + Interval('00:01:01')
91         ae(str(date), '2000-02-29.00:00:00')
92         date = Date('2001-02-28.23:58:59') + Interval('00:01:01')
93         ae(str(date), '2001-03-01.00:00:00')
95         date = Date('2000-02-28.22:58:59') + Interval('01:01:01')
96         ae(str(date), '2000-02-29.00:00:00')
97         date = Date('2001-02-28.22:58:59') + Interval('01:01:01')
98         ae(str(date), '2001-03-01.00:00:00')
100         date = Date('2000-02-28.22:58:59') + Interval('00:00:3661')
101         ae(str(date), '2000-02-29.00:00:00')
102         date = Date('2001-02-28.22:58:59') + Interval('00:00:3661')
103         ae(str(date), '2001-03-01.00:00:00')
105     def testInterval(self):
106         ae = self.assertEqual
107         ae(str(Interval('3y')), '+ 3y')
108         ae(str(Interval('2 y 1 m')), '+ 2y 1m')
109         ae(str(Interval('1m 25d')), '+ 1m 25d')
110         ae(str(Interval('-2w 3 d ')), '- 17d')
111         ae(str(Interval(' - 1 d 2:50 ')), '- 1d 2:50')
112         ae(str(Interval(' 14:00 ')), '+ 14:00')
113         ae(str(Interval(' 0:04:33 ')), '+ 0:04:33')
115 def suite():
116    return unittest.makeSuite(DateTestCase, 'test')
120 # $Log: not supported by cvs2svn $
121 # Revision 1.9  2002/02/21 06:57:39  richard
122 #  . Added popup help for classes using the classhelp html template function.
123 #    - add <display call="classhelp('priority', 'id,name,description')">
124 #      to an item page, and it generates a link to a popup window which displays
125 #      the id, name and description for the priority class. The description
126 #      field won't exist in most installations, but it will be added to the
127 #      default templates.
129 # Revision 1.8  2002/01/16 07:02:57  richard
130 #  . lots of date/interval related changes:
131 #    - more relaxed date format for input
133 # Revision 1.7  2001/08/13 23:01:53  richard
134 # fixed a 2.1-ism
136 # Revision 1.6  2001/08/07 00:24:43  richard
137 # stupid typo
139 # Revision 1.5  2001/08/07 00:15:51  richard
140 # Added the copyright/license notice to (nearly) all files at request of
141 # Bizar Software.
143 # Revision 1.4  2001/07/29 23:32:13  richard
144 # Fixed bug in unit test ;)
146 # Revision 1.3  2001/07/29 07:01:39  richard
147 # Added vim command to all source so that we don't get no steenkin' tabs :)
149 # Revision 1.2  2001/07/29 06:42:20  richard
150 # Added Interval tests.
152 # Revision 1.1  2001/07/27 06:55:07  richard
153 # moving tests -> test
155 # Revision 1.2  2001/07/25 04:34:31  richard
156 # Added id and log to tests files...
159 # vim: set filetype=python ts=4 sw=4 et si