1
0
mirror of https://github.com/sstephenson/bats.git synced 2024-11-17 11:42:33 +01:00
bats/libexec/bats-preprocess
2013-10-15 14:25:37 +01:00

53 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
encode_name() {
local result="$1_"
local name="$2"
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<length; i++)); do
char="${name:$i:1}"
if [ "$char" = " " ]; then
result+="_"
elif [[ "$char" =~ [[:alnum:]] ]]; then
result+="$char"
else
result+="$(printf -- "-%02x" \'"$char")"
fi
done
fi
echo "$result"
}
tests=()
index=0
while IFS= read -r line; do
index=$(($index + 1))
directive="$(expr "$line" : ' *@\([test\|skip]*\) *\([^ ].*\) *{ *$' || true)"
quoted_name="$(expr "$line" : ' *@[test\|skip]* *\([^ ].*\) *{ *$' || true)"
if [ -n "$quoted_name" ]; then
name="$(eval echo "$quoted_name")"
encoded_name="$(encode_name "$directive" "$name")"
echo "${encoded_name}() { bats_test_info ${quoted_name} ${index}"
tests["${#tests[@]}"]="$encoded_name"
else
printf "%s\n" "$line"
fi
done
for test_name in "${tests[@]}"; do
echo "bats_test_function ${test_name}"
done