#!/bin/bash

#et -x

exit_status=0

for use_odirect in '' "--use-odirect" ""
do
	(echo a; echo b; echo c) > t
	if ! [ "$(./bcgrep $use_odirect --pattern 'b' --filenames ./t)" = "./t: b" ]
	then
		echo "Test 1 failed $use_odirect" 1>&2
		exit_status=1
	fi
	(echo a; echo xybpq; echo c) > t
	if ! [ "$(./bcgrep $use_odirect --pattern 'xybpq' --filenames ./t)" = "./t: xybpq" ]
	then
		echo "Test 2 failed $use_odirect" 1>&2
		exit_status=1
	fi

	(echo a; echo z; echo c) > t
	if ! [ "$(./bcgrep $use_odirect --pattern 'b' --filenames ./t)" = "" ]
	then
		echo "Test 3 failed $use_odirect" 1>&2
		exit_status=1
	fi

	(echo a; echo pqrs; echo c) > t
	if ! [ "$(./bcgrep $use_odirect --pattern '(qr)' --filenames ./t)" = "./t: qr" ]
	then
		echo "Test 4 failed $use_odirect" 1>&2
		exit_status=1
	fi

	(echo apqrsb; echo pqrs; echo c) > t
	if ! [ "$(./bcgrep $use_odirect --invert-match --pattern 'qr' --filenames ./t)" = "./t: c" ]
	then
		echo "Test 4 failed $use_odirect" 1>&2
		exit_status=1
	fi
    
    printf 'abc\0def\0ghi\0' > t
    if ! [ "$(./bcgrep -0 $use_odirect --pattern def --filenames ./t | tr '\0' '\n')" = "./t: def" ]
    then
        echo "Test 5 failed $use_odirect" 1>&2
        exit_status=1
    fi
done

if [ "$exit_status" = 1 ]
then
	echo 'One or more tests failed' 1>&2
else
	echo 'Great, all tests passed' 1>&2
fi
exit "$exit_status"