From b69049da7b0083b84c51cf8d2c9f1ee11403672f Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Tue, 9 Oct 2007 17:12:45 +0200 Subject: Move the help-version test into misc/. * tests/help-version: Move to... * tests/misc/help-version: ...here. Source test-lib.sh, as usual. Use $abs_top_builddir, rather than ".." and "../..". --- tests/misc/help-version | 220 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100755 tests/misc/help-version (limited to 'tests/misc/help-version') diff --git a/tests/misc/help-version b/tests/misc/help-version new file mode 100755 index 000000000..d2eb04db5 --- /dev/null +++ b/tests/misc/help-version @@ -0,0 +1,220 @@ +#! /bin/sh +# Make sure all these programs work properly +# when invoked with --help or --version. + +# Copyright (C) 2000-2007 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +test "$VERBOSE" = yes && set -x + +# Ensure that $SHELL is set to *some* value and exported. +# This is required for dircolors, which would fail e.g., when +# invoked via debuild (which removes SHELL from the environment). +test "x$SHELL" = x && SHELL=/bin/sh +export SHELL + +. $srcdir/../envvar-check +. $srcdir/../test-lib.sh + +expected_failure_status_nohup=127 +expected_failure_status_printenv=2 +expected_failure_status_tty=3 +expected_failure_status_sort=2 +expected_failure_status_expr=3 +expected_failure_status_lbracket=2 +expected_failure_status_dir=2 +expected_failure_status_ls=2 +expected_failure_status_vdir=2 + +case "$built_programs" in + *groups*) + if test -w /dev/full && test -c /dev/full \ + && echo > /dev/full 2>/dev/null; then + cat 1>&2 <<\EOF +************************************************ +WARNING: On this system, the built-in echo function of /bin/sh +does not report failure when writing to a full device. +To demonstrate, run this command: + + /bin/sh -c 'echo hello > /dev/full; echo status=$?' + +Notice that the failing echo leaves its exit status set to zero +and does not produce a diagnostic. + +That bug in /bin/sh would cause the test of the groups +scripts to fail, so it is being removed from the list of +programs checked by this test. +************************************************ +EOF + built_programs=`echo $built_programs | tr ' ' '\n' | grep -v '^groups$'` + fi + ;; +esac + +fail=0 + +for lang in C fr da; do + for i in $built_programs; do + + # Skip `test'; it doesn't accept --help or --version. + test $i = test && continue; + test $i = chcon && continue; + test $i = runcon && continue; + + # false fails even when invoked with --help or --version. + if test $i = false; then + env LC_MESSAGES=$lang $abs_top_builddir/src/$i --help \ + >/dev/null && fail=1 + env LC_MESSAGES=$lang $abs_top_builddir/src/$i --version \ + >/dev/null && fail=1 + continue + fi + + # The just-built install executable is always named `ginstall'. + test $i = install && i=ginstall + + # Make sure they exit successfully, under normal conditions. + $abs_top_builddir/src/$i --help > h-$i || fail=1 + $abs_top_builddir/src/$i --version >/dev/null || fail=1 + + # Make sure they mention the bug-reporting address in --help output. + grep "$PACKAGE_BUGREPORT" h-$i > /dev/null || fail=1 + rm -f h-$i + + # Make sure they fail upon `disk full' error. + if test -w /dev/full && test -c /dev/full; then + $abs_top_builddir/src/$i --help >/dev/full 2>/dev/null && fail=1 + $abs_top_builddir/src/$i --version >/dev/full 2>/dev/null && fail=1 + status=$? + test $i = [ && prog=lbracket || prog=$i + eval "expected=\$expected_failure_status_$prog" + test x$expected = x && expected=1 + if test $status = $expected; then + : # ok + else + fail=1 + echo "*** $i: bad exit status \`$status' (expected $expected)," 1>&2 + echo " with --help or --version output redirected to /dev/full" 1>&2 + fi + fi + done +done + +tmp=tmp-$$ +tmp_in=in-$$ +tmp_in2=in2-$$ +tmp_dir=dir-$$ +tmp_out=out-$$ +mkdir $tmp || fail=1 +cd $tmp || fail=1 + +comm_args="$tmp_in $tmp_in" +csplit_args="$tmp_in //" +cut_args='-f 1' +join_args="$tmp_in $tmp_in" +tr_args='a a' + +chmod_args="a+x $tmp_in" +# Punt on these. +chgrp_args=--version +chown_args=--version +mkfifo_args=--version +mknod_args=--version +# Punt on uptime, since it fails (e.g., failing to get boot time) +# on some systems, and we shouldn't let that stop `make check'. +uptime_args=--version + +cmp_args="$tmp_in $tmp_in2" + +# Tell dd not to print the line with transfer rate and total. +# The transfer rate would vary between runs. +dd_args=status=noxfer + +diff_args="$tmp_in $tmp_in2" +sdiff_args="$tmp_in $tmp_in2" +diff3_args="$tmp_in $tmp_in2 $tmp_in2" +cp_args="$tmp_in $tmp_in2" +ln_args="$tmp_in ln-target" +ginstall_args="$tmp_in $tmp_in2" +mv_args="$tmp_in $tmp_in2" +mkdir_args=$tmp_dir/subdir +rmdir_args=$tmp_dir +rm_args=$tmp_in +shred_args=$tmp_in +touch_args=$tmp_in2 + +basename_args=$tmp_in +dirname_args=$tmp_in +expr_args=foo + +# Punt, in case GNU `id' hasn't been installed yet. +groups_args=--version + +pathchk_args=$tmp_in +yes_args=--version +logname_args=--version +nohup_args=--version +printf_args=foo +seq_args=10 +sleep_args=0 +su_args=--version + +# I'd rather not run sync, since it spins up disks that I've +# deliberately caused to spin down (but not unmounted). +sync_args=--version + +test_args=foo + +# This is necessary in the unusual event that there is +# no valid entry in /etc/mtab. +df_args=/ + +# This is necessary in the unusual event that getpwuid (getuid ()) fails. +id_args=-u + +sleep 10m & +kill_args=$! + +link_args="$tmp_in link-target" +unlink_args=$tmp_in + +ln -s . slink +readlink_args=slink + +stat_args=$tmp_in +unlink_args=$tmp_in +lbracket_args=": ]" + +for i in $built_programs; do + # Skip these. + case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac + + rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out + echo > $tmp_in + echo > $tmp_in2 + mkdir $tmp_dir + # echo ================== $i + test $i = [ && prog=lbracket || prog=$i + eval "args=\$${prog}_args" + if $abs_top_builddir/src/$i $args < $tmp_in > $tmp_out; then + : # ok + else + echo FAIL: $i + fail=1 + fi + rm -rf $tmp_in $tmp_in2 $tmp_out $tmp_dir +done + +exit $fail -- cgit v1.2.3-54-g00ecf