#!/bin/sh
######################################################
#
# Test mhparam
#
######################################################

set -e

if test -z "${MH_OBJ_DIR}"; then
    srcdir=`dirname $0`/../..
    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
fi

. "$MH_OBJ_DIR/test/common.sh"

setup_test

expected=$MH_TEST_DIR/$$.expected
expected_err=$MH_TEST_DIR/$$.expected_err
actual=$MH_TEST_DIR/$$.actual
actual_err=$MH_TEST_DIR/$$.actual_err


# check -help
cat >$expected <<EOF
Usage: mhparam [profile-components] [switches]
  switches are:
  -[no]components
  -all
  -version
  -help
EOF
# The exit status is 1 with -help, so temporarily disable -e.
set +e
mhparam -help >$actual 2>&1
set -e
check $expected $actual

# check -version, which returns non-zero exit status
set +e
case `mhparam -v` in
  mhparam\ --*) ;;
  *           ) echo "$0: mhparam -v generated unexpected output" 1>&2
                failed=`expr ${failed:-0} + 1`;;
esac
set -e

# check unknown option
run_test 'mhparam -nonexistent' 'mhparam: -nonexistent unknown'

# check -all
cp $MH_TEST_DIR/Mail/.mh_profile $expected
# -all adds current folder
echo 'Current-Folder: '`folder -f` >>$expected
mhparam -all >$actual
check $expected $actual 'keep first'

# check -all with a component
echo 'mhparam: profile-components ignored with -all' >$expected_err
mhparam -all path >$actual 2>$actual_err
check $expected $actual 'keep first'
check $expected_err $actual_err

# check -all with -components
echo 'mhparam: -components ignored with -all' >$expected_err
mhparam -all -components >$actual 2>$actual_err
check $expected $actual
check $expected_err $actual_err

# check one component
run_test 'mhparam path' "$MH_TEST_DIR/Mail"

# check more than one component, which enables -component
echo 'AliasFile: aliases' >>"$MH_TEST_DIR/Mail/.mh_profile"
run_test 'mhparam path AliasFile' "path: $MH_TEST_DIR/Mail
AliasFile: aliases"

# check each component in procs array in uip/mhparam.c
# The tests don't override these, so they're default or configured values.
# Note that cat is hardcoded here because the testsuite uses it for moreproc.
cat >$expected <<EOF
context
.mh_sequences
$bindir/mhbuild
$MH_INST_DIR$bindir/refile
700
$bindir/inc
$auxexecdir/install-mh
$pagerpath
$bindir/mhmail
$MH_INST_DIR$auxexecdir/mhl
cat
600
$bindir/msh
$bindir/packf
$MH_INST_DIR$auxexecdir/post
$bindir/send
$bindir/mhshow
$MH_INST_DIR$auxexecdir/mhl
nmh-`cat ${srcdir}/VERSION`
$bindir/msh
$bindir/whatnow
$bindir/whom
$sysconfdir
$auxexecdir
EOF

mhparam -nocomponent \
context \
mh-sequences \
buildmimeproc \
fileproc \
foldprot \
incproc \
installproc \
lproc \
mailproc \
mhlproc \
moreproc \
msgprot \
mshproc \
packproc \
postproc \
sendproc \
showmimeproc \
showproc \
version \
vmhproc \
whatnowproc \
whomproc \
etcdir \
libdir >$actual 2>&1

check $expected $actual

#### This exits with non-zero status, so let run_test squash that:
run_test 'mhparam faceproc formatproc rmmproc' ''

#### Test sbackup separately because it's only passed as a -D compile option.
case `mhparam sbackup` in
  ,|\#) ;;
  *   ) echo mhparam sbackup failed
        failed=`expr ${failed:-0} + 1` ;;
esac

# check -component
run_test 'mhparam -component Path' "Path: $MH_TEST_DIR/Mail"

# check -component, note that component name of argument is echoed exactly
run_test 'mhparam -component path' "path: $MH_TEST_DIR/Mail"
run_test 'mhparam -component PATH' "PATH: $MH_TEST_DIR/Mail"

# check -nocomponent
run_test 'mhparam -component -nocomponent path' "$MH_TEST_DIR/Mail"
run_test 'mhparam -nocomponent path AliasFile' "$MH_TEST_DIR/Mail
aliases"

# check nonexistent component
run_test 'mhparam nonexistent' ''

# check that return status counts nonexistent components
set +e
mhparam path context nonexistent1 nonexistent2 nonexistent3 >/dev/null
run_test "echo $?" 3
set -e

# mhparam -debug (undocumented)
# Some of its output depends on configure options, so don't bother to
# check for correctness here.
mhparam -debug >/dev/null

exit $failed
