Added support for time zones. Thanks Luke Plant for the review. Fixed… · django/django@9b1cb75
11from __future__ import with_statement
2-from datetime import timedelta, date, datetime
2+import datetime
3344from 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
91010111112class HumanizeTests(TestCase):
@@ -88,10 +89,10 @@ def test_apnumber(self):
8889self.humanize_tester(test_list, result_list, 'apnumber')
89909091def 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)
9596notdate = u"I'm not a date value"
96979798test_list = (today, yesterday, tomorrow, someday, notdate, None)
@@ -103,41 +104,46 @@ def test_naturalday(self):
103104def test_naturalday_tz(self):
104105from django.contrib.humanize.templatetags.humanize import naturalday
105106106-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))
109110110111# 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)
112113naturalday_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)
115116naturalday_two = naturalday(date_two)
116117117118# As 24h of difference they will never be the same
118119self.assertNotEqual(naturalday_one, naturalday_two)
119120120121def 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)
123127test_list = [
124128now,
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 ]
142148result_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 ]
161169162170# 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)
168180169181# naturaltime also calls timesince/timeuntil
170182from django.contrib.humanize.templatetags import humanize