xref: /illumos-gate/usr/src/test/util-tests/tests/awk/tests/T.rt (revision f37b3cbb6f67aaea5eec1c335bdc7bf432867d64)
1#!/bin/bash
2
3if [[ -z "$AWK" || -z "$WORKDIR" ]]; then
4    printf '$AWK and $WORKDIR must be set\n' >&2
5    exit 1
6fi
7
8TEMP0=$WORKDIR/test.temp.0
9TEMP1=$WORKDIR/test.temp.1
10TEMP2=$WORKDIR/test.temp.2
11
12RESULT=0
13
14fail() {
15	echo "$1" >&2
16	RESULT=1
17}
18
19echo T.rt: tests for the RT variable
20
21$AWK 'BEGIN { print (RT == "" ? "true" : "false"); }' > $TEMP1
22printf 'true\n' > $TEMP2
23diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "" in BEGIN'
24
25printf 'a\n' > $TEMP0
26$AWK '{ print (RT == "\n" ? "true" : "false"); }' $TEMP0 > $TEMP1
27printf 'true\n' > $TEMP2
28diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "\n"'
29
30printf 'a' > $TEMP0
31$AWK '{ print (RT == "" ? "true" : "false"); }' $TEMP0 > $TEMP1
32printf 'true\n' > $TEMP2
33diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to ""'
34
35$AWK 'BEGIN { "echo hello" | getline; print (RT == "\n" ? "true" : "false"); }' > $TEMP1
36printf 'true\n' > $TEMP2
37diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "\n" (getline)'
38
39$AWK 'BEGIN { "printf a" | getline; print (RT == "" ? "true" : "false"); }' > $TEMP1
40printf 'true\n' > $TEMP2
41diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "" (getline)'
42
43$AWK 'BEGIN { "echo hello" | getline v; print (RT == "\n" ? "true" : "false"); }' > $TEMP1
44printf 'true\n' > $TEMP2
45diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "\n" (getline var)'
46
47$AWK 'BEGIN {
48	RT = "foo";
49	getline < "/etc/passwd";
50	print (RT == "\n" ? "true" : "false");
51}' > $TEMP1
52printf 'true\n' > $TEMP2
53diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "\n" (getline < file)'
54
55$AWK 'BEGIN {
56	RT = "foo";
57	getline v < "/etc/passwd";
58	print (RT == "\n" ? "true" : "false");
59}' > $TEMP1
60printf 'true\n' > $TEMP2
61diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "\n" (getline var < file)'
62
63# Single newline at end
64printf '\n\n\n\n\na\n\na b\na b c d\nq r s t u\n\n\n\n\nv w x y z\n' > $TEMP0
65$AWK 'BEGIN { RS = ""; } { print NF, length(RT); }' $TEMP0 > $TEMP1
66printf '1 2\n11 5\n5 1\n' > $TEMP2
67diff $TEMP1 $TEMP2 || fail 'BAD: T.rt empty RS variable (1 newline at end)'
68
69# Two newlines at end
70printf '\n\n\n\n\na\n\na b\na b c d\nq r s t u\n\n\n\n\nv w x y z\n\n' > $TEMP0
71$AWK 'BEGIN { RS = ""; } { print NF, length(RT); }' $TEMP0 > $TEMP1
72printf '1 2\n11 5\n5 2\n' > $TEMP2
73diff $TEMP1 $TEMP2 || fail 'BAD: T.rt empty RS variable (2 newlines at end)'
74
75# Multiple newlines at end
76printf 'a\n\na b\na b c d\nq r s t u\n\n\n\n\nv w x y z\n\n\n\n' > $TEMP0
77$AWK 'BEGIN { RS = ""; } { print NF, length(RT); }' $TEMP0 > $TEMP1
78printf '1 2\n11 5\n5 4\n' > $TEMP2
79diff $TEMP1 $TEMP2 || fail 'BAD: T.rt empty RS variable (many newlines at end)'
80
81# No newlines at end
82printf 'a\n\na b\na b c d\nq r s t u\n\n\n\n\nv w x y z' > $TEMP0
83$AWK 'BEGIN { RS = ""; } { print NF, length(RT); }' $TEMP0 > $TEMP1
84printf '1 2\n11 5\n5 0\n' > $TEMP2
85diff $TEMP1 $TEMP2 || fail 'BAD: T.rt empty RS variable (no ending newline)'
86
87# Non-newline separators
88
89printf 'a\036' > $TEMP0
90$AWK 'BEGIN { RS="\036" } { print (RT == "\036" ? "true" : "false"), length(RS); }' $TEMP0 > $TEMP1
91printf 'true 1\n' > $TEMP2
92diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "\036" (RS="\036")'
93
94printf 'a' > $TEMP0
95$AWK 'BEGIN { RS="\036" } { print (RT == "" ? "true" : "false"), length(RS); }' $TEMP0 > $TEMP1
96printf 'true 1\n' > $TEMP2
97diff $TEMP1 $TEMP2 || fail 'BAD: T.rt RT is set to "" (RS="\036")'
98
99exit $RESULT
100