blob: 1e9b5bc8203d3412f6fe227baf45f971b2cafe80 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
CAT_BIN=${CAT_BIN:-"$ROOT/out/cat"}
TMPDIR=${TMPDIR:-/tmp}
WORKDIR=$(mktemp -d "$TMPDIR/cat-test.XXXXXX")
trap 'rm -rf "$WORKDIR"' EXIT INT TERM
fail() {
printf '%s\n' "FAIL: $1" >&2
exit 1
}
assert_eq() {
name=$1
expected=$2
actual=$3
if [ "$expected" != "$actual" ]; then
printf '%s\n' "FAIL: $name" >&2
printf '%s\n' "--- expected ---" >&2
printf '%s' "$expected" >&2
printf '\n%s\n' "--- actual ---" >&2
printf '%s' "$actual" >&2
printf '\n' >&2
exit 1
fi
}
[ -x "$CAT_BIN" ] || fail "missing binary: $CAT_BIN"
printf 'hello\nworld\n' > "$WORKDIR/basic.txt"
assert_eq "file passthrough" \
"hello
world" \
"$("$CAT_BIN" "$WORKDIR/basic.txt")"
assert_eq "stdin passthrough" \
"stdin-check" \
"$(printf 'stdin-check\n' | "$CAT_BIN" -)"
printf 'a\n\n\nb\t\177\n' > "$WORKDIR/fixture.txt"
assert_eq "number all lines" \
" 1 a
2
3
4 b " \
"$("$CAT_BIN" -n "$WORKDIR/fixture.txt")"
assert_eq "number nonblank lines" \
" 1 a
2 b " \
"$("$CAT_BIN" -b "$WORKDIR/fixture.txt")"
assert_eq "squeeze blanks" \
"a
b " \
"$("$CAT_BIN" -s "$WORKDIR/fixture.txt")"
assert_eq "show ends" \
"a$
$
$
b ^?$" \
"$("$CAT_BIN" -e "$WORKDIR/fixture.txt")"
assert_eq "show tabs" \
"a
b^I^?" \
"$("$CAT_BIN" -t "$WORKDIR/fixture.txt")"
assert_eq "show nonprinting" \
"a
b ^?" \
"$("$CAT_BIN" -v "$WORKDIR/fixture.txt")"
usage_output=$("$CAT_BIN" -z 2>&1 || true)
case $usage_output in
*"usage: cat [-belnstuv] [file ...]"*) ;;
*) fail "usage on bad flag" ;;
esac
printf '%s\n' "PASS"
|