Browse Source

tests: do not use temp files (#1579)

So we can run tests parallel with cmake, reducing test time and IO
overhead
master
Alexander Epaneshnikov 1 year ago
parent
commit
5288c21d17
No account linked to committer's email address
7 changed files with 103 additions and 105 deletions
  1. 1
    1
      .github/workflows/ci.yml
  2. 2
    2
      .github/workflows/dist.yml
  3. 1
    1
      .github/workflows/windows.yml
  4. 1
    0
      cmake/data.cmake
  5. 69
    59
      tests/common
  6. 12
    31
      tests/language-replace.test
  7. 17
    11
      tests/ssml.test

+ 1
- 1
.github/workflows/ci.yml View File

- name: test - name: test
run: | run: |
${{ matrix.config_env }} ${{ matrix.runenv }} cmake --build build --target tests ${{ matrix.config_env }} ${{ matrix.runenv }} cmake --build build --target tests
${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -Ttest -j1 --output-on-failure ${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -Ttest -j8 --output-on-failure

+ 2
- 2
.github/workflows/dist.yml View File

- name: make - name: make
run: cmake --build build run: cmake --build build
- name: make check - name: make check
run: ctest --test-dir build -Ttest -j1 --output-on-failure run: ctest --test-dir build -Ttest -j8 --output-on-failure


- name: make package_source - name: make package_source
run: cmake --build build --target package_source run: cmake --build build --target package_source
- name: re-make - name: re-make
run: cd unpack/espeak-ng-* && cmake --build build run: cd unpack/espeak-ng-* && cmake --build build
- name: re-make check - name: re-make check
run: cd unpack/espeak-ng-* && ctest --test-dir build -Ttest -j1 --output-on-failure run: cd unpack/espeak-ng-* && ctest --test-dir build -Ttest -j8 --output-on-failure

+ 1
- 1
.github/workflows/windows.yml View File

- name: make - name: make
run: cmake --build build --config ${{ matrix.config }} run: cmake --build build --config ${{ matrix.config }}
- name: make check - name: make check
run: ctest --test-dir build -Ttest -C ${{ matrix.config }} -j1 --output-on-failure run: ctest --test-dir build -Ttest -C ${{ matrix.config }} -j8 --output-on-failure

+ 1
- 0
cmake/data.cmake View File

WORKING_DIRECTORY "${PHONEME_SRC_DIR}" WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
COMMENT "Compile phonemes" COMMENT "Compile phonemes"
DEPENDS DEPENDS
"${DATA_DIST_DIR}/intonations"
"$<TARGET_FILE:espeak-ng-bin>" "$<TARGET_FILE:espeak-ng-bin>"
${_phon_deps} ${_phon_deps}
) )

+ 69
- 59
tests/common View File

#!/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 ... " echo -n "checking for SHA1 hashing command ... "
if check_hash sha1sum; then if check_hash sha1sum; then
sha1sum=sha1sum sha1sum=sha1sum
elif check_hash sha1; then elif check_hash sha1; then
sha1sum=sha1 sha1sum=sha1
elif check_hash shasum; then elif check_hash shasum; then
sha1sum=shasum sha1sum=shasum
else else
echo "no" echo "no"
exit 1 exit 1
fi fi
} }
check_hash() { check_hash() {
which $1 && which $1 &&
$1 </dev/null 2>/dev/null | $1 </dev/null 2>/dev/null |
awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}' awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}'
# Test some common commands to find the correct one for the system being tested on. # 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} \ RESULT=$(
$VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" \ ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
> actual.txt || exit 1 $VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" || exit 1
echo "${EXPECTED}" > expected.txt )
if [ "$MESSAGE" = "Ignore" ] ; then if [ "x$RESULT" != "x$EXPECTED" ] ; then
diff expected.txt actual.txt || (echo "... ignoring error" && true) echo "$RESULT != $EXPECTED"
else if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt actual.txt || exit 1 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 VOICE=$1
EXPECTED=$2 EXPECTED=$2
TEST_TEXT=$3 TEST_TEXT=$3
MESSAGE=$4 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}" \ $VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" | $sha1sum | awk '{ print $1 }' || exit 1
> actual.txt || exit 1 )
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt if [ "x$RESULT" != "x$EXPECTED" ] ; then
echo "${EXPECTED}" > expected.txt 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 VOICE=$1
EXPECTED=$2 EXPECTED=$2
TEST_TEXT=$3 TEST_TEXT=$3
MESSAGE=$4 MESSAGE=$4
echo "testing ${VOICE}${MESSAGE}" 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}" \ ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
> actual.txt || exit 1 $VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt > actual.txt || exit 1
if [ "$MESSAGE" = "Ignore" ] ; then < actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true) if [ "$MESSAGE" = "Ignore" ] ; then
else cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true)
cat sum.txt | grep -E "$EXPECTED" || { printf "wrong hash: "; cat sum.txt; exit 1; } else
fi 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} \ RESULT=$(
$VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" \ ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
> actual.txt || exit 1 $VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" | \
< actual.txt grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' > filtered.txt grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' || exit 1
if [ "$MESSAGE" = "Ignore" ] ; then )
diff expected.txt filtered.txt || (echo "... ignoring error" && true) if [ "x$RESULT" != "x$EXPECTED" ] ; then
else echo "$RESULT != $EXPECTED"
diff expected.txt filtered.txt || exit 1 if [ "$MESSAGE" = "Ignore" ] ; then
echo "... ignoring error"
else
exit 1
fi
fi fi
} }


