summaryrefslogtreecommitdiff
path: root/extensions/spellcheck/hunspell/tests/unit/data/test.sh
blob: c89ca9bf75dd31f05cb46676c76a31f739cb5137 (plain)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/bin/bash
export LC_ALL="C"

function check_valgrind_log () {
if [ "$VALGRIND" != "" ]; then
  if [ -f $TEMPDIR/test.pid* ]; then
    log=`ls $TEMPDIR/test.pid*`
    if ! grep -q 'ERROR SUMMARY: 0 error' $log; then
        echo "Fail in $NAME $1 checking detected by Valgrind"
        echo "$log Valgrind log file moved to $TEMPDIR/badlogs"
        mv $log $TEMPDIR/badlogs
        exit 1
    fi
    if grep -q 'LEAK SUMMARY' $log; then
        echo "Memory leak in $NAME $1 checking detected by Valgrind"
        echo "$log Valgrind log file moved to $TEMPDIR/badlogs"
        mv $log $TEMPDIR/badlogs
        exit 1
    fi    
    rm -f $log
  fi
fi
}

TESTDIR=.
TEMPDIR=$TESTDIR/testSubDir
NAME="$1"
shift

if [ ! -d $TEMPDIR ]; then
  mkdir $TEMPDIR
fi

shopt -s expand_aliases

alias hunspell='../libtool --mode=execute -dlopen ../src/hunspell/.libs/libhunspell*.la ../src/tools/hunspell'
alias analyze='../libtool --mode=execute -dlopen ../src/hunspell/.libs/libhunspell*.la ../src/tools/analyze'

if [ "$VALGRIND" != "" ]; then
  rm -f $TEMPDIR/test.pid*
  if [ ! -d $TEMPDIR/badlogs ]; then
    mkdir $TEMPDIR/badlogs
  fi

  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'
  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'
fi

# Tests good words
if test -f $TESTDIR/$NAME.good; then
    hunspell -l $* -d $TESTDIR/$NAME <$TESTDIR/$NAME.good >$TEMPDIR/$NAME.good
    if test -s $TEMPDIR/$NAME.good; then
        echo "============================================="
        echo "Fail in $NAME.good. Good words recognised as wrong:"
        cat $TEMPDIR/$NAME.good
        rm -f $TEMPDIR/$NAME.good
        exit 1
    fi
    rm -f $TEMPDIR/$NAME.good
fi

check_valgrind_log "good words"

# Tests bad words
if test -f $TESTDIR/$NAME.wrong; then
    hunspell -l $* -d $TESTDIR/$NAME <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong
    tr -d '	' <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong.detab
    if ! cmp $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab >/dev/null; then
        echo "============================================="
        echo "Fail in $NAME.wrong. Bad words recognised as good:"
        tr -d '	' <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong.detab
        diff $TEMPDIR/$NAME.wrong.detab $TEMPDIR/$NAME.wrong | grep '^<' | sed 's/^..//'
        rm -f $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab
        exit 1
    fi
    rm -f $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab
fi

check_valgrind_log "bad words"

# Tests morphological analysis
if test -f $TESTDIR/$NAME.morph; then
    sed 's/	$//' $TESTDIR/$NAME.good >$TEMPDIR/$NAME.good
    analyze $TESTDIR/$NAME.aff $TESTDIR/$NAME.dic $TEMPDIR/$NAME.good >$TEMPDIR/$NAME.morph
    if ! cmp $TEMPDIR/$NAME.morph $TESTDIR/$NAME.morph >/dev/null; then
        echo "============================================="
        echo "Fail in $NAME.morph. Bad analysis?"
        diff $TESTDIR/$NAME.morph $TEMPDIR/$NAME.morph | grep '^<' | sed 's/^..//'
        rm -f $TEMPDIR/$NAME.morph
        exit 1
    fi
    rm -f $TEMPDIR/$NAME.{morph,good}
fi

check_valgrind_log "morphological analysis"

# Tests suggestions
if test -f $TESTDIR/$NAME.sug; then
    hunspell $* -a -d $TESTDIR/$NAME <$TESTDIR/$NAME.wrong | grep '^&' | \
        sed 's/^[^:]*: //' >$TEMPDIR/$NAME.sug 
    if ! cmp $TEMPDIR/$NAME.sug $TESTDIR/$NAME.sug >/dev/null; then
        echo "============================================="
        echo "Fail in $NAME.sug. Bad suggestion?"
        diff $TESTDIR/$NAME.sug $TEMPDIR/$NAME.sug
        rm -f $TEMPDIR/$NAME.sug
        exit 1
    fi
    rm -f $TEMPDIR/$NAME.sug
fi

check_valgrind_log "suggestion"