11from __future__ import with_statement
2- from datetime import timedelta , date , datetime
2+ import datetime
33
44from django .template import Template , Context , defaultfilters
55from django .test import TestCase
66from django .utils import translation , tzinfo
77from django .utils .translation import ugettext as _
88from django .utils .html import escape
9+ from django .utils .timezone import utc
910
1011
1112class HumanizeTests (TestCase ):
@@ -88,10 +89,10 @@ def test_apnumber(self):
8889 self .humanize_tester (test_list , result_list , 'apnumber' )
8990
9091 def test_naturalday (self ):
91- today = date .today ()
92- yesterday = today - timedelta (days = 1 )
93- tomorrow = today + timedelta (days = 1 )
94- someday = today - timedelta (days = 10 )
92+ today = datetime . date .today ()
93+ yesterday = today - datetime . timedelta (days = 1 )
94+ tomorrow = today + datetime . timedelta (days = 1 )
95+ someday = today - datetime . timedelta (days = 10 )
9596 notdate = u"I'm not a date value"
9697
9798 test_list = (today , yesterday , tomorrow , someday , notdate , None )
@@ -103,41 +104,46 @@ def test_naturalday(self):
103104 def test_naturalday_tz (self ):
104105 from django .contrib .humanize .templatetags .humanize import naturalday
105106
106- today = date .today ()
107- tz_one = tzinfo .FixedOffset (timedelta (hours = - 12 ))
108- tz_two = tzinfo .FixedOffset (timedelta (hours = 12 ))
107+ today = datetime . date .today ()
108+ tz_one = tzinfo .FixedOffset (datetime . timedelta (hours = - 12 ))
109+ tz_two = tzinfo .FixedOffset (datetime . timedelta (hours = 12 ))
109110
110111 # Can be today or yesterday
111- date_one = datetime (today .year , today .month , today .day , tzinfo = tz_one )
112+ date_one = datetime . datetime (today .year , today .month , today .day , tzinfo = tz_one )
112113 naturalday_one = naturalday (date_one )
113114 # Can be today or tomorrow
114- date_two = datetime (today .year , today .month , today .day , tzinfo = tz_two )
115+ date_two = datetime . datetime (today .year , today .month , today .day , tzinfo = tz_two )
115116 naturalday_two = naturalday (date_two )
116117
117118 # As 24h of difference they will never be the same
118119 self .assertNotEqual (naturalday_one , naturalday_two )
119120
120121 def test_naturaltime (self ):
122+ class naive (datetime .tzinfo ):
123+ def utcoffset (self , dt ):
124+ return None
121125 # we're going to mock datetime.datetime, so use a fixed datetime
122- now = datetime (2011 , 8 , 15 )
126+ now = datetime . datetime (2011 , 8 , 15 )
123127 test_list = [
124128 now ,
125- now - timedelta (seconds = 1 ),
126- now - timedelta (seconds = 30 ),
127- now - timedelta (minutes = 1 , seconds = 30 ),
128- now - timedelta (minutes = 2 ),
129- now - timedelta (hours = 1 , minutes = 30 , seconds = 30 ),
130- now - timedelta (hours = 23 , minutes = 50 , seconds = 50 ),
131- now - timedelta (days = 1 ),
132- now - timedelta (days = 500 ),
133- now + timedelta (seconds = 1 ),
134- now + timedelta (seconds = 30 ),
135- now + timedelta (minutes = 1 , seconds = 30 ),
136- now + timedelta (minutes = 2 ),
137- now + timedelta (hours = 1 , minutes = 30 , seconds = 30 ),
138- now + timedelta (hours = 23 , minutes = 50 , seconds = 50 ),
139- now + timedelta (days = 1 ),
140- now + timedelta (days = 500 ),
129+ now - datetime .timedelta (seconds = 1 ),
130+ now - datetime .timedelta (seconds = 30 ),
131+ now - datetime .timedelta (minutes = 1 , seconds = 30 ),
132+ now - datetime .timedelta (minutes = 2 ),
133+ now - datetime .timedelta (hours = 1 , minutes = 30 , seconds = 30 ),
134+ now - datetime .timedelta (hours = 23 , minutes = 50 , seconds = 50 ),
135+ now - datetime .timedelta (days = 1 ),
136+ now - datetime .timedelta (days = 500 ),
137+ now + datetime .timedelta (seconds = 1 ),
138+ now + datetime .timedelta (seconds = 30 ),
139+ now + datetime .timedelta (minutes = 1 , seconds = 30 ),
140+ now + datetime .timedelta (minutes = 2 ),
141+ now + datetime .timedelta (hours = 1 , minutes = 30 , seconds = 30 ),
142+ now + datetime .timedelta (hours = 23 , minutes = 50 , seconds = 50 ),
143+ now + datetime .timedelta (days = 1 ),
144+ now + datetime .timedelta (days = 500 ),
145+ now .replace (tzinfo = naive ()),
146+ now .replace (tzinfo = utc ),
141147 ]
142148 result_list = [
143149 'now' ,
@@ -157,14 +163,20 @@ def test_naturaltime(self):
157163 '23 hours from now' ,
158164 '1 day from now' ,
159165 '1 year, 4 months from now' ,
166+ 'now' ,
167+ 'now' ,
160168 ]
161169
162170 # mock out datetime so these tests don't fail occasionally when the
163171 # test runs too slow
164- class MockDateTime (datetime ):
172+ class MockDateTime (datetime . datetime ):
165173 @classmethod
166- def now (self ):
167- return now
174+ def now (self , tz = None ):
175+ if tz is None or tz .utcoffset (now ) is None :
176+ return now
177+ else :
178+ # equals now.replace(tzinfo=utc)
179+ return now .replace (tzinfo = tz ) + tz .utcoffset (now )
168180
169181 # naturaltime also calls timesince/timeuntil
170182 from django .contrib .humanize .templatetags import humanize
0 commit comments