diff options
author | Gregory P. Smith <greg@krypto.org> | 2012-10-10 10:44:47 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@krypto.org> | 2012-10-10 10:44:47 (GMT) |
commit | a10ddb8a5596f2184f013a751768c16a24372adb (patch) | |
tree | e4c64cbe539ce85268f9270e66d329fc858b0262 /Lib/test/test_subprocess.py | |
parent | 86b0fb23e5efa3e4bdc351d839fec353d82bb588 (diff) | |
parent | 5591b02a4c96c4b530ee024e6b1581f5ba72945d (diff) | |
download | cpython-a10ddb8a5596f2184f013a751768c16a24372adb.zip cpython-a10ddb8a5596f2184f013a751768c16a24372adb.tar.gz cpython-a10ddb8a5596f2184f013a751768c16a24372adb.tar.bz2 |
Fixes Issue #16114: The subprocess module no longer provides a
misleading error message stating that args[0] did not exist when
either the cwd or executable keyword arguments specified a path that
did not exist.
Diffstat (limited to 'Lib/test/test_subprocess.py')
-rw-r--r-- | Lib/test/test_subprocess.py | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 8f5a58c..b260c81 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -1038,24 +1038,30 @@ class _SuppressCoreFiles(object): @unittest.skipIf(mswindows, "POSIX specific tests") class POSIXProcessTestCase(BaseTestCase): - def test_exceptions(self): - nonexistent_dir = "/_this/pa.th/does/not/exist" + def setUp(self): + super().setUp() + self._nonexistent_dir = "/_this/pa.th/does/not/exist" + + def _get_chdir_exception(self): try: - os.chdir(nonexistent_dir) + os.chdir(self._nonexistent_dir) except OSError as e: # This avoids hard coding the errno value or the OS perror() # string and instead capture the exception that we want to see # below for comparison. desired_exception = e - desired_exception.strerror += ': ' + repr(sys.executable) + desired_exception.strerror += ': ' + repr(self._nonexistent_dir) else: self.fail("chdir to nonexistant directory %s succeeded." % - nonexistent_dir) + self._nonexistent_dir) + return desired_exception - # Error in the child re-raised in the parent. + def test_exception_cwd(self): + """Test error in the child raised in the parent for a bad cwd.""" + desired_exception = self._get_chdir_exception() try: p = subprocess.Popen([sys.executable, "-c", ""], - cwd=nonexistent_dir) + cwd=self._nonexistent_dir) except OSError as e: # Test that the child process chdir failure actually makes # it up to the parent process as the correct exception. @@ -1064,6 +1070,33 @@ class POSIXProcessTestCase(BaseTestCase): else: self.fail("Expected OSError: %s" % desired_exception) + def test_exception_bad_executable(self): + """Test error in the child raised in the parent for a bad executable.""" + desired_exception = self._get_chdir_exception() + try: + p = subprocess.Popen([sys.executable, "-c", ""], + executable=self._nonexistent_dir) + except OSError as e: + # Test that the child process exec failure actually makes + # it up to the parent process as the correct exception. + self.assertEqual(desired_exception.errno, e.errno) + self.assertEqual(desired_exception.strerror, e.strerror) + else: + self.fail("Expected OSError: %s" % desired_exception) + + def test_exception_bad_args_0(self): + """Test error in the child raised in the parent for a bad args[0].""" + desired_exception = self._get_chdir_exception() + try: + p = subprocess.Popen([self._nonexistent_dir, "-c", ""]) + except OSError as e: + # Test that the child process exec failure actually makes + # it up to the parent process as the correct exception. + self.assertEqual(desired_exception.errno, e.errno) + self.assertEqual(desired_exception.strerror, e.strerror) + else: + self.fail("Expected OSError: %s" % desired_exception) + def test_restore_signals(self): # Code coverage for both values of restore_signals to make sure it # at least does not blow up. |