157718be8SEnji Cooper# $NetBSD: t_grep.sh,v 1.2 2013/05/17 15:39:17 christos Exp $ 257718be8SEnji Cooper# 357718be8SEnji Cooper# Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. 457718be8SEnji Cooper# All rights reserved. 557718be8SEnji Cooper# 657718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without 757718be8SEnji Cooper# modification, are permitted provided that the following conditions 857718be8SEnji Cooper# are met: 957718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright 1057718be8SEnji Cooper# notice, this list of conditions and the following disclaimer. 1157718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 1257718be8SEnji Cooper# notice, this list of conditions and the following disclaimer in the 1357718be8SEnji Cooper# documentation and/or other materials provided with the distribution. 1457718be8SEnji Cooper# 1557718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1657718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1757718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1857718be8SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 1957718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2057718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2157718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2257718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2357718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2457718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2557718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 2657718be8SEnji Cooper# 2757718be8SEnji Cooper 2857718be8SEnji Cooperatf_test_case basic 2957718be8SEnji Cooperbasic_head() 3057718be8SEnji Cooper{ 3157718be8SEnji Cooper atf_set "descr" "Checks basic functionality" 3257718be8SEnji Cooper} 3357718be8SEnji Cooperbasic_body() 3457718be8SEnji Cooper{ 3557718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_basic.out" -x \ 3657718be8SEnji Cooper 'jot 10000 | grep 123' 3757718be8SEnji Cooper} 3857718be8SEnji Cooper 3957718be8SEnji Cooperatf_test_case binary 4057718be8SEnji Cooperbinary_head() 4157718be8SEnji Cooper{ 4257718be8SEnji Cooper atf_set "descr" "Checks handling of binary files" 4357718be8SEnji Cooper} 4457718be8SEnji Cooperbinary_body() 4557718be8SEnji Cooper{ 46*1115e598SEnji Cooper # Begin FreeBSD 47*1115e598SEnji Cooper # 48*1115e598SEnji Cooper # Generate stable output instead of depending on uname to match the 49*1115e598SEnji Cooper # branded OS name of /bin/sh 50*1115e598SEnji Cooper if true; then 51*1115e598SEnji Cooper dd if=/dev/zero count=1 of=test.file 52*1115e598SEnji Cooper echo -n "foobar" >> test.file 53*1115e598SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_binary.out" grep foobar test.file 54*1115e598SEnji Cooper else 55*1115e598SEnji Cooper # End FreeBSD 5657718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_binary.out" grep $(uname) /bin/sh 57*1115e598SEnji Cooper # Begin FreeBSD 58*1115e598SEnji Cooper fi 59*1115e598SEnji Cooper # End FreeBSD 6057718be8SEnji Cooper} 6157718be8SEnji Cooper 6257718be8SEnji Cooperatf_test_case recurse 6357718be8SEnji Cooperrecurse_head() 6457718be8SEnji Cooper{ 6557718be8SEnji Cooper atf_set "descr" "Checks recursive searching" 6657718be8SEnji Cooper} 6757718be8SEnji Cooperrecurse_body() 6857718be8SEnji Cooper{ 6957718be8SEnji Cooper mkdir -p recurse/a/f recurse/d 7057718be8SEnji Cooper echo -e "cod\ndover sole\nhaddock\nhalibut\npilchard" > recurse/d/fish 7157718be8SEnji Cooper echo -e "cod\nhaddock\nplaice" > recurse/a/f/favourite-fish 7257718be8SEnji Cooper 7357718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_recurse.out" grep -r haddock recurse 7457718be8SEnji Cooper} 7557718be8SEnji Cooper 7657718be8SEnji Cooperatf_test_case recurse_symlink 7757718be8SEnji Cooperrecurse_symlink_head() 7857718be8SEnji Cooper{ 7957718be8SEnji Cooper atf_set "descr" "Checks symbolic link recursion" 8057718be8SEnji Cooper} 8157718be8SEnji Cooperrecurse_symlink_body() 8257718be8SEnji Cooper{ 8357718be8SEnji Cooper mkdir -p test/c/d 8457718be8SEnji Cooper (cd test/c/d && ln -s ../d .) 8557718be8SEnji Cooper echo "Test string" > test/c/match 8657718be8SEnji Cooper 8757718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_recurse_symlink.out" \ 8857718be8SEnji Cooper -e file:"$(atf_get_srcdir)/d_recurse_symlink.err" \ 8957718be8SEnji Cooper grep -r string test 9057718be8SEnji Cooper} 9157718be8SEnji Cooper 9257718be8SEnji Cooperatf_test_case word_regexps 9357718be8SEnji Cooperword_regexps_head() 9457718be8SEnji Cooper{ 9557718be8SEnji Cooper atf_set "descr" "Checks word-regexps" 9657718be8SEnji Cooper} 9757718be8SEnji Cooperword_regexps_body() 9857718be8SEnji Cooper{ 9957718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_word_regexps.out" \ 10057718be8SEnji Cooper grep -w separated $(atf_get_srcdir)/d_input 10157718be8SEnji Cooper} 10257718be8SEnji Cooper 10357718be8SEnji Cooperatf_test_case begin_end 10457718be8SEnji Cooperbegin_end_head() 10557718be8SEnji Cooper{ 10657718be8SEnji Cooper atf_set "descr" "Checks handling of line beginnings and ends" 10757718be8SEnji Cooper} 10857718be8SEnji Cooperbegin_end_body() 10957718be8SEnji Cooper{ 11057718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_begin_end_a.out" \ 11157718be8SEnji Cooper grep ^Front "$(atf_get_srcdir)/d_input" 11257718be8SEnji Cooper 11357718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_begin_end_b.out" \ 11457718be8SEnji Cooper grep ending$ "$(atf_get_srcdir)/d_input" 11557718be8SEnji Cooper} 11657718be8SEnji Cooper 11757718be8SEnji Cooperatf_test_case ignore_case 11857718be8SEnji Cooperignore_case_head() 11957718be8SEnji Cooper{ 12057718be8SEnji Cooper atf_set "descr" "Checks ignore-case option" 12157718be8SEnji Cooper} 12257718be8SEnji Cooperignore_case_body() 12357718be8SEnji Cooper{ 12457718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_ignore_case.out" \ 12557718be8SEnji Cooper grep -i Upper "$(atf_get_srcdir)/d_input" 12657718be8SEnji Cooper} 12757718be8SEnji Cooper 12857718be8SEnji Cooperatf_test_case invert 12957718be8SEnji Cooperinvert_head() 13057718be8SEnji Cooper{ 13157718be8SEnji Cooper atf_set "descr" "Checks selecting non-matching lines with -v option" 13257718be8SEnji Cooper} 13357718be8SEnji Cooperinvert_body() 13457718be8SEnji Cooper{ 13557718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_invert.out" \ 13657718be8SEnji Cooper grep -v fish "$(atf_get_srcdir)/d_invert.in" 13757718be8SEnji Cooper} 13857718be8SEnji Cooper 13957718be8SEnji Cooperatf_test_case whole_line 14057718be8SEnji Cooperwhole_line_head() 14157718be8SEnji Cooper{ 14257718be8SEnji Cooper atf_set "descr" "Checks whole-line matching with -x flag" 14357718be8SEnji Cooper} 14457718be8SEnji Cooperwhole_line_body() 14557718be8SEnji Cooper{ 14657718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_whole_line.out" \ 14757718be8SEnji Cooper grep -x matchme "$(atf_get_srcdir)/d_input" 14857718be8SEnji Cooper} 14957718be8SEnji Cooper 15057718be8SEnji Cooperatf_test_case negative 15157718be8SEnji Coopernegative_head() 15257718be8SEnji Cooper{ 15357718be8SEnji Cooper atf_set "descr" "Checks handling of files with no matches" 15457718be8SEnji Cooper} 15557718be8SEnji Coopernegative_body() 15657718be8SEnji Cooper{ 15757718be8SEnji Cooper atf_check -s ne:0 grep "not a hope in hell" "$(atf_get_srcdir)/d_input" 15857718be8SEnji Cooper} 15957718be8SEnji Cooper 16057718be8SEnji Cooperatf_test_case context 16157718be8SEnji Coopercontext_head() 16257718be8SEnji Cooper{ 16357718be8SEnji Cooper atf_set "descr" "Checks displaying context with -A, -B and -C flags" 16457718be8SEnji Cooper} 16557718be8SEnji Coopercontext_body() 16657718be8SEnji Cooper{ 16757718be8SEnji Cooper cp $(atf_get_srcdir)/d_context_*.* . 16857718be8SEnji Cooper 16957718be8SEnji Cooper atf_check -o file:d_context_a.out grep -C2 bamboo d_context_a.in 17057718be8SEnji Cooper atf_check -o file:d_context_b.out grep -A3 tilt d_context_a.in 17157718be8SEnji Cooper atf_check -o file:d_context_c.out grep -B4 Whig d_context_a.in 17257718be8SEnji Cooper atf_check -o file:d_context_d.out grep -C1 pig d_context_a.in d_context_b.in 17357718be8SEnji Cooper} 17457718be8SEnji Cooper 17557718be8SEnji Cooperatf_test_case file_exp 17657718be8SEnji Cooperfile_exp_head() 17757718be8SEnji Cooper{ 17857718be8SEnji Cooper atf_set "descr" "Checks reading expressions from file" 17957718be8SEnji Cooper} 18057718be8SEnji Cooperfile_exp_body() 18157718be8SEnji Cooper{ 18257718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_file_exp.out" -x \ 18357718be8SEnji Cooper 'jot 21 -1 1.00 | grep -f '"$(atf_get_srcdir)"'/d_file_exp.in' 18457718be8SEnji Cooper} 18557718be8SEnji Cooper 18657718be8SEnji Cooperatf_test_case egrep 18757718be8SEnji Cooperegrep_head() 18857718be8SEnji Cooper{ 18957718be8SEnji Cooper atf_set "descr" "Checks matching special characters with egrep" 19057718be8SEnji Cooper} 19157718be8SEnji Cooperegrep_body() 19257718be8SEnji Cooper{ 19357718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_egrep.out" \ 19457718be8SEnji Cooper egrep '\?|\*$$' "$(atf_get_srcdir)/d_input" 19557718be8SEnji Cooper} 19657718be8SEnji Cooper 19757718be8SEnji Cooperatf_test_case zgrep 19857718be8SEnji Cooperzgrep_head() 19957718be8SEnji Cooper{ 20057718be8SEnji Cooper atf_set "descr" "Checks handling of gzipped files with zgrep" 20157718be8SEnji Cooper} 20257718be8SEnji Cooperzgrep_body() 20357718be8SEnji Cooper{ 20457718be8SEnji Cooper cp "$(atf_get_srcdir)/d_input" . 20557718be8SEnji Cooper gzip d_input || atf_fail "gzip failed" 20657718be8SEnji Cooper 20757718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_zgrep.out" zgrep -h line d_input.gz 20857718be8SEnji Cooper} 20957718be8SEnji Cooper 21057718be8SEnji Cooperatf_test_case nonexistent 21157718be8SEnji Coopernonexistent_head() 21257718be8SEnji Cooper{ 21357718be8SEnji Cooper atf_set "descr" "Checks that -s flag suppresses error" \ 21457718be8SEnji Cooper "messages about nonexistent files" 21557718be8SEnji Cooper} 21657718be8SEnji Coopernonexistent_body() 21757718be8SEnji Cooper{ 21857718be8SEnji Cooper atf_check -s ne:0 grep -s foobar nonexistent 21957718be8SEnji Cooper} 22057718be8SEnji Cooper 22157718be8SEnji Cooperatf_test_case context2 22257718be8SEnji Coopercontext2_head() 22357718be8SEnji Cooper{ 22457718be8SEnji Cooper atf_set "descr" "Checks displaying context with -z flag" 22557718be8SEnji Cooper} 22657718be8SEnji Coopercontext2_body() 22757718be8SEnji Cooper{ 22857718be8SEnji Cooper printf "haddock\000cod\000plaice\000" > test1 22957718be8SEnji Cooper printf "mackeral\000cod\000crab\000" > test2 23057718be8SEnji Cooper 23157718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_context2_a.out" \ 23257718be8SEnji Cooper grep -z -A1 cod test1 test2 23357718be8SEnji Cooper 23457718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_context2_b.out" \ 23557718be8SEnji Cooper grep -z -B1 cod test1 test2 23657718be8SEnji Cooper 23757718be8SEnji Cooper atf_check -o file:"$(atf_get_srcdir)/d_context2_c.out" \ 23857718be8SEnji Cooper grep -z -C1 cod test1 test2 23957718be8SEnji Cooper} 24057718be8SEnji Cooper 24157718be8SEnji Cooperatf_init_test_cases() 24257718be8SEnji Cooper{ 24357718be8SEnji Cooper atf_add_test_case basic 24457718be8SEnji Cooper atf_add_test_case binary 24557718be8SEnji Cooper atf_add_test_case recurse 24657718be8SEnji Cooper atf_add_test_case recurse_symlink 24757718be8SEnji Cooper atf_add_test_case word_regexps 24857718be8SEnji Cooper atf_add_test_case begin_end 24957718be8SEnji Cooper atf_add_test_case ignore_case 25057718be8SEnji Cooper atf_add_test_case invert 25157718be8SEnji Cooper atf_add_test_case whole_line 25257718be8SEnji Cooper atf_add_test_case negative 25357718be8SEnji Cooper atf_add_test_case context 25457718be8SEnji Cooper atf_add_test_case file_exp 25557718be8SEnji Cooper atf_add_test_case egrep 25657718be8SEnji Cooper atf_add_test_case zgrep 25757718be8SEnji Cooper atf_add_test_case nonexistent 25857718be8SEnji Cooper atf_add_test_case context2 25957718be8SEnji Cooper} 260