Files
2026-11-04 09:43:05 -07:00

60 lines
1.7 KiB
Bash

#!/usr/bin/env bats
load test_helper
setup() {
common_setup
make_working_copy
stub make
# Fails on any file that contains BAD, as if it had a warning
stub shellcheck 'for f in "$@"; do [ -f "$f" ] && grep -q BAD "$f" && exit 1; done; exit 0'
stub bats 'echo 7'
}
@test "check runs make lint and make test, and shellcheck on untracked scripts" {
printf '%s\n' '#!/bin/bash' 'echo fine' > "$WC/new-script"
printf '%s\n' 'echo fine' > "$WC/new-hook.sh"
echo "not a script" > "$WC/notes.txt"
run cdd check
[ "$status" -eq 0 ]
called make --no-print-directory lint
called make --no-print-directory test
grep -q "^shellcheck --severity=warning .*new-script" "$STUB_LOG"
grep -q "^shellcheck --severity=warning .*new-hook.sh" "$STUB_LOG"
[[ "$output" == *"shellcheck: ok ("*" files, 2 untracked) bats: ok (7 tests)"* ]]
run grep -q "^shellcheck .*notes.txt" "$STUB_LOG"
[ "$status" -eq 1 ]
}
@test "check fails on a warning in an untracked script" {
printf '%s\n' '#!/bin/bash' 'BAD' > "$WC/new-script"
run cdd check
[ "$status" -eq 1 ]
[[ "$output" == *"shellcheck: FAILED"* ]]
}
@test "check skips ignored files" {
echo "ignored-script" > "$WC/.gitignore"
printf '%s\n' '#!/bin/bash' 'BAD' > "$WC/ignored-script"
run cdd check
[ "$status" -eq 0 ]
}
@test "check --fast runs only the shellcheck steps" {
run cdd check --fast
[ "$status" -eq 0 ]
called make --no-print-directory lint
uncalled make --no-print-directory test
[[ "$output" == *"bats: skipped (--fast)"* ]]
}
@test "check fails when make test fails" {
stub make '[ "$2" != test ]'
run cdd check
[ "$status" -eq 1 ]
[[ "$output" == *"bats: FAILED"* ]]
}