from test_support import verify
import sys, os
import gzip, tempfile

filename = tempfile.mktemp()

data1 = """  int length=DEFAULTALLOC, err = Z_OK;
  PyObject *RetVal;
  int flushmode = Z_FINISH;
  unsigned long start_total_out;

"""

data2 = """/* zlibmodule.c -- gzip-compatible data compression */
/* See http://www.cdrom.com/pub/infozip/zlib/ */
/* See http://www.winimage.com/zLibDll for Windows */
"""

f = gzip.GzipFile(filename, 'wb') ; f.write(data1 * 50) ; f.close()

f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close()
verify(d == data1*50)

# Append to the previous file
f = gzip.GzipFile(filename, 'ab') ; f.write(data2 * 15) ; f.close()

f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close()
verify(d == (data1*50) + (data2*15))

# Try .readline() with varying line lengths

f = gzip.GzipFile(filename, 'rb')
line_length = 0
while 1:
    L = f.readline(line_length)
    if L == "" and line_length != 0: break
    verify(len(L) <= line_length)
    line_length = (line_length + 1) % 50
f.close()

# Try .readlines()

f = gzip.GzipFile(filename, 'rb')
L = f.readlines()
f.close()

f = gzip.GzipFile(filename, 'rb')
while 1:
    L = f.readlines(150)
    if L == []: break
f.close()


os.unlink(filename)
