blob: 5e2f899050dc65759d32ab4a388939184b724c11 [file] [log] [blame]
#! /bin/sh
# vim:et:ft=sh:sts=2:sw=2
#
# Copyright 2008 Kate Ward. All Rights Reserved.
# Released under the LGPL (GNU Lesser General Public License)
#
# Author: kate.ward@forestent.com (Kate Ward)
#
# shFlags unit test for the flag definition methods
# load test helpers
. ./shflags_test_helpers
# set shwordsplit for zsh
[ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit
#------------------------------------------------------------------------------
# suite tests
#
testFlagsDefine()
{
# TODO(kward): check for messages on STDERR
# no arguments
_flags_define 2>/dev/null
assertFalse \
'_flags_define() with no arguments should have failed.' \
$?
# one argument
_flags_define arg1 2>/dev/null
assertFalse \
'_flags_define() with only one argument should have failed.' \
$?
# two arguments
_flags_define arg1 arg2 2>/dev/null
assertFalse \
'_flags_define() with only two arguments should have failed.' \
$?
# three arguments
_flags_define arg1 arg2 arg3 2>/dev/null
assertFalse \
'_flags_define() with only three arguments should have failed.' \
$?
# multiple definition -- assumes working boolean definition (tested elsewhere)
_flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool true 'multi def #1' m
_flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool false 'multi def #2' m
rtrn=$?
assertTrue \
'_flags_define() should not overwrite previously defined default.' \
"${FLAGS_multiDefBool:-}"
assertFalse \
'_flags_define() with existing flag name should fail' \
${rtrn}
# TODO(kward): test requirement of enhanced getopt
# invalid type
# TODO(kward): check for message on STDERR
_flags_define invalid arg2 arg3 arg4 >"${stdoutF}" 2>"${stderrF}"
assertFalse \
'_flags_define() with invalid "type" should have failed.' \
$?
assertNotNull 'expected output to STDERR' "`cat ${stderrF}`"
}
testBoolean()
{
# test true defaults
for default in 'true' 't' 0; do
flags_reset
DEFINE_boolean boolVal "${default}" 'my boolean' b
rtrn=$?
assertTrue \
"DEFINE_boolean() call with default of \"${default}\" failed." \
"${FLAGS_boolVal:-}"
assertTrue \
"DEFINE_boolean() call with default of \"${default}\" returned faliure." \
${rtrn}
done
# test false defaults
for default in 'false' 'f' 1; do
flags_reset
DEFINE_boolean boolVal "${default}" 'my boolean' b
rtrn=$?
assertFalse \
"DEFINE_boolean() call with default of \"${default}\" failed." \
"${FLAGS_boolVal:-}"
assertTrue \
"DEFINE_boolean() call with default of \"${default}\" returned faliure." \
${rtrn}
done
# test invalid default
flags_reset
DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}"
assertFalse \
'DEFINE_boolean() call with invalid default did not fail.' \
$?
assertNotNull 'expected output to STDERR' "`cat ${stderrF}`"
}
testFloat()
{
# test valid defaults
for default in -1234.56789 -1.0 0.0 1.0 1234.56789; do
flags_reset
DEFINE_float floatVal ${default} "float: ${default}" f
rtrn=$?
assertSame \
"DEFINE_float() call with valid default failed." \
${default} "${FLAGS_floatVal:-}"
assertTrue \
"DEFINE_float() call with valid default of \"${default}\" returned faliure." \
${rtrn}
done
# test invalid defaults
flags_reset
DEFINE_float floatVal 'invalid' 'invalid float: string' f \
>"${stdoutF}" 2>"${stderrF}"
assertFalse \
'DEFINE_float() call with string value default did not fail.' \
$?
assertErrorMsg
}
testInteger()
{
# test valid defaults
for default in -123456789 -1 0 1 123456789; do
flags_reset
DEFINE_integer intVal ${default} "integer: ${default}" i
rtrn=$?
assertSame \
"DEFINE_integer() call with valid default failed." \
${default} "${FLAGS_intVal:-}"
assertTrue \
"DEFINE_integer() call with valid default of \"${default}\" returned faliure." \
${rtrn}
done
# test invalid defaults
flags_reset
DEFINE_integer intVal 1.234 'invalid integer: float' i \
>"${stdoutF}" 2>"${stderrF}"
assertFalse \
'DEFINE_integer() call with float value default did not fail.' \
$?
assertErrorMsg 'float default'
DEFINE_integer intVal -1.234 'invalid integer: negative float' i \
>"${stdoutF}" 2>"${stderrF}"
assertFalse \
'DEFINE_integer() call with negative float value default did not fail.' \
$?
assertErrorMsg 'negative float default'
DEFINE_integer intVal 'invalid' 'invalid integer: string' i \
>"${stdoutF}" 2>"${stderrF}"
assertFalse \
'DEFINE_integer() call with string value default did not fail.' \
$?
assertErrorMsg 'string default'
}
testString()
{
# test valid defaults
for default in -1234.56789 -1.0 0.0 1.0 1234.56789 valid 'also valid'; do
flags_reset
DEFINE_string strVal "${default}" "string: ${default}" s
rtrn=$?
assertSame \
"DEFINE_string() call with valid default failed." \
"${default}" "${FLAGS_strVal:-}"
assertTrue \
"DEFINE_string() call with valid default of \"${default}\" returned faliure." \
${rtrn}
done
# test "empty" strings
flags_reset
DEFINE_string str '' "string: empty single quotes" s
rtrn=$?
assertSame \
"DEFINE_string() call with valid default failed." \
"" "${FLAGS_str:-}"
}
testShortNameLength()
{
# make sure short names are no longer than a single character
:
}
#------------------------------------------------------------------------------
# suite functions
#
oneTimeSetUp()
{
# load flags
[ -n "${ZSH_VERSION:-}" ] && FLAGS_PARENT=$0
. ${TH_SHFLAGS}
tmpDir="${__shunit_tmpDir}/output"
mkdir "${tmpDir}"
stdoutF="${tmpDir}/stdout"
stderrF="${tmpDir}/stderr"
}
setUp()
{
flags_reset
}
# load and run shUnit2
[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
. ${TH_SHUNIT}