#!/bin/sh

# grep tests.
# Copyright 2005 by Rob Landley <rob@landley.net>
# Licensed under GPL v2, see file LICENSE for details.

# AUDIT: 

. testing.sh

# testing "test name" "options" "expected result" "file input" "stdin"
#   file input will be file called "input"
#   test can create a file "actual" instead of writing to stdout

# Test exit status

testing "grep (exit with error)" "grep nonexistent 2> /dev/null ; echo \$?" \
	"1\n" "" ""
testing "grep (exit success)" "grep grep $0 > /dev/null 2>&1 ; echo \$?" "0\n" \
	"" ""
# Test various data sources and destinations

testing "grep (default to stdin)" "grep two" "two\n" "" \
	"one\ntwo\nthree\nthree\nthree\n"
testing "grep - (specify stdin)" "grep two -" "two\n" "" \
	"one\ntwo\nthree\nthree\nthree\n"
testing "grep input (specify file)" "grep two input" "two\n" \
	"one\ntwo\nthree\nthree\nthree\n" ""

# Note that this assumes actual is empty.
testing "grep input actual (two files)" "grep two input actual 2> /dev/null" \
	"input:two\n" "one\ntwo\nthree\nthree\nthree\n" ""

testing "grep - infile (specify stdin and file)" "grep two - input" \
	"(standard input):two\ninput:two\n" "one\ntwo\nthree\n" \
	"one\ntwo\ntoo\nthree\nthree\n"

# Check if we see the correct return value if both stdin and non-existing file
# are given.
testing "grep - nofile (specify stdin and nonexisting file)" \
	"grep two - nonexistent 2> /dev/null ; echo \$?" \
	"(standard input):two\n(standard input):two\n2\n" \
	"" "one\ntwo\ntwo\nthree\nthree\nthree\n"
testing "grep -q - nofile (specify stdin and nonexisting file, no match)" \
	"grep -q nomatch - nonexistent 2> /dev/null ; echo \$?" \
	"2\n" "" "one\ntwo\ntwo\nthree\nthree\nthree\n"
# SUSv3: If the -q option is specified, the exit status shall be zero
#        if an input line is selected, even if an error was detected.
testing "grep -q - nofile (specify stdin and nonexisting file, match)" \
	"grep -q two - nonexistent ; echo \$?" \
	"0\n" "" "one\ntwo\ntwo\nthree\nthree\nthree\n"

# Test various command line options
# -s no error messages
testing "grep -s nofile (nonexisting file, no match)" \
	"grep -s nomatch nonexistent ; echo \$?" "2\n" "" ""
testing "grep -s nofile - (stdin and nonexisting file, match)" \
	"grep -s domatch nonexistent - ; echo \$?" \
	"(standard input):domatch\n2\n" "" "nomatch\ndomatch\nend\n"

# This doesn't match GNU behaviour (Binary file input matches)
# acts like GNU grep -a
testing "grep handles binary files" "grep foo input" "foo\n" "\0foo\n\n" ""
# This doesn't match GNU behaviour (Binary file (standard input) matches)
# acts like GNU grep -a
testing "grep handles binary stdin" "grep foo" "foo\n" "" "\0foo\n\n"

testing "grep matches NUL" "grep . input > /dev/null 2>&1 ; echo \$?" \
	"0\n" "\0\n" ""

# -e regex
testing "grep handles multiple regexps" "grep -e one -e two input ; echo \$?" \
	"one\ntwo\n0\n" "one\ntwo\n" ""

optional FEATURE_GREP_EGREP_ALIAS
testing "grep -E supports extended regexps" "grep -E fo+" "foo\n" "" \
	"b\ar\nfoo\nbaz"
testing "grep is also egrep" "egrep foo" "foo\n" "" "foo\nbar\n"
testing "egrep is not case insensitive" \
	"egrep foo ; [ \$? -ne 0 ] && echo yes" "yes\n" "" "FOO\n"

exit $FAILCOUNT
