blob: 26d19da5e95e5659b502bc6497fee7ae6d3c4ba5 [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):
317 lzma.decompress(COMPRESSED_RAW_1)
318 with self.assertRaises(LZMAError):
319 lzma.decompress(COMPRESSED_ALONE, format=lzma.FORMAT_XZ)
320 with self.assertRaises(LZMAError):
321 lzma.decompress(COMPRESSED_XZ, format=lzma.FORMAT_ALONE)
322 with self.assertRaises(LZMAError):
323 lzma.decompress(COMPRESSED_XZ, format=lzma.FORMAT_RAW,
324 filters=FILTERS_RAW_1)
325
326 # Test that compress()->decompress() preserves the input data.
327
328 def test_roundtrip(self):
329 cdata = lzma.compress(INPUT)
330 ddata = lzma.decompress(cdata)
331 self.assertEqual(ddata, INPUT)
332
333 cdata = lzma.compress(INPUT, lzma.FORMAT_XZ)
334 ddata = lzma.decompress(cdata)
335 self.assertEqual(ddata, INPUT)
336
337 cdata = lzma.compress(INPUT, lzma.FORMAT_ALONE)
338 ddata = lzma.decompress(cdata)
339 self.assertEqual(ddata, INPUT)
340
341 cdata = lzma.compress(INPUT, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
342 ddata = lzma.decompress(cdata, lzma.FORMAT_RAW, filters=FILTERS_RAW_4)
343 self.assertEqual(ddata, INPUT)
344
345 # Unlike LZMADecompressor, decompress() *does* handle concatenated streams.
346
347 def test_decompress_multistream(self):
348 ddata = lzma.decompress(COMPRESSED_XZ + COMPRESSED_ALONE)
349 self.assertEqual(ddata, INPUT * 2)
350
351
352class TempFile:
353 """Context manager - creates a file, and deletes it on __exit__."""
354
355 def __init__(self, filename, data=b""):
356 self.filename = filename
357 self.data = data
358
359 def __enter__(self):
360 with open(self.filename, "wb") as f:
361 f.write(self.data)
362
363 def __exit__(self, *args):
364 unlink(self.filename)
365
366
367class FileTestCase(unittest.TestCase):
368
369 def test_init(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200370 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200371 pass
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200372 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200373 pass
Nadeem Vawda42ca9822013-10-19 00:06:19 +0200374 with LZMAFile(BytesIO(), "x") as f:
375 pass
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200376 with LZMAFile(BytesIO(), "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200377 pass
378
379 def test_init_with_filename(self):
380 with TempFile(TESTFN, COMPRESSED_XZ):
381 with LZMAFile(TESTFN) as f:
382 pass
383 with LZMAFile(TESTFN, "w") as f:
384 pass
385 with LZMAFile(TESTFN, "a") as f:
386 pass
387
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200388 def test_init_mode(self):
389 with TempFile(TESTFN):
390 with LZMAFile(TESTFN, "r"):
391 pass
392 with LZMAFile(TESTFN, "rb"):
393 pass
394 with LZMAFile(TESTFN, "w"):
395 pass
396 with LZMAFile(TESTFN, "wb"):
397 pass
398 with LZMAFile(TESTFN, "a"):
399 pass
400 with LZMAFile(TESTFN, "ab"):
401 pass
402
Nadeem Vawda42ca9822013-10-19 00:06:19 +0200403 def test_init_with_x_mode(self):
404 self.addCleanup(unlink, TESTFN)
405 for mode in ("x", "xb"):
406 unlink(TESTFN)
407 with LZMAFile(TESTFN, mode):
408 pass
409 with self.assertRaises(FileExistsError):
410 with LZMAFile(TESTFN, mode):
411 pass
412
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200413 def test_init_bad_mode(self):
414 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200415 LZMAFile(BytesIO(COMPRESSED_XZ), (3, "x"))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200416 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200417 LZMAFile(BytesIO(COMPRESSED_XZ), "")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200418 with self.assertRaises(ValueError):
Nadeem Vawda42ca9822013-10-19 00:06:19 +0200419 LZMAFile(BytesIO(COMPRESSED_XZ), "xt")
420 with self.assertRaises(ValueError):
421 LZMAFile(BytesIO(COMPRESSED_XZ), "x+")
422 with self.assertRaises(ValueError):
423 LZMAFile(BytesIO(COMPRESSED_XZ), "rx")
424 with self.assertRaises(ValueError):
425 LZMAFile(BytesIO(COMPRESSED_XZ), "wx")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200426 with self.assertRaises(ValueError):
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200427 LZMAFile(BytesIO(COMPRESSED_XZ), "rt")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200428 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200429 LZMAFile(BytesIO(COMPRESSED_XZ), "r+")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200430 with self.assertRaises(ValueError):
Nadeem Vawda6cbb20c2012-06-04 23:36:24 +0200431 LZMAFile(BytesIO(COMPRESSED_XZ), "wt")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200432 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200433 LZMAFile(BytesIO(COMPRESSED_XZ), "w+")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200434 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200435 LZMAFile(BytesIO(COMPRESSED_XZ), "rw")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200436
437 def test_init_bad_check(self):
438 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200439 LZMAFile(BytesIO(), "w", check=b"asd")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200440 # CHECK_UNKNOWN and anything above CHECK_ID_MAX should be invalid.
441 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200442 LZMAFile(BytesIO(), "w", check=lzma.CHECK_UNKNOWN)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200443 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200444 LZMAFile(BytesIO(), "w", check=lzma.CHECK_ID_MAX + 3)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200445 # Cannot specify a check with mode="r".
446 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200447 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_NONE)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200448 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200449 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_CRC32)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200450 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200451 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_CRC64)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200452 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200453 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_SHA256)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200454 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200455 LZMAFile(BytesIO(COMPRESSED_XZ), check=lzma.CHECK_UNKNOWN)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200456
457 def test_init_bad_preset(self):
458 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200459 LZMAFile(BytesIO(), "w", preset=4.39)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200460 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200461 LZMAFile(BytesIO(), "w", preset=10)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200462 with self.assertRaises(LZMAError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200463 LZMAFile(BytesIO(), "w", preset=23)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200464 with self.assertRaises(OverflowError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200465 LZMAFile(BytesIO(), "w", preset=-1)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200466 with self.assertRaises(OverflowError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200467 LZMAFile(BytesIO(), "w", preset=-7)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200468 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200469 LZMAFile(BytesIO(), "w", preset="foo")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200470 # Cannot specify a preset with mode="r".
471 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200472 LZMAFile(BytesIO(COMPRESSED_XZ), preset=3)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200473
474 def test_init_bad_filter_spec(self):
475 with self.assertRaises(TypeError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200476 LZMAFile(BytesIO(), "w", filters=[b"wobsite"])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200477 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200478 LZMAFile(BytesIO(), "w", filters=[{"xyzzy": 3}])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200479 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200480 LZMAFile(BytesIO(), "w", filters=[{"id": 98765}])
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200481 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200482 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200483 filters=[{"id": lzma.FILTER_LZMA2, "foo": 0}])
484 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200485 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200486 filters=[{"id": lzma.FILTER_DELTA, "foo": 0}])
487 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200488 LZMAFile(BytesIO(), "w",
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200489 filters=[{"id": lzma.FILTER_X86, "foo": 0}])
490
491 def test_init_with_preset_and_filters(self):
492 with self.assertRaises(ValueError):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200493 LZMAFile(BytesIO(), "w", format=lzma.FORMAT_RAW,
494 preset=6, filters=FILTERS_RAW_1)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200495
496 def test_close(self):
497 with BytesIO(COMPRESSED_XZ) as src:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200498 f = LZMAFile(src)
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200499 f.close()
500 # LZMAFile.close() should not close the underlying file object.
501 self.assertFalse(src.closed)
502 # Try closing an already-closed LZMAFile.
503 f.close()
504 self.assertFalse(src.closed)
505
506 # Test with a real file on disk, opened directly by LZMAFile.
507 with TempFile(TESTFN, COMPRESSED_XZ):
508 f = LZMAFile(TESTFN)
509 fp = f._fp
510 f.close()
511 # Here, LZMAFile.close() *should* close the underlying file object.
512 self.assertTrue(fp.closed)
513 # Try closing an already-closed LZMAFile.
514 f.close()
515
516 def test_closed(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200517 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200518 try:
519 self.assertFalse(f.closed)
520 f.read()
521 self.assertFalse(f.closed)
522 finally:
523 f.close()
524 self.assertTrue(f.closed)
525
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200526 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200527 try:
528 self.assertFalse(f.closed)
529 finally:
530 f.close()
531 self.assertTrue(f.closed)
532
533 def test_fileno(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200534 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200535 try:
536 self.assertRaises(UnsupportedOperation, f.fileno)
537 finally:
538 f.close()
539 self.assertRaises(ValueError, f.fileno)
540 with TempFile(TESTFN, COMPRESSED_XZ):
541 f = LZMAFile(TESTFN)
542 try:
543 self.assertEqual(f.fileno(), f._fp.fileno())
544 self.assertIsInstance(f.fileno(), int)
545 finally:
546 f.close()
547 self.assertRaises(ValueError, f.fileno)
548
549 def test_seekable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200550 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200551 try:
552 self.assertTrue(f.seekable())
553 f.read()
554 self.assertTrue(f.seekable())
555 finally:
556 f.close()
557 self.assertRaises(ValueError, f.seekable)
558
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200559 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200560 try:
561 self.assertFalse(f.seekable())
562 finally:
563 f.close()
564 self.assertRaises(ValueError, f.seekable)
565
Nadeem Vawdaae557d72012-02-12 01:51:38 +0200566 src = BytesIO(COMPRESSED_XZ)
567 src.seekable = lambda: False
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200568 f = LZMAFile(src)
Nadeem Vawdaae557d72012-02-12 01:51:38 +0200569 try:
570 self.assertFalse(f.seekable())
571 finally:
572 f.close()
573 self.assertRaises(ValueError, f.seekable)
574
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200575 def test_readable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200576 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200577 try:
578 self.assertTrue(f.readable())
579 f.read()
580 self.assertTrue(f.readable())
581 finally:
582 f.close()
583 self.assertRaises(ValueError, f.readable)
584
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200585 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200586 try:
587 self.assertFalse(f.readable())
588 finally:
589 f.close()
590 self.assertRaises(ValueError, f.readable)
591
592 def test_writable(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200593 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200594 try:
595 self.assertFalse(f.writable())
596 f.read()
597 self.assertFalse(f.writable())
598 finally:
599 f.close()
600 self.assertRaises(ValueError, f.writable)
601
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200602 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200603 try:
604 self.assertTrue(f.writable())
605 finally:
606 f.close()
607 self.assertRaises(ValueError, f.writable)
608
609 def test_read(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200610 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200611 self.assertEqual(f.read(), INPUT)
612 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200613 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200614 self.assertEqual(f.read(), INPUT)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200615 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200616 self.assertEqual(f.read(), INPUT)
617 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200618 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200619 self.assertEqual(f.read(), INPUT)
620 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200621 with LZMAFile(BytesIO(COMPRESSED_RAW_1),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200622 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_1) as f:
623 self.assertEqual(f.read(), INPUT)
624 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200625 with LZMAFile(BytesIO(COMPRESSED_RAW_2),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200626 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2) as f:
627 self.assertEqual(f.read(), INPUT)
628 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200629 with LZMAFile(BytesIO(COMPRESSED_RAW_3),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200630 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3) as f:
631 self.assertEqual(f.read(), INPUT)
632 self.assertEqual(f.read(), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200633 with LZMAFile(BytesIO(COMPRESSED_RAW_4),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200634 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_4) as f:
635 self.assertEqual(f.read(), INPUT)
636 self.assertEqual(f.read(), b"")
637
638 def test_read_0(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200639 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200640 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200641 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200642 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200643 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200644 self.assertEqual(f.read(0), b"")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200645 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200646 self.assertEqual(f.read(0), b"")
647
648 def test_read_10(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200649 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200650 chunks = []
651 while True:
652 result = f.read(10)
653 if not result:
654 break
655 self.assertLessEqual(len(result), 10)
656 chunks.append(result)
657 self.assertEqual(b"".join(chunks), INPUT)
658
659 def test_read_multistream(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200660 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200661 self.assertEqual(f.read(), INPUT * 5)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200662 with LZMAFile(BytesIO(COMPRESSED_XZ + COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200663 self.assertEqual(f.read(), INPUT * 2)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200664 with LZMAFile(BytesIO(COMPRESSED_RAW_3 * 4),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200665 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_3) as f:
666 self.assertEqual(f.read(), INPUT * 4)
667
668 def test_read_multistream_buffer_size_aligned(self):
669 # Test the case where a stream boundary coincides with the end
670 # of the raw read buffer.
671 saved_buffer_size = lzma._BUFFER_SIZE
672 lzma._BUFFER_SIZE = len(COMPRESSED_XZ)
673 try:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200674 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200675 self.assertEqual(f.read(), INPUT * 5)
676 finally:
677 lzma._BUFFER_SIZE = saved_buffer_size
678
679 def test_read_from_file(self):
680 with TempFile(TESTFN, COMPRESSED_XZ):
681 with LZMAFile(TESTFN) as f:
682 self.assertEqual(f.read(), INPUT)
683 self.assertEqual(f.read(), b"")
684
Nadeem Vawda10c87912012-06-20 01:48:50 +0200685 def test_read_from_file_with_bytes_filename(self):
686 try:
687 bytes_filename = TESTFN.encode("ascii")
688 except UnicodeEncodeError:
689 self.skipTest("Temporary file name needs to be ASCII")
690 with TempFile(TESTFN, COMPRESSED_XZ):
691 with LZMAFile(bytes_filename) as f:
692 self.assertEqual(f.read(), INPUT)
693 self.assertEqual(f.read(), b"")
694
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200695 def test_read_incomplete(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200696 with LZMAFile(BytesIO(COMPRESSED_XZ[:128])) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200697 self.assertRaises(EOFError, f.read)
698
Serhiy Storchaka57f9b7a2013-01-22 17:07:49 +0200699 def test_read_truncated(self):
700 # Drop stream footer: CRC (4 bytes), index size (4 bytes),
Serhiy Storchaka70ea7fa2013-02-08 11:24:16 +0200701 # flags (2 bytes) and magic number (2 bytes).
Serhiy Storchaka57f9b7a2013-01-22 17:07:49 +0200702 truncated = COMPRESSED_XZ[:-12]
703 with LZMAFile(BytesIO(truncated)) as f:
704 self.assertRaises(EOFError, f.read)
705 with LZMAFile(BytesIO(truncated)) as f:
706 self.assertEqual(f.read(len(INPUT)), INPUT)
707 self.assertRaises(EOFError, f.read, 1)
708 # Incomplete 12-byte header.
709 for i in range(12):
710 with LZMAFile(BytesIO(truncated[:i])) as f:
711 self.assertRaises(EOFError, f.read, 1)
712
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200713 def test_read_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200714 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200715 f.close()
716 self.assertRaises(ValueError, f.read)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200717 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200718 self.assertRaises(ValueError, f.read)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200719 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200720 self.assertRaises(TypeError, f.read, None)
721
722 def test_read1(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200723 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200724 blocks = []
725 while True:
726 result = f.read1()
727 if not result:
728 break
729 blocks.append(result)
730 self.assertEqual(b"".join(blocks), INPUT)
731 self.assertEqual(f.read1(), b"")
732
733 def test_read1_0(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200734 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200735 self.assertEqual(f.read1(0), b"")
736
737 def test_read1_10(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200738 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200739 blocks = []
740 while True:
741 result = f.read1(10)
742 if not result:
743 break
744 blocks.append(result)
745 self.assertEqual(b"".join(blocks), INPUT)
746 self.assertEqual(f.read1(), b"")
747
748 def test_read1_multistream(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200749 with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200750 blocks = []
751 while True:
752 result = f.read1()
753 if not result:
754 break
755 blocks.append(result)
756 self.assertEqual(b"".join(blocks), INPUT * 5)
757 self.assertEqual(f.read1(), b"")
758
759 def test_read1_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200760 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200761 f.close()
762 self.assertRaises(ValueError, f.read1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200763 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200764 self.assertRaises(ValueError, f.read1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200765 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200766 self.assertRaises(TypeError, f.read1, None)
767
768 def test_peek(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200769 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200770 result = f.peek()
771 self.assertGreater(len(result), 0)
772 self.assertTrue(INPUT.startswith(result))
773 self.assertEqual(f.read(), INPUT)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200774 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200775 result = f.peek(10)
776 self.assertGreater(len(result), 0)
777 self.assertTrue(INPUT.startswith(result))
778 self.assertEqual(f.read(), INPUT)
779
780 def test_peek_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200781 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200782 self.assertRaises(ValueError, f.peek)
783
784 def test_iterator(self):
785 with BytesIO(INPUT) as f:
786 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200787 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200788 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200789 with LZMAFile(BytesIO(COMPRESSED_ALONE)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200790 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200791 with LZMAFile(BytesIO(COMPRESSED_XZ), format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200792 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200793 with LZMAFile(BytesIO(COMPRESSED_ALONE), format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200794 self.assertListEqual(list(iter(f)), lines)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200795 with LZMAFile(BytesIO(COMPRESSED_RAW_2),
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200796 format=lzma.FORMAT_RAW, filters=FILTERS_RAW_2) as f:
797 self.assertListEqual(list(iter(f)), lines)
798
799 def test_readline(self):
800 with BytesIO(INPUT) as f:
801 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200802 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200803 for line in lines:
804 self.assertEqual(f.readline(), line)
805
806 def test_readlines(self):
807 with BytesIO(INPUT) as f:
808 lines = f.readlines()
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200809 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200810 self.assertListEqual(f.readlines(), lines)
811
812 def test_write(self):
813 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200814 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200815 f.write(INPUT)
816 expected = lzma.compress(INPUT)
817 self.assertEqual(dst.getvalue(), expected)
818 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200819 with LZMAFile(dst, "w", format=lzma.FORMAT_XZ) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200820 f.write(INPUT)
821 expected = lzma.compress(INPUT, format=lzma.FORMAT_XZ)
822 self.assertEqual(dst.getvalue(), expected)
823 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200824 with LZMAFile(dst, "w", format=lzma.FORMAT_ALONE) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200825 f.write(INPUT)
826 expected = lzma.compress(INPUT, format=lzma.FORMAT_ALONE)
827 self.assertEqual(dst.getvalue(), expected)
828 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200829 with LZMAFile(dst, "w", format=lzma.FORMAT_RAW,
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200830 filters=FILTERS_RAW_2) as f:
831 f.write(INPUT)
832 expected = lzma.compress(INPUT, format=lzma.FORMAT_RAW,
833 filters=FILTERS_RAW_2)
834 self.assertEqual(dst.getvalue(), expected)
835
836 def test_write_10(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 for start in range(0, len(INPUT), 10):
840 f.write(INPUT[start:start+10])
841 expected = lzma.compress(INPUT)
842 self.assertEqual(dst.getvalue(), expected)
843
844 def test_write_append(self):
845 part1 = INPUT[:1024]
846 part2 = INPUT[1024:1536]
847 part3 = INPUT[1536:]
848 expected = b"".join(lzma.compress(x) for x in (part1, part2, part3))
849 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200850 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200851 f.write(part1)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200852 with LZMAFile(dst, "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200853 f.write(part2)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200854 with LZMAFile(dst, "a") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200855 f.write(part3)
856 self.assertEqual(dst.getvalue(), expected)
857
858 def test_write_to_file(self):
859 try:
860 with LZMAFile(TESTFN, "w") as f:
861 f.write(INPUT)
862 expected = lzma.compress(INPUT)
863 with open(TESTFN, "rb") as f:
864 self.assertEqual(f.read(), expected)
865 finally:
866 unlink(TESTFN)
867
Nadeem Vawda10c87912012-06-20 01:48:50 +0200868 def test_write_to_file_with_bytes_filename(self):
869 try:
870 bytes_filename = TESTFN.encode("ascii")
871 except UnicodeEncodeError:
872 self.skipTest("Temporary file name needs to be ASCII")
873 try:
874 with LZMAFile(bytes_filename, "w") as f:
875 f.write(INPUT)
876 expected = lzma.compress(INPUT)
877 with open(TESTFN, "rb") as f:
878 self.assertEqual(f.read(), expected)
879 finally:
880 unlink(TESTFN)
881
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200882 def test_write_append_to_file(self):
883 part1 = INPUT[:1024]
884 part2 = INPUT[1024:1536]
885 part3 = INPUT[1536:]
886 expected = b"".join(lzma.compress(x) for x in (part1, part2, part3))
887 try:
888 with LZMAFile(TESTFN, "w") as f:
889 f.write(part1)
890 with LZMAFile(TESTFN, "a") as f:
891 f.write(part2)
892 with LZMAFile(TESTFN, "a") as f:
893 f.write(part3)
894 with open(TESTFN, "rb") as f:
895 self.assertEqual(f.read(), expected)
896 finally:
897 unlink(TESTFN)
898
899 def test_write_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200900 f = LZMAFile(BytesIO(), "w")
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200901 f.close()
902 self.assertRaises(ValueError, f.write, b"foo")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200903 with LZMAFile(BytesIO(COMPRESSED_XZ), "r") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200904 self.assertRaises(ValueError, f.write, b"bar")
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200905 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200906 self.assertRaises(TypeError, f.write, None)
907 self.assertRaises(TypeError, f.write, "text")
908 self.assertRaises(TypeError, f.write, 789)
909
910 def test_writelines(self):
911 with BytesIO(INPUT) as f:
912 lines = f.readlines()
913 with BytesIO() as dst:
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200914 with LZMAFile(dst, "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200915 f.writelines(lines)
916 expected = lzma.compress(INPUT)
917 self.assertEqual(dst.getvalue(), expected)
918
919 def test_seek_forward(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200920 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200921 f.seek(555)
922 self.assertEqual(f.read(), INPUT[555:])
923
924 def test_seek_forward_across_streams(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200925 with LZMAFile(BytesIO(COMPRESSED_XZ * 2)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200926 f.seek(len(INPUT) + 123)
927 self.assertEqual(f.read(), INPUT[123:])
928
929 def test_seek_forward_relative_to_current(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200930 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200931 f.read(100)
932 f.seek(1236, 1)
933 self.assertEqual(f.read(), INPUT[1336:])
934
935 def test_seek_forward_relative_to_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200936 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200937 f.seek(-555, 2)
938 self.assertEqual(f.read(), INPUT[-555:])
939
940 def test_seek_backward(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200941 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200942 f.read(1001)
943 f.seek(211)
944 self.assertEqual(f.read(), INPUT[211:])
945
946 def test_seek_backward_across_streams(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200947 with LZMAFile(BytesIO(COMPRESSED_XZ * 2)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200948 f.read(len(INPUT) + 333)
949 f.seek(737)
950 self.assertEqual(f.read(), INPUT[737:] + INPUT)
951
952 def test_seek_backward_relative_to_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200953 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200954 f.seek(-150, 2)
955 self.assertEqual(f.read(), INPUT[-150:])
956
957 def test_seek_past_end(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200958 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200959 f.seek(len(INPUT) + 9001)
960 self.assertEqual(f.tell(), len(INPUT))
961 self.assertEqual(f.read(), b"")
962
963 def test_seek_past_start(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200964 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200965 f.seek(-88)
966 self.assertEqual(f.tell(), 0)
967 self.assertEqual(f.read(), INPUT)
968
969 def test_seek_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200970 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200971 f.close()
972 self.assertRaises(ValueError, f.seek, 0)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200973 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200974 self.assertRaises(ValueError, f.seek, 0)
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200975 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200976 self.assertRaises(ValueError, f.seek, 0, 3)
977 self.assertRaises(ValueError, f.seek, 9, ())
978 self.assertRaises(TypeError, f.seek, None)
979 self.assertRaises(TypeError, f.seek, b"derp")
980
981 def test_tell(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200982 with LZMAFile(BytesIO(COMPRESSED_XZ)) as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200983 pos = 0
984 while True:
985 self.assertEqual(f.tell(), pos)
986 result = f.read(183)
987 if not result:
988 break
989 pos += len(result)
990 self.assertEqual(f.tell(), len(INPUT))
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200991 with LZMAFile(BytesIO(), "w") as f:
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200992 for pos in range(0, len(INPUT), 144):
993 self.assertEqual(f.tell(), pos)
994 f.write(INPUT[pos:pos+144])
995 self.assertEqual(f.tell(), len(INPUT))
996
997 def test_tell_bad_args(self):
Nadeem Vawda33c34da2012-06-04 23:34:07 +0200998 f = LZMAFile(BytesIO(COMPRESSED_XZ))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +0200999 f.close()
1000 self.assertRaises(ValueError, f.tell)
1001
1002
Nadeem Vawdae8604042012-06-04 23:38:12 +02001003class OpenTestCase(unittest.TestCase):
1004
1005 def test_binary_modes(self):
1006 with lzma.open(BytesIO(COMPRESSED_XZ), "rb") as f:
1007 self.assertEqual(f.read(), INPUT)
1008 with BytesIO() as bio:
1009 with lzma.open(bio, "wb") as f:
1010 f.write(INPUT)
1011 file_data = lzma.decompress(bio.getvalue())
1012 self.assertEqual(file_data, INPUT)
1013 with lzma.open(bio, "ab") as f:
1014 f.write(INPUT)
1015 file_data = lzma.decompress(bio.getvalue())
1016 self.assertEqual(file_data, INPUT * 2)
1017
1018 def test_text_modes(self):
1019 uncompressed = INPUT.decode("ascii")
1020 uncompressed_raw = uncompressed.replace("\n", os.linesep)
1021 with lzma.open(BytesIO(COMPRESSED_XZ), "rt") as f:
1022 self.assertEqual(f.read(), uncompressed)
1023 with BytesIO() as bio:
1024 with lzma.open(bio, "wt") as f:
1025 f.write(uncompressed)
1026 file_data = lzma.decompress(bio.getvalue()).decode("ascii")
1027 self.assertEqual(file_data, uncompressed_raw)
1028 with lzma.open(bio, "at") as f:
1029 f.write(uncompressed)
1030 file_data = lzma.decompress(bio.getvalue()).decode("ascii")
1031 self.assertEqual(file_data, uncompressed_raw * 2)
1032
1033 def test_filename(self):
1034 with TempFile(TESTFN):
1035 with lzma.open(TESTFN, "wb") as f:
1036 f.write(INPUT)
1037 with open(TESTFN, "rb") as f:
1038 file_data = lzma.decompress(f.read())
1039 self.assertEqual(file_data, INPUT)
1040 with lzma.open(TESTFN, "rb") as f:
1041 self.assertEqual(f.read(), INPUT)
1042 with lzma.open(TESTFN, "ab") as f:
1043 f.write(INPUT)
1044 with lzma.open(TESTFN, "rb") as f:
1045 self.assertEqual(f.read(), INPUT * 2)
1046
1047 def test_bad_params(self):
1048 # Test invalid parameter combinations.
1049 with self.assertRaises(ValueError):
1050 lzma.open(TESTFN, "")
1051 with self.assertRaises(ValueError):
Nadeem Vawdae8604042012-06-04 23:38:12 +02001052 lzma.open(TESTFN, "rbt")
1053 with self.assertRaises(ValueError):
1054 lzma.open(TESTFN, "rb", encoding="utf-8")
1055 with self.assertRaises(ValueError):
1056 lzma.open(TESTFN, "rb", errors="ignore")
1057 with self.assertRaises(ValueError):
1058 lzma.open(TESTFN, "rb", newline="\n")
1059
1060 def test_format_and_filters(self):
1061 # Test non-default format and filter chain.
1062 options = {"format": lzma.FORMAT_RAW, "filters": FILTERS_RAW_1}
1063 with lzma.open(BytesIO(COMPRESSED_RAW_1), "rb", **options) as f:
1064 self.assertEqual(f.read(), INPUT)
1065 with BytesIO() as bio:
1066 with lzma.open(bio, "wb", **options) as f:
1067 f.write(INPUT)
1068 file_data = lzma.decompress(bio.getvalue(), **options)
1069 self.assertEqual(file_data, INPUT)
1070
1071 def test_encoding(self):
1072 # Test non-default encoding.
1073 uncompressed = INPUT.decode("ascii")
1074 uncompressed_raw = uncompressed.replace("\n", os.linesep)
1075 with BytesIO() as bio:
1076 with lzma.open(bio, "wt", encoding="utf-16-le") as f:
1077 f.write(uncompressed)
1078 file_data = lzma.decompress(bio.getvalue()).decode("utf-16-le")
1079 self.assertEqual(file_data, uncompressed_raw)
1080 bio.seek(0)
1081 with lzma.open(bio, "rt", encoding="utf-16-le") as f:
1082 self.assertEqual(f.read(), uncompressed)
1083
1084 def test_encoding_error_handler(self):
1085 # Test wih non-default encoding error handler.
1086 with BytesIO(lzma.compress(b"foo\xffbar")) as bio:
1087 with lzma.open(bio, "rt", encoding="ascii", errors="ignore") as f:
1088 self.assertEqual(f.read(), "foobar")
1089
1090 def test_newline(self):
1091 # Test with explicit newline (universal newline mode disabled).
1092 text = INPUT.decode("ascii")
1093 with BytesIO() as bio:
1094 with lzma.open(bio, "wt", newline="\n") as f:
1095 f.write(text)
1096 bio.seek(0)
1097 with lzma.open(bio, "rt", newline="\r") as f:
1098 self.assertEqual(f.readlines(), [text])
1099
Nadeem Vawda42ca9822013-10-19 00:06:19 +02001100 def test_x_mode(self):
1101 self.addCleanup(unlink, TESTFN)
1102 for mode in ("x", "xb", "xt"):
1103 unlink(TESTFN)
1104 with lzma.open(TESTFN, mode):
1105 pass
1106 with self.assertRaises(FileExistsError):
1107 with lzma.open(TESTFN, mode):
1108 pass
1109
Nadeem Vawdae8604042012-06-04 23:38:12 +02001110
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001111class MiscellaneousTestCase(unittest.TestCase):
1112
1113 def test_is_check_supported(self):
1114 # CHECK_NONE and CHECK_CRC32 should always be supported,
1115 # regardless of the options liblzma was compiled with.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001116 self.assertTrue(lzma.is_check_supported(lzma.CHECK_NONE))
1117 self.assertTrue(lzma.is_check_supported(lzma.CHECK_CRC32))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001118
1119 # The .xz format spec cannot store check IDs above this value.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001120 self.assertFalse(lzma.is_check_supported(lzma.CHECK_ID_MAX + 1))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001121
1122 # This value should not be a valid check ID.
Nadeem Vawdabc459bb2012-05-06 23:01:51 +02001123 self.assertFalse(lzma.is_check_supported(lzma.CHECK_UNKNOWN))
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001124
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001125 def test__encode_filter_properties(self):
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001126 with self.assertRaises(TypeError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001127 lzma._encode_filter_properties(b"not a dict")
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001128 with self.assertRaises(ValueError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001129 lzma._encode_filter_properties({"id": 0x100})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001130 with self.assertRaises(ValueError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001131 lzma._encode_filter_properties({"id": lzma.FILTER_LZMA2, "junk": 12})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001132 with self.assertRaises(lzma.LZMAError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001133 lzma._encode_filter_properties({"id": lzma.FILTER_DELTA,
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001134 "dist": 9001})
1135
1136 # Test with parameters used by zipfile module.
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001137 props = lzma._encode_filter_properties({
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001138 "id": lzma.FILTER_LZMA1,
1139 "pb": 2,
1140 "lp": 0,
1141 "lc": 3,
1142 "dict_size": 8 << 20,
1143 })
1144 self.assertEqual(props, b"]\x00\x00\x80\x00")
1145
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001146 def test__decode_filter_properties(self):
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001147 with self.assertRaises(TypeError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001148 lzma._decode_filter_properties(lzma.FILTER_X86, {"should be": bytes})
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001149 with self.assertRaises(lzma.LZMAError):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001150 lzma._decode_filter_properties(lzma.FILTER_DELTA, b"too long")
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001151
1152 # Test with parameters used by zipfile module.
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001153 filterspec = lzma._decode_filter_properties(
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001154 lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
1155 self.assertEqual(filterspec["id"], lzma.FILTER_LZMA1)
1156 self.assertEqual(filterspec["pb"], 2)
1157 self.assertEqual(filterspec["lp"], 0)
1158 self.assertEqual(filterspec["lc"], 3)
1159 self.assertEqual(filterspec["dict_size"], 8 << 20)
1160
1161 def test_filter_properties_roundtrip(self):
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001162 spec1 = lzma._decode_filter_properties(
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001163 lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
Nadeem Vawdaa425c3d2012-06-21 23:36:48 +02001164 reencoded = lzma._encode_filter_properties(spec1)
1165 spec2 = lzma._decode_filter_properties(lzma.FILTER_LZMA1, reencoded)
Nadeem Vawdaf55b3292012-05-06 23:01:27 +02001166 self.assertEqual(spec1, spec2)
1167
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001168
1169# Test data:
1170
1171INPUT = b"""
1172LAERTES
1173
1174 O, fear me not.
1175 I stay too long: but here my father comes.
1176
1177 Enter POLONIUS
1178
1179 A double blessing is a double grace,
1180 Occasion smiles upon a second leave.
1181
1182LORD POLONIUS
1183
1184 Yet here, Laertes! aboard, aboard, for shame!
1185 The wind sits in the shoulder of your sail,
1186 And you are stay'd for. There; my blessing with thee!
1187 And these few precepts in thy memory
1188 See thou character. Give thy thoughts no tongue,
1189 Nor any unproportioned thought his act.
1190 Be thou familiar, but by no means vulgar.
1191 Those friends thou hast, and their adoption tried,
1192 Grapple them to thy soul with hoops of steel;
1193 But do not dull thy palm with entertainment
1194 Of each new-hatch'd, unfledged comrade. Beware
1195 Of entrance to a quarrel, but being in,
1196 Bear't that the opposed may beware of thee.
1197 Give every man thy ear, but few thy voice;
1198 Take each man's censure, but reserve thy judgment.
1199 Costly thy habit as thy purse can buy,
1200 But not express'd in fancy; rich, not gaudy;
1201 For the apparel oft proclaims the man,
1202 And they in France of the best rank and station
1203 Are of a most select and generous chief in that.
1204 Neither a borrower nor a lender be;
1205 For loan oft loses both itself and friend,
1206 And borrowing dulls the edge of husbandry.
1207 This above all: to thine ownself be true,
1208 And it must follow, as the night the day,
1209 Thou canst not then be false to any man.
1210 Farewell: my blessing season this in thee!
1211
1212LAERTES
1213
1214 Most humbly do I take my leave, my lord.
1215
1216LORD POLONIUS
1217
1218 The time invites you; go; your servants tend.
1219
1220LAERTES
1221
1222 Farewell, Ophelia; and remember well
1223 What I have said to you.
1224
1225OPHELIA
1226
1227 'Tis in my memory lock'd,
1228 And you yourself shall keep the key of it.
1229
1230LAERTES
1231
1232 Farewell.
1233"""
1234
1235COMPRESSED_XZ = (
1236 b"\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x16\x00\x00\x00t/\xe5\xa3"
1237 b"\xe0\x07\x80\x03\xdf]\x00\x05\x14\x07bX\x19\xcd\xddn\x98\x15\xe4\xb4\x9d"
1238 b"o\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8\xe2\xfc\xe7\xd9\xfe6\xb8("
1239 b"\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02\x17/\xa6=\xf0\xa2\xdf/M\x89"
1240 b"\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ\x15\x80\x8c\xf8\x8do\xfa\x12"
1241 b"\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t\xca6 BF$\xe5Q\xa4\x98\xee\xde"
1242 b"l\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81\xe4N\xc8\x86\x153\xf5x2\xa2O"
1243 b"\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z\xc4\xcdS\xb6t<\x16\xf2\x9cI#"
1244 b"\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0\xaa\x96-Pe\xade:\x04\t\x1b\xf7"
1245 b"\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b"
1246 b"\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa"
1247 b"\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8\x84b\xf6\xc3\xd4c-H\x93oJl\xd0iQ\xe4k"
1248 b"\x84\x0b\xc1\xb7\xbc\xb1\x17\x88\xb1\xca?@\xf6\x07\xea\xe6x\xf1H12P\x0f"
1249 b"\x8a\xc9\xeauw\xe3\xbe\xaai\xa9W\xd0\x80\xcd#cb5\x99\xd8]\xa9d\x0c\xbd"
1250 b"\xa2\xdcWl\xedUG\xbf\x89yF\xf77\x81v\xbd5\x98\xbeh8\x18W\x08\xf0\x1b\x99"
1251 b"5:\x1a?rD\x96\xa1\x04\x0f\xae\xba\x85\xeb\x9d5@\xf5\x83\xd37\x83\x8ac"
1252 b"\x06\xd4\x97i\xcdt\x16S\x82k\xf6K\x01vy\x88\x91\x9b6T\xdae\r\xfd]:k\xbal"
1253 b"\xa9\xbba\xc34\xf9r\xeb}r\xdb\xc7\xdb*\x8f\x03z\xdc8h\xcc\xc9\xd3\xbcl"
1254 b"\xa5-\xcb\xeaK\xa2\xc5\x15\xc0\xe3\xc1\x86Z\xfb\xebL\xe13\xcf\x9c\xe3"
1255 b"\x1d\xc9\xed\xc2\x06\xcc\xce!\x92\xe5\xfe\x9c^\xa59w \x9bP\xa3PK\x08d"
1256 b"\xf9\xe2Z}\xa7\xbf\xed\xeb%$\x0c\x82\xb8/\xb0\x01\xa9&,\xf7qh{Q\x96)\xf2"
1257 b"q\x96\xc3\x80\xb4\x12\xb0\xba\xe6o\xf4!\xb4[\xd4\x8aw\x10\xf7t\x0c\xb3"
1258 b"\xd9\xd5\xc3`^\x81\x11??\\\xa4\x99\x85R\xd4\x8e\x83\xc9\x1eX\xbfa\xf1"
1259 b"\xac\xb0\xea\xea\xd7\xd0\xab\x18\xe2\xf2\xed\xe1\xb7\xc9\x18\xcbS\xe4>"
1260 b"\xc9\x95H\xe8\xcb\t\r%\xeb\xc7$.o\xf1\xf3R\x17\x1db\xbb\xd8U\xa5^\xccS"
1261 b"\x16\x01\x87\xf3/\x93\xd1\xf0v\xc0r\xd7\xcc\xa2Gkz\xca\x80\x0e\xfd\xd0"
1262 b"\x8b\xbb\xd2Ix\xb3\x1ey\xca-0\xe3z^\xd6\xd6\x8f_\xf1\x9dP\x9fi\xa7\xd1"
1263 b"\xe8\x90\x84\xdc\xbf\xcdky\x8e\xdc\x81\x7f\xa3\xb2+\xbf\x04\xef\xd8\\"
1264 b"\xc4\xdf\xe1\xb0\x01\xe9\x93\xe3Y\xf1\x1dY\xe8h\x81\xcf\xf1w\xcc\xb4\xef"
1265 b" \x8b|\x04\xea\x83ej\xbe\x1f\xd4z\x9c`\xd3\x1a\x92A\x06\xe5\x8f\xa9\x13"
1266 b"\t\x9e=\xfa\x1c\xe5_\x9f%v\x1bo\x11ZO\xd8\xf4\t\xddM\x16-\x04\xfc\x18<\""
1267 b"CM\xddg~b\xf6\xef\x8e\x0c\xd0\xde|\xa0'\x8a\x0c\xd6x\xae!J\xa6F\x88\x15u"
1268 b"\x008\x17\xbc7y\xb3\xd8u\xac_\x85\x8d\xe7\xc1@\x9c\xecqc\xa3#\xad\xf1"
1269 b"\x935\xb5)_\r\xec3]\x0fo]5\xd0my\x07\x9b\xee\x81\xb5\x0f\xcfK+\x00\xc0"
1270 b"\xe4b\x10\xe4\x0c\x1a \x9b\xe0\x97t\xf6\xa1\x9e\x850\xba\x0c\x9a\x8d\xc8"
1271 b"\x8f\x07\xd7\xae\xc8\xf9+i\xdc\xb9k\xb0>f\x19\xb8\r\xa8\xf8\x1f$\xa5{p"
1272 b"\xc6\x880\xce\xdb\xcf\xca_\x86\xac\x88h6\x8bZ%'\xd0\n\xbf\x0f\x9c\"\xba"
1273 b"\xe5\x86\x9f\x0f7X=mNX[\xcc\x19FU\xc9\x860\xbc\x90a+* \xae_$\x03\x1e\xd3"
1274 b"\xcd_\xa0\x9c\xde\xaf46q\xa5\xc9\x92\xd7\xca\xe3`\x9d\x85}\xb4\xff\xb3"
1275 b"\x83\xfb\xb6\xca\xae`\x0bw\x7f\xfc\xd8\xacVe\x19\xc8\x17\x0bZ\xad\x88"
1276 b"\xeb#\x97\x03\x13\xb1d\x0f{\x0c\x04w\x07\r\x97\xbd\xd6\xc1\xc3B:\x95\x08"
1277 b"^\x10V\xaeaH\x02\xd9\xe3\n\\\x01X\xf6\x9c\x8a\x06u#%\xbe*\xa1\x18v\x85"
1278 b"\xec!\t4\x00\x00\x00\x00Vj?uLU\xf3\xa6\x00\x01\xfb\x07\x81\x0f\x00\x00tw"
1279 b"\x99P\xb1\xc4g\xfb\x02\x00\x00\x00\x00\x04YZ"
1280)
1281
1282COMPRESSED_ALONE = (
1283 b"]\x00\x00\x80\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x05\x14\x07bX\x19"
1284 b"\xcd\xddn\x98\x15\xe4\xb4\x9do\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8"
1285 b"\xe2\xfc\xe7\xd9\xfe6\xb8(\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02"
1286 b"\x17/\xa6=\xf0\xa2\xdf/M\x89\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ"
1287 b"\x15\x80\x8c\xf8\x8do\xfa\x12\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t"
1288 b"\xca6 BF$\xe5Q\xa4\x98\xee\xdel\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81"
1289 b"\xe4N\xc8\x86\x153\xf5x2\xa2O\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z"
1290 b"\xc4\xcdS\xb6t<\x16\xf2\x9cI#\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0"
1291 b"\xaa\x96-Pe\xade:\x04\t\x1b\xf7\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9"
1292 b"\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7"
1293 b"\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8"
1294 b"\x84b\xf8\x1epl\xeajr\xd1=\t\x03\xdd\x13\x1b3!E\xf9vV\xdaF\xf3\xd7\xb4"
1295 b"\x0c\xa9P~\xec\xdeE\xe37\xf6\x1d\xc6\xbb\xddc%\xb6\x0fI\x07\xf0;\xaf\xe7"
1296 b"\xa0\x8b\xa7Z\x99(\xe9\xe2\xf0o\x18>`\xe1\xaa\xa8\xd9\xa1\xb2}\xe7\x8d"
1297 b"\x834T\xb6\xef\xc1\xde\xe3\x98\xbcD\x03MA@\xd8\xed\xdc\xc8\x93\x03\x1a"
1298 b"\x93\x0b\x7f\x94\x12\x0b\x02Sa\x18\xc9\xc5\x9bTJE}\xf6\xc8g\x17#ZV\x01"
1299 b"\xc9\x9dc\x83\x0e>0\x16\x90S\xb8/\x03y_\x18\xfa(\xd7\x0br\xa2\xb0\xba?"
1300 b"\x8c\xe6\x83@\x84\xdf\x02:\xc5z\x9e\xa6\x84\xc9\xf5BeyX\x83\x1a\xf1 :\t"
1301 b"\xf7\x19\xfexD\\&G\xf3\x85Y\xa2J\xf9\x0bv{\x89\xf6\xe7)A\xaf\x04o\x00"
1302 b"\x075\xd3\xe0\x7f\x97\x98F\x0f?v\x93\xedVtTf\xb5\x97\x83\xed\x19\xd7\x1a"
1303 b"'k\xd7\xd9\xc5\\Y\xd1\xdc\x07\x15|w\xbc\xacd\x87\x08d\xec\xa7\xf6\x82"
1304 b"\xfc\xb3\x93\xeb\xb9 \x8d\xbc ,\xb3X\xb0\xd2s\xd7\xd1\xffv\x05\xdf}\xa2"
1305 b"\x96\xfb%\n\xdf\xa2\x7f\x08.\xa16\n\xe0\x19\x93\x7fh\n\x1c\x8c\x0f \x11"
1306 b"\xc6Bl\x95\x19U}\xe4s\xb5\x10H\xea\x86pB\xe88\x95\xbe\x8cZ\xdb\xe4\x94A"
1307 b"\x92\xb9;z\xaa\xa7{\x1c5!\xc0\xaf\xc1A\xf9\xda\xf0$\xb0\x02qg\xc8\xc7/|"
1308 b"\xafr\x99^\x91\x88\xbf\x03\xd9=\xd7n\xda6{>8\n\xc7:\xa9'\xba.\x0b\xe2"
1309 b"\xb5\x1d\x0e\n\x9a\x8e\x06\x8f:\xdd\x82'[\xc3\"wD$\xa7w\xecq\x8c,1\x93"
1310 b"\xd0,\xae2w\x93\x12$Jd\x19mg\x02\x93\x9cA\x95\x9d&\xca8i\x9c\xb0;\xe7NQ"
1311 b"\x1frh\x8beL;\xb0m\xee\x07Q\x9b\xc6\xd8\x03\xb5\xdeN\xd4\xfe\x98\xd0\xdc"
1312 b"\x1a[\x04\xde\x1a\xf6\x91j\xf8EOli\x8eB^\x1d\x82\x07\xb2\xb5R]\xb7\xd7"
1313 b"\xe9\xa6\xc3.\xfb\xf0-\xb4e\x9b\xde\x03\x88\xc6\xc1iN\x0e\x84wbQ\xdf~"
1314 b"\xe9\xa4\x884\x96kM\xbc)T\xf3\x89\x97\x0f\x143\xe7)\xa0\xb3B\x00\xa8\xaf"
1315 b"\x82^\xcb\xc7..\xdb\xc7\t\x9dH\xee5\xe9#\xe6NV\x94\xcb$Kk\xe3\x7f\r\xe3t"
1316 b"\x12\xcf'\xefR\x8b\xf42\xcf-LH\xac\xe5\x1f0~?SO\xeb\xc1E\x1a\x1c]\xf2"
1317 b"\xc4<\x11\x02\x10Z0a*?\xe4r\xff\xfb\xff\xf6\x14nG\xead^\xd6\xef8\xb6uEI"
1318 b"\x99\nV\xe2\xb3\x95\x8e\x83\xf6i!\xb5&1F\xb1DP\xf4 SO3D!w\x99_G\x7f+\x90"
1319 b".\xab\xbb]\x91>\xc9#h;\x0f5J\x91K\xf4^-[\x9e\x8a\\\x94\xca\xaf\xf6\x19"
1320 b"\xd4\xa1\x9b\xc4\xb8p\xa1\xae\x15\xe9r\x84\xe0\xcar.l []\x8b\xaf+0\xf2g"
1321 b"\x01aKY\xdfI\xcf,\n\xe8\xf0\xe7V\x80_#\xb2\xf2\xa9\x06\x8c>w\xe2W,\xf4"
1322 b"\x8c\r\xf963\xf5J\xcc2\x05=kT\xeaUti\xe5_\xce\x1b\xfa\x8dl\x02h\xef\xa8"
1323 b"\xfbf\x7f\xff\xf0\x19\xeax"
1324)
1325
1326FILTERS_RAW_1 = [{"id": lzma.FILTER_LZMA2, "preset": 3}]
1327COMPRESSED_RAW_1 = (
1328 b"\xe0\x07\x80\x03\xfd]\x00\x05\x14\x07bX\x19\xcd\xddn\x96cyq\xa1\xdd\xee"
1329 b"\xf8\xfam\xe3'\x88\xd3\xff\xe4\x9e \xceQ\x91\xa4\x14I\xf6\xb9\x9dVL8\x15"
1330 b"_\x0e\x12\xc3\xeb\xbc\xa5\xcd\nW\x1d$=R;\x1d\xf8k8\t\xb1{\xd4\xc5+\x9d"
1331 b"\x87c\xe5\xef\x98\xb4\xd7S3\xcd\xcc\xd2\xed\xa4\x0em\xe5\xf4\xdd\xd0b"
1332 b"\xbe4*\xaa\x0b\xc5\x08\x10\x85+\x81.\x17\xaf9\xc9b\xeaZrA\xe20\x7fs\"r"
1333 b"\xdaG\x81\xde\x90cu\xa5\xdb\xa9.A\x08l\xb0<\xf6\x03\xddOi\xd0\xc5\xb4"
1334 b"\xec\xecg4t6\"\xa6\xb8o\xb5?\x18^}\xb6}\x03[:\xeb\x03\xa9\n[\x89l\x19g"
1335 b"\x16\xc82\xed\x0b\xfb\x86n\xa2\x857@\x93\xcd6T\xc3u\xb0\t\xf9\x1b\x918"
1336 b"\xfc[\x1b\x1e4\xb3\x14\x06PCV\xa8\"\xf5\x81x~\xe9\xb5N\x9cK\x9f\xc6\xc3%"
1337 b"\xc8k:{6\xe7\xf7\xbd\x05\x02\xb4\xc4\xc3\xd3\xfd\xc3\xa8\\\xfc@\xb1F_"
1338 b"\xc8\x90\xd9sU\x98\xad8\x05\x07\xde7J\x8bM\xd0\xb3;X\xec\x87\xef\xae\xb3"
1339 b"eO,\xb1z,d\x11y\xeejlB\x02\x1d\xf28\x1f#\x896\xce\x0b\xf0\xf5\xa9PK\x0f"
1340 b"\xb3\x13P\xd8\x88\xd2\xa1\x08\x04C?\xdb\x94_\x9a\"\xe9\xe3e\x1d\xde\x9b"
1341 b"\xa1\xe8>H\x98\x10;\xc5\x03#\xb5\x9d4\x01\xe7\xc5\xba%v\xa49\x97A\xe0\""
1342 b"\x8c\xc22\xe3i\xc1\x9d\xab3\xdf\xbe\xfdDm7\x1b\x9d\xab\xb5\x15o:J\x92"
1343 b"\xdb\x816\x17\xc2O\x99\x1b\x0e\x8d\xf3\tQ\xed\x8e\x95S/\x16M\xb2S\x04"
1344 b"\x0f\xc3J\xc6\xc7\xe4\xcb\xc5\xf4\xe7d\x14\xe4=^B\xfb\xd3E\xd3\x1e\xcd"
1345 b"\x91\xa5\xd0G\x8f.\xf6\xf9\x0bb&\xd9\x9f\xc2\xfdj\xa2\x9e\xc4\\\x0e\x1dC"
1346 b"v\xe8\xd2\x8a?^H\xec\xae\xeb>\xfe\xb8\xab\xd4IqY\x8c\xd4K7\x11\xf4D\xd0W"
1347 b"\xa5\xbe\xeaO\xbf\xd0\x04\xfdl\x10\xae5\xd4U\x19\x06\xf9{\xaa\xe0\x81"
1348 b"\x0f\xcf\xa3k{\x95\xbd\x19\xa2\xf8\xe4\xa3\x08O*\xf1\xf1B-\xc7(\x0eR\xfd"
1349 b"@E\x9f\xd3\x1e:\xfdV\xb7\x04Y\x94\xeb]\x83\xc4\xa5\xd7\xc0gX\x98\xcf\x0f"
1350 b"\xcd3\x00]n\x17\xec\xbd\xa3Y\x86\xc5\xf3u\xf6*\xbdT\xedA$A\xd9A\xe7\x98"
1351 b"\xef\x14\x02\x9a\xfdiw\xec\xa0\x87\x11\xd9%\xc5\xeb\x8a=\xae\xc0\xc4\xc6"
1352 b"D\x80\x8f\xa8\xd1\xbbq\xb2\xc0\xa0\xf5Cqp\xeeL\xe3\xe5\xdc \x84\"\xe9"
1353 b"\x80t\x83\x05\xba\xf1\xc5~\x93\xc9\xf0\x01c\xceix\x9d\xed\xc5)l\x16)\xd1"
1354 b"\x03@l\x04\x7f\x87\xa5yn\x1b\x01D\xaa:\xd2\x96\xb4\xb3?\xb0\xf9\xce\x07"
1355 b"\xeb\x81\x00\xe4\xc3\xf5%_\xae\xd4\xf9\xeb\xe2\rh\xb2#\xd67Q\x16D\x82hn"
1356 b"\xd1\xa3_?q\xf0\xe2\xac\xf317\x9e\xd0_\x83|\xf1\xca\xb7\x95S\xabW\x12"
1357 b"\xff\xddt\xf69L\x01\xf2|\xdaW\xda\xees\x98L\x18\xb8_\xe8$\x82\xea\xd6"
1358 b"\xd1F\xd4\x0b\xcdk\x01vf\x88h\xc3\xae\xb91\xc7Q\x9f\xa5G\xd9\xcc\x1f\xe3"
1359 b"5\xb1\xdcy\x7fI\x8bcw\x8e\x10rIp\x02:\x19p_\xc8v\xcea\"\xc1\xd9\x91\x03"
1360 b"\xbfe\xbe\xa6\xb3\xa8\x14\x18\xc3\xabH*m}\xc2\xc1\x9a}>l%\xce\x84\x99"
1361 b"\xb3d\xaf\xd3\x82\x15\xdf\xc1\xfc5fOg\x9b\xfc\x8e^&\t@\xce\x9f\x06J\xb8"
1362 b"\xb5\x86\x1d\xda{\x9f\xae\xb0\xff\x02\x81r\x92z\x8cM\xb7ho\xc9^\x9c\xb6"
1363 b"\x9c\xae\xd1\xc9\xf4\xdfU7\xd6\\!\xea\x0b\x94k\xb9Ud~\x98\xe7\x86\x8az"
1364 b"\x10;\xe3\x1d\xe5PG\xf8\xa4\x12\x05w\x98^\xc4\xb1\xbb\xfb\xcf\xe0\x7f"
1365 b"\x033Sf\x0c \xb1\xf6@\x94\xe5\xa3\xb2\xa7\x10\x9a\xc0\x14\xc3s\xb5xRD"
1366 b"\xf4`W\xd9\xe5\xd3\xcf\x91\rTZ-X\xbe\xbf\xb5\xe2\xee|\x1a\xbf\xfb\x08"
1367 b"\x91\xe1\xfc\x9a\x18\xa3\x8b\xd6^\x89\xf5[\xef\x87\xd1\x06\x1c7\xd6\xa2"
1368 b"\t\tQ5/@S\xc05\xd2VhAK\x03VC\r\x9b\x93\xd6M\xf1xO\xaaO\xed\xb9<\x0c\xdae"
1369 b"*\xd0\x07Hk6\x9fG+\xa1)\xcd\x9cl\x87\xdb\xe1\xe7\xefK}\x875\xab\xa0\x19u"
1370 b"\xf6*F\xb32\x00\x00\x00"
1371)
1372
1373FILTERS_RAW_2 = [{"id": lzma.FILTER_DELTA, "dist": 2},
1374 {"id": lzma.FILTER_LZMA2,
1375 "preset": lzma.PRESET_DEFAULT | lzma.PRESET_EXTREME}]
1376COMPRESSED_RAW_2 = (
1377 b"\xe0\x07\x80\x05\x91]\x00\x05\x14\x06-\xd4\xa8d?\xef\xbe\xafH\xee\x042"
1378 b"\xcb.\xb5g\x8f\xfb\x14\xab\xa5\x9f\x025z\xa4\xdd\xd8\t[}W\xf8\x0c\x1dmH"
1379 b"\xfa\x05\xfcg\xba\xe5\x01Q\x0b\x83R\xb6A\x885\xc0\xba\xee\n\x1cv~\xde:o"
1380 b"\x06:J\xa7\x11Cc\xea\xf7\xe5*o\xf7\x83\\l\xbdE\x19\x1f\r\xa8\x10\xb42"
1381 b"\x0caU{\xd7\xb8w\xdc\xbe\x1b\xfc8\xb4\xcc\xd38\\\xf6\x13\xf6\xe7\x98\xfa"
1382 b"\xc7[\x17_9\x86%\xa8\xf8\xaa\xb8\x8dfs#\x1e=\xed<\x92\x10\\t\xff\x86\xfb"
1383 b"=\x9e7\x18\x1dft\\\xb5\x01\x95Q\xc5\x19\xb38\xe0\xd4\xaa\x07\xc3\x7f\xd8"
1384 b"\xa2\x00>-\xd3\x8e\xa1#\xfa\x83ArAm\xdbJ~\x93\xa3B\x82\xe0\xc7\xcc(\x08`"
1385 b"WK\xad\x1b\x94kaj\x04 \xde\xfc\xe1\xed\xb0\x82\x91\xefS\x84%\x86\xfbi"
1386 b"\x99X\xf1B\xe7\x90;E\xfde\x98\xda\xca\xd6T\xb4bg\xa4\n\x9aj\xd1\x83\x9e]"
1387 b"\"\x7fM\xb5\x0fr\xd2\\\xa5j~P\x10GH\xbfN*Z\x10.\x81\tpE\x8a\x08\xbe1\xbd"
1388 b"\xcd\xa9\xe1\x8d\x1f\x04\xf9\x0eH\xb9\xae\xd6\xc3\xc1\xa5\xa9\x95P\xdc~"
1389 b"\xff\x01\x930\xa9\x04\xf6\x03\xfe\xb5JK\xc3]\xdd9\xb1\xd3\xd7F\xf5\xd1"
1390 b"\x1e\xa0\x1c_\xed[\x0c\xae\xd4\x8b\x946\xeb\xbf\xbb\xe3$kS{\xb5\x80,f:Sj"
1391 b"\x0f\x08z\x1c\xf5\xe8\xe6\xae\x98\xb0Q~r\x0f\xb0\x05?\xb6\x90\x19\x02&"
1392 b"\xcb\x80\t\xc4\xea\x9c|x\xce\x10\x9c\xc5|\xcbdhh+\x0c'\xc5\x81\xc33\xb5"
1393 b"\x14q\xd6\xc5\xe3`Z#\xdc\x8a\xab\xdd\xea\x08\xc2I\xe7\x02l{\xec\x196\x06"
1394 b"\x91\x8d\xdc\xd5\xb3x\xe1hz%\xd1\xf8\xa5\xdd\x98!\x8c\x1c\xc1\x17RUa\xbb"
1395 b"\x95\x0f\xe4X\xea1\x0c\xf1=R\xbe\xc60\xe3\xa4\x9a\x90bd\x97$]B\x01\xdd"
1396 b"\x1f\xe3h2c\x1e\xa0L`4\xc6x\xa3Z\x8a\r\x14]T^\xd8\x89\x1b\x92\r;\xedY"
1397 b"\x0c\xef\x8d9z\xf3o\xb6)f\xa9]$n\rp\x93\xd0\x10\xa4\x08\xb8\xb2\x8b\xb6"
1398 b"\x8f\x80\xae;\xdcQ\xf1\xfa\x9a\x06\x8e\xa5\x0e\x8cK\x9c @\xaa:UcX\n!\xc6"
1399 b"\x02\x12\xcb\x1b\"=\x16.\x1f\x176\xf2g=\xe1Wn\xe9\xe1\xd4\xf1O\xad\x15"
1400 b"\x86\xe9\xa3T\xaf\xa9\xd7D\xb5\xd1W3pnt\x11\xc7VOj\xb7M\xc4i\xa1\xf1$3"
1401 b"\xbb\xdc\x8af\xb0\xc5Y\r\xd1\xfb\xf2\xe7K\xe6\xc5hwO\xfe\x8c2^&\x07\xd5"
1402 b"\x1fV\x19\xfd\r\x14\xd2i=yZ\xe6o\xaf\xc6\xb6\x92\x9d\xc4\r\xb3\xafw\xac%"
1403 b"\xcfc\x1a\xf1`]\xf2\x1a\x9e\x808\xedm\xedQ\xb2\xfe\xe4h`[q\xae\xe0\x0f"
1404 b"\xba0g\xb6\"N\xc3\xfb\xcfR\x11\xc5\x18)(\xc40\\\xa3\x02\xd9G!\xce\x1b"
1405 b"\xc1\x96x\xb5\xc8z\x1f\x01\xb4\xaf\xde\xc2\xcd\x07\xe7H\xb3y\xa8M\n\\A\t"
1406 b"ar\xddM\x8b\x9a\xea\x84\x9b!\xf1\x8d\xb1\xf1~\x1e\r\xa5H\xba\xf1\x84o"
1407 b"\xda\x87\x01h\xe9\xa2\xbe\xbeqN\x9d\x84\x0b!WG\xda\xa1\xa5A\xb7\xc7`j"
1408 b"\x15\xf2\xe9\xdd?\x015B\xd2~E\x06\x11\xe0\x91!\x05^\x80\xdd\xa8y\x15}"
1409 b"\xa1)\xb1)\x81\x18\xf4\xf4\xf8\xc0\xefD\xe3\xdb2f\x1e\x12\xabu\xc9\x97"
1410 b"\xcd\x1e\xa7\x0c\x02x4_6\x03\xc4$t\xf39\x94\x1d=\xcb\xbfv\\\xf5\xa3\x1d"
1411 b"\x9d8jk\x95\x13)ff\xf9n\xc4\xa9\xe3\x01\xb8\xda\xfb\xab\xdfM\x99\xfb\x05"
1412 b"\xe0\xe9\xb0I\xf4E\xab\xe2\x15\xa3\x035\xe7\xdeT\xee\x82p\xb4\x88\xd3"
1413 b"\x893\x9c/\xc0\xd6\x8fou;\xf6\x95PR\xa9\xb2\xc1\xefFj\xe2\xa7$\xf7h\xf1"
1414 b"\xdfK(\xc9c\xba7\xe8\xe3)\xdd\xb2,\x83\xfb\x84\x18.y\x18Qi\x88\xf8`h-"
1415 b"\xef\xd5\xed\x8c\t\xd8\xc3^\x0f\x00\xb7\xd0[!\xafM\x9b\xd7.\x07\xd8\xfb"
1416 b"\xd9\xe2-S+\xaa8,\xa0\x03\x1b \xea\xa8\x00\xc3\xab~\xd0$e\xa5\x7f\xf7"
1417 b"\x95P]\x12\x19i\xd9\x7fo\x0c\xd8g^\rE\xa5\x80\x18\xc5\x01\x80\xaek`\xff~"
1418 b"\xb6y\xe7+\xe5\x11^D\xa7\x85\x18\"!\xd6\xd2\xa7\xf4\x1eT\xdb\x02\xe15"
1419 b"\x02Y\xbc\x174Z\xe7\x9cH\x1c\xbf\x0f\xc6\xe9f]\xcf\x8cx\xbc\xe5\x15\x94"
1420 b"\xfc3\xbc\xa7TUH\xf1\x84\x1b\xf7\xa9y\xc07\x84\xf8X\xd8\xef\xfc \x1c\xd8"
1421 b"( /\xf2\xb7\xec\xc1\\\x8c\xf6\x95\xa1\x03J\x83vP8\xe1\xe3\xbb~\xc24kA"
1422 b"\x98y\xa1\xf2P\xe9\x9d\xc9J\xf8N\x99\xb4\xceaO\xde\x16\x1e\xc2\x19\xa7"
1423 b"\x03\xd2\xe0\x8f:\x15\xf3\x84\x9e\xee\xe6e\xb8\x02q\xc7AC\x1emw\xfd\t"
1424 b"\x9a\x1eu\xc1\xa9\xcaCwUP\x00\xa5\xf78L4w!\x91L2 \x87\xd0\xf2\x06\x81j"
1425 b"\x80;\x03V\x06\x87\x92\xcb\x90lv@E\x8d\x8d\xa5\xa6\xe7Z[\xdf\xd6E\x03`>"
1426 b"\x8f\xde\xa1bZ\x84\xd0\xa9`\x05\x0e{\x80;\xe3\xbef\x8d\x1d\xebk1.\xe3"
1427 b"\xe9N\x15\xf7\xd4(\xfa\xbb\x15\xbdu\xf7\x7f\x86\xae!\x03L\x1d\xb5\xc1"
1428 b"\xb9\x11\xdb\xd0\x93\xe4\x02\xe1\xd2\xcbBjc_\xe8}d\xdb\xc3\xa0Y\xbe\xc9/"
1429 b"\x95\x01\xa3,\xe6bl@\x01\xdbp\xc2\xce\x14\x168\xc2q\xe3uH\x89X\xa4\xa9"
1430 b"\x19\x1d\xc1}\x7fOX\x19\x9f\xdd\xbe\x85\x83\xff\x96\x1ee\x82O`CF=K\xeb$I"
1431 b"\x17_\xefX\x8bJ'v\xde\x1f+\xd9.v\xf8Tv\x17\xf2\x9f5\x19\xe1\xb9\x91\xa8S"
1432 b"\x86\xbd\x1a\"(\xa5x\x8dC\x03X\x81\x91\xa8\x11\xc4pS\x13\xbc\xf2'J\xae!"
1433 b"\xef\xef\x84G\t\x8d\xc4\x10\x132\x00oS\x9e\xe0\xe4d\x8f\xb8y\xac\xa6\x9f"
1434 b",\xb8f\x87\r\xdf\x9eE\x0f\xe1\xd0\\L\x00\xb2\xe1h\x84\xef}\x98\xa8\x11"
1435 b"\xccW#\\\x83\x7fo\xbbz\x8f\x00"
1436)
1437
1438FILTERS_RAW_3 = [{"id": lzma.FILTER_IA64, "start_offset": 0x100},
1439 {"id": lzma.FILTER_LZMA2}]
1440COMPRESSED_RAW_3 = (
1441 b"\xe0\x07\x80\x03\xdf]\x00\x05\x14\x07bX\x19\xcd\xddn\x98\x15\xe4\xb4\x9d"
1442 b"o\x1d\xc4\xe5\n\x03\xcc2h\xc7\\\x86\xff\xf8\xe2\xfc\xe7\xd9\xfe6\xb8("
1443 b"\xa8wd\xc2\"u.n\x1e\xc3\xf2\x8e\x8d\x8f\x02\x17/\xa6=\xf0\xa2\xdf/M\x89"
1444 b"\xbe\xde\xa7\x1cz\x18-]\xd5\xef\x13\x8frZ\x15\x80\x8c\xf8\x8do\xfa\x12"
1445 b"\x9b#z/\xef\xf0\xfaF\x01\x82\xa3M\x8e\xa1t\xca6 BF$\xe5Q\xa4\x98\xee\xde"
1446 b"l\xe8\x7f\xf0\x9d,bn\x0b\x13\xd4\xa8\x81\xe4N\xc8\x86\x153\xf5x2\xa2O"
1447 b"\x13@Q\xa1\x00/\xa5\xd0O\x97\xdco\xae\xf7z\xc4\xcdS\xb6t<\x16\xf2\x9cI#"
1448 b"\x89ud\xc66Y\xd9\xee\xe6\xce\x12]\xe5\xf0\xaa\x96-Pe\xade:\x04\t\x1b\xf7"
1449 b"\xdb7\n\x86\x1fp\xc8J\xba\xf4\xf0V\xa9\xdc\xf0\x02%G\xf9\xdf=?\x15\x1b"
1450 b"\xe1(\xce\x82=\xd6I\xac3\x12\x0cR\xb7\xae\r\xb1i\x03\x95\x01\xbd\xbe\xfa"
1451 b"\x02s\x01P\x9d\x96X\xb12j\xc8L\xa8\x84b\xf6\xc3\xd4c-H\x93oJl\xd0iQ\xe4k"
1452 b"\x84\x0b\xc1\xb7\xbc\xb1\x17\x88\xb1\xca?@\xf6\x07\xea\xe6x\xf1H12P\x0f"
1453 b"\x8a\xc9\xeauw\xe3\xbe\xaai\xa9W\xd0\x80\xcd#cb5\x99\xd8]\xa9d\x0c\xbd"
1454 b"\xa2\xdcWl\xedUG\xbf\x89yF\xf77\x81v\xbd5\x98\xbeh8\x18W\x08\xf0\x1b\x99"
1455 b"5:\x1a?rD\x96\xa1\x04\x0f\xae\xba\x85\xeb\x9d5@\xf5\x83\xd37\x83\x8ac"
1456 b"\x06\xd4\x97i\xcdt\x16S\x82k\xf6K\x01vy\x88\x91\x9b6T\xdae\r\xfd]:k\xbal"
1457 b"\xa9\xbba\xc34\xf9r\xeb}r\xdb\xc7\xdb*\x8f\x03z\xdc8h\xcc\xc9\xd3\xbcl"
1458 b"\xa5-\xcb\xeaK\xa2\xc5\x15\xc0\xe3\xc1\x86Z\xfb\xebL\xe13\xcf\x9c\xe3"
1459 b"\x1d\xc9\xed\xc2\x06\xcc\xce!\x92\xe5\xfe\x9c^\xa59w \x9bP\xa3PK\x08d"
1460 b"\xf9\xe2Z}\xa7\xbf\xed\xeb%$\x0c\x82\xb8/\xb0\x01\xa9&,\xf7qh{Q\x96)\xf2"
1461 b"q\x96\xc3\x80\xb4\x12\xb0\xba\xe6o\xf4!\xb4[\xd4\x8aw\x10\xf7t\x0c\xb3"
1462 b"\xd9\xd5\xc3`^\x81\x11??\\\xa4\x99\x85R\xd4\x8e\x83\xc9\x1eX\xbfa\xf1"
1463 b"\xac\xb0\xea\xea\xd7\xd0\xab\x18\xe2\xf2\xed\xe1\xb7\xc9\x18\xcbS\xe4>"
1464 b"\xc9\x95H\xe8\xcb\t\r%\xeb\xc7$.o\xf1\xf3R\x17\x1db\xbb\xd8U\xa5^\xccS"
1465 b"\x16\x01\x87\xf3/\x93\xd1\xf0v\xc0r\xd7\xcc\xa2Gkz\xca\x80\x0e\xfd\xd0"
1466 b"\x8b\xbb\xd2Ix\xb3\x1ey\xca-0\xe3z^\xd6\xd6\x8f_\xf1\x9dP\x9fi\xa7\xd1"
1467 b"\xe8\x90\x84\xdc\xbf\xcdky\x8e\xdc\x81\x7f\xa3\xb2+\xbf\x04\xef\xd8\\"
1468 b"\xc4\xdf\xe1\xb0\x01\xe9\x93\xe3Y\xf1\x1dY\xe8h\x81\xcf\xf1w\xcc\xb4\xef"
1469 b" \x8b|\x04\xea\x83ej\xbe\x1f\xd4z\x9c`\xd3\x1a\x92A\x06\xe5\x8f\xa9\x13"
1470 b"\t\x9e=\xfa\x1c\xe5_\x9f%v\x1bo\x11ZO\xd8\xf4\t\xddM\x16-\x04\xfc\x18<\""
1471 b"CM\xddg~b\xf6\xef\x8e\x0c\xd0\xde|\xa0'\x8a\x0c\xd6x\xae!J\xa6F\x88\x15u"
1472 b"\x008\x17\xbc7y\xb3\xd8u\xac_\x85\x8d\xe7\xc1@\x9c\xecqc\xa3#\xad\xf1"
1473 b"\x935\xb5)_\r\xec3]\x0fo]5\xd0my\x07\x9b\xee\x81\xb5\x0f\xcfK+\x00\xc0"
1474 b"\xe4b\x10\xe4\x0c\x1a \x9b\xe0\x97t\xf6\xa1\x9e\x850\xba\x0c\x9a\x8d\xc8"
1475 b"\x8f\x07\xd7\xae\xc8\xf9+i\xdc\xb9k\xb0>f\x19\xb8\r\xa8\xf8\x1f$\xa5{p"
1476 b"\xc6\x880\xce\xdb\xcf\xca_\x86\xac\x88h6\x8bZ%'\xd0\n\xbf\x0f\x9c\"\xba"
1477 b"\xe5\x86\x9f\x0f7X=mNX[\xcc\x19FU\xc9\x860\xbc\x90a+* \xae_$\x03\x1e\xd3"
1478 b"\xcd_\xa0\x9c\xde\xaf46q\xa5\xc9\x92\xd7\xca\xe3`\x9d\x85}\xb4\xff\xb3"
1479 b"\x83\xfb\xb6\xca\xae`\x0bw\x7f\xfc\xd8\xacVe\x19\xc8\x17\x0bZ\xad\x88"
1480 b"\xeb#\x97\x03\x13\xb1d\x0f{\x0c\x04w\x07\r\x97\xbd\xd6\xc1\xc3B:\x95\x08"
1481 b"^\x10V\xaeaH\x02\xd9\xe3\n\\\x01X\xf6\x9c\x8a\x06u#%\xbe*\xa1\x18v\x85"
1482 b"\xec!\t4\x00\x00\x00"
1483)
1484
1485FILTERS_RAW_4 = [{"id": lzma.FILTER_DELTA, "dist": 4},
1486 {"id": lzma.FILTER_X86, "start_offset": 0x40},
1487 {"id": lzma.FILTER_LZMA2, "preset": 4, "lc": 2}]
1488COMPRESSED_RAW_4 = (
1489 b"\xe0\x07\x80\x06\x0e\\\x00\x05\x14\x07bW\xaah\xdd\x10\xdc'\xd6\x90,\xc6v"
1490 b"Jq \x14l\xb7\x83xB\x0b\x97f=&fx\xba\n>Tn\xbf\x8f\xfb\x1dF\xca\xc3v_\xca?"
1491 b"\xfbV<\x92#\xd4w\xa6\x8a\xeb\xf6\x03\xc0\x01\x94\xd8\x9e\x13\x12\x98\xd1"
1492 b"*\xfa]c\xe8\x1e~\xaf\xb5]Eg\xfb\x9e\x01\"8\xb2\x90\x06=~\xe9\x91W\xcd"
1493 b"\xecD\x12\xc7\xfa\xe1\x91\x06\xc7\x99\xb9\xe3\x901\x87\x19u\x0f\x869\xff"
1494 b"\xc1\xb0hw|\xb0\xdcl\xcck\xb16o7\x85\xee{Y_b\xbf\xbc$\xf3=\x8d\x8bw\xe5Z"
1495 b"\x08@\xc4kmE\xad\xfb\xf6*\xd8\xad\xa1\xfb\xc5{\xdej,)\x1emB\x1f<\xaeca"
1496 b"\x80(\xee\x07 \xdf\xe9\xf8\xeb\x0e-\x97\x86\x90c\xf9\xea'B\xf7`\xd7\xb0"
1497 b"\x92\xbd\xa0\x82]\xbd\x0e\x0eB\x19\xdc\x96\xc6\x19\xd86D\xf0\xd5\x831"
1498 b"\x03\xb7\x1c\xf7&5\x1a\x8f PZ&j\xf8\x98\x1bo\xcc\x86\x9bS\xd3\xa5\xcdu"
1499 b"\xf9$\xcc\x97o\xe5V~\xfb\x97\xb5\x0b\x17\x9c\xfdxW\x10\xfep4\x80\xdaHDY"
1500 b"\xfa)\xfet\xb5\"\xd4\xd3F\x81\xf4\x13\x1f\xec\xdf\xa5\x13\xfc\"\x91x\xb7"
1501 b"\x99\xce\xc8\x92\n\xeb[\x10l*Y\xd8\xb1@\x06\xc8o\x8d7r\xebu\xfd5\x0e\x7f"
1502 b"\xf1$U{\t}\x1fQ\xcfxN\x9d\x9fXX\xe9`\x83\xc1\x06\xf4\x87v-f\x11\xdb/\\"
1503 b"\x06\xff\xd7)B\xf3g\x06\x88#2\x1eB244\x7f4q\t\xc893?mPX\x95\xa6a\xfb)d"
1504 b"\x9b\xfc\x98\x9aj\x04\xae\x9b\x9d\x19w\xba\xf92\xfaA\x11\\\x17\x97C3\xa4"
1505 b"\xbc!\x88\xcdo[\xec:\x030\x91.\x85\xe0@\\4\x16\x12\x9d\xcaJv\x97\xb04"
1506 b"\xack\xcbkf\xa3ss\xfc\x16^\x8ce\x85a\xa5=&\xecr\xb3p\xd1E\xd5\x80y\xc7"
1507 b"\xda\xf6\xfek\xbcT\xbfH\xee\x15o\xc5\x8c\x830\xec\x1d\x01\xae\x0c-e\\"
1508 b"\x91\x90\x94\xb2\xf8\x88\x91\xe8\x0b\xae\xa7>\x98\xf6\x9ck\xd2\xc6\x08"
1509 b"\xe6\xab\t\x98\xf2!\xa0\x8c^\xacqA\x99<\x1cEG\x97\xc8\xf1\xb6\xb9\x82"
1510 b"\x8d\xf7\x08s\x98a\xff\xe3\xcc\x92\x0e\xd2\xb6U\xd7\xd9\x86\x7fa\xe5\x1c"
1511 b"\x8dTG@\t\x1e\x0e7*\xfc\xde\xbc]6N\xf7\xf1\x84\x9e\x9f\xcf\xe9\x1e\xb5'"
1512 b"\xf4<\xdf\x99sq\xd0\x9d\xbd\x99\x0b\xb4%p4\xbf{\xbb\x8a\xd2\x0b\xbc=M"
1513 b"\x94H:\xf5\xa8\xd6\xa4\xc90\xc2D\xb9\xd3\xa8\xb0S\x87 `\xa2\xeb\xf3W\xce"
1514 b" 7\xf9N#\r\xe6\xbe\t\x9d\xe7\x811\xf9\x10\xc1\xc2\x14\xf6\xfc\xcba\xb7"
1515 b"\xb1\x7f\x95l\xe4\tjA\xec:\x10\xe5\xfe\xc2\\=D\xe2\x0c\x0b3]\xf7\xc1\xf7"
1516 b"\xbceZ\xb1A\xea\x16\xe5\xfddgFQ\xed\xaf\x04\xa3\xd3\xf8\xa2q\x19B\xd4r"
1517 b"\xc5\x0c\x9a\x14\x94\xea\x91\xc4o\xe4\xbb\xb4\x99\xf4@\xd1\xe6\x0c\xe3"
1518 b"\xc6d\xa0Q\n\xf2/\xd8\xb8S5\x8a\x18:\xb5g\xac\x95D\xce\x17\x07\xd4z\xda"
1519 b"\x90\xe65\x07\x19H!\t\xfdu\x16\x8e\x0eR\x19\xf4\x8cl\x0c\xf9Q\xf1\x80"
1520 b"\xe3\xbf\xd7O\xf8\x8c\x18\x0b\x9c\xf1\x1fb\xe1\tR\xb2\xf1\xe1A\xea \xcf-"
1521 b"IGE\xf1\x14\x98$\x83\x15\xc9\xd8j\xbf\x19\x0f\xd5\xd1\xaa\xb3\xf3\xa5I2s"
1522 b"\x8d\x145\xca\xd5\xd93\x9c\xb8D0\xe6\xaa%\xd0\xc0P}JO^h\x8e\x08\xadlV."
1523 b"\x18\x88\x13\x05o\xb0\x07\xeaw\xe0\xb6\xa4\xd5*\xe4r\xef\x07G+\xc1\xbei["
1524 b"w\xe8\xab@_\xef\x15y\xe5\x12\xc9W\x1b.\xad\x85-\xc2\xf7\xe3mU6g\x8eSA"
1525 b"\x01(\xd3\xdb\x16\x13=\xde\x92\xf9,D\xb8\x8a\xb2\xb4\xc9\xc3\xefnE\xe8\\"
1526 b"\xa6\xe2Y\xd2\xcf\xcb\x8c\xb6\xd5\xe9\x1d\x1e\x9a\x8b~\xe2\xa6\rE\x84uV"
1527 b"\xed\xc6\x99\xddm<\x10[\x0fu\x1f\xc1\x1d1\n\xcfw\xb2%!\xf0[\xce\x87\x83B"
1528 b"\x08\xaa,\x08%d\xcef\x94\"\xd9g.\xc83\xcbXY+4\xec\x85qA\n\x1d=9\xf0*\xb1"
1529 b"\x1f/\xf3s\xd61b\x7f@\xfb\x9d\xe3FQ\\\xbd\x82\x1e\x00\xf3\xce\xd3\xe1"
1530 b"\xca,E\xfd7[\xab\xb6\xb7\xac!mA}\xbd\x9d3R5\x9cF\xabH\xeb\x92)cc\x13\xd0"
1531 b"\xbd\xee\xe9n{\x1dIJB\xa5\xeb\x11\xe8`w&`\x8b}@Oxe\t\x8a\x07\x02\x95\xf2"
1532 b"\xed\xda|\xb1e\xbe\xaa\xbbg\x19@\xe1Y\x878\x84\x0f\x8c\xe3\xc98\xf2\x9e"
1533 b"\xd5N\xb5J\xef\xab!\xe2\x8dq\xe1\xe5q\xc5\xee\x11W\xb7\xe4k*\x027\xa0"
1534 b"\xa3J\xf4\xd8m\xd0q\x94\xcb\x07\n:\xb6`.\xe4\x9c\x15+\xc0)\xde\x80X\xd4"
1535 b"\xcfQm\x01\xc2cP\x1cA\x85'\xc9\xac\x8b\xe6\xb2)\xe6\x84t\x1c\x92\xe4Z"
1536 b"\x1cR\xb0\x9e\x96\xd1\xfb\x1c\xa6\x8b\xcb`\x10\x12]\xf2gR\x9bFT\xe0\xc8H"
1537 b"S\xfb\xac<\x04\xc7\xc1\xe8\xedP\xf4\x16\xdb\xc0\xd7e\xc2\x17J^\x1f\xab"
1538 b"\xff[\x08\x19\xb4\xf5\xfb\x19\xb4\x04\xe5c~']\xcb\xc2A\xec\x90\xd0\xed"
1539 b"\x06,\xc5K{\x86\x03\xb1\xcdMx\xdeQ\x8c3\xf9\x8a\xea=\x89\xaba\xd2\xc89a"
1540 b"\xd72\xf0\xc3\x19\x8a\xdfs\xd4\xfd\xbb\x81b\xeaE\"\xd8\xf4d\x0cD\xf7IJ!"
1541 b"\xe5d\xbbG\xe9\xcam\xaa\x0f_r\x95\x91NBq\xcaP\xce\xa7\xa9\xb5\x10\x94eP!"
1542 b"|\x856\xcd\xbfIir\xb8e\x9bjP\x97q\xabwS7\x1a\x0ehM\xe7\xca\x86?\xdeP}y~"
1543 b"\x0f\x95I\xfc\x13\xe1<Q\x1b\x868\x1d\x11\xdf\x94\xf4\x82>r\xa9k\x88\xcb"
1544 b"\xfd\xc3v\xe2\xb9\x8a\x02\x8eq\x92I\xf8\xf6\xf1\x03s\x9b\xb8\xe3\"\xe3"
1545 b"\xa9\xa5>D\xb8\x96;\xe7\x92\xd133\xe8\xdd'e\xc9.\xdc;\x17\x1f\xf5H\x13q"
1546 b"\xa4W\x0c\xdb~\x98\x01\xeb\xdf\xe32\x13\x0f\xddx\n6\xa0\t\x10\xb6\xbb"
1547 b"\xb0\xc3\x18\xb6;\x9fj[\xd9\xd5\xc9\x06\x8a\x87\xcd\xe5\xee\xfc\x9c-%@"
1548 b"\xee\xe0\xeb\xd2\xe3\xe8\xfb\xc0\x122\\\xc7\xaf\xc2\xa1Oth\xb3\x8f\x82"
1549 b"\xb3\x18\xa8\x07\xd5\xee_\xbe\xe0\x1cA\x1e_\r\x9a\xb0\x17W&\xa2D\x91\x94"
1550 b"\x1a\xb2\xef\xf2\xdc\x85;X\xb0,\xeb>-7S\xe5\xca\x07)\x1fp\x7f\xcaQBL\xca"
1551 b"\xf3\xb9d\xfc\xb5su\xb0\xc8\x95\x90\xeb*)\xa0v\xe4\x9a{FW\xf4l\xde\xcdj"
1552 b"\x00"
1553)
1554
1555
1556def test_main():
1557 run_unittest(
1558 CompressorDecompressorTestCase,
1559 CompressDecompressFunctionTestCase,
1560 FileTestCase,
Nadeem Vawdae8604042012-06-04 23:38:12 +02001561 OpenTestCase,
Nadeem Vawda3ff069e2011-11-30 00:25:06 +02001562 MiscellaneousTestCase,
1563 )
1564
1565if __name__ == "__main__":
1566 test_main()