From: Matthias Kruk Date: Thu, 11 Aug 2022 13:13:44 +0000 (+0900) Subject: test/opt: Add test cases for opt module X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=48acccccd76e065b917044ac91db7045cbc7c011;p=toolbox test/opt: Add test cases for opt module There are currently no test cases, making it difficult to verify automatically if the opt module is implemented correctly, and to detect regressions. This commit adds a set of shellspec test cases for the opt module. --- diff --git a/test/opt_spec.sh b/test/opt_spec.sh new file mode 100644 index 0000000..c4a3ad0 --- /dev/null +++ b/test/opt_spec.sh @@ -0,0 +1,203 @@ +#!/bin/bash + +. toolbox.sh +include "opt" + +Describe "opt_add_arg()" + It "succeeds when adding a valid option" + _test_opt_add_arg_valid() ( + opt_add_arg "o" "opt" + ) + + When call _test_opt_add_arg_valid + The status should equal 0 + End + + It "fails when re-defining an option" + _test_opt_add_arg_redefine() ( + opt_add_arg "h" "help" + ) + + When call _test_opt_add_arg_redefine + The status should equal 1 + The stderr should not equal "" + End +End + +Describe "opt_add_arg() - Attributes" + Parameters + "r" 0 "accepts" + "v" 0 "accepts" + "rv" 0 "accepts" + "vr" 0 "accepts" + "rvrv" 0 "accepts" + "x" 1 "does not accept" + End + + _test_opt_add_arg_attr() ( + local attr="$1" + + opt_add_arg "o" "opt" "$attr" 2>/dev/null + ) + + It "$3 the attribute '$1'" + When call _test_opt_add_arg_attr "$1" + The status should equal "$2" + End +End + +Describe "opt_parse()" + It "fails if a required parameter is missing" + _test_opt_parse_parameter_missing() ( + opt_add_arg "o" "opt" "rv" + opt_parse "-o" + ) + + When call _test_opt_parse_parameter_missing + The status should equal 1 + The stderr should not equal "" + End + + It "succeeds if a required parameter is present" + _test_opt_parse_parameter_present() ( + opt_add_arg "o" "opt" "rv" + opt_parse "-o" "value" + ) + + When call _test_opt_parse_parameter_present + The status should equal 0 + End + + It "fails when a required option is missing" + _test_opt_parse_required_missing() ( + opt_add_arg "o" "opt" "rv" + opt_parse + ) + + When call _test_opt_parse_required_missing + The status should equal 1 + The stderr should not equal "" + End + + It "succeeds when all required options are present" + _test_opt_parse_required_present() ( + opt_add_arg "o" "opt" "rv" + opt_parse "-o" "value" + ) + + When call _test_opt_parse_required_present + The status should equal 0 + End + + It "succeeds if all regex validations succeeded" + _test_opt_parse_regex_pass() ( + opt_add_arg "o" "opt" "rv" "" "" '^[0-9]+$' + opt_parse "-o" "123" + ) + + When call _test_opt_parse_regex_pass + The status should equal 0 + End + + It "fails if a regex validation failed" + _test_opt_parse_regex_fail() ( + opt_add_arg "o" "opt" "rv" "" "" '^[0-9]+$' + opt_parse "-o" "abc" + ) + + When call _test_opt_parse_regex_fail + The status should equal 1 + The stderr should not equal "" + End + + It "succeeds if all callback succeeded" + _test_opt_parse_callback_pass() ( + opt_add_arg "o" "opt" "rv" "" "" "" true + opt_parse "-o" "123" + ) + + When call _test_opt_parse_callback_pass + The status should equal 0 + End + + It "fails if a callback failed" + _test_opt_parse_callback_fail() ( + opt_add_arg "o" "opt" "rv" "" "" "" false + opt_parse "-o" "123" + ) + + When call _test_opt_parse_callback_fail + The status should equal 1 + End + + It "passes on the return value from a failing callback" + _test_opt_parse_callback_retval_helper() { + return 123 + } + + _test_opt_parse_callback_retval() ( + opt_add_arg "o" "opt" "rv" "" "" "" _test_opt_parse_callback_retval_helper + opt_parse "-o" "123" + ) + + When call _test_opt_parse_callback_retval + The status should equal 123 + End +End + +Describe "opt_get()" + It "returns 0 if the requested option has a value" + _test_opt_get_set() ( + opt_add_arg "o" "opt" "rv" "default" + opt_get "opt" + ) + + When call _test_opt_get_set + The status should equal 0 + The stdout should equal "default" + End + + It "returns 1 if an invalid option was passed" + _test_opt_get_invalid() ( + opt_get "invalid" + ) + + When call _test_opt_get_invalid + The status should equal 1 + The stdout should equal "" + End + + It "returns 2 if the requested option does not have a value" + _test_opt_get_unset() ( + opt_add_arg "o" "opt" "rv" + opt_get "opt" + ) + + When call _test_opt_get_unset + The status should equal 2 + The stdout should equal "" + End + + It "returns the default value if no user-defined value is set" + _test_opt_get_default() ( + opt_add_arg "o" "opt" "rv" "default" + opt_get "opt" + ) + + When call _test_opt_get_default + The status should equal 0 + The stdout should equal "default" + End + + It "returns the user-defined value if it was set" + _test_opt_get_user() ( + opt_add_arg "o" "opt" "rv" "default" + opt_parse "-o" "uservalue" + opt_get "opt" + ) + + When call _test_opt_get_user + The status should equal 0 + The stdout should equal "uservalue" + End +End