Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r62068:e9dd39c354da
Date: 2013-03-05 06:44 -0500
http://bitbucket.org/pypy/pypy/changeset/e9dd39c354da/

Log:    port improved datetime error messages and tests in 2171355e07eb

diff --git a/lib_pypy/datetime.py b/lib_pypy/datetime.py
--- a/lib_pypy/datetime.py
+++ b/lib_pypy/datetime.py
@@ -278,7 +278,9 @@
         else:
             if isinstance(value, (int, long)):
                 return value
-    raise TypeError('an integer is required')
+            raise TypeError('__int__ method should return an integer')
+        raise TypeError('an integer is required')
+    raise TypeError('integer argument expected, got float')
 
 def _check_date_fields(year, month, day):
     year = _check_int_field(year)
@@ -801,12 +803,12 @@
                                    self._year,
                                    self._month,
                                    self._day)
+
     # XXX These shouldn't depend on time.localtime(), because that
     # clips the usable dates to [1970 .. 2038).  At least ctime() is
     # easily done without using strftime() -- that's better too because
     # strftime("%c", ...) is locale specific.
 
-
     def ctime(self):
         "Return ctime() style string."
         weekday = self.toordinal() % 7 or 7
diff --git a/pypy/module/test_lib_pypy/test_datetime.py 
b/pypy/module/test_lib_pypy/test_datetime.py
--- a/pypy/module/test_lib_pypy/test_datetime.py
+++ b/pypy/module/test_lib_pypy/test_datetime.py
@@ -10,16 +10,12 @@
     assert repr(datetime.datetime(1,2,3)) == expected
 
 def test_attributes():
-    a = datetime.date.today()
-    raises(AttributeError, 'a.abc = 1')
-    a = datetime.time()
-    raises(AttributeError, 'a.abc = 1')
-    a = datetime.tzinfo()
-    raises(AttributeError, 'a.abc = 1')
-    a = datetime.datetime.utcnow()
-    raises(AttributeError, 'a.abc = 1')
-    a = datetime.timedelta()
-    raises(AttributeError, 'a.abc = 1')
+    for x in [datetime.date.today(),
+              datetime.time(),
+              datetime.datetime.utcnow(),
+              datetime.timedelta(),
+              datetime.tzinfo()]:
+        raises(AttributeError, 'x.abc = 1')
 
 def test_unpickle():
     e = raises(TypeError, datetime.date, '123')
@@ -124,31 +120,27 @@
             self.value = value
         def __int__(self):
             return self.value
-    i10 = 10
-    l10 = 10L
-    d10 = decimal.Decimal(10)
-    d11 = decimal.Decimal('10.9')
-    c10 = Number(10)
-    o10 = Number(10L)
-    assert datetime.datetime(i10, i10, i10, i10, i10, i10, i10) == \
-           datetime.datetime(l10, l10, l10, l10, l10, l10, l10) == \
-           datetime.datetime(d10, d10, d10, d10, d10, d10, d10) == \
-           datetime.datetime(d11, d11, d11, d11, d11, d11, d11) == \
-           datetime.datetime(c10, c10, c10, c10, c10, c10, c10) == \
-           datetime.datetime(o10, o10, o10, o10, o10, o10, o10)
 
-    with py.test.raises(TypeError):
+    for xx in [10L, decimal.Decimal(10), decimal.Decimal('10.9'),
+                    Number(10), Number(10L)]:
+        assert datetime.datetime(10, 10, 10, 10, 10, 10, 10) == \
+               datetime.datetime(xx, xx, xx, xx, xx, xx, xx)
+
+    with py.test.raises(TypeError) as e:
         datetime.datetime(10, 10, '10')
+    assert str(e.value) == 'an integer is required'
 
     f10 = Number(10.9)
-    with py.test.raises(TypeError):
+    with py.test.raises(TypeError) as e:
         datetime.datetime(10, 10, f10)
+    assert str(e.value) == '__int__ method should return an integer'
 
     class Float(float):
         pass
     s10 = Float(10.9)
-    with py.test.raises(TypeError):
+    with py.test.raises(TypeError) as e:
         datetime.datetime(10, 10, s10)
+    assert str(e.value) == 'integer argument expected, got float'
 
     with py.test.raises(TypeError):
         datetime.datetime(10., 10, 10)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to