| import imghdr | 
 | import io | 
 | import sys | 
 | import unittest | 
 | from test.test_support import findfile, TESTFN, unlink, run_unittest | 
 |  | 
 | TEST_FILES = ( | 
 |     ('python.png', 'png'), | 
 |     ('python.gif', 'gif'), | 
 |     ('python.bmp', 'bmp'), | 
 |     ('python.ppm', 'ppm'), | 
 |     ('python.pgm', 'pgm'), | 
 |     ('python.pbm', 'pbm'), | 
 |     ('python.jpg', 'jpeg'), | 
 |     ('python.ras', 'rast'), | 
 |     ('python.sgi', 'rgb'), | 
 |     ('python.tiff', 'tiff'), | 
 |     ('python.xbm', 'xbm') | 
 | ) | 
 |  | 
 | class UnseekableIO(io.FileIO): | 
 |     def tell(self): | 
 |         raise io.UnsupportedOperation | 
 |  | 
 |     def seek(self, *args, **kwargs): | 
 |         raise io.UnsupportedOperation | 
 |  | 
 | class TestImghdr(unittest.TestCase): | 
 |     @classmethod | 
 |     def setUpClass(cls): | 
 |         cls.testfile = findfile('python.png', subdir='imghdrdata') | 
 |         with open(cls.testfile, 'rb') as stream: | 
 |             cls.testdata = stream.read() | 
 |  | 
 |     def tearDown(self): | 
 |         unlink(TESTFN) | 
 |  | 
 |     def test_data(self): | 
 |         for filename, expected in TEST_FILES: | 
 |             filename = findfile(filename, subdir='imghdrdata') | 
 |             self.assertEqual(imghdr.what(filename), expected) | 
 |             ufilename = filename.decode(sys.getfilesystemencoding()) | 
 |             self.assertEqual(imghdr.what(ufilename), expected) | 
 |             with open(filename, 'rb') as stream: | 
 |                 self.assertEqual(imghdr.what(stream), expected) | 
 |             with open(filename, 'rb') as stream: | 
 |                 data = stream.read() | 
 |             self.assertEqual(imghdr.what(None, data), expected) | 
 |  | 
 |     def test_register_test(self): | 
 |         def test_jumbo(h, file): | 
 |             if h.startswith(b'eggs'): | 
 |                 return 'ham' | 
 |         imghdr.tests.append(test_jumbo) | 
 |         self.addCleanup(imghdr.tests.pop) | 
 |         self.assertEqual(imghdr.what(None, b'eggs'), 'ham') | 
 |  | 
 |     def test_file_pos(self): | 
 |         with open(TESTFN, 'wb') as stream: | 
 |             stream.write(b'ababagalamaga') | 
 |             pos = stream.tell() | 
 |             stream.write(self.testdata) | 
 |         with open(TESTFN, 'rb') as stream: | 
 |             stream.seek(pos) | 
 |             self.assertEqual(imghdr.what(stream), 'png') | 
 |             self.assertEqual(stream.tell(), pos) | 
 |  | 
 |     def test_bad_args(self): | 
 |         with self.assertRaises(TypeError): | 
 |             imghdr.what() | 
 |         with self.assertRaises(AttributeError): | 
 |             imghdr.what(None) | 
 |         with self.assertRaises(TypeError): | 
 |             imghdr.what(self.testfile, 1) | 
 |         with open(self.testfile, 'rb') as f: | 
 |             with self.assertRaises(AttributeError): | 
 |                 imghdr.what(f.fileno()) | 
 |  | 
 |     def test_invalid_headers(self): | 
 |         for header in (b'\211PN\r\n', | 
 |                        b'\001\331', | 
 |                        b'\x59\xA6', | 
 |                        b'cutecat', | 
 |                        b'000000JFI', | 
 |                        b'GIF80'): | 
 |             self.assertIsNone(imghdr.what(None, header)) | 
 |  | 
 |     def test_missing_file(self): | 
 |         with self.assertRaises(IOError): | 
 |             imghdr.what('missing') | 
 |  | 
 |     def test_closed_file(self): | 
 |         stream = open(self.testfile, 'rb') | 
 |         stream.close() | 
 |         with self.assertRaises(ValueError) as cm: | 
 |             imghdr.what(stream) | 
 |         stream = io.BytesIO(self.testdata) | 
 |         stream.close() | 
 |         with self.assertRaises(ValueError) as cm: | 
 |             imghdr.what(stream) | 
 |  | 
 |     def test_unseekable(self): | 
 |         with open(TESTFN, 'wb') as stream: | 
 |             stream.write(self.testdata) | 
 |         with UnseekableIO(TESTFN, 'rb') as stream: | 
 |             with self.assertRaises(io.UnsupportedOperation): | 
 |                 imghdr.what(stream) | 
 |  | 
 |     def test_output_stream(self): | 
 |         with open(TESTFN, 'wb') as stream: | 
 |             stream.write(self.testdata) | 
 |             stream.seek(0) | 
 |             with self.assertRaises(IOError) as cm: | 
 |                 imghdr.what(stream) | 
 |  | 
 | def test_main(): | 
 |     run_unittest(TestImghdr) | 
 |  | 
 | if __name__ == '__main__': | 
 |     test_main() |