blob: 160b0e8b0fc0115c33aeaff8232e1e261f890ff0 [file] [log] [blame]
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001from io import BytesIO, UnsupportedOperation
2import os
Nadeem Vawda37970652013-10-28 21:35:23 +01003import pickle
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02004import random
5import unittest
6
7from test.support import (
8 _4G, TESTFN, import_module, bigmemtest, run_unittest, unlink
9)
10
11lzma = import_module("lzma")
12from lzma import LZMACompressor, LZMADecompressor, LZMAError, LZMAFile
13
14
15class CompressorDecompressorTestCase(unittest.TestCase):
16
17 # Test error cases.
18
19 def test_simple_bad_args(self):
20 self.assertRaises(TypeError, LZMACompressor, [])
21 self.assertRaises(TypeError, LZMACompressor, format=3.45)
22 self.assertRaises(TypeError, LZMACompressor, check="")
23 self.assertRaises(TypeError, LZMACompressor, preset="asdf")
24 self.assertRaises(TypeError, LZMACompressor, filters=3)
25 # Can't specify FORMAT_AUTO when compressing.
26 self.assertRaises(ValueError, LZMACompressor, format=lzma.FORMAT_AUTO)
27 # Can't specify a preset and a custom filter chain at the same time.
28 with self.assertRaises(ValueError):
29 LZMACompressor(preset=7, filters=[{"id": lzma.FILTER_LZMA2}])
30
31 self.assertRaises(TypeError, LZMADecompressor, ())
32 self.assertRaises(TypeError, LZMADecompressor, memlimit=b"qw")
33 with self.assertRaises(TypeError):
34 LZMADecompressor(lzma.FORMAT_RAW, filters="zzz")
35 # Cannot specify a memory limit with FILTER_RAW.
36 with self.assertRaises(ValueError):
37 LZMADecompressor(lzma.FORMAT_RAW, memlimit=0x1000000)
38 # Can only specify a custom filter chain with FILTER_RAW.
39 self.assertRaises(ValueError, LZMADecompressor, filters=FILTERS_RAW_1)
40 with self.assertRaises(ValueError):
41 LZMADecompressor(format=lzma.FORMAT_XZ, filters=FILTERS_RAW_1)
42 with self.assertRaises(ValueError):
43 LZMADecompressor(format=lzma.FORMAT_ALONE, filters=FILTERS_RAW_1)
44
45 lzc = LZMACompressor()
46 self.assertRaises(TypeError, lzc.compress)
47 self.assertRaises(TypeError, lzc.compress, b"foo", b"bar")
48 self.assertRaises(TypeError, lzc.flush, b"blah")
49 empty = lzc.flush()
50 self.assertRaises(ValueError, lzc.compress, b"quux")
51 self.assertRaises(ValueError, lzc.flush)
52
53 lzd = LZMADecompressor()
54 self.assertRaises(TypeError, lzd.decompress)
55 self.assertRaises(TypeError, lzd.decompress, b"foo", b"bar")
56 lzd.decompress(empty)
57 self.assertRaises(EOFError, lzd.decompress, b"quux")
58
59 def test_bad_filter_spec(self):
60 self.assertRaises(TypeError, LZMACompressor, filters=[b"wobsite"])
61 self.assertRaises(ValueError, LZMACompressor, filters=[{"xyzzy": 3}])
62 self.assertRaises(ValueError, LZMACompressor, filters=[{"id": 98765}])
63 with self.assertRaises(ValueError):
64 LZMACompressor(filters=[{"id": lzma.FILTER_LZMA2, "foo": 0}])
65 with self.assertRaises(ValueError):
66 LZMACompressor(filters=[{"id": lzma.FILTER_DELTA, "foo": 0}])
67 with self.assertRaises(ValueError):
68 LZMACompressor(filters=[{"id": lzma.FILTER_X86, "foo": 0}])
69
70 def test_decompressor_after_eof(self):
71 lzd = LZMADecompressor()
72 lzd.decompress(COMPRESSED_XZ)
73 self.assertRaises(EOFError, lzd.decompress, b"nyan")
74
75 def test_decompressor_memlimit(self):
76 lzd = LZMADecompressor(memlimit=1024)
77 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_XZ)
78
79 lzd = LZMADecompressor(lzma.FORMAT_XZ, memlimit=1024)
80 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_XZ)
81
82 lzd = LZMADecompressor(lzma.FORMAT_ALONE, memlimit=1024)
83 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_ALONE)
84
85 # Test LZMADecompressor on known-good input data.
86
87 def _test_decompressor(self, lzd, data, check, unused_data=b""):
88 self.assertFalse(lzd.eof)
89 out = lzd.decompress(data)
90 self.assertEqual(out, INPUT)
91 self.assertEqual(lzd.check, check)
92 self.assertTrue(lzd.eof)
93 self.assertEqual(lzd.unused_data, unused_data)
94
95 def test_decompressor_auto(self):
96 lzd = LZMADecompressor()
97 self._test_decompressor(lzd, COMPRESSED_XZ, lzma.CHECK_CRC64)
98
99 lzd = LZMADecompressor()
100 self._test_decompressor(lzd, COMPRESSED_ALONE, lzma.CHECK_NONE)
101
102 def test_decompressor_xz(self):
103 lzd = LZMADecompressor(lzma.FORMAT_XZ)
104 self._test_decompressor(lzd, COMPRESSED_XZ, lzma.CHECK_CRC64)
105
106 def test_decompressor_alone(self):
107 lzd = LZMADecompressor(lzma.FORMAT_ALONE)
108 self._test_decompressor(lzd, COMPRESSED_ALONE, lzma.CHECK_NONE)
109
110 def test_decompressor_raw_1(self):
111 lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_1)
112 self._test_decompressor(lzd, COMPRESSED_RAW_1, lzma.CHECK_NONE)
113
114 def test_decompressor_raw_2(self):
115 lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_2)
116 self._test_decompressor(lzd, COMPRESSED_RAW_2, lzma.CHECK_NONE)
117
118 def test_decompressor_raw_3(self):
119 lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_3)
120 self._test_decompressor(lzd, COMPRESSED_RAW_3, lzma.CHECK_NONE)
121
122 def test_decompressor_raw_4(self):
123 lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
124 self._test_decompressor(lzd, COMPRESSED_RAW_4, lzma.CHECK_NONE)
125
126 def test_decompressor_chunks(self):
127 lzd = LZMADecompressor()
128 out = []
129 for i in range(0, len(COMPRESSED_XZ), 10):
130 self.assertFalse(lzd.eof)
131 out.append(lzd.decompress(COMPRESSED_XZ[i:i+10]))
132 out = b"".join(out)
133 self.assertEqual(out, INPUT)
134 self.assertEqual(lzd.check, lzma.CHECK_CRC64)
135 self.assertTrue(lzd.eof)
136 self.assertEqual(lzd.unused_data, b"")
137
138 def test_decompressor_unused_data(self):
139 lzd = LZMADecompressor()
140 extra = b"fooblibar"
141 self._test_decompressor(lzd, COMPRESSED_XZ + extra, lzma.CHECK_CRC64,
142 unused_data=extra)
143
144 def test_decompressor_bad_input(self):
145 lzd = LZMADecompressor()
146 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_RAW_1)
147
148 lzd = LZMADecompressor(lzma.FORMAT_XZ)
149 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_ALONE)
150
151 lzd = LZMADecompressor(lzma.FORMAT_ALONE)
152 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_XZ)
153
154 lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_1)
155 self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_XZ)
156
157 # Test that LZMACompressor->LZMADecompressor preserves the input data.
158
159 def test_roundtrip_xz(self):
160 lzc = LZMACompressor()
161 cdata = lzc.compress(INPUT) + lzc.flush()
162 lzd = LZMADecompressor()
163 self._test_decompressor(lzd, cdata, lzma.CHECK_CRC64)
164
165 def test_roundtrip_alone(self):
166 lzc = LZMACompressor(lzma.FORMAT_ALONE)
167 cdata = lzc.compress(INPUT) + lzc.flush()
168 lzd = LZMADecompressor()
169 self._test_decompressor(lzd, cdata, lzma.CHECK_NONE)
170
171 def test_roundtrip_raw(self):
172 lzc = LZMACompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
173 cdata = lzc.compress(INPUT) + lzc.flush()
174 lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
175 self._test_decompressor(lzd, cdata, lzma.CHECK_NONE)
176
177 def test_roundtrip_chunks(self):
178 lzc = LZMACompressor()
179 cdata = []
180 for i in range(0, len(INPUT), 10):
181 cdata.append(lzc.compress(INPUT[i:i+10]))
182 cdata.append(lzc.flush())
183 cdata = b"".join(cdata)
184 lzd = LZMADecompressor()
185 self._test_decompressor(lzd, cdata, lzma.CHECK_CRC64)
186
187 # LZMADecompressor intentionally does not handle concatenated streams.
188
189 def test_decompressor_multistream(self):
190 lzd = LZMADecompressor()
191 self._test_decompressor(lzd, COMPRESSED_XZ + COMPRESSED_ALONE,
192 lzma.CHECK_CRC64, unused_data=COMPRESSED_ALONE)
193
194 # Test with inputs larger than 4GiB.
195
196 @bigmemtest(size=_4G + 100, memuse=2)
197 def test_compressor_bigmem(self, size):
198 lzc = LZMACompressor()
199 cdata = lzc.compress(b"x" * size) + lzc.flush()
200 ddata = lzma.decompress(cdata)
201 try:
202 self.assertEqual(len(ddata), size)
203 self.assertEqual(len(ddata.strip(b"x")), 0)
204 finally:
205 ddata = None
206
207 @bigmemtest(size=_4G + 100, memuse=3)
208 def test_decompressor_bigmem(self, size):
209 lzd = LZMADecompressor()
210 blocksize = 10 * 1024 * 1024
211 block = random.getrandbits(blocksize * 8).to_bytes(blocksize, "little")
212 try:
213 input = block * (size // blocksize + 1)
214 cdata = lzma.compress(input)
215 ddata = lzd.decompress(cdata)
216 self.assertEqual(ddata, input)
217 finally:
218 input = cdata = ddata = None
219
Nadeem Vawda37970652013-10-28 21:35:23 +0100220 # Pickling raises an exception; there's no way to serialize an lzma_stream.
221
222 def test_pickle(self):
223 with self.assertRaises(TypeError):
224 pickle.dumps(LZMACompressor())
225 with self.assertRaises(TypeError):
226 pickle.dumps(LZMADecompressor())
227
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200228
229class CompressDecompressFunctionTestCase(unittest.TestCase):
230
231 # Test error cases:
232
233 def test_bad_args(self):
234 self.assertRaises(TypeError, lzma.compress)
235 self.assertRaises(TypeError, lzma.compress, [])
236 self.assertRaises(TypeError, lzma.compress, b"", format="xz")
237 self.assertRaises(TypeError, lzma.compress, b"", check="none")
238 self.assertRaises(TypeError, lzma.compress, b"", preset="blah")
239 self.assertRaises(TypeError, lzma.compress, b"", filters=1024)
240 # Can't specify a preset and a custom filter chain at the same time.
241 with self.assertRaises(ValueError):
242 lzma.compress(b"", preset=3, filters=[{"id": lzma.FILTER_LZMA2}])
243
244 self.assertRaises(TypeError, lzma.decompress)
245 self.assertRaises(TypeError, lzma.decompress, [])
246 self.assertRaises(TypeError, lzma.decompress, b"", format="lzma")
247 self.assertRaises(TypeError, lzma.decompress, b"", memlimit=7.3e9)
248 with self.assertRaises(TypeError):
249 lzma.decompress(b"", format=lzma.FORMAT_RAW, filters={})
250 # Cannot specify a memory limit with FILTER_RAW.
251 with self.assertRaises(ValueError):
252 lzma.decompress(b"", format=lzma.FORMAT_RAW, memlimit=0x1000000)
253 # Can only specify a custom filter chain with FILTER_RAW.
254 with self.assertRaises(ValueError):
255 lzma.decompress(b"", filters=FILTERS_RAW_1)
256 with self.assertRaises(ValueError):
257 lzma.decompress(b"", format=lzma.FORMAT_XZ, filters=FILTERS_RAW_1)
258 with self.assertRaises(ValueError):
259 lzma.decompress(
260 b"", format=lzma.FORMAT_ALONE, filters=FILTERS_RAW_1)
261
262 def test_decompress_memlimit(self):
263 with self.assertRaises(LZMAError):
264 lzma.decompress(COMPRESSED_XZ, memlimit=1024)
265 with self.assertRaises(LZMAError):
266 lzma.decompress(
267 COMPRESSED_XZ, format=lzma.FORMAT_XZ, memlimit=1024)
268 with self.assertRaises(LZMAError):
269 lzma.decompress(
270 COMPRESSED_ALONE, format=lzma.FORMAT_ALONE, memlimit=1024)
271
272 # Test LZMADecompressor on known-good input data.
273
274 def test_decompress_good_input(self):
275 ddata = lzma.decompress(COMPRESSED_XZ)
276 self.assertEqual(ddata, INPUT)
277
278 ddata = lzma.decompress(COMPRESSED_ALONE)
279 self.assertEqual(ddata, INPUT)
280
281 ddata = lzma.decompress(COMPRESSED_XZ, lzma.FORMAT_XZ)
282 self.assertEqual(ddata, INPUT)
283
284 ddata = lzma.decompress(COMPRESSED_ALONE, lzma.FORMAT_ALONE)
285 self.assertEqual(ddata, INPUT)
286
287 ddata = lzma.decompress(
288 COMPRESSED_RAW_1, lzma.FORMAT_RAW, filters=FILTERS_RAW_1)
289 self.assertEqual(ddata, INPUT)
290
291 ddata = lzma.decompress(
292 COMPRESSED_RAW_2, lzma.FORMAT_RAW, filters=FILTERS_RAW_2)
293 self.assertEqual(ddata, INPUT)
294
295 ddata = lzma.decompress(
296 COMPRESSED_RAW_3, lzma.FORMAT_RAW, filters=FILTERS_RAW_3)
297 self.assertEqual(ddata, INPUT)
298
299 ddata = lzma.decompress(
300 COMPRESSED_RAW_4, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
301 self.assertEqual(ddata, INPUT)
302
303 def test_decompress_incomplete_input(self):
304 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_XZ[:128])
305 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_ALONE[:128])
306 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_1[:128],
307 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_1)
308 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_2[:128],
309 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2)
310 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_3[:128],
311 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3)
312 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_4[:128],
313 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
314
315 def test_decompress_bad_input(self):
316 with self.assertRaises(LZMAError):
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100317 lzma.decompress(COMPRESSED_BOGUS)
318 with self.assertRaises(LZMAError):
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200319 lzma.decompress(COMPRESSED_RAW_1)
320 with self.assertRaises(LZMAError):
321 lzma.decompress(COMPRESSED_ALONE, format=lzma.FORMAT_XZ)
322 with self.assertRaises(LZMAError):
323 lzma.decompress(COMPRESSED_XZ, format=lzma.FORMAT_ALONE)
324 with self.assertRaises(LZMAError):
325 lzma.decompress(COMPRESSED_XZ, format=lzma.FORMAT_RAW,
326 filters=FILTERS_RAW_1)
327
328 # Test that compress()->decompress() preserves the input data.
329
330 def test_roundtrip(self):
331 cdata = lzma.compress(INPUT)
332 ddata = lzma.decompress(cdata)
333 self.assertEqual(ddata, INPUT)
334
335 cdata = lzma.compress(INPUT, lzma.FORMAT_XZ)
336 ddata = lzma.decompress(cdata)
337 self.assertEqual(ddata, INPUT)
338
339 cdata = lzma.compress(INPUT, lzma.FORMAT_ALONE)
340 ddata = lzma.decompress(cdata)
341 self.assertEqual(ddata, INPUT)
342
343 cdata = lzma.compress(INPUT, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
344 ddata = lzma.decompress(cdata, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
345 self.assertEqual(ddata, INPUT)
346
347 # Unlike LZMADecompressor, decompress() *does* handle concatenated streams.
348
349 def test_decompress_multistream(self):
350 ddata = lzma.decompress(COMPRESSED_XZ + COMPRESSED_ALONE)
351 self.assertEqual(ddata, INPUT * 2)
352
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100353 # Test robust handling of non-LZMA data following the compressed stream(s).
354
355 def test_decompress_trailing_junk(self):
356 ddata = lzma.decompress(COMPRESSED_XZ + COMPRESSED_BOGUS)
357 self.assertEqual(ddata, INPUT)
358
359 def test_decompress_multistream_trailing_junk(self):
360 ddata = lzma.decompress(COMPRESSED_XZ * 3 + COMPRESSED_BOGUS)
361 self.assertEqual(ddata, INPUT * 3)
362
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200363
364class TempFile:
365 """Context manager - creates a file, and deletes it on __exit__."""
366
367 def __init__(self, filename, data=b""):
368 self.filename = filename
369 self.data = data
370
371 def __enter__(self):
372 with open(self.filename, "wb") as f:
373 f.write(self.data)
374
375 def __exit__(self, *args):
376 unlink(self.filename)
377
378
379class FileTestCase(unittest.TestCase):
380
381 def test_init(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200382 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200383 pass
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200384 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200385 pass
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200386 with LZMAFile(BytesIO(), "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200387 pass
388
389 def test_init_with_filename(self):
390 with TempFile(TESTFN, COMPRESSED_XZ):
391 with LZMAFile(TESTFN) as f:
392 pass
393 with LZMAFile(TESTFN, "w") as f:
394 pass
395 with LZMAFile(TESTFN, "a") as f:
396 pass
397
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200398 def test_init_mode(self):
399 with TempFile(TESTFN):
400 with LZMAFile(TESTFN, "r"):
401 pass
402 with LZMAFile(TESTFN, "rb"):
403 pass
404 with LZMAFile(TESTFN, "w"):
405 pass
406 with LZMAFile(TESTFN, "wb"):
407 pass
408 with LZMAFile(TESTFN, "a"):
409 pass
410 with LZMAFile(TESTFN, "ab"):
411 pass
412
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200413 def test_init_bad_mode(self):
414 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200415 LZMAFile(BytesIO(COMPRESSED_XZ), (3, "x"))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200416 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200417 LZMAFile(BytesIO(COMPRESSED_XZ), "")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200418 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200419 LZMAFile(BytesIO(COMPRESSED_XZ), "x")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200420 with self.assertRaises(ValueError):
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200421 LZMAFile(BytesIO(COMPRESSED_XZ), "rt")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200422 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200423 LZMAFile(BytesIO(COMPRESSED_XZ), "r+")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200424 with self.assertRaises(ValueError):
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200425 LZMAFile(BytesIO(COMPRESSED_XZ), "wt")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200426 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200427 LZMAFile(BytesIO(COMPRESSED_XZ), "w+")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200428 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200429 LZMAFile(BytesIO(COMPRESSED_XZ), "rw")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200430
431 def test_init_bad_check(self):
432 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200433 LZMAFile(BytesIO(), "w", check=b"asd")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200434 # CHECK_UNKNOWN and anything above CHECK_ID_MAX should be invalid.
435 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200436 LZMAFile(BytesIO(), "w", check=lzma.CHECK_UNKNOWN)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200437 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200438 LZMAFile(BytesIO(), "w", check=lzma.CHECK_ID_MAX + 3)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200439 # Cannot specify a check with mode="r".
440 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200441 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_NONE)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200442 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200443 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_CRC32)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200444 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200445 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_CRC64)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200446 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200447 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_SHA256)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200448 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200449 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_UNKNOWN)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200450
451 def test_init_bad_preset(self):
452 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200453 LZMAFile(BytesIO(), "w", preset=4.39)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200454 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200455 LZMAFile(BytesIO(), "w", preset=10)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200456 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200457 LZMAFile(BytesIO(), "w", preset=23)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200458 with self.assertRaises(OverflowError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200459 LZMAFile(BytesIO(), "w", preset=-1)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200460 with self.assertRaises(OverflowError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200461 LZMAFile(BytesIO(), "w", preset=-7)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200462 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200463 LZMAFile(BytesIO(), "w", preset="foo")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200464 # Cannot specify a preset with mode="r".
465 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200466 LZMAFile(BytesIO(COMPRESSED_XZ), preset=3)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200467
468 def test_init_bad_filter_spec(self):
469 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200470 LZMAFile(BytesIO(), "w", filters=[b"wobsite"])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200471 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200472 LZMAFile(BytesIO(), "w", filters=[{"xyzzy": 3}])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200473 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200474 LZMAFile(BytesIO(), "w", filters=[{"id": 98765}])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200475 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200476 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200477 filters=[{"id": lzma.FILTER_LZMA2, "foo": 0}])
478 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200479 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200480 filters=[{"id": lzma.FILTER_DELTA, "foo": 0}])
481 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200482 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200483 filters=[{"id": lzma.FILTER_X86, "foo": 0}])
484
485 def test_init_with_preset_and_filters(self):
486 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200487 LZMAFile(BytesIO(), "w", format=lzma.FORMAT_RAW,
488 preset=6, filters=FILTERS_RAW_1)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200489
490 def test_close(self):
491 with BytesIO(COMPRESSED_XZ) as src:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200492 f = LZMAFile(src)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200493 f.close()
494 # LZMAFile.close() should not close the underlying file object.
495 self.assertFalse(src.closed)
496 # Try closing an already-closed LZMAFile.
497 f.close()
498 self.assertFalse(src.closed)
499
500 # Test with a real file on disk, opened directly by LZMAFile.
501 with TempFile(TESTFN, COMPRESSED_XZ):
502 f = LZMAFile(TESTFN)
503 fp = f._fp
504 f.close()
505 # Here, LZMAFile.close() *should* close the underlying file object.
506 self.assertTrue(fp.closed)
507 # Try closing an already-closed LZMAFile.
508 f.close()
509
510 def test_closed(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200511 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200512 try:
513 self.assertFalse(f.closed)
514 f.read()
515 self.assertFalse(f.closed)
516 finally:
517 f.close()
518 self.assertTrue(f.closed)
519
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200520 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200521 try:
522 self.assertFalse(f.closed)
523 finally:
524 f.close()
525 self.assertTrue(f.closed)
526
527 def test_fileno(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200528 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200529 try:
530 self.assertRaises(UnsupportedOperation, f.fileno)
531 finally:
532 f.close()
533 self.assertRaises(ValueError, f.fileno)
534 with TempFile(TESTFN, COMPRESSED_XZ):
535 f = LZMAFile(TESTFN)
536 try:
537 self.assertEqual(f.fileno(), f._fp.fileno())
538 self.assertIsInstance(f.fileno(), int)
539 finally:
540 f.close()
541 self.assertRaises(ValueError, f.fileno)
542
543 def test_seekable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200544 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200545 try:
546 self.assertTrue(f.seekable())
547 f.read()
548 self.assertTrue(f.seekable())
549 finally:
550 f.close()
551 self.assertRaises(ValueError, f.seekable)
552
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200553 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200554 try:
555 self.assertFalse(f.seekable())
556 finally:
557 f.close()
558 self.assertRaises(ValueError, f.seekable)
559
Nadeem Vawdaae557d72012-02-12 01:51:38 +0200560 src = BytesIO(COMPRESSED_XZ)
561 src.seekable = lambda: False
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200562 f = LZMAFile(src)
Nadeem Vawdaae557d72012-02-12 01:51:38 +0200563 try:
564 self.assertFalse(f.seekable())
565 finally:
566 f.close()
567 self.assertRaises(ValueError, f.seekable)
568
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200569 def test_readable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200570 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200571 try:
572 self.assertTrue(f.readable())
573 f.read()
574 self.assertTrue(f.readable())
575 finally:
576 f.close()
577 self.assertRaises(ValueError, f.readable)
578
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200579 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200580 try:
581 self.assertFalse(f.readable())
582 finally:
583 f.close()
584 self.assertRaises(ValueError, f.readable)
585
586 def test_writable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200587 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200588 try:
589 self.assertFalse(f.writable())
590 f.read()
591 self.assertFalse(f.writable())
592 finally:
593 f.close()
594 self.assertRaises(ValueError, f.writable)
595
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200596 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200597 try:
598 self.assertTrue(f.writable())
599 finally:
600 f.close()
601 self.assertRaises(ValueError, f.writable)
602
603 def test_read(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200604 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200605 self.assertEqual(f.read(), INPUT)
606 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200607 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200608 self.assertEqual(f.read(), INPUT)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200609 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200610 self.assertEqual(f.read(), INPUT)
611 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200612 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200613 self.assertEqual(f.read(), INPUT)
614 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200615 with LZMAFile(BytesIO(COMPRESSED_RAW_1),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200616 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_1) as f:
617 self.assertEqual(f.read(), INPUT)
618 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200619 with LZMAFile(BytesIO(COMPRESSED_RAW_2),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200620 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2) as f:
621 self.assertEqual(f.read(), INPUT)
622 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200623 with LZMAFile(BytesIO(COMPRESSED_RAW_3),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200624 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3) as f:
625 self.assertEqual(f.read(), INPUT)
626 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200627 with LZMAFile(BytesIO(COMPRESSED_RAW_4),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200628 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_4) as f:
629 self.assertEqual(f.read(), INPUT)
630 self.assertEqual(f.read(), b"")
631
632 def test_read_0(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200633 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200634 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200635 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200636 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200637 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200638 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200639 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200640 self.assertEqual(f.read(0), b"")
641
642 def test_read_10(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200643 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200644 chunks = []
645 while True:
646 result = f.read(10)
647 if not result:
648 break
649 self.assertLessEqual(len(result), 10)
650 chunks.append(result)
651 self.assertEqual(b"".join(chunks), INPUT)
652
653 def test_read_multistream(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200654 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200655 self.assertEqual(f.read(), INPUT * 5)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200656 with LZMAFile(BytesIO(COMPRESSED_XZ + COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200657 self.assertEqual(f.read(), INPUT * 2)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200658 with LZMAFile(BytesIO(COMPRESSED_RAW_3 * 4),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200659 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3) as f:
660 self.assertEqual(f.read(), INPUT * 4)
661
662 def test_read_multistream_buffer_size_aligned(self):
663 # Test the case where a stream boundary coincides with the end
664 # of the raw read buffer.
665 saved_buffer_size = lzma._BUFFER_SIZE
666 lzma._BUFFER_SIZE = len(COMPRESSED_XZ)
667 try:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200668 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200669 self.assertEqual(f.read(), INPUT * 5)
670 finally:
671 lzma._BUFFER_SIZE = saved_buffer_size
672
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100673 def test_read_trailing_junk(self):
674 with LZMAFile(BytesIO(COMPRESSED_XZ + COMPRESSED_BOGUS)) as f:
675 self.assertEqual(f.read(), INPUT)
676
677 def test_read_multistream_trailing_junk(self):
678 with LZMAFile(BytesIO(COMPRESSED_XZ * 5 + COMPRESSED_BOGUS)) as f:
679 self.assertEqual(f.read(), INPUT * 5)
680
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200681 def test_read_from_file(self):
682 with TempFile(TESTFN, COMPRESSED_XZ):
683 with LZMAFile(TESTFN) as f:
684 self.assertEqual(f.read(), INPUT)
685 self.assertEqual(f.read(), b"")
686
Nadeem Vawda10c87912012-06-20 01:48:50 +0200687 def test_read_from_file_with_bytes_filename(self):
688 try:
689 bytes_filename = TESTFN.encode("ascii")
690 except UnicodeEncodeError:
691 self.skipTest("Temporary file name needs to be ASCII")
692 with TempFile(TESTFN, COMPRESSED_XZ):
693 with LZMAFile(bytes_filename) as f:
694 self.assertEqual(f.read(), INPUT)
695 self.assertEqual(f.read(), b"")
696
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200697 def test_read_incomplete(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200698 with LZMAFile(BytesIO(COMPRESSED_XZ[:128])) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200699 self.assertRaises(EOFError, f.read)
700
701 def test_read_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200702 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200703 f.close()
704 self.assertRaises(ValueError, f.read)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200705 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200706 self.assertRaises(ValueError, f.read)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200707 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200708 self.assertRaises(TypeError, f.read, None)
709
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100710 def test_read_bad_data(self):
711 with LZMAFile(BytesIO(COMPRESSED_BOGUS)) as f:
712 self.assertRaises(LZMAError, f.read)
713
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200714 def test_read1(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200715 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200716 blocks = []
717 while True:
718 result = f.read1()
719 if not result:
720 break
721 blocks.append(result)
722 self.assertEqual(b"".join(blocks), INPUT)
723 self.assertEqual(f.read1(), b"")
724
725 def test_read1_0(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200726 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200727 self.assertEqual(f.read1(0), b"")
728
729 def test_read1_10(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200730 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200731 blocks = []
732 while True:
733 result = f.read1(10)
734 if not result:
735 break
736 blocks.append(result)
737 self.assertEqual(b"".join(blocks), INPUT)
738 self.assertEqual(f.read1(), b"")
739
740 def test_read1_multistream(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200741 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200742 blocks = []
743 while True:
744 result = f.read1()
745 if not result:
746 break
747 blocks.append(result)
748 self.assertEqual(b"".join(blocks), INPUT * 5)
749 self.assertEqual(f.read1(), b"")
750
751 def test_read1_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200752 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200753 f.close()
754 self.assertRaises(ValueError, f.read1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200755 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200756 self.assertRaises(ValueError, f.read1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200757 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200758 self.assertRaises(TypeError, f.read1, None)
759
760 def test_peek(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200761 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200762 result = f.peek()
763 self.assertGreater(len(result), 0)
764 self.assertTrue(INPUT.startswith(result))
765 self.assertEqual(f.read(), INPUT)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200766 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200767 result = f.peek(10)
768 self.assertGreater(len(result), 0)
769 self.assertTrue(INPUT.startswith(result))
770 self.assertEqual(f.read(), INPUT)
771
772 def test_peek_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200773 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200774 self.assertRaises(ValueError, f.peek)
775
776 def test_iterator(self):
777 with BytesIO(INPUT) as f:
778 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200779 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200780 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200781 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200782 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200783 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200784 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200785 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200786 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200787 with LZMAFile(BytesIO(COMPRESSED_RAW_2),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200788 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2) as f:
789 self.assertListEqual(list(iter(f)), lines)
790
791 def test_readline(self):
792 with BytesIO(INPUT) as f:
793 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200794 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200795 for line in lines:
796 self.assertEqual(f.readline(), line)
797
798 def test_readlines(self):
799 with BytesIO(INPUT) as f:
800 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200801 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200802 self.assertListEqual(f.readlines(), lines)
803
804 def test_write(self):
805 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200806 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200807 f.write(INPUT)
808 expected = lzma.compress(INPUT)
809 self.assertEqual(dst.getvalue(), expected)
810 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200811 with LZMAFile(dst, "w", format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200812 f.write(INPUT)
813 expected = lzma.compress(INPUT, format=lzma.FORMAT_XZ)
814 self.assertEqual(dst.getvalue(), expected)
815 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200816 with LZMAFile(dst, "w", format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200817 f.write(INPUT)
818 expected = lzma.compress(INPUT, format=lzma.FORMAT_ALONE)
819 self.assertEqual(dst.getvalue(), expected)
820 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200821 with LZMAFile(dst, "w", format=lzma.FORMAT_RAW,
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200822 filters=FILTERS_RAW_2) as f:
823 f.write(INPUT)
824 expected = lzma.compress(INPUT, format=lzma.FORMAT_RAW,
825 filters=FILTERS_RAW_2)
826 self.assertEqual(dst.getvalue(), expected)
827
828 def test_write_10(self):
829 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200830 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200831 for start in range(0, len(INPUT), 10):
832 f.write(INPUT[start:start+10])
833 expected = lzma.compress(INPUT)
834 self.assertEqual(dst.getvalue(), expected)
835
836 def test_write_append(self):
837 part1 = INPUT[:1024]
838 part2 = INPUT[1024:1536]
839 part3 = INPUT[1536:]
840 expected = b"".join(lzma.compress(x) for x in (part1, part2, part3))
841 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200842 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200843 f.write(part1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200844 with LZMAFile(dst, "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200845 f.write(part2)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200846 with LZMAFile(dst, "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200847 f.write(part3)
848 self.assertEqual(dst.getvalue(), expected)
849
850 def test_write_to_file(self):
851 try:
852 with LZMAFile(TESTFN, "w") as f:
853 f.write(INPUT)
854 expected = lzma.compress(INPUT)
855 with open(TESTFN, "rb") as f:
856 self.assertEqual(f.read(), expected)
857 finally:
858 unlink(TESTFN)
859
Nadeem Vawda10c87912012-06-20 01:48:50 +0200860 def test_write_to_file_with_bytes_filename(self):
861 try:
862 bytes_filename = TESTFN.encode("ascii")
863 except UnicodeEncodeError:
864 self.skipTest("Temporary file name needs to be ASCII")
865 try:
866 with LZMAFile(bytes_filename, "w") as f:
867 f.write(INPUT)
868 expected = lzma.compress(INPUT)
869 with open(TESTFN, "rb") as f:
870 self.assertEqual(f.read(), expected)
871 finally:
872 unlink(TESTFN)
873
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200874 def test_write_append_to_file(self):
875 part1 = INPUT[:1024]
876 part2 = INPUT[1024:1536]
877 part3 = INPUT[1536:]
878 expected = b"".join(lzma.compress(x) for x in (part1, part2, part3))
879 try:
880 with LZMAFile(TESTFN, "w") as f:
881 f.write(part1)
882 with LZMAFile(TESTFN, "a") as f:
883 f.write(part2)
884 with LZMAFile(TESTFN, "a") as f:
885 f.write(part3)
886 with open(TESTFN, "rb") as f:
887 self.assertEqual(f.read(), expected)
888 finally:
889 unlink(TESTFN)
890
891 def test_write_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200892 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200893 f.close()
894 self.assertRaises(ValueError, f.write, b"foo")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200895 with LZMAFile(BytesIO(COMPRESSED_XZ), "r") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200896 self.assertRaises(ValueError, f.write, b"bar")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200897 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200898 self.assertRaises(TypeError, f.write, None)
899 self.assertRaises(TypeError, f.write, "text")
900 self.assertRaises(TypeError, f.write, 789)
901
902 def test_writelines(self):
903 with BytesIO(INPUT) as f:
904 lines = f.readlines()
905 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200906 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200907 f.writelines(lines)
908 expected = lzma.compress(INPUT)
909 self.assertEqual(dst.getvalue(), expected)
910
911 def test_seek_forward(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200912 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200913 f.seek(555)
914 self.assertEqual(f.read(), INPUT[555:])
915
916 def test_seek_forward_across_streams(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200917 with LZMAFile(BytesIO(COMPRESSED_XZ * 2)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200918 f.seek(len(INPUT) + 123)
919 self.assertEqual(f.read(), INPUT[123:])
920
921 def test_seek_forward_relative_to_current(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200922 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200923 f.read(100)
924 f.seek(1236, 1)
925 self.assertEqual(f.read(), INPUT[1336:])
926
927 def test_seek_forward_relative_to_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200928 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200929 f.seek(-555, 2)
930 self.assertEqual(f.read(), INPUT[-555:])
931
932 def test_seek_backward(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200933 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200934 f.read(1001)
935 f.seek(211)
936 self.assertEqual(f.read(), INPUT[211:])
937
938 def test_seek_backward_across_streams(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200939 with LZMAFile(BytesIO(COMPRESSED_XZ * 2)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200940 f.read(len(INPUT) + 333)
941 f.seek(737)
942 self.assertEqual(f.read(), INPUT[737:] + INPUT)
943
944 def test_seek_backward_relative_to_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200945 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200946 f.seek(-150, 2)
947 self.assertEqual(f.read(), INPUT[-150:])
948
949 def test_seek_past_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200950 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200951 f.seek(len(INPUT) + 9001)
952 self.assertEqual(f.tell(), len(INPUT))
953 self.assertEqual(f.read(), b"")
954
955 def test_seek_past_start(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200956 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200957 f.seek(-88)
958 self.assertEqual(f.tell(), 0)
959 self.assertEqual(f.read(), INPUT)
960
961 def test_seek_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200962 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200963 f.close()
964 self.assertRaises(ValueError, f.seek, 0)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200965 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200966 self.assertRaises(ValueError, f.seek, 0)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200967 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200968 self.assertRaises(ValueError, f.seek, 0, 3)
969 self.assertRaises(ValueError, f.seek, 9, ())
970 self.assertRaises(TypeError, f.seek, None)
971 self.assertRaises(TypeError, f.seek, b"derp")
972
973 def test_tell(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200974 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200975 pos = 0
976 while True:
977 self.assertEqual(f.tell(), pos)
978 result = f.read(183)
979 if not result:
980 break
981 pos += len(result)
982 self.assertEqual(f.tell(), len(INPUT))
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200983 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200984 for pos in range(0, len(INPUT), 144):
985 self.assertEqual(f.tell(), pos)
986 f.write(INPUT[pos:pos+144])
987 self.assertEqual(f.tell(), len(INPUT))
988
989 def test_tell_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200990 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200991 f.close()
992 self.assertRaises(ValueError, f.tell)
993
994
Nadeem Vawdae8604042012-06-04 23:38:12 +0200995class OpenTestCase(unittest.TestCase):
996
997 def test_binary_modes(self):
998 with lzma.open(BytesIO(COMPRESSED_XZ), "rb") as f:
999 self.assertEqual(f.read(), INPUT)
1000 with BytesIO() as bio:
1001 with lzma.open(bio, "wb") as f:
1002 f.write(INPUT)
1003 file_data = lzma.decompress(bio.getvalue())
1004 self.assertEqual(file_data, INPUT)
1005 with lzma.open(bio, "ab") as f:
1006 f.write(INPUT)
1007 file_data = lzma.decompress(bio.getvalue())
1008 self.assertEqual(file_data, INPUT * 2)
1009
1010 def test_text_modes(self):
1011 uncompressed = INPUT.decode("ascii")
1012 uncompressed_raw = uncompressed.replace("\n", os.linesep)
1013 with lzma.open(BytesIO(COMPRESSED_XZ), "rt") as f:
1014 self.assertEqual(f.read(), uncompressed)
1015 with BytesIO() as bio:
1016 with lzma.open(bio, "wt") as f:
1017 f.write(uncompressed)
1018 file_data = lzma.decompress(bio.getvalue()).decode("ascii")
1019 self.assertEqual(file_data, uncompressed_raw)
1020 with lzma.open(bio, "at") as f:
1021 f.write(uncompressed)
1022 file_data = lzma.decompress(bio.getvalue()).decode("ascii")
1023 self.assertEqual(file_data, uncompressed_raw * 2)
1024
1025 def test_filename(self):
1026 with TempFile(TESTFN):
1027 with lzma.open(TESTFN, "wb") as f:
1028 f.write(INPUT)
1029 with open(TESTFN, "rb") as f:
1030 file_data = lzma.decompress(f.read())
1031 self.assertEqual(file_data, INPUT)
1032 with lzma.open(TESTFN, "rb") as f:
1033 self.assertEqual(f.read(), INPUT)
1034 with lzma.open(TESTFN, "ab") as f:
1035 f.write(INPUT)
1036 with lzma.open(TESTFN, "rb") as f:
1037 self.assertEqual(f.read(), INPUT * 2)
1038
1039 def test_bad_params(self):
1040 # Test invalid parameter combinations.
1041 with self.assertRaises(ValueError):
1042 lzma.open(TESTFN, "")
1043 with self.assertRaises(ValueError):
1044 lzma.open(TESTFN, "x")
1045 with self.assertRaises(ValueError):
1046 lzma.open(TESTFN, "rbt")
1047 with self.assertRaises(ValueError):
1048 lzma.open(TESTFN, "rb", encoding="utf-8")
1049 with self.assertRaises(ValueError):
1050 lzma.open(TESTFN, "rb", errors="ignore")
1051 with self.assertRaises(ValueError):
1052 lzma.open(TESTFN, "rb", newline="\n")
1053
1054 def test_format_and_filters(self):
1055 # Test non-default format and filter chain.
1056 options = {"format": lzma.FORMAT_RAW, "filters": FILTERS_RAW_1}
1057 with lzma.open(BytesIO(COMPRESSED_RAW_1), "rb", **options) as f:
1058 self.assertEqual(f.read(), INPUT)
1059 with BytesIO() as bio:
1060 with lzma.open(bio, "wb", **options) as f:
1061 f.write(INPUT)
1062 file_data = lzma.decompress(bio.getvalue(), **options)
1063 self.assertEqual(file_data, INPUT)
1064
1065 def test_encoding(self):
1066 # Test non-default encoding.
1067 uncompressed = INPUT.decode("ascii")
1068 uncompressed_raw = uncompressed.replace("\n", os.linesep)
1069 with BytesIO() as bio:
1070 with lzma.open(bio, "wt", encoding="utf-16-le") as f:
1071 f.write(uncompressed)
1072 file_data = lzma.decompress(bio.getvalue()).decode("utf-16-le")
1073 self.assertEqual(file_data, uncompressed_raw)
1074 bio.seek(0)
1075 with lzma.open(bio, "rt", encoding="utf-16-le") as f:
1076 self.assertEqual(f.read(), uncompressed)
1077
1078 def test_encoding_error_handler(self):
1079 # Test wih non-default encoding error handler.
1080 with BytesIO(lzma.compress(b"foo\xffbar")) as bio:
1081 with lzma.open(bio, "rt", encoding="ascii", errors="ignore") as f:
1082 self.assertEqual(f.read(), "foobar")
1083
1084 def test_newline(self):
1085 # Test with explicit newline (universal newline mode disabled).
1086 text = INPUT.decode("ascii")
1087 with BytesIO() as bio:
1088 with lzma.open(bio, "wt", newline="\n") as f:
1089 f.write(text)
1090 bio.seek(0)
1091 with lzma.open(bio, "rt", newline="\r") as f:
1092 self.assertEqual(f.readlines(), [text])
1093
1094
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001095class MiscellaneousTestCase(unittest.TestCase):
1096
1097 def test_is_check_supported(self):
1098 # CHECK_NONE and CHECK_CRC32 should always be supported,
1099 # regardless of the options liblzma was compiled with.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001100 self.assertTrue(lzma.is_check_supported(lzma.CHECK_NONE))
1101 self.assertTrue(lzma.is_check_supported(lzma.CHECK_CRC32))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001102
1103 # The .xz format spec cannot store check IDs above this value.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001104 self.assertFalse(lzma.is_check_supported(lzma.CHECK_ID_MAX + 1))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001105
1106 # This value should not be a valid check ID.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001107 self.assertFalse(lzma.is_check_supported(lzma.CHECK_UNKNOWN))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001108
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001109 def test__encode_filter_properties(self):
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001110 with self.assertRaises(TypeError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001111 lzma._encode_filter_properties(b"not a dict")
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001112 with self.assertRaises(ValueError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001113 lzma._encode_filter_properties({"id": 0x100})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001114 with self.assertRaises(ValueError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001115 lzma._encode_filter_properties({"id": lzma.FILTER_LZMA2, "junk": 12})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001116 with self.assertRaises(lzma.LZMAError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001117 lzma._encode_filter_properties({"id": lzma.FILTER_DELTA,
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001118 "dist": 9001})
1119
1120 # Test with parameters used by zipfile module.
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001121 props = lzma._encode_filter_properties({
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001122 "id": lzma.FILTER_LZMA1,
1123 "pb": 2,
1124 "lp": 0,
1125 "lc": 3,
1126 "dict_size": 8 << 20,
1127 })
1128 self.assertEqual(props, b"]\x00\x00\x80\x00")
1129
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001130 def test__decode_filter_properties(self):
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001131 with self.assertRaises(TypeError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001132 lzma._decode_filter_properties(lzma.FILTER_X86, {"should be": bytes})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001133 with self.assertRaises(lzma.LZMAError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001134 lzma._decode_filter_properties(lzma.FILTER_DELTA, b"too long")
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001135
1136 # Test with parameters used by zipfile module.
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001137 filterspec = lzma._decode_filter_properties(
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001138 lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
1139 self.assertEqual(filterspec["id"], lzma.FILTER_LZMA1)
1140 self.assertEqual(filterspec["pb"], 2)
1141 self.assertEqual(filterspec["lp"], 0)
1142 self.assertEqual(filterspec["lc"], 3)
1143 self.assertEqual(filterspec["dict_size"], 8 << 20)
1144
1145 def test_filter_properties_roundtrip(self):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001146 spec1 = lzma._decode_filter_properties(
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001147 lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001148 reencoded = lzma._encode_filter_properties(spec1)
1149 spec2 = lzma._decode_filter_properties(lzma.FILTER_LZMA1, reencoded)
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001150 self.assertEqual(spec1, spec2)
1151
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001152
1153# Test data:
1154
1155INPUT = b"""
1156LAERTES
1157
1158 O, fear me not.
1159 I stay too long: but here my father comes.
1160
1161 Enter POLONIUS
1162
1163 A double blessing is a double grace,
1164 Occasion smiles upon a second leave.
1165
1166LORD POLONIUS
1167
1168 Yet here, Laertes! aboard, aboard, for shame!
1169 The wind sits in the shoulder of your sail,
1170 And you are stay'd for. There; my blessing with thee!
1171 And these few precepts in thy memory
1172 See thou character. Give thy thoughts no tongue,
1173 Nor any unproportioned thought his act.
1174 Be thou familiar, but by no means vulgar.
1175 Those friends thou hast, and their adoption tried,
1176 Grapple them to thy soul with hoops of steel;
1177 But do not dull thy palm with entertainment
1178 Of each new-hatch'd, unfledged comrade. Beware
1179 Of entrance to a quarrel, but being in,
1180 Bear't that the opposed may beware of thee.
1181 Give every man thy ear, but few thy voice;
1182 Take each man's censure, but reserve thy judgment.
1183 Costly thy habit as thy purse can buy,
1184 But not express'd in fancy; rich, not gaudy;
1185 For the apparel oft proclaims the man,
1186 And they in France of the best rank and station
1187 Are of a most select and generous chief in that.
1188 Neither a borrower nor a lender be;
1189 For loan oft loses both itself and friend,
1190 And borrowing dulls the edge of husbandry.
1191 This above all: to thine ownself be true,
1192 And it must follow, as the night the day,
1193 Thou canst not then be false to any man.
1194 Farewell: my blessing season this in thee!
1195
1196LAERTES
1197
1198 Most humbly do I take my leave, my lord.
1199
1200LORD POLONIUS
1201
1202 The time invites you; go; your servants tend.
1203
1204LAERTES
1205
1206 Farewell, Ophelia; and remember well
1207 What I have said to you.
1208
1209OPHELIA
1210
1211 'Tis in my memory lock'd,
1212 And you yourself shall keep the key of it.
1213
1214LAERTES
1215
1216 Farewell.
1217"""
1218
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +01001219COMPRESSED_BOGUS = b"this is not a valid lzma stream"
1220
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001221COMPRESSED_XZ = (
1222 b"\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x16\x00\x00\x00t/\xe5\xa3"
1223 b"\xe0\x07\x80\x03\xdf]\x00\x05\x14\x07bX\x19\xcd\xddn\x98\x15\xe4\xb4\x9d"
1224 b"o\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8\xe2\xfc\xe7\xd9\xfe6\xb8("
1225 b"\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02\x17/\xa6=\xf0\xa2\xdf/M\x89"
1226 b"\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ\x15\x80\x8c\xf8\x8do\xfa\x12"
1227 b"\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t\xca6 BF$\xe5Q\xa4\x98\xee\xde"
1228 b"l\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81\xe4N\xc8\x86\x153\xf5x2\xa2O"
1229 b"\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z\xc4\xcdS\xb6t<\x16\xf2\x9cI#"
1230 b"\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0\xaa\x96-Pe\xade:\x04\t\x1b\xf7"
1231 b"\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b"
1232 b"\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa"
1233 b"\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8\x84b\xf6\xc3\xd4c-H\x93oJl\xd0iQ\xe4k"
1234 b"\x84\x0b\xc1\xb7\xbc\xb1\x17\x88\xb1\xca?@\xf6\x07\xea\xe6x\xf1H12P\x0f"
1235 b"\x8a\xc9\xeauw\xe3\xbe\xaai\xa9W\xd0\x80\xcd#cb5\x99\xd8]\xa9d\x0c\xbd"
1236 b"\xa2\xdcWl\xedUG\xbf\x89yF\xf77\x81v\xbd5\x98\xbeh8\x18W\x08\xf0\x1b\x99"
1237 b"5:\x1a?rD\x96\xa1\x04\x0f\xae\xba\x85\xeb\x9d5@\xf5\x83\xd37\x83\x8ac"
1238 b"\x06\xd4\x97i\xcdt\x16S\x82k\xf6K\x01vy\x88\x91\x9b6T\xdae\r\xfd]:k\xbal"
1239 b"\xa9\xbba\xc34\xf9r\xeb}r\xdb\xc7\xdb*\x8f\x03z\xdc8h\xcc\xc9\xd3\xbcl"
1240 b"\xa5-\xcb\xeaK\xa2\xc5\x15\xc0\xe3\xc1\x86Z\xfb\xebL\xe13\xcf\x9c\xe3"
1241 b"\x1d\xc9\xed\xc2\x06\xcc\xce!\x92\xe5\xfe\x9c^\xa59w \x9bP\xa3PK\x08d"
1242 b"\xf9\xe2Z}\xa7\xbf\xed\xeb%$\x0c\x82\xb8/\xb0\x01\xa9&,\xf7qh{Q\x96)\xf2"
1243 b"q\x96\xc3\x80\xb4\x12\xb0\xba\xe6o\xf4!\xb4[\xd4\x8aw\x10\xf7t\x0c\xb3"
1244 b"\xd9\xd5\xc3`^\x81\x11??\\\xa4\x99\x85R\xd4\x8e\x83\xc9\x1eX\xbfa\xf1"
1245 b"\xac\xb0\xea\xea\xd7\xd0\xab\x18\xe2\xf2\xed\xe1\xb7\xc9\x18\xcbS\xe4>"
1246 b"\xc9\x95H\xe8\xcb\t\r%\xeb\xc7$.o\xf1\xf3R\x17\x1db\xbb\xd8U\xa5^\xccS"
1247 b"\x16\x01\x87\xf3/\x93\xd1\xf0v\xc0r\xd7\xcc\xa2Gkz\xca\x80\x0e\xfd\xd0"
1248 b"\x8b\xbb\xd2Ix\xb3\x1ey\xca-0\xe3z^\xd6\xd6\x8f_\xf1\x9dP\x9fi\xa7\xd1"
1249 b"\xe8\x90\x84\xdc\xbf\xcdky\x8e\xdc\x81\x7f\xa3\xb2+\xbf\x04\xef\xd8\\"
1250 b"\xc4\xdf\xe1\xb0\x01\xe9\x93\xe3Y\xf1\x1dY\xe8h\x81\xcf\xf1w\xcc\xb4\xef"
1251 b" \x8b|\x04\xea\x83ej\xbe\x1f\xd4z\x9c`\xd3\x1a\x92A\x06\xe5\x8f\xa9\x13"
1252 b"\t\x9e=\xfa\x1c\xe5_\x9f%v\x1bo\x11ZO\xd8\xf4\t\xddM\x16-\x04\xfc\x18<\""
1253 b"CM\xddg~b\xf6\xef\x8e\x0c\xd0\xde|\xa0'\x8a\x0c\xd6x\xae!J\xa6F\x88\x15u"
1254 b"\x008\x17\xbc7y\xb3\xd8u\xac_\x85\x8d\xe7\xc1@\x9c\xecqc\xa3#\xad\xf1"
1255 b"\x935\xb5)_\r\xec3]\x0fo]5\xd0my\x07\x9b\xee\x81\xb5\x0f\xcfK+\x00\xc0"
1256 b"\xe4b\x10\xe4\x0c\x1a \x9b\xe0\x97t\xf6\xa1\x9e\x850\xba\x0c\x9a\x8d\xc8"
1257 b"\x8f\x07\xd7\xae\xc8\xf9+i\xdc\xb9k\xb0>f\x19\xb8\r\xa8\xf8\x1f$\xa5{p"
1258 b"\xc6\x880\xce\xdb\xcf\xca_\x86\xac\x88h6\x8bZ%'\xd0\n\xbf\x0f\x9c\"\xba"
1259 b"\xe5\x86\x9f\x0f7X=mNX[\xcc\x19FU\xc9\x860\xbc\x90a+* \xae_$\x03\x1e\xd3"
1260 b"\xcd_\xa0\x9c\xde\xaf46q\xa5\xc9\x92\xd7\xca\xe3`\x9d\x85}\xb4\xff\xb3"
1261 b"\x83\xfb\xb6\xca\xae`\x0bw\x7f\xfc\xd8\xacVe\x19\xc8\x17\x0bZ\xad\x88"
1262 b"\xeb#\x97\x03\x13\xb1d\x0f{\x0c\x04w\x07\r\x97\xbd\xd6\xc1\xc3B:\x95\x08"
1263 b"^\x10V\xaeaH\x02\xd9\xe3\n\\\x01X\xf6\x9c\x8a\x06u#%\xbe*\xa1\x18v\x85"
1264 b"\xec!\t4\x00\x00\x00\x00Vj?uLU\xf3\xa6\x00\x01\xfb\x07\x81\x0f\x00\x00tw"
1265 b"\x99P\xb1\xc4g\xfb\x02\x00\x00\x00\x00\x04YZ"
1266)
1267
1268COMPRESSED_ALONE = (
1269 b"]\x00\x00\x80\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x05\x14\x07bX\x19"
1270 b"\xcd\xddn\x98\x15\xe4\xb4\x9do\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8"
1271 b"\xe2\xfc\xe7\xd9\xfe6\xb8(\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02"
1272 b"\x17/\xa6=\xf0\xa2\xdf/M\x89\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ"
1273 b"\x15\x80\x8c\xf8\x8do\xfa\x12\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t"
1274 b"\xca6 BF$\xe5Q\xa4\x98\xee\xdel\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81"
1275 b"\xe4N\xc8\x86\x153\xf5x2\xa2O\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z"
1276 b"\xc4\xcdS\xb6t<\x16\xf2\x9cI#\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0"
1277 b"\xaa\x96-Pe\xade:\x04\t\x1b\xf7\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9"
1278 b"\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7"
1279 b"\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8"
1280 b"\x84b\xf8\x1epl\xeajr\xd1=\t\x03\xdd\x13\x1b3!E\xf9vV\xdaF\xf3\xd7\xb4"
1281 b"\x0c\xa9P~\xec\xdeE\xe37\xf6\x1d\xc6\xbb\xddc%\xb6\x0fI\x07\xf0;\xaf\xe7"
1282 b"\xa0\x8b\xa7Z\x99(\xe9\xe2\xf0o\x18>`\xe1\xaa\xa8\xd9\xa1\xb2}\xe7\x8d"
1283 b"\x834T\xb6\xef\xc1\xde\xe3\x98\xbcD\x03MA@\xd8\xed\xdc\xc8\x93\x03\x1a"
1284 b"\x93\x0b\x7f\x94\x12\x0b\x02Sa\x18\xc9\xc5\x9bTJE}\xf6\xc8g\x17#ZV\x01"
1285 b"\xc9\x9dc\x83\x0e>0\x16\x90S\xb8/\x03y_\x18\xfa(\xd7\x0br\xa2\xb0\xba?"
1286 b"\x8c\xe6\x83@\x84\xdf\x02:\xc5z\x9e\xa6\x84\xc9\xf5BeyX\x83\x1a\xf1 :\t"
1287 b"\xf7\x19\xfexD\\&G\xf3\x85Y\xa2J\xf9\x0bv{\x89\xf6\xe7)A\xaf\x04o\x00"
1288 b"\x075\xd3\xe0\x7f\x97\x98F\x0f?v\x93\xedVtTf\xb5\x97\x83\xed\x19\xd7\x1a"
1289 b"'k\xd7\xd9\xc5\\Y\xd1\xdc\x07\x15|w\xbc\xacd\x87\x08d\xec\xa7\xf6\x82"
1290 b"\xfc\xb3\x93\xeb\xb9 \x8d\xbc ,\xb3X\xb0\xd2s\xd7\xd1\xffv\x05\xdf}\xa2"
1291 b"\x96\xfb%\n\xdf\xa2\x7f\x08.\xa16\n\xe0\x19\x93\x7fh\n\x1c\x8c\x0f \x11"
1292 b"\xc6Bl\x95\x19U}\xe4s\xb5\x10H\xea\x86pB\xe88\x95\xbe\x8cZ\xdb\xe4\x94A"
1293 b"\x92\xb9;z\xaa\xa7{\x1c5!\xc0\xaf\xc1A\xf9\xda\xf0$\xb0\x02qg\xc8\xc7/|"
1294 b"\xafr\x99^\x91\x88\xbf\x03\xd9=\xd7n\xda6{>8\n\xc7:\xa9'\xba.\x0b\xe2"
1295 b"\xb5\x1d\x0e\n\x9a\x8e\x06\x8f:\xdd\x82'[\xc3\"wD$\xa7w\xecq\x8c,1\x93"
1296 b"\xd0,\xae2w\x93\x12$Jd\x19mg\x02\x93\x9cA\x95\x9d&\xca8i\x9c\xb0;\xe7NQ"
1297 b"\x1frh\x8beL;\xb0m\xee\x07Q\x9b\xc6\xd8\x03\xb5\xdeN\xd4\xfe\x98\xd0\xdc"
1298 b"\x1a[\x04\xde\x1a\xf6\x91j\xf8EOli\x8eB^\x1d\x82\x07\xb2\xb5R]\xb7\xd7"
1299 b"\xe9\xa6\xc3.\xfb\xf0-\xb4e\x9b\xde\x03\x88\xc6\xc1iN\x0e\x84wbQ\xdf~"
1300 b"\xe9\xa4\x884\x96kM\xbc)T\xf3\x89\x97\x0f\x143\xe7)\xa0\xb3B\x00\xa8\xaf"
1301 b"\x82^\xcb\xc7..\xdb\xc7\t\x9dH\xee5\xe9#\xe6NV\x94\xcb$Kk\xe3\x7f\r\xe3t"
1302 b"\x12\xcf'\xefR\x8b\xf42\xcf-LH\xac\xe5\x1f0~?SO\xeb\xc1E\x1a\x1c]\xf2"
1303 b"\xc4<\x11\x02\x10Z0a*?\xe4r\xff\xfb\xff\xf6\x14nG\xead^\xd6\xef8\xb6uEI"
1304 b"\x99\nV\xe2\xb3\x95\x8e\x83\xf6i!\xb5&1F\xb1DP\xf4 SO3D!w\x99_G\x7f+\x90"
1305 b".\xab\xbb]\x91>\xc9#h;\x0f5J\x91K\xf4^-[\x9e\x8a\\\x94\xca\xaf\xf6\x19"
1306 b"\xd4\xa1\x9b\xc4\xb8p\xa1\xae\x15\xe9r\x84\xe0\xcar.l []\x8b\xaf+0\xf2g"
1307 b"\x01aKY\xdfI\xcf,\n\xe8\xf0\xe7V\x80_#\xb2\xf2\xa9\x06\x8c>w\xe2W,\xf4"
1308 b"\x8c\r\xf963\xf5J\xcc2\x05=kT\xeaUti\xe5_\xce\x1b\xfa\x8dl\x02h\xef\xa8"
1309 b"\xfbf\x7f\xff\xf0\x19\xeax"
1310)
1311
1312FILTERS_RAW_1 = [{"id": lzma.FILTER_LZMA2, "preset": 3}]
1313COMPRESSED_RAW_1 = (
1314 b"\xe0\x07\x80\x03\xfd]\x00\x05\x14\x07bX\x19\xcd\xddn\x96cyq\xa1\xdd\xee"
1315 b"\xf8\xfam\xe3'\x88\xd3\xff\xe4\x9e \xceQ\x91\xa4\x14I\xf6\xb9\x9dVL8\x15"
1316 b"_\x0e\x12\xc3\xeb\xbc\xa5\xcd\nW\x1d$=R;\x1d\xf8k8\t\xb1{\xd4\xc5+\x9d"
1317 b"\x87c\xe5\xef\x98\xb4\xd7S3\xcd\xcc\xd2\xed\xa4\x0em\xe5\xf4\xdd\xd0b"
1318 b"\xbe4*\xaa\x0b\xc5\x08\x10\x85+\x81.\x17\xaf9\xc9b\xeaZrA\xe20\x7fs\"r"
1319 b"\xdaG\x81\xde\x90cu\xa5\xdb\xa9.A\x08l\xb0<\xf6\x03\xddOi\xd0\xc5\xb4"
1320 b"\xec\xecg4t6\"\xa6\xb8o\xb5?\x18^}\xb6}\x03[:\xeb\x03\xa9\n[\x89l\x19g"
1321 b"\x16\xc82\xed\x0b\xfb\x86n\xa2\x857@\x93\xcd6T\xc3u\xb0\t\xf9\x1b\x918"
1322 b"\xfc[\x1b\x1e4\xb3\x14\x06PCV\xa8\"\xf5\x81x~\xe9\xb5N\x9cK\x9f\xc6\xc3%"
1323 b"\xc8k:{6\xe7\xf7\xbd\x05\x02\xb4\xc4\xc3\xd3\xfd\xc3\xa8\\\xfc@\xb1F_"
1324 b"\xc8\x90\xd9sU\x98\xad8\x05\x07\xde7J\x8bM\xd0\xb3;X\xec\x87\xef\xae\xb3"
1325 b"eO,\xb1z,d\x11y\xeejlB\x02\x1d\xf28\x1f#\x896\xce\x0b\xf0\xf5\xa9PK\x0f"
1326 b"\xb3\x13P\xd8\x88\xd2\xa1\x08\x04C?\xdb\x94_\x9a\"\xe9\xe3e\x1d\xde\x9b"
1327 b"\xa1\xe8>H\x98\x10;\xc5\x03#\xb5\x9d4\x01\xe7\xc5\xba%v\xa49\x97A\xe0\""
1328 b"\x8c\xc22\xe3i\xc1\x9d\xab3\xdf\xbe\xfdDm7\x1b\x9d\xab\xb5\x15o:J\x92"
1329 b"\xdb\x816\x17\xc2O\x99\x1b\x0e\x8d\xf3\tQ\xed\x8e\x95S/\x16M\xb2S\x04"
1330 b"\x0f\xc3J\xc6\xc7\xe4\xcb\xc5\xf4\xe7d\x14\xe4=^B\xfb\xd3E\xd3\x1e\xcd"
1331 b"\x91\xa5\xd0G\x8f.\xf6\xf9\x0bb&\xd9\x9f\xc2\xfdj\xa2\x9e\xc4\\\x0e\x1dC"
1332 b"v\xe8\xd2\x8a?^H\xec\xae\xeb>\xfe\xb8\xab\xd4IqY\x8c\xd4K7\x11\xf4D\xd0W"
1333 b"\xa5\xbe\xeaO\xbf\xd0\x04\xfdl\x10\xae5\xd4U\x19\x06\xf9{\xaa\xe0\x81"
1334 b"\x0f\xcf\xa3k{\x95\xbd\x19\xa2\xf8\xe4\xa3\x08O*\xf1\xf1B-\xc7(\x0eR\xfd"
1335 b"@E\x9f\xd3\x1e:\xfdV\xb7\x04Y\x94\xeb]\x83\xc4\xa5\xd7\xc0gX\x98\xcf\x0f"
1336 b"\xcd3\x00]n\x17\xec\xbd\xa3Y\x86\xc5\xf3u\xf6*\xbdT\xedA$A\xd9A\xe7\x98"
1337 b"\xef\x14\x02\x9a\xfdiw\xec\xa0\x87\x11\xd9%\xc5\xeb\x8a=\xae\xc0\xc4\xc6"
1338 b"D\x80\x8f\xa8\xd1\xbbq\xb2\xc0\xa0\xf5Cqp\xeeL\xe3\xe5\xdc \x84\"\xe9"
1339 b"\x80t\x83\x05\xba\xf1\xc5~\x93\xc9\xf0\x01c\xceix\x9d\xed\xc5)l\x16)\xd1"
1340 b"\x03@l\x04\x7f\x87\xa5yn\x1b\x01D\xaa:\xd2\x96\xb4\xb3?\xb0\xf9\xce\x07"
1341 b"\xeb\x81\x00\xe4\xc3\xf5%_\xae\xd4\xf9\xeb\xe2\rh\xb2#\xd67Q\x16D\x82hn"
1342 b"\xd1\xa3_?q\xf0\xe2\xac\xf317\x9e\xd0_\x83|\xf1\xca\xb7\x95S\xabW\x12"
1343 b"\xff\xddt\xf69L\x01\xf2|\xdaW\xda\xees\x98L\x18\xb8_\xe8$\x82\xea\xd6"
1344 b"\xd1F\xd4\x0b\xcdk\x01vf\x88h\xc3\xae\xb91\xc7Q\x9f\xa5G\xd9\xcc\x1f\xe3"
1345 b"5\xb1\xdcy\x7fI\x8bcw\x8e\x10rIp\x02:\x19p_\xc8v\xcea\"\xc1\xd9\x91\x03"
1346 b"\xbfe\xbe\xa6\xb3\xa8\x14\x18\xc3\xabH*m}\xc2\xc1\x9a}>l%\xce\x84\x99"
1347 b"\xb3d\xaf\xd3\x82\x15\xdf\xc1\xfc5fOg\x9b\xfc\x8e^&\t@\xce\x9f\x06J\xb8"
1348 b"\xb5\x86\x1d\xda{\x9f\xae\xb0\xff\x02\x81r\x92z\x8cM\xb7ho\xc9^\x9c\xb6"
1349 b"\x9c\xae\xd1\xc9\xf4\xdfU7\xd6\\!\xea\x0b\x94k\xb9Ud~\x98\xe7\x86\x8az"
1350 b"\x10;\xe3\x1d\xe5PG\xf8\xa4\x12\x05w\x98^\xc4\xb1\xbb\xfb\xcf\xe0\x7f"
1351 b"\x033Sf\x0c \xb1\xf6@\x94\xe5\xa3\xb2\xa7\x10\x9a\xc0\x14\xc3s\xb5xRD"
1352 b"\xf4`W\xd9\xe5\xd3\xcf\x91\rTZ-X\xbe\xbf\xb5\xe2\xee|\x1a\xbf\xfb\x08"
1353 b"\x91\xe1\xfc\x9a\x18\xa3\x8b\xd6^\x89\xf5[\xef\x87\xd1\x06\x1c7\xd6\xa2"
1354 b"\t\tQ5/@S\xc05\xd2VhAK\x03VC\r\x9b\x93\xd6M\xf1xO\xaaO\xed\xb9<\x0c\xdae"
1355 b"*\xd0\x07Hk6\x9fG+\xa1)\xcd\x9cl\x87\xdb\xe1\xe7\xefK}\x875\xab\xa0\x19u"
1356 b"\xf6*F\xb32\x00\x00\x00"
1357)
1358
1359FILTERS_RAW_2 = [{"id": lzma.FILTER_DELTA, "dist": 2},
1360 {"id": lzma.FILTER_LZMA2,
1361 "preset": lzma.PRESET_DEFAULT | lzma.PRESET_EXTREME}]
1362COMPRESSED_RAW_2 = (
1363 b"\xe0\x07\x80\x05\x91]\x00\x05\x14\x06-\xd4\xa8d?\xef\xbe\xafH\xee\x042"
1364 b"\xcb.\xb5g\x8f\xfb\x14\xab\xa5\x9f\x025z\xa4\xdd\xd8\t[}W\xf8\x0c\x1dmH"
1365 b"\xfa\x05\xfcg\xba\xe5\x01Q\x0b\x83R\xb6A\x885\xc0\xba\xee\n\x1cv~\xde:o"
1366 b"\x06:J\xa7\x11Cc\xea\xf7\xe5*o\xf7\x83\\l\xbdE\x19\x1f\r\xa8\x10\xb42"
1367 b"\x0caU{\xd7\xb8w\xdc\xbe\x1b\xfc8\xb4\xcc\xd38\\\xf6\x13\xf6\xe7\x98\xfa"
1368 b"\xc7[\x17_9\x86%\xa8\xf8\xaa\xb8\x8dfs#\x1e=\xed<\x92\x10\\t\xff\x86\xfb"
1369 b"=\x9e7\x18\x1dft\\\xb5\x01\x95Q\xc5\x19\xb38\xe0\xd4\xaa\x07\xc3\x7f\xd8"
1370 b"\xa2\x00>-\xd3\x8e\xa1#\xfa\x83ArAm\xdbJ~\x93\xa3B\x82\xe0\xc7\xcc(\x08`"
1371 b"WK\xad\x1b\x94kaj\x04 \xde\xfc\xe1\xed\xb0\x82\x91\xefS\x84%\x86\xfbi"
1372 b"\x99X\xf1B\xe7\x90;E\xfde\x98\xda\xca\xd6T\xb4bg\xa4\n\x9aj\xd1\x83\x9e]"
1373 b"\"\x7fM\xb5\x0fr\xd2\\\xa5j~P\x10GH\xbfN*Z\x10.\x81\tpE\x8a\x08\xbe1\xbd"
1374 b"\xcd\xa9\xe1\x8d\x1f\x04\xf9\x0eH\xb9\xae\xd6\xc3\xc1\xa5\xa9\x95P\xdc~"
1375 b"\xff\x01\x930\xa9\x04\xf6\x03\xfe\xb5JK\xc3]\xdd9\xb1\xd3\xd7F\xf5\xd1"
1376 b"\x1e\xa0\x1c_\xed[\x0c\xae\xd4\x8b\x946\xeb\xbf\xbb\xe3$kS{\xb5\x80,f:Sj"
1377 b"\x0f\x08z\x1c\xf5\xe8\xe6\xae\x98\xb0Q~r\x0f\xb0\x05?\xb6\x90\x19\x02&"
1378 b"\xcb\x80\t\xc4\xea\x9c|x\xce\x10\x9c\xc5|\xcbdhh+\x0c'\xc5\x81\xc33\xb5"
1379 b"\x14q\xd6\xc5\xe3`Z#\xdc\x8a\xab\xdd\xea\x08\xc2I\xe7\x02l{\xec\x196\x06"
1380 b"\x91\x8d\xdc\xd5\xb3x\xe1hz%\xd1\xf8\xa5\xdd\x98!\x8c\x1c\xc1\x17RUa\xbb"
1381 b"\x95\x0f\xe4X\xea1\x0c\xf1=R\xbe\xc60\xe3\xa4\x9a\x90bd\x97$]B\x01\xdd"
1382 b"\x1f\xe3h2c\x1e\xa0L`4\xc6x\xa3Z\x8a\r\x14]T^\xd8\x89\x1b\x92\r;\xedY"
1383 b"\x0c\xef\x8d9z\xf3o\xb6)f\xa9]$n\rp\x93\xd0\x10\xa4\x08\xb8\xb2\x8b\xb6"
1384 b"\x8f\x80\xae;\xdcQ\xf1\xfa\x9a\x06\x8e\xa5\x0e\x8cK\x9c @\xaa:UcX\n!\xc6"
1385 b"\x02\x12\xcb\x1b\"=\x16.\x1f\x176\xf2g=\xe1Wn\xe9\xe1\xd4\xf1O\xad\x15"
1386 b"\x86\xe9\xa3T\xaf\xa9\xd7D\xb5\xd1W3pnt\x11\xc7VOj\xb7M\xc4i\xa1\xf1$3"
1387 b"\xbb\xdc\x8af\xb0\xc5Y\r\xd1\xfb\xf2\xe7K\xe6\xc5hwO\xfe\x8c2^&\x07\xd5"
1388 b"\x1fV\x19\xfd\r\x14\xd2i=yZ\xe6o\xaf\xc6\xb6\x92\x9d\xc4\r\xb3\xafw\xac%"
1389 b"\xcfc\x1a\xf1`]\xf2\x1a\x9e\x808\xedm\xedQ\xb2\xfe\xe4h`[q\xae\xe0\x0f"
1390 b"\xba0g\xb6\"N\xc3\xfb\xcfR\x11\xc5\x18)(\xc40\\\xa3\x02\xd9G!\xce\x1b"
1391 b"\xc1\x96x\xb5\xc8z\x1f\x01\xb4\xaf\xde\xc2\xcd\x07\xe7H\xb3y\xa8M\n\\A\t"
1392 b"ar\xddM\x8b\x9a\xea\x84\x9b!\xf1\x8d\xb1\xf1~\x1e\r\xa5H\xba\xf1\x84o"
1393 b"\xda\x87\x01h\xe9\xa2\xbe\xbeqN\x9d\x84\x0b!WG\xda\xa1\xa5A\xb7\xc7`j"
1394 b"\x15\xf2\xe9\xdd?\x015B\xd2~E\x06\x11\xe0\x91!\x05^\x80\xdd\xa8y\x15}"
1395 b"\xa1)\xb1)\x81\x18\xf4\xf4\xf8\xc0\xefD\xe3\xdb2f\x1e\x12\xabu\xc9\x97"
1396 b"\xcd\x1e\xa7\x0c\x02x4_6\x03\xc4$t\xf39\x94\x1d=\xcb\xbfv\\\xf5\xa3\x1d"
1397 b"\x9d8jk\x95\x13)ff\xf9n\xc4\xa9\xe3\x01\xb8\xda\xfb\xab\xdfM\x99\xfb\x05"
1398 b"\xe0\xe9\xb0I\xf4E\xab\xe2\x15\xa3\x035\xe7\xdeT\xee\x82p\xb4\x88\xd3"
1399 b"\x893\x9c/\xc0\xd6\x8fou;\xf6\x95PR\xa9\xb2\xc1\xefFj\xe2\xa7$\xf7h\xf1"
1400 b"\xdfK(\xc9c\xba7\xe8\xe3)\xdd\xb2,\x83\xfb\x84\x18.y\x18Qi\x88\xf8`h-"
1401 b"\xef\xd5\xed\x8c\t\xd8\xc3^\x0f\x00\xb7\xd0[!\xafM\x9b\xd7.\x07\xd8\xfb"
1402 b"\xd9\xe2-S+\xaa8,\xa0\x03\x1b \xea\xa8\x00\xc3\xab~\xd0$e\xa5\x7f\xf7"
1403 b"\x95P]\x12\x19i\xd9\x7fo\x0c\xd8g^\rE\xa5\x80\x18\xc5\x01\x80\xaek`\xff~"
1404 b"\xb6y\xe7+\xe5\x11^D\xa7\x85\x18\"!\xd6\xd2\xa7\xf4\x1eT\xdb\x02\xe15"
1405 b"\x02Y\xbc\x174Z\xe7\x9cH\x1c\xbf\x0f\xc6\xe9f]\xcf\x8cx\xbc\xe5\x15\x94"
1406 b"\xfc3\xbc\xa7TUH\xf1\x84\x1b\xf7\xa9y\xc07\x84\xf8X\xd8\xef\xfc \x1c\xd8"
1407 b"( /\xf2\xb7\xec\xc1\\\x8c\xf6\x95\xa1\x03J\x83vP8\xe1\xe3\xbb~\xc24kA"
1408 b"\x98y\xa1\xf2P\xe9\x9d\xc9J\xf8N\x99\xb4\xceaO\xde\x16\x1e\xc2\x19\xa7"
1409 b"\x03\xd2\xe0\x8f:\x15\xf3\x84\x9e\xee\xe6e\xb8\x02q\xc7AC\x1emw\xfd\t"
1410 b"\x9a\x1eu\xc1\xa9\xcaCwUP\x00\xa5\xf78L4w!\x91L2 \x87\xd0\xf2\x06\x81j"
1411 b"\x80;\x03V\x06\x87\x92\xcb\x90lv@E\x8d\x8d\xa5\xa6\xe7Z[\xdf\xd6E\x03`>"
1412 b"\x8f\xde\xa1bZ\x84\xd0\xa9`\x05\x0e{\x80;\xe3\xbef\x8d\x1d\xebk1.\xe3"
1413 b"\xe9N\x15\xf7\xd4(\xfa\xbb\x15\xbdu\xf7\x7f\x86\xae!\x03L\x1d\xb5\xc1"
1414 b"\xb9\x11\xdb\xd0\x93\xe4\x02\xe1\xd2\xcbBjc_\xe8}d\xdb\xc3\xa0Y\xbe\xc9/"
1415 b"\x95\x01\xa3,\xe6bl@\x01\xdbp\xc2\xce\x14\x168\xc2q\xe3uH\x89X\xa4\xa9"
1416 b"\x19\x1d\xc1}\x7fOX\x19\x9f\xdd\xbe\x85\x83\xff\x96\x1ee\x82O`CF=K\xeb$I"
1417 b"\x17_\xefX\x8bJ'v\xde\x1f+\xd9.v\xf8Tv\x17\xf2\x9f5\x19\xe1\xb9\x91\xa8S"
1418 b"\x86\xbd\x1a\"(\xa5x\x8dC\x03X\x81\x91\xa8\x11\xc4pS\x13\xbc\xf2'J\xae!"
1419 b"\xef\xef\x84G\t\x8d\xc4\x10\x132\x00oS\x9e\xe0\xe4d\x8f\xb8y\xac\xa6\x9f"
1420 b",\xb8f\x87\r\xdf\x9eE\x0f\xe1\xd0\\L\x00\xb2\xe1h\x84\xef}\x98\xa8\x11"
1421 b"\xccW#\\\x83\x7fo\xbbz\x8f\x00"
1422)
1423
1424FILTERS_RAW_3 = [{"id": lzma.FILTER_IA64, "start_offset": 0x100},
1425 {"id": lzma.FILTER_LZMA2}]
1426COMPRESSED_RAW_3 = (
1427 b"\xe0\x07\x80\x03\xdf]\x00\x05\x14\x07bX\x19\xcd\xddn\x98\x15\xe4\xb4\x9d"
1428 b"o\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8\xe2\xfc\xe7\xd9\xfe6\xb8("
1429 b"\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02\x17/\xa6=\xf0\xa2\xdf/M\x89"
1430 b"\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ\x15\x80\x8c\xf8\x8do\xfa\x12"
1431 b"\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t\xca6 BF$\xe5Q\xa4\x98\xee\xde"
1432 b"l\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81\xe4N\xc8\x86\x153\xf5x2\xa2O"
1433 b"\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z\xc4\xcdS\xb6t<\x16\xf2\x9cI#"
1434 b"\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0\xaa\x96-Pe\xade:\x04\t\x1b\xf7"
1435 b"\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b"
1436 b"\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa"
1437 b"\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8\x84b\xf6\xc3\xd4c-H\x93oJl\xd0iQ\xe4k"
1438 b"\x84\x0b\xc1\xb7\xbc\xb1\x17\x88\xb1\xca?@\xf6\x07\xea\xe6x\xf1H12P\x0f"
1439 b"\x8a\xc9\xeauw\xe3\xbe\xaai\xa9W\xd0\x80\xcd#cb5\x99\xd8]\xa9d\x0c\xbd"
1440 b"\xa2\xdcWl\xedUG\xbf\x89yF\xf77\x81v\xbd5\x98\xbeh8\x18W\x08\xf0\x1b\x99"
1441 b"5:\x1a?rD\x96\xa1\x04\x0f\xae\xba\x85\xeb\x9d5@\xf5\x83\xd37\x83\x8ac"
1442 b"\x06\xd4\x97i\xcdt\x16S\x82k\xf6K\x01vy\x88\x91\x9b6T\xdae\r\xfd]:k\xbal"
1443 b"\xa9\xbba\xc34\xf9r\xeb}r\xdb\xc7\xdb*\x8f\x03z\xdc8h\xcc\xc9\xd3\xbcl"
1444 b"\xa5-\xcb\xeaK\xa2\xc5\x15\xc0\xe3\xc1\x86Z\xfb\xebL\xe13\xcf\x9c\xe3"
1445 b"\x1d\xc9\xed\xc2\x06\xcc\xce!\x92\xe5\xfe\x9c^\xa59w \x9bP\xa3PK\x08d"
1446 b"\xf9\xe2Z}\xa7\xbf\xed\xeb%$\x0c\x82\xb8/\xb0\x01\xa9&,\xf7qh{Q\x96)\xf2"
1447 b"q\x96\xc3\x80\xb4\x12\xb0\xba\xe6o\xf4!\xb4[\xd4\x8aw\x10\xf7t\x0c\xb3"
1448 b"\xd9\xd5\xc3`^\x81\x11??\\\xa4\x99\x85R\xd4\x8e\x83\xc9\x1eX\xbfa\xf1"
1449 b"\xac\xb0\xea\xea\xd7\xd0\xab\x18\xe2\xf2\xed\xe1\xb7\xc9\x18\xcbS\xe4>"
1450 b"\xc9\x95H\xe8\xcb\t\r%\xeb\xc7$.o\xf1\xf3R\x17\x1db\xbb\xd8U\xa5^\xccS"
1451 b"\x16\x01\x87\xf3/\x93\xd1\xf0v\xc0r\xd7\xcc\xa2Gkz\xca\x80\x0e\xfd\xd0"
1452 b"\x8b\xbb\xd2Ix\xb3\x1ey\xca-0\xe3z^\xd6\xd6\x8f_\xf1\x9dP\x9fi\xa7\xd1"
1453 b"\xe8\x90\x84\xdc\xbf\xcdky\x8e\xdc\x81\x7f\xa3\xb2+\xbf\x04\xef\xd8\\"
1454 b"\xc4\xdf\xe1\xb0\x01\xe9\x93\xe3Y\xf1\x1dY\xe8h\x81\xcf\xf1w\xcc\xb4\xef"
1455 b" \x8b|\x04\xea\x83ej\xbe\x1f\xd4z\x9c`\xd3\x1a\x92A\x06\xe5\x8f\xa9\x13"
1456 b"\t\x9e=\xfa\x1c\xe5_\x9f%v\x1bo\x11ZO\xd8\xf4\t\xddM\x16-\x04\xfc\x18<\""
1457 b"CM\xddg~b\xf6\xef\x8e\x0c\xd0\xde|\xa0'\x8a\x0c\xd6x\xae!J\xa6F\x88\x15u"
1458 b"\x008\x17\xbc7y\xb3\xd8u\xac_\x85\x8d\xe7\xc1@\x9c\xecqc\xa3#\xad\xf1"
1459 b"\x935\xb5)_\r\xec3]\x0fo]5\xd0my\x07\x9b\xee\x81\xb5\x0f\xcfK+\x00\xc0"
1460 b"\xe4b\x10\xe4\x0c\x1a \x9b\xe0\x97t\xf6\xa1\x9e\x850\xba\x0c\x9a\x8d\xc8"
1461 b"\x8f\x07\xd7\xae\xc8\xf9+i\xdc\xb9k\xb0>f\x19\xb8\r\xa8\xf8\x1f$\xa5{p"
1462 b"\xc6\x880\xce\xdb\xcf\xca_\x86\xac\x88h6\x8bZ%'\xd0\n\xbf\x0f\x9c\"\xba"
1463 b"\xe5\x86\x9f\x0f7X=mNX[\xcc\x19FU\xc9\x860\xbc\x90a+* \xae_$\x03\x1e\xd3"
1464 b"\xcd_\xa0\x9c\xde\xaf46q\xa5\xc9\x92\xd7\xca\xe3`\x9d\x85}\xb4\xff\xb3"
1465 b"\x83\xfb\xb6\xca\xae`\x0bw\x7f\xfc\xd8\xacVe\x19\xc8\x17\x0bZ\xad\x88"
1466 b"\xeb#\x97\x03\x13\xb1d\x0f{\x0c\x04w\x07\r\x97\xbd\xd6\xc1\xc3B:\x95\x08"
1467 b"^\x10V\xaeaH\x02\xd9\xe3\n\\\x01X\xf6\x9c\x8a\x06u#%\xbe*\xa1\x18v\x85"
1468 b"\xec!\t4\x00\x00\x00"
1469)
1470
1471FILTERS_RAW_4 = [{"id": lzma.FILTER_DELTA, "dist": 4},
1472 {"id": lzma.FILTER_X86, "start_offset": 0x40},
1473 {"id": lzma.FILTER_LZMA2, "preset": 4, "lc": 2}]
1474COMPRESSED_RAW_4 = (
1475 b"\xe0\x07\x80\x06\x0e\\\x00\x05\x14\x07bW\xaah\xdd\x10\xdc'\xd6\x90,\xc6v"
1476 b"Jq \x14l\xb7\x83xB\x0b\x97f=&fx\xba\n>Tn\xbf\x8f\xfb\x1dF\xca\xc3v_\xca?"
1477 b"\xfbV<\x92#\xd4w\xa6\x8a\xeb\xf6\x03\xc0\x01\x94\xd8\x9e\x13\x12\x98\xd1"
1478 b"*\xfa]c\xe8\x1e~\xaf\xb5]Eg\xfb\x9e\x01\"8\xb2\x90\x06=~\xe9\x91W\xcd"
1479 b"\xecD\x12\xc7\xfa\xe1\x91\x06\xc7\x99\xb9\xe3\x901\x87\x19u\x0f\x869\xff"
1480 b"\xc1\xb0hw|\xb0\xdcl\xcck\xb16o7\x85\xee{Y_b\xbf\xbc$\xf3=\x8d\x8bw\xe5Z"
1481 b"\x08@\xc4kmE\xad\xfb\xf6*\xd8\xad\xa1\xfb\xc5{\xdej,)\x1emB\x1f<\xaeca"
1482 b"\x80(\xee\x07 \xdf\xe9\xf8\xeb\x0e-\x97\x86\x90c\xf9\xea'B\xf7`\xd7\xb0"
1483 b"\x92\xbd\xa0\x82]\xbd\x0e\x0eB\x19\xdc\x96\xc6\x19\xd86D\xf0\xd5\x831"
1484 b"\x03\xb7\x1c\xf7&5\x1a\x8f PZ&j\xf8\x98\x1bo\xcc\x86\x9bS\xd3\xa5\xcdu"
1485 b"\xf9$\xcc\x97o\xe5V~\xfb\x97\xb5\x0b\x17\x9c\xfdxW\x10\xfep4\x80\xdaHDY"
1486 b"\xfa)\xfet\xb5\"\xd4\xd3F\x81\xf4\x13\x1f\xec\xdf\xa5\x13\xfc\"\x91x\xb7"
1487 b"\x99\xce\xc8\x92\n\xeb[\x10l*Y\xd8\xb1@\x06\xc8o\x8d7r\xebu\xfd5\x0e\x7f"
1488 b"\xf1$U{\t}\x1fQ\xcfxN\x9d\x9fXX\xe9`\x83\xc1\x06\xf4\x87v-f\x11\xdb/\\"
1489 b"\x06\xff\xd7)B\xf3g\x06\x88#2\x1eB244\x7f4q\t\xc893?mPX\x95\xa6a\xfb)d"
1490 b"\x9b\xfc\x98\x9aj\x04\xae\x9b\x9d\x19w\xba\xf92\xfaA\x11\\\x17\x97C3\xa4"
1491 b"\xbc!\x88\xcdo[\xec:\x030\x91.\x85\xe0@\\4\x16\x12\x9d\xcaJv\x97\xb04"
1492 b"\xack\xcbkf\xa3ss\xfc\x16^\x8ce\x85a\xa5=&\xecr\xb3p\xd1E\xd5\x80y\xc7"
1493 b"\xda\xf6\xfek\xbcT\xbfH\xee\x15o\xc5\x8c\x830\xec\x1d\x01\xae\x0c-e\\"
1494 b"\x91\x90\x94\xb2\xf8\x88\x91\xe8\x0b\xae\xa7>\x98\xf6\x9ck\xd2\xc6\x08"
1495 b"\xe6\xab\t\x98\xf2!\xa0\x8c^\xacqA\x99<\x1cEG\x97\xc8\xf1\xb6\xb9\x82"
1496 b"\x8d\xf7\x08s\x98a\xff\xe3\xcc\x92\x0e\xd2\xb6U\xd7\xd9\x86\x7fa\xe5\x1c"
1497 b"\x8dTG@\t\x1e\x0e7*\xfc\xde\xbc]6N\xf7\xf1\x84\x9e\x9f\xcf\xe9\x1e\xb5'"
1498 b"\xf4<\xdf\x99sq\xd0\x9d\xbd\x99\x0b\xb4%p4\xbf{\xbb\x8a\xd2\x0b\xbc=M"
1499 b"\x94H:\xf5\xa8\xd6\xa4\xc90\xc2D\xb9\xd3\xa8\xb0S\x87 `\xa2\xeb\xf3W\xce"
1500 b" 7\xf9N#\r\xe6\xbe\t\x9d\xe7\x811\xf9\x10\xc1\xc2\x14\xf6\xfc\xcba\xb7"
1501 b"\xb1\x7f\x95l\xe4\tjA\xec:\x10\xe5\xfe\xc2\\=D\xe2\x0c\x0b3]\xf7\xc1\xf7"
1502 b"\xbceZ\xb1A\xea\x16\xe5\xfddgFQ\xed\xaf\x04\xa3\xd3\xf8\xa2q\x19B\xd4r"
1503 b"\xc5\x0c\x9a\x14\x94\xea\x91\xc4o\xe4\xbb\xb4\x99\xf4@\xd1\xe6\x0c\xe3"
1504 b"\xc6d\xa0Q\n\xf2/\xd8\xb8S5\x8a\x18:\xb5g\xac\x95D\xce\x17\x07\xd4z\xda"
1505 b"\x90\xe65\x07\x19H!\t\xfdu\x16\x8e\x0eR\x19\xf4\x8cl\x0c\xf9Q\xf1\x80"
1506 b"\xe3\xbf\xd7O\xf8\x8c\x18\x0b\x9c\xf1\x1fb\xe1\tR\xb2\xf1\xe1A\xea \xcf-"
1507 b"IGE\xf1\x14\x98$\x83\x15\xc9\xd8j\xbf\x19\x0f\xd5\xd1\xaa\xb3\xf3\xa5I2s"
1508 b"\x8d\x145\xca\xd5\xd93\x9c\xb8D0\xe6\xaa%\xd0\xc0P}JO^h\x8e\x08\xadlV."
1509 b"\x18\x88\x13\x05o\xb0\x07\xeaw\xe0\xb6\xa4\xd5*\xe4r\xef\x07G+\xc1\xbei["
1510 b"w\xe8\xab@_\xef\x15y\xe5\x12\xc9W\x1b.\xad\x85-\xc2\xf7\xe3mU6g\x8eSA"
1511 b"\x01(\xd3\xdb\x16\x13=\xde\x92\xf9,D\xb8\x8a\xb2\xb4\xc9\xc3\xefnE\xe8\\"
1512 b"\xa6\xe2Y\xd2\xcf\xcb\x8c\xb6\xd5\xe9\x1d\x1e\x9a\x8b~\xe2\xa6\rE\x84uV"
1513 b"\xed\xc6\x99\xddm<\x10[\x0fu\x1f\xc1\x1d1\n\xcfw\xb2%!\xf0[\xce\x87\x83B"
1514 b"\x08\xaa,\x08%d\xcef\x94\"\xd9g.\xc83\xcbXY+4\xec\x85qA\n\x1d=9\xf0*\xb1"
1515 b"\x1f/\xf3s\xd61b\x7f@\xfb\x9d\xe3FQ\\\xbd\x82\x1e\x00\xf3\xce\xd3\xe1"
1516 b"\xca,E\xfd7[\xab\xb6\xb7\xac!mA}\xbd\x9d3R5\x9cF\xabH\xeb\x92)cc\x13\xd0"
1517 b"\xbd\xee\xe9n{\x1dIJB\xa5\xeb\x11\xe8`w&`\x8b}@Oxe\t\x8a\x07\x02\x95\xf2"
1518 b"\xed\xda|\xb1e\xbe\xaa\xbbg\x19@\xe1Y\x878\x84\x0f\x8c\xe3\xc98\xf2\x9e"
1519 b"\xd5N\xb5J\xef\xab!\xe2\x8dq\xe1\xe5q\xc5\xee\x11W\xb7\xe4k*\x027\xa0"
1520 b"\xa3J\xf4\xd8m\xd0q\x94\xcb\x07\n:\xb6`.\xe4\x9c\x15+\xc0)\xde\x80X\xd4"
1521 b"\xcfQm\x01\xc2cP\x1cA\x85'\xc9\xac\x8b\xe6\xb2)\xe6\x84t\x1c\x92\xe4Z"
1522 b"\x1cR\xb0\x9e\x96\xd1\xfb\x1c\xa6\x8b\xcb`\x10\x12]\xf2gR\x9bFT\xe0\xc8H"
1523 b"S\xfb\xac<\x04\xc7\xc1\xe8\xedP\xf4\x16\xdb\xc0\xd7e\xc2\x17J^\x1f\xab"
1524 b"\xff[\x08\x19\xb4\xf5\xfb\x19\xb4\x04\xe5c~']\xcb\xc2A\xec\x90\xd0\xed"
1525 b"\x06,\xc5K{\x86\x03\xb1\xcdMx\xdeQ\x8c3\xf9\x8a\xea=\x89\xaba\xd2\xc89a"
1526 b"\xd72\xf0\xc3\x19\x8a\xdfs\xd4\xfd\xbb\x81b\xeaE\"\xd8\xf4d\x0cD\xf7IJ!"
1527 b"\xe5d\xbbG\xe9\xcam\xaa\x0f_r\x95\x91NBq\xcaP\xce\xa7\xa9\xb5\x10\x94eP!"
1528 b"|\x856\xcd\xbfIir\xb8e\x9bjP\x97q\xabwS7\x1a\x0ehM\xe7\xca\x86?\xdeP}y~"
1529 b"\x0f\x95I\xfc\x13\xe1<Q\x1b\x868\x1d\x11\xdf\x94\xf4\x82>r\xa9k\x88\xcb"
1530 b"\xfd\xc3v\xe2\xb9\x8a\x02\x8eq\x92I\xf8\xf6\xf1\x03s\x9b\xb8\xe3\"\xe3"
1531 b"\xa9\xa5>D\xb8\x96;\xe7\x92\xd133\xe8\xdd'e\xc9.\xdc;\x17\x1f\xf5H\x13q"
1532 b"\xa4W\x0c\xdb~\x98\x01\xeb\xdf\xe32\x13\x0f\xddx\n6\xa0\t\x10\xb6\xbb"
1533 b"\xb0\xc3\x18\xb6;\x9fj[\xd9\xd5\xc9\x06\x8a\x87\xcd\xe5\xee\xfc\x9c-%@"
1534 b"\xee\xe0\xeb\xd2\xe3\xe8\xfb\xc0\x122\\\xc7\xaf\xc2\xa1Oth\xb3\x8f\x82"
1535 b"\xb3\x18\xa8\x07\xd5\xee_\xbe\xe0\x1cA\x1e_\r\x9a\xb0\x17W&\xa2D\x91\x94"
1536 b"\x1a\xb2\xef\xf2\xdc\x85;X\xb0,\xeb>-7S\xe5\xca\x07)\x1fp\x7f\xcaQBL\xca"
1537 b"\xf3\xb9d\xfc\xb5su\xb0\xc8\x95\x90\xeb*)\xa0v\xe4\x9a{FW\xf4l\xde\xcdj"
1538 b"\x00"
1539)
1540
1541
1542def test_main():
1543 run_unittest(
1544 CompressorDecompressorTestCase,
1545 CompressDecompressFunctionTestCase,
1546 FileTestCase,
Nadeem Vawdae8604042012-06-04 23:38:12 +02001547 OpenTestCase,
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001548 MiscellaneousTestCase,
1549 )
1550
1551if __name__ == "__main__":
1552 test_main()