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
diff --git a/functions-common b/functions-common
index 4d07c03..6d9a0fa 100644
--- a/functions-common
+++ b/functions-common
@@ -51,14 +51,16 @@
 function trueorfalse {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
-    local default=$1
-    local literal=$2
-    local testval=${!literal:-}
 
-    [[ -z "$testval" ]] && { echo "$default"; return; }
-    [[ "0 no No NO false False FALSE" =~ "$testval" ]] && { echo "False"; return; }
-    [[ "1 yes Yes YES true True TRUE" =~ "$testval" ]] && { echo "True"; return; }
-    echo "$default"
+    local default=$1
+    local testval=${!2:-}
+
+    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
 }
 
diff --git a/tests/test_truefalse.sh b/tests/test_truefalse.sh
index e57948a..ebd9650 100755
--- a/tests/test_truefalse.sh
+++ b/tests/test_truefalse.sh
@@ -8,27 +8,36 @@
 source $TOP/functions
 source $TOP/tests/unittest.sh
 
-function test_truefalse {
+function test_trueorfalse {
     local one=1
     local captrue=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 capfalse=False
     local lowfalse=false
-    local abrevfalse=f
-    for against in True False; do
-        for name in one captrue lowtrue abrevtrue; do
-            assert_equal "True" $(trueorfalse $against $name) "\$(trueorfalse $against $name)"
-        done
-    done
-    for against in True False; do
-        for name in zero capfalse lowfalse abrevfalse; do
-            assert_equal "False" $(trueorfalse $against $name) "\$(trueorfalse $against $name)"
+    local upperfalse=FALSE
+    local capno=No
+    local lowno=no
+    local upperno=NO
+
+    for default in True False; do
+        for name in zero capfalse lowfalse upperfalse capno lowno upperno; do
+            assert_equal "False" $(trueorfalse $default $name) "\$(trueorfalse $default $name)"
         done
     done
 }
 
-test_truefalse
+test_trueorfalse
 
 report_results