[pypy-svn] r49651 - in pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Dec 11 20:55:46 CET 2007
Author: cfbolz
Date: Tue Dec 11 20:55:46 2007
New Revision: 49651
Modified:
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
Log:
more tests & fixes for bugs found
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py Tue Dec 11 20:55:46 2007
@@ -249,7 +249,7 @@
def descr_len(self, space):
w_meth = self.getattr(space, space.wrap('__len__'))
w_result = space.call_function(w_meth)
- if space.is_true(space.isinstance(ret, space.w_int)):
+ if space.is_true(space.isinstance(w_result, space.w_int)):
if space.is_true(space.le(w_result, space.wrap(0))):
raise OperationError(
space.w_ValueError,
@@ -257,7 +257,7 @@
return w_result
else:
raise OperationError(
- space.w_ValueError,
+ space.w_TypeError,
space.wrap("__len__() should return an int"))
def descr_getitem(self, space, w_key):
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py Tue Dec 11 20:55:46 2007
@@ -161,3 +161,37 @@
raises(AttributeError, "del a[5]")
class A:
__metaclass__ = nclassobj
+
+ class A:
+ __metaclass__ = nclassobj
+ def __init__(self):
+ self.list = [1, 2, 3, 4, 5]
+ def __len__(self):
+ return len(self.list)
+ def __getitem__(self, i):
+ return self.list[i]
+ def __setitem__(self, i, v):
+ self.list[i] = v
+ def __delitem__(self, i):
+ del self.list[i]
+
+ a = A()
+ assert len(a) == 5
+ del a[0]
+ assert len(a) == 4
+ assert a[0] == 2
+ a[0] = 5
+ assert a[0] == 5
+
+ def test_len_errors(self):
+ class A:
+ __metaclass__ = nclassobj
+ def __len__(self):
+ return long(10)
+ raises(TypeError, len, A())
+ class A:
+ __metaclass__ = nclassobj
+ def __len__(self):
+ return -1
+ raises(ValueError, len, A())
+
More information about the Pypy-commit
mailing list