pure-bash-bible/test.sh

150 lines
3.1 KiB
Bash
Raw Normal View History

2018-06-14 10:50:53 +02:00
#!/usr/bin/env bash
#
# Tests for the Pure Bash Bible.
2018-06-14 11:21:41 +02:00
test_trim_string() {
result="$(trim_string " Hello, World ")"
assert_equals "$result" "Hello, World"
}
test_trim_all() {
result="$(trim_all " Hello, World ")"
assert_equals "$result" "Hello, World"
}
test_lower() {
result="$(lower "HeLlO")"
assert_equals "$result" "hello"
}
test_upper() {
result="$(upper "HeLlO")"
assert_equals "$result" "HELLO"
}
test_trim_quotes() {
result="$(trim_quotes "\"te'st' 'str'ing\"")"
assert_equals "$result" "test string"
}
2018-06-14 11:39:26 +02:00
test_lstrip() {
result="$(lstrip "!:IHello" "!:I")"
assert_equals "$result" "Hello"
}
test_rstrip() {
result="$(rstrip "Hello!:I" "!:I")"
assert_equals "$result" "Hello"
}
test_reverse_array() {
IFS=$'\n' read -d "" -ra result < <(reverse_array 1 2 3 4 5)
assert_equals "${result[*]}" "5 4 3 2 1"
}
test_remove_array_dups() {
IFS=$'\n' read -d "" -ra result < <(remove_array_dups 1 1 2 2 3 3 4 5)
assert_equals "${result[*]}" "1 2 3 4 5"
}
test_cycle() {
arr=(a b c d)
result="$(cycle; cycle; cycle)"
assert_equals "$result" "a b c "
}
2018-06-14 11:47:50 +02:00
test_head() {
printf '%s\n%s\n\n\n' "hello" "world" > test_file
result="$(head 2 test_file)"
assert_equals "$result" $'hello\nworld'
rm test_file
}
test_tail() {
printf '\n\n\n%s\n%s\n' "hello" "world" > test_file
result="$(tail 2 test_file)"
assert_equals "$result" $'hello\nworld'
rm test_file
}
test_count() {
result="$(count ./{README.m,LICENSE.m,.travis.ym}*)"
assert_equals "$result" "3"
}
test_dirname() {
result="$(dirname "/home/black/Pictures/Wallpapers/1.jpg")"
assert_equals "$result" "/home/black/Pictures/Wallpapers/"
}
test_basename() {
result="$(basename "/home/black/Pictures/Wallpapers/1.jpg")"
assert_equals "$result" "1.jpg"
}
2018-06-14 12:08:09 +02:00
test_hex_to_rgb() {
result="$(hex_to_rgb "#FFFFFF")"
assert_equals "$result" "255 255 255"
}
test_rgb_to_hex() {
result="$(rgb_to_hex 0 0 0)"
assert_equals "$result" "#000000"
}
test_date() {
result="$(date "%C")"
assert_equals "$result" "20"
}
2018-06-14 10:50:53 +02:00
assert_equals() {
local status
2018-06-14 12:08:09 +02:00
((tests+=1))
2018-06-14 10:50:53 +02:00
[[ "$1" == "$2" ]] && status="✔"
2018-06-14 12:08:09 +02:00
printf '%s\n' " ${status:-} | ${FUNCNAME[1]/test_}"
if [[ "$1" == "$2" ]]; then
((pass+=1))
return 0
else
:>/tmp/err
((err+=1))
return 1
fi
2018-06-14 10:50:53 +02:00
}
main() {
source <(awk '/```sh/{f=1;next}/```/{f=0}f' README.md) 2>/dev/null
2018-06-14 12:08:09 +02:00
head="-> Running tests on the Pure Bash Bible.."
printf '\n%s\n%s\n' "$head" "${head//?/-}"
2018-06-14 11:21:41 +02:00
test_trim_string
test_trim_all
test_lower
test_upper
test_trim_quotes
2018-06-14 11:39:26 +02:00
test_lstrip
test_rstrip
test_reverse_array
test_remove_array_dups
test_cycle
2018-06-14 11:47:50 +02:00
test_head
test_tail
test_count
test_dirname
test_basename
2018-06-14 12:08:09 +02:00
test_hex_to_rgb
test_rgb_to_hex
test_date
comp="Completed $tests tests. ${pass:-0} passed, ${err:-0} errored."
printf '%s\n%s\n\n' "${comp//?/-}" "$comp"
2018-06-14 10:50:53 +02:00
[[ -f /tmp/err ]] || exit 0 && { rm /tmp/err; exit 1; }
}
main "$@"