diff options
Diffstat (limited to 'silx/io/test/test_fabioh5.py')
-rw-r--r-- | silx/io/test/test_fabioh5.py | 103 |
1 files changed, 100 insertions, 3 deletions
diff --git a/silx/io/test/test_fabioh5.py b/silx/io/test/test_fabioh5.py index 0237620..d9459ae 100644 --- a/silx/io/test/test_fabioh5.py +++ b/silx/io/test/test_fabioh5.py @@ -25,11 +25,15 @@ __authors__ = ["V. Valls"] __license__ = "MIT" -__date__ = "29/08/2017" +__date__ = "04/10/2017" +import os +import sys import logging import numpy import unittest +import tempfile +import shutil _logger = logging.getLogger(__name__) @@ -309,11 +313,104 @@ class TestFabioH5(unittest.TestCase): self.assertIs(data1._get_data(), data2._get_data()) self.assertEqual(self.h5_image.get(data2.name, getlink=True).path, data1.name) + def test_dirty_header(self): + """Test that it does not fail""" + try: + header = {} + header["foo"] = b'abc' + data = numpy.array([[0, 0], [0, 0]], dtype=numpy.int8) + fabio_image = fabio.edfimage.edfimage(data=data, header=header) + header = {} + header["foo"] = b'a\x90bc\xFE' + fabio_image.appendFrame(data=data, header=header) + except Exception as e: + _logger.error(e.args[0]) + _logger.debug("Backtrace", exc_info=True) + self.skipTest("fabio do not allow to create the resource") + + h5_image = fabioh5.File(fabio_image=fabio_image) + scan_header_path = "/scan_0/instrument/file/scan_header" + self.assertIn(scan_header_path, h5_image) + data = h5_image[scan_header_path] + self.assertIsInstance(data[...], numpy.ndarray) + + def test_unicode_header(self): + """Test that it does not fail""" + try: + header = {} + header["foo"] = b'abc' + data = numpy.array([[0, 0], [0, 0]], dtype=numpy.int8) + fabio_image = fabio.edfimage.edfimage(data=data, header=header) + header = {} + header["foo"] = u'abc\u2764' + fabio_image.appendFrame(data=data, header=header) + except Exception as e: + _logger.error(e.args[0]) + _logger.debug("Backtrace", exc_info=True) + self.skipTest("fabio do not allow to create the resource") + + h5_image = fabioh5.File(fabio_image=fabio_image) + scan_header_path = "/scan_0/instrument/file/scan_header" + self.assertIn(scan_header_path, h5_image) + data = h5_image[scan_header_path] + self.assertIsInstance(data[...], numpy.ndarray) + + +class TestFabioH5WithEdf(unittest.TestCase): + + @classmethod + def setUpClass(cls): + if fabio is None: + raise unittest.SkipTest("fabio is needed") + if h5py is None: + raise unittest.SkipTest("h5py is needed") + + cls.tmp_directory = tempfile.mkdtemp() + + cls.edf_filename = os.path.join(cls.tmp_directory, "test.edf") + + header = { + "integer": "-100", + "float": "1.0", + "string": "hi!", + "list_integer": "100 50 0", + "list_float": "1.0 2.0 3.5", + "string_looks_like_list": "2000 hi!", + } + data = numpy.array([[10, 11], [12, 13], [14, 15]], dtype=numpy.int64) + fabio_image = fabio.edfimage.edfimage(data, header) + fabio_image.write(cls.edf_filename) + + cls.fabio_image = fabio.open(cls.edf_filename) + cls.h5_image = fabioh5.File(fabio_image=cls.fabio_image) + + @classmethod + def tearDownClass(cls): + cls.fabio_image = None + cls.h5_image = None + if sys.platform == "win32" and fabio is not None: + # gc collect is needed to close a file descriptor + # opened by fabio and not released. + # https://github.com/silx-kit/fabio/issues/167 + import gc + gc.collect() + shutil.rmtree(cls.tmp_directory) + + def test_reserved_format_metadata(self): + if fabio.hexversion < 327920: # 0.5.0 final + self.skipTest("fabio >= 0.5.0 final is needed") + + # The EDF contains reserved keys in the header + self.assertIn("HeaderID", self.fabio_image.header) + # We do not expose them in FabioH5 + self.assertNotIn("/scan_0/instrument/detector_0/others/HeaderID", self.h5_image) + def suite(): + loadTests = unittest.defaultTestLoader.loadTestsFromTestCase test_suite = unittest.TestSuite() - test_suite.addTest( - unittest.defaultTestLoader.loadTestsFromTestCase(TestFabioH5)) + test_suite.addTest(loadTests(TestFabioH5)) + test_suite.addTest(loadTests(TestFabioH5WithEdf)) return test_suite |