diff options
author | Tim Golden <mail@timgolden.me.uk> | 2010-08-12 09:45:25 (GMT) |
---|---|---|
committer | Tim Golden <mail@timgolden.me.uk> | 2010-08-12 09:45:25 (GMT) |
commit | 595c8d34a340fa2f381d9b0e4b6a09e2accc6898 (patch) | |
tree | 30e467c2c8a8c4ec76ecf0ff318987bb28d77739 /Lib/test/test_subprocess.py | |
parent | d748c3d4a292116f1bb6501491784779f3dda149 (diff) | |
download | cpython-595c8d34a340fa2f381d9b0e4b6a09e2accc6898.zip cpython-595c8d34a340fa2f381d9b0e4b6a09e2accc6898.tar.gz cpython-595c8d34a340fa2f381d9b0e4b6a09e2accc6898.tar.bz2 |
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Diffstat (limited to 'Lib/test/test_subprocess.py')
-rw-r--r-- | Lib/test/test_subprocess.py | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index ff9945b..3657d75 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -28,7 +28,7 @@ def remove_stderr_debug_decorations(stderr): return re.sub("\[\d+ refs\]\r?\n?$", "", stderr.decode()).encode() #return re.sub(r"\[\d+ refs\]\r?\n?$", "", stderr) -class ProcessTestCase(unittest.TestCase): +class BaseTestCase(unittest.TestCase): def setUp(self): # Try to minimize the number of children we have so this test # doesn't crash on some buildbots (Alphas in particular). @@ -41,14 +41,15 @@ class ProcessTestCase(unittest.TestCase): if hasattr(support, "reap_children"): support.reap_children() - def mkstemp(self): + def mkstemp(self, *args, **kwargs): """wrapper for mkstemp, calling mktemp if mkstemp is not available""" if hasattr(tempfile, "mkstemp"): - return tempfile.mkstemp() + return tempfile.mkstemp(*args, **kwargs) else: - fname = tempfile.mktemp() + fname = tempfile.mktemp(*args, **kwargs) return os.open(fname, os.O_RDWR|os.O_CREAT), fname +class ProcessTestCase(BaseTestCase): # # Generic tests # @@ -863,6 +864,7 @@ class ProcessTestCase(unittest.TestCase): p.terminate() self.assertNotEqual(p.wait(), 0) + class CommandTests(unittest.TestCase): # The module says: # "NB This only works (and is only relevant) for UNIX." @@ -893,6 +895,50 @@ class CommandTests(unittest.TestCase): unit_tests = [ProcessTestCase, CommandTests] +if mswindows: + class CommandsWithSpaces (BaseTestCase): + + def setUp(self): + super().setUp() + f, fname = self.mkstemp(".py", "te st") + self.fname = fname.lower () + os.write(f, b"import sys;" + b"sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv]))" + ) + os.close(f) + + def tearDown(self): + os.remove(self.fname) + super().tearDown() + + def with_spaces(self, *args, **kwargs): + kwargs['stdout'] = subprocess.PIPE + p = subprocess.Popen(*args, **kwargs) + self.assertEqual( + p.stdout.read ().decode("mbcs"), + "2 [%r, 'ab cd']" % self.fname + ) + + def test_shell_string_with_spaces(self): + # call() function with string argument with spaces on Windows + self.with_spaces('"%s" "%s"' % (self.fname, "ab cd"), shell=1) + + def test_shell_sequence_with_spaces(self): + # call() function with sequence argument with spaces on Windows + self.with_spaces([self.fname, "ab cd"], shell=1) + + def test_noshell_string_with_spaces(self): + # call() function with string argument with spaces on Windows + self.with_spaces('"%s" "%s" "%s"' % (sys.executable, self.fname, + "ab cd")) + + def test_noshell_sequence_with_spaces(self): + # call() function with sequence argument with spaces on Windows + self.with_spaces([sys.executable, self.fname, "ab cd"]) + + unit_tests.append(CommandsWithSpaces) + + if getattr(subprocess, '_has_poll', False): class ProcessTestCaseNoPoll(ProcessTestCase): def setUp(self): |