1#!/bin/sh
2
3tmpfile=/tmp/test_reference_output$$.txt
4
5cleanup()
6{
7    if [ -f "${tmpfile}" ]; then
8	echo removing "${tmpfile}"
9	rm -f "${tmpfile}"
10    fi
11    exit 1
12}
13
14trap cleanup 1 2 3 15
15
16run_program()
17{
18    program="${1}"
19    filter="${2}"
20    if [ "${filter}" = "" ]; then
21	${program}
22    else
23	${program} | ${filter}
24    fi
25}
26
27usage()
28{
29    echo "usage: $0 ( create | test ) <program> <reference_file> [ <filter> ]"
30    exit 1
31}
32
33command="${1}"
34program="${2}"
35ref_file="${3}"
36filter="${4}"
37
38if [ "${ref_file}" = "" ]; then
39    usage "${0}"
40fi
41
42if [ "${program}" = "" ]; then
43    usage "${0}"
44fi
45
46if [ ! -f "${program}" ]; then
47    echo "program '${program}' doesn't exit"
48    exit 1
49fi
50if [ ! -x "${program}" ]; then
51    program="sh ${program}"
52fi
53# echo "The program is ${program}"
54
55if [ ! "${filter}" = "" ]; then
56    if [ ! -f "${filter}" ]; then
57	echo "filter '${filter}' doesn't exit"
58	exit 1
59    fi
60    if [ ! -x "${filter}" ]; then
61	filter="sh ${filter}"
62    fi
63#    echo "The filter is ${filter}"
64else
65    echo no filter
66fi
67
68if [ "${command}" = "create" ]; then
69    run_program "${program}" "${filter}" > "${ref_file}"
70elif [ "${command}" = "test" ]; then
71    if [ ! -f "${ref_file}" ]; then
72	echo "reference file '${ref_file}' doesn't exist"
73	exit 1
74    fi
75    run_program "${program}" "${filter}" > "${tmpfile}"
76    cmp "${tmpfile}" "${ref_file}"
77    if [ ! $? -eq 0 ]; then
78	echo FAILURE
79	diff "${tmpfile}" "${ref_file}"
80	exit 1
81    fi
82    echo SUCCESS
83else
84    usage "${0}"
85fi
86
87exit 0
88