Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| #!/usr/bin/env bash | |
| # shellcheck source=/dev/null | |
| # | |
| # Tests for the Pure Bash Bible. | |
| 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_regex() { | |
| result="$(regex "#FFFFFF" '^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$')" | |
| assert_equals "$result" "#FFFFFF" | |
| } | |
| 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" | |
| } | |
| test_strip_all() { | |
| result="$(strip_all "The Quick Brown Fox" "[aeiou]")" | |
| assert_equals "$result" "Th Qck Brwn Fx" | |
| } | |
| test_strip() { | |
| result="$(strip "The Quick Brown Fox" "[aeiou]")" | |
| assert_equals "$result" "Th Quick Brown Fox" | |
| } | |
| 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() { | |
| # shellcheck disable=2034 | |
| arr=(a b c d) | |
| result="$(cycle; cycle; cycle)" | |
| assert_equals "$result" "a b c " | |
| } | |
| test_head() { | |
| printf '%s\n%s\n\n\n' "hello" "world" > test_file | |
| result="$(head 2 test_file)" | |
| assert_equals "$result" $'hello\nworld' | |
| } | |
| test_tail() { | |
| printf '\n\n\n%s\n%s\n' "hello" "world" > test_file | |
| result="$(tail 2 test_file)" | |
| assert_equals "$result" $'hello\nworld' | |
| } | |
| test_lines() { | |
| printf '\n\n\n\n\n\n\n\n' > test_file | |
| result="$(lines test_file)" | |
| assert_equals "$result" "8" | |
| } | |
| test_lines_loop() { | |
| printf '\n\n\n\n\n\n\n\n' > test_file | |
| result="$(lines_loop test_file)" | |
| assert_equals "$result" "8" | |
| } | |
| 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" | |
| } | |
| test_hex_to_rgb() { | |
| result="$(hex_to_rgb "#FFFFFF")" | |
| assert_equals "$result" "255 255 255" | |
| result="$(hex_to_rgb "000000")" | |
| assert_equals "$result" "0 0 0" | |
| } | |
| test_rgb_to_hex() { | |
| result="$(rgb_to_hex 0 0 0)" | |
| assert_equals "$result" "#000000" | |
| } | |
| test_date() { | |
| result="$(date "%C")" | |
| assert_equals "$result" "20" | |
| } | |
| test_read_sleep() { | |
| result="$((SECONDS+1))" | |
| read_sleep 1 | |
| assert_equals "$result" "$SECONDS" | |
| } | |
| test_bar() { | |
| result="$(bar 50 10)" | |
| assert_equals "${result//$'\r'}" "[----- ]" | |
| } | |
| test_get_functions() { | |
| IFS=$'\n' read -d "" -ra functions < <(get_functions) | |
| assert_equals "${functions[0]}" "assert_equals" | |
| } | |
| test_extract() { | |
| printf '{\nhello, world\n}\n' > test_file | |
| result="$(extract test_file "{" "}")" | |
| assert_equals "$result" "hello, world" | |
| } | |
| test_split() { | |
| IFS=$'\n' read -d "" -ra result < <(split "hello,world,my,name,is,john" ",") | |
| assert_equals "${result[*]}" "hello world my name is john" | |
| } | |
| assert_equals() { | |
| if [[ "$1" == "$2" ]]; then | |
| ((pass+=1)) | |
| status=$'\e[32m✔' | |
| else | |
| ((fail+=1)) | |
| status=$'\e[31m✖' | |
| local err="(\"$1\" != \"$2\")" | |
| fi | |
| printf ' %s\e[m | %s\n' "$status" "${FUNCNAME[1]/test_} $err" | |
| } | |
| main() { | |
| trap 'rm readme_code test_file' EXIT | |
| # Extract code blocks from the README. | |
| while IFS=$'\n' read -r line; do | |
| [[ "$code" && "$line" != \`\`\` ]] && printf '%s\n' "$line" | |
| [[ "$line" =~ ^\`\`\`sh$ ]] && code=1 | |
| [[ "$line" =~ ^\`\`\`$ ]] && code= | |
| done < README.md > readme_code | |
| # Run shellcheck and source the code. | |
| shellcheck -s bash readme_code test.sh build.sh || exit 1 | |
| . readme_code | |
| head="-> Running tests on the Pure Bash Bible.." | |
| printf '\n%s\n%s\n' "$head" "${head//?/-}" | |
| # Generate the list of tests to run. | |
| IFS=$'\n' read -d "" -ra funcs < <(declare -F) | |
| for func in "${funcs[@]//declare -f }"; do | |
| [[ "$func" == test_* ]] && "$func"; | |
| done | |
| comp="Completed $((fail+pass)) tests. ${pass:-0} passed, ${fail:-0} failed." | |
| printf '%s\n%s\n\n' "${comp//?/-}" "$comp" | |
| # If a test failed, exit with '1'. | |
| ((fail>0)) || exit 0 && exit 1 | |
| } | |
| main "$@" |