vim-patch:9.0.1507: assert message is confusing with boolean result

Problem:    Assert message is confusing with boolean result.  assert_inrange()
            replaces message instead of adding it.
Solution:   Don't put quotes around expected boolean value.  Append message
            for assert_inrange(). (closes vim/vim#12342, closes vim/vim#12341)

53f5e51628

Move assert_type_T to testing.c and remove ASSERT_INRANGE.
This commit is contained in:
zeertzjq
2023-05-05 12:59:43 +08:00
parent 49c3eb01ab
commit c11417b3d7
3 changed files with 27 additions and 33 deletions

View File

@@ -229,16 +229,6 @@ typedef struct {
Callback callback; Callback callback;
} timer_T; } timer_T;
/// Type of assert_* check being performed
typedef enum {
ASSERT_EQUAL,
ASSERT_NOTEQUAL,
ASSERT_MATCH,
ASSERT_NOTMATCH,
ASSERT_INRANGE,
ASSERT_OTHER,
} assert_type_T;
/// types for expressions. /// types for expressions.
typedef enum { typedef enum {
EXPR_UNKNOWN = 0, EXPR_UNKNOWN = 0,

View File

@@ -30,6 +30,16 @@
#include "nvim/types.h" #include "nvim/types.h"
#include "nvim/vim.h" #include "nvim/vim.h"
/// Type of assert_* check being performed
typedef enum {
ASSERT_EQUAL,
ASSERT_NOTEQUAL,
ASSERT_MATCH,
ASSERT_NOTMATCH,
ASSERT_FAILS,
ASSERT_OTHER,
} assert_type_T;
#ifdef INCLUDE_GENERATED_DECLARATIONS #ifdef INCLUDE_GENERATED_DECLARATIONS
# include "testing.c.generated.h" # include "testing.c.generated.h"
#endif #endif
@@ -220,11 +230,11 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, const char *e
ga_concat_shorten_esc(gap, tofree); ga_concat_shorten_esc(gap, tofree);
xfree(tofree); xfree(tofree);
} else { } else {
if (atype != ASSERT_INRANGE) { if (atype == ASSERT_FAILS) {
ga_concat(gap, "'"); ga_concat(gap, "'");
} }
ga_concat_shorten_esc(gap, exp_str); ga_concat_shorten_esc(gap, exp_str);
if (atype != ASSERT_INRANGE) { if (atype == ASSERT_FAILS) {
ga_concat(gap, "'"); ga_concat(gap, "'");
} }
} }
@@ -622,7 +632,7 @@ void f_assert_fails(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
actual_tv.vval.v_string = actual; actual_tv.vval.v_string = actual;
} }
fill_assert_error(&ga, &argvars[2], expected_str, fill_assert_error(&ga, &argvars[2], expected_str,
&argvars[error_found_index], &actual_tv, ASSERT_OTHER); &argvars[error_found_index], &actual_tv, ASSERT_FAILS);
ga_concat(&ga, ": "); ga_concat(&ga, ": ");
assert_append_cmd_or_arg(&ga, argvars, cmd); assert_append_cmd_or_arg(&ga, argvars, cmd);
assert_error(&ga); assert_error(&ga);
@@ -672,16 +682,9 @@ static int assert_inrange(typval_T *argvars)
if (factual < flower || factual > fupper) { if (factual < flower || factual > fupper) {
garray_T ga; garray_T ga;
prepare_assert_error(&ga); prepare_assert_error(&ga);
if (argvars[3].v_type != VAR_UNKNOWN) { char expected_str[200];
char *const tofree = encode_tv2string(&argvars[3], NULL); vim_snprintf(expected_str, sizeof(expected_str), "range %g - %g,", flower, fupper);
ga_concat(&ga, tofree); fill_assert_error(&ga, &argvars[3], expected_str, NULL, &argvars[2], ASSERT_OTHER);
xfree(tofree);
} else {
char msg[80];
vim_snprintf(msg, sizeof(msg), "Expected range %g - %g, but got %g",
flower, fupper, factual);
ga_concat(&ga, msg);
}
assert_error(&ga); assert_error(&ga);
ga_clear(&ga); ga_clear(&ga);
return 1; return 1;
@@ -697,13 +700,11 @@ static int assert_inrange(typval_T *argvars)
if (actual < lower || actual > upper) { if (actual < lower || actual > upper) {
garray_T ga; garray_T ga;
prepare_assert_error(&ga); prepare_assert_error(&ga);
char expected_str[200];
char msg[55]; vim_snprintf(expected_str, sizeof(expected_str),
vim_snprintf(msg, sizeof(msg),
"range %" PRIdVARNUMBER " - %" PRIdVARNUMBER ",", "range %" PRIdVARNUMBER " - %" PRIdVARNUMBER ",",
lower, upper); // -V576 lower, upper); // -V576
fill_assert_error(&ga, &argvars[3], msg, NULL, &argvars[2], fill_assert_error(&ga, &argvars[3], expected_str, NULL, &argvars[2], ASSERT_OTHER);
ASSERT_INRANGE);
assert_error(&ga); assert_error(&ga);
ga_clear(&ga); ga_clear(&ga);
return 1; return 1;

View File

@@ -9,11 +9,11 @@ func Test_assert_false()
call assert_equal(0, v:false->assert_false()) call assert_equal(0, v:false->assert_false())
call assert_equal(1, assert_false(123)) call assert_equal(1, assert_false(123))
call assert_match("Expected 'False' but got 123", v:errors[0]) call assert_match("Expected False but got 123", v:errors[0])
call remove(v:errors, 0) call remove(v:errors, 0)
call assert_equal(1, 123->assert_false()) call assert_equal(1, 123->assert_false())
call assert_match("Expected 'False' but got 123", v:errors[0]) call assert_match("Expected False but got 123", v:errors[0])
call remove(v:errors, 0) call remove(v:errors, 0)
endfunc endfunc
@@ -24,11 +24,11 @@ func Test_assert_true()
call assert_equal(0, v:true->assert_true()) call assert_equal(0, v:true->assert_true())
call assert_equal(1, assert_true(0)) call assert_equal(1, assert_true(0))
call assert_match("Expected 'True' but got 0", v:errors[0]) call assert_match("Expected True but got 0", v:errors[0])
call remove(v:errors, 0) call remove(v:errors, 0)
call assert_equal(1, 0->assert_true()) call assert_equal(1, 0->assert_true())
call assert_match("Expected 'True' but got 0", v:errors[0]) call assert_match("Expected True but got 0", v:errors[0])
call remove(v:errors, 0) call remove(v:errors, 0)
endfunc endfunc
@@ -405,8 +405,11 @@ func Test_assert_inrange()
call remove(v:errors, 0) call remove(v:errors, 0)
" Use a custom message " Use a custom message
call assert_equal(1, assert_inrange(5, 7, 8, "Higher"))
call assert_match("Higher: Expected range 5 - 7, but got 8", v:errors[0])
call remove(v:errors, 0)
call assert_equal(1, assert_inrange(5, 7, 8.0, "Higher")) call assert_equal(1, assert_inrange(5, 7, 8.0, "Higher"))
call assert_match("Higher", v:errors[0]) call assert_match("Higher: Expected range 5.0 - 7.0, but got 8.0", v:errors[0])
call remove(v:errors, 0) call remove(v:errors, 0)
" Invalid arguments " Invalid arguments