""" Part of the bsie test suite. A copy of the license is provided with the project. Author: Matthias Baumgartner, 2022 """ # standard imports from functools import partial import importlib import os import unittest # external imports import PIL.Image # bsie imports from bsie.utils import errors # objects to test from bsie.reader.preview import Preview ## code ## class TestPreview(unittest.TestCase): def setUp(self): if __package__ is None or __package__ == '': # direct call or local discovery importlib.import_module('load_nef', __package__).get() else: # parent discovery importlib.import_module('.load_nef', __package__).get() def test_construct(self): preview = Preview() self.assertIsInstance(preview, Preview) self.assertEqual(len(preview._children), 3) def test_call(self): preview = Preview() # call raises error if file cannot be read self.assertRaises(errors.ReaderError, preview, os.path.join(os.path.dirname(__file__), 'missing.jpg')) self.assertRaises(errors.ReaderError, preview( os.path.join(os.path.dirname(__file__), 'invalid.jpg')), 10) self.assertRaises(errors.UnsupportedFileFormatError, preview, os.path.join(os.path.dirname(__file__), 'invalid.foo')) # call returns raw preview gen = preview(os.path.join(os.path.dirname(__file__), 'testimage.nef')) img = gen(10) self.assertIsInstance(img, PIL.Image.Image) self.assertEqual(img.size, (10, 8)) self.assertEqual(sum(band for pix in img.getdata() for band in pix), 25287) img.close() # call returns jpeg image gen = preview(os.path.join(os.path.dirname(__file__), 'testimage.jpg')) img = gen(10) self.assertIsInstance(img, PIL.Image.Image) self.assertEqual(img.size, (10, 10)) self.assertEqual(sum(band for pix in img.getdata() for band in pix), 0) img.close() # preview generator can also extract data from non-image files gen = preview(os.path.join(os.path.dirname(__file__), 'testfile.pdf')) img = gen(10) self.assertIsInstance(img, PIL.Image.Image) self.assertEqual(img.size, (8, 10)) self.assertEqual(sum(img.getdata()), 20258) img.close() ## main ## if __name__ == '__main__': unittest.main() ## EOF ##