Fix function and test for 'trueorfalse'.

The function's comment is written as follow, however the function accepts
other values (ex. "e", "t", "T", "f", "F", etc...).

---
Accepts as False: 0 no No NO false False FALSE
Accepts as True: 1 yes Yes YES true True TRUE
---

Moreover if testval mach True or False, the function exits without resetting
xtrace.

This patch fixes the issue and add test patterns.

Change-Id: Ie48a859476faff22a4dfef466516e2d7d62ef0c0
Closes-bug: #1453687
This commit is contained in:
Mahito OGURA 2015-05-11 18:02:34 +09:00
parent e3fcc54b9b
commit 98f59aafaf
2 changed files with 30 additions and 19 deletions

View File

@ -51,14 +51,16 @@ TRACK_DEPENDS=${TRACK_DEPENDS:-False}
function trueorfalse { function trueorfalse {
local xtrace=$(set +o | grep xtrace) local xtrace=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
local default=$1
local literal=$2
local testval=${!literal:-}
[[ -z "$testval" ]] && { echo "$default"; return; } local default=$1
[[ "0 no No NO false False FALSE" =~ "$testval" ]] && { echo "False"; return; } local testval=${!2:-}
[[ "1 yes Yes YES true True TRUE" =~ "$testval" ]] && { echo "True"; return; }
echo "$default" case "$testval" in
"1" | [yY]es | "YES" | [tT]rue | "TRUE" ) echo "True" ;;
"0" | [nN]o | "NO" | [fF]alse | "FALSE" ) echo "False" ;;
* ) echo "$default" ;;
esac
$xtrace $xtrace
} }

View File

@ -8,27 +8,36 @@ TOP=$(cd $(dirname "$0")/.. && pwd)
source $TOP/functions source $TOP/functions
source $TOP/tests/unittest.sh source $TOP/tests/unittest.sh
function test_truefalse { function test_trueorfalse {
local one=1 local one=1
local captrue=True local captrue=True
local lowtrue=true local lowtrue=true
local abrevtrue=t local uppertrue=TRUE
local capyes=Yes
local lowyes=yes
local upperyes=YES
for default in True False; do
for name in one captrue lowtrue uppertrue capyes lowyes upperyes; do
assert_equal "True" $(trueorfalse $default $name) "\$(trueorfalse $default $name)"
done
done
local zero=0 local zero=0
local capfalse=False local capfalse=False
local lowfalse=false local lowfalse=false
local abrevfalse=f local upperfalse=FALSE
for against in True False; do local capno=No
for name in one captrue lowtrue abrevtrue; do local lowno=no
assert_equal "True" $(trueorfalse $against $name) "\$(trueorfalse $against $name)" local upperno=NO
done
done for default in True False; do
for against in True False; do for name in zero capfalse lowfalse upperfalse capno lowno upperno; do
for name in zero capfalse lowfalse abrevfalse; do assert_equal "False" $(trueorfalse $default $name) "\$(trueorfalse $default $name)"
assert_equal "False" $(trueorfalse $against $name) "\$(trueorfalse $against $name)"
done done
done done
} }
test_truefalse test_trueorfalse
report_results report_results