From 67c1258cfcb9dc23b000c0fe572da59f0cf76217 Mon Sep 17 00:00:00 2001 From: Luis G Date: Sun, 19 Jun 2016 21:39:31 -0300 Subject: [PATCH 1/4] Expose registered file extensions This adds a new method in Image (registered_extensions) that exposes the internal EXTENSION dictionary to consumers of the library --- PIL/Image.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/PIL/Image.py b/PIL/Image.py index f49834e5b47..e368ef18779 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2512,6 +2512,16 @@ def register_extension(id, extension): EXTENSION[extension.lower()] = id.upper() +def registered_extensions(): + """ + Returns a dictionary containing all file extensions belonging + to registered plugins + """ + if not bool(EXTENSION): + init() + return EXTENSION + + # -------------------------------------------------------------------- # Simple display support. User code may override this. From dad59715618926a405eff12c828b2c704053ff18 Mon Sep 17 00:00:00 2001 From: Luis G Date: Mon, 20 Jun 2016 12:36:26 -0300 Subject: [PATCH 2/4] Add unit tests Add unit tests for registered_extensions --- Tests/test_image.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Tests/test_image.py b/Tests/test_image.py index f1457a85bb6..85d1f3f5c37 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -196,6 +196,24 @@ def test_alpha_composite(self): img_colors = sorted(img.getcolors()) self.assertEqual(img_colors, expected_colors) + def test_registered_extensions_uninitialized(self): + # Act + ext = Image.registered_extensions() + + # Assert + self.assertEqual(bool(ext), True) + + def test_registered_extensions(self): + # Arrange + # Open an image to trigger plugin registration + Image.open('Tests/images/rgb.jpg') + + # Act + ext = Image.registered_extensions() + + # Assert + self.assertEqual(bool(ext), True) + def test_effect_mandelbrot(self): # Arrange size = (512, 512) From 2a93cdb698fea78a3fec9b3bace5244178db1360 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 7 Jan 2017 11:35:09 +1100 Subject: [PATCH 3/4] Simplified assertEqual checks to assertTrue --- Tests/test_image.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 85d1f3f5c37..a02596b2072 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -201,7 +201,7 @@ def test_registered_extensions_uninitialized(self): ext = Image.registered_extensions() # Assert - self.assertEqual(bool(ext), True) + self.assertTrue(bool(ext)) def test_registered_extensions(self): # Arrange @@ -212,7 +212,7 @@ def test_registered_extensions(self): ext = Image.registered_extensions() # Assert - self.assertEqual(bool(ext), True) + self.assertTrue(bool(ext)) def test_effect_mandelbrot(self): # Arrange From 89742225bfade3df3f7cc2d755916c75ff7aad3c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 7 Jan 2017 13:20:16 +1100 Subject: [PATCH 4/4] Fixed test coverage --- Tests/test_image.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index a02596b2072..70bc638773c 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -197,11 +197,20 @@ def test_alpha_composite(self): self.assertEqual(img_colors, expected_colors) def test_registered_extensions_uninitialized(self): + # Arrange + Image._initialized = 0 + extension = Image.EXTENSION + Image.EXTENSION = {} + # Act - ext = Image.registered_extensions() + Image.registered_extensions() # Assert - self.assertTrue(bool(ext)) + self.assertEqual(Image._initialized, 2) + + # Restore the original state and assert + Image.EXTENSION = extension + self.assertTrue(Image.EXTENSION) def test_registered_extensions(self): # Arrange @@ -209,10 +218,12 @@ def test_registered_extensions(self): Image.open('Tests/images/rgb.jpg') # Act - ext = Image.registered_extensions() + extensions = Image.registered_extensions() # Assert - self.assertTrue(bool(ext)) + self.assertTrue(bool(extensions)) + for ext in ['.cur', '.icns', '.tif', '.tiff']: + self.assertIn(ext, extensions) def test_effect_mandelbrot(self): # Arrange