class DeflaterDest(Dest): ''' Dest-like class, reading from a file-like object initially, but switching to a Deflater object if written to. dest = DeflaterDest(original_file) dest.read() # Reads original_file dest.write(data) # Creates a Deflater and write data there dest.read() # Re-opens the Deflater and reads from it ''' def __init__(self, orig=None, compress=True): self.mode = None self.deflater = orig self.compress = compress def read(self, length=-1): if self.mode != 'r': assert self.mode is None self.mode = 'r' return self.deflater.read(length) def write(self, data): if self.mode != 'w': from mozpack.mozjar import Deflater self.deflater = Deflater(self.compress) self.mode = 'w' self.deflater.write(data) def exists(self): return self.deflater is not None
def write(self, data): if self.mode != "w": from mozpack.mozjar import Deflater self.deflater = Deflater(self.compress) self.mode = "w" self.deflater.write(data)
def test_deflater_no_compress(self): deflater = Deflater(False) deflater.write(self.wrap(b"abc")) self.assertFalse(deflater.compressed) self.assertEqual(deflater.uncompressed_size, 3) self.assertEqual(deflater.compressed_size, deflater.uncompressed_size) self.assertEqual(deflater.compressed_data, b"abc") self.assertEqual(deflater.crc32, 0x352441C2)
def test_deflater_compress_no_gain(self): deflater = Deflater(True) deflater.write(self.wrap('abc')) self.assertFalse(deflater.compressed) self.assertEqual(deflater.uncompressed_size, 3) self.assertEqual(deflater.compressed_size, deflater.uncompressed_size) self.assertEqual(deflater.compressed_data, 'abc') self.assertEqual(deflater.crc32, 0x352441c2)
def test_deflater_empty(self): deflater = Deflater(False) self.assertFalse(deflater.compressed) self.assertEqual(deflater.uncompressed_size, 0) self.assertEqual(deflater.compressed_size, deflater.uncompressed_size) self.assertEqual(deflater.compressed_data, b"") self.assertEqual(deflater.crc32, 0)
def test_deflater_compress(self): deflater = Deflater(True) deflater.write(self.wrap(b"aaaaaaaaaaaaanopqrstuvwxyz")) self.assertTrue(deflater.compressed) self.assertEqual(deflater.uncompressed_size, 26) self.assertNotEqual(deflater.compressed_size, deflater.uncompressed_size) self.assertEqual(deflater.crc32, 0xD46B97ED) # The CRC is the same as when not compressed deflater = Deflater(False) self.assertFalse(deflater.compressed) deflater.write(self.wrap(b"aaaaaaaaaaaaanopqrstuvwxyz")) self.assertEqual(deflater.crc32, 0xD46B97ED)
def test_deflater_compress(self): deflater = Deflater(True) deflater.write(self.wrap('aaaaaaaaaaaaanopqrstuvwxyz')) self.assertTrue(deflater.compressed) self.assertEqual(deflater.uncompressed_size, 26) self.assertNotEqual(deflater.compressed_size, deflater.uncompressed_size) self.assertEqual(deflater.crc32, 0xd46b97ed) # The CRC is the same as when not compressed deflater = Deflater(False) self.assertFalse(deflater.compressed) deflater.write(self.wrap('aaaaaaaaaaaaanopqrstuvwxyz')) self.assertEqual(deflater.crc32, 0xd46b97ed)