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