blob: 07fadbde11ad78377ec76dbcb9049c6fbebd6796 [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):
Serhiy Storchakabad12572014-12-15 14:03:42 +0200223 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
224 with self.assertRaises(TypeError):
225 pickle.dumps(LZMACompressor(), proto)
226 with self.assertRaises(TypeError):
227 pickle.dumps(LZMADecompressor(), proto)
Nadeem Vawda37970652013-10-28 21:35:23 +0100228
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200229
230class CompressDecompressFunctionTestCase(unittest.TestCase):
231
232 # Test error cases:
233
234 def test_bad_args(self):
235 self.assertRaises(TypeError, lzma.compress)
236 self.assertRaises(TypeError, lzma.compress, [])
237 self.assertRaises(TypeError, lzma.compress, b"", format="xz")
238 self.assertRaises(TypeError, lzma.compress, b"", check="none")
239 self.assertRaises(TypeError, lzma.compress, b"", preset="blah")
240 self.assertRaises(TypeError, lzma.compress, b"", filters=1024)
241 # Can't specify a preset and a custom filter chain at the same time.
242 with self.assertRaises(ValueError):
243 lzma.compress(b"", preset=3, filters=[{"id": lzma.FILTER_LZMA2}])
244
245 self.assertRaises(TypeError, lzma.decompress)
246 self.assertRaises(TypeError, lzma.decompress, [])
247 self.assertRaises(TypeError, lzma.decompress, b"", format="lzma")
248 self.assertRaises(TypeError, lzma.decompress, b"", memlimit=7.3e9)
249 with self.assertRaises(TypeError):
250 lzma.decompress(b"", format=lzma.FORMAT_RAW, filters={})
251 # Cannot specify a memory limit with FILTER_RAW.
252 with self.assertRaises(ValueError):
253 lzma.decompress(b"", format=lzma.FORMAT_RAW, memlimit=0x1000000)
254 # Can only specify a custom filter chain with FILTER_RAW.
255 with self.assertRaises(ValueError):
256 lzma.decompress(b"", filters=FILTERS_RAW_1)
257 with self.assertRaises(ValueError):
258 lzma.decompress(b"", format=lzma.FORMAT_XZ, filters=FILTERS_RAW_1)
259 with self.assertRaises(ValueError):
260 lzma.decompress(
261 b"", format=lzma.FORMAT_ALONE, filters=FILTERS_RAW_1)
262
263 def test_decompress_memlimit(self):
264 with self.assertRaises(LZMAError):
265 lzma.decompress(COMPRESSED_XZ, memlimit=1024)
266 with self.assertRaises(LZMAError):
267 lzma.decompress(
268 COMPRESSED_XZ, format=lzma.FORMAT_XZ, memlimit=1024)
269 with self.assertRaises(LZMAError):
270 lzma.decompress(
271 COMPRESSED_ALONE, format=lzma.FORMAT_ALONE, memlimit=1024)
272
273 # Test LZMADecompressor on known-good input data.
274
275 def test_decompress_good_input(self):
276 ddata = lzma.decompress(COMPRESSED_XZ)
277 self.assertEqual(ddata, INPUT)
278
279 ddata = lzma.decompress(COMPRESSED_ALONE)
280 self.assertEqual(ddata, INPUT)
281
282 ddata = lzma.decompress(COMPRESSED_XZ, lzma.FORMAT_XZ)
283 self.assertEqual(ddata, INPUT)
284
285 ddata = lzma.decompress(COMPRESSED_ALONE, lzma.FORMAT_ALONE)
286 self.assertEqual(ddata, INPUT)
287
288 ddata = lzma.decompress(
289 COMPRESSED_RAW_1, lzma.FORMAT_RAW, filters=FILTERS_RAW_1)
290 self.assertEqual(ddata, INPUT)
291
292 ddata = lzma.decompress(
293 COMPRESSED_RAW_2, lzma.FORMAT_RAW, filters=FILTERS_RAW_2)
294 self.assertEqual(ddata, INPUT)
295
296 ddata = lzma.decompress(
297 COMPRESSED_RAW_3, lzma.FORMAT_RAW, filters=FILTERS_RAW_3)
298 self.assertEqual(ddata, INPUT)
299
300 ddata = lzma.decompress(
301 COMPRESSED_RAW_4, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
302 self.assertEqual(ddata, INPUT)
303
304 def test_decompress_incomplete_input(self):
305 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_XZ[:128])
306 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_ALONE[:128])
307 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_1[:128],
308 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_1)
309 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_2[:128],
310 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2)
311 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_3[:128],
312 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3)
313 self.assertRaises(LZMAError, lzma.decompress, COMPRESSED_RAW_4[:128],
314 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
315
316 def test_decompress_bad_input(self):
317 with self.assertRaises(LZMAError):
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100318 lzma.decompress(COMPRESSED_BOGUS)
319 with self.assertRaises(LZMAError):
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200320 lzma.decompress(COMPRESSED_RAW_1)
321 with self.assertRaises(LZMAError):
322 lzma.decompress(COMPRESSED_ALONE, format=lzma.FORMAT_XZ)
323 with self.assertRaises(LZMAError):
324 lzma.decompress(COMPRESSED_XZ, format=lzma.FORMAT_ALONE)
325 with self.assertRaises(LZMAError):
326 lzma.decompress(COMPRESSED_XZ, format=lzma.FORMAT_RAW,
327 filters=FILTERS_RAW_1)
328
329 # Test that compress()->decompress() preserves the input data.
330
331 def test_roundtrip(self):
332 cdata = lzma.compress(INPUT)
333 ddata = lzma.decompress(cdata)
334 self.assertEqual(ddata, INPUT)
335
336 cdata = lzma.compress(INPUT, lzma.FORMAT_XZ)
337 ddata = lzma.decompress(cdata)
338 self.assertEqual(ddata, INPUT)
339
340 cdata = lzma.compress(INPUT, lzma.FORMAT_ALONE)
341 ddata = lzma.decompress(cdata)
342 self.assertEqual(ddata, INPUT)
343
344 cdata = lzma.compress(INPUT, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
345 ddata = lzma.decompress(cdata, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
346 self.assertEqual(ddata, INPUT)
347
348 # Unlike LZMADecompressor, decompress() *does* handle concatenated streams.
349
350 def test_decompress_multistream(self):
351 ddata = lzma.decompress(COMPRESSED_XZ + COMPRESSED_ALONE)
352 self.assertEqual(ddata, INPUT * 2)
353
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100354 # Test robust handling of non-LZMA data following the compressed stream(s).
355
356 def test_decompress_trailing_junk(self):
357 ddata = lzma.decompress(COMPRESSED_XZ + COMPRESSED_BOGUS)
358 self.assertEqual(ddata, INPUT)
359
360 def test_decompress_multistream_trailing_junk(self):
361 ddata = lzma.decompress(COMPRESSED_XZ * 3 + COMPRESSED_BOGUS)
362 self.assertEqual(ddata, INPUT * 3)
363
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200364
365class TempFile:
366 """Context manager - creates a file, and deletes it on __exit__."""
367
368 def __init__(self, filename, data=b""):
369 self.filename = filename
370 self.data = data
371
372 def __enter__(self):
373 with open(self.filename, "wb") as f:
374 f.write(self.data)
375
376 def __exit__(self, *args):
377 unlink(self.filename)
378
379
380class FileTestCase(unittest.TestCase):
381
382 def test_init(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200383 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200384 pass
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200385 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200386 pass
Nadeem Vawda42ca9822013-10-19 00:06:19 +0200387 with LZMAFile(BytesIO(), "x") as f:
388 pass
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200389 with LZMAFile(BytesIO(), "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200390 pass
391
392 def test_init_with_filename(self):
393 with TempFile(TESTFN, COMPRESSED_XZ):
394 with LZMAFile(TESTFN) as f:
395 pass
396 with LZMAFile(TESTFN, "w") as f:
397 pass
398 with LZMAFile(TESTFN, "a") as f:
399 pass
400
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200401 def test_init_mode(self):
402 with TempFile(TESTFN):
403 with LZMAFile(TESTFN, "r"):
404 pass
405 with LZMAFile(TESTFN, "rb"):
406 pass
407 with LZMAFile(TESTFN, "w"):
408 pass
409 with LZMAFile(TESTFN, "wb"):
410 pass
411 with LZMAFile(TESTFN, "a"):
412 pass
413 with LZMAFile(TESTFN, "ab"):
414 pass
415
Nadeem Vawda42ca9822013-10-19 00:06:19 +0200416 def test_init_with_x_mode(self):
417 self.addCleanup(unlink, TESTFN)
418 for mode in ("x", "xb"):
419 unlink(TESTFN)
420 with LZMAFile(TESTFN, mode):
421 pass
422 with self.assertRaises(FileExistsError):
423 with LZMAFile(TESTFN, mode):
424 pass
425
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200426 def test_init_bad_mode(self):
427 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200428 LZMAFile(BytesIO(COMPRESSED_XZ), (3, "x"))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200429 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200430 LZMAFile(BytesIO(COMPRESSED_XZ), "")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200431 with self.assertRaises(ValueError):
Nadeem Vawda42ca9822013-10-19 00:06:19 +0200432 LZMAFile(BytesIO(COMPRESSED_XZ), "xt")
433 with self.assertRaises(ValueError):
434 LZMAFile(BytesIO(COMPRESSED_XZ), "x+")
435 with self.assertRaises(ValueError):
436 LZMAFile(BytesIO(COMPRESSED_XZ), "rx")
437 with self.assertRaises(ValueError):
438 LZMAFile(BytesIO(COMPRESSED_XZ), "wx")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200439 with self.assertRaises(ValueError):
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200440 LZMAFile(BytesIO(COMPRESSED_XZ), "rt")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200441 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200442 LZMAFile(BytesIO(COMPRESSED_XZ), "r+")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200443 with self.assertRaises(ValueError):
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200444 LZMAFile(BytesIO(COMPRESSED_XZ), "wt")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200445 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200446 LZMAFile(BytesIO(COMPRESSED_XZ), "w+")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200447 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200448 LZMAFile(BytesIO(COMPRESSED_XZ), "rw")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200449
450 def test_init_bad_check(self):
451 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200452 LZMAFile(BytesIO(), "w", check=b"asd")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200453 # CHECK_UNKNOWN and anything above CHECK_ID_MAX should be invalid.
454 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200455 LZMAFile(BytesIO(), "w", check=lzma.CHECK_UNKNOWN)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200456 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200457 LZMAFile(BytesIO(), "w", check=lzma.CHECK_ID_MAX + 3)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200458 # Cannot specify a check with mode="r".
459 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200460 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_NONE)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200461 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200462 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_CRC32)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200463 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200464 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_CRC64)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200465 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200466 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_SHA256)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200467 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200468 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_UNKNOWN)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200469
470 def test_init_bad_preset(self):
471 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200472 LZMAFile(BytesIO(), "w", preset=4.39)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200473 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200474 LZMAFile(BytesIO(), "w", preset=10)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200475 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200476 LZMAFile(BytesIO(), "w", preset=23)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200477 with self.assertRaises(OverflowError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200478 LZMAFile(BytesIO(), "w", preset=-1)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200479 with self.assertRaises(OverflowError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200480 LZMAFile(BytesIO(), "w", preset=-7)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200481 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200482 LZMAFile(BytesIO(), "w", preset="foo")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200483 # Cannot specify a preset with mode="r".
484 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200485 LZMAFile(BytesIO(COMPRESSED_XZ), preset=3)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200486
487 def test_init_bad_filter_spec(self):
488 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200489 LZMAFile(BytesIO(), "w", filters=[b"wobsite"])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200490 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200491 LZMAFile(BytesIO(), "w", filters=[{"xyzzy": 3}])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200492 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200493 LZMAFile(BytesIO(), "w", filters=[{"id": 98765}])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200494 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200495 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200496 filters=[{"id": lzma.FILTER_LZMA2, "foo": 0}])
497 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200498 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200499 filters=[{"id": lzma.FILTER_DELTA, "foo": 0}])
500 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200501 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200502 filters=[{"id": lzma.FILTER_X86, "foo": 0}])
503
504 def test_init_with_preset_and_filters(self):
505 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200506 LZMAFile(BytesIO(), "w", format=lzma.FORMAT_RAW,
507 preset=6, filters=FILTERS_RAW_1)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200508
509 def test_close(self):
510 with BytesIO(COMPRESSED_XZ) as src:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200511 f = LZMAFile(src)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200512 f.close()
513 # LZMAFile.close() should not close the underlying file object.
514 self.assertFalse(src.closed)
515 # Try closing an already-closed LZMAFile.
516 f.close()
517 self.assertFalse(src.closed)
518
519 # Test with a real file on disk, opened directly by LZMAFile.
520 with TempFile(TESTFN, COMPRESSED_XZ):
521 f = LZMAFile(TESTFN)
522 fp = f._fp
523 f.close()
524 # Here, LZMAFile.close() *should* close the underlying file object.
525 self.assertTrue(fp.closed)
526 # Try closing an already-closed LZMAFile.
527 f.close()
528
529 def test_closed(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200530 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200531 try:
532 self.assertFalse(f.closed)
533 f.read()
534 self.assertFalse(f.closed)
535 finally:
536 f.close()
537 self.assertTrue(f.closed)
538
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200539 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200540 try:
541 self.assertFalse(f.closed)
542 finally:
543 f.close()
544 self.assertTrue(f.closed)
545
546 def test_fileno(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200547 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200548 try:
549 self.assertRaises(UnsupportedOperation, f.fileno)
550 finally:
551 f.close()
552 self.assertRaises(ValueError, f.fileno)
553 with TempFile(TESTFN, COMPRESSED_XZ):
554 f = LZMAFile(TESTFN)
555 try:
556 self.assertEqual(f.fileno(), f._fp.fileno())
557 self.assertIsInstance(f.fileno(), int)
558 finally:
559 f.close()
560 self.assertRaises(ValueError, f.fileno)
561
562 def test_seekable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200563 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200564 try:
565 self.assertTrue(f.seekable())
566 f.read()
567 self.assertTrue(f.seekable())
568 finally:
569 f.close()
570 self.assertRaises(ValueError, f.seekable)
571
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200572 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200573 try:
574 self.assertFalse(f.seekable())
575 finally:
576 f.close()
577 self.assertRaises(ValueError, f.seekable)
578
Nadeem Vawdaae557d72012-02-12 01:51:38 +0200579 src = BytesIO(COMPRESSED_XZ)
580 src.seekable = lambda: False
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200581 f = LZMAFile(src)
Nadeem Vawdaae557d72012-02-12 01:51:38 +0200582 try:
583 self.assertFalse(f.seekable())
584 finally:
585 f.close()
586 self.assertRaises(ValueError, f.seekable)
587
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200588 def test_readable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200589 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200590 try:
591 self.assertTrue(f.readable())
592 f.read()
593 self.assertTrue(f.readable())
594 finally:
595 f.close()
596 self.assertRaises(ValueError, f.readable)
597
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200598 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200599 try:
600 self.assertFalse(f.readable())
601 finally:
602 f.close()
603 self.assertRaises(ValueError, f.readable)
604
605 def test_writable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200606 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200607 try:
608 self.assertFalse(f.writable())
609 f.read()
610 self.assertFalse(f.writable())
611 finally:
612 f.close()
613 self.assertRaises(ValueError, f.writable)
614
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200615 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200616 try:
617 self.assertTrue(f.writable())
618 finally:
619 f.close()
620 self.assertRaises(ValueError, f.writable)
621
622 def test_read(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200623 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200624 self.assertEqual(f.read(), INPUT)
625 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200626 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200627 self.assertEqual(f.read(), INPUT)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200628 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200629 self.assertEqual(f.read(), INPUT)
630 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200631 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200632 self.assertEqual(f.read(), INPUT)
633 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200634 with LZMAFile(BytesIO(COMPRESSED_RAW_1),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200635 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_1) as f:
636 self.assertEqual(f.read(), INPUT)
637 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200638 with LZMAFile(BytesIO(COMPRESSED_RAW_2),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200639 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2) as f:
640 self.assertEqual(f.read(), INPUT)
641 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200642 with LZMAFile(BytesIO(COMPRESSED_RAW_3),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200643 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3) as f:
644 self.assertEqual(f.read(), INPUT)
645 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200646 with LZMAFile(BytesIO(COMPRESSED_RAW_4),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200647 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_4) as f:
648 self.assertEqual(f.read(), INPUT)
649 self.assertEqual(f.read(), b"")
650
651 def test_read_0(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200652 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200653 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200654 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200655 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200656 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200657 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200658 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200659 self.assertEqual(f.read(0), b"")
660
661 def test_read_10(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200662 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200663 chunks = []
664 while True:
665 result = f.read(10)
666 if not result:
667 break
668 self.assertLessEqual(len(result), 10)
669 chunks.append(result)
670 self.assertEqual(b"".join(chunks), INPUT)
671
672 def test_read_multistream(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200673 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200674 self.assertEqual(f.read(), INPUT * 5)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200675 with LZMAFile(BytesIO(COMPRESSED_XZ + COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200676 self.assertEqual(f.read(), INPUT * 2)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200677 with LZMAFile(BytesIO(COMPRESSED_RAW_3 * 4),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200678 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3) as f:
679 self.assertEqual(f.read(), INPUT * 4)
680
681 def test_read_multistream_buffer_size_aligned(self):
682 # Test the case where a stream boundary coincides with the end
683 # of the raw read buffer.
684 saved_buffer_size = lzma._BUFFER_SIZE
685 lzma._BUFFER_SIZE = len(COMPRESSED_XZ)
686 try:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200687 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200688 self.assertEqual(f.read(), INPUT * 5)
689 finally:
690 lzma._BUFFER_SIZE = saved_buffer_size
691
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100692 def test_read_trailing_junk(self):
693 with LZMAFile(BytesIO(COMPRESSED_XZ + COMPRESSED_BOGUS)) as f:
694 self.assertEqual(f.read(), INPUT)
695
696 def test_read_multistream_trailing_junk(self):
697 with LZMAFile(BytesIO(COMPRESSED_XZ * 5 + COMPRESSED_BOGUS)) as f:
698 self.assertEqual(f.read(), INPUT * 5)
699
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200700 def test_read_from_file(self):
701 with TempFile(TESTFN, COMPRESSED_XZ):
702 with LZMAFile(TESTFN) as f:
703 self.assertEqual(f.read(), INPUT)
704 self.assertEqual(f.read(), b"")
705
Nadeem Vawda10c87912012-06-20 01:48:50 +0200706 def test_read_from_file_with_bytes_filename(self):
707 try:
708 bytes_filename = TESTFN.encode("ascii")
709 except UnicodeEncodeError:
710 self.skipTest("Temporary file name needs to be ASCII")
711 with TempFile(TESTFN, COMPRESSED_XZ):
712 with LZMAFile(bytes_filename) as f:
713 self.assertEqual(f.read(), INPUT)
714 self.assertEqual(f.read(), b"")
715
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200716 def test_read_incomplete(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200717 with LZMAFile(BytesIO(COMPRESSED_XZ[:128])) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200718 self.assertRaises(EOFError, f.read)
719
Serhiy Storchaka57f9b7a2013-01-22 17:07:49 +0200720 def test_read_truncated(self):
721 # Drop stream footer: CRC (4 bytes), index size (4 bytes),
Serhiy Storchaka70ea7fa2013-02-08 11:24:16 +0200722 # flags (2 bytes) and magic number (2 bytes).
Serhiy Storchaka57f9b7a2013-01-22 17:07:49 +0200723 truncated = COMPRESSED_XZ[:-12]
724 with LZMAFile(BytesIO(truncated)) as f:
725 self.assertRaises(EOFError, f.read)
726 with LZMAFile(BytesIO(truncated)) as f:
727 self.assertEqual(f.read(len(INPUT)), INPUT)
728 self.assertRaises(EOFError, f.read, 1)
729 # Incomplete 12-byte header.
730 for i in range(12):
731 with LZMAFile(BytesIO(truncated[:i])) as f:
732 self.assertRaises(EOFError, f.read, 1)
733
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200734 def test_read_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200735 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200736 f.close()
737 self.assertRaises(ValueError, f.read)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200738 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200739 self.assertRaises(ValueError, f.read)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200740 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200741 self.assertRaises(TypeError, f.read, None)
742
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +0100743 def test_read_bad_data(self):
744 with LZMAFile(BytesIO(COMPRESSED_BOGUS)) as f:
745 self.assertRaises(LZMAError, f.read)
746
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200747 def test_read1(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200748 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200749 blocks = []
750 while True:
751 result = f.read1()
752 if not result:
753 break
754 blocks.append(result)
755 self.assertEqual(b"".join(blocks), INPUT)
756 self.assertEqual(f.read1(), b"")
757
758 def test_read1_0(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200759 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200760 self.assertEqual(f.read1(0), b"")
761
762 def test_read1_10(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200763 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200764 blocks = []
765 while True:
766 result = f.read1(10)
767 if not result:
768 break
769 blocks.append(result)
770 self.assertEqual(b"".join(blocks), INPUT)
771 self.assertEqual(f.read1(), b"")
772
773 def test_read1_multistream(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200774 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200775 blocks = []
776 while True:
777 result = f.read1()
778 if not result:
779 break
780 blocks.append(result)
781 self.assertEqual(b"".join(blocks), INPUT * 5)
782 self.assertEqual(f.read1(), b"")
783
784 def test_read1_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200785 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200786 f.close()
787 self.assertRaises(ValueError, f.read1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200788 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200789 self.assertRaises(ValueError, f.read1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200790 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200791 self.assertRaises(TypeError, f.read1, None)
792
793 def test_peek(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200794 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200795 result = f.peek()
796 self.assertGreater(len(result), 0)
797 self.assertTrue(INPUT.startswith(result))
798 self.assertEqual(f.read(), INPUT)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200799 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200800 result = f.peek(10)
801 self.assertGreater(len(result), 0)
802 self.assertTrue(INPUT.startswith(result))
803 self.assertEqual(f.read(), INPUT)
804
805 def test_peek_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200806 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200807 self.assertRaises(ValueError, f.peek)
808
809 def test_iterator(self):
810 with BytesIO(INPUT) as f:
811 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200812 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200813 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200814 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200815 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200816 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200817 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200818 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200819 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200820 with LZMAFile(BytesIO(COMPRESSED_RAW_2),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200821 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2) as f:
822 self.assertListEqual(list(iter(f)), lines)
823
824 def test_readline(self):
825 with BytesIO(INPUT) as f:
826 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200827 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200828 for line in lines:
829 self.assertEqual(f.readline(), line)
830
831 def test_readlines(self):
832 with BytesIO(INPUT) as f:
833 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200834 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200835 self.assertListEqual(f.readlines(), lines)
836
837 def test_write(self):
838 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200839 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200840 f.write(INPUT)
841 expected = lzma.compress(INPUT)
842 self.assertEqual(dst.getvalue(), expected)
843 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200844 with LZMAFile(dst, "w", format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200845 f.write(INPUT)
846 expected = lzma.compress(INPUT, format=lzma.FORMAT_XZ)
847 self.assertEqual(dst.getvalue(), expected)
848 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200849 with LZMAFile(dst, "w", format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200850 f.write(INPUT)
851 expected = lzma.compress(INPUT, format=lzma.FORMAT_ALONE)
852 self.assertEqual(dst.getvalue(), expected)
853 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200854 with LZMAFile(dst, "w", format=lzma.FORMAT_RAW,
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200855 filters=FILTERS_RAW_2) as f:
856 f.write(INPUT)
857 expected = lzma.compress(INPUT, format=lzma.FORMAT_RAW,
858 filters=FILTERS_RAW_2)
859 self.assertEqual(dst.getvalue(), expected)
860
861 def test_write_10(self):
862 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200863 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200864 for start in range(0, len(INPUT), 10):
865 f.write(INPUT[start:start+10])
866 expected = lzma.compress(INPUT)
867 self.assertEqual(dst.getvalue(), expected)
868
869 def test_write_append(self):
870 part1 = INPUT[:1024]
871 part2 = INPUT[1024:1536]
872 part3 = INPUT[1536:]
873 expected = b"".join(lzma.compress(x) for x in (part1, part2, part3))
874 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200875 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200876 f.write(part1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200877 with LZMAFile(dst, "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200878 f.write(part2)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200879 with LZMAFile(dst, "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200880 f.write(part3)
881 self.assertEqual(dst.getvalue(), expected)
882
883 def test_write_to_file(self):
884 try:
885 with LZMAFile(TESTFN, "w") as f:
886 f.write(INPUT)
887 expected = lzma.compress(INPUT)
888 with open(TESTFN, "rb") as f:
889 self.assertEqual(f.read(), expected)
890 finally:
891 unlink(TESTFN)
892
Nadeem Vawda10c87912012-06-20 01:48:50 +0200893 def test_write_to_file_with_bytes_filename(self):
894 try:
895 bytes_filename = TESTFN.encode("ascii")
896 except UnicodeEncodeError:
897 self.skipTest("Temporary file name needs to be ASCII")
898 try:
899 with LZMAFile(bytes_filename, "w") as f:
900 f.write(INPUT)
901 expected = lzma.compress(INPUT)
902 with open(TESTFN, "rb") as f:
903 self.assertEqual(f.read(), expected)
904 finally:
905 unlink(TESTFN)
906
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200907 def test_write_append_to_file(self):
908 part1 = INPUT[:1024]
909 part2 = INPUT[1024:1536]
910 part3 = INPUT[1536:]
911 expected = b"".join(lzma.compress(x) for x in (part1, part2, part3))
912 try:
913 with LZMAFile(TESTFN, "w") as f:
914 f.write(part1)
915 with LZMAFile(TESTFN, "a") as f:
916 f.write(part2)
917 with LZMAFile(TESTFN, "a") as f:
918 f.write(part3)
919 with open(TESTFN, "rb") as f:
920 self.assertEqual(f.read(), expected)
921 finally:
922 unlink(TESTFN)
923
924 def test_write_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200925 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200926 f.close()
927 self.assertRaises(ValueError, f.write, b"foo")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200928 with LZMAFile(BytesIO(COMPRESSED_XZ), "r") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200929 self.assertRaises(ValueError, f.write, b"bar")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200930 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200931 self.assertRaises(TypeError, f.write, None)
932 self.assertRaises(TypeError, f.write, "text")
933 self.assertRaises(TypeError, f.write, 789)
934
935 def test_writelines(self):
936 with BytesIO(INPUT) as f:
937 lines = f.readlines()
938 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200939 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200940 f.writelines(lines)
941 expected = lzma.compress(INPUT)
942 self.assertEqual(dst.getvalue(), expected)
943
944 def test_seek_forward(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(555)
947 self.assertEqual(f.read(), INPUT[555:])
948
949 def test_seek_forward_across_streams(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200950 with LZMAFile(BytesIO(COMPRESSED_XZ * 2)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200951 f.seek(len(INPUT) + 123)
952 self.assertEqual(f.read(), INPUT[123:])
953
954 def test_seek_forward_relative_to_current(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200955 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200956 f.read(100)
957 f.seek(1236, 1)
958 self.assertEqual(f.read(), INPUT[1336:])
959
960 def test_seek_forward_relative_to_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200961 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200962 f.seek(-555, 2)
963 self.assertEqual(f.read(), INPUT[-555:])
964
965 def test_seek_backward(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200966 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200967 f.read(1001)
968 f.seek(211)
969 self.assertEqual(f.read(), INPUT[211:])
970
971 def test_seek_backward_across_streams(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200972 with LZMAFile(BytesIO(COMPRESSED_XZ * 2)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200973 f.read(len(INPUT) + 333)
974 f.seek(737)
975 self.assertEqual(f.read(), INPUT[737:] + INPUT)
976
977 def test_seek_backward_relative_to_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200978 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200979 f.seek(-150, 2)
980 self.assertEqual(f.read(), INPUT[-150:])
981
982 def test_seek_past_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200983 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200984 f.seek(len(INPUT) + 9001)
985 self.assertEqual(f.tell(), len(INPUT))
986 self.assertEqual(f.read(), b"")
987
988 def test_seek_past_start(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200989 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200990 f.seek(-88)
991 self.assertEqual(f.tell(), 0)
992 self.assertEqual(f.read(), INPUT)
993
994 def test_seek_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200995 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200996 f.close()
997 self.assertRaises(ValueError, f.seek, 0)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200998 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200999 self.assertRaises(ValueError, f.seek, 0)
Nadeem Vawda33c34da2012-06-04 23:34:07 +02001000 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001001 self.assertRaises(ValueError, f.seek, 0, 3)
1002 self.assertRaises(ValueError, f.seek, 9, ())
1003 self.assertRaises(TypeError, f.seek, None)
1004 self.assertRaises(TypeError, f.seek, b"derp")
1005
1006 def test_tell(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +02001007 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001008 pos = 0
1009 while True:
1010 self.assertEqual(f.tell(), pos)
1011 result = f.read(183)
1012 if not result:
1013 break
1014 pos += len(result)
1015 self.assertEqual(f.tell(), len(INPUT))
Nadeem Vawda33c34da2012-06-04 23:34:07 +02001016 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001017 for pos in range(0, len(INPUT), 144):
1018 self.assertEqual(f.tell(), pos)
1019 f.write(INPUT[pos:pos+144])
1020 self.assertEqual(f.tell(), len(INPUT))
1021
1022 def test_tell_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +02001023 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001024 f.close()
1025 self.assertRaises(ValueError, f.tell)
1026
1027
Nadeem Vawdae8604042012-06-04 23:38:12 +02001028class OpenTestCase(unittest.TestCase):
1029
1030 def test_binary_modes(self):
1031 with lzma.open(BytesIO(COMPRESSED_XZ), "rb") as f:
1032 self.assertEqual(f.read(), INPUT)
1033 with BytesIO() as bio:
1034 with lzma.open(bio, "wb") as f:
1035 f.write(INPUT)
1036 file_data = lzma.decompress(bio.getvalue())
1037 self.assertEqual(file_data, INPUT)
1038 with lzma.open(bio, "ab") as f:
1039 f.write(INPUT)
1040 file_data = lzma.decompress(bio.getvalue())
1041 self.assertEqual(file_data, INPUT * 2)
1042
1043 def test_text_modes(self):
1044 uncompressed = INPUT.decode("ascii")
1045 uncompressed_raw = uncompressed.replace("\n", os.linesep)
1046 with lzma.open(BytesIO(COMPRESSED_XZ), "rt") as f:
1047 self.assertEqual(f.read(), uncompressed)
1048 with BytesIO() as bio:
1049 with lzma.open(bio, "wt") as f:
1050 f.write(uncompressed)
1051 file_data = lzma.decompress(bio.getvalue()).decode("ascii")
1052 self.assertEqual(file_data, uncompressed_raw)
1053 with lzma.open(bio, "at") as f:
1054 f.write(uncompressed)
1055 file_data = lzma.decompress(bio.getvalue()).decode("ascii")
1056 self.assertEqual(file_data, uncompressed_raw * 2)
1057
1058 def test_filename(self):
1059 with TempFile(TESTFN):
1060 with lzma.open(TESTFN, "wb") as f:
1061 f.write(INPUT)
1062 with open(TESTFN, "rb") as f:
1063 file_data = lzma.decompress(f.read())
1064 self.assertEqual(file_data, INPUT)
1065 with lzma.open(TESTFN, "rb") as f:
1066 self.assertEqual(f.read(), INPUT)
1067 with lzma.open(TESTFN, "ab") as f:
1068 f.write(INPUT)
1069 with lzma.open(TESTFN, "rb") as f:
1070 self.assertEqual(f.read(), INPUT * 2)
1071
1072 def test_bad_params(self):
1073 # Test invalid parameter combinations.
1074 with self.assertRaises(ValueError):
1075 lzma.open(TESTFN, "")
1076 with self.assertRaises(ValueError):
Nadeem Vawdae8604042012-06-04 23:38:12 +02001077 lzma.open(TESTFN, "rbt")
1078 with self.assertRaises(ValueError):
1079 lzma.open(TESTFN, "rb", encoding="utf-8")
1080 with self.assertRaises(ValueError):
1081 lzma.open(TESTFN, "rb", errors="ignore")
1082 with self.assertRaises(ValueError):
1083 lzma.open(TESTFN, "rb", newline="\n")
1084
1085 def test_format_and_filters(self):
1086 # Test non-default format and filter chain.
1087 options = {"format": lzma.FORMAT_RAW, "filters": FILTERS_RAW_1}
1088 with lzma.open(BytesIO(COMPRESSED_RAW_1), "rb", **options) as f:
1089 self.assertEqual(f.read(), INPUT)
1090 with BytesIO() as bio:
1091 with lzma.open(bio, "wb", **options) as f:
1092 f.write(INPUT)
1093 file_data = lzma.decompress(bio.getvalue(), **options)
1094 self.assertEqual(file_data, INPUT)
1095
1096 def test_encoding(self):
1097 # Test non-default encoding.
1098 uncompressed = INPUT.decode("ascii")
1099 uncompressed_raw = uncompressed.replace("\n", os.linesep)
1100 with BytesIO() as bio:
1101 with lzma.open(bio, "wt", encoding="utf-16-le") as f:
1102 f.write(uncompressed)
1103 file_data = lzma.decompress(bio.getvalue()).decode("utf-16-le")
1104 self.assertEqual(file_data, uncompressed_raw)
1105 bio.seek(0)
1106 with lzma.open(bio, "rt", encoding="utf-16-le") as f:
1107 self.assertEqual(f.read(), uncompressed)
1108
1109 def test_encoding_error_handler(self):
1110 # Test wih non-default encoding error handler.
1111 with BytesIO(lzma.compress(b"foo\xffbar")) as bio:
1112 with lzma.open(bio, "rt", encoding="ascii", errors="ignore") as f:
1113 self.assertEqual(f.read(), "foobar")
1114
1115 def test_newline(self):
1116 # Test with explicit newline (universal newline mode disabled).
1117 text = INPUT.decode("ascii")
1118 with BytesIO() as bio:
1119 with lzma.open(bio, "wt", newline="\n") as f:
1120 f.write(text)
1121 bio.seek(0)
1122 with lzma.open(bio, "rt", newline="\r") as f:
1123 self.assertEqual(f.readlines(), [text])
1124
Nadeem Vawda42ca9822013-10-19 00:06:19 +02001125 def test_x_mode(self):
1126 self.addCleanup(unlink, TESTFN)
1127 for mode in ("x", "xb", "xt"):
1128 unlink(TESTFN)
1129 with lzma.open(TESTFN, mode):
1130 pass
1131 with self.assertRaises(FileExistsError):
1132 with lzma.open(TESTFN, mode):
1133 pass
1134
Nadeem Vawdae8604042012-06-04 23:38:12 +02001135
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001136class MiscellaneousTestCase(unittest.TestCase):
1137
1138 def test_is_check_supported(self):
1139 # CHECK_NONE and CHECK_CRC32 should always be supported,
1140 # regardless of the options liblzma was compiled with.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001141 self.assertTrue(lzma.is_check_supported(lzma.CHECK_NONE))
1142 self.assertTrue(lzma.is_check_supported(lzma.CHECK_CRC32))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001143
1144 # The .xz format spec cannot store check IDs above this value.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001145 self.assertFalse(lzma.is_check_supported(lzma.CHECK_ID_MAX + 1))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001146
1147 # This value should not be a valid check ID.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001148 self.assertFalse(lzma.is_check_supported(lzma.CHECK_UNKNOWN))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001149
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001150 def test__encode_filter_properties(self):
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001151 with self.assertRaises(TypeError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001152 lzma._encode_filter_properties(b"not a dict")
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001153 with self.assertRaises(ValueError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001154 lzma._encode_filter_properties({"id": 0x100})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001155 with self.assertRaises(ValueError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001156 lzma._encode_filter_properties({"id": lzma.FILTER_LZMA2, "junk": 12})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001157 with self.assertRaises(lzma.LZMAError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001158 lzma._encode_filter_properties({"id": lzma.FILTER_DELTA,
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001159 "dist": 9001})
1160
1161 # Test with parameters used by zipfile module.
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001162 props = lzma._encode_filter_properties({
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001163 "id": lzma.FILTER_LZMA1,
1164 "pb": 2,
1165 "lp": 0,
1166 "lc": 3,
1167 "dict_size": 8 << 20,
1168 })
1169 self.assertEqual(props, b"]\x00\x00\x80\x00")
1170
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001171 def test__decode_filter_properties(self):
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001172 with self.assertRaises(TypeError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001173 lzma._decode_filter_properties(lzma.FILTER_X86, {"should be": bytes})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001174 with self.assertRaises(lzma.LZMAError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001175 lzma._decode_filter_properties(lzma.FILTER_DELTA, b"too long")
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001176
1177 # Test with parameters used by zipfile module.
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001178 filterspec = lzma._decode_filter_properties(
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001179 lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
1180 self.assertEqual(filterspec["id"], lzma.FILTER_LZMA1)
1181 self.assertEqual(filterspec["pb"], 2)
1182 self.assertEqual(filterspec["lp"], 0)
1183 self.assertEqual(filterspec["lc"], 3)
1184 self.assertEqual(filterspec["dict_size"], 8 << 20)
1185
1186 def test_filter_properties_roundtrip(self):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001187 spec1 = lzma._decode_filter_properties(
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001188 lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001189 reencoded = lzma._encode_filter_properties(spec1)
1190 spec2 = lzma._decode_filter_properties(lzma.FILTER_LZMA1, reencoded)
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001191 self.assertEqual(spec1, spec2)
1192
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001193
1194# Test data:
1195
1196INPUT = b"""
1197LAERTES
1198
1199 O, fear me not.
1200 I stay too long: but here my father comes.
1201
1202 Enter POLONIUS
1203
1204 A double blessing is a double grace,
1205 Occasion smiles upon a second leave.
1206
1207LORD POLONIUS
1208
1209 Yet here, Laertes! aboard, aboard, for shame!
1210 The wind sits in the shoulder of your sail,
1211 And you are stay'd for. There; my blessing with thee!
1212 And these few precepts in thy memory
1213 See thou character. Give thy thoughts no tongue,
1214 Nor any unproportioned thought his act.
1215 Be thou familiar, but by no means vulgar.
1216 Those friends thou hast, and their adoption tried,
1217 Grapple them to thy soul with hoops of steel;
1218 But do not dull thy palm with entertainment
1219 Of each new-hatch'd, unfledged comrade. Beware
1220 Of entrance to a quarrel, but being in,
1221 Bear't that the opposed may beware of thee.
1222 Give every man thy ear, but few thy voice;
1223 Take each man's censure, but reserve thy judgment.
1224 Costly thy habit as thy purse can buy,
1225 But not express'd in fancy; rich, not gaudy;
1226 For the apparel oft proclaims the man,
1227 And they in France of the best rank and station
1228 Are of a most select and generous chief in that.
1229 Neither a borrower nor a lender be;
1230 For loan oft loses both itself and friend,
1231 And borrowing dulls the edge of husbandry.
1232 This above all: to thine ownself be true,
1233 And it must follow, as the night the day,
1234 Thou canst not then be false to any man.
1235 Farewell: my blessing season this in thee!
1236
1237LAERTES
1238
1239 Most humbly do I take my leave, my lord.
1240
1241LORD POLONIUS
1242
1243 The time invites you; go; your servants tend.
1244
1245LAERTES
1246
1247 Farewell, Ophelia; and remember well
1248 What I have said to you.
1249
1250OPHELIA
1251
1252 'Tis in my memory lock'd,
1253 And you yourself shall keep the key of it.
1254
1255LAERTES
1256
1257 Farewell.
1258"""
1259
Nadeem Vawda9c72ebc2013-12-04 23:03:49 +01001260COMPRESSED_BOGUS = b"this is not a valid lzma stream"
1261
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001262COMPRESSED_XZ = (
1263 b"\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x16\x00\x00\x00t/\xe5\xa3"
1264 b"\xe0\x07\x80\x03\xdf]\x00\x05\x14\x07bX\x19\xcd\xddn\x98\x15\xe4\xb4\x9d"
1265 b"o\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8\xe2\xfc\xe7\xd9\xfe6\xb8("
1266 b"\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02\x17/\xa6=\xf0\xa2\xdf/M\x89"
1267 b"\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ\x15\x80\x8c\xf8\x8do\xfa\x12"
1268 b"\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t\xca6 BF$\xe5Q\xa4\x98\xee\xde"
1269 b"l\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81\xe4N\xc8\x86\x153\xf5x2\xa2O"
1270 b"\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z\xc4\xcdS\xb6t<\x16\xf2\x9cI#"
1271 b"\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0\xaa\x96-Pe\xade:\x04\t\x1b\xf7"
1272 b"\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b"
1273 b"\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa"
1274 b"\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8\x84b\xf6\xc3\xd4c-H\x93oJl\xd0iQ\xe4k"
1275 b"\x84\x0b\xc1\xb7\xbc\xb1\x17\x88\xb1\xca?@\xf6\x07\xea\xe6x\xf1H12P\x0f"
1276 b"\x8a\xc9\xeauw\xe3\xbe\xaai\xa9W\xd0\x80\xcd#cb5\x99\xd8]\xa9d\x0c\xbd"
1277 b"\xa2\xdcWl\xedUG\xbf\x89yF\xf77\x81v\xbd5\x98\xbeh8\x18W\x08\xf0\x1b\x99"
1278 b"5:\x1a?rD\x96\xa1\x04\x0f\xae\xba\x85\xeb\x9d5@\xf5\x83\xd37\x83\x8ac"
1279 b"\x06\xd4\x97i\xcdt\x16S\x82k\xf6K\x01vy\x88\x91\x9b6T\xdae\r\xfd]:k\xbal"
1280 b"\xa9\xbba\xc34\xf9r\xeb}r\xdb\xc7\xdb*\x8f\x03z\xdc8h\xcc\xc9\xd3\xbcl"
1281 b"\xa5-\xcb\xeaK\xa2\xc5\x15\xc0\xe3\xc1\x86Z\xfb\xebL\xe13\xcf\x9c\xe3"
1282 b"\x1d\xc9\xed\xc2\x06\xcc\xce!\x92\xe5\xfe\x9c^\xa59w \x9bP\xa3PK\x08d"
1283 b"\xf9\xe2Z}\xa7\xbf\xed\xeb%$\x0c\x82\xb8/\xb0\x01\xa9&,\xf7qh{Q\x96)\xf2"
1284 b"q\x96\xc3\x80\xb4\x12\xb0\xba\xe6o\xf4!\xb4[\xd4\x8aw\x10\xf7t\x0c\xb3"
1285 b"\xd9\xd5\xc3`^\x81\x11??\\\xa4\x99\x85R\xd4\x8e\x83\xc9\x1eX\xbfa\xf1"
1286 b"\xac\xb0\xea\xea\xd7\xd0\xab\x18\xe2\xf2\xed\xe1\xb7\xc9\x18\xcbS\xe4>"
1287 b"\xc9\x95H\xe8\xcb\t\r%\xeb\xc7$.o\xf1\xf3R\x17\x1db\xbb\xd8U\xa5^\xccS"
1288 b"\x16\x01\x87\xf3/\x93\xd1\xf0v\xc0r\xd7\xcc\xa2Gkz\xca\x80\x0e\xfd\xd0"
1289 b"\x8b\xbb\xd2Ix\xb3\x1ey\xca-0\xe3z^\xd6\xd6\x8f_\xf1\x9dP\x9fi\xa7\xd1"
1290 b"\xe8\x90\x84\xdc\xbf\xcdky\x8e\xdc\x81\x7f\xa3\xb2+\xbf\x04\xef\xd8\\"
1291 b"\xc4\xdf\xe1\xb0\x01\xe9\x93\xe3Y\xf1\x1dY\xe8h\x81\xcf\xf1w\xcc\xb4\xef"
1292 b" \x8b|\x04\xea\x83ej\xbe\x1f\xd4z\x9c`\xd3\x1a\x92A\x06\xe5\x8f\xa9\x13"
1293 b"\t\x9e=\xfa\x1c\xe5_\x9f%v\x1bo\x11ZO\xd8\xf4\t\xddM\x16-\x04\xfc\x18<\""
1294 b"CM\xddg~b\xf6\xef\x8e\x0c\xd0\xde|\xa0'\x8a\x0c\xd6x\xae!J\xa6F\x88\x15u"
1295 b"\x008\x17\xbc7y\xb3\xd8u\xac_\x85\x8d\xe7\xc1@\x9c\xecqc\xa3#\xad\xf1"
1296 b"\x935\xb5)_\r\xec3]\x0fo]5\xd0my\x07\x9b\xee\x81\xb5\x0f\xcfK+\x00\xc0"
1297 b"\xe4b\x10\xe4\x0c\x1a \x9b\xe0\x97t\xf6\xa1\x9e\x850\xba\x0c\x9a\x8d\xc8"
1298 b"\x8f\x07\xd7\xae\xc8\xf9+i\xdc\xb9k\xb0>f\x19\xb8\r\xa8\xf8\x1f$\xa5{p"
1299 b"\xc6\x880\xce\xdb\xcf\xca_\x86\xac\x88h6\x8bZ%'\xd0\n\xbf\x0f\x9c\"\xba"
1300 b"\xe5\x86\x9f\x0f7X=mNX[\xcc\x19FU\xc9\x860\xbc\x90a+* \xae_$\x03\x1e\xd3"
1301 b"\xcd_\xa0\x9c\xde\xaf46q\xa5\xc9\x92\xd7\xca\xe3`\x9d\x85}\xb4\xff\xb3"
1302 b"\x83\xfb\xb6\xca\xae`\x0bw\x7f\xfc\xd8\xacVe\x19\xc8\x17\x0bZ\xad\x88"
1303 b"\xeb#\x97\x03\x13\xb1d\x0f{\x0c\x04w\x07\r\x97\xbd\xd6\xc1\xc3B:\x95\x08"
1304 b"^\x10V\xaeaH\x02\xd9\xe3\n\\\x01X\xf6\x9c\x8a\x06u#%\xbe*\xa1\x18v\x85"
1305 b"\xec!\t4\x00\x00\x00\x00Vj?uLU\xf3\xa6\x00\x01\xfb\x07\x81\x0f\x00\x00tw"
1306 b"\x99P\xb1\xc4g\xfb\x02\x00\x00\x00\x00\x04YZ"
1307)
1308
1309COMPRESSED_ALONE = (
1310 b"]\x00\x00\x80\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x05\x14\x07bX\x19"
1311 b"\xcd\xddn\x98\x15\xe4\xb4\x9do\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8"
1312 b"\xe2\xfc\xe7\xd9\xfe6\xb8(\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02"
1313 b"\x17/\xa6=\xf0\xa2\xdf/M\x89\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ"
1314 b"\x15\x80\x8c\xf8\x8do\xfa\x12\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t"
1315 b"\xca6 BF$\xe5Q\xa4\x98\xee\xdel\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81"
1316 b"\xe4N\xc8\x86\x153\xf5x2\xa2O\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z"
1317 b"\xc4\xcdS\xb6t<\x16\xf2\x9cI#\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0"
1318 b"\xaa\x96-Pe\xade:\x04\t\x1b\xf7\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9"
1319 b"\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7"
1320 b"\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8"
1321 b"\x84b\xf8\x1epl\xeajr\xd1=\t\x03\xdd\x13\x1b3!E\xf9vV\xdaF\xf3\xd7\xb4"
1322 b"\x0c\xa9P~\xec\xdeE\xe37\xf6\x1d\xc6\xbb\xddc%\xb6\x0fI\x07\xf0;\xaf\xe7"
1323 b"\xa0\x8b\xa7Z\x99(\xe9\xe2\xf0o\x18>`\xe1\xaa\xa8\xd9\xa1\xb2}\xe7\x8d"
1324 b"\x834T\xb6\xef\xc1\xde\xe3\x98\xbcD\x03MA@\xd8\xed\xdc\xc8\x93\x03\x1a"
1325 b"\x93\x0b\x7f\x94\x12\x0b\x02Sa\x18\xc9\xc5\x9bTJE}\xf6\xc8g\x17#ZV\x01"
1326 b"\xc9\x9dc\x83\x0e>0\x16\x90S\xb8/\x03y_\x18\xfa(\xd7\x0br\xa2\xb0\xba?"
1327 b"\x8c\xe6\x83@\x84\xdf\x02:\xc5z\x9e\xa6\x84\xc9\xf5BeyX\x83\x1a\xf1 :\t"
1328 b"\xf7\x19\xfexD\\&G\xf3\x85Y\xa2J\xf9\x0bv{\x89\xf6\xe7)A\xaf\x04o\x00"
1329 b"\x075\xd3\xe0\x7f\x97\x98F\x0f?v\x93\xedVtTf\xb5\x97\x83\xed\x19\xd7\x1a"
1330 b"'k\xd7\xd9\xc5\\Y\xd1\xdc\x07\x15|w\xbc\xacd\x87\x08d\xec\xa7\xf6\x82"
1331 b"\xfc\xb3\x93\xeb\xb9 \x8d\xbc ,\xb3X\xb0\xd2s\xd7\xd1\xffv\x05\xdf}\xa2"
1332 b"\x96\xfb%\n\xdf\xa2\x7f\x08.\xa16\n\xe0\x19\x93\x7fh\n\x1c\x8c\x0f \x11"
1333 b"\xc6Bl\x95\x19U}\xe4s\xb5\x10H\xea\x86pB\xe88\x95\xbe\x8cZ\xdb\xe4\x94A"
1334 b"\x92\xb9;z\xaa\xa7{\x1c5!\xc0\xaf\xc1A\xf9\xda\xf0$\xb0\x02qg\xc8\xc7/|"
1335 b"\xafr\x99^\x91\x88\xbf\x03\xd9=\xd7n\xda6{>8\n\xc7:\xa9'\xba.\x0b\xe2"
1336 b"\xb5\x1d\x0e\n\x9a\x8e\x06\x8f:\xdd\x82'[\xc3\"wD$\xa7w\xecq\x8c,1\x93"
1337 b"\xd0,\xae2w\x93\x12$Jd\x19mg\x02\x93\x9cA\x95\x9d&\xca8i\x9c\xb0;\xe7NQ"
1338 b"\x1frh\x8beL;\xb0m\xee\x07Q\x9b\xc6\xd8\x03\xb5\xdeN\xd4\xfe\x98\xd0\xdc"
1339 b"\x1a[\x04\xde\x1a\xf6\x91j\xf8EOli\x8eB^\x1d\x82\x07\xb2\xb5R]\xb7\xd7"
1340 b"\xe9\xa6\xc3.\xfb\xf0-\xb4e\x9b\xde\x03\x88\xc6\xc1iN\x0e\x84wbQ\xdf~"
1341 b"\xe9\xa4\x884\x96kM\xbc)T\xf3\x89\x97\x0f\x143\xe7)\xa0\xb3B\x00\xa8\xaf"
1342 b"\x82^\xcb\xc7..\xdb\xc7\t\x9dH\xee5\xe9#\xe6NV\x94\xcb$Kk\xe3\x7f\r\xe3t"
1343 b"\x12\xcf'\xefR\x8b\xf42\xcf-LH\xac\xe5\x1f0~?SO\xeb\xc1E\x1a\x1c]\xf2"
1344 b"\xc4<\x11\x02\x10Z0a*?\xe4r\xff\xfb\xff\xf6\x14nG\xead^\xd6\xef8\xb6uEI"
1345 b"\x99\nV\xe2\xb3\x95\x8e\x83\xf6i!\xb5&1F\xb1DP\xf4 SO3D!w\x99_G\x7f+\x90"
1346 b".\xab\xbb]\x91>\xc9#h;\x0f5J\x91K\xf4^-[\x9e\x8a\\\x94\xca\xaf\xf6\x19"
1347 b"\xd4\xa1\x9b\xc4\xb8p\xa1\xae\x15\xe9r\x84\xe0\xcar.l []\x8b\xaf+0\xf2g"
1348 b"\x01aKY\xdfI\xcf,\n\xe8\xf0\xe7V\x80_#\xb2\xf2\xa9\x06\x8c>w\xe2W,\xf4"
1349 b"\x8c\r\xf963\xf5J\xcc2\x05=kT\xeaUti\xe5_\xce\x1b\xfa\x8dl\x02h\xef\xa8"
1350 b"\xfbf\x7f\xff\xf0\x19\xeax"
1351)
1352
1353FILTERS_RAW_1 = [{"id": lzma.FILTER_LZMA2, "preset": 3}]
1354COMPRESSED_RAW_1 = (
1355 b"\xe0\x07\x80\x03\xfd]\x00\x05\x14\x07bX\x19\xcd\xddn\x96cyq\xa1\xdd\xee"
1356 b"\xf8\xfam\xe3'\x88\xd3\xff\xe4\x9e \xceQ\x91\xa4\x14I\xf6\xb9\x9dVL8\x15"
1357 b"_\x0e\x12\xc3\xeb\xbc\xa5\xcd\nW\x1d$=R;\x1d\xf8k8\t\xb1{\xd4\xc5+\x9d"
1358 b"\x87c\xe5\xef\x98\xb4\xd7S3\xcd\xcc\xd2\xed\xa4\x0em\xe5\xf4\xdd\xd0b"
1359 b"\xbe4*\xaa\x0b\xc5\x08\x10\x85+\x81.\x17\xaf9\xc9b\xeaZrA\xe20\x7fs\"r"
1360 b"\xdaG\x81\xde\x90cu\xa5\xdb\xa9.A\x08l\xb0<\xf6\x03\xddOi\xd0\xc5\xb4"
1361 b"\xec\xecg4t6\"\xa6\xb8o\xb5?\x18^}\xb6}\x03[:\xeb\x03\xa9\n[\x89l\x19g"
1362 b"\x16\xc82\xed\x0b\xfb\x86n\xa2\x857@\x93\xcd6T\xc3u\xb0\t\xf9\x1b\x918"
1363 b"\xfc[\x1b\x1e4\xb3\x14\x06PCV\xa8\"\xf5\x81x~\xe9\xb5N\x9cK\x9f\xc6\xc3%"
1364 b"\xc8k:{6\xe7\xf7\xbd\x05\x02\xb4\xc4\xc3\xd3\xfd\xc3\xa8\\\xfc@\xb1F_"
1365 b"\xc8\x90\xd9sU\x98\xad8\x05\x07\xde7J\x8bM\xd0\xb3;X\xec\x87\xef\xae\xb3"
1366 b"eO,\xb1z,d\x11y\xeejlB\x02\x1d\xf28\x1f#\x896\xce\x0b\xf0\xf5\xa9PK\x0f"
1367 b"\xb3\x13P\xd8\x88\xd2\xa1\x08\x04C?\xdb\x94_\x9a\"\xe9\xe3e\x1d\xde\x9b"
1368 b"\xa1\xe8>H\x98\x10;\xc5\x03#\xb5\x9d4\x01\xe7\xc5\xba%v\xa49\x97A\xe0\""
1369 b"\x8c\xc22\xe3i\xc1\x9d\xab3\xdf\xbe\xfdDm7\x1b\x9d\xab\xb5\x15o:J\x92"
1370 b"\xdb\x816\x17\xc2O\x99\x1b\x0e\x8d\xf3\tQ\xed\x8e\x95S/\x16M\xb2S\x04"
1371 b"\x0f\xc3J\xc6\xc7\xe4\xcb\xc5\xf4\xe7d\x14\xe4=^B\xfb\xd3E\xd3\x1e\xcd"
1372 b"\x91\xa5\xd0G\x8f.\xf6\xf9\x0bb&\xd9\x9f\xc2\xfdj\xa2\x9e\xc4\\\x0e\x1dC"
1373 b"v\xe8\xd2\x8a?^H\xec\xae\xeb>\xfe\xb8\xab\xd4IqY\x8c\xd4K7\x11\xf4D\xd0W"
1374 b"\xa5\xbe\xeaO\xbf\xd0\x04\xfdl\x10\xae5\xd4U\x19\x06\xf9{\xaa\xe0\x81"
1375 b"\x0f\xcf\xa3k{\x95\xbd\x19\xa2\xf8\xe4\xa3\x08O*\xf1\xf1B-\xc7(\x0eR\xfd"
1376 b"@E\x9f\xd3\x1e:\xfdV\xb7\x04Y\x94\xeb]\x83\xc4\xa5\xd7\xc0gX\x98\xcf\x0f"
1377 b"\xcd3\x00]n\x17\xec\xbd\xa3Y\x86\xc5\xf3u\xf6*\xbdT\xedA$A\xd9A\xe7\x98"
1378 b"\xef\x14\x02\x9a\xfdiw\xec\xa0\x87\x11\xd9%\xc5\xeb\x8a=\xae\xc0\xc4\xc6"
1379 b"D\x80\x8f\xa8\xd1\xbbq\xb2\xc0\xa0\xf5Cqp\xeeL\xe3\xe5\xdc \x84\"\xe9"
1380 b"\x80t\x83\x05\xba\xf1\xc5~\x93\xc9\xf0\x01c\xceix\x9d\xed\xc5)l\x16)\xd1"
1381 b"\x03@l\x04\x7f\x87\xa5yn\x1b\x01D\xaa:\xd2\x96\xb4\xb3?\xb0\xf9\xce\x07"
1382 b"\xeb\x81\x00\xe4\xc3\xf5%_\xae\xd4\xf9\xeb\xe2\rh\xb2#\xd67Q\x16D\x82hn"
1383 b"\xd1\xa3_?q\xf0\xe2\xac\xf317\x9e\xd0_\x83|\xf1\xca\xb7\x95S\xabW\x12"
1384 b"\xff\xddt\xf69L\x01\xf2|\xdaW\xda\xees\x98L\x18\xb8_\xe8$\x82\xea\xd6"
1385 b"\xd1F\xd4\x0b\xcdk\x01vf\x88h\xc3\xae\xb91\xc7Q\x9f\xa5G\xd9\xcc\x1f\xe3"
1386 b"5\xb1\xdcy\x7fI\x8bcw\x8e\x10rIp\x02:\x19p_\xc8v\xcea\"\xc1\xd9\x91\x03"
1387 b"\xbfe\xbe\xa6\xb3\xa8\x14\x18\xc3\xabH*m}\xc2\xc1\x9a}>l%\xce\x84\x99"
1388 b"\xb3d\xaf\xd3\x82\x15\xdf\xc1\xfc5fOg\x9b\xfc\x8e^&\t@\xce\x9f\x06J\xb8"
1389 b"\xb5\x86\x1d\xda{\x9f\xae\xb0\xff\x02\x81r\x92z\x8cM\xb7ho\xc9^\x9c\xb6"
1390 b"\x9c\xae\xd1\xc9\xf4\xdfU7\xd6\\!\xea\x0b\x94k\xb9Ud~\x98\xe7\x86\x8az"
1391 b"\x10;\xe3\x1d\xe5PG\xf8\xa4\x12\x05w\x98^\xc4\xb1\xbb\xfb\xcf\xe0\x7f"
1392 b"\x033Sf\x0c \xb1\xf6@\x94\xe5\xa3\xb2\xa7\x10\x9a\xc0\x14\xc3s\xb5xRD"
1393 b"\xf4`W\xd9\xe5\xd3\xcf\x91\rTZ-X\xbe\xbf\xb5\xe2\xee|\x1a\xbf\xfb\x08"
1394 b"\x91\xe1\xfc\x9a\x18\xa3\x8b\xd6^\x89\xf5[\xef\x87\xd1\x06\x1c7\xd6\xa2"
1395 b"\t\tQ5/@S\xc05\xd2VhAK\x03VC\r\x9b\x93\xd6M\xf1xO\xaaO\xed\xb9<\x0c\xdae"
1396 b"*\xd0\x07Hk6\x9fG+\xa1)\xcd\x9cl\x87\xdb\xe1\xe7\xefK}\x875\xab\xa0\x19u"
1397 b"\xf6*F\xb32\x00\x00\x00"
1398)
1399
1400FILTERS_RAW_2 = [{"id": lzma.FILTER_DELTA, "dist": 2},
1401 {"id": lzma.FILTER_LZMA2,
1402 "preset": lzma.PRESET_DEFAULT | lzma.PRESET_EXTREME}]
1403COMPRESSED_RAW_2 = (
1404 b"\xe0\x07\x80\x05\x91]\x00\x05\x14\x06-\xd4\xa8d?\xef\xbe\xafH\xee\x042"
1405 b"\xcb.\xb5g\x8f\xfb\x14\xab\xa5\x9f\x025z\xa4\xdd\xd8\t[}W\xf8\x0c\x1dmH"
1406 b"\xfa\x05\xfcg\xba\xe5\x01Q\x0b\x83R\xb6A\x885\xc0\xba\xee\n\x1cv~\xde:o"
1407 b"\x06:J\xa7\x11Cc\xea\xf7\xe5*o\xf7\x83\\l\xbdE\x19\x1f\r\xa8\x10\xb42"
1408 b"\x0caU{\xd7\xb8w\xdc\xbe\x1b\xfc8\xb4\xcc\xd38\\\xf6\x13\xf6\xe7\x98\xfa"
1409 b"\xc7[\x17_9\x86%\xa8\xf8\xaa\xb8\x8dfs#\x1e=\xed<\x92\x10\\t\xff\x86\xfb"
1410 b"=\x9e7\x18\x1dft\\\xb5\x01\x95Q\xc5\x19\xb38\xe0\xd4\xaa\x07\xc3\x7f\xd8"
1411 b"\xa2\x00>-\xd3\x8e\xa1#\xfa\x83ArAm\xdbJ~\x93\xa3B\x82\xe0\xc7\xcc(\x08`"
1412 b"WK\xad\x1b\x94kaj\x04 \xde\xfc\xe1\xed\xb0\x82\x91\xefS\x84%\x86\xfbi"
1413 b"\x99X\xf1B\xe7\x90;E\xfde\x98\xda\xca\xd6T\xb4bg\xa4\n\x9aj\xd1\x83\x9e]"
1414 b"\"\x7fM\xb5\x0fr\xd2\\\xa5j~P\x10GH\xbfN*Z\x10.\x81\tpE\x8a\x08\xbe1\xbd"
1415 b"\xcd\xa9\xe1\x8d\x1f\x04\xf9\x0eH\xb9\xae\xd6\xc3\xc1\xa5\xa9\x95P\xdc~"
1416 b"\xff\x01\x930\xa9\x04\xf6\x03\xfe\xb5JK\xc3]\xdd9\xb1\xd3\xd7F\xf5\xd1"
1417 b"\x1e\xa0\x1c_\xed[\x0c\xae\xd4\x8b\x946\xeb\xbf\xbb\xe3$kS{\xb5\x80,f:Sj"
1418 b"\x0f\x08z\x1c\xf5\xe8\xe6\xae\x98\xb0Q~r\x0f\xb0\x05?\xb6\x90\x19\x02&"
1419 b"\xcb\x80\t\xc4\xea\x9c|x\xce\x10\x9c\xc5|\xcbdhh+\x0c'\xc5\x81\xc33\xb5"
1420 b"\x14q\xd6\xc5\xe3`Z#\xdc\x8a\xab\xdd\xea\x08\xc2I\xe7\x02l{\xec\x196\x06"
1421 b"\x91\x8d\xdc\xd5\xb3x\xe1hz%\xd1\xf8\xa5\xdd\x98!\x8c\x1c\xc1\x17RUa\xbb"
1422 b"\x95\x0f\xe4X\xea1\x0c\xf1=R\xbe\xc60\xe3\xa4\x9a\x90bd\x97$]B\x01\xdd"
1423 b"\x1f\xe3h2c\x1e\xa0L`4\xc6x\xa3Z\x8a\r\x14]T^\xd8\x89\x1b\x92\r;\xedY"
1424 b"\x0c\xef\x8d9z\xf3o\xb6)f\xa9]$n\rp\x93\xd0\x10\xa4\x08\xb8\xb2\x8b\xb6"
1425 b"\x8f\x80\xae;\xdcQ\xf1\xfa\x9a\x06\x8e\xa5\x0e\x8cK\x9c @\xaa:UcX\n!\xc6"
1426 b"\x02\x12\xcb\x1b\"=\x16.\x1f\x176\xf2g=\xe1Wn\xe9\xe1\xd4\xf1O\xad\x15"
1427 b"\x86\xe9\xa3T\xaf\xa9\xd7D\xb5\xd1W3pnt\x11\xc7VOj\xb7M\xc4i\xa1\xf1$3"
1428 b"\xbb\xdc\x8af\xb0\xc5Y\r\xd1\xfb\xf2\xe7K\xe6\xc5hwO\xfe\x8c2^&\x07\xd5"
1429 b"\x1fV\x19\xfd\r\x14\xd2i=yZ\xe6o\xaf\xc6\xb6\x92\x9d\xc4\r\xb3\xafw\xac%"
1430 b"\xcfc\x1a\xf1`]\xf2\x1a\x9e\x808\xedm\xedQ\xb2\xfe\xe4h`[q\xae\xe0\x0f"
1431 b"\xba0g\xb6\"N\xc3\xfb\xcfR\x11\xc5\x18)(\xc40\\\xa3\x02\xd9G!\xce\x1b"
1432 b"\xc1\x96x\xb5\xc8z\x1f\x01\xb4\xaf\xde\xc2\xcd\x07\xe7H\xb3y\xa8M\n\\A\t"
1433 b"ar\xddM\x8b\x9a\xea\x84\x9b!\xf1\x8d\xb1\xf1~\x1e\r\xa5H\xba\xf1\x84o"
1434 b"\xda\x87\x01h\xe9\xa2\xbe\xbeqN\x9d\x84\x0b!WG\xda\xa1\xa5A\xb7\xc7`j"
1435 b"\x15\xf2\xe9\xdd?\x015B\xd2~E\x06\x11\xe0\x91!\x05^\x80\xdd\xa8y\x15}"
1436 b"\xa1)\xb1)\x81\x18\xf4\xf4\xf8\xc0\xefD\xe3\xdb2f\x1e\x12\xabu\xc9\x97"
1437 b"\xcd\x1e\xa7\x0c\x02x4_6\x03\xc4$t\xf39\x94\x1d=\xcb\xbfv\\\xf5\xa3\x1d"
1438 b"\x9d8jk\x95\x13)ff\xf9n\xc4\xa9\xe3\x01\xb8\xda\xfb\xab\xdfM\x99\xfb\x05"
1439 b"\xe0\xe9\xb0I\xf4E\xab\xe2\x15\xa3\x035\xe7\xdeT\xee\x82p\xb4\x88\xd3"
1440 b"\x893\x9c/\xc0\xd6\x8fou;\xf6\x95PR\xa9\xb2\xc1\xefFj\xe2\xa7$\xf7h\xf1"
1441 b"\xdfK(\xc9c\xba7\xe8\xe3)\xdd\xb2,\x83\xfb\x84\x18.y\x18Qi\x88\xf8`h-"
1442 b"\xef\xd5\xed\x8c\t\xd8\xc3^\x0f\x00\xb7\xd0[!\xafM\x9b\xd7.\x07\xd8\xfb"
1443 b"\xd9\xe2-S+\xaa8,\xa0\x03\x1b \xea\xa8\x00\xc3\xab~\xd0$e\xa5\x7f\xf7"
1444 b"\x95P]\x12\x19i\xd9\x7fo\x0c\xd8g^\rE\xa5\x80\x18\xc5\x01\x80\xaek`\xff~"
1445 b"\xb6y\xe7+\xe5\x11^D\xa7\x85\x18\"!\xd6\xd2\xa7\xf4\x1eT\xdb\x02\xe15"
1446 b"\x02Y\xbc\x174Z\xe7\x9cH\x1c\xbf\x0f\xc6\xe9f]\xcf\x8cx\xbc\xe5\x15\x94"
1447 b"\xfc3\xbc\xa7TUH\xf1\x84\x1b\xf7\xa9y\xc07\x84\xf8X\xd8\xef\xfc \x1c\xd8"
1448 b"( /\xf2\xb7\xec\xc1\\\x8c\xf6\x95\xa1\x03J\x83vP8\xe1\xe3\xbb~\xc24kA"
1449 b"\x98y\xa1\xf2P\xe9\x9d\xc9J\xf8N\x99\xb4\xceaO\xde\x16\x1e\xc2\x19\xa7"
1450 b"\x03\xd2\xe0\x8f:\x15\xf3\x84\x9e\xee\xe6e\xb8\x02q\xc7AC\x1emw\xfd\t"
1451 b"\x9a\x1eu\xc1\xa9\xcaCwUP\x00\xa5\xf78L4w!\x91L2 \x87\xd0\xf2\x06\x81j"
1452 b"\x80;\x03V\x06\x87\x92\xcb\x90lv@E\x8d\x8d\xa5\xa6\xe7Z[\xdf\xd6E\x03`>"
1453 b"\x8f\xde\xa1bZ\x84\xd0\xa9`\x05\x0e{\x80;\xe3\xbef\x8d\x1d\xebk1.\xe3"
1454 b"\xe9N\x15\xf7\xd4(\xfa\xbb\x15\xbdu\xf7\x7f\x86\xae!\x03L\x1d\xb5\xc1"
1455 b"\xb9\x11\xdb\xd0\x93\xe4\x02\xe1\xd2\xcbBjc_\xe8}d\xdb\xc3\xa0Y\xbe\xc9/"
1456 b"\x95\x01\xa3,\xe6bl@\x01\xdbp\xc2\xce\x14\x168\xc2q\xe3uH\x89X\xa4\xa9"
1457 b"\x19\x1d\xc1}\x7fOX\x19\x9f\xdd\xbe\x85\x83\xff\x96\x1ee\x82O`CF=K\xeb$I"
1458 b"\x17_\xefX\x8bJ'v\xde\x1f+\xd9.v\xf8Tv\x17\xf2\x9f5\x19\xe1\xb9\x91\xa8S"
1459 b"\x86\xbd\x1a\"(\xa5x\x8dC\x03X\x81\x91\xa8\x11\xc4pS\x13\xbc\xf2'J\xae!"
1460 b"\xef\xef\x84G\t\x8d\xc4\x10\x132\x00oS\x9e\xe0\xe4d\x8f\xb8y\xac\xa6\x9f"
1461 b",\xb8f\x87\r\xdf\x9eE\x0f\xe1\xd0\\L\x00\xb2\xe1h\x84\xef}\x98\xa8\x11"
1462 b"\xccW#\\\x83\x7fo\xbbz\x8f\x00"
1463)
1464
1465FILTERS_RAW_3 = [{"id": lzma.FILTER_IA64, "start_offset": 0x100},
1466 {"id": lzma.FILTER_LZMA2}]
1467COMPRESSED_RAW_3 = (
1468 b"\xe0\x07\x80\x03\xdf]\x00\x05\x14\x07bX\x19\xcd\xddn\x98\x15\xe4\xb4\x9d"
1469 b"o\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8\xe2\xfc\xe7\xd9\xfe6\xb8("
1470 b"\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02\x17/\xa6=\xf0\xa2\xdf/M\x89"
1471 b"\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ\x15\x80\x8c\xf8\x8do\xfa\x12"
1472 b"\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t\xca6 BF$\xe5Q\xa4\x98\xee\xde"
1473 b"l\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81\xe4N\xc8\x86\x153\xf5x2\xa2O"
1474 b"\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z\xc4\xcdS\xb6t<\x16\xf2\x9cI#"
1475 b"\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0\xaa\x96-Pe\xade:\x04\t\x1b\xf7"
1476 b"\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b"
1477 b"\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa"
1478 b"\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8\x84b\xf6\xc3\xd4c-H\x93oJl\xd0iQ\xe4k"
1479 b"\x84\x0b\xc1\xb7\xbc\xb1\x17\x88\xb1\xca?@\xf6\x07\xea\xe6x\xf1H12P\x0f"
1480 b"\x8a\xc9\xeauw\xe3\xbe\xaai\xa9W\xd0\x80\xcd#cb5\x99\xd8]\xa9d\x0c\xbd"
1481 b"\xa2\xdcWl\xedUG\xbf\x89yF\xf77\x81v\xbd5\x98\xbeh8\x18W\x08\xf0\x1b\x99"
1482 b"5:\x1a?rD\x96\xa1\x04\x0f\xae\xba\x85\xeb\x9d5@\xf5\x83\xd37\x83\x8ac"
1483 b"\x06\xd4\x97i\xcdt\x16S\x82k\xf6K\x01vy\x88\x91\x9b6T\xdae\r\xfd]:k\xbal"
1484 b"\xa9\xbba\xc34\xf9r\xeb}r\xdb\xc7\xdb*\x8f\x03z\xdc8h\xcc\xc9\xd3\xbcl"
1485 b"\xa5-\xcb\xeaK\xa2\xc5\x15\xc0\xe3\xc1\x86Z\xfb\xebL\xe13\xcf\x9c\xe3"
1486 b"\x1d\xc9\xed\xc2\x06\xcc\xce!\x92\xe5\xfe\x9c^\xa59w \x9bP\xa3PK\x08d"
1487 b"\xf9\xe2Z}\xa7\xbf\xed\xeb%$\x0c\x82\xb8/\xb0\x01\xa9&,\xf7qh{Q\x96)\xf2"
1488 b"q\x96\xc3\x80\xb4\x12\xb0\xba\xe6o\xf4!\xb4[\xd4\x8aw\x10\xf7t\x0c\xb3"
1489 b"\xd9\xd5\xc3`^\x81\x11??\\\xa4\x99\x85R\xd4\x8e\x83\xc9\x1eX\xbfa\xf1"
1490 b"\xac\xb0\xea\xea\xd7\xd0\xab\x18\xe2\xf2\xed\xe1\xb7\xc9\x18\xcbS\xe4>"
1491 b"\xc9\x95H\xe8\xcb\t\r%\xeb\xc7$.o\xf1\xf3R\x17\x1db\xbb\xd8U\xa5^\xccS"
1492 b"\x16\x01\x87\xf3/\x93\xd1\xf0v\xc0r\xd7\xcc\xa2Gkz\xca\x80\x0e\xfd\xd0"
1493 b"\x8b\xbb\xd2Ix\xb3\x1ey\xca-0\xe3z^\xd6\xd6\x8f_\xf1\x9dP\x9fi\xa7\xd1"
1494 b"\xe8\x90\x84\xdc\xbf\xcdky\x8e\xdc\x81\x7f\xa3\xb2+\xbf\x04\xef\xd8\\"
1495 b"\xc4\xdf\xe1\xb0\x01\xe9\x93\xe3Y\xf1\x1dY\xe8h\x81\xcf\xf1w\xcc\xb4\xef"
1496 b" \x8b|\x04\xea\x83ej\xbe\x1f\xd4z\x9c`\xd3\x1a\x92A\x06\xe5\x8f\xa9\x13"
1497 b"\t\x9e=\xfa\x1c\xe5_\x9f%v\x1bo\x11ZO\xd8\xf4\t\xddM\x16-\x04\xfc\x18<\""
1498 b"CM\xddg~b\xf6\xef\x8e\x0c\xd0\xde|\xa0'\x8a\x0c\xd6x\xae!J\xa6F\x88\x15u"
1499 b"\x008\x17\xbc7y\xb3\xd8u\xac_\x85\x8d\xe7\xc1@\x9c\xecqc\xa3#\xad\xf1"
1500 b"\x935\xb5)_\r\xec3]\x0fo]5\xd0my\x07\x9b\xee\x81\xb5\x0f\xcfK+\x00\xc0"
1501 b"\xe4b\x10\xe4\x0c\x1a \x9b\xe0\x97t\xf6\xa1\x9e\x850\xba\x0c\x9a\x8d\xc8"
1502 b"\x8f\x07\xd7\xae\xc8\xf9+i\xdc\xb9k\xb0>f\x19\xb8\r\xa8\xf8\x1f$\xa5{p"
1503 b"\xc6\x880\xce\xdb\xcf\xca_\x86\xac\x88h6\x8bZ%'\xd0\n\xbf\x0f\x9c\"\xba"
1504 b"\xe5\x86\x9f\x0f7X=mNX[\xcc\x19FU\xc9\x860\xbc\x90a+* \xae_$\x03\x1e\xd3"
1505 b"\xcd_\xa0\x9c\xde\xaf46q\xa5\xc9\x92\xd7\xca\xe3`\x9d\x85}\xb4\xff\xb3"
1506 b"\x83\xfb\xb6\xca\xae`\x0bw\x7f\xfc\xd8\xacVe\x19\xc8\x17\x0bZ\xad\x88"
1507 b"\xeb#\x97\x03\x13\xb1d\x0f{\x0c\x04w\x07\r\x97\xbd\xd6\xc1\xc3B:\x95\x08"
1508 b"^\x10V\xaeaH\x02\xd9\xe3\n\\\x01X\xf6\x9c\x8a\x06u#%\xbe*\xa1\x18v\x85"
1509 b"\xec!\t4\x00\x00\x00"
1510)
1511
1512FILTERS_RAW_4 = [{"id": lzma.FILTER_DELTA, "dist": 4},
1513 {"id": lzma.FILTER_X86, "start_offset": 0x40},
1514 {"id": lzma.FILTER_LZMA2, "preset": 4, "lc": 2}]
1515COMPRESSED_RAW_4 = (
1516 b"\xe0\x07\x80\x06\x0e\\\x00\x05\x14\x07bW\xaah\xdd\x10\xdc'\xd6\x90,\xc6v"
1517 b"Jq \x14l\xb7\x83xB\x0b\x97f=&fx\xba\n>Tn\xbf\x8f\xfb\x1dF\xca\xc3v_\xca?"
1518 b"\xfbV<\x92#\xd4w\xa6\x8a\xeb\xf6\x03\xc0\x01\x94\xd8\x9e\x13\x12\x98\xd1"
1519 b"*\xfa]c\xe8\x1e~\xaf\xb5]Eg\xfb\x9e\x01\"8\xb2\x90\x06=~\xe9\x91W\xcd"
1520 b"\xecD\x12\xc7\xfa\xe1\x91\x06\xc7\x99\xb9\xe3\x901\x87\x19u\x0f\x869\xff"
1521 b"\xc1\xb0hw|\xb0\xdcl\xcck\xb16o7\x85\xee{Y_b\xbf\xbc$\xf3=\x8d\x8bw\xe5Z"
1522 b"\x08@\xc4kmE\xad\xfb\xf6*\xd8\xad\xa1\xfb\xc5{\xdej,)\x1emB\x1f<\xaeca"
1523 b"\x80(\xee\x07 \xdf\xe9\xf8\xeb\x0e-\x97\x86\x90c\xf9\xea'B\xf7`\xd7\xb0"
1524 b"\x92\xbd\xa0\x82]\xbd\x0e\x0eB\x19\xdc\x96\xc6\x19\xd86D\xf0\xd5\x831"
1525 b"\x03\xb7\x1c\xf7&5\x1a\x8f PZ&j\xf8\x98\x1bo\xcc\x86\x9bS\xd3\xa5\xcdu"
1526 b"\xf9$\xcc\x97o\xe5V~\xfb\x97\xb5\x0b\x17\x9c\xfdxW\x10\xfep4\x80\xdaHDY"
1527 b"\xfa)\xfet\xb5\"\xd4\xd3F\x81\xf4\x13\x1f\xec\xdf\xa5\x13\xfc\"\x91x\xb7"
1528 b"\x99\xce\xc8\x92\n\xeb[\x10l*Y\xd8\xb1@\x06\xc8o\x8d7r\xebu\xfd5\x0e\x7f"
1529 b"\xf1$U{\t}\x1fQ\xcfxN\x9d\x9fXX\xe9`\x83\xc1\x06\xf4\x87v-f\x11\xdb/\\"
1530 b"\x06\xff\xd7)B\xf3g\x06\x88#2\x1eB244\x7f4q\t\xc893?mPX\x95\xa6a\xfb)d"
1531 b"\x9b\xfc\x98\x9aj\x04\xae\x9b\x9d\x19w\xba\xf92\xfaA\x11\\\x17\x97C3\xa4"
1532 b"\xbc!\x88\xcdo[\xec:\x030\x91.\x85\xe0@\\4\x16\x12\x9d\xcaJv\x97\xb04"
1533 b"\xack\xcbkf\xa3ss\xfc\x16^\x8ce\x85a\xa5=&\xecr\xb3p\xd1E\xd5\x80y\xc7"
1534 b"\xda\xf6\xfek\xbcT\xbfH\xee\x15o\xc5\x8c\x830\xec\x1d\x01\xae\x0c-e\\"
1535 b"\x91\x90\x94\xb2\xf8\x88\x91\xe8\x0b\xae\xa7>\x98\xf6\x9ck\xd2\xc6\x08"
1536 b"\xe6\xab\t\x98\xf2!\xa0\x8c^\xacqA\x99<\x1cEG\x97\xc8\xf1\xb6\xb9\x82"
1537 b"\x8d\xf7\x08s\x98a\xff\xe3\xcc\x92\x0e\xd2\xb6U\xd7\xd9\x86\x7fa\xe5\x1c"
1538 b"\x8dTG@\t\x1e\x0e7*\xfc\xde\xbc]6N\xf7\xf1\x84\x9e\x9f\xcf\xe9\x1e\xb5'"
1539 b"\xf4<\xdf\x99sq\xd0\x9d\xbd\x99\x0b\xb4%p4\xbf{\xbb\x8a\xd2\x0b\xbc=M"
1540 b"\x94H:\xf5\xa8\xd6\xa4\xc90\xc2D\xb9\xd3\xa8\xb0S\x87 `\xa2\xeb\xf3W\xce"
1541 b" 7\xf9N#\r\xe6\xbe\t\x9d\xe7\x811\xf9\x10\xc1\xc2\x14\xf6\xfc\xcba\xb7"
1542 b"\xb1\x7f\x95l\xe4\tjA\xec:\x10\xe5\xfe\xc2\\=D\xe2\x0c\x0b3]\xf7\xc1\xf7"
1543 b"\xbceZ\xb1A\xea\x16\xe5\xfddgFQ\xed\xaf\x04\xa3\xd3\xf8\xa2q\x19B\xd4r"
1544 b"\xc5\x0c\x9a\x14\x94\xea\x91\xc4o\xe4\xbb\xb4\x99\xf4@\xd1\xe6\x0c\xe3"
1545 b"\xc6d\xa0Q\n\xf2/\xd8\xb8S5\x8a\x18:\xb5g\xac\x95D\xce\x17\x07\xd4z\xda"
1546 b"\x90\xe65\x07\x19H!\t\xfdu\x16\x8e\x0eR\x19\xf4\x8cl\x0c\xf9Q\xf1\x80"
1547 b"\xe3\xbf\xd7O\xf8\x8c\x18\x0b\x9c\xf1\x1fb\xe1\tR\xb2\xf1\xe1A\xea \xcf-"
1548 b"IGE\xf1\x14\x98$\x83\x15\xc9\xd8j\xbf\x19\x0f\xd5\xd1\xaa\xb3\xf3\xa5I2s"
1549 b"\x8d\x145\xca\xd5\xd93\x9c\xb8D0\xe6\xaa%\xd0\xc0P}JO^h\x8e\x08\xadlV."
1550 b"\x18\x88\x13\x05o\xb0\x07\xeaw\xe0\xb6\xa4\xd5*\xe4r\xef\x07G+\xc1\xbei["
1551 b"w\xe8\xab@_\xef\x15y\xe5\x12\xc9W\x1b.\xad\x85-\xc2\xf7\xe3mU6g\x8eSA"
1552 b"\x01(\xd3\xdb\x16\x13=\xde\x92\xf9,D\xb8\x8a\xb2\xb4\xc9\xc3\xefnE\xe8\\"
1553 b"\xa6\xe2Y\xd2\xcf\xcb\x8c\xb6\xd5\xe9\x1d\x1e\x9a\x8b~\xe2\xa6\rE\x84uV"
1554 b"\xed\xc6\x99\xddm<\x10[\x0fu\x1f\xc1\x1d1\n\xcfw\xb2%!\xf0[\xce\x87\x83B"
1555 b"\x08\xaa,\x08%d\xcef\x94\"\xd9g.\xc83\xcbXY+4\xec\x85qA\n\x1d=9\xf0*\xb1"
1556 b"\x1f/\xf3s\xd61b\x7f@\xfb\x9d\xe3FQ\\\xbd\x82\x1e\x00\xf3\xce\xd3\xe1"
1557 b"\xca,E\xfd7[\xab\xb6\xb7\xac!mA}\xbd\x9d3R5\x9cF\xabH\xeb\x92)cc\x13\xd0"
1558 b"\xbd\xee\xe9n{\x1dIJB\xa5\xeb\x11\xe8`w&`\x8b}@Oxe\t\x8a\x07\x02\x95\xf2"
1559 b"\xed\xda|\xb1e\xbe\xaa\xbbg\x19@\xe1Y\x878\x84\x0f\x8c\xe3\xc98\xf2\x9e"
1560 b"\xd5N\xb5J\xef\xab!\xe2\x8dq\xe1\xe5q\xc5\xee\x11W\xb7\xe4k*\x027\xa0"
1561 b"\xa3J\xf4\xd8m\xd0q\x94\xcb\x07\n:\xb6`.\xe4\x9c\x15+\xc0)\xde\x80X\xd4"
1562 b"\xcfQm\x01\xc2cP\x1cA\x85'\xc9\xac\x8b\xe6\xb2)\xe6\x84t\x1c\x92\xe4Z"
1563 b"\x1cR\xb0\x9e\x96\xd1\xfb\x1c\xa6\x8b\xcb`\x10\x12]\xf2gR\x9bFT\xe0\xc8H"
1564 b"S\xfb\xac<\x04\xc7\xc1\xe8\xedP\xf4\x16\xdb\xc0\xd7e\xc2\x17J^\x1f\xab"
1565 b"\xff[\x08\x19\xb4\xf5\xfb\x19\xb4\x04\xe5c~']\xcb\xc2A\xec\x90\xd0\xed"
1566 b"\x06,\xc5K{\x86\x03\xb1\xcdMx\xdeQ\x8c3\xf9\x8a\xea=\x89\xaba\xd2\xc89a"
1567 b"\xd72\xf0\xc3\x19\x8a\xdfs\xd4\xfd\xbb\x81b\xeaE\"\xd8\xf4d\x0cD\xf7IJ!"
1568 b"\xe5d\xbbG\xe9\xcam\xaa\x0f_r\x95\x91NBq\xcaP\xce\xa7\xa9\xb5\x10\x94eP!"
1569 b"|\x856\xcd\xbfIir\xb8e\x9bjP\x97q\xabwS7\x1a\x0ehM\xe7\xca\x86?\xdeP}y~"
1570 b"\x0f\x95I\xfc\x13\xe1<Q\x1b\x868\x1d\x11\xdf\x94\xf4\x82>r\xa9k\x88\xcb"
1571 b"\xfd\xc3v\xe2\xb9\x8a\x02\x8eq\x92I\xf8\xf6\xf1\x03s\x9b\xb8\xe3\"\xe3"
1572 b"\xa9\xa5>D\xb8\x96;\xe7\x92\xd133\xe8\xdd'e\xc9.\xdc;\x17\x1f\xf5H\x13q"
1573 b"\xa4W\x0c\xdb~\x98\x01\xeb\xdf\xe32\x13\x0f\xddx\n6\xa0\t\x10\xb6\xbb"
1574 b"\xb0\xc3\x18\xb6;\x9fj[\xd9\xd5\xc9\x06\x8a\x87\xcd\xe5\xee\xfc\x9c-%@"
1575 b"\xee\xe0\xeb\xd2\xe3\xe8\xfb\xc0\x122\\\xc7\xaf\xc2\xa1Oth\xb3\x8f\x82"
1576 b"\xb3\x18\xa8\x07\xd5\xee_\xbe\xe0\x1cA\x1e_\r\x9a\xb0\x17W&\xa2D\x91\x94"
1577 b"\x1a\xb2\xef\xf2\xdc\x85;X\xb0,\xeb>-7S\xe5\xca\x07)\x1fp\x7f\xcaQBL\xca"
1578 b"\xf3\xb9d\xfc\xb5su\xb0\xc8\x95\x90\xeb*)\xa0v\xe4\x9a{FW\xf4l\xde\xcdj"
1579 b"\x00"
1580)
1581
1582
1583def test_main():
1584 run_unittest(
1585 CompressorDecompressorTestCase,
1586 CompressDecompressFunctionTestCase,
1587 FileTestCase,
Nadeem Vawdae8604042012-06-04 23:38:12 +02001588 OpenTestCase,
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001589 MiscellaneousTestCase,
1590 )
1591
1592if __name__ == "__main__":
1593 test_main()