Skip to content

Commit f2bfe2f

Browse files
committed
tests: Explicitly close handles after use
Fixes some "unclosed file" ResourceWarnings on Python 3.
1 parent 9681548 commit f2bfe2f

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

tests/test_base.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def test_version(self):
3333
self.assertTrue(isinstance(openslide.__library_version__, string))
3434

3535
def test_open_slide(self):
36-
self.assertTrue(isinstance(open_slide(file_path('boxes.tiff')),
37-
OpenSlide))
38-
self.assertTrue(isinstance(open_slide(file_path('boxes.png')),
39-
ImageSlide))
36+
with open_slide(file_path('boxes.tiff')) as osr:
37+
self.assertTrue(isinstance(osr, OpenSlide))
38+
with open_slide(file_path('boxes.png')) as osr:
39+
self.assertTrue(isinstance(osr, ImageSlide))

tests/test_imageslide.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1818
#
1919

20+
from contextlib import contextmanager
2021
from openslide import ImageSlide, OpenSlideError
2122
from PIL import Image
2223
import unittest
@@ -25,6 +26,17 @@
2526

2627
# Tests should be written to be compatible with Python 2.6 unittest.
2728

29+
@contextmanager
30+
def image_open(*args, **kwargs):
31+
img = Image.open(*args, **kwargs)
32+
try:
33+
yield img
34+
finally:
35+
if hasattr(img, 'close'):
36+
# Pillow >= 2.5.0
37+
img.close()
38+
39+
2840
class TestImageWithoutOpening(unittest.TestCase):
2941
def test_detect_format(self):
3042
self.assertTrue(
@@ -41,19 +53,19 @@ def test_open(self):
4153
lambda: ImageSlide(file_path('../setup.py')))
4254

4355
# passing PIL.Image to ImageSlide
44-
self.assertEqual(
45-
ImageSlide(Image.open(file_path('boxes.png'))).dimensions,
46-
(300, 250))
56+
with image_open(file_path('boxes.png')) as img:
57+
with ImageSlide(img) as osr:
58+
self.assertEqual(osr.dimensions, (300, 250))
4759

4860
def test_operations_on_closed_handle(self):
49-
img = Image.open(file_path('boxes.png'))
50-
osr = ImageSlide(img)
51-
osr.close()
52-
self.assertRaises(AttributeError,
53-
lambda: osr.read_region((0, 0), 0, (100, 100)))
54-
# If an Image is passed to the constructor, ImageSlide.close()
55-
# shouldn't close it
56-
self.assertEqual(img.getpixel((0, 0)), 3)
61+
with image_open(file_path('boxes.png')) as img:
62+
osr = ImageSlide(img)
63+
osr.close()
64+
self.assertRaises(AttributeError,
65+
lambda: osr.read_region((0, 0), 0, (100, 100)))
66+
# If an Image is passed to the constructor, ImageSlide.close()
67+
# shouldn't close it
68+
self.assertEqual(img.getpixel((0, 0)), 3)
5769

5870
def test_context_manager(self):
5971
osr = ImageSlide(file_path('boxes.png'))

0 commit comments

Comments
 (0)