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 ... "
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
} }


+ 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
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'"

+ 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} \
$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

Loading…
Cancel
Save