File: extract-parse.sh

package info (click to toggle)
libexif 0.6.25-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,640 kB
  • sloc: ansic: 13,211; cpp: 457; makefile: 395; sh: 206
file content (58 lines) | stat: -rwxr-xr-x 2,252 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/sh
# Compares the parsed EXIF data extracted from test images with the parsed EXIF
# data in the original images. This tests that the tag parsing and writing
# round-trip produces an EXIF structure with the same meaning as the original.
#
# Copyright (C) 2019-2021 Dan Fandrich <dan@coneharvesters.com>, et. al.
# SPDX-License-Identifier: LGPL-2.0-or-later

srcdir="${srcdir:-.}"
TMPORIGINAL="$(mktemp)"
TMPEXTRACTED="$(mktemp)"
TMPDATA="$(mktemp)"
trap 'rm -f "${TMPORIGINAL}" "${TMPEXTRACTED}" "${TMPDATA}"' 0

# Remove the file name, which is a harmless difference between the two outputs.
# Also delete the size of the MakerNote. Since the MakerNote is parsed
# internally and rewritten, it can sometimes have slightly different padding
# and therefore slightly different size, which is a semantically meaningless
# difference.
# FIXME: Not all MakerNote differences are harmless. For example,
# olympus_makernote_variant_4.jpg has a huge size difference, probably because
# of a parsing bug in libexif. This should be investigated. Ideally, this would
# ignore small differences in size but trigger on larger differences.
parse_canonicalize () {
    sed \
        -e '/^File /d' \
        -e '/MakerNote (Undefined)$/{N;N;d}'
}

. ${srcdir}/inc-comparetool.sh

# Ensure that names are untranslated
LANG=
LANGUAGE=
LC_ALL=C
export LANG LANGUAGE LC_ALL
for fn in "${srcdir}"/testdata/*.jpg ; do
    ./test-parse$EXEEXT "${fn}" | tr -d '\015' | parse_canonicalize > "${TMPORIGINAL}"
    ./test-extract$EXEEXT -o "${TMPDATA}" "${fn}"
    ./test-parse$EXEEXT "${TMPDATA}" | tr -d '\015' | parse_canonicalize > "${TMPEXTRACTED}"
    if ${comparetool} "${TMPORIGINAL}" "${TMPEXTRACTED}"; then
	: "no differences detected"
    else
        echo Error parsing "$fn"
        exit 1
    fi
done

for fn in "${srcdir}"/testdata/*.jpg ; do
    ./test-parse$EXEEXT           "${fn}" | tr -d '\015' | parse_canonicalize > "${TMPORIGINAL}"
    ./test-parse-from-data$EXEEXT "${fn}" | tr -d '\015' | parse_canonicalize > "${TMPEXTRACTED}"
    if ${comparetool} "${TMPORIGINAL}" "${TMPEXTRACTED}"; then
	echo "no differences detected"
    else
        echo "ERROR: Difference between test-parse and test-parse-from-data for $fn !"
        exit 1
    fi
done