From bf5f1eb3e8d0aa0b76bd16cf859ce344378fd480 Mon Sep 17 00:00:00 2001 From: Tommaso Cucinotta Date: Sun, 3 Jul 2011 17:00:18 +0000 Subject: [PATCH] Added the possibility to build arbitrary scripts (*-in.sh) as tests. They are all launched together with the others when typing 'make', and also they can be selectively launched by using: ./run-tests.sh filename-in.sh. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39241 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/autotests/README | 13 +++++++++++ development/autotests/export-in.sh | 21 +++++++++++++++++ development/autotests/run-tests.sh | 36 +++++++++++++++++++++--------- 3 files changed, 60 insertions(+), 10 deletions(-) create mode 100755 development/autotests/export-in.sh diff --git a/development/autotests/README b/development/autotests/README index 177cfabf2b..bd28751216 100644 --- a/development/autotests/README +++ b/development/autotests/README @@ -58,6 +58,19 @@ Each test-case script should be named as xxx-in.txt. The syntax of the script is described in detail in the sample test-case script hello-world-in.txt. +Alternatively, a test-case can be an arbitrary executable script with +name ending in "-in.sh", that is launched inside a dedicated folder, +and to which the variables LYX_ROOT and LYX_EXE are exported, so that +you can easily reference the root LyX sources folder and the program +executable. The test script needs to complete with a no-error return +value (zero), otherwise a failure is reported (see export-in.sh for +an example). + +Whenever LyX is launched, in both cases, the LYX_USERDIR variable is +set to autotests/out-home, in order to rely on clean preferences +settings (use make clean or make without arguments in order to let +that folder be created again). + TODO ---------------------------------------------------------------------- diff --git a/development/autotests/export-in.sh b/development/autotests/export-in.sh new file mode 100755 index 0000000000..275ee085ae --- /dev/null +++ b/development/autotests/export-in.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +failed=0 +for format in xhtml lyx16x; do + for f in $LYX_ROOT/lib/doc/*lyx; do + if $LYX_EXE -e $format $f >> lyx-log.txt 2>&1; then + echo $format $f TEST_GOOD + else + echo $format $f TEST_BAD + failed=$[$failed+1]; + fi; + done; +done + +if [ $failed -eq 0 ]; then + echo "All formats SUCCESSFUL" + exit 0; +else + echo "There were $failed FAILED format tests" + exit -1; +fi diff --git a/development/autotests/run-tests.sh b/development/autotests/run-tests.sh index 80201083a1..f61cc6e128 100755 --- a/development/autotests/run-tests.sh +++ b/development/autotests/run-tests.sh @@ -4,7 +4,8 @@ # Tests are identified as having a file name of *-in.txt # For failed tests, the collected output is kept in the corresponding folder -export LYX_EXE=../../../src/lyx +export LYX_ROOT=../../.. +export LYX_EXE=$LYX_ROOT/src/lyx if [ "$XVKBD_HACKED" != "" ]; then export XVKBD_EXE=${XVKBD:-./xvkbd/xvkbd}; @@ -38,7 +39,7 @@ if [ ! -d ../../locale ]; then fi if [ "$#" -eq 0 ]; then - TESTS=$(ls *-in.txt | sed -e 's/hello-world-in.txt\|first-time-in.txt//') + TESTS=$(ls *-in.txt *-in.sh | sed -e 's/hello-world-in.txt\|first-time-in.txt//') rm -rf out-*; else TESTS=$* @@ -52,7 +53,7 @@ if [ ! -d $LYX_HOME ]; then # cp preferences $LYX_USERDIR cd $LYX_HOME echo "Initializing testing environment . . ." - if ! ../single-test.sh "../first-time-in.txt" > keytest-log.txt 2>&1; then + if ! ../single-test.sh "../first-time-in.txt" > test-log.txt 2>&1; then echo "Some error occurred: check $(pwd)" exit -1; fi @@ -63,18 +64,34 @@ fi ./stop_autotests.tcl & pid=$! +function stop_button() { + kill $pid + wait $pid > /dev/null 2>&1 +} + echo "Running test cases . . ." failed=0 -for t in $(echo "$TESTS" | sed -e 's/-in.txt//g'); do - printf "%40s: " $t - if [ ! -f "$t-in.txt" ]; then - echo "ERROR: File not found: $t-in.txt" +for tf in $(echo "$TESTS"); do + t=$(echo $tf | sed -e 's/-in.txt//g' | sed -e 's/-in.sh//g') + printf "%40s: " $tf + if [ -f "$t-in.txt" ]; then + cmd="../single-test.sh ../$t-in.txt"; + elif [ -f "$t-in.sh" ]; then + if [ ! -x "$t-in.sh" ]; then + echo "ERROR: $t-in.sh is not executable" + stop_button + exit -1; + fi + cmd="../$tf"; + else + echo "ERROR: File not found: $t-in.txt or $t-in.sh" + stop_button exit -1; fi rm -rf "out-$t" mkdir "out-$t" cd "out-$t" - if ../single-test.sh "../$t-in.txt" > keytest-log.txt 2>&1; then + if "$cmd" > test-log.txt 2>&1; then echo Ok cd .. rm -rf "out-$t"; @@ -85,8 +102,7 @@ for t in $(echo "$TESTS" | sed -e 's/-in.txt//g'); do fi; done -kill $pid -wait $pid > /dev/null 2>&1 +stop_button echo if [ $failed -eq 0 ]; then