Issue #28115: Added tests for CLI of the zipfile module.
This commit is contained in:
parent
52e5004b59
commit
61c4c44b2a
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue