#!/usr/bin/env bash # TIFF parser test driver if [ "${BASH_VERSION:0:1}" -lt "4" ]; then echo "$0 requires bash v4 or greater. Running $BASH_VERSION. $0 skipped." exit 0 fi exifprobe() { f=$1 # References # process pipe : http://stackoverflow.com/questions/7612320/bash-weird-variable-scope-when-populating-array-with-results # to uppercase : http://unix.stackexchange.com/questions/51983/bash-how-to-uppercase-the-command-line-argument # --------------------------------------- # Parse -pa output # Exif.Image.ImageDescription Ascii 18 Created with GIMP tags=() typs=() lens=() vals=() while read line; do tag=$(echo $line|cut -d. -f 3 | cut -d' ' -f 1) ; tags+=($tag) typ=$(echo $line|cut -d' ' -f 2- | sed -E -e 's/ +/ /g' -e 's/^ //' | cut -d' ' -f 1 ); typs+=($typ) len=$(echo $line|cut -d' ' -f 2- | sed -E -e 's/ +/ /g' -e 's/^ //' | cut -d' ' -f 2 ); lens+=($len) val=$(echo $line|cut -d' ' -f 2- | sed -E -e 's/ +/ /g' -e 's/^ //' | cut -d' ' -f 3-); vals+=("$val") done < <( runTest exiv2 -pa $f 2>/dev/null ) # process pipe count=${#tags[@]} echo exiv2 -pa output index=0 while [ $index -lt $count ]; do tag=${tags[$index]} typ=${typs[$index]} len=${lens[$index]} val=${vals[$index]} echo ${tag} $'\t' ${typ} $'\t' ${len} $'\t' '"'${val}'"' index=$((index+1)) done # Parse -pS output # address | tag | type | count | offset | value # 254 | 0x00fe NewSubfileType | LONG | 1 | 0 | 0 TAGS=() TYPS=() LENS=() OFFS=() VALS=() k=0 while read line; do k=$((k+1)) # skip the first couple of lines if [ $k -gt 2 ]; then TAG=$(echo $line| cut -d'|' -f 2 | cut -d' ' -f 3 ); TAGS+=($TAG); TYP=$(echo $line| cut -d'|' -f 3 | sed -E -e's/ +//g'); TYPS+=($TYP) LEN=$(echo $line| cut -d'|' -f 4 | sed -E -e's/ +//g'); LENS+=($LEN) OFF=$(echo $line| cut -d'|' -f 5 | sed -E -e's/ +//g'); OFFS+=($OFF) VAL=$(echo $line| cut -d'|' -f 6- | sed -e's/^ //' ); VALS+=($"$VAL") fi done < <( runTest exiv2 -pS $f | grep -v -e '^END' 2>/dev/null ) COUNT=${#TAGS[@]} echo '' echo exiv2 -pS output INDEX=0 while [ $INDEX -lt $COUNT ]; do TAG=${TAGS[$INDEX]} TYP=${TYPS[$INDEX]} LEN=${LENS[$INDEX]} OFF=${OFFS[$INDEX]} VAL=${VALS[$INDEX]} echo ${TAG} $'\t' ${TYP} $'\t' ${LEN} $'\t' '"'${VAL}'"' INDEX=$((INDEX+1)) done # --------------------------------------- # Compare echo '' echo "Analysis" echo "count = " $count "COUNT = " $COUNT index=0 while [ $index -lt $count ]; do TAG=${TAGS[$index]} tag=${tags[$index]} if [ "$TAG" != "$tag" ]; then echo TAG $TAG $tag mismatch ; fi TYP=${TYPS[$index]^^} # to uppercase typ=${typs[$index]^^} if [ "$TYP" != "$typ" ]; then echo TYPE $TYP $typ mismatch ; fi LEN=${LENS[$index]} len=${lens[$index]} if [ "$LEN" != "$len" ]; then echo Length $LEN $len mismatch ; fi VAL=${VALS[$index]} val=${vals[$index]} if [[ "${typ}" == "ASCII" && "$VAL" != "$val" ]]; then echo Value $VAL $val mismatch ; fi index=$((index+1)) done } # ---------------------------------------------------------------------- # Setup source ./functions.source ( cd "$testdir" testfile=mini9.tif copyTestFile ${testfile} exifprobe ${testfile} runTest tiff-test ${testfile} exifprobe ${testfile} ) > $results # ---------------------------------------------------------------------- # Evaluate results cat $results | tr -d $'\r' > $results-stripped mv $results-stripped $results reportTest $results $good # That's all Folks! ##