Files
espeak-ng/tests/common
T
Samuel Thibault 2878e91db0 Fix testsuite under various locales
When the current locale doesn't match the current voice, grep would be
surprised by the produced output and believe that this is not text, for
instance with LC_ALL=ru_RU.CP1251 we get:

  TEST      tests/language-replace.test
[...]
testing mk
grep: (standard input): binary file matches
2d1
< Translate 'пејзаж'

But we can give -a to grep so it always considers its input as text.
2022-04-10 15:40:09 +02:00

136 lines
3.8 KiB
Bash
Executable File

#!/bin/sh
# Test a command for presence and ability to output the sha1 hash of a file
is_hash() {
echo -n "checking for SHA1 hashing command ... "
if check_hash sha1sum; then
sha1sum=sha1sum
elif check_hash sha1; then
sha1sum=sha1
elif check_hash shasum; then
sha1sum=shasum
else
echo "no"
exit 1
fi
}
check_hash() {
which $1 &&
$1 </dev/null 2>/dev/null |
awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}'
# Test some common commands to find the correct one for the system being tested on.
}
# test if Klatt synthesizer is installed
is_klatt() {
echo -n "checking if klatt is installed ... "
if [ "`which klatt`" != "" ]; then
echo "yes"
else
echo "no"
exit
fi
}
# test if MBROLA synthesizer is installed
is_mbrola() {
echo -n "checking if MBROLA is installed ... "
if [ "`which mbrola`" != "" ]; then
echo "yes"
else
echo "no"
exit
fi
}
# Check processed text by phonetic representation of the output
test_phon() {
TEST_LANG=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4
OPTIONS=$5
if [ "$MESSAGE" = "" ] ; then
MESSAGE=$TEST_TEXT
fi
echo "testing ${TEST_LANG} $MESSAGE"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" \
> actual.txt || exit 1
echo "${EXPECTED}" > expected.txt
if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt actual.txt || (echo "... ignoring error" && true)
else
diff expected.txt actual.txt || exit 1
fi
}
# Check generated wav file from processed text
test_wav () {
VOICE=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4
echo "testing ${VOICE}${MESSAGE}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng --stdout -v ${VOICE} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
echo "${EXPECTED}" > expected.txt
if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt sum.txt || (echo "... ignoring error" && true)
else
diff expected.txt sum.txt || exit 1
fi
}
# Check generated wav file from processed text, where $EXPECTED is grep string
test_wav_grep () {
VOICE=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4
echo "testing ${VOICE}${MESSAGE}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng --stdout -v ${VOICE} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
if [ "$MESSAGE" = "Ignore" ] ; then
cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true)
else
cat sum.txt | grep -E "$EXPECTED" || { printf "wrong hash: "; cat actual.txt; exit 1; }
fi
}
# Check generated wav file from list of phonemes
test_phwav() {
TEST_LANG=$1
EXPECTED=$2
TEST_TEXT=$3
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]"
}
test_replace() {
TEST_LANG=$1
TEST_TEXT=$2
MESSAGE=$3
if [ "$MESSAGE" = "" ] ; then
MESSAGE=$TEST_TEXT
fi
echo "testing ${TEST_LANG}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' > filtered.txt
if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt filtered.txt || (echo "... ignoring error" && true)
else
diff expected.txt filtered.txt || exit 1
fi
}