test.sh (3906B)
1 #!/bin/bash 2 export LC_ALL="C" 3 4 function check_valgrind_log () { 5 if [ "$VALGRIND" != "" ]; then 6 if [ -f $TEMPDIR/test.pid* ]; then 7 log=`ls $TEMPDIR/test.pid*` 8 if ! grep -q 'ERROR SUMMARY: 0 error' $log; then 9 echo "Fail in $NAME $1 checking detected by Valgrind" 10 echo "$log Valgrind log file moved to $TEMPDIR/badlogs" 11 mv $log $TEMPDIR/badlogs 12 exit 1 13 fi 14 if grep -q 'LEAK SUMMARY' $log; then 15 echo "Memory leak in $NAME $1 checking detected by Valgrind" 16 echo "$log Valgrind log file moved to $TEMPDIR/badlogs" 17 mv $log $TEMPDIR/badlogs 18 exit 1 19 fi 20 rm -f $log 21 fi 22 fi 23 } 24 25 TESTDIR=. 26 TEMPDIR=$TESTDIR/testSubDir 27 NAME="$1" 28 shift 29 30 if [ ! -d $TEMPDIR ]; then 31 mkdir $TEMPDIR 32 fi 33 34 shopt -s expand_aliases 35 36 alias hunspell='../libtool --mode=execute -dlopen ../src/hunspell/.libs/libhunspell*.la ../src/tools/hunspell' 37 alias analyze='../libtool --mode=execute -dlopen ../src/hunspell/.libs/libhunspell*.la ../src/tools/analyze' 38 39 if [ "$VALGRIND" != "" ]; then 40 rm -f $TEMPDIR/test.pid* 41 if [ ! -d $TEMPDIR/badlogs ]; then 42 mkdir $TEMPDIR/badlogs 43 fi 44 45 alias hunspell='../libtool --mode=execute -dlopen ../src/hunspell/.libs/libhunspell*.la valgrind --tool=$VALGRIND --leak-check=yes --show-reachable=yes --log-file=$TEMPDIR/test.pid ../src/tools/hunspell' 46 alias analyze='../libtool --mode=execute -dlopen ../src/hunspell/.libs/libhunspell*.la valgrind --tool=$VALGRIND --leak-check=yes --show-reachable=yes --log-file=$TEMPDIR/test.pid ../src/tools/analyze' 47 fi 48 49 # Tests good words 50 if test -f $TESTDIR/$NAME.good; then 51 hunspell -l $* -d $TESTDIR/$NAME <$TESTDIR/$NAME.good >$TEMPDIR/$NAME.good 52 if test -s $TEMPDIR/$NAME.good; then 53 echo "=============================================" 54 echo "Fail in $NAME.good. Good words recognised as wrong:" 55 cat $TEMPDIR/$NAME.good 56 rm -f $TEMPDIR/$NAME.good 57 exit 1 58 fi 59 rm -f $TEMPDIR/$NAME.good 60 fi 61 62 check_valgrind_log "good words" 63 64 # Tests bad words 65 if test -f $TESTDIR/$NAME.wrong; then 66 hunspell -l $* -d $TESTDIR/$NAME <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong 67 tr -d ' ' <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong.detab 68 if ! cmp $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab >/dev/null; then 69 echo "=============================================" 70 echo "Fail in $NAME.wrong. Bad words recognised as good:" 71 tr -d ' ' <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong.detab 72 diff $TEMPDIR/$NAME.wrong.detab $TEMPDIR/$NAME.wrong | grep '^<' | sed 's/^..//' 73 rm -f $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab 74 exit 1 75 fi 76 rm -f $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab 77 fi 78 79 check_valgrind_log "bad words" 80 81 # Tests morphological analysis 82 if test -f $TESTDIR/$NAME.morph; then 83 sed 's/ $//' $TESTDIR/$NAME.good >$TEMPDIR/$NAME.good 84 analyze $TESTDIR/$NAME.aff $TESTDIR/$NAME.dic $TEMPDIR/$NAME.good >$TEMPDIR/$NAME.morph 85 if ! cmp $TEMPDIR/$NAME.morph $TESTDIR/$NAME.morph >/dev/null; then 86 echo "=============================================" 87 echo "Fail in $NAME.morph. Bad analysis?" 88 diff $TESTDIR/$NAME.morph $TEMPDIR/$NAME.morph | grep '^<' | sed 's/^..//' 89 rm -f $TEMPDIR/$NAME.morph 90 exit 1 91 fi 92 rm -f $TEMPDIR/$NAME.{morph,good} 93 fi 94 95 check_valgrind_log "morphological analysis" 96 97 # Tests suggestions 98 if test -f $TESTDIR/$NAME.sug; then 99 hunspell $* -a -d $TESTDIR/$NAME <$TESTDIR/$NAME.wrong | grep '^&' | \ 100 sed 's/^[^:]*: //' >$TEMPDIR/$NAME.sug 101 if ! cmp $TEMPDIR/$NAME.sug $TESTDIR/$NAME.sug >/dev/null; then 102 echo "=============================================" 103 echo "Fail in $NAME.sug. Bad suggestion?" 104 diff $TESTDIR/$NAME.sug $TEMPDIR/$NAME.sug 105 rm -f $TEMPDIR/$NAME.sug 106 exit 1 107 fi 108 rm -f $TEMPDIR/$NAME.sug 109 fi 110 111 check_valgrind_log "suggestion"