Fixed printing of cmap boxes when not pclr. #182

This commit is contained in:
John Evans 2014-03-12 12:27:52 -04:00
commit c56b919c36
3 changed files with 22 additions and 1 deletions

View file

@ -829,7 +829,7 @@ class ComponentMappingBox(Jp2kBox):
msg = msg.format(self.component_index[k],
self.palette_index[k])
else:
msg += '\n Component %d ==> %d'
msg += '\n Component {0} ==> {1}'
msg = msg.format(self.component_index[k], k)
return msg

View file

@ -577,3 +577,8 @@ file1_xml = """XML Box (xml ) @ (36, 439)
\t\t<IMAGE_SOURCE>Professional 120 Image</IMAGE_SOURCE>
\t</GENERAL_CREATION_INFO>
</IMAGE_CREATION>"""
issue_182_cmap = """Component Mapping Box (cmap) @ (130, 24)
Component 0 ==> palette column 0
Component 1 ==> palette column 0
Component 2 ==> 2"""

View file

@ -905,6 +905,22 @@ class TestPrinting(unittest.TestCase):
expected = '\n'.join(lines)
self.assertEqual(actual, expected)
def test_issue182(self):
"""Should not show the format string in output."""
# The cmap box is wildly broken, but printing was still wrong.
# Format strings like %d were showing up in the output.
filename = opj_data_file('input/nonregression/mem-b2ace68c-1381.jp2')
with warnings.catch_warnings():
# Ignore warning about bad pclr box.
warnings.simplefilter("ignore")
jp2 = Jp2k(filename)
with patch('sys.stdout', new=StringIO()) as fake_out:
print(jp2.box[3].box[3])
actual = fake_out.getvalue().strip()
self.assertEqual(actual, fixtures.issue_182_cmap)
@unittest.skipIf(sys.hexversion < 0x03000000,
"Ordered dicts not printing well in 2.7")
def test_exif_uuid(self):