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