[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