diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/lib/log.sh | 139 | ||||
| -rw-r--r-- | test/lib/test.sh | 26 | ||||
| -rwxr-xr-x | test/main.sh | 79 | ||||
| m--------- | test/runner | 0 |
4 files changed, 6 insertions, 238 deletions
diff --git a/test/lib/log.sh b/test/lib/log.sh deleted file mode 100644 index 242ab31..0000000 --- a/test/lib/log.sh +++ /dev/null @@ -1,139 +0,0 @@ -# Copyright (c) 2026 Egor Tensin <egor@tensin.name> -# This file is part of the "Config file sharing" 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 -} - -log_run() { - if [ "$#" -lt 1 ]; then - log "usage: ${FUNCNAME[0]} ARGV0 [ARG...]" - return 1 - fi - - local msg='Running:' - msg="$msg$( printf -- ' %q' "$@" )" - log "$msg" -} - -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/lib/test.sh b/test/lib/test.sh index 400f39a..4ac2238 100644 --- a/test/lib/test.sh +++ b/test/lib/test.sh @@ -3,18 +3,11 @@ # For details, see https://github.com/egor-tensin/config-links # Distributed under the MIT License. -test_should_fail= -test_root_dir= - test_src_dir= test_dest_dir= test_alt_dest_dir= test_setup() { - test_root_dir="$( mktemp -d )" - # mktemp returns /var/..., which is actually in /private/var/... on macOS. - test_root_dir="$( readlink -e -- "$test_root_dir" )" - test_src_dir="$test_root_dir/src" test_dest_dir="$test_root_dir/dest" test_alt_dest_dir="$test_root_dir/alt_test" @@ -24,9 +17,9 @@ test_setup() { log "%DEST% directory: $test_dest_dir" log "%ALT_DEST% directory: $test_alt_dest_dir" - cp -r -- "$script_dir/data/src" "$test_src_dir" - cp -r -- "$script_dir/data/dest" "$test_dest_dir" - cp -r -- "$script_dir/data/dest" "$test_alt_dest_dir" + cp -r -- "$tests_dir/data/src" "$test_src_dir" + cp -r -- "$tests_dir/data/dest" "$test_dest_dir" + cp -r -- "$tests_dir/data/dest" "$test_alt_dest_dir" } test_setup_symlink() { @@ -44,13 +37,6 @@ test_setup_dir_symlink() { ln -s -- '%DEST%' "$test_src_dir/%ALT_DEST%" } -test_cleanup_default() { - if [ -n "$test_root_dir" ]; then - log "Removing test's root directory: $test_root_dir" - rm -rf -- "$test_root_dir" - fi -} - test_run_script() { local cmd=( "$@" @@ -64,15 +50,15 @@ test_run_script() { } test_run_update() { - test_run_script "$script_dir/../bin/links-update" "$@" + test_run_script "$tests_dir/../bin/links-update" "$@" } test_run_remove() { - test_run_script "$script_dir/../bin/links-remove" + test_run_script "$tests_dir/../bin/links-remove" } test_run_chmod() { - test_run_script "$script_dir/../bin/links-chmod" "$@" + test_run_script "$tests_dir/../bin/links-chmod" "$@" } test_verify_output() { diff --git a/test/main.sh b/test/main.sh deleted file mode 100755 index 76428f5..0000000 --- a/test/main.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2026 Egor Tensin <egor@tensin.name> -# This file is part of the "Config file sharing" project. -# For details, see https://github.com/egor-tensin/config-links -# Distributed under the MIT License. - -set -o errexit -o nounset -o pipefail -shopt -s inherit_errexit 2> /dev/null || true -shopt -s lastpipe - -script_dir="$( dirname -- "${BASH_SOURCE[0]}" )" -script_dir="$( cd -- "$script_dir" && pwd )" -readonly script_dir -script_name="$( basename -- "${BASH_SOURCE[0]}" )" -readonly script_name - -source "$script_dir/lib/log.sh" - -run_test_file() { - local test_file - for test_file; do - source "$script_dir/lib/test.sh" - source "$script_dir/$test_file" - - log_test_start "$test_file" - - set +e - ( - set -o errexit -o nounset -o pipefail - shopt -s inherit_errexit 2> /dev/null || true - shopt -s lastpipe - - if [ "$( type -t test_cleanup )" == function ]; then - trap test_cleanup EXIT - else - trap test_cleanup_default EXIT - fi - - test_run - ) - local ret="$?" - set -e - - log_test_finish "$test_file" "$ret" - done -} - -main() { - if [ "$#" -gt 1 ]; then - echo "usage: $script_name [PATTERN]" >&2 - return 1 - fi - - local -a test_files=() - local test_file - - local pattern='*' - [ "$#" -gt 0 ] && pattern="$1" - - find "$script_dir" \ - -mindepth 1 \ - -maxdepth 1 \ - -type f \ - -regex '.*/tst-.*\.sh$' \ - -regextype posix-basic \ - -name "$pattern" \ - -printf '%P\0' \ - | sort -z \ - | \ - while IFS= read -d '' -r test_file; do - test_files+=("$test_file") - done - - run_test_file ${test_files[@]+"${test_files[@]}"} - log_tests_summary -} - -main "$@" diff --git a/test/runner b/test/runner new file mode 160000 +Subproject d9f6db0c585652ac8bbbadabd3360868ac8f09c |
