One test in t1308 expects test-config to fail with exit code 128 due to a parsing error in the config machinery. But test-config might also exit with 128 for any other reason that leads it to call die(). Therefore the test can potentially succeed for the wrong reason. To avoid false positives, let's check test-config's stderr, in addition to the exit code, and make sure that the cause of the error is the one we expect in this test. Moreover, the test was using the auxiliary function check_config, which optionally takes a number to compare with test-config's exit code, and a string to compare with its stdout. Because the function does not check stderr, it can induce improper uses, like the one corrected in this patch. To avoid this, remove the optional expect_code parameter, disallowing tests that expect an error from test-config to use this helper function. There is one error, though, which is printed to stdout despite returning a non-zero code: "value not found" (exit code 1). For this one, let's add another function which properly checks stdout and the code. Helped-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> Signed-off-by: Matheus Tavares <matheus.bernardino@xxxxxx> --- t/t1308-config-set.sh | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh index 3a527e3a84..66c6363080 100755 --- a/t/t1308-config-set.sh +++ b/t/t1308-config-set.sh @@ -7,18 +7,15 @@ test_description='Test git config-set API in different settings' # 'check_config get_* section.key value' verifies that the entry for # section.key is 'value' check_config () { - if test "$1" = expect_code - then - expect_code="$2" && shift && shift - else - expect_code=0 - fi && - op=$1 key=$2 && shift && shift && - if test $# != 0 - then - printf "%s\n" "$@" - fi >expect && - test_expect_code $expect_code test-tool config "$op" "$key" >actual && + test-tool config "$1" "$2" >actual && + shift && shift && + printf "%s\n" "$@" >expect && + test_cmp expect actual +} + +check_not_found () { + test_expect_code 1 test-tool config "$1" "$2" >actual && + echo "Value not found for \"$2\"" >expect && test_cmp expect actual } @@ -108,7 +105,7 @@ test_expect_success 'key with case insensitive section header & variable' ' ' test_expect_success 'find value with misspelled key' ' - check_config expect_code 1 get_value "my.fOo Bar.hi" "Value not found for \"my.fOo Bar.hi\"" + check_not_found get_value "my.fOo Bar.hi" ' test_expect_success 'find value with the highest priority' ' @@ -121,7 +118,7 @@ test_expect_success 'find integer value for a key' ' test_expect_success 'find string value for a key' ' check_config get_string case.baz hask && - check_config expect_code 1 get_string case.ba "Value not found for \"case.ba\"" + check_not_found get_string case.ba ' test_expect_success 'check line error when NULL string is queried' ' @@ -130,7 +127,8 @@ test_expect_success 'check line error when NULL string is queried' ' ' test_expect_success 'find integer if value is non parse-able' ' - check_config expect_code 128 get_int lamb.head + test_expect_code 128 test-tool config get_int lamb.head 2>result && + test_i18ngrep "fatal: bad numeric config value .none. for .lamb\.head." result ' test_expect_success 'find bool value for the entered key' ' -- 2.28.0