#!/bin/sh | #!/bin/sh | ||||
# Test a command for presence and ability to output the sha1 hash of a file | # Test a command for presence and ability to output the sha1 hash of a file | ||||
is_hash() { | 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 | |||||
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() { | 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. | |||||
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 MBROLA synthesizer is installed | # test if MBROLA synthesizer is installed | ||||
fi | fi | ||||
echo "testing ${TEST_LANG} $MESSAGE" | 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 | |||||
RESULT=$( | |||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||||
$VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" || exit 1 | |||||
) | |||||
if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||||
echo "$RESULT != $EXPECTED" | |||||
if [ "$MESSAGE" = "Ignore" ] ; then | |||||
echo "... ignoring error" | |||||
else | |||||
exit 1 | |||||
fi | |||||
fi | fi | ||||
} | } | ||||
# Check generated wav file from processed text | # Check generated wav file from processed text | ||||
test_wav () { | test_wav () { | ||||
VOICE=$1 | |||||
EXPECTED=$2 | |||||
TEST_TEXT=$3 | |||||
MESSAGE=$4 | |||||
VOICE=$1 | |||||
EXPECTED=$2 | |||||
TEST_TEXT=$3 | |||||
MESSAGE=$4 | |||||
echo "testing ${VOICE}${MESSAGE}" | |||||
echo "testing ${VOICE} ${MESSAGE}" | |||||
RESULT=$( | |||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | ||||
$VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \ | |||||
> actual.txt || exit 1 | |||||
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||||
echo "${EXPECTED}" > expected.txt | |||||
$VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" | $sha1sum | awk '{ print $1 }' || exit 1 | |||||
) | |||||
if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||||
echo "$RESULT != $EXPECTED" | |||||
if [ "$MESSAGE" = "Ignore" ] ; then | if [ "$MESSAGE" = "Ignore" ] ; then | ||||
diff expected.txt sum.txt || (echo "... ignoring error" && true) | |||||
echo "... ignoring error" | |||||
else | else | ||||
diff expected.txt sum.txt || exit 1 | |||||
exit 1 | |||||
fi | fi | ||||
fi | |||||
} | } | ||||
# Check generated wav file from processed text, where $EXPECTED is grep string | # Check generated wav file from processed text, where $EXPECTED is grep string | ||||
test_wav_grep () { | 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 -D --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 sum.txt; exit 1; } | |||||
fi | |||||
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 -D --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 sum.txt; exit 1; } | |||||
fi | |||||
} | } | ||||
# Check generated wav file from list of phonemes | # Check generated wav file from list of phonemes | ||||
TEST_LANG=$1 | TEST_LANG=$1 | ||||
EXPECTED=$2 | EXPECTED=$2 | ||||
TEST_TEXT=$3 | TEST_TEXT=$3 | ||||
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]" | |||||
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]" | |||||
} | } | ||||
test_replace() { | test_replace() { | ||||
TEST_LANG=$1 | TEST_LANG=$1 | ||||
TEST_TEXT=$2 | TEST_TEXT=$2 | ||||
MESSAGE=$3 | |||||
EXPECTED=$3 | |||||
MESSAGE=$4 | |||||
if [ "$MESSAGE" = "" ] ; then | if [ "$MESSAGE" = "" ] ; then | ||||
MESSAGE=$TEST_TEXT | MESSAGE=$TEST_TEXT | ||||
fi | fi | ||||
echo "testing ${TEST_LANG}" | 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 | |||||
RESULT=$( | |||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||||
$VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" | \ | |||||
grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' || exit 1 | |||||
) | |||||
if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||||
echo "$RESULT != $EXPECTED" | |||||
if [ "$MESSAGE" = "Ignore" ] ; then | |||||
echo "... ignoring error" | |||||
else | |||||
exit 1 | |||||
fi | |||||
fi | fi | ||||
} | } | ||||
##### bs: Bosnian | ##### bs: Bosnian | ||||
# Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | ||||
cat > expected.txt <<EOF | |||||
Translate 'ljubazni' | |||||
test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni' | |||||
Translate 'fenjerdžija' | Translate 'fenjerdžija' | ||||
Translate 'čađavog' | Translate 'čađavog' | ||||
Translate 'lica' | Translate 'lica' | ||||
Translate 'da' | Translate 'da' | ||||
Translate 'mi' | Translate 'mi' | ||||
Translate 'pokaže' | Translate 'pokaže' | ||||
Translate 'štos' | |||||
EOF | |||||
test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос." | |||||
Translate 'štos'" | |||||
##### en: English | ##### en: English | ||||
cat > expected.txt <<EOF | |||||
Translate 'aeon' | |||||
test_replace en "Æon mediæval. Œconomy phœnix. Loſt history." "Translate 'aeon' | |||||
Found: 'mediaeval' | Found: 'mediaeval' | ||||
Translate 'oeconomy' | Translate 'oeconomy' | ||||
Found: 'phoenix' | Found: 'phoenix' | ||||
Found: 'lost' | Found: 'lost' | ||||
Translate 'history' | |||||
EOF | |||||
test_replace en "Æon mediæval. Œconomy phœnix. Loſt history." | |||||
Translate 'history'" | |||||
##### hr: Croatian | ##### hr: Croatian | ||||
# Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | ||||
cat > expected.txt <<EOF | |||||
Translate 'ljubazni' | |||||
test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni' | |||||
Translate 'fenjerdžija' | Translate 'fenjerdžija' | ||||
Translate 'čađavog' | Translate 'čađavog' | ||||
Translate 'lica' | Translate 'lica' | ||||
Translate 'da' | Translate 'da' | ||||
Translate 'mi' | Translate 'mi' | ||||
Translate 'pokaže' | Translate 'pokaže' | ||||
Translate 'štos' | |||||
EOF | |||||
test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." | |||||
Translate 'štos'" | |||||
##### ja: Japanese | ##### ja: Japanese | ||||
# いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん. | # いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん. | ||||
cat > expected.txt <<EOF | |||||
Translate 'いろはにほへと' | |||||
test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン." "Translate 'いろはにほへと' | |||||
Translate 'ちりぬるを' | Translate 'ちりぬるを' | ||||
Translate 'わかよたれそ' | Translate 'わかよたれそ' | ||||
Translate 'つねならむ' | Translate 'つねならむ' | ||||
Translate 'うゐのおくやま' | Translate 'うゐのおくやま' | ||||
Translate 'けふこえて' | Translate 'けふこえて' | ||||
Translate 'あさきゆめみし' | Translate 'あさきゆめみし' | ||||
Translate 'ゑひもせすん' | |||||
EOF | |||||
test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン." | |||||
Translate 'ゑひもせすん'" | |||||
##### mk: Macedonian | ##### mk: Macedonian | ||||
# Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех. | # Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех. | ||||
cat > expected.txt <<EOF | |||||
Translate 'ѕидарски' | |||||
test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh." "Translate 'ѕидарски' | |||||
Translate 'пејзаж' | Translate 'пејзаж' | ||||
Translate 'шугав' | Translate 'шугав' | ||||
Translate 'билмез' | Translate 'билмез' | ||||
Translate 'кељ' | Translate 'кељ' | ||||
Translate 'на' | Translate 'на' | ||||
Translate 'туѓ' | Translate 'туѓ' | ||||
Translate 'цех' | |||||
EOF | |||||
test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh." | |||||
Translate 'цех'" | |||||
##### sr: Serbian | ##### sr: Serbian | ||||
# Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | ||||
cat > expected.txt <<EOF | |||||
Translate 'ljubazni' | |||||
test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni' | |||||
Translate 'fenjerdžija' | Translate 'fenjerdžija' | ||||
Translate 'čađavog' | Translate 'čađavog' | ||||
Translate 'lica' | Translate 'lica' | ||||
Translate 'da' | Translate 'da' | ||||
Translate 'mi' | Translate 'mi' | ||||
Translate 'pokaže' | Translate 'pokaže' | ||||
Translate 'štos' | |||||
EOF | |||||
test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." | |||||
Translate 'štos'" |
OPTS=$4 | OPTS=$4 | ||||
echo "testing ${TEST_NAME}" | echo "testing ${TEST_NAME}" | ||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||||
$VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} \ | |||||
> actual.txt || exit 1 | |||||
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||||
echo "${EXPECTED}" > expected.txt | |||||
diff expected.txt sum.txt || exit 1 | |||||
RESULT=$( | |||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||||
$VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} | $sha1sum | awk '{ print $1 }' || exit 1 | |||||
) | |||||
if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||||
echo "$RESULT != $EXPECTED" | |||||
exit 1 | |||||
fi | |||||
} | } | ||||
test_ssml() { | test_ssml() { | ||||
fi | fi | ||||
echo "testing ${INPUT}" | echo "testing ${INPUT}" | ||||
cp $(dirname $INPUT)/$(basename ${INPUT%.*}).expected expected.txt | |||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||||
$VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} \ | |||||
> actual.txt || exit 1 | |||||
diff expected.txt actual.txt || exit 1 | |||||
EXPECTED=$(cat $(dirname $INPUT)/$(basename ${INPUT%.*}).expected) | |||||
RESULT=$( | |||||
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||||
$VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} || exit 1 | |||||
) | |||||
if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||||
echo "$RESULT != $EXPECTED" | |||||
exit 1 | |||||
fi | |||||
} | } | ||||
for i in `dirname $0`/ssml/*.ssml ; do test_ssml $i; done | for i in `dirname $0`/ssml/*.ssml ; do test_ssml $i; done |