aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-02-08 19:21:28 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-02-08 19:21:28 +0100
commit482235a8229261fa905f73ce167982bca57ab3e6 (patch)
treedbe9d6623979c2b82eebe4abea96b097b5f609de /test
parent9c26a5ef759b010d8cf4384b0515cc188b885d81 (diff)
downloadbsie-482235a8229261fa905f73ce167982bca57ab3e6.tar.gz
bsie-482235a8229261fa905f73ce167982bca57ab3e6.tar.bz2
bsie-482235a8229261fa905f73ce167982bca57ab3e6.zip
preview reader
Diffstat (limited to 'test')
-rw-r--r--test/reader/preview/__init__.py0
-rw-r--r--test/reader/preview/invalid.foo0
-rw-r--r--test/reader/preview/invalid.jpg0
-rw-r--r--test/reader/preview/load_nef.py28
-rw-r--r--test/reader/preview/test_pg.py82
-rw-r--r--test/reader/preview/test_pillow.py50
-rw-r--r--test/reader/preview/test_preview.py77
-rw-r--r--test/reader/preview/test_rawpy.py59
-rw-r--r--test/reader/preview/test_utils.py44
-rw-r--r--test/reader/preview/testfile.pdfbin0 -> 7295 bytes
-rw-r--r--test/reader/preview/testimage.jpgbin0 -> 6476 bytes
11 files changed, 340 insertions, 0 deletions
diff --git a/test/reader/preview/__init__.py b/test/reader/preview/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/reader/preview/__init__.py
diff --git a/test/reader/preview/invalid.foo b/test/reader/preview/invalid.foo
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/reader/preview/invalid.foo
diff --git a/test/reader/preview/invalid.jpg b/test/reader/preview/invalid.jpg
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/reader/preview/invalid.jpg
diff --git a/test/reader/preview/load_nef.py b/test/reader/preview/load_nef.py
new file mode 100644
index 0000000..5ba0adc
--- /dev/null
+++ b/test/reader/preview/load_nef.py
@@ -0,0 +1,28 @@
+"""
+
+Part of the bsie test suite.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# standard imports
+import os
+
+# external imports
+import requests
+
+# constants
+IMAGE_URL = 'http://igsor.net/eik7AhvohghaeN5.nef'
+
+## code ##
+
+def get():
+ """Download a raw test image."""
+ target = os.path.join(os.path.dirname(__file__), 'testimage.nef')
+ if not os.path.exists(target):
+ with open(target, 'wb') as ofile:
+ ans = requests.get(IMAGE_URL)
+ ofile.write(ans.content)
+
+
+
+## EOF ##
diff --git a/test/reader/preview/test_pg.py b/test/reader/preview/test_pg.py
new file mode 100644
index 0000000..e492cfa
--- /dev/null
+++ b/test/reader/preview/test_pg.py
@@ -0,0 +1,82 @@
+"""
+
+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 os
+import shutil
+import tempfile
+import unittest
+
+# external imports
+import PIL.Image
+
+# bsie imports
+from bsie.utils import errors
+
+# objects to test
+from bsie.reader.preview._pg import PreviewGeneratorReader
+
+
+## code ##
+
+class TestPreviewGeneratorReader(unittest.TestCase):
+ def test_call(self):
+ rdr = PreviewGeneratorReader()
+ # inexistent file raises a ReaderError
+ self.assertRaises(errors.ReaderError, rdr,
+ os.path.join(os.path.dirname(__file__), 'missing.jpg'))
+ # unsupported file type raises an UnsupportedFileFormatError
+ self.assertRaises(errors.UnsupportedFileFormatError, rdr,
+ os.path.join(os.path.dirname(__file__), 'invalid.foo'))
+ # invalid file raises a ReaderError
+ self.assertRaises(errors.ReaderError,
+ rdr(os.path.join(os.path.dirname(__file__), 'invalid.jpg')), 100)
+
+ # proper file produces a generator
+ gen = rdr(os.path.join(os.path.dirname(__file__), 'testimage.jpg'))
+ self.assertIsInstance(gen, partial)
+ # generator produces an image
+ img = gen(10)
+ self.assertIsInstance(img, PIL.Image.Image)
+ self.assertEqual(img.size, (10, 10))
+ self.assertEqual(sum(img.getdata()), 0)
+ # cleanup
+ img.close()
+
+ # preview generator can also extract data from non-image files
+ gen = rdr(os.path.join(os.path.dirname(__file__), 'testfile.pdf'))
+ self.assertIsInstance(gen, partial)
+ # generator produces an image
+ img = gen(10)
+ self.assertIsInstance(img, PIL.Image.Image)
+ self.assertEqual(img.size, (8, 10))
+ self.assertEqual(sum(img.getdata()), 20258)
+ # cleanup
+ img.close()
+
+ # can define a cache dir
+ pg_dir = tempfile.mkdtemp(prefix='bsie-test')
+ self.assertTrue(os.path.exists(pg_dir))
+ rdr = PreviewGeneratorReader(cache=pg_dir)
+ gen = rdr(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(img.getdata()), 0)
+ img.close()
+ del rdr
+ # cache dir still exists after instance deletion
+ self.assertTrue(os.path.exists(pg_dir))
+ shutil.rmtree(pg_dir, ignore_errors=True)
+
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##
diff --git a/test/reader/preview/test_pillow.py b/test/reader/preview/test_pillow.py
new file mode 100644
index 0000000..ca38d89
--- /dev/null
+++ b/test/reader/preview/test_pillow.py
@@ -0,0 +1,50 @@
+"""
+
+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 os
+import unittest
+
+# external imports
+import PIL.Image
+
+# bsie imports
+from bsie.utils import errors
+
+# objects to test
+from bsie.reader.preview._pillow import PillowPreviewReader
+
+
+## code ##
+
+class TestPillowPreviewReader(unittest.TestCase):
+ def test_call(self):
+ rdr = PillowPreviewReader()
+ # raises exception when image cannot be read
+ self.assertRaises(errors.ReaderError, rdr,
+ os.path.join(os.path.dirname(__file__), 'invalid.jpg'))
+ # raises exception when image has invalid type
+ self.assertRaises(errors.UnsupportedFileFormatError, rdr,
+ os.path.join(os.path.dirname(__file__), 'invalid.foo'))
+ # proper file produces a generator
+ gen = rdr(os.path.join(os.path.dirname(__file__), 'testimage.jpg'))
+ self.assertIsInstance(gen, partial)
+ # generator produces an image
+ 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)
+ # cleanup
+ img.close()
+
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##
diff --git a/test/reader/preview/test_preview.py b/test/reader/preview/test_preview.py
new file mode 100644
index 0000000..fde610f
--- /dev/null
+++ b/test/reader/preview/test_preview.py
@@ -0,0 +1,77 @@
+"""
+
+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 ##
diff --git a/test/reader/preview/test_rawpy.py b/test/reader/preview/test_rawpy.py
new file mode 100644
index 0000000..ed35f53
--- /dev/null
+++ b/test/reader/preview/test_rawpy.py
@@ -0,0 +1,59 @@
+"""
+
+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._rawpy import RawpyPreviewReader
+
+
+## code ##
+
+class TestRawpyPreviewReader(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_call(self):
+ rdr = RawpyPreviewReader()
+ # raises exception when image cannot be read
+ self.assertRaises(errors.ReaderError, rdr,
+ os.path.join(os.path.dirname(__file__), 'invalid.nef'))
+ # raises exception when image has invalid type
+ self.assertRaises(errors.UnsupportedFileFormatError, rdr,
+ os.path.join(os.path.dirname(__file__), 'invalid.jpg'))
+ self.assertRaises(errors.UnsupportedFileFormatError, rdr,
+ os.path.join(os.path.dirname(__file__), 'invalid.foo'))
+ # proper file produces a generator
+ gen = rdr(os.path.join(os.path.dirname(__file__), 'testimage.nef'))
+ self.assertIsInstance(gen, partial)
+ # generator produces an image
+ img = gen(10)
+ self.assertIsInstance(img, PIL.Image.Image)
+ self.assertEqual(img.size, (10, 7))
+ self.assertEqual(sum(band for pix in img.getdata() for band in pix), 15269)
+ # cleanup
+ img.close()
+
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##
diff --git a/test/reader/preview/test_utils.py b/test/reader/preview/test_utils.py
new file mode 100644
index 0000000..c10c38c
--- /dev/null
+++ b/test/reader/preview/test_utils.py
@@ -0,0 +1,44 @@
+"""
+
+Part of the bsie test suite.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# standard imports
+import os
+import unittest
+
+# external imports
+import PIL.Image
+
+# objects to test
+from bsie.reader.preview.utils import resize
+
+
+## code ##
+
+class TestUtils(unittest.TestCase):
+
+ def test_resize(self):
+ img = PIL.Image.open(os.path.join(os.path.dirname(__file__), 'testimage.jpg'))
+ landscape = img.resize((100, 80))
+ portrait = img.resize((80, 100))
+ self.assertEqual(img.size, (100, 100))
+ self.assertEqual(landscape.size, (100, 80))
+ self.assertEqual(portrait.size, (80, 100))
+ # resize can downscale
+ self.assertEqual(resize(img, 10).size, (10, 10))
+ self.assertEqual(resize(img, 20).size, (20, 20))
+ # resize can upscale
+ self.assertEqual(resize(img, 200).size, (200, 200))
+ # aspect ratio is preserved
+ self.assertEqual(resize(landscape, 10).size, (10, 8))
+ self.assertEqual(resize(portrait, 10).size, (8, 10))
+
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##
diff --git a/test/reader/preview/testfile.pdf b/test/reader/preview/testfile.pdf
new file mode 100644
index 0000000..592d448
--- /dev/null
+++ b/test/reader/preview/testfile.pdf
Binary files differ
diff --git a/test/reader/preview/testimage.jpg b/test/reader/preview/testimage.jpg
new file mode 100644
index 0000000..4c2aca5
--- /dev/null
+++ b/test/reader/preview/testimage.jpg
Binary files differ