diff options
Diffstat (limited to 'test/local/lib')
| -rw-r--r-- | test/local/lib/log.sh | 128 | ||||
| -rw-r--r-- | test/local/lib/test.sh (renamed from test/local/lib/common.sh) | 48 |
2 files changed, 146 insertions, 30 deletions
diff --git a/test/local/lib/log.sh b/test/local/lib/log.sh new file mode 100644 index 0000000..b26e16a --- /dev/null +++ b/test/local/lib/log.sh @@ -0,0 +1,128 @@ +# Copyright (c) 2026 Egor Tensin <egor@tensin.name> +# This file is part of the "config-links" project. +# For details, see https://github.com/egor-tensin/config-links +# Distributed under the MIT License. + +log() { + local msg + for msg; do + echo -e "$test_file | $msg" >&2 + done +} + +fail() { + local msg + for msg; do + log "FAIL: $msg" + done +} + +fail_details() { + local msg + for msg; do + fail " $msg" + done +} + +log_numof_tests_ok=0 +log_numof_tests_failed=0 +declare -a log_tests_failed=() +declare -A log_tests_should_fail=() + +log_test_start() { + if [ "$#" -ne 1 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE" >&2 + return 1 + fi + + local test_file="$1" + + if [ -n "${test_should_fail:-}" ]; then + log_tests_should_fail["$test_file"]=1 + fi + + cat <<EOF >&2 + +====================================================================== +TEST: $test_file +====================================================================== +EOF + + log "Should fail: ${test_should_fail:-No}" +} + +log_test_ok() { + if [ "$#" -ne 1 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE" >&2 + return 1 + fi + + log_numof_tests_ok=$((log_numof_tests_ok + 1)) + + cat <<EOF >&2 +---------------------------------------------------------------------- +OK: $1 +---------------------------------------------------------------------- +EOF +} + +log_test_fail() { + if [ "$#" -ne 1 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE" >&2 + return 1 + fi + + log_numof_tests_failed=$((log_numof_tests_failed + 1)) + log_tests_failed+=("$1") + + cat <<EOF >&2 +---------------------------------------------------------------------- +FAIL: $1 +---------------------------------------------------------------------- +EOF +} + +log_test_finish() { + if [ "$#" -ne 2 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE EXIT_CODE" >&2 + return 1 + fi + + local test_file="$1" + local ret="$2" + local test_should_fail + test_should_fail="${log_tests_should_fail["$test_file"]:+x}" + + if [ "$ret" -eq 0 ] || [ -n "$test_should_fail" ]; then + log_test_ok "$test_file" + else + log_test_fail "$test_file" + fi +} + +log_tests_summary() { + cat <<EOF >&2 + +====================================================================== +SUMMARY +====================================================================== +OK: $log_numof_tests_ok +FAIL: $log_numof_tests_failed +EOF + + local test_file + for test_file in ${log_tests_failed[@]+"${log_tests_failed[@]}"}; do + cat <<EOF >&2 +FAIL: $test_file +EOF + done + + cat <<EOF >&2 +---------------------------------------------------------------------- +EOF + + local ret=0 + [ "$log_numof_tests_failed" -gt 0 ] && ret=1 + + return "$ret" +} diff --git a/test/local/lib/common.sh b/test/local/lib/test.sh index fd9612b..b6e444e 100644 --- a/test/local/lib/common.sh +++ b/test/local/lib/test.sh @@ -21,10 +21,10 @@ test_setup() { test_dest_dir="$test_root_dir/$dest_dir_name" test_alt_dest_dir="$test_root_dir/$alt_dest_dir_name" - echo "Root directory: $test_root_dir" - echo "Shared directory: $test_src_dir" - echo "%DEST% directory: $test_dest_dir" - echo "%ALT_DEST% directory: $test_alt_dest_dir" + log "Root directory: $test_root_dir" + log "Shared directory: $test_src_dir" + log "%DEST% directory: $test_dest_dir" + log "%ALT_DEST% directory: $test_alt_dest_dir" cp -r -- "$script_dir/data/$src_dir_name" "$test_src_dir" cp -r -- "$script_dir/data/$dest_dir_name" "$test_dest_dir" @@ -51,13 +51,10 @@ test_cleanup_default() { } test_run_script() { - echo - echo -n 'Executing script:' + local msg='Executing script:' + msg="$msg$( printf -- ' %q' "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" )" + log "$msg" - printf -- ' %q' "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" - printf -- '\n' - - echo DEST="$test_dest_dir" ALT_DEST="$test_alt_dest_dir" "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" } @@ -80,24 +77,19 @@ test_verify_output() { fi local expected_output="$1" - echo - echo 'Expected directory structure:' - echo "$expected_output" local dest_dir="$test_dest_dir" [ "$#" -ge 2 ] && dest_dir="$2" + log "Verifying directory structure in $dest_dir..." + local actual_output actual_output="$( find "$dest_dir" -printf '%h/%f->%l\n' | sort )" - echo - echo 'Actual directory structure:' - echo "$actual_output" - echo - if [ "$actual_output" = "$expected_output" ]; then - echo "... They match!" - else - echo "... The actual directory structure does not match the expected directory structure!" >&2 + if [ "$actual_output" != "$expected_output" ]; then + fail "The actual files do not match the expected directory structure!" + fail_details "Expected:\n$expected_output" + fail_details "Actual:\n$actual_output" return 1 fi } @@ -111,20 +103,16 @@ test_verify_mode() { local expected_mode="$1" local path="$2" - echo - echo "Checking permissions for file: $path" - echo "Expected mode: $expected_mode" + log "Checking permissions for file: $path" local actual_mode actual_mode="$( stat -c '%a' -- "$path" )" actual_mode="0$actual_mode" - echo "Actual mode: $actual_mode" - - if [ "$actual_mode" = "$expected_mode" ]; then - echo "... They match!" - else - echo "... They don't match." + if [ "$actual_mode" != "$expected_mode" ]; then + fail "They don't match" + fail_details "Expected: $expected_mode" + fail_details "Actual: $actual_mode" return 1 fi } |
