commit c850527cce7134f4adf4fe6dac07214678deb72b Author: Sam Stephenson Date: Wed Dec 28 12:40:14 2011 -0600 Initial commit diff --git a/bin/bats b/bin/bats new file mode 120000 index 0000000..a50a884 --- /dev/null +++ b/bin/bats @@ -0,0 +1 @@ +../libexec/bats \ No newline at end of file diff --git a/libexec/bats b/libexec/bats new file mode 100755 index 0000000..1f5351c --- /dev/null +++ b/libexec/bats @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -e + +resolve_link() { + $(type -p greadlink readlink | head -1) "$1" +} + +abs_dirname() { + local cwd="$(pwd)" + local path="$1" + + while [ -n "$path" ]; do + cd "${path%/*}" + local name="${path##*/}" + path="$(resolve_link "$name" || true)" + done + + pwd + cd "$cwd" +} + +expand_path() { + echo "$(abs_dirname "$(dirname "$1")")/$(basename "$1")" +} + +BATS_LIBEXEC="$(abs_dirname "$0")" +export BATS_PREFIX="$(abs_dirname "$BATS_LIBEXEC")" +export PATH="$BATS_LIBEXEC:$PATH" + +filename="$1" +if [ -z "$filename" ]; then + echo "usage: $0 " >&2 + exit 1 +else + shift +fi + +exec bats-exec "$(expand_path "$filename")" "$@" diff --git a/libexec/bats-exec b/libexec/bats-exec new file mode 100755 index 0000000..3901999 --- /dev/null +++ b/libexec/bats-exec @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +set -e + +BATS_TEST_FILENAME="$1" +if [ -z "$BATS_TEST_FILENAME" ]; then + echo "usage: bats-exec " >&2 + exit 1 +elif [ ! -f "$BATS_TEST_FILENAME" ]; then + echo "bats: $BATS_TEST_FILENAME does not exist" + exit 1 +else + shift +fi + +BATS_TEST_DIRNAME="$(dirname "$BATS_TEST_FILENAME")" +BATS_TEST_NAMES=() + +load() { + source "$BATS_TEST_DIRNAME/$1.bash" +} + +abort() { + [ "$#" -eq 0 ] || echo error: "$@" >&2 + exit 1 +} + +setup() { + true +} + +teardown() { + true +} + +bats_test_info() { + BATS_TEST_DESCRIPTION="$1" + BATS_LINE_NUMBER="$2" +} + +bats_test_function() { + local test_name="$1" + BATS_TEST_NAMES["${#BATS_TEST_NAMES[@]}"]="$test_name" +} + +bats_exit_trap() { + if [ -z "$BATS_TEST_COMPLETED" ]; then + echo "not ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION" + exit 1 + else + echo "ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION" + exit 0 + fi +} + +bats_perform_tests() { + echo "1..$#" + test_number=1 + for test_name in "$@"; do + "$0" "$BATS_TEST_FILENAME" "$test_name" "$test_number" || true + test_number=$(($test_number + 1)) + done +} + +bats_perform_test() { + BATS_TEST_NAME="$1" + if [ "$(type -t "$BATS_TEST_NAME" || true)" = "function" ]; then + BATS_TEST_NUMBER="$2" + if [ -z "$BATS_TEST_NUMBER" ]; then + echo "1..1" + BATS_TEST_NUMBER="1" + fi + + BATS_TEST_COMPLETED="" + trap bats_exit_trap err exit + setup + "$BATS_TEST_NAME" + BATS_TEST_COMPLETED=1 + + else + echo "bats: unknown test name \`$BATS_TEST_NAME'" >&2 + exit 1 + fi +} + +eval "$(bats-preprocess < "$BATS_TEST_FILENAME")" + +if [ "$#" -eq 0 ]; then + bats_perform_tests "${BATS_TEST_NAMES[@]}" +else + bats_perform_test "$@" +fi diff --git a/libexec/bats-preprocess b/libexec/bats-preprocess new file mode 100755 index 0000000..55406b4 --- /dev/null +++ b/libexec/bats-preprocess @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -e + +encode_name() { + local name="$1" + local result="test_" + + if [[ ! "$name" =~ [^[:alnum:]\ _-] ]]; then + name="${name//_/-5f}" + name="${name//-/-2d}" + name="${name// /_}" + result+="$name" + else + local length="${#name}" + local char i + + for ((i=0; i