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

This commit is contained in:
Serhiy Storchaka 2016-10-23 13:07:48 +03:00
parent 58bd36b987
commit e2a3c77546
1 changed files with 72 additions and 2 deletions

View File

@ -17,8 +17,10 @@ from tempfile import TemporaryFile
from random import randint, random, getrandbits
from unittest import skipUnless
from test import script_helper
from test.test_support import TESTFN, TESTFN_UNICODE, TESTFN_ENCODING, \
run_unittest, findfile, unlink, rmtree, check_warnings
run_unittest, findfile, unlink, rmtree, \
check_warnings, captured_stdout
try:
TESTFN_UNICODE.encode(TESTFN_ENCODING)
except (UnicodeError, TypeError):
@ -1770,11 +1772,79 @@ class UniversalNewlineTests(unittest.TestCase):
unlink(TESTFN2)
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')
with captured_stdout() as t, zipfile.ZipFile(zip_name, 'r') as tf:
tf.printdir()
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')
extdir = TESTFNDIR
os.mkdir(extdir)
try:
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))
finally:
rmtree(extdir)
def test_main():
run_unittest(TestsWithSourceFile, TestZip64InSmallFiles, OtherTests,
PyZipFileTests, DecryptionTests, TestsWithMultipleOpens,
TestWithDirectory, UniversalNewlineTests,
TestsWithRandomBinaryFiles)
TestsWithRandomBinaryFiles, CommandLineTest)
if __name__ == "__main__":
test_main()