Index: incubator/apertium-bel-rus/t/.gitignore =================================================================== --- incubator/apertium-bel-rus/t/.gitignore (nonexistent) +++ incubator/apertium-bel-rus/t/.gitignore (revision 71863) @@ -0,0 +1,3 @@ +*.html +config.sh +*.results Index: incubator/apertium-bel-rus/t/README.org =================================================================== --- incubator/apertium-bel-rus/t/README.org (nonexistent) +++ incubator/apertium-bel-rus/t/README.org (revision 71863) @@ -0,0 +1,47 @@ +#+STARTUP: showall + + +* Setting up tests for a new language pair +To add these test scripts to your language pair, go into your language +pair directory and do: + +#+BEGIN_SRC sh +git clone https://github.com/unhammer/apertium-wiki-tests t +# edit t/config.sh.in and save as t/config.sh +svn add --depth=files t +#+END_SRC + +You should have your tests in a page named after your language pair, e.g. +http://wiki.apertium.org/wiki/apertium-sme-smj/Regression_tests +and +http://wiki.apertium.org/wiki/apertium-sme-smj/Pending_tests + + +* Running the tests + +To run the tests from your language pair, assuming it's been set up as +shown above, do + +#+BEGIN_SRC sh + t/update-latest +#+END_SRC + +This will overwrite the files named t/latest-pending.results and +t/latest-regression.results. You can view the differences with + +#+BEGIN_SRC sh + svn diff +#+END_SRC + +Test results are kept in SVN since that means we don't have to keep +moving things back and forth between "Pending" and "Regression" in the +wiki whenever we pass a new test (or fail an old one), and we get a +nice log of our progression. + +To run just regression or just pending tests, use t/pending-tests or +t/regression-tests. Pass the -f argument to those scripts to only see +failed regression tests or passed pending tests, e.g. + +#+BEGIN_SRC sh +t/regression-tests -f +#+END_SRC Index: incubator/apertium-bel-rus/t/config.sh =================================================================== --- incubator/apertium-bel-rus/t/config.sh (nonexistent) +++ incubator/apertium-bel-rus/t/config.sh (revision 71863) @@ -0,0 +1 @@ +PAIRS=( bel-rus rus-bel ) Index: incubator/apertium-bel-rus/t/pending-tests =================================================================== --- incubator/apertium-bel-rus/t/pending-tests (nonexistent) +++ incubator/apertium-bel-rus/t/pending-tests (revision 71863) @@ -0,0 +1,11 @@ +#!/bin/bash + +# Run with -p to show only passing tests + +set -e -u + +source "$(dirname $0)"/config.sh + +for pair in "${PAIRS[@]}"; do + bash "$(dirname $0)"/wiki-tests -u "$@" Pending "${pair}" +done Property changes on: incubator/apertium-bel-rus/t/pending-tests ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: incubator/apertium-bel-rus/t/regression-tests =================================================================== --- incubator/apertium-bel-rus/t/regression-tests (nonexistent) +++ incubator/apertium-bel-rus/t/regression-tests (revision 71863) @@ -0,0 +1,11 @@ +#!/bin/bash + +# Run with -f to show only failing tests + +set -e -u + +source "$(dirname $0)"/config.sh + +for pair in "${PAIRS[@]}"; do + bash "$(dirname $0)"/wiki-tests -u "$@" Regression "${pair}" +done Property changes on: incubator/apertium-bel-rus/t/regression-tests ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: incubator/apertium-bel-rus/t/update-latest =================================================================== --- incubator/apertium-bel-rus/t/update-latest (nonexistent) +++ incubator/apertium-bel-rus/t/update-latest (revision 71863) @@ -0,0 +1,6 @@ +#!/bin/bash + +cd "$(dirname $0)"/../ +t/regression-tests > t/latest-regression.results & +t/pending-tests > t/latest-pending.results & +wait Property changes on: incubator/apertium-bel-rus/t/update-latest ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: incubator/apertium-bel-rus/t/wiki-tests =================================================================== --- incubator/apertium-bel-rus/t/wiki-tests (nonexistent) +++ incubator/apertium-bel-rus/t/wiki-tests (revision 71863) @@ -0,0 +1,171 @@ +#!/bin/bash + +set -e -u + +######## Globals: + +# You shouldn't have to change this unless the wiki gets a new host: +if [[ ! -f "$(dirname $0)/../config.log" ]]; then + echo "Can't find $(dirname $0)/../config.log, did you forget to run autogen.sh?" >&2 + exit 1 +fi +declare -r PACKAGE=$(grep ^PACKAGE= "$(dirname $0)/../config.log" |grep -o "apertium-[^']*") # e.g. apertium-sme-nob +declare -r BASEURL="http://wiki.apertium.org/wiki/${PACKAGE}" + +# Workarounds for Mac's: +SED=sed +if [[ "$(uname -s)" = Darwin ]]; then + SED=gsed +fi +declare -r SED + + +######## Functions: + +fetchtests () { + local -r update=$1 + local -r testtype=$2 + local -r html=$3 + + if ${update}; then + tmp=$(mktemp -t wiki-tests.html.XXXXXXXXXX) + if wget -O "${tmp}" -q "${BASEURL}/${testtype}" && [[ -s "${tmp}" ]]; then + mv "${tmp}" "${html}" + else + rm "${tmp}" + echo "Couldn't fetch ${BASEURL}/${testtype}" >&2 + fi + fi + + if [[ ! -s "${html}" ]]; then + echo "${html} does not exist or is empty (use '-u' option)" >&2 + exit 1 + fi +} + +decodehtml() { + # Decodes the three HTML standard entities if they are part of the test, + # because even if they are not written as HTML entities in MediaWiki, they + # are rendered as such because we use the HTML rendering of the MediaWiki + # page as source. + sed -e "s/<//g" -e "s/&/\&/g" +} + +cleantst () { + # Would use these, but printf on Mac doesn't support unicode + # names, so the below sed's use *literal* byte-order-marks and + # zero-width-spaces: + local bom=$(env printf "\uFEFF") + local zws=$(env printf "\u200B") + $SED 's/^ *//; s/ *$//; s/\([^,.?!:;]\)$/\1./g; s/ */ /g' \ + | $SED -e "s///g" \ + | $SED -e "s/​//g" +} +cleansrc () { + local -r srclang=$1 trglang=$2 + local -r tdir="\\((${srclang})\\|(${srclang}-${trglang})\\)" + grep -o "
  • ${tdir}[^→]*" |$SED "s%]*>%%g; s% *${tdir} *%%" | cleantst | decodehtml +} +cleantrg () { + local -r srclang=$1 trglang=$2 + local -r tdir="\\((${srclang})\\|(${srclang}-${trglang})\\)" + grep -o "
  • ${tdir}.*" | $SED 's%[^→]*→ *%%; s%::.*%%' | cleantst | decodehtml +} + +summary () { + local -r mode=$1 srclist=$2 trglist=$3 tstlist=$4 onlyfail=$5 onlypass=$6 + # Output the MT vs ref translations: + local -i total=0 + local -i correct=0 + local -r sep='' + while IFS="${sep}" read -r src trg tst; do + if [[ "${trg}" = "${tst}" ]]; then + (( ++correct )) + $onlyfail || printf "%s\t %s\nWORKS\t %s\n\n\n" "${mode}" "${src}" "${tst}" + else + (( 1 )) + $onlypass || printf "%s\t %s\n\t- %s\n\t+ %s\n\n\n" "${mode}" "${src}" "${trg}" "${tst}" + fi + (( ++total )) + done < <(paste -d "${sep}" "${srclist}" "${trglist}" "${tstlist}") + + # Output the sums: + pct= + if command -V calc &>/dev/null; then + pct=$(calc -p "round(${correct} / ${total}, 4) * 100") + pct=", ${pct}%" + fi + echo "${correct} / ${total}${pct}" +} + +echo_revision () { + if rev=$(svn info 2>/dev/null); then + echo "${rev}" | grep -e ^Revisjon -e ^Revision + elif git config --get svn-remote.svn.fetch &>/dev/null; then + git svn info | grep -a -e ^Revisjon -e ^Revision + else + echo "(doesn't seem to be a repo)" + fi +} +showrevisions () { + echo_revision + grep ^AP_SRC "$(dirname $0)/../config.log" | while IFS='=' read -r var dir; do + printf "%s " "${var}" + ( cd "${dir//\'}"; echo_revision ) + done +} + +main () { + # Parse options: + update=false + onlypass=false + onlyfail=false + while getopts "upf" opt; do + case "$opt" in + u) update=true;; + f) onlyfail=true;; + p) onlypass=true;; + \?) echo "Invalid option" >&2; exit 2;; + :) echo "Option requires an argument." >&2; exit 2;; + esac + done + shift "$((OPTIND-1))" + if [[ $# -ne 2 ]] || ( ${onlypass} && ${onlyfail} ); then + echo "Usage: $0 [-u] [-p|-f] {Regression,Pending} srclang-trglang" + echo "-u Use updated tests" + echo "-p Show only passing tests" + echo "-f Show only failing tests" + exit 2 + fi + declare -r testtype="$1_tests" + declare -r srclang="${2%%-*}" + declare -r trglang="${2##*-}" + + # Derived options: + declare -r mode="${srclang}-${trglang}" + declare -r html="$(dirname $0)/${testtype}.html" + + srclist=$(mktemp -t "${mode}-src.XXXXXXXXXX") + trglist=$(mktemp -t "${mode}-trg.XXXXXXXXXX") + tstlist=$(mktemp -t "${mode}-tst.XXXXXXXXXX") + rawlist=$(mktemp -t "${mode}-raw.XXXXXXXXXX") + trap "rm -f \"${srclist}\" \"${trglist}\" \"${tstlist}\" \"${rawlist}\"" EXIT + + showrevisions + printf "Running $1-tests with mode \"${mode}\" "; ${update} && printf "with updated tests "; echo "..." + echo + fetchtests "${update}" "${testtype}" "${html}" + cleansrc "${srclang}" "${trglang}" < "${html}" > "${srclist}" + cleantrg "${srclang}" "${trglang}" < "${html}" > "${trglist}" + ( + set -o pipefail + if ! apertium -d . "${mode}" < "${srclist}" > "${rawlist}"; then + cat "${rawlist}" >&2 + return 1 + fi + cleantst <"${rawlist}" > "${tstlist}" + ) + summary "${mode}" "${srclist}" "${trglist}" "${tstlist}" "${onlyfail}" "${onlypass}" +} + +main "$@" Property changes on: incubator/apertium-bel-rus/t/wiki-tests ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: incubator/apertium-bel-rus/apertium-bel-rus.rus-bel.t1x =================================================================== --- incubator/apertium-bel-rus/apertium-bel-rus.rus-bel.t1x (revision 71861) +++ incubator/apertium-bel-rus/apertium-bel-rus.rus-bel.t1x (revision 71863) @@ -22,6 +22,9 @@ + + + @@ -57,7 +60,6 @@ - @@ -377,6 +379,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -496,7 +594,7 @@ - +