summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-10-23 10:12:39 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-10-23 10:12:39 (GMT)
commit89ecb4ac1046397ae0fc09676adf90ef7a72ea95 (patch)
treedaeb8fb66f5cfdd5f7bf2284adedbd7b8fb0944e
parent662cef66d7e90ec3c391a5b5ab933c159ef009b6 (diff)
parent61c4c44b2a821740c78964398a3469ad10bd03ad (diff)
downloadcpython-89ecb4ac1046397ae0fc09676adf90ef7a72ea95.zip
cpython-89ecb4ac1046397ae0fc09676adf90ef7a72ea95.tar.gz
cpython-89ecb4ac1046397ae0fc09676adf90ef7a72ea95.tar.bz2
Issue #28115: Added tests for CLI of the zipfile module.
-rw-r--r--Lib/test/test_zipfile.py68
1 files changed, 67 insertions, 1 deletions
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 5d7b91f..fb3bbe4 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -12,7 +12,8 @@ import unittest
from tempfile import TemporaryFile
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,
captured_stdout, check_warnings)
@@ -2041,5 +2042,70 @@ class ZipInfoTests(unittest.TestCase):
self.assertEqual(zi.compress_type, zipfile.ZIP_STORED)
self.assertEqual(zi.file_size, 0)
+
+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.is_dir():
+ 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__":
unittest.main()