@@ -103,77 +103,95 @@ Bashkit implements IEEE 1003.1-2024 Shell Command Language. See
103103
104104## Spec Test Coverage
105105
106- ** Total spec test cases:** 1452 (1447 pass, 5 skip)
106+ ** Total spec test cases:** 1723 (1586 pass, 137 skip)
107107
108108| Category | Cases | In CI | Pass | Skip | Notes |
109109| ----------| -------| -------| ------| ------| -------|
110- | Bash (core) | 1034 | Yes | 1029 | 5 | ` bash_spec_tests ` in CI |
110+ | Bash (core) | 1305 | Yes | 1181 | 124 | ` bash_spec_tests ` in CI |
111111| AWK | 96 | Yes | 96 | 0 | loops, arrays, -v, ternary, field assign, getline, %.6g |
112112| Grep | 76 | Yes | 76 | 0 | -z, -r, -a, -b, -H, -h, -f, -P, --include, --exclude, binary detect |
113113| Sed | 75 | Yes | 75 | 0 | hold space, change, regex ranges, -E |
114- | JQ | 114 | Yes | 114 | 0 | reduce, walk, regex funcs, --arg/--argjson, combined flags, input/inputs, env |
115- | Python | 57 | Yes | 57 | 0 | embedded Python (Monty) |
116- | ** Total** | ** 1452 ** | ** Yes** | ** 1447 ** | ** 5 ** | |
114+ | JQ | 114 | Yes | 109 | 5 | reduce, walk, regex funcs, --arg/--argjson, combined flags, input/inputs, env |
115+ | Python | 57 | Yes | 49 | 8 | embedded Python (Monty) |
116+ | ** Total** | ** 1723 ** | ** Yes** | ** 1586 ** | ** 137 ** | |
117117
118118### Bash Spec Tests Breakdown
119119
120120| File | Cases | Notes |
121121| ------| -------| -------|
122+ | alias.test.sh | 15 | alias expansion (15 skipped) |
123+ | arith-dynamic.test.sh | 14 | dynamic arithmetic contexts (5 skipped) |
122124| arithmetic.test.sh | 68 | includes logical, bitwise, compound assign, increment/decrement, ` let ` builtin, ` declare -i ` arithmetic |
125+ | array-slicing.test.sh | 8 | array slice operations |
123126| arrays.test.sh | 27 | indices, ` ${arr[@]} ` / ` ${arr[*]} ` , negative indexing ` ${arr[-1]} ` |
124- | background.test.sh | 4 | |
125- | bash-command.test.sh | 34 | bash/sh re-invocation |
127+ | assoc-arrays.test.sh | 15 | associative arrays ` declare -A ` |
128+ | background.test.sh | 2 | background job handling |
129+ | bash-command.test.sh | 25 | bash/sh re-invocation |
126130| bash-flags.test.sh | 13 | bash ` -e ` , ` -x ` , ` -u ` , ` -f ` , ` -o option ` flags |
127- | brace-expansion.test.sh | 21 | {a,b,c}, {1..5}, for-loop brace expansion |
128- | column.test.sh | 10 | column alignment |
131+ | brace-expansion.test.sh | 20 | {a,b,c}, {1..5}, for-loop brace expansion |
132+ | checksum.test.sh | 10 | md5sum, sha256sum, sha1sum |
133+ | chown-kill.test.sh | 7 | chown, kill builtins |
134+ | column.test.sh | 5 | column alignment |
129135| command.test.sh | 9 | ` command -v ` , ` -V ` , function bypass |
130- | command-not-found.test.sh | 17 | unknown command handling |
136+ | command-not-found.test.sh | 9 | unknown command handling |
137+ | command-subst.test.sh | 22 | includes backtick substitution, nested quotes in ` $() ` |
131138| conditional.test.sh | 24 | ` [[ ]] ` conditionals, ` =~ ` regex, BASH_REMATCH, glob ` == ` /` != ` |
132- | command-subst.test.sh | 22 | includes backtick substitution, nested quotes in ` $() ` (1 skipped) |
133139| control-flow.test.sh | 58 | if/elif/else, for, while, case ` ;; ` /` ;& ` /` ;;& ` , select, trap ERR, ` [[ =~ ]] ` BASH_REMATCH, compound input redirects |
134140| cuttr.test.sh | 32 | cut and tr commands, ` -z ` zero-terminated |
135- | date.test.sh | 38 | format specifiers, ` -d ` relative/compound/epoch, ` -R ` , ` -I ` , ` %N ` (2 skipped) |
141+ | date.test.sh | 37 | format specifiers, ` -d ` relative/compound/epoch, ` -R ` , ` -I ` , ` %N ` (2 skipped) |
142+ | declare.test.sh | 23 | ` declare ` /` typeset ` , ` -i ` , ` -r ` , ` -x ` , ` -a ` , ` -p ` , ` -n ` nameref, ` -l ` /` -u ` case conversion |
136143| diff.test.sh | 4 | line diffs |
144+ | dirstack.test.sh | 12 | ` pushd ` , ` popd ` , ` dirs ` directory stack operations |
137145| echo.test.sh | 24 | escape sequences |
146+ | empty-bodies.test.sh | 8 | empty loop/function bodies (5 skipped) |
138147| errexit.test.sh | 8 | set -e tests |
148+ | eval-bugs.test.sh | 4 | regression tests for eval/script bugs |
149+ | exit-status.test.sh | 18 | exit code propagation |
150+ | expr.test.sh | 13 | ` expr ` arithmetic, string ops, pattern matching, exit codes |
151+ | extglob.test.sh | 15 | ` @() ` , ` ?() ` , ` *() ` , ` +() ` , ` !() ` extended globs |
139152| fileops.test.sh | 28 | ` mktemp ` , ` -d ` , ` -p ` , template |
140- | find.test.sh | 10 | file search |
153+ | find.test.sh | 8 | file search |
141154| functions.test.sh | 26 | local dynamic scoping, nested writes, FUNCNAME call stack, ` caller ` builtin |
142155| getopts.test.sh | 9 | POSIX option parsing, combined flags, silent mode |
143156| glob-options.test.sh | 13 | dotglob, nocaseglob, failglob, nullglob, noglob, globstar |
144- | globs.test.sh | 12 | for-loop glob expansion, recursive ` ** ` |
157+ | globs.test.sh | 9 | for-loop glob expansion, recursive ` ** ` |
145158| headtail.test.sh | 14 | |
146- | herestring.test.sh | 8 | 1 skipped |
147- | hextools.test.sh | 5 | od/xxd/hexdump (3 skipped) |
159+ | heredoc.test.sh | 10 | heredoc variable expansion, quoted delimiters, file redirects, ` <<- ` tab strip |
160+ | heredoc-edge.test.sh | 15 | heredoc edge cases (6 skipped) |
161+ | herestring.test.sh | 8 | here-string ` <<< ` |
162+ | hextools.test.sh | 4 | od/xxd/hexdump (3 skipped) |
163+ | ln.test.sh | 5 | ` ln -s ` , ` -f ` , symlink creation |
164+ | nameref.test.sh | 14 | nameref variables (14 skipped) |
148165| negative-tests.test.sh | 13 | error conditions |
149166| nl.test.sh | 14 | line numbering |
150167| nounset.test.sh | 7 | ` set -u ` unbound variable checks, ` ${var:-default} ` nounset-aware |
168+ | parse-errors.test.sh | 18 | syntax error detection (13 skipped) |
151169| paste.test.sh | 4 | line merging with ` -s ` serial and ` -d ` delimiter |
152170| path.test.sh | 18 | basename, dirname, ` realpath ` canonical path resolution |
153171| pipes-redirects.test.sh | 19 | includes stderr redirects |
154172| printf.test.sh | 32 | format specifiers, array expansion, ` -v ` variable assignment, ` %q ` shell quoting |
155173| procsub.test.sh | 6 | |
174+ | quote.test.sh | 35 | quoting edge cases (2 skipped) |
175+ | read-builtin.test.sh | 10 | ` read ` builtin, IFS splitting, ` -r ` , ` -a ` (array), ` -n ` (nchars), here-string |
176+ | script-exec.test.sh | 10 | script execution by path, $PATH search, exit codes |
177+ | seq.test.sh | 12 | ` seq ` numeric sequences, ` -w ` , ` -s ` , decrement, negative |
178+ | shell-grammar.test.sh | 23 | shell grammar edge cases |
156179| sleep.test.sh | 6 | |
157- | sortuniq.test.sh | 32 | sort and uniq, ` -z ` zero-terminated, ` -m ` merge |
158- | source.test.sh | 21 | source/., function loading, PATH search, positional params |
180+ | sortuniq.test.sh | 32 | sort ` -f ` /` -n ` /` -r ` /` -u ` /` -V ` /` -t ` /` -k ` /` -s ` /` -c ` /` -h ` /` -M ` /` -m ` /` -z ` /` -o ` , uniq ` -c ` /` -d ` /` -u ` /` -i ` /` -f ` |
181+ | source.test.sh | 19 | source/., function loading, PATH search, positional params |
182+ | string-ops.test.sh | 14 | string replacement (prefix/suffix anchored), ` ${var:?} ` , case conversion |
183+ | subshell.test.sh | 13 | subshell execution (4 skipped) |
184+ | temp-binding.test.sh | 10 | temporary variable bindings ` VAR=val cmd ` |
159185| test-operators.test.sh | 27 | file/string tests, ` -nt ` /` -ot ` /` -ef ` file comparisons |
186+ | textrev.test.sh | 14 | ` tac ` reverse line order, ` rev ` reverse characters, ` yes ` repeated output |
160187| time.test.sh | 11 | Wall-clock only (user/sys always 0) |
161- | timeout.test.sh | 17 | |
162- | variables.test.sh | 97 | includes special vars, prefix env, PIPESTATUS, trap EXIT, ` ${var@Q} ` , ` \<newline> ` line continuation, PWD/HOME/USER/HOSTNAME/BASH_VERSION/SECONDS, ` set -x ` xtrace, ` shopt ` builtin, nullglob, ` set -o ` /` set +o ` display, ` trap -p ` |
163- | wc.test.sh | 35 | word count (5 skipped) |
188+ | timeout.test.sh | 16 | |
164189| type.test.sh | 15 | ` type ` , ` which ` , ` hash ` builtins |
165- | declare.test.sh | 23 | ` declare ` /` typeset ` , ` -i ` , ` -r ` , ` -x ` , ` -a ` , ` -p ` , ` -n ` nameref, ` -l ` /` -u ` case conversion |
166- | ln.test.sh | 5 | ` ln -s ` , ` -f ` , symlink creation |
167- | eval-bugs.test.sh | 4 | regression tests for eval/script bugs |
168- | script-exec.test.sh | 10 | script execution by path, $PATH search, exit codes |
169- | seq.test.sh | 12 | ` seq ` numeric sequences, ` -w ` , ` -s ` , decrement, negative |
170- | textrev.test.sh | 14 | ` tac ` reverse line order, ` rev ` reverse characters, ` yes ` repeated output |
171- | heredoc.test.sh | 10 | heredoc variable expansion, quoted delimiters, file redirects, ` <<- ` tab strip |
172- | string-ops.test.sh | 14 | string replacement (prefix/suffix anchored), ` ${var:?} ` , case conversion |
173- | read-builtin.test.sh | 10 | ` read ` builtin, IFS splitting, ` -r ` , ` -a ` (array), ` -n ` (nchars), here-string |
174- | expr.test.sh | 13 | ` expr ` arithmetic, string ops, pattern matching, exit codes |
175- | extglob.test.sh | 15 | ` @() ` , ` ?() ` , ` *() ` , ` +() ` , ` !() ` extended globs |
176- | dirstack.test.sh | 12 | ` pushd ` , ` popd ` , ` dirs ` directory stack operations |
190+ | unicode.test.sh | 17 | unicode handling (3 skipped) |
191+ | var-op-test.test.sh | 21 | variable operations (16 skipped) |
192+ | variables.test.sh | 97 | includes special vars, prefix env, PIPESTATUS, trap EXIT, ` ${var@Q} ` , ` \<newline> ` line continuation, PWD/HOME/USER/HOSTNAME/BASH_VERSION/SECONDS, ` set -x ` xtrace, ` shopt ` builtin, nullglob, ` set -o ` /` set +o ` display, ` trap -p ` |
193+ | wc.test.sh | 20 | word count |
194+ | word-split.test.sh | 39 | IFS word splitting (36 skipped) |
177195
178196## Shell Features
179197
0 commit comments