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
This commit is contained in:
parent
c880ffe7d2
commit
84eec11995
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue