diff options
author | Stéphane Wirtel <stephane@wirtel.be> | 2018-10-09 21:16:43 (GMT) |
---|---|---|
committer | Julien Palard <julien@palard.fr> | 2018-10-09 21:16:43 (GMT) |
commit | 84eec1199583bcb034e43337bcb8e2b876ebd269 (patch) | |
tree | ca9c3451fcf0e9d213efb7df9b80179b71419a93 /Lib/test/test_gzip.py | |
parent | c880ffe7d2ce2fedb1831918c8a36e3623e0fb76 (diff) | |
download | cpython-84eec1199583bcb034e43337bcb8e2b876ebd269.zip cpython-84eec1199583bcb034e43337bcb8e2b876ebd269.tar.gz cpython-84eec1199583bcb034e43337bcb8e2b876ebd269.tar.bz2 |
bpo-23596: Add unit tests for the command line for the gzip module (GH-9775)
Add unit tests for the command line for the gzip module
Diffstat (limited to 'Lib/test/test_gzip.py')
-rw-r--r-- | Lib/test/test_gzip.py | 99 |
1 files changed, 93 insertions, 6 deletions
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py index 295d4d4..b072ce4 100644 --- a/Lib/test/test_gzip.py +++ b/Lib/test/test_gzip.py @@ -1,14 +1,19 @@ """Test script for the gzip module. """ -import unittest -from test import support -from test.support import bigmemtest, _4G +import array +import functools +import io import os import pathlib -import io import struct -import array +import sys +import unittest +from subprocess import PIPE, Popen +from test import support +from test.support import _4G, bigmemtest +from test.support.script_helper import assert_python_ok + gzip = support.import_module('gzip') data1 = b""" int length=DEFAULTALLOC, err = Z_OK; @@ -24,6 +29,9 @@ data2 = b"""/* zlibmodule.c -- gzip-compatible data compression */ """ +TEMPDIR = os.path.abspath(support.TESTFN) + '-gzdir' + + class UnseekableIO(io.BytesIO): def seekable(self): return False @@ -665,8 +673,87 @@ class TestOpen(BaseTest): with gzip.open(self.filename, "rt", newline="\r") as f: self.assertEqual(f.readlines(), [uncompressed]) + +def create_and_remove_directory(directory): + def decorator(function): + @functools.wraps(function) + def wrapper(*args, **kwargs): + os.makedirs(directory) + try: + return function(*args, **kwargs) + finally: + support.rmtree(directory) + return wrapper + return decorator + + +class TestCommandLine(unittest.TestCase): + data = b'This is a simple test with gzip' + + def test_decompress_stdin_stdout(self): + with io.BytesIO() as bytes_io: + with gzip.GzipFile(fileobj=bytes_io, mode='wb') as gzip_file: + gzip_file.write(self.data) + + args = sys.executable, '-m', 'gzip', '-d' + with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: + out, err = proc.communicate(bytes_io.getvalue()) + + self.assertEqual(err, b'') + self.assertEqual(out, self.data) + + @create_and_remove_directory(TEMPDIR) + def test_decompress_infile_outfile(self): + gzipname = os.path.join(TEMPDIR, 'testgzip.gz') + self.assertFalse(os.path.exists(gzipname)) + + with gzip.open(gzipname, mode='wb') as fp: + fp.write(self.data) + rc, out, err = assert_python_ok('-m', 'gzip', '-d', gzipname) + + with open(os.path.join(TEMPDIR, "testgzip"), "rb") as gunziped: + self.assertEqual(gunziped.read(), self.data) + + self.assertTrue(os.path.exists(gzipname)) + self.assertEqual(rc, 0) + self.assertEqual(out, b'') + self.assertEqual(err, b'') + + def test_decompress_infile_outfile_error(self): + rc, out, err = assert_python_ok('-m', 'gzip', '-d', 'thisisatest.out') + self.assertIn(b"filename doesn't end in .gz:", out) + self.assertEqual(rc, 0) + self.assertEqual(err, b'') + + @create_and_remove_directory(TEMPDIR) + def test_compress_stdin_outfile(self): + args = sys.executable, '-m', 'gzip' + with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: + out, err = proc.communicate(self.data) + + self.assertEqual(err, b'') + self.assertEqual(out[:2], b"\x1f\x8b") + + @create_and_remove_directory(TEMPDIR) + def test_compress_infile_outfile(self): + local_testgzip = os.path.join(TEMPDIR, 'testgzip') + gzipname = local_testgzip + '.gz' + self.assertFalse(os.path.exists(gzipname)) + + with open(local_testgzip, 'wb') as fp: + fp.write(self.data) + + rc, out, err = assert_python_ok('-m', 'gzip', local_testgzip) + + self.assertTrue(os.path.exists(gzipname)) + self.assertEqual(rc, 0) + self.assertEqual(out, b'') + self.assertEqual(err, b'') + + def test_main(verbose=None): - support.run_unittest(TestGzip, TestOpen) + support.run_unittest(TestGzip, TestOpen, TestCommandLine) + if __name__ == "__main__": test_main(verbose=True) |