diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 0278d63..f0d1f7d 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -11,6 +11,7 @@ else: from io import StringIO import glymur +from glymur import Jp2k try: data_root = os.environ['OPJ_DATA_ROOT'] @@ -22,6 +23,22 @@ except: class TestPrinting(unittest.TestCase): + @classmethod + def setUpClass(cls): + # Setup a plain JP2 file without the two UUID boxes. + jp2file = pkg_resources.resource_filename(glymur.__name__, + "data/nemo.jp2") + with tempfile.NamedTemporaryFile(suffix='.jp2', delete=False) as tfile: + cls._plain_nemo_file = tfile.name + ijfile = Jp2k(jp2file) + data = ijfile.read(reduce=3) + ojfile = Jp2k(cls._plain_nemo_file, 'wb') + ojfile.write(data) + + @classmethod + def tearDownClass(cls): + os.unlink(cls._plain_nemo_file) + def setUp(self): # Save sys.stdout. self.stdout = sys.stdout @@ -30,15 +47,14 @@ class TestPrinting(unittest.TestCase): "data/nemo.jp2") # Save the output of dumping nemo.jp2 for more than one test. - lines = ['File: nemo.jp2', - 'JPEG 2000 Signature Box (jP ) @ (0, 12)', + lines = ['JPEG 2000 Signature Box (jP ) @ (0, 12)', ' Signature: 0d0a870a', 'File Type Box (ftyp) @ (12, 20)', ' Brand: jp2 ', " Compatibility: ['jp2 ']", 'JP2 Header Box (jp2h) @ (32, 45)', ' Image Header Box (ihdr) @ (40, 22)', - ' Size: [1456 2592 3]', + ' Size: [182 324 3]', ' Bitdepth: 8', ' Signed: False', ' Compression: wavelet', @@ -47,45 +63,29 @@ class TestPrinting(unittest.TestCase): ' Method: enumerated colorspace', ' Precedence: 0', ' Colorspace: sRGB', - 'UUID Box (uuid) @ (77, 638)', - ' UUID: 4a706754-6966-6645-7869-662d3e4a5032', - ' UUID Data: 614 bytes', - 'UUID Box (uuid) @ (715, 2412)', - ' UUID: be7acfcb-97a9-42e8-9c71-999491e3afac (XMP)', - ' UUID Data: ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - 'Contiguous Codestream Box (jp2c) @ (3127, 1133427)', + 'Contiguous Codestream Box (jp2c) @ (77, 112814)', ' Main header:', - ' SOC marker segment @ (3135, 0)', - ' SIZ marker segment @ (3137, 47)', + ' SOC marker segment @ (85, 0)', + ' SIZ marker segment @ (87, 47)', ' Profile: 2', - ' Reference Grid Height, Width: (1456 x 2592)', + ' Reference Grid Height, Width: (182 x 324)', ' Vertical, Horizontal Reference Grid Offset: ' + '(0 x 0)', - ' Reference Tile Height, Width: (512 x 512)', + ' Reference Tile Height, Width: (182 x 324)', ' Vertical, Horizontal Reference Tile Offset: ' + '(0 x 0)', ' Bitdepth: (8, 8, 8)', ' Signed: (False, False, False)', ' Vertical, Horizontal Subsampling: ' + '((1, 1), (1, 1), (1, 1))', - ' COD marker segment @ (3186, 12)', + ' COD marker segment @ (136, 12)', ' Coding style:', ' Entropy coder, without partitions', ' SOP marker segments: False', ' EPH marker segments: False', ' Coding style parameters:', ' Progression order: LRCP', - ' Number of layers: 3', + ' Number of layers: 1', ' Multiple component transformation usage: ' + 'reversible', ' Number of resolutions: 6', @@ -102,26 +102,29 @@ class TestPrinting(unittest.TestCase): + 'False', ' Predictable termination: False', ' Segmentation symbols: False', - ' QCD marker segment @ (3200, 19)', + ' QCD marker segment @ (150, 19)', ' Quantization style: no quantization, ' + '2 guard bits', ' Step size: [(0, 8), (0, 9), (0, 9), ' + '(0, 10), (0, 9), (0, 9), (0, 10), (0, 9), (0, 9), ' + '(0, 10), (0, 9), (0, 9), (0, 10), (0, 9), (0, 9), ' + '(0, 10)]'] - self.expectedNemo = '\n'.join(lines) + self.expectedPlain = '\n'.join(lines) def tearDown(self): # Restore stdout. sys.stdout = self.stdout - #import pdb; pdb.set_trace() def test_jp2dump(self): - glymur.jp2dump(self.jp2file) + glymur.jp2dump(self._plain_nemo_file) actual = sys.stdout.getvalue().strip() - self.actual = actual - self.expected = self.expectedNemo - self.assertEqual(actual, self.expectedNemo) + + # Get rid of the filename line, as it is not set in stone. + lst = actual.split('\n') + lst = lst[1:] + actual = '\n'.join(lst) + + self.assertEqual(actual, self.expectedPlain) def test_COC_segment(self): j = glymur.Jp2k(self.jp2file) @@ -429,17 +432,42 @@ class TestPrinting(unittest.TestCase): expected = '\n'.join(lines) self.assertEqual(actual, expected) - def test_entire_file(self): + def test_xmp(self): + # Verify the printing of a UUID/XMP box. j = glymur.Jp2k(self.jp2file) + print(j.box[4]) + actual = sys.stdout.getvalue().strip() + lst = ['UUID Box (uuid) @ (715, 2412)', + ' UUID: be7acfcb-97a9-42e8-9c71-999491e3afac (XMP)', + ' UUID Data: ', + ' ', + ' ', + ' ', + ' ', + ' '] + expected = '\n'.join(lst) + self.assertEqual(actual, expected) + + def test_entire_file(self): + j = glymur.Jp2k(self._plain_nemo_file) print(j) actual = sys.stdout.getvalue().strip() - self.assertEqual(actual, self.expectedNemo) + + # Get rid of the filename line, as it is not set in stone. + lst = actual.split('\n') + lst = lst[1:] + actual = '\n'.join(lst) + + self.assertEqual(actual, self.expectedPlain) def test_codestream(self): j = glymur.Jp2k(self.jp2file) print(j.get_codestream()) actual = sys.stdout.getvalue().strip() - lst = ['Codestream:', ' SOC marker segment @ (3135, 0)', ' SIZ marker segment @ (3137, 47)',