diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2010-08-17 13:06:11 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2010-08-17 13:06:11 (GMT) |
commit | d26c18adccf02321592cd58a2dadb0ab68af6906 (patch) | |
tree | 0429b57ab0d5cc0b36ca68af24f382c888cbcf9c /Lib/test/test_cmd_line_script.py | |
parent | 46e63805638e0fac20aeae837e1f93b4a675446a (diff) | |
download | cpython-d26c18adccf02321592cd58a2dadb0ab68af6906.zip cpython-d26c18adccf02321592cd58a2dadb0ab68af6906.tar.gz cpython-d26c18adccf02321592cd58a2dadb0ab68af6906.tar.bz2 |
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Diffstat (limited to 'Lib/test/test_cmd_line_script.py')
-rw-r--r-- | Lib/test/test_cmd_line_script.py | 121 |
1 files changed, 92 insertions, 29 deletions
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index 3f4dd6d..d19316b 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -5,12 +5,12 @@ import os import os.path import py_compile -import test.support +from test import support from test.script_helper import ( make_pkg, make_script, make_zip_pkg, make_zip_script, run_python, temp_dir) -verbose = test.support.verbose +verbose = support.verbose test_source = """\ # Script may be run with optimisation enabled, so don't rely on assert @@ -36,6 +36,10 @@ print('__package__==%r' % __package__) import sys assertIdentical(globals(), sys.modules[__name__].__dict__) print('sys.argv[0]==%r' % sys.argv[0]) +print('sys.path[0]==%r' % sys.path[0]) +# Check the working directory +import os +print('cwd==%r' % os.getcwd()) """ def _make_test_script(script_dir, script_basename, source=test_source): @@ -65,32 +69,44 @@ def _make_launch_script(script_dir, script_basename, module_name, path=None): return make_script(script_dir, script_basename, source) class CmdLineTest(unittest.TestCase): - def _check_script(self, script_name, expected_file, - expected_argv0, expected_package, - *cmd_line_switches): - run_args = cmd_line_switches + (script_name,) - exit_code, data = run_python(*run_args) - if verbose: + def _check_output(self, script_name, exit_code, data, + expected_file, expected_argv0, + expected_path0, expected_package): + if verbose > 1: print("Output from test script %r:" % script_name) print(data) self.assertEqual(exit_code, 0) printed_file = '__file__==%r' % expected_file - printed_argv0 = 'sys.argv[0]==%r' % expected_argv0 printed_package = '__package__==%r' % expected_package - if verbose: + printed_argv0 = 'sys.argv[0]==%r' % expected_argv0 + printed_path0 = 'sys.path[0]==%r' % expected_path0 + printed_cwd = 'cwd==%r' % os.getcwd() + if verbose > 1: print('Expected output:') print(printed_file) print(printed_package) print(printed_argv0) + print(printed_cwd) self.assertIn(printed_file.encode('utf-8'), data) self.assertIn(printed_package.encode('utf-8'), data) self.assertIn(printed_argv0.encode('utf-8'), data) + self.assertIn(printed_path0.encode('utf-8'), data) + self.assertIn(printed_cwd.encode('utf-8'), data) + + def _check_script(self, script_name, expected_file, + expected_argv0, expected_path0, + expected_package, + *cmd_line_switches): + run_args = cmd_line_switches + (script_name,) + exit_code, data = run_python(*run_args) + self._check_output(script_name, exit_code, data, expected_file, + expected_argv0, expected_path0, expected_package) def _check_import_error(self, script_name, expected_msg, *cmd_line_switches): run_args = cmd_line_switches + (script_name,) exit_code, data = run_python(*run_args) - if verbose: + if verbose > 1: print('Output from test script %r:' % script_name) print(data) print('Expected output: %r' % expected_msg) @@ -99,28 +115,32 @@ class CmdLineTest(unittest.TestCase): def test_basic_script(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, 'script') - self._check_script(script_name, script_name, script_name, None) + self._check_script(script_name, script_name, script_name, + script_dir, None) def test_script_compiled(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, 'script') - compiled_name = py_compile.compile(script_name, doraise=True) + py_compile.compile(script_name, doraise=True) os.remove(script_name) - self._check_script(compiled_name, compiled_name, - compiled_name, None) + pyc_file = support.make_legacy_pyc(script_name) + self._check_script(pyc_file, pyc_file, + pyc_file, script_dir, None) def test_directory(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, '__main__') - self._check_script(script_dir, script_name, script_dir, '') + self._check_script(script_dir, script_name, script_dir, + script_dir, '') def test_directory_compiled(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, '__main__') - compiled_name = py_compile.compile(script_name, doraise=True) + py_compile.compile(script_name, doraise=True) os.remove(script_name) - pyc_file = test.support.make_legacy_pyc(script_name) - self._check_script(script_dir, pyc_file, script_dir, '') + pyc_file = support.make_legacy_pyc(script_name) + self._check_script(script_dir, pyc_file, script_dir, + script_dir, '') def test_directory_error(self): with temp_dir() as script_dir: @@ -131,14 +151,14 @@ class CmdLineTest(unittest.TestCase): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, '__main__') zip_name, run_name = make_zip_script(script_dir, 'test_zip', script_name) - self._check_script(zip_name, run_name, zip_name, '') + self._check_script(zip_name, run_name, zip_name, zip_name, '') def test_zipfile_compiled(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, '__main__') compiled_name = py_compile.compile(script_name, doraise=True) zip_name, run_name = make_zip_script(script_dir, 'test_zip', compiled_name) - self._check_script(zip_name, run_name, zip_name, '') + self._check_script(zip_name, run_name, zip_name, zip_name, '') def test_zipfile_error(self): with temp_dir() as script_dir: @@ -153,19 +173,19 @@ class CmdLineTest(unittest.TestCase): make_pkg(pkg_dir) script_name = _make_test_script(pkg_dir, 'script') launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg.script') - self._check_script(launch_name, script_name, script_name, 'test_pkg') + self._check_script(launch_name, script_name, script_name, script_dir, 'test_pkg') def test_module_in_package_in_zipfile(self): with temp_dir() as script_dir: zip_name, run_name = _make_test_zip_pkg(script_dir, 'test_zip', 'test_pkg', 'script') launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg.script', zip_name) - self._check_script(launch_name, run_name, run_name, 'test_pkg') + self._check_script(launch_name, run_name, run_name, zip_name, 'test_pkg') def test_module_in_subpackage_in_zipfile(self): with temp_dir() as script_dir: zip_name, run_name = _make_test_zip_pkg(script_dir, 'test_zip', 'test_pkg', 'script', depth=2) launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg.test_pkg.script', zip_name) - self._check_script(launch_name, run_name, run_name, 'test_pkg.test_pkg') + self._check_script(launch_name, run_name, run_name, zip_name, 'test_pkg.test_pkg') def test_package(self): with temp_dir() as script_dir: @@ -174,7 +194,7 @@ class CmdLineTest(unittest.TestCase): script_name = _make_test_script(pkg_dir, '__main__') launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg') self._check_script(launch_name, script_name, - script_name, 'test_pkg') + script_name, script_dir, 'test_pkg') def test_package_compiled(self): with temp_dir() as script_dir: @@ -183,10 +203,10 @@ class CmdLineTest(unittest.TestCase): script_name = _make_test_script(pkg_dir, '__main__') compiled_name = py_compile.compile(script_name, doraise=True) os.remove(script_name) - pyc_file = test.support.make_legacy_pyc(script_name) + pyc_file = support.make_legacy_pyc(script_name) launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg') self._check_script(launch_name, pyc_file, - pyc_file, 'test_pkg') + pyc_file, script_dir, 'test_pkg') def test_package_error(self): with temp_dir() as script_dir: @@ -209,10 +229,53 @@ class CmdLineTest(unittest.TestCase): launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg') self._check_import_error(launch_name, msg) + def test_issue8202(self): + # Make sure package __init__ modules see "-m" in sys.argv0 while + # searching for the module to execute + with temp_dir() as script_dir: + with support.temp_cwd(path=script_dir): + pkg_dir = os.path.join(script_dir, 'test_pkg') + make_pkg(pkg_dir, "import sys; print('init_argv0==%r' % sys.argv[0])") + script_name = _make_test_script(pkg_dir, 'script') + exit_code, data = run_python('-m', 'test_pkg.script') + if verbose > 1: + print(data) + self.assertEqual(exit_code, 0) + expected = "init_argv0==%r" % '-m' + self.assertIn(expected.encode('utf-8'), data) + self._check_output(script_name, exit_code, data, + script_name, script_name, '', 'test_pkg') + + def test_issue8202_dash_c_file_ignored(self): + # Make sure a "-c" file in the current directory + # does not alter the value of sys.path[0] + with temp_dir() as script_dir: + with support.temp_cwd(path=script_dir): + with open("-c", "w") as f: + f.write("data") + exit_code, data = run_python('-c', + 'import sys; print("sys.path[0]==%r" % sys.path[0])') + if verbose > 1: + print(data) + self.assertEqual(exit_code, 0) + expected = "sys.path[0]==%r" % '' + self.assertIn(expected.encode('utf-8'), data) + + def test_issue8202_dash_m_file_ignored(self): + # Make sure a "-m" file in the current directory + # does not alter the value of sys.path[0] + with temp_dir() as script_dir: + script_name = _make_test_script(script_dir, 'other') + with support.temp_cwd(path=script_dir): + with open("-m", "w") as f: + f.write("data") + exit_code, data = run_python('-m', 'other') + self._check_output(script_name, exit_code, data, + script_name, script_name, '', '') def test_main(): - test.support.run_unittest(CmdLineTest) - test.support.reap_children() + support.run_unittest(CmdLineTest) + support.reap_children() if __name__ == '__main__': test_main() |