Merged revisions 72508 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r72508 | benjamin.peterson | 2009-05-09 11:36:39 -0500 (Sat, 09 May 2009) | 1 line
convert some more special methods to use _PyObject_LookupSpecial
........
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index b4bd948..afb0f87 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1,4 +1,5 @@
import builtins
+import sys
import types
import unittest
import warnings
@@ -1551,13 +1552,20 @@
return b"hello"
def empty_seq(self):
return []
+ def zero(self):
+ return 0
+ def stop(self):
+ raise StopIteration
# It would be nice to have every special method tested here, but I'm
# only listing the ones I can remember outside of typeobject.c, since it
# does it right.
specials = [
- ("__bytes__", bytes, hello),
- ("__reversed__", reversed, empty_seq),
+ ("__bytes__", bytes, hello, {}),
+ ("__reversed__", reversed, empty_seq, {}),
+ ("__length_hint__", list, zero,
+ {"__iter__" : iden, "__next__" : stop}),
+ ("__sizeof__", sys.getsizeof, zero, {}),
# These two fail because the compiler generates LOAD_ATTR to look
# them up. We'd have to add a new opcode to fix this, and it's
# probably not worth it.
@@ -1578,15 +1586,19 @@
return self.impl.__get__(obj, owner)
- for name, runner, meth_impl in specials:
+ for name, runner, meth_impl, env in specials:
class X(Checker):
pass
+ for attr, obj in env.items():
+ setattr(X, attr, obj)
setattr(X, name, meth_impl)
runner(X())
record = []
class X(Checker):
pass
+ for attr, obj in env.items():
+ setattr(X, attr, obj)
setattr(X, name, SpecialDescr(meth_impl))
runner(X())
self.assertEqual(record, [1], name)