#!/bin/sh

# Copyright 2005 by Rob Landley <rob@landley.net>
# Licensed under GPLv2, see file LICENSE in this source tree.

# AUDIT:

. ./testing.sh

# testing "test name" "commands" "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" ""

# GNU grep 2.5.3 outputs a new line character after the located string
# even if there is no new line character in the input
testing "grep (no newline at EOL)" "grep bug input" "bug\n" "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"

optional EXTRA_COMPAT
testing "grep handles NUL in files" "grep -a foo input" "\0foo\n" "\0foo\n\n" ""
testing "grep handles NUL on stdin" "grep -a foo" "\0foo\n" "" "\0foo\n\n"

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

# -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" ""
testing "grep -F handles -i" "grep -F -i foo input ; echo \$?" \
	"FOO\n0\n" "FOO\n" ""

# -f file/-
testing "grep can read regexps from stdin" "grep -f - input ; echo \$?" \
	"two\nthree\n0\n" "tw\ntwo\nthree\n" "tw.\nthr\n"

# -x (whole line match)
testing "grep -x (full match)" "grep -x foo input ; echo \$?" \
	"foo\n0\n" "foo\n" ""
testing "grep -x (partial match 1)" "grep -x foo input ; echo \$?" \
	"1\n" "foo bar\n" ""
testing "grep -x (partial match 2)" "grep -x foo input ; echo \$?" \
	"1\n" "bar foo\n" ""
testing "grep -x -F (full match)" "grep -x -F foo input ; echo \$?" \
	"foo\n0\n" "foo\n" ""
testing "grep -x -F (partial match 1)" "grep -x -F foo input ; echo \$?" \
	"1\n" "foo bar\n" ""
testing "grep -x -F (partial match 2)" "grep -x -F foo input ; echo \$?" \
	"1\n" "bar foo\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"
testing "grep -E -o prints all matches" \
	"grep -E -o '([[:xdigit:]]{2}[:-]){5}[[:xdigit:]]{2}'" \
	"00:19:3E:00:AA:5E\n00:1D:60:3D:3A:FB\n00:22:43:49:FB:AA\n" \
	"" "00:19:3E:00:AA:5E 00:1D:60:3D:3A:FB 00:22:43:49:FB:AA\n"
SKIP=

testing "grep -o does not loop forever" \
	'grep -o "[^/]*$"' \
	"test\n" \
	"" "/var/test\n"
testing "grep -o does not loop forever on zero-length match" \
	'grep -o "" | head -n1' \
	"" \
	"" "test\n"

testing "grep -f EMPTY_FILE" \
	"grep -f input" \
	"" \
	"" \
	"test\n"

testing "grep -v -f EMPTY_FILE" \
	"grep -v -f input" \
	"test\n" \
	"" \
	"test\n"

testing "grep -Fw matches only words" \
	"grep -Fw foo input" \
	"" \
	"foop\n" \
	""

testing "grep -Fw doesn't stop on 1st mismatch" \
	"grep -Fw foo input" \
	"foop foo\n" \
	"foop foo\n" \
	""

testing "grep -w doesn't stop on 1st mismatch" \
	"grep -w foo input" \
	"foop foo\n" \
	"foop foo\n" \
	""

testing "grep -w ^str doesn't match str not at the beginning" \
	"grep -w ^str input" \
	"" \
	"strstr\n" \
	""

testing "grep -w ^ doesn't hang" \
	"grep -w ^ input" \
	"" \
	"anything\n" \
	""

testing "grep -w word doesn't match wordword" \
	"grep -w word input" \
	"" \
	"wordword\n" \
	""

testing "grep -w word match second word" \
	"grep -w word input" \
	"bword,word\n""wordb,word\n""bwordb,word\n" \
	"bword,word\n""wordb,word\n""bwordb,word\n" \
	""

# -r on symlink to dir should recurse into dir
mkdir -p grep.testdir/foo
echo bar > grep.testdir/foo/file
ln -s foo grep.testdir/symfoo
testing "grep -r on symlink to dir" \
	"grep -r . grep.testdir/symfoo" \
	"grep.testdir/symfoo/file:bar\n" \
	"" ""
rm -Rf grep.testdir

# But -r on dir/symlink_to_dir should not recurse into symlink_to_dir
mkdir -p grep.testdir/foo
echo bar > grep.testdir/foo/file
ln -s foo grep.testdir/symfoo
testing "grep -r on dir/symlink to dir" \
	"grep -r . grep.testdir" \
	"grep.testdir/foo/file:bar\n" \
	"" ""
rm -Rf grep.testdir

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

exit $FAILCOUNT
