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