diff options
author | James McCoy <jamessan@jamessan.com> | 2016-07-08 14:09:10 -0400 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2016-07-23 20:42:46 -0400 |
commit | 452707e0b0bb6927350d2a68485a5453c214610b (patch) | |
tree | 8828900cc312e1e6bd2b1f53e4ed92dc30edd79f /src | |
parent | f1d912c584c10f92fe0710e3a907c3d519fbe7d8 (diff) | |
download | rneovim-452707e0b0bb6927350d2a68485a5453c214610b.tar.gz rneovim-452707e0b0bb6927350d2a68485a5453c214610b.tar.bz2 rneovim-452707e0b0bb6927350d2a68485a5453c214610b.zip |
vim-patch:7.4.1703
Problem: Can't assert for not equal and not matching.
Solution: Add assert_notmatch() and assert_notequal().
https://github.com/vim/vim/commit/b50e5f56861deb867478997397f7c784a7043233
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 57 | ||||
-rw-r--r-- | src/nvim/eval_defs.h | 10 | ||||
-rw-r--r-- | src/nvim/version.c | 1 |
3 files changed, 54 insertions, 14 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 967485af1a..4374d66e4b 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -6707,6 +6707,8 @@ static struct fst { { "assert_fails", 1, 2, f_assert_fails }, { "assert_false", 1, 2, f_assert_false }, { "assert_match", 2, 3, f_assert_match }, + { "assert_notequal", 2, 3, f_assert_notequal }, + { "assert_notmatch", 2, 3, f_assert_notmatch }, { "assert_true", 1, 2, f_assert_true }, { "atan", 1, 1, f_atan }, { "atan2", 2, 2, f_atan2 }, @@ -7616,7 +7618,7 @@ static void prepare_assert_error(garray_T *gap) // Fill "gap" with information about an assert error. static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, char_u *exp_str, typval_T *exp_tv, - typval_T *got_tv, bool is_match) + typval_T *got_tv, assert_type_T atype) { char_u *tofree; @@ -7625,7 +7627,7 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, ga_concat(gap, tofree); xfree(tofree); } else { - if (is_match) { + if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH) { ga_concat(gap, (char_u *)"Pattern "); } else { ga_concat(gap, (char_u *)"Expected "); @@ -7638,8 +7640,12 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, ga_concat(gap, exp_str); } tofree = (char_u *) encode_tv2string(got_tv, NULL); - if (is_match) { + if (atype == ASSERT_MATCH) { ga_concat(gap, (char_u *)" does not match "); + } else if (atype == ASSERT_NOTMATCH) { + ga_concat(gap, (char_u *)" does match "); + } else if (atype == ASSERT_NOTEQUAL) { + ga_concat(gap, (char_u *)" differs from "); } else { ga_concat(gap, (char_u *)" but got "); } @@ -7661,20 +7667,32 @@ static void assert_error(garray_T *gap) gap->ga_data, gap->ga_len); } -// "assert_equal(expected, actual[, msg])" function -static void f_assert_equal(typval_T *argvars, typval_T *rettv) +static void assert_equal_common(typval_T *argvars, assert_type_T atype) { garray_T ga; - if (!tv_equal(&argvars[0], &argvars[1], false, false)) { + if (tv_equal(&argvars[0], &argvars[1], false, false) + != (atype == ASSERT_EQUAL)) { prepare_assert_error(&ga); fill_assert_error(&ga, &argvars[2], NULL, - &argvars[0], &argvars[1], false); + &argvars[0], &argvars[1], atype); assert_error(&ga); ga_clear(&ga); } } +// "assert_equal(expected, actual[, msg])" function +static void f_assert_equal(typval_T *argvars, typval_T *rettv) +{ + assert_equal_common(argvars, ASSERT_EQUAL); +} + +// "assert_notequal(expected, actual[, msg])" function +static void f_assert_notequal(typval_T *argvars, typval_T *rettv) +{ + assert_equal_common(argvars, ASSERT_NOTEQUAL); +} + /// "assert_exception(string[, msg])" function static void f_assert_exception(typval_T *argvars, typval_T *rettv) { @@ -7690,7 +7708,7 @@ static void f_assert_exception(typval_T *argvars, typval_T *rettv) && strstr((char *)vimvars[VV_EXCEPTION].vv_str, error) == NULL) { prepare_assert_error(&ga); fill_assert_error(&ga, &argvars[1], NULL, &argvars[0], - &vimvars[VV_EXCEPTION].vv_tv, false); + &vimvars[VV_EXCEPTION].vv_tv, ASSERT_OTHER); assert_error(&ga); ga_clear(&ga); } @@ -7720,7 +7738,7 @@ static void f_assert_fails(typval_T *argvars, typval_T *rettv) || strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL) { prepare_assert_error(&ga); fill_assert_error(&ga, &argvars[2], NULL, &argvars[1], - &vimvars[VV_ERRMSG].vv_tv, false); + &vimvars[VV_ERRMSG].vv_tv, ASSERT_OTHER); assert_error(&ga); ga_clear(&ga); } @@ -7750,7 +7768,7 @@ static void assert_bool(typval_T *argvars, bool is_true) prepare_assert_error(&ga); fill_assert_error(&ga, &argvars[1], (char_u *)(is_true ? "True" : "False"), - NULL, &argvars[0], false); + NULL, &argvars[0], ASSERT_OTHER); assert_error(&ga); ga_clear(&ga); } @@ -7762,8 +7780,7 @@ static void f_assert_false(typval_T *argvars, typval_T *rettv) assert_bool(argvars, false); } -/// "assert_match(pattern, actual[, msg])" function -static void f_assert_match(typval_T *argvars, typval_T *rettv) +static void assert_match_common(typval_T *argvars, assert_type_T atype) { char_u buf1[NUMBUFLEN]; char_u buf2[NUMBUFLEN]; @@ -7772,15 +7789,27 @@ static void f_assert_match(typval_T *argvars, typval_T *rettv) if (pat == NULL || text == NULL) { EMSG(_(e_invarg)); - } else if (!pattern_match(pat, text, false)) { + } else if (pattern_match(pat, text, false) != (atype == ASSERT_MATCH)) { garray_T ga; prepare_assert_error(&ga); - fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1], true); + fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1], atype); assert_error(&ga); ga_clear(&ga); } } +/// "assert_match(pattern, actual[, msg])" function +static void f_assert_match(typval_T *argvars, typval_T *rettv) +{ + assert_match_common(argvars, ASSERT_MATCH); +} + +/// "assert_notmatch(pattern, actual[, msg])" function +static void f_assert_notmatch(typval_T *argvars, typval_T *rettv) +{ + assert_match_common(argvars, ASSERT_NOTMATCH); +} + // "assert_true(actual[, msg])" function static void f_assert_true(typval_T *argvars, typval_T *rettv) { diff --git a/src/nvim/eval_defs.h b/src/nvim/eval_defs.h index d5c9b2c1ec..884c987f10 100644 --- a/src/nvim/eval_defs.h +++ b/src/nvim/eval_defs.h @@ -162,4 +162,14 @@ typedef struct list_stack_S { /// Convert a hashitem pointer to a dictitem pointer #define HI2DI(hi) HIKEY2DI((hi)->hi_key) +/// Type of assert_* check being performed +typedef enum +{ + ASSERT_EQUAL, + ASSERT_NOTEQUAL, + ASSERT_MATCH, + ASSERT_NOTMATCH, + ASSERT_OTHER, +} assert_type_T; + #endif // NVIM_EVAL_DEFS_H diff --git a/src/nvim/version.c b/src/nvim/version.c index 16fdb5f09f..921491db75 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -90,6 +90,7 @@ static int included_patches[] = { 1728, 1716, 1712, + 1703, 1695, 1682, 1663, |