]> granicus.if.org Git - python/commitdiff
Issue #27472: Add test.support.unix_shell as the path to the default shell.
authorXavier de Gaye <xdegaye@users.sourceforge.net>
Fri, 22 Jul 2016 10:15:29 +0000 (12:15 +0200)
committerXavier de Gaye <xdegaye@users.sourceforge.net>
Fri, 22 Jul 2016 10:15:29 +0000 (12:15 +0200)
Lib/distutils/tests/test_spawn.py
Lib/test/support/__init__.py
Lib/test/test_os.py
Lib/test/test_subprocess.py
Misc/NEWS

index f507ef7750af25a31bbade8813f1e7e82844da20..5edc24a3a10491cbf165bb80284849083340dc15 100644 (file)
@@ -1,7 +1,8 @@
 """Tests for distutils.spawn."""
 import unittest
+import sys
 import os
-from test.support import run_unittest
+from test.support import run_unittest, unix_shell
 
 from distutils.spawn import _nt_quote_args
 from distutils.spawn import spawn
@@ -29,9 +30,9 @@ class SpawnTestCase(support.TempdirManager,
 
         # creating something executable
         # through the shell that returns 1
-        if os.name == 'posix':
+        if sys.platform != 'win32':
             exe = os.path.join(tmpdir, 'foo.sh')
-            self.write_file(exe, '#!/bin/sh\nexit 1')
+            self.write_file(exe, '#!%s\nexit 1' % unix_shell)
         else:
             exe = os.path.join(tmpdir, 'foo.bat')
             self.write_file(exe, 'exit 1')
@@ -40,9 +41,9 @@ class SpawnTestCase(support.TempdirManager,
         self.assertRaises(DistutilsExecError, spawn, [exe])
 
         # now something that works
-        if os.name == 'posix':
+        if sys.platform != 'win32':
             exe = os.path.join(tmpdir, 'foo.sh')
-            self.write_file(exe, '#!/bin/sh\nexit 0')
+            self.write_file(exe, '#!%s\nexit 0' % unix_shell)
         else:
             exe = os.path.join(tmpdir, 'foo.bat')
             self.write_file(exe, 'exit 0')
index 2b2966876fd8fccf044ecfaf517efbee6936bc25..aa6725feec171d52132a5bdf737bedcd955a0029 100644 (file)
@@ -92,7 +92,7 @@ __all__ = [
     "anticipate_failure", "load_package_tests", "detect_api_mismatch",
     "check__all__",
     # sys
-    "is_jython", "is_android", "check_impl_detail",
+    "is_jython", "is_android", "check_impl_detail", "unix_shell",
     # network
     "HOST", "IPV6_ENABLED", "find_unused_port", "bind_port", "open_urlresource",
     # processes
@@ -736,6 +736,11 @@ is_jython = sys.platform.startswith('java')
 
 is_android = bool(sysconfig.get_config_var('ANDROID_API_LEVEL'))
 
+if sys.platform != 'win32':
+    unix_shell = '/system/bin/sh' if is_android else '/bin/sh'
+else:
+    unix_shell = None
+
 # Filename used for testing
 if os.name == 'java':
     # Jython disallows @ in module names
index 6493d76c9a291cdc3962ae51239c9f9459639d06..aa9b53874849d5d262c8c5d7770f1bfe995f735d 100644 (file)
@@ -64,6 +64,7 @@ except ImportError:
     INT_MAX = PY_SSIZE_T_MAX = sys.maxsize
 
 from test.support.script_helper import assert_python_ok
+from test.support import unix_shell
 
 
 root_in_posix = False
@@ -670,18 +671,20 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol):
         return os.environ
 
     # Bug 1110478
-    @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh')
+    @unittest.skipUnless(unix_shell and os.path.exists(unix_shell),
+                         'requires a shell')
     def test_update2(self):
         os.environ.clear()
         os.environ.update(HELLO="World")
-        with os.popen("/bin/sh -c 'echo $HELLO'") as popen:
+        with os.popen("%s -c 'echo $HELLO'" % unix_shell) as popen:
             value = popen.read().strip()
             self.assertEqual(value, "World")
 
-    @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh')
+    @unittest.skipUnless(unix_shell and os.path.exists(unix_shell),
+                         'requires a shell')
     def test_os_popen_iter(self):
-        with os.popen(
-            "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen:
+        with os.popen("%s -c 'echo \"line1\nline2\nline3\"'"
+                      % unix_shell) as popen:
             it = iter(popen)
             self.assertEqual(next(it), "line1\n")
             self.assertEqual(next(it), "line2\n")
index ba91bbc0818a702064843033a7b379fbe4f7a740..092e2ce753e951ff7c76e9a145ec4963d0868f34 100644 (file)
@@ -1579,7 +1579,7 @@ class POSIXProcessTestCase(BaseTestCase):
         fd, fname = tempfile.mkstemp()
         # reopen in text mode
         with open(fd, "w", errors="surrogateescape") as fobj:
-            fobj.write("#!/bin/sh\n")
+            fobj.write("#!%s\n" % support.unix_shell)
             fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" %
                        sys.executable)
         os.chmod(fname, 0o700)
@@ -1624,7 +1624,7 @@ class POSIXProcessTestCase(BaseTestCase):
         fd, fname = tempfile.mkstemp()
         # reopen in text mode
         with open(fd, "w", errors="surrogateescape") as fobj:
-            fobj.write("#!/bin/sh\n")
+            fobj.write("#!%s\n" % support.unix_shell)
             fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" %
                        sys.executable)
         os.chmod(fname, 0o700)
index 16d447659fc79c51d63d7c6477c0ce015ef6c1de..c56be7537d87fb534154588b548f278b84b54135 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -46,6 +46,8 @@ Library
 Tests
 -----
 
+- Issue #27472: Add test.support.unix_shell as the path to the default shell.
+
 - Issue #27369: In test_pyexpat, avoid testing an error message detail that
   changed in Expat 2.2.0.