blob: d42dee66678943b7236903f9e2161704904123e9 [file] [log] [blame]
Guido van Rossumf27cc5b2001-01-17 21:43:06 +00001from test_support import verify
Andrew M. Kuchling605ebdd1999-03-25 21:50:27 +00002import sys, os
3import gzip, tempfile
4
5filename = tempfile.mktemp()
6
7data1 = """ int length=DEFAULTALLOC, err = Z_OK;
8 PyObject *RetVal;
9 int flushmode = Z_FINISH;
10 unsigned long start_total_out;
11
12"""
13
14data2 = """/* zlibmodule.c -- gzip-compatible data compression */
15/* See http://www.cdrom.com/pub/infozip/zlib/ */
16/* See http://www.winimage.com/zLibDll for Windows */
17"""
18
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000019f = gzip.GzipFile(filename, 'wb') ; f.write(data1 * 50) ; f.close()
Andrew M. Kuchling605ebdd1999-03-25 21:50:27 +000020
Skip Montanaro12424bc2002-05-23 01:43:05 +000021f = gzip.GzipFile(filename, 'r') ; d = f.read() ; f.close()
Marc-André Lemburg36619082001-01-17 19:11:13 +000022verify(d == data1*50)
Andrew M. Kuchling605ebdd1999-03-25 21:50:27 +000023
24# Append to the previous file
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000025f = gzip.GzipFile(filename, 'ab') ; f.write(data2 * 15) ; f.close()
Andrew M. Kuchling605ebdd1999-03-25 21:50:27 +000026
Guido van Rossum052364b1999-04-07 19:00:58 +000027f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close()
Marc-André Lemburg36619082001-01-17 19:11:13 +000028verify(d == (data1*50) + (data2*15))
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000029
30# Try .readline() with varying line lengths
31
32f = gzip.GzipFile(filename, 'rb')
33line_length = 0
34while 1:
Guido van Rossumf27cc5b2001-01-17 21:43:06 +000035 L = f.readline(line_length)
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000036 if L == "" and line_length != 0: break
Marc-André Lemburg36619082001-01-17 19:11:13 +000037 verify(len(L) <= line_length)
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000038 line_length = (line_length + 1) % 50
39f.close()
40
Fred Drake004d5e62000-10-23 17:22:08 +000041# Try .readlines()
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000042
43f = gzip.GzipFile(filename, 'rb')
44L = f.readlines()
45f.close()
46
47f = gzip.GzipFile(filename, 'rb')
48while 1:
49 L = f.readlines(150)
Fred Drake004d5e62000-10-23 17:22:08 +000050 if L == []: break
Andrew M. Kuchling85ab7382000-07-29 20:18:34 +000051f.close()
52
Martin v. Löwis8cc965c2001-08-09 07:21:56 +000053# Try seek, read test
54
55f = gzip.GzipFile(filename)
56while 1:
57 oldpos = f.tell()
58 line1 = f.readline()
59 if not line1: break
60 newpos = f.tell()
61 f.seek(oldpos) # negative seek
62 if len(line1)>10:
63 amount = 10
64 else:
65 amount = len(line1)
66 line2 = f.read(amount)
67 verify(line1[:amount] == line2)
68 f.seek(newpos) # positive seek
69f.close()
70
71# Try seek, write test
72f = gzip.GzipFile(filename, 'w')
73for pos in range(0, 256, 16):
Tim Petersab9ba272001-08-09 21:40:30 +000074 f.seek(pos)
Martin v. Löwis8cc965c2001-08-09 07:21:56 +000075 f.write('GZ\n')
76f.close()
Andrew M. Kuchling605ebdd1999-03-25 21:50:27 +000077
Skip Montanaro12424bc2002-05-23 01:43:05 +000078f = gzip.GzipFile(filename, 'r')
79verify(f.myfileobj.mode == 'rb')
80f.close()
81
Guido van Rossumf27cc5b2001-01-17 21:43:06 +000082os.unlink(filename)