#!/bin/sh
# Test if chmd_md5 expands chm files identically to Microsoft's HH.EXE -DECOMPILE
[ -d .cache ] || mkdir .cache
BASEDIR=`dirname $0`
cnt=1
for chm in "$@"; do
name=`printf '%d/%d %s' $cnt $# $chm`; cnt=`expr $cnt + 1`
echo "test $name"
cached=`echo $chm | sed -e 's/\//-/g' -e 's/^/.cache\//'`
if [ ! -s $cached ]; then
$BASEDIR/msdecompile_md5 $chm >.orig.out 2>.orig.err
if [ -s .orig.err ]; then
echo "FAIL $name: MS errors" >&2
cat .orig.err >&2
else
LANG=C sort -k2 .orig.out >$cached
fi
fi
$BASEDIR/chmd_md5 $chm >.test.out 2>.test.errwarn
perl -pe 'if($.>1){$_=""if/^[0-9a-f]{32} \/[#\$]/;s{ /}{ }}' .test.out | LANG=C sort -k2 >.test.sorted
sed '/^WARNING; /d' .test.errwarn > .test.err
if [ -s .test.err ]; then
echo "FAIL $name: errors" >&2
cat .test.errwarn >&2
fi
if cmp $cached .test.sorted >/dev/null; then
echo "OK $name"
else
if [ `diff $cached .test.sorted | grep -c '^<'` -gt 0 ]; then
echo "FAIL $name: differences" >&2
diff -u $cached .test.sorted >&2
else
echo "OK $name (better than hh.exe)"
fi
fi
done
rm -f .orig.out .orig.err .test.out .test.err .test.errwarn .test.sorted