#!/bin/sh

# 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" ""

testing "grep (no newline at EOL)" "grep bug" "bug" "bug" ""

>empty
testing "grep two files" "grep two input empty 2>/dev/null" \
	"input:two\n" "one\ntwo\nthree\nthree\nthree\n" ""
rm empty

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" ""
testing "grep -F handles multiple expessions" "grep -F -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
