Commit 3da0489b authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #28115: Added tests for CLI of the zipfile module.

parent 1b3eb2d4
...@@ -12,7 +12,8 @@ import unittest ...@@ -12,7 +12,8 @@ import unittest
from tempfile import TemporaryFile from tempfile import TemporaryFile
from random import randint, random, getrandbits from random import randint, random, getrandbits
from test.support import (TESTFN, findfile, unlink, rmtree, from test.support import script_helper
from test.support import (TESTFN, findfile, unlink, rmtree, temp_dir,
requires_zlib, requires_bz2, requires_lzma, requires_zlib, requires_bz2, requires_lzma,
captured_stdout, check_warnings) captured_stdout, check_warnings)
...@@ -2115,5 +2116,70 @@ class LzmaUniversalNewlineTests(AbstractUniversalNewlineTests, ...@@ -2115,5 +2116,70 @@ class LzmaUniversalNewlineTests(AbstractUniversalNewlineTests,
unittest.TestCase): unittest.TestCase):
compression = zipfile.ZIP_LZMA compression = zipfile.ZIP_LZMA
class CommandLineTest(unittest.TestCase):
def zipfilecmd(self, *args, **kwargs):
rc, out, err = script_helper.assert_python_ok('-m', 'zipfile', *args,
**kwargs)
return out.replace(os.linesep.encode(), b'\n')
def zipfilecmd_failure(self, *args):
return script_helper.assert_python_failure('-m', 'zipfile', *args)
def test_test_command(self):
zip_name = findfile('zipdir.zip')
out = self.zipfilecmd('-t', zip_name)
self.assertEqual(out.rstrip(), b'Done testing')
zip_name = findfile('testtar.tar')
rc, out, err = self.zipfilecmd_failure('-t', zip_name)
self.assertEqual(out, b'')
def test_list_command(self):
zip_name = findfile('zipdir.zip')
t = io.StringIO()
with zipfile.ZipFile(zip_name, 'r') as tf:
tf.printdir(t)
expected = t.getvalue().encode('ascii', 'backslashreplace')
out = self.zipfilecmd('-l', zip_name,
PYTHONIOENCODING='ascii:backslashreplace')
self.assertEqual(out, expected)
def test_create_command(self):
self.addCleanup(unlink, TESTFN)
with open(TESTFN, 'w') as f:
f.write('test 1')
os.mkdir(TESTFNDIR)
self.addCleanup(rmtree, TESTFNDIR)
with open(os.path.join(TESTFNDIR, 'file.txt'), 'w') as f:
f.write('test 2')
files = [TESTFN, TESTFNDIR]
namelist = [TESTFN, TESTFNDIR + '/', TESTFNDIR + '/file.txt']
try:
out = self.zipfilecmd('-c', TESTFN2, *files)
self.assertEqual(out, b'')
with zipfile.ZipFile(TESTFN2) as zf:
self.assertEqual(zf.namelist(), namelist)
self.assertEqual(zf.read(namelist[0]), b'test 1')
self.assertEqual(zf.read(namelist[2]), b'test 2')
finally:
unlink(TESTFN2)
def test_extract_command(self):
zip_name = findfile('zipdir.zip')
with temp_dir() as extdir:
out = self.zipfilecmd('-e', zip_name, extdir)
self.assertEqual(out, b'')
with zipfile.ZipFile(zip_name) as zf:
for zi in zf.infolist():
path = os.path.join(extdir,
zi.filename.replace('/', os.sep))
if zi.filename.endswith('/'):
self.assertTrue(os.path.isdir(path))
else:
self.assertTrue(os.path.isfile(path))
with open(path, 'rb') as f:
self.assertEqual(f.read(), zf.read(zi))
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment