[pypy-svn] r49659 - in pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Dec 11 23:25:32 CET 2007
Author: cfbolz
Date: Tue Dec 11 23:25:31 2007
New Revision: 49659
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:
str and repr support for the classes too
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 23:25:31 2007
@@ -132,8 +132,6 @@
return w_value
return space.call_function(w_descr_get, w_value, space.w_None, self)
- # XXX missing: str, repr
-
def descr_call(self, space, __args__):
w_inst = W_InstanceObject(space, self)
w_init = w_inst.getattr(space, space.wrap('__init__'), False)
@@ -149,6 +147,17 @@
space.wrap("this constructor takes no arguments"))
return w_inst
+ def descr_repr(self, space):
+ mod = self.get_module_string(space)
+ return self.getrepr(space, "class %s.%s" % (mod, self.name))
+
+ def descr_str(self, space):
+ mod = self.get_module_string(space)
+ if mod == "?":
+ return space.wrap(self.name)
+ else:
+ return space.wrap("%s.%s" % (mod, self.name))
+
def get_module_string(self, space):
try:
w_mod = self.descr_getattribute(space, space.wrap("__module__"))
@@ -169,6 +178,10 @@
__bases__ = GetSetProperty(W_ClassObject.fget_bases,
W_ClassObject.fset_bases,
W_ClassObject.fdel_bases),
+ __repr__ = interp2app(W_ClassObject.descr_repr,
+ unwrap_spec=['self', ObjSpace]),
+ __str__ = interp2app(W_ClassObject.descr_str,
+ unwrap_spec=['self', ObjSpace]),
__call__ = interp2app(W_ClassObject.descr_call,
unwrap_spec=['self', ObjSpace, Arguments]),
__getattribute__ = interp2app(W_ClassObject.descr_getattribute,
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 23:25:31 2007
@@ -45,6 +45,32 @@
assert C.b == 18
assert C.c == 19
+ def test_class_repr(self):
+ class A:
+ __metaclass__ = nclassobj
+ assert repr(A).startswith("<class __builtin__.A at 0x")
+ A.__name__ = 'B'
+ assert repr(A).startswith("<class __builtin__.B at 0x")
+ A.__module__ = 'foo'
+ assert repr(A).startswith("<class foo.B at 0x")
+ A.__module__ = None
+ assert repr(A).startswith("<class ?.B at 0x")
+ del A.__module__
+ assert repr(A).startswith("<class ?.B at 0x")
+
+ def test_class_str(self):
+ class A:
+ __metaclass__ = nclassobj
+ assert str(A) == "__builtin__.A"
+ A.__name__ = 'B'
+ assert str(A) == "__builtin__.B"
+ A.__module__ = 'foo'
+ assert str(A) == "foo.B"
+ A.__module__ = None
+ assert str(A) == "B"
+ del A.__module__
+ assert str(A) == "B"
+
def test_del_error_class_special(self):
class A:
__metaclass__ = nclassobj
More information about the Pypy-commit
mailing list