Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(496)

Unified Diff: third_party/xdg-utils/tests/include/testassertions.sh

Issue 151098: Patch from mdm@google.com... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/
Patch Set: Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/xdg-utils/tests/include/tempfile.sh ('k') | third_party/xdg-utils/tests/include/testcontrol.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/xdg-utils/tests/include/testassertions.sh
===================================================================
--- third_party/xdg-utils/tests/include/testassertions.sh (revision 0)
+++ third_party/xdg-utils/tests/include/testassertions.sh (revision 0)
@@ -0,0 +1,379 @@
+# Adapted from
+# shfuncs : test suite common shell functions
+# which was shipped with the TET example code.
+
+. "$XDG_TEST_DIR/include/testfuncs.sh"
+
+## NOTE: Documentation is generated AUTOMATICALLY from this file
+## Function usage must immediately follow function delcaration
+
+assert_exit() {
+# execute command (saving output) and check exit code
+# Usage: assert_exit N command ...
+# where N is a number or a literal 'N' (for non-zero)
+# command can be an unquoted string, but be careful.
+ EXPECT="$1"
+ shift 1
+
+ # make sure nothing is hanging around from a prev. test.
+ rm -f out.stdout out.stderr
+
+ # $1 is command, $2 is expected exit code (0 or "N" for non-zero)
+ ( "$@" > out.stdout 2> out.stderr )
+ CODE="$?"
+
+ LASTCOMMAND="$*"
+
+ if [ -z "$EXPECT" ]; then
+ EXPECT=0;
+ fi
+ if [ "$EXPECT" = N -a "$CODE" -eq 0 ]; then
+ test_fail "Command ($*) gave exit code $CODE, expected nonzero"
+ elif [ "$EXPECT" != N ] && [ "$EXPECT" -ne "$CODE" ]; then
+ test_fail "Command ($*) gave exit code $CODE, expected $EXPECT"
+ fi
+}
+
+assert_interactive_notroot() {
+ if [ `whoami` != 'root' ] ; then
+ assert_interactive "$@"
+ fi
+}
+
+assert_interactive() {
+# Useage:
+# assert_interactive {msg} [y|n|C|s varname]
+#
+# msg is the text to print.
+# y -> expect y for [y/n]
+# n -> expect n for [y/n]
+# s -> save y or n into varname. Then, (presumably) $varname can be
+# given in place of y or n in subsequent calls to assert_interactive
+# C -> cleanup msg. Always print "msg [enter to continue]" despite test failure.
+# if no argument is given after msg, print "msg [enter to continue]"
+
+ query=$1
+ expect=$2
+# It seems valuable to see what happens even if the test has failed.
+# (eg fail on stdout.)
+ if [ "$TEST_STATUS" = 'FAIL' -a "$expect" != C ] ; then
+ ## Don't waste user's time if test has already failed.
+ test_infoline "Test has already failed. Not bothering to ask '$query'"
+ return
+ fi
+
+ if [ ! -z "$XDG_TEST_NO_INTERACTIVE" ] ; then
+ test_infoline "Assumed '$query' is '$expect'"
+ return
+ fi
+
+ if [ ! -z "$expect" -a "$expect" != C ] ; then
+ if [ "$expect" != y -a "$expect" != n -a "$expect" != s -a "$expect" != C ] ; then
+ echo "TEST SYNTAX ERROR: interactive assertions require one of (y,n,s,C) as choices. (found '$expect')" >&2
+ exit 255
+ fi
+ unset result
+ while [ "$result" != y -a "$result" != n ] ; do
+ echo -ne "\n\t$query [y/n]: " >&2
+ read result
+ done
+
+ if [ "$expect" = s ] ; then
+ if [ -z "$3" ] ; then
+ echo "TEST SYNTAX ERROR: 's' requires a variable name"
+ exit 255
+ fi
+ eval "$3=$result"
+ elif [ "$result" != "$expect" ] ; then
+ test_fail "User indicated '$result' instead of '$expect' in response to '$query'"
+ fi
+ else
+ echo -ne "\n\t$query [enter to continue] " >&2
+ read result
+ fi
+}
+
+
+assert_file_in_path() {
+# Assert that some file is present in a path.
+#
+# Usage:
+# assert_file_in_path FILENAME PATH
+# where FILE is the exact name of the file and
+# PATH is a ':' separated list of directories
+ search_dirs=`echo "$2" | tr ':' ' '`
+ found_files=`find $search_dirs -name "$1" 2>/dev/null`
+
+ if [ -z "$found_files" ] ; then
+ test_fail "Did not find '$1' in '$2'"
+ fi
+}
+
+assert_file_not_in_path() {
+# Assert the some file is NOT present in a path.
+# Opposite of 'assert_file_in_path'
+ search_dirs=`echo "$2" | tr ':' ' '`
+ found_files=`find $search_dirs -name "$1" 2>/dev/null`
+
+ if [ ! -z "$found_files" ] ; then
+ test_fail "Found '$found_files' in $2"
+ fi
+}
+
+
+assert_file() {
+# Assert the existance of an exact filename
+# Usage: assert_file FILE
+ if [ ! -e "$1" ] ; then
+ test_fail "'$1' does not exist"
+ return
+ elif [ ! -f "$1" ] ; then
+ test_fail "'$1' is not a regular file"
+ return
+ fi
+ if [ -f "$2" ] ; then
+ compare=`diff -wB "$1" "$2"`
+ if [ ! -z "$compare" ] ; then
+ test_fail "'$1' is different from '$2'. Diff is:\n$compare"
+ fi
+ fi
+}
+
+assert_nofile() {
+# Assert the non existance of an exact filename.
+# Opposite of 'assert_file'
+ if [ -e "$1" ] ; then
+ test_fail "'$1' exists."
+ fi
+}
+
+
+assert_nostdout() {
+# assert nothing was written to a stdout.
+# NOTE: Failing this assertion will WARN rather than FAIL
+ if [ -s out.stdout ]
+ then
+ test_infoline "Unexpected output from '$LASTCOMMAND' written to stdout, as shown below:"
+ infofile out.stdout stdout:
+ if [ "$TEST_STATUS" = "PASS" ]; then
+ test_status WARN
+ fi
+ fi
+}
+
+assert_nostderr() {
+# assert nothing was written to stderr.
+# NOTE: Failing this assertion will WARN rather than FAIL
+ if [ -n "$XDG_UTILS_DEBUG_LEVEL" ] ; then
+ if [ -s out.stderr ] ; then
+ infofile out.stderr debug:
+ fi
+ elif [ -s out.stderr ] ; then
+ test_infoline "Unexpected output from '$LASTCOMMAND' written to stderr, as shown below:"
+ infofile out.stderr stderr:
+ if [ "$TEST_STATUS" = "PASS" ]; then
+ test_status WARN
+ fi
+ fi
+}
+
+assert_stderr() {
+# check that stderr matches expected error
+# $1 is file containing regexp for expected error
+# if no argument supplied, just check out.stderr is not empty
+
+ if [ ! -s out.stderr ]
+ then
+ test_infoline "Expected output from '$LASTCOMMAND' to stderr, but none written"
+ test_fail
+ return
+ fi
+ if [ ! -z "$1" ] ; then
+ expfile="$1"
+ OK=Y
+ exec 4<&0 0< "$expfile" 3< out.stderr
+ while read expline
+ do
+ if read line <&3
+ then
+ if expr "$line" : "$expline" > /dev/null
+ then
+ :
+ else
+ OK=N
+ break
+ fi
+ else
+ OK=N
+ fi
+ done
+ exec 0<&4 3<&- 4<&-
+ if [ "$OK" = N ]
+ then
+ test_infoline "Incorrect output from '$LASTCOMMAND' written to stderr, as shown below"
+ infofile "$expfile" "expected stderr:"
+ infofile out.stderr "received stderr:"
+ test_fail
+ fi
+ fi
+}
+
+assert_stdout() {
+# check that stderr matches expected error
+# $1 is file containing regexp for expected error
+# if no argument supplied, just check out.stderr is not empty
+
+ if [ ! -s out.stdout ]
+ then
+ test_infoline "Expected output from '$LASTCOMMAND' to stdout, but none written"
+ test_fail
+ return
+ fi
+ if [ ! -z "$1" ] ; then
+ expfile="$1"
+
+ if [ ! -e "$expfile" ] ; then
+ test_status NORESULT "Could not find file '$expfile' to look up expected pattern!"
+ return
+ fi
+ OK=Y
+ exec 4<&0 0< "$expfile" 3< out.stdout
+ while read expline
+ do
+ if read line <&3
+ then
+ if expr "$line" : "$expline" > /dev/null
+ then
+ :
+ else
+ OK=N
+ break
+ fi
+ else
+ OK=N
+ fi
+ done
+ exec 0<&4 3<&- 4<&-
+ if [ "$OK" = N ]
+ then
+ test_infoline "Incorrect output from '$LASTCOMMAND' written to stdout, as shown below"
+ infofile "$expfile" "expected stdout:"
+ infofile out.stdout "received stdout:"
+ test_fail
+ fi
+ fi
+}
+
+require_interactive() {
+# if $XDG_TEST_NO_INTERACTIVE is set, test result becomes UNTESTED
+ if [ ! -z "$XDG_TEST_NO_INTERACTIVE" ] ; then
+ test_result UNTESTED "XDG_TEST_NO_INTERACTIVE is set, but this test needs interactive"
+ fi
+}
+
+require_root() {
+# if the test is not being run as root, test result is UNTESTED
+ if [ `whoami` != 'root' ] ; then
+ test_result UNTESTED "not running as root, but test requires root privileges"
+ fi
+}
+
+require_notroot() {
+# if the test is being run as root, the test result is UNTESTED
+# opposite of 'require_root'
+ if [ `whoami` = 'root' ] ; then
+ test_result UNTESTED "running as root, but test must be run as a normal user"
+ fi
+}
+
+set_no_display() {
+# Clear $DISPLAY
+ unset DISPLAY
+}
+
+assert_display() {
+# Assert that the $DISPLAY variable is set.
+ if [ -z "$DISPLAY" ] ; then
+ test_fail "DISPLAY not set!"
+ fi
+}
+
+assert_util_var() {
+# Assert that the $XDGUTIL varilable is set.
+# DEPRICATED. Only used by generic tests.
+if [ "x$XDGUTIL" = x ]; then
+ test_fail "XDGUTIL variable not set"
+fi
+}
+
+use_file() {
+# Copy a datafile from it's defult location into the test directory
+# Usage:
+# use_file ORIG_FILE VAR
+# Where ORIG_FILE is the name of the file, and VAR is the name of the
+# variable to create that will contain the new (unique) filename.
+# DO NOT put a '$' in front of VAR. VAR will be created via eval.
+#
+# $VAR will be set to 'xdgtestdata-$XDG_TEST_ID-$file' after the
+# directory is stripped from $file.
+ src="$1"
+ file=${src##/*/}
+ varname="$2"
+
+ if [ $# -lt 2 ] ; then
+ echo "TEST SYNTAX ERROR: use_file must have two arguments" >&2
+ exit 255
+ fi
+
+ assert_file "$src"
+
+ outfile="xdgtestdata-$XDG_TEST_ID-$file"
+ eval "$varname=$outfile"
+
+ cp "$src" "$XDG_TEST_TMPDIR/$outfile"
+}
+
+get_unique_name() {
+# Get a unique name for a file, similar to 'use_file'
+# except that no file is copied. You are left to create file $VAR.
+ varname="$1"
+ file="$2"
+ if [ -z "$varname" ] ; then
+ echo "TEST SYNAX ERROR: get_unique_name requries a variable name"
+ exit 255
+ fi
+
+ outfile="xdgtestdata-$XDG_TEST_ID-$file"
+ eval "$varname=$outfile"
+}
+
+edit_file() {
+# Edit file via sed.
+# Usage:
+# edit_file $FILE origstr VARNAME [newstr]
+# Where:
+# $FILE is a file, probably copied from 'use_file'
+# VARNAME is created via 'eval' to contain the newstr
+# newstr is the optional substitution. If newstr is not present,
+# it will become 'xdgtestdata-$XDG_TEST_ID-$origstr'
+ file="$1"
+ origstr="$2"
+ varname="$3"
+ newstr="$4"
+
+ if [ $# -lt 3 ] ; then
+ echo "TEST SYNTAX ERROR: edit_file must have at least 3 arguments."
+ exit 255
+ fi
+
+ assert_file "$file"
+
+ if [ -z "$newstr" ] ; then
+ newstr="xdgtestdata-$XDG_TEST_ID-$origstr"
+ fi
+
+ eval "$varname=\"$newstr\""
+
+ sed -i -e "s|$origstr|$newstr|g" "$file"
+}
+
« no previous file with comments | « third_party/xdg-utils/tests/include/tempfile.sh ('k') | third_party/xdg-utils/tests/include/testcontrol.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698