diff --git a/gm/tests/inputs/dashing-correct-images/4444/dashing.png b/gm/tests/inputs/dashing-correct-images/4444/dashing.png new file mode 100644 index 0000000000..e201a72d68 Binary files /dev/null and b/gm/tests/inputs/dashing-correct-images/4444/dashing.png differ diff --git a/gm/tests/inputs/dashing-correct-images/4444/dashing2.png b/gm/tests/inputs/dashing-correct-images/4444/dashing2.png new file mode 100644 index 0000000000..91d37eb901 Binary files /dev/null and b/gm/tests/inputs/dashing-correct-images/4444/dashing2.png differ diff --git a/gm/tests/inputs/dashing-incorrect-images/4444/dashing.png b/gm/tests/inputs/dashing-incorrect-images/4444/dashing.png new file mode 100644 index 0000000000..c319eabb2e Binary files /dev/null and b/gm/tests/inputs/dashing-incorrect-images/4444/dashing.png differ diff --git a/gm/tests/inputs/dashing-incorrect-images/4444/dashing2.png b/gm/tests/inputs/dashing-incorrect-images/4444/dashing2.png new file mode 100644 index 0000000000..ed37a88211 Binary files /dev/null and b/gm/tests/inputs/dashing-incorrect-images/4444/dashing2.png differ diff --git a/gm/tests/outputs/dashing-compared-against-correct/output-expected/command_line b/gm/tests/outputs/dashing-compared-against-correct/output-expected/command_line new file mode 100644 index 0000000000..8a95ecd2bc --- /dev/null +++ b/gm/tests/outputs/dashing-compared-against-correct/output-expected/command_line @@ -0,0 +1 @@ +out/Debug/gm --hierarchy --match dashing --config 4444 -r gm/tests/inputs/dashing-correct-images -w gm/tests/outputs/dashing-compared-against-correct/output-actual/images diff --git a/gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing.png b/gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing.png new file mode 100644 index 0000000000..e201a72d68 Binary files /dev/null and b/gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing.png differ diff --git a/gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing2.png b/gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing2.png new file mode 100644 index 0000000000..91d37eb901 Binary files /dev/null and b/gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing2.png differ diff --git a/gm/tests/outputs/dashing-compared-against-correct/output-expected/return_value b/gm/tests/outputs/dashing-compared-against-correct/output-expected/return_value new file mode 100644 index 0000000000..573541ac97 --- /dev/null +++ b/gm/tests/outputs/dashing-compared-against-correct/output-expected/return_value @@ -0,0 +1 @@ +0 diff --git a/gm/tests/outputs/dashing-compared-against-correct/output-expected/stdout b/gm/tests/outputs/dashing-compared-against-correct/output-expected/stdout new file mode 100644 index 0000000000..d7f2c6bb08 --- /dev/null +++ b/gm/tests/outputs/dashing-compared-against-correct/output-expected/stdout @@ -0,0 +1,5 @@ +reading from gm/tests/inputs/dashing-correct-images +writing to gm/tests/outputs/dashing-compared-against-correct/output-actual/images +drawing... dashing2 [640 480] +drawing... dashing [640 300] +Ran 2 tests: 2 passed, 0 failed, 0 missing reference images diff --git a/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/command_line b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/command_line new file mode 100644 index 0000000000..423a7f1ba8 --- /dev/null +++ b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/command_line @@ -0,0 +1 @@ +out/Debug/gm --hierarchy --match dashing --config 4444 -r gm/tests/inputs/dashing-incorrect-images -w gm/tests/outputs/dashing-compared-against-incorrect/output-actual/images diff --git a/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing.png b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing.png new file mode 100644 index 0000000000..e201a72d68 Binary files /dev/null and b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing.png differ diff --git a/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing2.png b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing2.png new file mode 100644 index 0000000000..91d37eb901 Binary files /dev/null and b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing2.png differ diff --git a/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/return_value b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/return_value new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/return_value @@ -0,0 +1 @@ +255 diff --git a/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/stdout b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/stdout new file mode 100644 index 0000000000..10956becc8 --- /dev/null +++ b/gm/tests/outputs/dashing-compared-against-incorrect/output-expected/stdout @@ -0,0 +1,7 @@ +reading from gm/tests/inputs/dashing-incorrect-images +writing to gm/tests/outputs/dashing-compared-against-incorrect/output-actual/images +drawing... dashing2 [640 480] +drawing... dashing [640 300] +----- max pixel mismatch for 4444/dashing is 51 +Ran 2 tests: 1 passed, 1 failed, 0 missing reference images + 4444/dashing pixel_error 51 diff --git a/gm/tests/run.sh b/gm/tests/run.sh new file mode 100755 index 0000000000..276a77522a --- /dev/null +++ b/gm/tests/run.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Self-tests for gm, based on tools/tests/run.sh + +# cd into .../trunk so all the paths will work +cd $(dirname $0)/../.. + +# TODO(epoger): make it look in Release and/or Debug +GM_BINARY=out/Debug/gm + +# Compare contents of all files within directories $1 and $2, +# EXCEPT for any dotfiles. +# If there are any differences, a description is written to stdout and +# we exit with a nonzero return value. +# Otherwise, we write nothing to stdout and return. +function compare_directories { + if [ $# != 2 ]; then + echo "compare_directories requires exactly 2 parameters, got $#" + exit 1 + fi + diff -r --exclude=.* $1 $2 + if [ $? != 0 ]; then + echo "failed in: compare_directories $1 $2" + exit 1 + fi +} + +# Run gm... +# - with the arguments in $1 +# - writing resulting images into $2/output-actual/images +# - writing stdout into $2/output-actual/stdout +# - writing return value into $2/output-actual/return_value +# Then compare all of those against $2/output-expected . +function gm_test { + if [ $# != 2 ]; then + echo "gm_test requires exactly 2 parameters, got $#" + exit 1 + fi + GM_ARGS="$1" + ACTUAL_OUTPUT_DIR="$2/output-actual" + EXPECTED_OUTPUT_DIR="$2/output-expected" + + rm -rf $ACTUAL_OUTPUT_DIR + mkdir -p $ACTUAL_OUTPUT_DIR + COMMAND="$GM_BINARY $GM_ARGS -w $ACTUAL_OUTPUT_DIR/images" + echo "$COMMAND" >$ACTUAL_OUTPUT_DIR/command_line + $COMMAND &>$ACTUAL_OUTPUT_DIR/stdout + echo $? >$ACTUAL_OUTPUT_DIR/return_value + + compare_directories $EXPECTED_OUTPUT_DIR $ACTUAL_OUTPUT_DIR +} + +GM_TESTDIR=gm/tests +GM_INPUTS=$GM_TESTDIR/inputs +GM_OUTPUTS=$GM_TESTDIR/outputs + +gm_test "--hierarchy --match dashing --config 4444 -r $GM_INPUTS/dashing-correct-images" "$GM_OUTPUTS/dashing-compared-against-correct" + +# In this case, dashing.png has different pixels, but dashing2.png differs only in PNG encoding (identical pixels) +gm_test "--hierarchy --match dashing --config 4444 -r $GM_INPUTS/dashing-incorrect-images" "$GM_OUTPUTS/dashing-compared-against-incorrect" + +echo "All tests passed." diff --git a/tools/tests/run.sh b/tools/tests/run.sh index 7f00ced8dc..3e3619147f 100755 --- a/tools/tests/run.sh +++ b/tools/tests/run.sh @@ -2,7 +2,9 @@ # Tests for our tools. # TODO: for now, it only tests skdiff -# TODO: for now, assumes that it is being run from .../trunk + +# cd into .../trunk so all the paths will work +cd $(dirname $0)/../.. # TODO: make it look in Release and/or Debug SKDIFF_BINARY=out/Debug/skdiff @@ -13,6 +15,10 @@ SKDIFF_BINARY=out/Debug/skdiff # we exit with a nonzero return value. # Otherwise, we write nothing to stdout and return. function compare_directories { + if [ $# != 2 ]; then + echo "compare_directories requires exactly 2 parameters, got $#" + exit 1 + fi diff --exclude=.* $1 $2 if [ $? != 0 ]; then echo "failed in: compare_directories $1 $2" @@ -24,6 +30,10 @@ function compare_directories { # to write its output, if any, to directory $2/output-actual). # Then compare its results against those in $2/output-expected. function skdiff_test { + if [ $# != 2 ]; then + echo "skdiff_test requires exactly 2 parameters, got $#" + exit 1 + fi SKDIFF_ARGS="$1" ACTUAL_OUTPUT_DIR="$2/output-actual" EXPECTED_OUTPUT_DIR="$2/output-expected"