#! /bin/sh

# Copyright (C) 2005-2013 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

me=`basename $1 .test`

# Number of the current test.
number=1

# Exit status of this script.
exit=true

# top_buiddir.
cwd=`pwd`

# The exercised program.
prog=$cwd/examples/$me/$me

# cleanup
# -------
cleanup ()
{
  local status=$?
  if test -z "$DEBUG"; then
     cd $cwd
     rm -rf $$.dir
  fi
  exit $status
}
trap cleanup 0 1 2 13 15
mkdir $$.dir
cd $$.dir

# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
# ---------------------------------------------------------
run ()
{
  # Expected exit status.
  local sta_exp=$1
  shift
  # Expected output.
  local out_exp=$1
  shift
  # Effective exit status.
  local sta_eff=0
  $prog "$@" - <input >out_eff || sta_eff=$?
  # Effective output.
  local out_eff=`cat out_eff`
  if test $sta_eff -eq $sta_exp; then
    if test "$out_eff" = "$out_exp"; then
      echo "$me: PASS: $number"
    else
      echo "$me: FAIL: $number (expected output: $out_exp, effective: $out_eff)"
      exit=false
    fi
  else
    echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)"
    exit=false
  fi
  number=`expr $number + 1`
}

# We have cd'd one level deeper.
case $1 in
  /*) . "$1";;
  *)  . "../$1";;
esac

$exit
