]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #16115: Improve testing of the executable argument to subprocess.Popen().
authorChris Jerdonek <chris.jerdonek@gmail.com>
Mon, 8 Oct 2012 22:56:43 +0000 (15:56 -0700)
committerChris Jerdonek <chris.jerdonek@gmail.com>
Mon, 8 Oct 2012 22:56:43 +0000 (15:56 -0700)
Lib/test/test_subprocess.py
Misc/NEWS

index 6fc61088b8f9d2c63c4b790deef91e11405d7b71..3dbef13caefe941259866465e0497b3827b237e7 100644 (file)
@@ -192,6 +192,33 @@ class ProcessTestCase(BaseTestCase):
         p.wait()
         self.assertEqual(p.stderr, None)
 
+    def _assert_python(self, pre_args, **kwargs):
+        # We include sys.exit() to prevent the test runner from hanging
+        # whenever python is found.
+        args = pre_args + ["import sys; sys.exit(47)"]
+        p = subprocess.Popen(args, **kwargs)
+        p.wait()
+        self.assertEqual(47, p.returncode)
+
+    def test_executable(self):
+        # Check that the executable argument works.
+        self._assert_python(["doesnotexist", "-c"], executable=sys.executable)
+
+    def test_executable_takes_precedence(self):
+        # Check that the executable argument takes precedence over args[0].
+        #
+        # Verify first that the call succeeds without the executable arg.
+        pre_args = [sys.executable, "-c"]
+        self._assert_python(pre_args)
+        self.assertRaises(FileNotFoundError, self._assert_python, pre_args,
+                          executable="doesnotexist")
+
+    @unittest.skipIf(mswindows, "executable argument replaces shell")
+    def test_executable_replaces_shell(self):
+        # Check that the executable argument replaces the default shell
+        # when shell=True.
+        self._assert_python([], executable=sys.executable, shell=True)
+
     # For use in the test_cwd* tests below.
     def _normalize_cwd(self, cwd):
         # Normalize an expected cwd (for Tru64 support).
@@ -299,16 +326,6 @@ class ProcessTestCase(BaseTestCase):
         # argument.  For test runs in the build directory, see #7774.
         self._assert_cwd('', "somethingyoudonthave", executable=sys.executable)
 
-    def test_executable_precedence(self):
-        # To the precedence of executable argument over args[0]
-        # For a normal installation, it should work without 'cwd'
-        # argument. For test runs in the build directory, see #7774.
-        python_dir = os.path.dirname(os.path.realpath(sys.executable))
-        p = subprocess.Popen(["nonexistent","-c",'import sys; sys.exit(42)'],
-                            executable=sys.executable, cwd=python_dir)
-        p.wait()
-        self.assertEqual(p.returncode, 42)
-
     def test_stdin_pipe(self):
         # stdin redirection
         p = subprocess.Popen([sys.executable, "-c",
index 59ccb45e3b083a37c0adacf3ea1a4b8ea1872f5b..29b6ff12d6f079c12ee5df7e3288030265213c35 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -100,6 +100,9 @@ Library
 Tests
 -----
 
+- Issue #16115: Add some tests for the executable argument to
+  subprocess.Popen().  Initial patch by Kushal Das.
+
 - Issue #15304: Fix warning message when `os.chdir()` fails inside
   `test.support.temp_cwd()`.  Patch by Chris Jerdonek.