Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | from test.test_support import verify, TESTFN |
2 | import sys, os | |
3 | import gzip | |
4 | ||
5 | filename = TESTFN | |
6 | ||
7 | data1 = """ int length=DEFAULTALLOC, err = Z_OK; | |
8 | PyObject *RetVal; | |
9 | int flushmode = Z_FINISH; | |
10 | unsigned long start_total_out; | |
11 | ||
12 | """ | |
13 | ||
14 | data2 = """/* zlibmodule.c -- gzip-compatible data compression */ | |
15 | /* See http://www.gzip.org/zlib/ | |
16 | /* See http://www.winimage.com/zLibDll for Windows */ | |
17 | """ | |
18 | ||
19 | f = gzip.GzipFile(filename, 'wb') ; f.write(data1 * 50) | |
20 | ||
21 | # Try flush and fileno. | |
22 | f.flush() | |
23 | f.fileno() | |
24 | if hasattr(os, 'fsync'): | |
25 | os.fsync(f.fileno()) | |
26 | f.close() | |
27 | ||
28 | # Try reading. | |
29 | f = gzip.GzipFile(filename, 'r') ; d = f.read() ; f.close() | |
30 | verify(d == data1*50) | |
31 | ||
32 | # Append to the previous file | |
33 | f = gzip.GzipFile(filename, 'ab') ; f.write(data2 * 15) ; f.close() | |
34 | ||
35 | f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close() | |
36 | verify(d == (data1*50) + (data2*15)) | |
37 | ||
38 | # Try .readline() with varying line lengths | |
39 | ||
40 | f = gzip.GzipFile(filename, 'rb') | |
41 | line_length = 0 | |
42 | while 1: | |
43 | L = f.readline(line_length) | |
44 | if L == "" and line_length != 0: break | |
45 | verify(len(L) <= line_length) | |
46 | line_length = (line_length + 1) % 50 | |
47 | f.close() | |
48 | ||
49 | # Try .readlines() | |
50 | ||
51 | f = gzip.GzipFile(filename, 'rb') | |
52 | L = f.readlines() | |
53 | f.close() | |
54 | ||
55 | f = gzip.GzipFile(filename, 'rb') | |
56 | while 1: | |
57 | L = f.readlines(150) | |
58 | if L == []: break | |
59 | f.close() | |
60 | ||
61 | # Try seek, read test | |
62 | ||
63 | f = gzip.GzipFile(filename) | |
64 | while 1: | |
65 | oldpos = f.tell() | |
66 | line1 = f.readline() | |
67 | if not line1: break | |
68 | newpos = f.tell() | |
69 | f.seek(oldpos) # negative seek | |
70 | if len(line1)>10: | |
71 | amount = 10 | |
72 | else: | |
73 | amount = len(line1) | |
74 | line2 = f.read(amount) | |
75 | verify(line1[:amount] == line2) | |
76 | f.seek(newpos) # positive seek | |
77 | f.close() | |
78 | ||
79 | # Try seek, write test | |
80 | f = gzip.GzipFile(filename, 'w') | |
81 | for pos in range(0, 256, 16): | |
82 | f.seek(pos) | |
83 | f.write('GZ\n') | |
84 | f.close() | |
85 | ||
86 | f = gzip.GzipFile(filename, 'r') | |
87 | verify(f.myfileobj.mode == 'rb') | |
88 | f.close() | |
89 | ||
90 | os.unlink(filename) |