#!/bin/sh # The build system runs this test from a different working directory, and may # be in a build directory entirely separate from the source. So if the # "srcdir" variable is set, we must use it to locate the test files and the # glcpp-test script. if [ ! -z "$srcdir" ]; then testdir="$srcdir/glcpp/tests" glcpp_test="$srcdir/glcpp/tests/glcpp-test" else testdir=. glcpp_test=./glcpp-test fi total=0 pass=0 # This supports a pipe that doesn't destroy the exit status of first command # # http://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another stdintoexitstatus() { read exitstatus return $exitstatus } run_test () { cmd="$1" total=$((total+1)) if [ "$VERBOSE" = "yes" ]; then if $cmd; then echo "PASS" pass=$((pass+1)) else echo "FAIL" fi else # This is "$cmd | tail -2" but with the exit status of "$cmd" not "tail -2" if (((($cmd; echo $? >&3) | tail -2 | head -1 >&4) 3>&1) | stdintoexitstatus) 4>&1; then echo "PASS" pass=$((pass+1)) else echo "FAIL" fi fi } usage () { cat <&2 echo >&2 usage exit 1 ;; esac done # All tests depend on the .out files being present. So first do a # normal run of the test suite, (silently) just to create the .out # files as a side effect. rm -rf ./subtest-lf mkdir subtest-lf for file in "$testdir"/*.c; do base=$(basename "$file") cp "$file" subtest-lf done ${glcpp_test} --testdir=subtest-lf >/dev/null 2>&1 echo "===== Testing with \\\\r line terminators (old Mac format) =====" # Prepare test files with '\r' instead of '\n' rm -rf ./subtest-cr mkdir subtest-cr for file in "$testdir"/*.c; do base=$(basename "$file") tr "\n" "\r" < "$file" > subtest-cr/"$base" cp subtest-lf/"$base".out subtest-cr/"$base".expected done run_test "${glcpp_test} --testdir=subtest-cr" echo "===== Testing with \\\\r\\\\n line terminators (DOS format) =====" # Prepare test files with '\r\n' instead of '\n' rm -rf ./subtest-cr-lf mkdir subtest-cr-lf for file in "$testdir"/*.c; do base=$(basename "$file") sed -e 's/$/\r/' < "$file" > subtest-cr-lf/"$base" cp subtest-lf/"$base".out subtest-cr-lf/"$base".expected done run_test "${glcpp_test} --testdir=subtest-cr-lf" echo "===== Testing with \\\\n\\\\r (bizarre, but allowed by GLSL spec.) =====" # Prepare test files with '\n\r' instead of '\n' rm -rf ./subtest-lf-cr mkdir subtest-lf-cr for file in "$testdir"/*.c; do base=$(basename "$file") tr "\n" "\r" < "$file" | sed -e 's/\r/\n\r/g' > subtest-lf-cr/"$base" cp subtest-lf/"$base".out subtest-lf-cr/"$base".expected done run_test "${glcpp_test} --testdir=subtest-lf-cr" echo "" echo "$pass/$total tests returned correct results" echo "" if [ "$pass" = "$total" ]; then exit 0 else exit 1 fi