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

This commit is contained in:
Serhiy Storchaka 2016-10-23 13:07:59 +03:00
parent 52e5004b59
commit 61c4c44b2a
1 changed files with 67 additions and 1 deletions

View File

@ -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,
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()