#!/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/.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/.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