Author: Brian Kearns <[email protected]>
Branch: py3k
Changeset: r62067:2171355e07eb
Date: 2013-03-05 06:24 -0500
http://bitbucket.org/pypy/pypy/changeset/2171355e07eb/

Log:    improve datetime error messages, test

diff --git a/lib-python/3/datetime.py b/lib-python/3/datetime.py
--- a/lib-python/3/datetime.py
+++ b/lib-python/3/datetime.py
@@ -278,7 +278,9 @@
         else:
             if isinstance(value, int):
                 return value
-    raise TypeError('an integer is required')
+            raise TypeError('nb_int should return int object')
+        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)
@@ -740,12 +742,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/lib-python/3/test/datetimetester.py 
b/lib-python/3/test/datetimetester.py
--- a/lib-python/3/test/datetimetester.py
+++ b/lib-python/3/test/datetimetester.py
@@ -3680,19 +3680,11 @@
         self.assertEqual(as_datetime, datetime_sc)
         self.assertEqual(datetime_sc, as_datetime)
 
-    def test_attributes(self):
-        a = date.today()
-        with self.assertRaises(AttributeError): a.abc = 1
-        a = time()
-        with self.assertRaises(AttributeError): a.abc = 1
-        a = tzinfo()
-        with self.assertRaises(AttributeError): a.abc = 1
-        a = datetime.utcnow()
-        with self.assertRaises(AttributeError): a.abc = 1
-        a = timedelta()
-        with self.assertRaises(AttributeError): a.abc = 1
-        a = timezone(timedelta())
-        with self.assertRaises(AttributeError): a.abc = 1
+    def test_extra_attributes(self):
+        for x in [date.today(), time(), datetime.utcnow(), timedelta(),
+                  tzinfo(), timezone(timedelta())]:
+            with self.assertRaises(AttributeError):
+                x.abc = 1
 
     def test_check_arg_types(self):
         import decimal
@@ -3701,26 +3693,22 @@
                 self.value = value
             def __int__(self):
                 return self.value
-        i10 = 10
-        d10 = decimal.Decimal(10)
-        d11 = decimal.Decimal('10.9')
-        c10 = Number(10)
-        assert datetime(i10, i10, i10, i10, i10, i10, i10) == \
-               datetime(d10, d10, d10, d10, d10, d10, d10) == \
-               datetime(d11, d11, d11, d11, d11, d11, d11) == \
-               datetime(c10, c10, c10, c10, c10, c10, c10)
-
-        with self.assertRaises(TypeError):
+
+        for xx in [decimal.Decimal(10), decimal.Decimal('10.9'), Number(10)]:
+            self.assertEqual(datetime(10, 10, 10, 10, 10, 10, 10),
+                             datetime(xx, xx, xx, xx, xx, xx, xx))
+
+        with self.assertRaisesRegex(TypeError, '^an integer is required$'):
             datetime(10, 10, '10')
 
         f10 = Number(10.9)
-        with self.assertRaises(TypeError):
+        with self.assertRaisesRegex(TypeError, '^nb_int should return int 
object$'):
             datetime(10, 10, f10)
 
         class Float(float):
             pass
         s10 = Float(10.9)
-        with self.assertRaises(TypeError):
+        with self.assertRaisesRegex(TypeError, '^integer argument expected, 
got float$'):
             datetime(10, 10, s10)
 
         with self.assertRaises(TypeError):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to