# HG changeset patch # User Christian Brabandt # Date 1536864305 -7200 # Node ID 00da090af0ab31989d5d831089ce3d760433e192 # Parent 5d8362ca850a2ca993e406e113d20b57b35c3d54 patch 8.1.0386: cannot test with non-default option value commit https://github.com/vim/vim/commit/fe8ef98dd1d0b7d296d7db29b1e2fd1b56b788de Author: Bram Moolenaar Date: Thu Sep 13 20:31:54 2018 +0200 patch 8.1.0386: cannot test with non-default option value Problem: Cannot test with non-default option value. Solution: Add test_option_not_set(). diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2473,6 +2473,7 @@ test_null_job() Job null value for tes test_null_list() List null value for testing test_null_partial() Funcref null value for testing test_null_string() String null value for testing +test_option_not_set({name}) none reset flag indicating option was set test_override({expr}, {val}) none test with Vim internal overrides test_settime({expr}) none set current time for testing timer_info([{id}]) List information about timers @@ -8737,6 +8738,15 @@ test_null_partial() *test_null_parti test_null_string() *test_null_string()* Return a String that is null. Only useful for testing. +test_option_not_set({name}) *test_option_not_set()* + Reset the flag that indicates option {name} was set. Thus it + looks like it still has the default value. Use like this: > + set ambiwidth=double + call test_option_not_set('ambiwidth') +< Now the 'ambiwidth' option behaves like it was never changed, + even though the value is "double". + Only to be used for testing! + test_override({name}, {val}) *test_override()* Overrides certain parts of Vims internal processing to be able to run tests. Only to be used for testing Vim! diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -415,6 +415,7 @@ static void f_tempname(typval_T *argvars static void f_test_alloc_fail(typval_T *argvars, typval_T *rettv); static void f_test_autochdir(typval_T *argvars, typval_T *rettv); static void f_test_feedinput(typval_T *argvars, typval_T *rettv); +static void f_test_option_not_set(typval_T *argvars, typval_T *rettv); static void f_test_override(typval_T *argvars, typval_T *rettv); static void f_test_garbagecollect_now(typval_T *argvars, typval_T *rettv); static void f_test_ignore_error(typval_T *argvars, typval_T *rettv); @@ -922,6 +923,7 @@ static struct fst {"test_null_list", 0, 0, f_test_null_list}, {"test_null_partial", 0, 0, f_test_null_partial}, {"test_null_string", 0, 0, f_test_null_string}, + {"test_option_not_set", 1, 1, f_test_option_not_set}, {"test_override", 2, 2, f_test_override}, {"test_settime", 1, 1, f_test_settime}, #ifdef FEAT_TIMERS @@ -13062,7 +13064,25 @@ f_test_feedinput(typval_T *argvars, typv } /* - * "test_disable({name}, {val})" function + * "test_option_not_set({name})" function + */ + static void +f_test_option_not_set(typval_T *argvars, typval_T *rettv UNUSED) +{ + char_u *name = (char_u *)""; + + if (argvars[0].v_type != VAR_STRING) + EMSG(_(e_invarg)); + else + { + name = get_tv_string_chk(&argvars[0]); + if (reset_option_was_set(name) == FAIL) + EMSG2(_(e_invarg2), name); + } +} + +/* + * "test_override({name}, {val})" function */ static void f_test_override(typval_T *argvars, typval_T *rettv UNUSED) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -12480,13 +12480,17 @@ option_was_set(char_u *name) /* * Reset the flag indicating option "name" was set. */ - void + int reset_option_was_set(char_u *name) { int idx = findoption(name); if (idx >= 0) + { options[idx].flags &= ~P_WAS_SET; + return OK; + } + return FAIL; } /* diff --git a/src/proto/option.pro b/src/proto/option.pro --- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -55,7 +55,7 @@ int shortmess(int x); void vimrc_found(char_u *fname, char_u *envname); void change_compatible(int on); int option_was_set(char_u *name); -void reset_option_was_set(char_u *name); +int reset_option_was_set(char_u *name); int can_bs(int what); void save_file_ff(buf_T *buf); int file_ff_differs(buf_T *buf, int ignore_empty); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -795,6 +795,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 386, +/**/ 385, /**/ 384,