Add a self-test for gm, similar to our self-test for skdiff.
authorepoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 12 Nov 2012 18:04:51 +0000 (18:04 +0000)
committerepoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 12 Nov 2012 18:04:51 +0000 (18:04 +0000)
Review URL: https://codereview.appspot.com/6827068

git-svn-id: http://skia.googlecode.com/svn/trunk@6380 2bbb7eff-a529-9590-31e7-b0007b416f81

16 files changed:
gm/tests/inputs/dashing-correct-images/4444/dashing.png [new file with mode: 0644]
gm/tests/inputs/dashing-correct-images/4444/dashing2.png [new file with mode: 0644]
gm/tests/inputs/dashing-incorrect-images/4444/dashing.png [new file with mode: 0644]
gm/tests/inputs/dashing-incorrect-images/4444/dashing2.png [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-correct/output-expected/command_line [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing.png [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-correct/output-expected/images/4444/dashing2.png [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-correct/output-expected/return_value [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-correct/output-expected/stdout [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-incorrect/output-expected/command_line [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing.png [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-incorrect/output-expected/images/4444/dashing2.png [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-incorrect/output-expected/return_value [new file with mode: 0644]
gm/tests/outputs/dashing-compared-against-incorrect/output-expected/stdout [new file with mode: 0644]
gm/tests/run.sh [new file with mode: 0755]
tools/tests/run.sh

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 (file)
index 0000000..e201a72
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 (file)
index 0000000..91d37eb
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 (file)
index 0000000..c319eab
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 (file)
index 0000000..ed37a88
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 (file)
index 0000000..8a95ecd
--- /dev/null
@@ -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 (file)
index 0000000..e201a72
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 (file)
index 0000000..91d37eb
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 (file)
index 0000000..573541a
--- /dev/null
@@ -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 (file)
index 0000000..d7f2c6b
--- /dev/null
@@ -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 (file)
index 0000000..423a7f1
--- /dev/null
@@ -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 (file)
index 0000000..e201a72
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 (file)
index 0000000..91d37eb
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 (file)
index 0000000..ace9d03
--- /dev/null
@@ -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 (file)
index 0000000..10956be
--- /dev/null
@@ -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 (executable)
index 0000000..276a775
--- /dev/null
@@ -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."
index 7f00ced..3e36191 100755 (executable)
@@ -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"