diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2008-12-14 11:50:48 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2008-12-14 11:50:48 (GMT) |
commit | f088e5e6cc0e7ad7991a910be13510ca33e91958 (patch) | |
tree | bc4281856af88400076b08b3e6d4431565017e3e /Lib/test/test_cmd_line_script.py | |
parent | 80a0c7f62366235059bd2e5892554fa75c7670ca (diff) | |
download | cpython-f088e5e6cc0e7ad7991a910be13510ca33e91958.zip cpython-f088e5e6cc0e7ad7991a910be13510ca33e91958.tar.gz cpython-f088e5e6cc0e7ad7991a910be13510ca33e91958.tar.bz2 |
Merged revisions 67750-67751 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r67750 | nick.coghlan | 2008-12-14 20:54:50 +1000 (Sun, 14 Dec 2008) | 1 line
Fix several issues relating to access to source code inside zipfiles. Initial work by Alexander Belopolsky. See Misc/NEWS in this checkin for details.
........
r67751 | nick.coghlan | 2008-12-14 21:09:40 +1000 (Sun, 14 Dec 2008) | 1 line
Add file that was missed from r67750
........
Diffstat (limited to 'Lib/test/test_cmd_line_script.py')
-rw-r--r-- | Lib/test/test_cmd_line_script.py | 69 |
1 files changed, 55 insertions, 14 deletions
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index e0b09ea..7fab383 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -75,36 +75,66 @@ def _compile_test_script(script_name): compiled_name = script_name + 'o' return compiled_name -def _make_test_zip(zip_dir, zip_basename, script_name): +def _make_test_zip(zip_dir, zip_basename, script_name, name_in_zip=None): zip_filename = zip_basename+os.path.extsep+"zip" zip_name = os.path.join(zip_dir, zip_filename) zip_file = zipfile.ZipFile(zip_name, 'w') - zip_file.write(script_name, os.path.basename(script_name)) + if name_in_zip is None: + name_in_zip = os.path.basename(script_name) + zip_file.write(script_name, name_in_zip) zip_file.close() - # if verbose: + #if verbose: # zip_file = zipfile.ZipFile(zip_name, 'r') # print("Contents of %r:" % zip_name) # zip_file.printdir() # zip_file.close() - return zip_name + return zip_name, os.path.join(zip_name, name_in_zip) def _make_test_pkg(pkg_dir): os.mkdir(pkg_dir) _make_test_script(pkg_dir, '__init__', '') +def _make_test_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, + source=test_source, depth=1): + init_name = _make_test_script(zip_dir, '__init__', '') + init_basename = os.path.basename(init_name) + script_name = _make_test_script(zip_dir, script_basename, source) + pkg_names = [os.sep.join([pkg_name]*i) for i in range(1, depth+1)] + script_name_in_zip = os.path.join(pkg_names[-1], os.path.basename(script_name)) + zip_filename = zip_basename+os.extsep+'zip' + zip_name = os.path.join(zip_dir, zip_filename) + zip_file = zipfile.ZipFile(zip_name, 'w') + for name in pkg_names: + init_name_in_zip = os.path.join(name, init_basename) + zip_file.write(init_name, init_name_in_zip) + zip_file.write(script_name, script_name_in_zip) + zip_file.close() + os.unlink(init_name) + os.unlink(script_name) + #if verbose: + # zip_file = zipfile.ZipFile(zip_name, 'r') + # print 'Contents of %r:' % zip_name + # zip_file.printdir() + # zip_file.close() + return zip_name, os.path.join(zip_name, script_name_in_zip) + # There's no easy way to pass the script directory in to get # -m to work (avoiding that is the whole point of making # directories and zipfiles executable!) # So we fake it for testing purposes with a custom launch script launch_source = """\ import sys, os.path, runpy -sys.path[0:0] = os.path.dirname(__file__) +sys.path.insert(0, %s) runpy._run_module_as_main(%r) """ -def _make_launch_script(script_dir, script_basename, module_name): - return _make_test_script(script_dir, script_basename, - launch_source % module_name) +def _make_launch_script(script_dir, script_basename, module_name, path=None): + if path is None: + path = "os.path.dirname(__file__)" + else: + path = repr(path) + source = launch_source % (path, module_name) + return _make_test_script(script_dir, script_basename, source) class CmdLineTest(unittest.TestCase): def _check_script(self, script_name, expected_file, @@ -155,15 +185,15 @@ class CmdLineTest(unittest.TestCase): def test_zipfile(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, '__main__') - zip_name = _make_test_zip(script_dir, 'test_zip', script_name) - self._check_script(zip_name, None, zip_name, '') + zip_name, run_name = _make_test_zip(script_dir, 'test_zip', script_name) + self._check_script(zip_name, run_name, zip_name, '') def test_zipfile_compiled(self): with temp_dir() as script_dir: script_name = _make_test_script(script_dir, '__main__') compiled_name = _compile_test_script(script_name) - zip_name = _make_test_zip(script_dir, 'test_zip', compiled_name) - self._check_script(zip_name, None, zip_name, '') + zip_name, run_name = _make_test_zip(script_dir, 'test_zip', compiled_name) + self._check_script(zip_name, run_name, zip_name, '') def test_module_in_package(self): with temp_dir() as script_dir: @@ -171,8 +201,19 @@ class CmdLineTest(unittest.TestCase): _make_test_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, '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') + + 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') def test_main(): |