singe/thirdparty/arg_parser/testsuite/check.sh
2023-10-23 19:38:18 -05:00

105 lines
3 KiB
Bash
Executable file

#! /bin/sh
# check script for Arg_parser - POSIX/GNU command line argument parser.
# Copyright (C) 2011-2022 Antonio Diaz Diaz.
#
# This script is free software: you have unlimited permission
# to copy, distribute, and modify it.
LC_ALL=C
export LC_ALL
objdir=`pwd`
testdir=`cd "$1" ; pwd`
PARSER="${objdir}"/arg_parser
CPARSER="${objdir}"/carg_parser
framework_failure() { echo "failure in testing framework" ; exit 1 ; }
if [ ! -f "${PARSER}" ] || [ ! -x "${PARSER}" ] ; then
echo "${PARSER}: cannot execute"
exit 1
fi
if [ ! -f "${CPARSER}" ] || [ ! -x "${CPARSER}" ] ; then
echo "${CPARSER}: cannot execute"
exit 1
fi
if [ -d tmp ] ; then rm -rf tmp ; fi
mkdir tmp
cd "${objdir}"/tmp || framework_failure
in="${testdir}"/test.txt
fail=0
test_failed() { fail=1 ; printf "\n$1" ; [ -z "$2" ] || printf "($2)" ; }
printf "testing arg_parser-%s..." "$2"
for i in "${PARSER}" "${CPARSER}" ; do
"$i" -h > /dev/null || test_failed $LINENO "$i"
"$i" --help > /dev/null || test_failed $LINENO "$i"
"$i" -V > /dev/null || test_failed $LINENO "$i"
"$i" --version > /dev/null || test_failed $LINENO "$i"
"$i" -h -v > /dev/null || test_failed $LINENO "$i"
"$i" -v -h > /dev/null || test_failed $LINENO "$i"
"$i" --append -a -b 5 --block 10 -c -carg --casual --casual=arg -o file --orphan --verbose file1 file2 > out ||
test_failed $LINENO "$i"
cmp "${in}" out || test_failed $LINENO "$i"
"$i" file1 file2 --append -ab5 --block=10 -c -carg --casua --casua=arg -ofile --orpha --verbos > out ||
test_failed $LINENO "$i"
cmp "${in}" out || test_failed $LINENO "$i"
"$i" --append -a file1 -b 5 --block 10 -c -carg --casu --casu=arg -o file file2 --orph --verbo > out ||
test_failed $LINENO "$i"
cmp "${in}" out || test_failed $LINENO "$i"
"$i" --append -a -b5 --block=10 -c -carg --cas= file1 --cas=arg -ofile --orp --verb file2 > out ||
test_failed $LINENO "$i"
cmp "${in}" out || test_failed $LINENO "$i"
done
"${PARSER}" --int-min --int-max > out || test_failed $LINENO
"${CPARSER}" --int-min --int-max > cout || test_failed $LINENO
cmp out cout || test_failed $LINENO
printf "\ntesting bad input..."
for i in "${PARSER}" "${CPARSER}" ; do
"$i" --v 2> /dev/null # ambiguous option
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" --ve 2> /dev/null
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" --ver 2> /dev/null
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" --unrecognized 2> /dev/null # unrecognized option
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" -x 2> /dev/null # invalid option
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" -aARG 2> /dev/null # argument not allowed
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" -b 2> /dev/null # argument required
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" --block 2> /dev/null
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" --block= 2> /dev/null
[ $? = 1 ] || test_failed $LINENO "$i"
"$i" -u 2> /dev/null # uncaught option
[ $? = 3 ] || test_failed $LINENO "$i"
done
echo
if [ ${fail} = 0 ] ; then
echo "tests completed successfully."
cd "${objdir}" && rm -r tmp
else
echo "tests failed."
fi
exit ${fail}