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