diff options
Diffstat (limited to 'test/reader')
25 files changed, 698 insertions, 13 deletions
diff --git a/test/reader/image/__init__.py b/test/reader/image/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/reader/image/__init__.py diff --git a/test/reader/image/load_nef.py b/test/reader/image/load_nef.py new file mode 100644 index 0000000..02be470 --- /dev/null +++ b/test/reader/image/load_nef.py @@ -0,0 +1,23 @@ + +# 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/image/test_image.py b/test/reader/image/test_image.py new file mode 100644 index 0000000..ee9b8f9 --- /dev/null +++ b/test/reader/image/test_image.py @@ -0,0 +1,49 @@ + +# standard imports +import importlib +import os +import unittest + +# bsie imports +from bsie.utils import errors + +# objects to test +from bsie.reader.image import Image + + +## code ## + +class TestImage(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): + image = Image({}) + self.assertIsInstance(image, Image) + self.assertEqual(len(image._children), 2) + + def test_call(self): + image = Image({}) + # call returns raw image + img = image(os.path.join(os.path.dirname(__file__), 'testimage.nef')) + self.assertEqual(img.size, (6016, 4016)) # FIXME: change when image was replaced + img.close() + # call returns jpeg image + img = image(os.path.join(os.path.dirname(__file__), 'testimage.jpg')) + self.assertEqual(img.size, (1, 1)) + img.close() + # call raises error if file cannot be read + self.assertRaises(errors.ReaderError, image, + os.path.join(os.path.dirname(__file__), 'invalid.nef')) + self.assertRaises(errors.ReaderError, image, + os.path.join(os.path.dirname(__file__), 'invalid.jpg')) + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/image/test_pillow.py b/test/reader/image/test_pillow.py new file mode 100644 index 0000000..2cff768 --- /dev/null +++ b/test/reader/image/test_pillow.py @@ -0,0 +1,39 @@ + +# standard imports +import os +import unittest + +# external imports +import PIL.Image + +# bsie imports +from bsie.utils import errors + +# objects to test +from bsie.reader.image._pillow import PillowImage + + +## code ## + +class TestPillowImage(unittest.TestCase): + def test_call(self): + rdr = PillowImage() + # returns PIL image + img = rdr(os.path.join(os.path.dirname(__file__), 'testimage.jpg')) + self.assertEqual(img.size, (1, 1)) + self.assertEqual(img.getdata().getpixel((0, 0)), (0, 0, 0)) + img.close() + # raises exception when image cannot be read + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.jpg')) + # NOTE: PIL can actually read raw image files (returns the thumbnail) + #self.assertRaises(errors.ReaderError, rdr, + # os.path.join(os.path.dirname(__file__), 'testimage.nef')) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/image/test_raw_image.py b/test/reader/image/test_raw_image.py new file mode 100644 index 0000000..3b240d0 --- /dev/null +++ b/test/reader/image/test_raw_image.py @@ -0,0 +1,48 @@ + +# standard imports +import importlib +import os +import unittest + +# external imports +import PIL.Image + +# bsie imports +from bsie.utils import errors + +# objects to test +from bsie.reader.image._raw import RawImage + + +## code ## + +class TestRawImage(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 = RawImage() + # returns PIL image + img = rdr(os.path.join(os.path.dirname(__file__), 'testimage.nef')) + self.assertEqual(img.size, (6016, 4016)) # FIXME: change when image was replaced + #self.assertEqual(img.size, (1, 1)) + #self.assertEqual(img.getdata().getpixel((0, 0)), (0, 0, 0)) + img.close() + # raises exception when image cannot be read + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'testimage.jpg')) + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.nef')) + + + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/image/testimage.jpg b/test/reader/image/testimage.jpg Binary files differnew file mode 100644 index 0000000..ea7af63 --- /dev/null +++ b/test/reader/image/testimage.jpg 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..02be470 --- /dev/null +++ b/test/reader/preview/load_nef.py @@ -0,0 +1,23 @@ + +# 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..30095c5 --- /dev/null +++ b/test/reader/preview/test_pg.py @@ -0,0 +1,78 @@ + +# 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() + del rdr + + # 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..20f08ec --- /dev/null +++ b/test/reader/preview/test_pillow.py @@ -0,0 +1,49 @@ + +# 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.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.jpg')) + # raises exception when image cannot be read + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'inexistent.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..e144877 --- /dev/null +++ b/test/reader/preview/test_preview.py @@ -0,0 +1,72 @@ + +# 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..11a6f9b --- /dev/null +++ b/test/reader/preview/test_rawpy.py @@ -0,0 +1,54 @@ + +# 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..2b15bc6 --- /dev/null +++ b/test/reader/preview/test_utils.py @@ -0,0 +1,39 @@ + +# 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 Binary files differnew file mode 100644 index 0000000..592d448 --- /dev/null +++ b/test/reader/preview/testfile.pdf diff --git a/test/reader/preview/testimage.jpg b/test/reader/preview/testimage.jpg Binary files differnew file mode 100644 index 0000000..4c2aca5 --- /dev/null +++ b/test/reader/preview/testimage.jpg diff --git a/test/reader/test_base.py b/test/reader/test_base.py new file mode 100644 index 0000000..5dd2855 --- /dev/null +++ b/test/reader/test_base.py @@ -0,0 +1,40 @@ + +# standard imports +import unittest + +# objects to test +from bsie.reader import Reader + + +## code ## + +class StubReader(Reader): + def __call__(self, path): + raise NotImplementedError() + +class StubSub(StubReader): + pass + +class TestReader(unittest.TestCase): + def test_essentials(self): + ext = StubReader() + self.assertEqual(str(ext), 'StubReader') + self.assertEqual(repr(ext), 'StubReader()') + self.assertEqual(ext, StubReader()) + self.assertEqual(hash(ext), hash(StubReader())) + + sub = StubSub() + self.assertEqual(str(sub), 'StubSub') + self.assertEqual(repr(sub), 'StubSub()') + self.assertEqual(sub, StubSub()) + self.assertEqual(hash(sub), hash(StubSub())) + self.assertNotEqual(ext, sub) + self.assertNotEqual(hash(ext), hash(sub)) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/test_builder.py b/test/reader/test_builder.py new file mode 100644 index 0000000..84e8e7a --- /dev/null +++ b/test/reader/test_builder.py @@ -0,0 +1,49 @@ + +# standard imports +import unittest + +# bsie imports +from bsie.utils import errors + +# objects to test +from bsie.reader import ReaderBuilder + + +## code ## + +class TestReaderBuilder(unittest.TestCase): + def test_build(self): + builder = ReaderBuilder({'bsie.reader.path.Path': {}}) + # build configured reader + cls = builder.build('bsie.reader.path.Path') + import bsie.reader.path + self.assertIsInstance(cls, bsie.reader.path.Path) + # build unconfigured reader + cls = builder.build('bsie.reader.stat.Stat') + import bsie.reader.stat + self.assertIsInstance(cls, bsie.reader.stat.Stat) + # re-build previous reader (test cache) + self.assertEqual(cls, builder.build('bsie.reader.stat.Stat')) + # test invalid + self.assertRaises(TypeError, builder.build, 123) + self.assertRaises(TypeError, builder.build, None) + self.assertRaises(ValueError, builder.build, '') + self.assertRaises(ValueError, builder.build, 'Path') + self.assertRaises(errors.BuilderError, builder.build, 'path.Path') + # invalid config + builder = ReaderBuilder({'bsie.reader.stat.Stat': dict(foo=123)}) + self.assertRaises(errors.BuilderError, builder.build, 'bsie.reader.stat.Stat') + builder = ReaderBuilder({'bsie.reader.stat.Stat': 123}) + self.assertRaises(TypeError, builder.build, 'bsie.reader.stat.Stat') + # no instructions + builder = ReaderBuilder({}) + cls = builder.build('bsie.reader.stat.Stat') + self.assertIsInstance(cls, bsie.reader.stat.Stat) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/test_chain.py b/test/reader/test_chain.py new file mode 100644 index 0000000..665aabc --- /dev/null +++ b/test/reader/test_chain.py @@ -0,0 +1,80 @@ + +# standard imports +import logging +import os +import unittest + +# bsie imports +from bsie.utils import errors +import bsie.reader.path +import bsie.reader.stat + +# objects to test +from bsie.reader.chain import ReaderChain + + +## code ## + +class TestReaderChain(unittest.TestCase): + def test_construct(self): + # subreaders are built + chain = ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.path.Path'], {}) + self.assertIsInstance(chain, ReaderChain) + self.assertEqual(chain._children, + (bsie.reader.stat.Stat(), bsie.reader.path.Path())) + # subreaders that failed to build are omitted + with self.assertLogs(logging.getLogger('bsie.reader.chain'), logging.WARNING): + chain = ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.invalid.Invalid'], {}) + self.assertEqual(chain._children, (bsie.reader.stat.Stat(), )) + with self.assertLogs(logging.getLogger('bsie.reader.chain'), logging.WARNING): + chain = ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.path.Invalid'], {}) + self.assertEqual(chain._children, (bsie.reader.stat.Stat(), )) + # warning is issued if there are no subreaders + with self.assertLogs(logging.getLogger('bsie.reader.chain'), logging.WARNING): + chain = ReaderChain([], {}) + self.assertEqual(chain._children, tuple()) + + def test_essentials(self): + chain = ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.path.Path'], {}) + # identity + self.assertEqual(chain, chain) + self.assertEqual(hash(chain), hash(chain)) + # comparison works across instances + self.assertEqual(chain, + ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.path.Path'], {})) + self.assertEqual(hash(chain), + hash(ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.path.Path'], {}))) + # comparison respects subreaders + self.assertNotEqual(hash(chain), + hash(ReaderChain(['bsie.reader.path.Path'], {}))) + self.assertNotEqual(hash(chain), + hash(ReaderChain(['bsie.reader.path.Path'], {}))) + # comparison respects subreader order + self.assertNotEqual(chain, + ReaderChain(['bsie.reader.path.Path', 'bsie.reader.stat.Stat'], {})) + self.assertNotEqual(hash(chain), + hash(ReaderChain(['bsie.reader.path.Path', 'bsie.reader.stat.Stat'], {}))) + # string representation + self.assertEqual(str(chain), 'ReaderChain(Stat, Path)') + self.assertEqual(repr(chain), 'ReaderChain((Stat(), Path()))') + + def test_call(self): + chain = ReaderChain(['bsie.reader.stat.Stat', 'bsie.reader.path.Path'], {}) + # chain first probes first child + self.assertEqual(chain(__file__), os.stat(__file__)) + # chain probes second child if first one failes + self.assertEqual(chain(''), '') + self.assertEqual(chain('missing-file'), 'missing-file') + + # chain raises a ReaderError if childs were exhausted + chain = ReaderChain(['bsie.reader.stat.Stat'], {}) + # chain probes second child if first one failes + self.assertRaises(errors.ReaderError, chain, '') + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/test_exif.py b/test/reader/test_exif.py new file mode 100644 index 0000000..de6e801 --- /dev/null +++ b/test/reader/test_exif.py @@ -0,0 +1,52 @@ + +# standard imports +import os +import unittest + +# external imports +import pyexiv2 + +# bsie imports +from bsie.utils import errors + +# objects to test +from bsie.reader.exif import Exif + + +## code ## + +class TestExif(unittest.TestCase): + def test_call(self): + rdr = Exif() + # discards non-image files + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.doc')) + # raises on invalid image files + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.jpg')) + # raises on invalid image files + pyexiv2.set_log_level(3) # suppress log message + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'testimage_exif_corrupted.jpg')) + # returns dict with exif info + self.assertDictEqual(rdr(os.path.join(os.path.dirname(__file__), 'testimage_exif.jpg')), { + 'Exif.Image.Artist': 'nobody', + 'Exif.Image.ExifTag': '110', + 'Exif.Image.ResolutionUnit': '2', + 'Exif.Image.XResolution': '300/1', + 'Exif.Image.YCbCrPositioning': '1', + 'Exif.Image.YResolution': '300/1', + 'Exif.Photo.ColorSpace': '65535', + 'Exif.Photo.ComponentsConfiguration': '1 2 3 0', + 'Exif.Photo.ExifVersion': '48 50 51 50', + 'Exif.Photo.FlashpixVersion': '48 49 48 48', + 'Exif.Photo.ISOSpeedRatings': '200', + }) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/test_path.py b/test/reader/test_path.py index fd7bc5a..f2eee06 100644 --- a/test/reader/test_path.py +++ b/test/reader/test_path.py @@ -1,10 +1,5 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" -# imports +# standard imports import unittest # objects to test diff --git a/test/reader/test_stat.py b/test/reader/test_stat.py index d12ad9c..f36b8b3 100644 --- a/test/reader/test_stat.py +++ b/test/reader/test_stat.py @@ -1,15 +1,10 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" -# imports +# standard imports import os import unittest # bsie imports -from bsie.base import errors +from bsie.utils import errors # objects to test from bsie.reader.stat import Stat diff --git a/test/reader/testimage_exif.jpg b/test/reader/testimage_exif.jpg Binary files differnew file mode 100644 index 0000000..a774bc2 --- /dev/null +++ b/test/reader/testimage_exif.jpg diff --git a/test/reader/testimage_exif_corrupted.jpg b/test/reader/testimage_exif_corrupted.jpg Binary files differnew file mode 100644 index 0000000..e51a9dc --- /dev/null +++ b/test/reader/testimage_exif_corrupted.jpg |