2011-12-28 19:40:14 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
|
|
|
|
encode_name() {
|
2013-10-15 15:25:37 +02:00
|
|
|
local result="$1_"
|
|
|
|
local name="$2"
|
2011-12-28 19:40:14 +01:00
|
|
|
|
|
|
|
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))
|
2013-10-15 15:25:37 +02:00
|
|
|
directive="$(expr "$line" : ' *@\([test\|skip]*\) *\([^ ].*\) *{ *$' || true)"
|
|
|
|
quoted_name="$(expr "$line" : ' *@[test\|skip]* *\([^ ].*\) *{ *$' || true)"
|
2011-12-28 19:40:14 +01:00
|
|
|
|
|
|
|
if [ -n "$quoted_name" ]; then
|
|
|
|
name="$(eval echo "$quoted_name")"
|
2013-10-15 15:25:37 +02:00
|
|
|
encoded_name="$(encode_name "$directive" "$name")"
|
2011-12-28 19:40:14 +01:00
|
|
|
echo "${encoded_name}() { bats_test_info ${quoted_name} ${index}"
|
2013-10-15 15:25:37 +02:00
|
|
|
tests["${#tests[@]}"]="$encoded_name"
|
2011-12-28 19:40:14 +01:00
|
|
|
else
|
2013-04-06 14:01:03 +02:00
|
|
|
printf "%s\n" "$line"
|
2011-12-28 19:40:14 +01:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
for test_name in "${tests[@]}"; do
|
|
|
|
echo "bats_test_function ${test_name}"
|
|
|
|
done
|