diff options
Diffstat (limited to 'Lib/test/test_subprocess.py')
| -rw-r--r-- | Lib/test/test_subprocess.py | 44 | 
1 files changed, 43 insertions, 1 deletions
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 15ca1975..ccb7a69 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -872,12 +872,54 @@ class HelperFunctionTests(unittest.TestCase):          self.assertEqual([(256, 999), (666,), (666,)], record_calls) +@unittest.skipUnless(mswindows, "mswindows only") +class CommandsWithSpaces (BaseTestCase): + +    def setUp(self): +        super(CommandsWithSpaces, self).setUp() +        f, fname = 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(CommandsWithSpaces, self).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"]) +  def test_main():      unit_tests = (ProcessTestCase,                    POSIXProcessTestCase,                    Win32ProcessTestCase,                    ProcessTestCaseNoPoll, -                  HelperFunctionTests) +                  HelperFunctionTests, +                  CommandsWithSpaces)      test_support.run_unittest(*unit_tests)      test_support.reap_children()  | 
