Added support for time zones. Thanks Luke Plant for the review. Fixed… · django/django@9b1cb75

11

from __future__ import with_statement

2-

from datetime import timedelta, date, datetime

2+

import datetime

3344

from django.template import Template, Context, defaultfilters

55

from django.test import TestCase

66

from django.utils import translation, tzinfo

77

from django.utils.translation import ugettext as _

88

from django.utils.html import escape

9+

from django.utils.timezone import utc

91010111112

class HumanizeTests(TestCase):

@@ -88,10 +89,10 @@ def test_apnumber(self):

8889

self.humanize_tester(test_list, result_list, 'apnumber')

89909091

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"

96979798

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

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)

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)

116117117118

# As 24h of difference they will never be the same

118119

self.assertNotEqual(naturalday_one, naturalday_two)

119120120121

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

]

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

170182

from django.contrib.humanize.templatetags import humanize