Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions roundup-1-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,8 @@ it_exits_non_zero() {
it_survives_edge_cases() {
rup edge
}

it_exits_non_zero_on_broken_before () {
status=$(set +e ; rup roundup-5 >/dev/null ; echo $?)
test 2 -eq $status
}
20 changes: 20 additions & 0 deletions roundup-before-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env roundup
#
# This Will Fail
# --------------
#
# The before function
describe "roundup before trace"

# This `before` function is run before it_works. The `false` will simulate
# an error. Hence, `it_works` should not be called at all, but it should be
# marked as failed and the `before` trace should be displayed.
before () {
false
}

# A trivial and correct test case. But because `before` is broken, this
# testcase will fail as well.
it_works () {
true
}
48 changes: 27 additions & 21 deletions roundup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -242,29 +242,29 @@ do
# Any number of things are possible in `before`, `after`, and the
# test. Drop into an subshell to contain operations that may throw
# off roundup; such as `cd`.
# Momentarily turn off auto-fail to give us access to the tests
# exit status in `$?` for capturing.
set +e
(
# exit subshell with return code of last failing command. This
# is needed to see the return code 253 on failed assumptions.
# But, only do this if the error handling is activated.
set -E
trap 'rc=$?; set +x; set -o | grep "errexit.*on" >/dev/null && exit $rc' ERR

# Output `before` trace to temporary file. If `before` runs cleanly,
# the trace will be overwritten by the actual test case below.
{
# redirect tracing output of `before` into file.
{
set -x
set -xe
# If `before` wasn't redefined, then this is `:`.
before
} &>"$roundup_tmp/$roundup_test_name"
# disable tracing again. Its trace output goes to /dev/null.
set +x
} &>/dev/null

# exit subshell with return code of last failing command. This
# is needed to see the return code 253 on failed assumptions.
# But, only do this if the error handling is activated.
set -E
trap 'rc=$?; set +x; set -o | grep "errexit.*on" >/dev/null && exit $rc' ERR

# If `before` wasn't redefined, then this is `:`.
before

# Momentarily turn off auto-fail to give us access to the tests
# exit status in `$?` for capturing.
set +e
Expand All @@ -284,21 +284,27 @@ do
# instead.
roundup_result=$?

# It's safe to return to normal operation.
set -e

# If `after` wasn't redefined, then this runs `:`.
after

# This is the final step of a test. Print its pass/fail signal
# and name.
if [ "$roundup_result" -ne 0 ]
then printf "f"
else printf "p"
fi

printf " $roundup_test_name\n"
# Pass roundup return code outside of the subshell
exit $roundup_result
)

# copy roundup_result from subshell above
roundup_result=$?

# It's safe to return to normal operation.
set -e

# This is the final step of a test. Print its pass/fail signal
# and name.
if [ "$roundup_result" -ne 0 ]
then printf "f"
else printf "p"
fi

printf " $roundup_test_name\n"
done
)
done |
Expand Down