import unittest from PIL import Image, TarIO from .helper import PillowTestCase, is_pypy codecs = dir(Image.core) # Sample tar archive TEST_TAR_FILE = "Tests/images/hopper.tar" class TestFileTar(PillowTestCase): def setUp(self): if "zip_decoder" not in codecs and "jpeg_decoder" not in codecs: self.skipTest("neither jpeg nor zip support available") def test_sanity(self): for codec, test_path, format in [ ["zip_decoder", "hopper.png", "PNG"], ["jpeg_decoder", "hopper.jpg", "JPEG"], ]: if codec in codecs: with TarIO.TarIO(TEST_TAR_FILE, test_path) as tar: with Image.open(tar) as im: im.load() self.assertEqual(im.mode, "RGB") self.assertEqual(im.size, (128, 128)) self.assertEqual(im.format, format) @unittest.skipIf(is_pypy(), "Requires CPython") def test_unclosed_file(self): def open(): TarIO.TarIO(TEST_TAR_FILE, "hopper.jpg") self.assert_warning(ResourceWarning, open) def test_close(self): def open(): tar = TarIO.TarIO(TEST_TAR_FILE, "hopper.jpg") tar.close() self.assert_warning(None, open) def test_contextmanager(self): def open(): with TarIO.TarIO(TEST_TAR_FILE, "hopper.jpg"): pass self.assert_warning(None, open)