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

# -L "show filenames which do not match" has inverted exitcode (if it printed something, it's "success")
testing "grep -L exitcode 0" "grep -L qwe input; echo \$?" \
	"input\n0\n" "asd\n" ""
testing "grep -L exitcode 0 #2" "grep -L qwe input -; echo \$?" \
	"(standard input)\n0\n" "qwe\n" "asd\n"
testing "grep -L exitcode 1" "grep -L qwe input; echo \$?" \
	"1\n" "qwe\n" ""

optional EGREP
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 -vxf EMPTY_FILE" \
	"grep -vxf 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 -F -w w doesn't match ww" \
	"grep -F -w w input" \
	"" \
	"ww\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" \
	""


testing "grep -x -v -e EXP1 -e EXP2 finds nothing if either EXP matches" \
	"grep -x -v -e '.*aa.*' -e 'bb.*'; echo \$?" \
	"1\n" \
	"" \
	"  aa bb cc\n"

testing "grep PATTERN can be a newline-delimited list" \
	'grep -Fv "$(printf "foo\nbar\n")"' \
	"baz\n" \
	"" \
	"foo\nbar\nbaz\n"

testing "grep -e PATTERN can be a newline-delimited list" \
	'grep -Fv -e "$(printf "foo\nbar\n")"' \
	"baz\n" \
	"" \
	"foo\nbar\nbaz\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
