]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Make test_tempfile.py work. Make SpooledTempFile work in text and binary mode.
authorGuido van Rossum <guido@python.org>
Mon, 9 Jul 2007 10:24:45 +0000 (10:24 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 9 Jul 2007 10:24:45 +0000 (10:24 +0000)
Lib/tempfile.py
Lib/test/test_tempfile.py

index 109dc594bf42c7da39ca79c79f27e2fcc65f177e..68cc5405e799f46bb83be60f8dd7e5499ef562a3 100644 (file)
@@ -29,6 +29,7 @@ __all__ = [
 
 # Imports.
 
+import io as _io
 import os as _os
 import errno as _errno
 from random import Random as _Random
@@ -37,8 +38,6 @@ if _os.name == 'mac':
     import Carbon.Folder as _Folder
     import Carbon.Folders as _Folders
 
-from io import StringIO as _StringIO
-
 try:
     import fcntl as _fcntl
 except ImportError:
@@ -486,7 +485,10 @@ class SpooledTemporaryFile:
 
     def __init__(self, max_size=0, mode='w+b', bufsize=-1,
                  suffix="", prefix=template, dir=None):
-        self._file = _StringIO()
+        if 'b' in mode:
+            self._file = _io.BytesIO()
+        else:
+            self._file = _io.StringIO()
         self._max_size = max_size
         self._rolled = False
         self._TemporaryFileArgs = (mode, bufsize, suffix, prefix, dir)
index caa8f4e734d8a6d6536f8ebb308e5996d468fafe..c925f6834ca48c6931c9e78ee881afbc7710232b 100644 (file)
@@ -664,7 +664,7 @@ class test_SpooledTemporaryFile(TC):
             self.failUnless(f._rolled)
             filename = f.name
             f.close()
-            self.failIf(os.path.exists(filename),
+            self.failIf(isinstance(filename, str) and os.path.exists(filename),
                         "SpooledTemporaryFile %s exists after close" % filename)
         finally:
             os.rmdir(dir)
@@ -730,7 +730,22 @@ class test_SpooledTemporaryFile(TC):
         write("a" * 35)
         write("b" * 35)
         seek(0, 0)
-        self.assertEqual(read(70), 'a'*35 + 'b'*35)
+        self.assertEqual(read(70), b'a'*35 + b'b'*35)
+
+    def test_text_mode(self):
+        # Creating a SpooledTemporaryFile with a text mode should produce
+        # a file object reading and writing (Unicode) text strings.
+        f = tempfile.SpooledTemporaryFile(mode='w+', max_size=10)
+        f.write("abc\n")
+        f.seek(0)
+        self.assertEqual(f.read(), "abc\n")
+        f.write("def\n")
+        f.seek(0)
+        self.assertEqual(f.read(), "abc\ndef\n")
+        f.write("xyzzy\n")
+        f.seek(0)
+        self.assertEqual(f.read(), "abc\ndef\nxyzzy\n")
+
 
 test_classes.append(test_SpooledTemporaryFile)