Ported tiff-test.sh

v0.27.3
Dan Čermák 8 years ago
parent 085c9715fc
commit 5267123186

@ -0,0 +1,154 @@
# -*- coding: utf-8 -*-
import system_tests
class OutputTagExtract(system_tests.Case):
"""
Test whether exiv2 -pa $file and exiv2 -pS $file produces the same output.
"""
def parse_pa(self, stdout):
"""
Parse the output of exiv2 -pa $file, which looks like this:
Exif.Image.NewSubfileType Long 1 Primary image
into a list of dictionaries with the keys:
tag: last word of the first column (here NewSubfileType)
type: lowercase second column
len: third column
val: fourth column
It is furthermore checked that the first column begins with 'Exif.Image'
"""
data = []
for line in stdout:
tmp = line.split()
exif, image, tag = tmp[0].split('.')
self.assertEquals(exif, "Exif")
self.assertEquals(image, "Image")
data.append({
"tag": tag,
"type": tmp[1].lower(),
"len": int(tmp[2]),
"val": " ".join(tmp[3:])
})
return data
def parse_pS(self, stdout):
"""
Parse the output of exiv2 -pS $file, which looks like this:
STRUCTURE OF TIFF FILE (II): $file
address | tag | type | count | offset | value
254 | 0x00fe NewSubfileType | LONG | 1 | | 0
...
END $file
into a list of dictionaries with the following keys:
tag: the string after the hex number in the second column
type: lowercase third column
len: fourth column
val: fifth column
The first two lines and the last line are ignored, as they contain
explanatory output.
"""
data = []
for i, line in enumerate(stdout):
if i < 2 or i == len(stdout) - 1:
continue
tmp = line.split(" | ")
data.append({
"tag": tmp[1].split()[1],
"type": tmp[2].replace(' ', '').lower(),
"len": int(tmp[3].replace(' ', '')),
"val": tmp[5]
})
return data
def compare_pS_pa(self):
"""
Compares the output from self.parse_pa() and self.parse_pS() (saved in
self.pa_data & self.pS_data respectively).
All dictionaries in the lists are compared for equality for the keys
tag, len and type but only some for val. This is due to differently
processed output (exiv2 -pa produces more readable output,
e.g. compression is written in words and not as a number as it is by
exiv2 -pS)
"""
for pa_elem, pS_elem in zip(self.pa_data, self.pS_data):
for key in ["tag", "type", "len"]:
self.assertEquals(pa_elem[key], pS_elem[key])
if pa_elem["tag"] in [
"ImageWidth", "ImageLength", "BitsPerSample",
"DocumentName", "ImageDescription", "StripOffsets",
"SamplesPerPixel", "StripByteCounts", "PlanarConfiguration"]:
self.assertEquals(pa_elem["val"], pS_elem["val"])
def compare_stdout(self, i, command, got_stdout, expected_stdout):
super().compare_stdout(i, command, got_stdout, expected_stdout)
if '-pa' in command:
self.pa_data = self.parse_pa(got_stdout.splitlines())
if '-pS' in command:
self.pS_data = self.parse_pS(got_stdout.splitlines())
if i == 1:
self.compare_pS_pa()
commands = [
"{exiv2} %s {data_path}/mini9.tif" % (opt) for opt in ["-pa", "-pS"]
]
stderr = [""] * 2
retval = [0] * 2
stdout = [
"""Exif.Image.NewSubfileType Long 1 Primary image
Exif.Image.ImageWidth Short 1 9
Exif.Image.ImageLength Short 1 9
Exif.Image.BitsPerSample Short 3 8 8 8
Exif.Image.Compression Short 1 Uncompressed
Exif.Image.PhotometricInterpretation Short 1 RGB
Exif.Image.DocumentName Ascii 24 /home/ahuggel/mini9.tif
Exif.Image.ImageDescription Ascii 18 Created with GIMP
Exif.Image.StripOffsets Long 1 8
Exif.Image.Orientation Short 1 top, left
Exif.Image.SamplesPerPixel Short 1 3
Exif.Image.RowsPerStrip Short 1 64
Exif.Image.StripByteCounts Long 1 243
Exif.Image.XResolution Rational 1 72
Exif.Image.YResolution Rational 1 72
Exif.Image.PlanarConfiguration Short 1 1
Exif.Image.ResolutionUnit Short 1 inch
""",
"""STRUCTURE OF TIFF FILE (II): {data_path}/mini9.tif
address | tag | type | count | offset | value
254 | 0x00fe NewSubfileType | LONG | 1 | | 0
266 | 0x0100 ImageWidth | SHORT | 1 | | 9
278 | 0x0101 ImageLength | SHORT | 1 | | 9
290 | 0x0102 BitsPerSample | SHORT | 3 | 462 | 8 8 8
302 | 0x0103 Compression | SHORT | 1 | | 1
314 | 0x0106 PhotometricInterpretation | SHORT | 1 | | 2
326 | 0x010d DocumentName | ASCII | 24 | 468 | /home/ahuggel/mini9.tif
338 | 0x010e ImageDescription | ASCII | 18 | 492 | Created with GIMP
350 | 0x0111 StripOffsets | LONG | 1 | | 8
362 | 0x0112 Orientation | SHORT | 1 | | 1
374 | 0x0115 SamplesPerPixel | SHORT | 1 | | 3
386 | 0x0116 RowsPerStrip | SHORT | 1 | | 64
398 | 0x0117 StripByteCounts | LONG | 1 | | 243
410 | 0x011a XResolution | RATIONAL | 1 | 510 | 1207959552/16777216
422 | 0x011b YResolution | RATIONAL | 1 | 518 | 1207959552/16777216
434 | 0x011c PlanarConfiguration | SHORT | 1 | | 1
446 | 0x0128 ResolutionUnit | SHORT | 1 | | 2
END {data_path}/mini9.tif
"""]

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
import system_tests
@system_tests.CopyFiles("{data_path}/mini9.tif")
class TestTiffTestProg(system_tests.Case):
commands = ["{tiff-test} {data_path}/mini9_copy.tif"]
stdout = [
"""Test 1: Writing empty Exif data without original binary data: ok.
Test 2: Writing empty Exif data with original binary data: ok.
Test 3: Wrote non-empty Exif data without original binary data:
Exif.Image.ExifTag 0x8769 Long 1 26
Exif.Photo.DateTimeOriginal 0x9003 Ascii 18 Yesterday at noon
MIME type: image/tiff
Image size: 9 x 9
Before
Exif.Image.NewSubfileType 0x00fe Long 1 0
Exif.Image.ImageWidth 0x0100 Short 1 9
Exif.Image.ImageLength 0x0101 Short 1 9
Exif.Image.BitsPerSample 0x0102 Short 3 8 8 8
Exif.Image.Compression 0x0103 Short 1 1
Exif.Image.PhotometricInterpretation 0x0106 Short 1 2
Exif.Image.DocumentName 0x010d Ascii 24 /home/ahuggel/mini9.tif
Exif.Image.ImageDescription 0x010e Ascii 18 Created with GIMP
Exif.Image.StripOffsets 0x0111 Long 1 8
Exif.Image.Orientation 0x0112 Short 1 1
Exif.Image.SamplesPerPixel 0x0115 Short 1 3
Exif.Image.RowsPerStrip 0x0116 Short 1 64
Exif.Image.StripByteCounts 0x0117 Long 1 243
Exif.Image.XResolution 0x011a Rational 1 1207959552/16777216
Exif.Image.YResolution 0x011b Rational 1 1207959552/16777216
Exif.Image.PlanarConfiguration 0x011c Short 1 1
Exif.Image.ResolutionUnit 0x0128 Short 1 2
======
After
Exif.Image.NewSubfileType 0x00fe Long 1 0
Exif.Image.ImageWidth 0x0100 Short 1 9
Exif.Image.ImageLength 0x0101 Short 1 9
Exif.Image.BitsPerSample 0x0102 Short 3 8 8 8
Exif.Image.Compression 0x0103 Short 1 1
Exif.Image.PhotometricInterpretation 0x0106 Short 1 2
Exif.Image.DocumentName 0x010d Ascii 24 /home/ahuggel/mini9.tif
Exif.Image.ImageDescription 0x010e Ascii 18 Created with GIMP
Exif.Image.StripOffsets 0x0111 Long 1 8
Exif.Image.Orientation 0x0112 Short 1 1
Exif.Image.SamplesPerPixel 0x0115 Short 1 3
Exif.Image.RowsPerStrip 0x0116 Short 1 64
Exif.Image.StripByteCounts 0x0117 Long 1 243
Exif.Image.XResolution 0x011a Rational 1 1207959552/16777216
Exif.Image.YResolution 0x011b Rational 1 1207959552/16777216
Exif.Image.PlanarConfiguration 0x011c Short 1 1
Exif.Image.ResolutionUnit 0x0128 Short 1 2
Exif.Photo.DateTimeOriginal 0x9003 Ascii 18 Yesterday at noon
"""
]
stderr = [""]
retval = [0]
Loading…
Cancel
Save