Review for Python issue 5094 - Code Review (original) (raw)
OLD
NEW
1 """Test date/time type.
1 """Test date/time type.
2
2
3 See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
3 See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
4 """
4 """
5
5
6 import os
6 import os
7 import pickle
7 import pickle
8 import cPickle
8 import cPickle
9 import unittest
9 import unittest
10
10
11 from test import test_support
11 from test import test_support
12
12
13 from datetime import MINYEAR, MAXYEAR
13 from datetime import MINYEAR, MAXYEAR
14 from datetime import timedelta
14 from datetime import timedelta
15 from datetime import tzinfo
15 from datetime import tzinfo
16 from datetime import time
16 from datetime import time
17 from datetime import UTC
17 from datetime import date, datetime
18 from datetime import date, datetime
18
19
19 pickle_choices = [(pickler, unpickler, proto)
20 pickle_choices = [(pickler, unpickler, proto)
20 for pickler in pickle, cPickle
21 for pickler in pickle, cPickle
21 for unpickler in pickle, cPickle
22 for unpickler in pickle, cPickle
22 for proto in range(3)]
23 for proto in range(3)]
23 assert len(pickle_choices) == 2*2*3
24 assert len(pickle_choices) == 2*2*3
24
25
25 # An arbitrary collection of objects of non-datetime types, for testing
26 # An arbitrary collection of objects of non-datetime types, for testing
26 # mixed-type comparisons.
27 # mixed-type comparisons.
27 OTHERSTUFF = (10, 10L, 34.5, "abc", {}, [], ())
28 OTHERSTUFF = (10, 10L, 34.5, "abc", {}, [], ())
28
29
29
30
30 #############################################################################
31 #############################################################################
31 # module tests
32 # module tests
32
33
33 class TestModule(unittest.TestCase):
34 class TestModule(unittest.TestCase):
34
35
35 def test_constants(self):
36 def test_constants(self):
36 import datetime
37 import datetime
37 self.assertEqual(datetime.MINYEAR, 1)
38 self.assertEqual(datetime.MINYEAR, 1)
38 self.assertEqual(datetime.MAXYEAR, 9999)
39 self.assertEqual(datetime.MAXYEAR, 9999)
39
40
40 #############################################################################
41 #############################################################################
41 # tzinfo tests
42 # tzinfo tests
42
43
43 class FixedOffset(tzinfo):
44 class FixedOffset(tzinfo):
45
44 def __init__(self, offset, name, dstoffset=42):
46 def __init__(self, offset, name, dstoffset=42):
45 if isinstance(offset, int):
47 if isinstance(offset, int):
46 offset = timedelta(minutes=offset)
48 offset = timedelta(minutes=offset)
47 if isinstance(dstoffset, int):
49 if isinstance(dstoffset, int):
48 dstoffset = timedelta(minutes=dstoffset)
50 dstoffset = timedelta(minutes=dstoffset)
49 self.__offset = offset
51 self.__offset = offset
50 self.__name = name
52 self.__name = name
51 self.__dstoffset = dstoffset
53 self.__dstoffset = dstoffset
52 def __repr__(self):
54 def __repr__(self):
53 return self.__name.lower()
55 return self.__name.lower()
54 def utcoffset(self, dt):
56 def utcoffset(self, dt):
55 return self.__offset
57 return self.__offset
56 def tzname(self, dt):
58 def tzname(self, dt):
57 return self.__name
59 return self.__name
58 def dst(self, dt):
60 def dst(self, dt):
59 return self.__dstoffset
61 return self.__dstoffset
60
62
61 class PicklableFixedOffset(FixedOffset):
63 class PicklableFixedOffset(FixedOffset):
64
62 def __init__(self, offset=None, name=None, dstoffset=None):
65 def __init__(self, offset=None, name=None, dstoffset=None):
63 FixedOffset.__init__(self, offset, name, dstoffset)
66 FixedOffset.__init__(self, offset, name, dstoffset)
64
67
65 class TestTZInfo(unittest.TestCase):
68 class TestTZInfo(unittest.TestCase):
66
69
67 def test_non_abstractness(self):
70 def test_non_abstractness(self):
68 # In order to allow subclasses to get pickled, the C implementation
71 # In order to allow subclasses to get pickled, the C implementation
69 # wasn't able to get away with having __init__ raise
72 # wasn't able to get away with having __init__ raise
70 # NotImplementedError.
73 # NotImplementedError.
71 useless = tzinfo()
74 useless = tzinfo()
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading...
116 self.assertEqual(orig.utcoffset(None), offset)
119 self.assertEqual(orig.utcoffset(None), offset)
117 self.assertEqual(orig.tzname(None), 'cookie')
120 self.assertEqual(orig.tzname(None), 'cookie')
118 for pickler, unpickler, proto in pickle_choices:
121 for pickler, unpickler, proto in pickle_choices:
119 green = pickler.dumps(orig, proto)
122 green = pickler.dumps(orig, proto)
120 derived = unpickler.loads(green)
123 derived = unpickler.loads(green)
121 self.failUnless(isinstance(derived, tzinfo))
124 self.failUnless(isinstance(derived, tzinfo))
122 self.failUnless(type(derived) is PicklableFixedOffset)
125 self.failUnless(type(derived) is PicklableFixedOffset)
123 self.assertEqual(derived.utcoffset(None), offset)
126 self.assertEqual(derived.utcoffset(None), offset)
124 self.assertEqual(derived.tzname(None), 'cookie')
127 self.assertEqual(derived.tzname(None), 'cookie')
125
128
129 class TestUTC(unittest.TestCase):
130
131 def test_inheritance(self):
132 self.assertTrue(isinstance(UTC(), tzinfo))
133
134 def test_utcoffset(self):
135 self.assertEquals(timedelta(0), UTC().utcoffset(None))
136 self.assertEquals(timedelta(0), UTC().utcoffset(datetime(2009, 1, 1)))
137
138 def test_dst(self):
139 self.assertEquals(timedelta(0), UTC().dst(None))
140 self.assertEquals(timedelta(0), UTC().dst(datetime(2009, 1, 1)))
141 ········
142 def test_tzname(self):
143 self.assertEquals('UTC', UTC().tzname(None))
144 self.assertEquals('UTC', UTC().tzname(datetime(2009, 1, 1)))
145
126 #############################################################################
146 #############################################################################
127 # Base clase for testing a particular aspect of timedelta, time, date and
147 # Base clase for testing a particular aspect of timedelta, time, date and
128 # datetime comparisons.
148 # datetime comparisons.
129
149
130 class HarmlessMixedComparison:
150 class HarmlessMixedComparison:
151
131 # Test that __eq__ and __ne__ don't complain for mixed-type comparisons.
152 # Test that __eq__ and __ne__ don't complain for mixed-type comparisons.
132
153
133 # Subclasses must define 'theclass', and theclass(1, 1, 1) must be a
154 # Subclasses must define 'theclass', and theclass(1, 1, 1) must be a
134 # legit constructor.
155 # legit constructor.
135
156
136 def test_harmless_mixed_comparison(self):
157 def test_harmless_mixed_comparison(self):
137 me = self.theclass(1, 1, 1)
158 me = self.theclass(1, 1, 1)
138
159
139 self.failIf(me == ())
160 self.failIf(me == ())
140 self.failUnless(me != ())
161 self.failUnless(me != ())
(...skipping 3155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading...
3296 got = FEastern.fromutc(fstart)
3317 got = FEastern.fromutc(fstart)
3297 self.assertEqual(expected, got)
3318 self.assertEqual(expected, got)
3298
3319
3299 # Ensure astimezone() calls fromutc() too.
3320 # Ensure astimezone() calls fromutc() too.
3300 got = fstart.replace(tzinfo=utc_real).astimezone(FEastern)
3321 got = fstart.replace(tzinfo=utc_real).astimezone(FEastern)
3301 self.assertEqual(expected, got)
3322 self.assertEqual(expected, got)
3302
3323
3303 start += HOUR
3324 start += HOUR
3304 fstart += HOUR
3325 fstart += HOUR
3305
3326
3306
3307 #############################################################################
3327 #############################################################################
3308 # oddballs
3328 # oddballs
3309
3329
3310 class Oddballs(unittest.TestCase):
3330 class Oddballs(unittest.TestCase):
3311
3331
3312 def test_bug_1028306(self):
3332 def test_bug_1028306(self):
3313 # Trying to compare a date to a datetime should act like a mixed-
3333 # Trying to compare a date to a datetime should act like a mixed-
3314 # type comparison, despite that datetime is a subclass of date.
3334 # type comparison, despite that datetime is a subclass of date.
3315 as_date = date.today()
3335 as_date = date.today()
3316 as_datetime = datetime.combine(as_date, time())
3336 as_datetime = datetime.combine(as_date, time())
(...skipping 27 matching lines...) Expand all Loading...
3344 datetime_sc = SubclassDatetime(as_datetime.year, as_datetime.month,
3364 datetime_sc = SubclassDatetime(as_datetime.year, as_datetime.month,
3345 as_date.day, 0, 0, 0)
3365 as_date.day, 0, 0, 0)
3346 self.assertEqual(as_datetime, datetime_sc)
3366 self.assertEqual(as_datetime, datetime_sc)
3347 self.assertEqual(datetime_sc, as_datetime)
3367 self.assertEqual(datetime_sc, as_datetime)
3348
3368
3349 def test_main():
3369 def test_main():
3350 test_support.run_unittest(__name__)
3370 test_support.run_unittest(__name__)
3351
3371
3352 if __name__ == "__main__":
3372 if __name__ == "__main__":
3353 test_main()
3373 test_main()
OLD
NEW