forked from TypedDevs/bashunit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbashunit
More file actions
executable file
·128 lines (114 loc) · 3.71 KB
/
bashunit
File metadata and controls
executable file
·128 lines (114 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env bash
set -euo pipefail
declare -r BASHUNIT_MIN_BASH_VERSION="3.0"
function _check_bash_version() {
local current_version
if [[ -n ${BASHUNIT_TEST_BASH_VERSION:-} ]]; then
# Checks if BASHUNIT_TEST_BASH_VERSION is set (typically for testing purposes)
current_version="${BASHUNIT_TEST_BASH_VERSION}"
elif [[ -n ${BASH_VERSINFO+set} ]]; then
# Checks if the special Bash array BASH_VERSINFO exists. This array is only defined in Bash.
current_version="${BASH_VERSINFO[0]}.${BASH_VERSINFO[1]}"
else
# If not in Bash (e.g., running from Zsh). The pipeline extracts just the major.minor version (e.g., 3.0).
current_version="$(bash --version | head -n1 | cut -d' ' -f4 | cut -d. -f1,2)"
fi
local major
IFS=. read -r major _ <<<"$current_version"
if ((major < 3)); then
printf 'Bashunit requires Bash >= %s. Current version: %s\n' "$BASHUNIT_MIN_BASH_VERSION" "$current_version" >&2
exit 1
fi
}
_check_bash_version
# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.34.1"
# shellcheck disable=SC2155
declare -r BASHUNIT_ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"
export BASHUNIT_ROOT_DIR
# Capture working directory at startup (before any test changes it)
declare -r BASHUNIT_WORKING_DIR="$PWD"
export BASHUNIT_WORKING_DIR
# Early scan for flags that must be set before loading env.sh
for arg in "$@"; do
case "$arg" in
--skip-env-file)
export BASHUNIT_SKIP_ENV_FILE=true
;;
-l | --login)
export BASHUNIT_LOGIN_SHELL=true
;;
--no-color)
# shellcheck disable=SC2034
BASHUNIT_NO_COLOR=true
;;
esac
done
source "$BASHUNIT_ROOT_DIR/src/dev/debug.sh"
source "$BASHUNIT_ROOT_DIR/src/check_os.sh"
source "$BASHUNIT_ROOT_DIR/src/str.sh"
source "$BASHUNIT_ROOT_DIR/src/globals.sh"
source "$BASHUNIT_ROOT_DIR/src/dependencies.sh"
source "$BASHUNIT_ROOT_DIR/src/io.sh"
source "$BASHUNIT_ROOT_DIR/src/math.sh"
source "$BASHUNIT_ROOT_DIR/src/parallel.sh"
source "$BASHUNIT_ROOT_DIR/src/env.sh"
source "$BASHUNIT_ROOT_DIR/src/coverage.sh"
source "$BASHUNIT_ROOT_DIR/src/clock.sh"
source "$BASHUNIT_ROOT_DIR/src/state.sh"
source "$BASHUNIT_ROOT_DIR/src/colors.sh"
source "$BASHUNIT_ROOT_DIR/src/console_header.sh"
source "$BASHUNIT_ROOT_DIR/src/console_results.sh"
source "$BASHUNIT_ROOT_DIR/src/helpers.sh"
source "$BASHUNIT_ROOT_DIR/src/test_title.sh"
source "$BASHUNIT_ROOT_DIR/src/upgrade.sh"
source "$BASHUNIT_ROOT_DIR/src/watch.sh"
source "$BASHUNIT_ROOT_DIR/src/assertions.sh"
source "$BASHUNIT_ROOT_DIR/src/doc.sh"
source "$BASHUNIT_ROOT_DIR/src/reports.sh"
source "$BASHUNIT_ROOT_DIR/src/runner.sh"
source "$BASHUNIT_ROOT_DIR/src/bashunit.sh"
source "$BASHUNIT_ROOT_DIR/src/init.sh"
source "$BASHUNIT_ROOT_DIR/src/learn.sh"
source "$BASHUNIT_ROOT_DIR/src/main.sh"
bashunit::check_os::init
bashunit::clock::init
# Subcommand detection
_SUBCOMMAND=""
case "${1:-}" in
test | bench | doc | init | learn | upgrade | assert | watch)
_SUBCOMMAND="$1"
shift
;;
-v | --version)
bashunit::console_header::print_version
exit 0
;;
-h | --help)
bashunit::console_header::print_help
exit 0
;;
-*)
# Flag without subcommand → assume "test"
_SUBCOMMAND="test"
;;
"")
# No arguments → assume "test" (uses BASHUNIT_DEFAULT_PATH)
_SUBCOMMAND="test"
;;
*)
# Path argument → assume "test"
_SUBCOMMAND="test"
;;
esac
# Route to subcommand handler
case "$_SUBCOMMAND" in
test) bashunit::main::cmd_test "$@" ;;
bench) bashunit::main::cmd_bench "$@" ;;
doc) bashunit::main::cmd_doc "$@" ;;
init) bashunit::main::cmd_init "$@" ;;
learn) bashunit::main::cmd_learn "$@" ;;
upgrade) bashunit::main::cmd_upgrade "$@" ;;
assert) bashunit::main::cmd_assert "$@" ;;
watch) bashunit::main::cmd_watch "$@" ;;
esac