Skip to content

Commit

Permalink
bpo-23596: Add unit tests for the command line for the gzip module (G…
Browse files Browse the repository at this point in the history
…H-9775)

Add unit tests for the command line for the gzip module
(cherry picked from commit 84eec11)

Co-authored-by: Stéphane Wirtel <stephane@wirtel.be>
  • Loading branch information
miss-islington and matrixise committed Oct 9, 2018
1 parent 25bfb1a commit 482dc94
Showing 1 changed file with 93 additions and 6 deletions.
99 changes: 93 additions & 6 deletions 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;
Expand All @@ -24,6 +29,9 @@
"""


TEMPDIR = os.path.abspath(support.TESTFN) + '-gzdir'


class UnseekableIO(io.BytesIO):
def seekable(self):
return False
Expand Down Expand Up @@ -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)

0 comments on commit 482dc94

Please sign in to comment.