[pypy-svn] r58835 - in pypy/branch/2.5-merge: lib-python/modified-2.5.2/test pypy/module/_file pypy/module/_file/test

iko at codespeak.net iko at codespeak.net
Wed Oct 8 16:48:58 CEST 2008


Author: iko
Date: Wed Oct  8 16:48:57 2008
New Revision: 58835

Modified:
   pypy/branch/2.5-merge/lib-python/modified-2.5.2/test/test_file.py
   pypy/branch/2.5-merge/pypy/module/_file/interp_file.py
   pypy/branch/2.5-merge/pypy/module/_file/test/test_file_extra.py
Log:
(iko, cfbolz)
Fix file tests



Modified: pypy/branch/2.5-merge/lib-python/modified-2.5.2/test/test_file.py
==============================================================================
--- pypy/branch/2.5-merge/lib-python/modified-2.5.2/test/test_file.py	(original)
+++ pypy/branch/2.5-merge/lib-python/modified-2.5.2/test/test_file.py	Wed Oct  8 16:48:57 2008
@@ -6,6 +6,7 @@
 from weakref import proxy
 
 from test.test_support import TESTFN, findfile, run_unittest
+from test.test_support import gc_collect, impl_detail
 from UserList import UserList
 
 class AutoFileTests(unittest.TestCase):
@@ -26,6 +27,7 @@
         self.assertEquals(self.f.name, p.name)
         self.f.close()
         self.f = None
+        gc_collect()
         self.assertRaises(ReferenceError, getattr, p, 'name')
 
     def testAttributes(self):
@@ -218,6 +220,7 @@
         finally:
             os.unlink(TESTFN)
 
+    @impl_detail
     def testIteration(self):
         # Test the complex interaction when mixing file-iteration and the
         # various read* methods. Ostensibly, the mixture could just be tested

Modified: pypy/branch/2.5-merge/pypy/module/_file/interp_file.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/module/_file/interp_file.py	(original)
+++ pypy/branch/2.5-merge/pypy/module/_file/interp_file.py	Wed Oct  8 16:48:57 2008
@@ -8,6 +8,7 @@
 from pypy.interpreter.gateway import ObjSpace, W_Root, Arguments
 from pypy.interpreter.typedef import TypeDef, GetSetProperty
 from pypy.interpreter.typedef import interp_attrproperty, make_weakref_descr
+from pypy.interpreter.typedef import interp_attrproperty_w
 from pypy.interpreter.gateway import interp2app
 
 
@@ -37,9 +38,9 @@
         self.clear_all_weakrefs()
         self.direct_close()
 
-    def fdopenstream(self, stream, fd, mode, name):
+    def fdopenstream(self, stream, fd, mode, w_name):
         self.fd = fd
-        self.name = name
+        self.w_name = w_name
         self.softspace = 0    # Required according to file object docs
         self.encoding = None  # This is not used internally by file objects
         self.mode = mode
@@ -78,12 +79,13 @@
     # The 'direct_' methods assume that the caller already acquired the
     # file lock.  They don't convert StreamErrors to OperationErrors, too.
 
-    def direct___init__(self, name, mode='r', buffering=-1):
+    def direct___init__(self, w_name, mode='r', buffering=-1):
+        name = self.space.str_w(w_name)
         self.direct_close()
         self.check_mode_ok(mode)
         stream = streamio.open_file_as_stream(name, mode, buffering)
         fd = stream.try_to_find_file_descriptor()
-        self.fdopenstream(stream, fd, mode, name)
+        self.fdopenstream(stream, fd, mode, w_name)
 
     def direct___enter__(self):
         if self.stream is None:
@@ -101,7 +103,7 @@
         self.direct_close()
         self.check_mode_ok(mode)
         stream = streamio.fdopen_as_stream(fd, mode, buffering)
-        self.fdopenstream(stream, fd, mode, '<fdopen>')
+        self.fdopenstream(stream, fd, mode, self.space.wrap('<fdopen>'))
 
     def direct_close(self):
         space = self.space
@@ -282,7 +284,7 @@
         class_scope['_exposed_method_names'].append(name)
 
 
-    _decl(locals(), "__init__", ['self', str, str, int],
+    _decl(locals(), "__init__", ['self', W_Root, str, int],
           """Opens a file.""")
 
     _decl(locals(), "__enter__", ['self'], """__enter__() -> self.""")
@@ -384,7 +386,8 @@
             head = "closed"
         else:
             head = "open"
-        info = "%s file '%s', mode '%s'" % (head, self.name, self.mode)
+        repr_filename = self.space.str_w(self.space.repr(self.w_name))
+        info = "%s file %s, mode '%s'" % (head, repr_filename, self.mode)
         return self.getrepr(self.space, info)
     file__repr__.unwrap_spec = ['self']
 
@@ -467,7 +470,7 @@
 """,
     __new__  = interp2app(descr_file__new__),
     fdopen   = interp2app(descr_file_fdopen, as_classmethod=True),
-    name     = interp_attrproperty('name', cls=W_File, doc="file name"),
+    name     = interp_attrproperty_w('w_name', cls=W_File, doc="file name"),
     mode     = interp_attrproperty('mode', cls=W_File,
                               doc = "file mode ('r', 'U', 'w', 'a', "
                                     "possibly with 'b' or '+' added)"),

Modified: pypy/branch/2.5-merge/pypy/module/_file/test/test_file_extra.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/module/_file/test/test_file_extra.py	(original)
+++ pypy/branch/2.5-merge/pypy/module/_file/test/test_file_extra.py	Wed Oct  8 16:48:57 2008
@@ -566,3 +566,9 @@
 
     def test_docstrings(self):
         assert file.closed.__doc__ == 'True if the file is closed'
+
+    def test_repr_unicode_filename(self):
+        f = open(unicode(self.temptestfile), 'w')
+        assert repr(f).startswith("<open file u'" + self.temptestfile)
+        f.close()
+



More information about the Pypy-commit mailing list