[Python-checkins] bpo-23596: Add unit tests for the command line for the gzip module (GH-9775)
Miss Islington (bot)
webhook-mailer at python.org
Tue Oct 9 17:43:01 EDT 2018
https://github.com/python/cpython/commit/8e23ba021f45df67edd2926a3e3daf6a2a1f0ed8
commit: 8e23ba021f45df67edd2926a3e3daf6a2a1f0ed8
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2018-10-09T14:42:58-07:00
summary:
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
(cherry picked from commit 84eec1199583bcb034e43337bcb8e2b876ebd269)
Co-authored-by: Stéphane Wirtel <stephane at wirtel.be>
files:
M Lib/test/test_gzip.py
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 295d4d4a8fdf..b072ce4682c0 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 @@
"""
+TEMPDIR = os.path.abspath(support.TESTFN) + '-gzdir'
+
+
class UnseekableIO(io.BytesIO):
def seekable(self):
return False
@@ -665,8 +673,87 @@ def test_newline(self):
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)
More information about the Python-checkins
mailing list