1 """Tests for distutils.spawn.""" 2 import unittest 3 import os 4 import time 5 from test.test_support import captured_stdout, run_unittest 6 7 from distutils.spawn import _nt_quote_args 8 from distutils.spawn import spawn, find_executable 9 from distutils.errors import DistutilsExecError 10 from distutils.tests import support 11 12 class SpawnTestCase(support.TempdirManager, 13 support.LoggingSilencer, 14 unittest.TestCase): 15 16 def test_nt_quote_args(self): 17 18 for (args, wanted) in ((['with space', 'nospace'], 19 ['"with space"', 'nospace']), 20 (['nochange', 'nospace'], 21 ['nochange', 'nospace'])): 22 res = _nt_quote_args(args) 23 self.assertEqual(res, wanted) 24 25 26 @unittest.skipUnless(os.name in ('nt', 'posix'), 27 'Runs only under posix or nt') 28 def test_spawn(self): 29 tmpdir = self.mkdtemp() 30 31 # creating something executable 32 # through the shell that returns 1 33 if os.name == 'posix': 34 exe = os.path.join(tmpdir, 'foo.sh') 35 self.write_file(exe, '#!/bin/sh\nexit 1') 36 os.chmod(exe, 0777) 37 else: 38 exe = os.path.join(tmpdir, 'foo.bat') 39 self.write_file(exe, 'exit 1') 40 41 os.chmod(exe, 0777) 42 self.assertRaises(DistutilsExecError, spawn, [exe]) 43 44 # now something that works 45 if os.name == 'posix': 46 exe = os.path.join(tmpdir, 'foo.sh') 47 self.write_file(exe, '#!/bin/sh\nexit 0') 48 os.chmod(exe, 0777) 49 else: 50 exe = os.path.join(tmpdir, 'foo.bat') 51 self.write_file(exe, 'exit 0') 52 53 os.chmod(exe, 0777) 54 spawn([exe]) # should work without any error 55 56 def test_suite(): 57 return unittest.makeSuite(SpawnTestCase) 58 59 if __name__ == "__main__": 60 run_unittest(test_suite()) 61