summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorNadeem Vawda <nadeem.vawda@gmail.com>2012-05-06 21:01:27 (GMT)
committerNadeem Vawda <nadeem.vawda@gmail.com>2012-05-06 21:01:27 (GMT)
commitf55b329edc911dde495abfcfe0b052040d101cc5 (patch)
treecabec80d7b4c048349354b6f58b89aa040a3d757 /Lib
parent75d5d8c78157f24f07b3fc122b7aeb07e0eea8ec (diff)
downloadcpython-f55b329edc911dde495abfcfe0b052040d101cc5.zip
cpython-f55b329edc911dde495abfcfe0b052040d101cc5.tar.gz
cpython-f55b329edc911dde495abfcfe0b052040d101cc5.tar.bz2
Add lzma.{encode,decode}_filter_properties().
Diffstat (limited to 'Lib')
-rw-r--r--Lib/lzma.py1
-rw-r--r--Lib/test/test_lzma.py43
2 files changed, 44 insertions, 0 deletions
diff --git a/Lib/lzma.py b/Lib/lzma.py
index 3786993..5adf51f 100644
--- a/Lib/lzma.py
+++ b/Lib/lzma.py
@@ -19,6 +19,7 @@ __all__ = [
"LZMACompressor", "LZMADecompressor", "LZMAFile", "LZMAError",
"compress", "decompress", "check_is_supported",
+ "encode_filter_properties", "decode_filter_properties",
]
import io
diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py
index ffde557..cc08bad 100644
--- a/Lib/test/test_lzma.py
+++ b/Lib/test/test_lzma.py
@@ -944,6 +944,49 @@ class MiscellaneousTestCase(unittest.TestCase):
# This value should not be a valid check ID.
self.assertFalse(lzma.check_is_supported(lzma.CHECK_UNKNOWN))
+ def test_encode_filter_properties(self):
+ with self.assertRaises(TypeError):
+ lzma.encode_filter_properties(b"not a dict")
+ with self.assertRaises(ValueError):
+ lzma.encode_filter_properties({"id": 0x100})
+ with self.assertRaises(ValueError):
+ lzma.encode_filter_properties({"id": lzma.FILTER_LZMA2, "junk": 12})
+ with self.assertRaises(lzma.LZMAError):
+ lzma.encode_filter_properties({"id": lzma.FILTER_DELTA,
+ "dist": 9001})
+
+ # Test with parameters used by zipfile module.
+ props = lzma.encode_filter_properties({
+ "id": lzma.FILTER_LZMA1,
+ "pb": 2,
+ "lp": 0,
+ "lc": 3,
+ "dict_size": 8 << 20,
+ })
+ self.assertEqual(props, b"]\x00\x00\x80\x00")
+
+ def test_decode_filter_properties(self):
+ with self.assertRaises(TypeError):
+ lzma.decode_filter_properties(lzma.FILTER_X86, {"should be": bytes})
+ with self.assertRaises(lzma.LZMAError):
+ lzma.decode_filter_properties(lzma.FILTER_DELTA, b"too long")
+
+ # Test with parameters used by zipfile module.
+ filterspec = lzma.decode_filter_properties(
+ lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
+ self.assertEqual(filterspec["id"], lzma.FILTER_LZMA1)
+ self.assertEqual(filterspec["pb"], 2)
+ self.assertEqual(filterspec["lp"], 0)
+ self.assertEqual(filterspec["lc"], 3)
+ self.assertEqual(filterspec["dict_size"], 8 << 20)
+
+ def test_filter_properties_roundtrip(self):
+ spec1 = lzma.decode_filter_properties(
+ lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
+ reencoded = lzma.encode_filter_properties(spec1)
+ spec2 = lzma.decode_filter_properties(lzma.FILTER_LZMA1, reencoded)
+ self.assertEqual(spec1, spec2)
+
# Test data: