Skip to content

Commit

Permalink
Merge pull request #36 from pote/fix/travis
Browse files Browse the repository at this point in the history
Sanitized test scripts, reformatted for consistency

Fixes #33, ready for #34
  • Loading branch information
langston-barrett committed Jul 28, 2015
2 parents 8632bdb + 2c49dcf commit 8bcab74
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 102 deletions.
177 changes: 90 additions & 87 deletions test/assert.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# assert.sh 1.0 - bash unit testing framework
# Copyright (C) 2009, 2010, 2011, 2012 Robert Lehmann
#
Expand All @@ -22,16 +22,8 @@ export DEBUG=${DEBUG:-}
export STOP=${STOP:-}
export INVARIANT=${INVARIANT:-}

args="$(getopt -n "$0" -l verbose,help,stop,discover,invariant vhxdi $*)" \
|| exit -1
for arg in $args; do
case "$arg" in
-h)
echo "$0 [-vxid] [--verbose] [--stop] [--invariant] [--discover]"
echo "`sed 's/./ /g' <<< "$0"` [-h] [--help]"
exit 0;;
--help)
cat <<EOF
# assign this help text to the variable help_text
read -r -d '' help_text <<EOF
Usage: $0 [options]
Language-agnostic unit tests for subprocesses.
Expand All @@ -43,97 +35,108 @@ Options:
-h show brief usage information and exit
--help show this help message and exit
EOF
exit 0;;
-v|--verbose)
DEBUG=1;;
-x|--stop)
STOP=1;;
-i|--invariant)
INVARIANT=1;;
-d|--discover)
DISCOVERONLY=1;;
esac

args="$(getopt -n "$0" -l verbose,help,stop,discover,invariant vhxdi "$@")" \
|| exit -1
for arg in $args; do
case "$arg" in
-h)
echo "$0 [-vxid] [--verbose] [--stop] [--invariant] [--discover]"
echo "$(sed 's/./ /g' <<< "$0") [-h] [--help]"
exit 0;;
--help)
echo "$help_text"
exit 0;;
-v|--verbose)
DEBUG=1;;
-x|--stop)
STOP=1;;
-i|--invariant)
INVARIANT=1;;
-d|--discover)
DISCOVERONLY=1;;
esac
done

printf -v _indent "\n\t" # local format helper

_assert_reset() {
tests_ran=0
tests_failed=0
tests_errors=()
tests_starttime="$(date +%s.%N)" # seconds_since_epoch.nanoseconds
tests_ran=0
tests_failed=0
tests_errors=()
tests_starttime="$(date +%s.%N)" # seconds_since_epoch.nanoseconds
}

assert_end() {
# assert_end [suite ..]
tests_endtime="$(date +%s.%N)"
tests="$tests_ran ${*:+$* }tests"
[[ -n "$DISCOVERONLY" ]] && echo "collected $tests." && _assert_reset && return
[[ -n "$DEBUG" ]] && echo
[[ -z "$INVARIANT" ]] && report_time=" in $(bc \
<<< "${tests_endtime%.N} - ${tests_starttime%.N}" \
| sed -e 's/\.\([0-9]\{0,3\}\)[0-9]*/.\1/' -e 's/^\./0./')s" \
|| report_time=
# assert_end [suite ..]
tests_endtime="$(date +%s.%N)"
tests="$tests_ran ${*:+$* }tests"
[[ -n "$DISCOVERONLY" ]] && echo "collected $tests." && _assert_reset && return
[[ -n "$DEBUG" ]] && echo
[[ -z "$INVARIANT" ]] && report_time=" in $(bc \
<<< "${tests_endtime%.N} - ${tests_starttime%.N}" \
| sed -e 's/\.\([0-9]\{0,3\}\)[0-9]*/.\1/' -e 's/^\./0./')s" \
|| report_time=

if [[ "$tests_failed" -eq 0 ]]; then
echo ">> All $tests passed$report_time."
else
for error in "${tests_errors[@]}"; do echo "$error"; done
echo "$tests_failed of $tests failed$report_time."
fi
tests_failed_previous=$tests_failed
_assert_reset
return $tests_failed_previous
if [[ "$tests_failed" -eq 0 ]]; then
echo ">> All $tests passed$report_time."
else
for error in "${tests_errors[@]}"; do echo "$error"; done
echo "$tests_failed of $tests failed$report_time."
fi
tests_failed_previous=$tests_failed
_assert_reset
return $tests_failed_previous
}

assert() {
# assert <command> <expected stdout> [stdin]
(( tests_ran++ ))
[[ -n "$DISCOVERONLY" ]] && return
# printf required for formatting
printf -v expected "x${2:-}" # x required to overwrite older results
result="$(eval 2>/dev/null $1 <<< ${3:-})"
# Note: $expected is already decorated
if [[ "x$result" == "$expected" ]]; then
[[ -n "$DEBUG" ]] && echo -n .
return
fi
[[ -n "$DEBUG" ]] && echo -n X
result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")"
[[ -z "$result" ]] && result="nothing" || result="\"$result\""
[[ -z "$2" ]] && expected="nothing" || expected="\"$2\""
failure="expected $expected${_indent}got $result"
report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
tests_errors[$tests_failed]="$report"
(( tests_failed++ ))
if [[ -n "$STOP" ]]; then
[[ -n "$DEBUG" ]] && echo
echo "$report"
exit 1
fi
# assert <command> <expected stdout> [stdin]
(( tests_ran++ ))
[[ -n "$DISCOVERONLY" ]] && return
# printf required for formatting
printf -v expected "x%s" "${2:-}" # x required to overwrite older results
result="$(eval 2>/dev/null "$1" <<< "${3:-}")"
# Note: $expected is already decorated
if [[ "x$result" == "$expected" ]]; then
[[ -n "$DEBUG" ]] && echo -n .
return
fi
[[ -n "$DEBUG" ]] && echo -n X
result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")"
[[ -z "$result" ]] && result="nothing" || result="\"$result\""
[[ -z "$2" ]] && expected="nothing" || expected="\"$2\""
failure="expected $expected${_indent}got $result"
report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
tests_errors[$tests_failed]="$report"
(( tests_failed++ ))
if [[ -n "$STOP" ]]; then
[[ -n "$DEBUG" ]] && echo
echo "$report"
exit 1
fi
}

assert_raises() {
# assert_raises <command> <expected code> [stdin]
(( tests_ran++ ))
[[ -n "$DISCOVERONLY" ]] && return
(eval $1 <<< ${3:-}) > /dev/null 2>&1
status=$?
expected=${2:-0}
if [[ "$status" -eq "$expected" ]]; then
[[ -n "$DEBUG" ]] && echo -n .
return
fi
[[ -n "$DEBUG" ]] && echo -n X
failure="program terminated with code $status instead of $expected"
report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
tests_errors[$tests_failed]="$report"
(( tests_failed++ ))
if [[ -n "$STOP" ]]; then
[[ -n "$DEBUG" ]] && echo
echo "$report"
exit 1
fi
# assert_raises <command> <expected code> [stdin]
(( tests_ran++ ))
[[ -n "$DISCOVERONLY" ]] && return
(eval "$1" <<< "${3:-}") > /dev/null 2>&1
status=$?
expected=${2:-0}
if [[ "$status" -eq "$expected" ]]; then
[[ -n "$DEBUG" ]] && echo -n .
return
fi
[[ -n "$DEBUG" ]] && echo -n X
failure="program terminated with code $status instead of $expected"
report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
tests_errors[$tests_failed]="$report"
(( tests_failed++ ))
if [[ -n "$STOP" ]]; then
[[ -n "$DEBUG" ]] && echo
echo "$report"
exit 1
fi
}

_assert_reset
18 changes: 9 additions & 9 deletions test/init_in_and_out_test.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env bash
. assert.sh

GVP=../bin/gvp
gvp=../bin/gvp

## gvp init should create a .godeps/ directory.
assert_raises "$GVP init"
Expand All @@ -9,18 +10,17 @@ assert_raises "[ -d .godeps ]"
rm -rf .godeps

## source gvp in should change the original GOPATH and associated Env variables
## as well as creating a .godeps directory
ORIGINAL_GOPATH=$GOPATH
ORIGINAL_GOBIN=$GOBIN
ORIGINAL_PATH=$PATH
## as well as creating a .godeps directory
original_GOPATH=$GOPATH
original_GOBIN=$GOBIN
original_PATH=$PATH

source $GVP in
. "$gvp"

assert_raises "[ -d .godeps ]"
assert "echo $GOPATH" "$PWD/.godeps:$PWD:$ORIGINAL_GOPATH"
assert "echo $GOPATH" "$PWD/.godeps:$PWD:$original_GOPATH"
assert "echo $GOBIN" "$PWD/.godeps/bin"
assert "echo $PATH" "$PWD/.godeps/bin:$ORIGINAL_PATH"

assert "echo $PATH" "$PWD/.godeps/bin:$original_PATH"

## Cleanup
rm -rf .godeps
Expand Down
23 changes: 17 additions & 6 deletions test/run_all_tests.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,29 @@
#!/usr/bin/env bash

# keep track of if all the tests passed or if one failed
status=0
echo ">> Now running all tests"

# prefix all calls to echo with this string
pre=">>"

echo "$pre Now running all tests"
for test in *test.sh
do
echo ">> Current test: $test"
./$test || status=$?
echo "$pre Current test: $test"
"./$test"
if [ ! $? -eq 0 ]; then
status=$?
echo "$pre Test failed: $test"
fi
done
echo ">> All Done"
echo "$pre All Done"

if [ $status == 0 ]
then
echo ">> Build status: passing"
echo "$pre Build status: passing"
else
echo ">> Build status: failing"
echo "$pre Build status: failing"
echo "Tests exited with code: $status"
fi

exit $status

0 comments on commit 8bcab74

Please sign in to comment.