+ 12
- 31
tests/language-replace.test View File

##### 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 test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni'
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' Translate 'štos'"
EOF
test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос."


##### en: English ##### en: English


cat > expected.txt <<EOF test_replace en "Æon mediæval. Œconomy phœnix. Loſt history." "Translate 'aeon'
Translate 'aeon'
Found: 'mediaeval' Found: 'mediaeval'
Translate 'oeconomy' Translate 'oeconomy'
Found: 'phoenix' Found: 'phoenix'
Found: 'lost' Found: 'lost'
Translate 'history' Translate 'history'"
EOF
test_replace en "Æon mediæval. Œconomy phœnix. Loſt 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 test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni'
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' Translate 'štos'"
EOF
test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос."


##### ja: Japanese ##### ja: Japanese


# いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん. # いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん.
cat > expected.txt <<EOF test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン." "Translate 'いろはにほへと'
Translate 'いろはにほへと'
Translate 'ちりぬるを' Translate 'ちりぬるを'
Translate 'わかよたれそ' Translate 'わかよたれそ'
Translate 'つねならむ' Translate 'つねならむ'
Translate 'うゐのおくやま' Translate 'うゐのおくやま'
Translate 'けふこえて' Translate 'けふこえて'
Translate 'あさきゆめみし' Translate 'あさきゆめみし'
Translate 'ゑひもせすん' Translate 'ゑひもせすん'"
EOF
test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン."


##### mk: Macedonian ##### mk: Macedonian


# Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех. # Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех.
cat > expected.txt <<EOF 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 'туѓ'
Translate 'цех' Translate 'цех'"
EOF
test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh."


##### 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 test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni'
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' Translate 'štos'"
EOF
test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос."


+ 17
- 11
tests/ssml.test View File

OPTS=$4 OPTS=$4


echo "testing ${TEST_NAME}" echo "testing ${TEST_NAME}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ RESULT=$(
$VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} \ ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
> actual.txt || exit 1 $VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} | $sha1sum | awk '{ print $1 }' || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt )
echo "${EXPECTED}" > expected.txt if [ "x$RESULT" != "x$EXPECTED" ] ; then
diff expected.txt sum.txt || exit 1 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 EXPECTED=$(cat $(dirname $INPUT)/$(basename ${INPUT%.*}).expected)
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ RESULT=$(
$VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} \ ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
> actual.txt || exit 1 $VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} || exit 1
diff expected.txt actual.txt || 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

Loading…
Cancel
Save