1 import zlib
2 import zipfile, os, StringIO, tempfile
3 try:
4 from test.test_support import TestFailed
5 except ImportError:
8 from translate.misc import zipfileext
9
10 BrokenStringIO = StringIO.StringIO
13 BrokenStringIO.truncate(self, size)
14 self.len = len(self.buf)
15
16 StringIO.StringIO = FixedStringIO
17
18 -def zipTest(srcname, f, compression, srccontents):
31
32 -def deleteTest(srcname, f, compression, srccontents):
33 zip = zipfileext.ZipFileExt(f, "w", compression)
34 othername = "another"+os.extsep+"name"
35 finalname = "adifferent"+os.extsep+"name"
36 leftname, deletenames = othername, [srcname, finalname]
37 zip.write(srcname, srcname)
38 zip.write(srcname, othername)
39 zip.write(srcname, finalname)
40 zip.close()
41
42 zip = zipfileext.ZipFileExt(f, "a", compression)
43 for deletename in deletenames:
44 zip.delete(deletename)
45 zip.close()
46
47 zip = zipfileext.ZipFileExt(f, "r", compression)
48 testfailed = zip.testzip()
49 readData = zip.read(leftname)
50 zip.close()
51
52 if testfailed:
53 raise TestFailed, "zip file didn't pass test"
54 if readData != srccontents:
55 raise TestFailed, "Written data doesn't equal read data."
56
58
60 print repr(method), dir(method)
61 self.srcname = self.__class__.__name__ + "_" + method.__name__ + os.extsep + "tmp"
62 self.zipname = self.__class__.__name__ + "_" + method.__name__ + os.extsep + "zip"
63 if os.path.exists(self.srcname):
64 os.remove(self.srcname)
65 if os.path.exists(self.zipname):
66 os.remove(self.zipname)
67
69 if os.path.exists(self.srcname):
70 os.unlink(self.srcname)
71 if os.path.exists(self.zipname):
72 os.unlink(self.zipname)
73
75 fp = open(self.srcname, "wb")
76 for i in range(0, 1000):
77 fp.write("Test of zipfile line %d.\n" % i)
78 fp.close()
79
80 fp = open(self.srcname, "rb")
81 writtenData = fp.read()
82 fp.close()
83
84 for file in (self.zipname, tempfile.TemporaryFile(), StringIO.StringIO()):
85 zipTest(self.srcname, file, zipfile.ZIP_STORED, writtenData)
86
87 for file in (self.zipname, tempfile.TemporaryFile(), StringIO.StringIO()):
88 zipTest(self.srcname, file, zipfile.ZIP_DEFLATED, writtenData)
89
91 fp = open(self.srcname, "wb")
92 for i in range(0, 1000):
93 fp.write("Test of zipfile line %d.\n" % i)
94 fp.close()
95
96 fp = open(self.srcname, "rb")
97 writtenData = fp.read()
98 fp.close()
99
100 for file in (self.zipname, tempfile.TemporaryFile(), StringIO.StringIO()):
101 deleteTest(self.srcname, file, zipfile.ZIP_STORED, writtenData)
102
103 for file in (self.zipname, tempfile.TemporaryFile(), StringIO.StringIO()):
104 deleteTest(self.srcname, file, zipfile.ZIP_DEFLATED, writtenData)
105
107
108
109
110
111
112
113 fp = open(self.srcname, "w")
114 fp.write("this is not a legal zip file\n")
115 fp.close()
116 try:
117 zf = zipfileext.ZipFileExt(self.srcname)
118 except zipfile.BadZipfile:
119 os.unlink(self.srcname)
120
122
123
124
125 try:
126 zipfileext.ZipFileExt(self.srcname)
127 except IOError:
128
129
130
131
132
133
134
135 pass
136 else:
137 raise TestFailed("expected creation of readable ZipFile without\n"
138 " a file to raise an IOError.")
139
141
142 data = StringIO.StringIO()
143 zipf = zipfileext.ZipFileExt(data, mode="w")
144 zipf.writestr("foo.txt", "O, for a Muse of Fire!")
145 zipf.close()
146 zipf = zipfileext.ZipFileExt(data, mode="r")
147 zipf.close()
148 try:
149 zipf.testzip()
150 except RuntimeError:
151
152
153
154
155 pass
156 else:
157 raise TestFailed("expected calling .testzip on a closed ZipFile"
158 " to raise a RuntimeError")
159 del data, zipf
160