This repository has been archived on 2026-07-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
lines/smoke.sh
T
2026-07-04 20:44:28 +02:00

93 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
# POSIX smoke for the agent-facing lines tool.
# req: cli/001
# req: cli/001.e1
# req: cli/002
# req: robustness/001
# req: robustness/002
# req: robustness/003
# req: robustness/004
# req: robustness/005
# req: verification/001
# req: verification/002
set -eu
bin=${1:-zig-out/bin/lines}
tmp=${TMPDIR:-/tmp}/lines-smoke.$$
trap 'rm -f "$tmp".*' EXIT HUP INT TERM
printf 'a\nb\nc\n' > "$tmp.in"
printf 'b\nc\n' > "$tmp.want"
"$bin" "$tmp.in" 2 3 > "$tmp.out"
cmp "$tmp.want" "$tmp.out"
"$bin" --help > "$tmp.out"
grep 'stdout: selected file lines only' "$tmp.out" >/dev/null
grep 'exit status:' "$tmp.out" >/dev/null
grep 'No writes, no regex, no program language' "$tmp.out" >/dev/null
: > "$tmp.empty"
"$bin" "$tmp.empty" 1 > "$tmp.out"
[ ! -s "$tmp.out" ]
printf 'tail-no-newline' > "$tmp.nonewline"
printf 'tail-no-newline' > "$tmp.want"
"$bin" "$tmp.nonewline" 1 > "$tmp.out"
cmp "$tmp.want" "$tmp.out"
printf 'a\r\nb\r\n' > "$tmp.crlf"
printf 'b\r\n' > "$tmp.want"
"$bin" "$tmp.crlf" 2 > "$tmp.out"
cmp "$tmp.want" "$tmp.out"
awk 'BEGIN { for (i = 0; i < 70000; i++) printf "x"; printf "\nsecond\n" }' > "$tmp.long"
awk 'BEGIN { for (i = 0; i < 70000; i++) printf "x"; printf "\n" }' > "$tmp.want"
"$bin" "$tmp.long" 1 > "$tmp.out"
cmp "$tmp.want" "$tmp.out"
printf 'ok\n\377\000x\n' > "$tmp.binary"
printf '\377\000x\n' > "$tmp.want"
"$bin" "$tmp.binary" 2 > "$tmp.out"
cmp "$tmp.want" "$tmp.out"
"$bin" "$tmp.in" 18446744073709551615 > "$tmp.out"
[ ! -s "$tmp.out" ]
if "$bin" "$tmp.in" 0 > "$tmp.out" 2> "$tmp.err"; then
echo 'smoke: invalid START unexpectedly succeeded' >&2
exit 1
fi
[ ! -s "$tmp.out" ]
grep 'START must be positive' "$tmp.err" >/dev/null
if "$bin" "$tmp.in" 3 2 > "$tmp.out" 2> "$tmp.err"; then
echo 'smoke: END < START unexpectedly succeeded' >&2
exit 1
fi
[ ! -s "$tmp.out" ]
grep 'END must be >= START' "$tmp.err" >/dev/null
if "$bin" "$tmp.missing" 1 > "$tmp.out" 2> "$tmp.err"; then
echo 'smoke: missing file unexpectedly succeeded' >&2
exit 1
fi
[ ! -s "$tmp.out" ]
grep 'lines: .*missing' "$tmp.err" >/dev/null
if [ "$(id -u)" -ne 0 ]; then
printf 'secret\n' > "$tmp.denied"
chmod 000 "$tmp.denied"
if "$bin" "$tmp.denied" 1 > "$tmp.out" 2> "$tmp.err"; then
chmod 600 "$tmp.denied"
echo 'smoke: permission-denied file unexpectedly succeeded' >&2
exit 1
fi
chmod 600 "$tmp.denied"
[ ! -s "$tmp.out" ]
grep 'lines: .*denied' "$tmp.err" >/dev/null
fi
"$bin" "$tmp.long" 1 2 2> "$tmp.err" | head -n 1 > /dev/null
[ ! -s "$tmp.err" ]