13aa99676SStefan Eßer#! /bin/sh 23aa99676SStefan Eßer# 33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 43aa99676SStefan Eßer# 510328f8bSStefan Eßer# Copyright (c) 2018-2021 Gavin D. Howard and contributors. 63aa99676SStefan Eßer# 73aa99676SStefan Eßer# Redistribution and use in source and binary forms, with or without 83aa99676SStefan Eßer# modification, are permitted provided that the following conditions are met: 93aa99676SStefan Eßer# 103aa99676SStefan Eßer# * Redistributions of source code must retain the above copyright notice, this 113aa99676SStefan Eßer# list of conditions and the following disclaimer. 123aa99676SStefan Eßer# 133aa99676SStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice, 143aa99676SStefan Eßer# this list of conditions and the following disclaimer in the documentation 153aa99676SStefan Eßer# and/or other materials provided with the distribution. 163aa99676SStefan Eßer# 173aa99676SStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 183aa99676SStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 193aa99676SStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 203aa99676SStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 213aa99676SStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 223aa99676SStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 233aa99676SStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 243aa99676SStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 253aa99676SStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 263aa99676SStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 273aa99676SStefan Eßer# POSSIBILITY OF SUCH DAMAGE. 283aa99676SStefan Eßer# 293aa99676SStefan Eßer 303aa99676SStefan Eßerset -e 313aa99676SStefan Eßer 323aa99676SStefan Eßerscript="$0" 333aa99676SStefan Eßertestdir=$(dirname "$script") 343aa99676SStefan Eßer 353aa99676SStefan Eßer. "$testdir/../functions.sh" 363aa99676SStefan Eßer 373aa99676SStefan Eßerif [ "$#" -lt 1 ]; then 383aa99676SStefan Eßer printf 'usage: %s dir [exe [args...]]\n' "$0" 393aa99676SStefan Eßer printf 'valid dirs are:\n' 403aa99676SStefan Eßer printf '\n' 413aa99676SStefan Eßer cat "$testdir/all.txt" 423aa99676SStefan Eßer printf '\n' 433aa99676SStefan Eßer exit 1 443aa99676SStefan Eßerfi 453aa99676SStefan Eßer 463aa99676SStefan Eßerd="$1" 473aa99676SStefan Eßershift 483aa99676SStefan Eßer 493aa99676SStefan Eßerif [ "$#" -gt 0 ]; then 503aa99676SStefan Eßer exe="$1" 513aa99676SStefan Eßer shift 523aa99676SStefan Eßerelse 533aa99676SStefan Eßer exe="$testdir/../bin/$d" 543aa99676SStefan Eßerfi 553aa99676SStefan Eßer 563aa99676SStefan Eßername="$testdir/$d/read.txt" 573aa99676SStefan Eßerresults="$testdir/$d/read_results.txt" 583aa99676SStefan Eßererrors="$testdir/$d/read_errors.txt" 593aa99676SStefan Eßer 6010328f8bSStefan Eßerout="$testdir/${d}_outputs/read_results.txt" 6110328f8bSStefan Eßeroutdir=$(dirname "$out") 6210328f8bSStefan Eßer 6310328f8bSStefan Eßerif [ ! -d "$outdir" ]; then 6410328f8bSStefan Eßer mkdir -p "$outdir" 6510328f8bSStefan Eßerfi 663aa99676SStefan Eßer 673aa99676SStefan Eßerexebase=$(basename "$exe") 683aa99676SStefan Eßer 693aa99676SStefan Eßerif [ "$d" = "bc" ]; then 703aa99676SStefan Eßer options="-lq" 713aa99676SStefan Eßer halt="halt" 723aa99676SStefan Eßerelse 733aa99676SStefan Eßer options="-x" 743aa99676SStefan Eßer halt="q" 753aa99676SStefan Eßerfi 763aa99676SStefan Eßer 773aa99676SStefan Eßerif [ "$d" = "bc" ]; then 783aa99676SStefan Eßer read_call="read()" 793aa99676SStefan Eßer read_expr="${read_call}\n5+5;" 803aa99676SStefan Eßerelse 813aa99676SStefan Eßer read_call="?" 823aa99676SStefan Eßer read_expr="${read_call}" 833aa99676SStefan Eßerfi 843aa99676SStefan Eßer 853aa99676SStefan Eßerprintf 'Running %s read...' "$d" 863aa99676SStefan Eßer 8710328f8bSStefan Eßerset +e 8810328f8bSStefan Eßer 893aa99676SStefan Eßerwhile read line; do 903aa99676SStefan Eßer 913aa99676SStefan Eßer printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" > "$out" 9210328f8bSStefan Eßer checktest "$d" "$?" 'read' "$results" "$out" 933aa99676SStefan Eßer 943aa99676SStefan Eßerdone < "$name" 953aa99676SStefan Eßer 963aa99676SStefan Eßerprintf 'pass\n' 973aa99676SStefan Eßer 983aa99676SStefan Eßerprintf 'Running %s read errors...' "$d" 993aa99676SStefan Eßer 1003aa99676SStefan Eßerwhile read line; do 1013aa99676SStefan Eßer 1023aa99676SStefan Eßer printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" 2> "$out" > /dev/null 1033aa99676SStefan Eßer err="$?" 1043aa99676SStefan Eßer 10510328f8bSStefan Eßer checkerrtest "$d" "$err" "$line" "$out" "$exebase" 1063aa99676SStefan Eßer 1073aa99676SStefan Eßerdone < "$errors" 1083aa99676SStefan Eßer 1093aa99676SStefan Eßerprintf 'pass\n' 1103aa99676SStefan Eßer 1113aa99676SStefan Eßerprintf 'Running %s empty read...' "$d" 1123aa99676SStefan Eßer 1133aa99676SStefan Eßerread_test=$(printf '%s\n' "$read_call") 1143aa99676SStefan Eßer 1153aa99676SStefan Eßerprintf '%s\n' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null 1163aa99676SStefan Eßererr="$?" 1173aa99676SStefan Eßer 11810328f8bSStefan Eßercheckerrtest "$d" "$err" "$read_test" "$out" "$exebase" 1193aa99676SStefan Eßer 1203aa99676SStefan Eßerprintf 'pass\n' 1213aa99676SStefan Eßer 1223aa99676SStefan Eßerprintf 'Running %s read EOF...' "$d" 1233aa99676SStefan Eßer 1243aa99676SStefan Eßerread_test=$(printf '%s' "$read_call") 1253aa99676SStefan Eßer 1263aa99676SStefan Eßerprintf '%s' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null 1273aa99676SStefan Eßererr="$?" 1283aa99676SStefan Eßer 12910328f8bSStefan Eßercheckerrtest "$d" "$err" "$read_test" "$out" "$exebase" 1303aa99676SStefan Eßer 13110328f8bSStefan Eßerexec printf 'pass\n' 132