| """Tests for distutils.spawn.""" |
| import unittest |
| import os |
| import time |
| from test.test_support import captured_stdout, run_unittest |
| |
| from distutils.spawn import _nt_quote_args |
| from distutils.spawn import spawn, find_executable |
| from distutils.errors import DistutilsExecError |
| from distutils.tests import support |
| |
| class SpawnTestCase(support.TempdirManager, |
| support.LoggingSilencer, |
| unittest.TestCase): |
| |
| def test_nt_quote_args(self): |
| |
| for (args, wanted) in ((['with space', 'nospace'], |
| ['"with space"', 'nospace']), |
| (['nochange', 'nospace'], |
| ['nochange', 'nospace'])): |
| res = _nt_quote_args(args) |
| self.assertEqual(res, wanted) |
| |
| |
| @unittest.skipUnless(os.name in ('nt', 'posix'), |
| 'Runs only under posix or nt') |
| def test_spawn(self): |
| tmpdir = self.mkdtemp() |
| |
| # creating something executable |
| # through the shell that returns 1 |
| if os.name == 'posix': |
| exe = os.path.join(tmpdir, 'foo.sh') |
| self.write_file(exe, '#!/bin/sh\nexit 1') |
| os.chmod(exe, 0777) |
| else: |
| exe = os.path.join(tmpdir, 'foo.bat') |
| self.write_file(exe, 'exit 1') |
| |
| os.chmod(exe, 0777) |
| self.assertRaises(DistutilsExecError, spawn, [exe]) |
| |
| # now something that works |
| if os.name == 'posix': |
| exe = os.path.join(tmpdir, 'foo.sh') |
| self.write_file(exe, '#!/bin/sh\nexit 0') |
| os.chmod(exe, 0777) |
| else: |
| exe = os.path.join(tmpdir, 'foo.bat') |
| self.write_file(exe, 'exit 0') |
| |
| os.chmod(exe, 0777) |
| spawn([exe]) # should work without any error |
| |
| def test_suite(): |
| return unittest.makeSuite(SpawnTestCase) |
| |
| if __name__ == "__main__": |
| run_unittest(test_suite()) |