From 7c6426729e68ec81f30a4e6b490e61bc95efba7f Mon Sep 17 00:00:00 2001 From: Ruben Verweij Date: Wed, 15 Mar 2017 14:02:53 +0100 Subject: [PATCH] Add ArtificialND2 class to help in testing nd2 file reading and parsing --- nd2reader/artificial.py | 47 +++++++++++++++++++++++++++++++++++++++++ tests/test_common.py | 20 ++++++++++++++---- 2 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 nd2reader/artificial.py diff --git a/nd2reader/artificial.py b/nd2reader/artificial.py new file mode 100644 index 0000000..419c8b1 --- /dev/null +++ b/nd2reader/artificial.py @@ -0,0 +1,47 @@ +""" +Functions to create artificial nd2 data for testing purposes +""" +import six + + +class ArtificialND2(object): + """ + Artificial ND2 class (for testing purposes) + """ + + def __init__(self, file): + self._fh = open(file, 'wb') + self.write_version() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + @property + def file_handle(self): + """ + The file handle to the binary file + Returns: + file: the file handle + """ + return self._fh + + def close(self): + """ + Correctly close the file handle + """ + if self._fh is not None: + self._fh.close() + + def write_version(self): + """ + Write file header + """ + # write 16 empty bytes + self._fh.write(bytearray(16)) + + # write version info + version_info = six.b('ND2 FILE SIGNATURE CHUNK NAME01!Ver3.0') + self._fh.write(version_info) diff --git a/tests/test_common.py b/tests/test_common.py index b29a5c1..1ed6fd4 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -1,10 +1,16 @@ import unittest - +from os import path import six -from nd2reader.common import parse_version, parse_date, _add_to_metadata + +from nd2reader.artificial import ArtificialND2 +from nd2reader.common import get_version, parse_version, parse_date, _add_to_metadata class TestCommon(unittest.TestCase): + def setUp(self): + dir_path = path.dirname(path.realpath(__file__)) + self.test_file = path.join(dir_path, 'test_data/test.nd2') + def test_parse_version_2(self): data = 'ND2 FILE SIGNATURE CHUNK NAME01!Ver2.2' actual = parse_version(data) @@ -17,6 +23,14 @@ class TestCommon(unittest.TestCase): expected = (3, 0) self.assertTupleEqual(actual, expected) + def test_get_version_from_file(self): + with ArtificialND2(self.test_file) as artificial: + artificial.close() + + with open(self.test_file, 'rb') as fh: + version_tuple = get_version(fh) + self.assertTupleEqual(version_tuple, (3, 0)) + def test_parse_date_24(self): date_format = "%m/%d/%Y %H:%M:%S" date = '02/13/2016 23:43:37' @@ -45,5 +59,3 @@ class TestCommon(unittest.TestCase): metadata = {'test': ['value1', 'value2']} _add_to_metadata(metadata, 'test', 'value3') self.assertDictEqual(metadata, {'test': ['value1', 'value2', 'value3']}) - -