| #!/bin/sh | |
| # SPDX-License-Identifier: GPL-2.0-only | |
| # | |
| # Run dt-check-style against fixtures under good/ and bad/. | |
| # good/ files must produce no output and exit 0 in both modes. | |
| # bad/ files must produce the expected output (in expected/<name>.txt) | |
| # and exit 1. | |
| # | |
| # The mode used for a bad fixture is whichever produces a violation: | |
| # trailing-whitespace and tab fixtures use the default (relaxed), | |
| # the rest use --mode=strict. The expected output files name the | |
| # mode in their first line. | |
| set -u | |
| here=$(cd "$(dirname "$0")" && pwd) | |
| tool="$here/../dt-check-style" | |
| fail=0 | |
| run() { | |
| file=$1 | |
| mode=$2 | |
| "$tool" --mode="$mode" "$file" 2>&1 | |
| } | |
| # good/ -- must exit 0 and produce no output in both modes | |
| for f in "$here"/good/*; do | |
| [ -e "$f" ] || continue | |
| for mode in relaxed strict; do | |
| out=$(run "$f" "$mode") | |
| rc=$? | |
| if [ -n "$out" ] || [ "$rc" -ne 0 ]; then | |
| echo "FAIL good/$mode: $(basename "$f") (exit $rc, want 0):" | |
| echo "$out" | sed 's/^/ /' | |
| fail=$((fail + 1)) | |
| fi | |
| done | |
| done | |
| # bad/ -- must match expected/<name>.txt | |
| for f in "$here"/bad/*; do | |
| [ -e "$f" ] || continue | |
| name=$(basename "$f") | |
| expected="$here/expected/$name.txt" | |
| if [ ! -f "$expected" ]; then | |
| echo "FAIL bad: missing $expected" | |
| fail=$((fail + 1)) | |
| continue | |
| fi | |
| mode=$(head -1 "$expected" | sed 's/^# mode=//') | |
| body=$(tail -n +2 "$expected") | |
| out=$(run "$f" "$mode") | |
| rc=$? | |
| # Strip the directory prefix so expected files are portable. | |
| out=$(printf '%s\n' "$out" | sed "s|$here/bad/|bad/|g") | |
| if [ "$out" != "$body" ] || [ "$rc" -ne 1 ]; then | |
| echo "FAIL bad/$mode: $name (exit $rc, want 1):" | |
| bf=$(mktemp) | |
| printf '%s\n' "$body" > "$bf" | |
| printf '%s\n' "$out" | diff -u "$bf" - | sed 's/^/ /' | |
| rm -f "$bf" | |
| fail=$((fail + 1)) | |
| fi | |
| done | |
| if [ "$fail" -eq 0 ]; then | |
| echo "PASS" | |
| exit 0 | |
| fi | |
| echo "FAILED ($fail)" | |
| exit 1 |