summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_gzip.py
diff options
context:
space:
mode:
authorStéphane Wirtel <stephane@wirtel.be>2018-10-09 21:16:43 (GMT)
committerJulien Palard <julien@palard.fr>2018-10-09 21:16:43 (GMT)
commit84eec1199583bcb034e43337bcb8e2b876ebd269 (patch)
treeca9c3451fcf0e9d213efb7df9b80179b71419a93 /Lib/test/test_gzip.py
parentc880ffe7d2ce2fedb1831918c8a36e3623e0fb76 (diff)
downloadcpython-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.py99
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)