✨ Improvements
bashunit::spyaccepts an optional exit code or custom implementation function (#600)- Assert functions accept an optional trailing label to override the failure title (#77)
--fail-on-riskyflag andBASHUNIT_FAIL_ON_RISKYenv var treat no-assertion tests as failures (#115)--log-gha <file>flag andBASHUNIT_LOG_GHAenv var emit GitHub Actions workflow commands so failed, risky and incomplete tests show up as inline PR annotations (#280)assert_execaccepts--stdin,--stdout-contains,--stdout-not-contains,--stderr-containsand--stderr-not-containsflags to test interactive prompt commands and substring output (#301)
🛠️ Changes
- Parallel test execution is now enabled on Alpine Linux (#370)
🐛 Bug Fixes
- Dim/faint labels now render as gray (SGR 90) so keywords like
ExpectedandTests:stay colored in GitHub Actions logs (#323) - Syntax error in a test file now fails the suite instead of passing silently (#220)
--stop-on-failurenow stops on runtime errors such ascommand not foundorillegal option(#383)- Spying on
echoorprintfno longer hangs via infinite recursion (#607) - LCOV and HTML coverage reports no longer produce empty output under
set -e(#618) clock::nowhandlesEPOCHREALTIMEvalues that use a comma decimal separator- Invalid
.env.examplecoverage threshold entry; CI now copies.env.exampleto.envso config parse errors are caught - Coverage no longer counts case patterns with trailing comments (e.g.
*thing) # note) or loop terminators with redirections/pipes (e.g.done < file,done <<<"$var",done | sort) as executable lines (#634) assert_trueandassert_falsenow report empty strings as assertion failures instead of trying to execute them
👥 Contributors
Checksum
SHA256: bfe9f69bda77034234a38f26182cc34e1f7648d846dab57a513a14cf91977544
Full Changelog: 0.34.1...0.35.0