@@ -1532,6 +1532,74 @@ class Bz2StreamWriteTest(Bz2Test, StreamWriteTest):
1532
1532
class LzmaStreamWriteTest (LzmaTest , StreamWriteTest ):
1533
1533
decompressor = lzma .LZMADecompressor if lzma else None
1534
1534
1535
+ class _CompressedWriteTest (TarTest ):
1536
+ # This is not actually a standalone test.
1537
+ # It does not inherit WriteTest because it only makes sense with gz,bz2
1538
+ source = (b"And we move to Bristol where they have a special, " +
1539
+ b"Very Silly candidate" )
1540
+
1541
+ def _compressed_tar (self , compresslevel ):
1542
+ fobj = io .BytesIO ()
1543
+ with tarfile .open (tmpname , self .mode , fobj ,
1544
+ compresslevel = compresslevel ) as tarfl :
1545
+ tarfl .addfile (tarfile .TarInfo ("foo" ), io .BytesIO (self .source ))
1546
+ return fobj
1547
+
1548
+ def _test_bz2_header (self , compresslevel ):
1549
+ fobj = self ._compressed_tar (compresslevel )
1550
+ self .assertEqual (fobj .getvalue ()[0 :10 ],
1551
+ b"BZh%d1AY&SY" % compresslevel )
1552
+
1553
+ def _test_gz_header (self , compresslevel ):
1554
+ fobj = self ._compressed_tar (compresslevel )
1555
+ self .assertEqual (fobj .getvalue ()[:3 ], b"\x1f \x8b \x08 " )
1556
+
1557
+ class Bz2CompressWriteTest (Bz2Test , _CompressedWriteTest , unittest .TestCase ):
1558
+ prefix = "w:"
1559
+ def test_compression_levels (self ):
1560
+ self ._test_bz2_header (1 )
1561
+ self ._test_bz2_header (5 )
1562
+ self ._test_bz2_header (9 )
1563
+
1564
+ class Bz2CompressStreamWriteTest (Bz2Test , _CompressedWriteTest ,
1565
+ unittest .TestCase ):
1566
+ prefix = "w|"
1567
+ def test_compression_levels (self ):
1568
+ self ._test_bz2_header (1 )
1569
+ self ._test_bz2_header (5 )
1570
+ self ._test_bz2_header (9 )
1571
+
1572
+ class GzCompressWriteTest (GzipTest , _CompressedWriteTest , unittest .TestCase ):
1573
+ prefix = "w:"
1574
+ def test_compression_levels (self ):
1575
+ self ._test_gz_header (1 )
1576
+ self ._test_gz_header (5 )
1577
+ self ._test_gz_header (9 )
1578
+
1579
+ class GzCompressStreamWriteTest (GzipTest , _CompressedWriteTest ,
1580
+ unittest .TestCase ):
1581
+ prefix = "w|"
1582
+ def test_compression_levels (self ):
1583
+ self ._test_gz_header (1 )
1584
+ self ._test_gz_header (5 )
1585
+ self ._test_gz_header (9 )
1586
+
1587
+ class CompressLevelRaises (unittest .TestCase ):
1588
+ def test_compresslevel_wrong_modes (self ):
1589
+ compresslevel = 5
1590
+ fobj = io .BytesIO ()
1591
+ with self .assertRaises (TypeError ):
1592
+ tarfile .open (tmpname , "w:" , fobj , compresslevel = compresslevel )
1593
+
1594
+ def test_wrong_compresslevels (self ):
1595
+ # BZ2 checks that the compresslevel is in [1,9]. gz does not
1596
+ fobj = io .BytesIO ()
1597
+ with self .assertRaises (ValueError ):
1598
+ tarfile .open (tmpname , "w:bz2" , fobj , compresslevel = 0 )
1599
+ with self .assertRaises (ValueError ):
1600
+ tarfile .open (tmpname , "w:bz2" , fobj , compresslevel = 10 )
1601
+ with self .assertRaises (ValueError ):
1602
+ tarfile .open (tmpname , "w|bz2" , fobj , compresslevel = 10 )
1535
1603
1536
1604
class GNUWriteTest (unittest .TestCase ):
1537
1605
# This testcase checks for correct creation of GNU Longname
0 commit comments