Skip to content

Commit c850527

Browse files
committedDec 28, 2011
Initial commit
0 parents  commit c850527

File tree

4 files changed

+181
-0
lines changed

4 files changed

+181
-0
lines changed
 

‎bin/bats

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../libexec/bats

‎libexec/bats

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
resolve_link() {
5+
$(type -p greadlink readlink | head -1) "$1"
6+
}
7+
8+
abs_dirname() {
9+
local cwd="$(pwd)"
10+
local path="$1"
11+
12+
while [ -n "$path" ]; do
13+
cd "${path%/*}"
14+
local name="${path##*/}"
15+
path="$(resolve_link "$name" || true)"
16+
done
17+
18+
pwd
19+
cd "$cwd"
20+
}
21+
22+
expand_path() {
23+
echo "$(abs_dirname "$(dirname "$1")")/$(basename "$1")"
24+
}
25+
26+
BATS_LIBEXEC="$(abs_dirname "$0")"
27+
export BATS_PREFIX="$(abs_dirname "$BATS_LIBEXEC")"
28+
export PATH="$BATS_LIBEXEC:$PATH"
29+
30+
filename="$1"
31+
if [ -z "$filename" ]; then
32+
echo "usage: $0 <filename>" >&2
33+
exit 1
34+
else
35+
shift
36+
fi
37+
38+
exec bats-exec "$(expand_path "$filename")" "$@"

‎libexec/bats-exec

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
BATS_TEST_FILENAME="$1"
5+
if [ -z "$BATS_TEST_FILENAME" ]; then
6+
echo "usage: bats-exec <filename>" >&2
7+
exit 1
8+
elif [ ! -f "$BATS_TEST_FILENAME" ]; then
9+
echo "bats: $BATS_TEST_FILENAME does not exist"
10+
exit 1
11+
else
12+
shift
13+
fi
14+
15+
BATS_TEST_DIRNAME="$(dirname "$BATS_TEST_FILENAME")"
16+
BATS_TEST_NAMES=()
17+
18+
load() {
19+
source "$BATS_TEST_DIRNAME/$1.bash"
20+
}
21+
22+
abort() {
23+
[ "$#" -eq 0 ] || echo error: "$@" >&2
24+
exit 1
25+
}
26+
27+
setup() {
28+
true
29+
}
30+
31+
teardown() {
32+
true
33+
}
34+
35+
bats_test_info() {
36+
BATS_TEST_DESCRIPTION="$1"
37+
BATS_LINE_NUMBER="$2"
38+
}
39+
40+
bats_test_function() {
41+
local test_name="$1"
42+
BATS_TEST_NAMES["${#BATS_TEST_NAMES[@]}"]="$test_name"
43+
}
44+
45+
bats_exit_trap() {
46+
if [ -z "$BATS_TEST_COMPLETED" ]; then
47+
echo "not ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION"
48+
exit 1
49+
else
50+
echo "ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION"
51+
exit 0
52+
fi
53+
}
54+
55+
bats_perform_tests() {
56+
echo "1..$#"
57+
test_number=1
58+
for test_name in "$@"; do
59+
"$0" "$BATS_TEST_FILENAME" "$test_name" "$test_number" || true
60+
test_number=$(($test_number + 1))
61+
done
62+
}
63+
64+
bats_perform_test() {
65+
BATS_TEST_NAME="$1"
66+
if [ "$(type -t "$BATS_TEST_NAME" || true)" = "function" ]; then
67+
BATS_TEST_NUMBER="$2"
68+
if [ -z "$BATS_TEST_NUMBER" ]; then
69+
echo "1..1"
70+
BATS_TEST_NUMBER="1"
71+
fi
72+
73+
BATS_TEST_COMPLETED=""
74+
trap bats_exit_trap err exit
75+
setup
76+
"$BATS_TEST_NAME"
77+
BATS_TEST_COMPLETED=1
78+
79+
else
80+
echo "bats: unknown test name \`$BATS_TEST_NAME'" >&2
81+
exit 1
82+
fi
83+
}
84+
85+
eval "$(bats-preprocess < "$BATS_TEST_FILENAME")"
86+
87+
if [ "$#" -eq 0 ]; then
88+
bats_perform_tests "${BATS_TEST_NAMES[@]}"
89+
else
90+
bats_perform_test "$@"
91+
fi

‎libexec/bats-preprocess

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
encode_name() {
5+
local name="$1"
6+
local result="test_"
7+
8+
if [[ ! "$name" =~ [^[:alnum:]\ _-] ]]; then
9+
name="${name//_/-5f}"
10+
name="${name//-/-2d}"
11+
name="${name// /_}"
12+
result+="$name"
13+
else
14+
local length="${#name}"
15+
local char i
16+
17+
for ((i=0; i<length; i++)); do
18+
char="${name:$i:1}"
19+
if [ "$char" = " " ]; then
20+
result+="_"
21+
elif [[ "$char" =~ [[:alnum:]] ]]; then
22+
result+="$char"
23+
else
24+
result+="$(printf -- "-%02x" \'"$char")"
25+
fi
26+
done
27+
fi
28+
29+
echo "$result"
30+
}
31+
32+
tests=()
33+
index=0
34+
35+
while IFS= read -r line; do
36+
index=$(($index + 1))
37+
quoted_name="$(expr "$line" : '^ *@test *\([^ ].*\) *{ *$' || true)"
38+
39+
if [ -n "$quoted_name" ]; then
40+
name="$(eval echo "$quoted_name")"
41+
encoded_name="$(encode_name "$name")"
42+
tests["${#tests[@]}"]="$encoded_name"
43+
echo "${encoded_name}() { bats_test_info ${quoted_name} ${index}"
44+
else
45+
echo "$line"
46+
fi
47+
done
48+
49+
for test_name in "${tests[@]}"; do
50+
echo "bats_test_function ${test_name}"
51+
done

0 commit comments

Comments
 (0)
Please sign in to comment.