[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