Commits

Victor Stinner committed aa3a461

test_os: remove now useless TemporaryFileTests testcase

TemporaryFileTests has tests for os.tempnam() and os.tmpfile(), functions
removed from Python 3.

Move fdopen() tests to the FileTests testcase to test fdopen() on a file
descriptor, not on a directory descriptor (which raises an error on Windows).

Comments (0)

Files changed (1)

Lib/test/test_os.py

         self.write_windows_console(sys.executable, "-c", code)
         self.write_windows_console(sys.executable, "-u", "-c", code)
 
-
-class TemporaryFileTests(unittest.TestCase):
-    def setUp(self):
-        self.files = []
-        os.mkdir(support.TESTFN)
-
-    def tearDown(self):
-        for name in self.files:
-            os.unlink(name)
-        os.rmdir(support.TESTFN)
-
-    def check_tempfile(self, name):
-        # make sure it doesn't already exist:
-        self.assertFalse(os.path.exists(name),
-                    "file already exists for temporary file")
-        # make sure we can create the file
-        open(name, "w")
-        self.files.append(name)
-
-    def test_tempnam(self):
-        if not hasattr(os, "tempnam"):
-            return
-        warnings.filterwarnings("ignore", "tempnam", RuntimeWarning,
-                                r"test_os$")
-        self.check_tempfile(os.tempnam())
-
-        name = os.tempnam(support.TESTFN)
-        self.check_tempfile(name)
-
-        name = os.tempnam(support.TESTFN, "pfx")
-        self.assertTrue(os.path.basename(name)[:3] == "pfx")
-        self.check_tempfile(name)
-
-    def test_tmpfile(self):
-        if not hasattr(os, "tmpfile"):
-            return
-        # As with test_tmpnam() below, the Windows implementation of tmpfile()
-        # attempts to create a file in the root directory of the current drive.
-        # On Vista and Server 2008, this test will always fail for normal users
-        # as writing to the root directory requires elevated privileges.  With
-        # XP and below, the semantics of tmpfile() are the same, but the user
-        # running the test is more likely to have administrative privileges on
-        # their account already.  If that's the case, then os.tmpfile() should
-        # work.  In order to make this test as useful as possible, rather than
-        # trying to detect Windows versions or whether or not the user has the
-        # right permissions, just try and create a file in the root directory
-        # and see if it raises a 'Permission denied' OSError.  If it does, then
-        # test that a subsequent call to os.tmpfile() raises the same error. If
-        # it doesn't, assume we're on XP or below and the user running the test
-        # has administrative privileges, and proceed with the test as normal.
-        if sys.platform == 'win32':
-            name = '\\python_test_os_test_tmpfile.txt'
-            if os.path.exists(name):
-                os.remove(name)
-            try:
-                fp = open(name, 'w')
-            except IOError as first:
-                # open() failed, assert tmpfile() fails in the same way.
-                # Although open() raises an IOError and os.tmpfile() raises an
-                # OSError(), 'args' will be (13, 'Permission denied') in both
-                # cases.
-                try:
-                    fp = os.tmpfile()
-                except OSError as second:
-                    self.assertEqual(first.args, second.args)
-                else:
-                    self.fail("expected os.tmpfile() to raise OSError")
-                return
-            else:
-                # open() worked, therefore, tmpfile() should work.  Close our
-                # dummy file and proceed with the test as normal.
-                fp.close()
-                os.remove(name)
-
-        fp = os.tmpfile()
-        fp.write("foobar")
-        fp.seek(0,0)
-        s = fp.read()
-        fp.close()
-        self.assertTrue(s == "foobar")
-
-    def test_tmpnam(self):
-        if not hasattr(os, "tmpnam"):
-            return
-        warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning,
-                                r"test_os$")
-        name = os.tmpnam()
-        if sys.platform in ("win32",):
-            # The Windows tmpnam() seems useless.  From the MS docs:
-            #
-            #     The character string that tmpnam creates consists of
-            #     the path prefix, defined by the entry P_tmpdir in the
-            #     file STDIO.H, followed by a sequence consisting of the
-            #     digit characters '0' through '9'; the numerical value
-            #     of this string is in the range 1 - 65,535.  Changing the
-            #     definitions of L_tmpnam or P_tmpdir in STDIO.H does not
-            #     change the operation of tmpnam.
-            #
-            # The really bizarre part is that, at least under MSVC6,
-            # P_tmpdir is "\\".  That is, the path returned refers to
-            # the root of the current drive.  That's a terrible place to
-            # put temp files, and, depending on privileges, the user
-            # may not even be able to open a file in the root directory.
-            self.assertFalse(os.path.exists(name),
-                        "file already exists for temporary file")
-        else:
-            self.check_tempfile(name)
-
     def fdopen_helper(self, *args):
         fd = os.open(support.TESTFN, os.O_RDONLY)
-        fp2 = os.fdopen(fd, *args)
-        fp2.close()
+        f = os.fdopen(fd, *args)
+        f.close()
 
     def test_fdopen(self):
+        fd = os.open(support.TESTFN, os.O_CREAT|os.O_RDWR)
+        os.close(fd)
+
         self.fdopen_helper()
         self.fdopen_helper('r')
         self.fdopen_helper('r', 100)
 
+
 # Test attributes on return values from os.*stat* family.
 class StatAttributeTests(unittest.TestCase):
     def setUp(self):
         PidTests,
         LoginTests,
         LinkTests,
-        TemporaryFileTests,
     )
 
 if __name__ == "__main__":