diff --git a/libexec/bats b/libexec/bats index 1f5351c..9a22cfa 100755 --- a/libexec/bats +++ b/libexec/bats @@ -20,7 +20,11 @@ abs_dirname() { } expand_path() { - echo "$(abs_dirname "$(dirname "$1")")/$(basename "$1")" + { cd "$(dirname "$1")" 2>/dev/null + local dirname="$PWD" + cd "$OLDPWD" + echo "$dirname/$(basename "$1")" + } || echo "$1" } BATS_LIBEXEC="$(abs_dirname "$0")" diff --git a/libexec/bats-exec b/libexec/bats-exec index 3901999..d062732 100755 --- a/libexec/bats-exec +++ b/libexec/bats-exec @@ -19,6 +19,15 @@ load() { source "$BATS_TEST_DIRNAME/$1.bash" } +run() { + local e + [[ ! "$-" =~ e ]] || e=1 + set +e + output="$("$@" 2>&1)" + status="$?" + [ -z "$e" ] || set -e +} + abort() { [ "$#" -eq 0 ] || echo error: "$@" >&2 exit 1 @@ -43,6 +52,7 @@ bats_test_function() { } bats_exit_trap() { + trap - err exit if [ -z "$BATS_TEST_COMPLETED" ]; then echo "not ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION" exit 1 diff --git a/test/bats.bats b/test/bats.bats new file mode 100644 index 0000000..1db9109 --- /dev/null +++ b/test/bats.bats @@ -0,0 +1,21 @@ +#!/usr/bin/env bats + +FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures" + +@test "running 'bats' with no arguments prints usage instructions" { + run bats + [[ $status -eq 1 ]] + [[ $output =~ ^usage: ]] +} + +@test "running 'bats' with an invalid filename prints an error" { + run bats nonexistent + [[ $status -eq 1 ]] + [[ $output =~ does\ not\ exist ]] +} + +@test "running 'bats' with an empty test file runs zero tests" { + run bats "$FIXTURE_ROOT/empty.bats" + [[ $status -eq 0 ]] + [[ $output = "1..0" ]] +} diff --git a/test/fixtures/empty.bats b/test/fixtures/empty.bats new file mode 100644 index 0000000..e69de29