mirror of
https://github.com/neovim/neovim.git
synced 2025-10-17 07:16:09 +00:00
vim-patch:7.4.1992
Problem: Values for true and false can be confusing.
Solution: Update the documentation. Add a test. Make v:true evaluate to
TRUE for a non-zero-arg.
e381d3d5e0
This commit is contained in:
@@ -7715,11 +7715,13 @@ static void emsg_funcname(char *ermsg, char_u *name)
|
||||
*/
|
||||
static int non_zero_arg(typval_T *argvars)
|
||||
{
|
||||
return (argvars[0].v_type == VAR_NUMBER
|
||||
&& argvars[0].vval.v_number != 0)
|
||||
|| (argvars[0].v_type == VAR_STRING
|
||||
&& argvars[0].vval.v_string != NULL
|
||||
&& *argvars[0].vval.v_string != NUL);
|
||||
return ((argvars[0].v_type == VAR_NUMBER
|
||||
&& argvars[0].vval.v_number != 0)
|
||||
|| (argvars[0].v_type == VAR_SPECIAL
|
||||
&& argvars[0].vval.v_special == kSpecialVarTrue)
|
||||
|| (argvars[0].v_type == VAR_STRING
|
||||
&& argvars[0].vval.v_string != NULL
|
||||
&& *argvars[0].vval.v_string != NUL));
|
||||
}
|
||||
|
||||
/*********************************************
|
||||
|
@@ -27,5 +27,6 @@ source test_tabline.vim
|
||||
source test_tabpage.vim
|
||||
source test_tagcase.vim
|
||||
source test_tagjump.vim
|
||||
source test_true_false.vim
|
||||
source test_unlet.vim
|
||||
source test_window_cmd.vim
|
||||
|
125
src/nvim/testdir/test_true_false.vim
Normal file
125
src/nvim/testdir/test_true_false.vim
Normal file
@@ -0,0 +1,125 @@
|
||||
" Test behavior of boolean-like values.
|
||||
|
||||
" Test what is explained at ":help TRUE" and ":help FALSE".
|
||||
func Test_if()
|
||||
if v:false
|
||||
call assert_true(false, 'v:false is false')
|
||||
endif
|
||||
if 0
|
||||
call assert_true(false, 'zero is false')
|
||||
endif
|
||||
if "0"
|
||||
call assert_true(false, 'zero string is false')
|
||||
endif
|
||||
if "foo"
|
||||
call assert_true(false, 'foo is false')
|
||||
endif
|
||||
if " "
|
||||
call assert_true(false, 'space is false')
|
||||
endif
|
||||
if empty("foo")
|
||||
call assert_true(false, 'foo is not empty')
|
||||
endif
|
||||
|
||||
if v:true
|
||||
else
|
||||
call assert_true(false, 'v:true is true')
|
||||
endif
|
||||
if 1
|
||||
else
|
||||
call assert_true(false, 'one is true')
|
||||
endif
|
||||
if "1"
|
||||
else
|
||||
call assert_true(false, 'one string is true')
|
||||
endif
|
||||
if "1foo"
|
||||
else
|
||||
call assert_true(false, 'one in string is true')
|
||||
endif
|
||||
|
||||
call assert_fails('if [1]', 'E745')
|
||||
call assert_fails('if {1: 1}', 'E728')
|
||||
call assert_fails('if function("string")', 'E703')
|
||||
call assert_fails('if 1.3")', 'E805')
|
||||
endfunc
|
||||
|
||||
function Try_arg_true_false(expr, false_val, true_val)
|
||||
for v in ['v:false', '0', '"0"', '"foo"', '" "']
|
||||
let r = eval(substitute(a:expr, '%v%', v, ''))
|
||||
call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . string(a:false_val) . ' but ' . string(r))
|
||||
endfor
|
||||
for v in ['v:true', '1', '"1"', '"1foo"']
|
||||
let r = eval(substitute(a:expr, '%v%', v, ''))
|
||||
call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . string(a:true_val) . ' but ' . string(r))
|
||||
endfor
|
||||
endfunc
|
||||
|
||||
" Test using TRUE or FALSE values for an argument.
|
||||
func Test_true_false_arg()
|
||||
call Try_arg_true_false('count(["a", "A"], "a", %v%)', 1, 2)
|
||||
|
||||
set wildignore=*.swp
|
||||
call Try_arg_true_false('expand("foo.swp", %v%)', "", "foo.swp")
|
||||
call Try_arg_true_false('expand("foo.vim", 0, %v%)', "foo.vim", ["foo.vim"])
|
||||
|
||||
call setreg('a', ['x', 'y'])
|
||||
call Try_arg_true_false('getreg("a", 1, %v%)', "x\ny\n", ['x', 'y'])
|
||||
|
||||
set wildignore=*.vim
|
||||
call Try_arg_true_false('glob("runtest.vim", %v%)', "", "runtest.vim")
|
||||
set wildignore=*.swp
|
||||
call Try_arg_true_false('glob("runtest.vim", 0, %v%)', "runtest.vim", ["runtest.vim"])
|
||||
if has('unix')
|
||||
silent !ln -s doesntexit Xlink
|
||||
call Try_arg_true_false('glob("Xlink", 0, 0, %v%)', "", "Xlink")
|
||||
silent !rm Xlink
|
||||
endif
|
||||
|
||||
set wildignore=*.vim
|
||||
call Try_arg_true_false('globpath(".", "runtest.vim", %v%)', "", "./runtest.vim")
|
||||
set wildignore=*.swp
|
||||
call Try_arg_true_false('globpath(".", "runtest.vim", 0, %v%)', "./runtest.vim", ["./runtest.vim"])
|
||||
if has('unix')
|
||||
silent !ln -s doesntexit Xlink
|
||||
call Try_arg_true_false('globpath(".", "Xlink", 0, 0, %v%)', "", "./Xlink")
|
||||
silent !rm Xlink
|
||||
endif
|
||||
endfunc
|
||||
|
||||
function Try_arg_non_zero(expr, false_val, true_val)
|
||||
for v in ['v:false', '0', '[1]', '{2:3}', '3.4']
|
||||
let r = eval(substitute(a:expr, '%v%', v, ''))
|
||||
call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r)
|
||||
endfor
|
||||
for v in ['v:true', '1', '" "', '"0"']
|
||||
let r = eval(substitute(a:expr, '%v%', v, ''))
|
||||
call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . a:true_val . ' but ' . r)
|
||||
endfor
|
||||
endfunc
|
||||
|
||||
|
||||
" Test using non-zero-arg for an argument.
|
||||
func Test_non_zero_arg()
|
||||
" call test_settime(93784)
|
||||
" call Try_arg_non_zero("mode(%v%)", 'x', 'x!')
|
||||
" call test_settime(0)
|
||||
|
||||
call Try_arg_non_zero("shellescape('foo%', %v%)", "'foo%'", "'foo\\%'")
|
||||
|
||||
" visualmode() needs to be called twice to check
|
||||
for v in [v:false, 0, [1], {2:3}, 3.4]
|
||||
normal vv
|
||||
let r = visualmode(v)
|
||||
call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
|
||||
let r = visualmode(v)
|
||||
call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
|
||||
endfor
|
||||
for v in [v:true, 1, " ", "0"]
|
||||
normal vv
|
||||
let r = visualmode(v)
|
||||
call assert_equal('v', r, 'result for ' . v . ' is not "v" but ' . r)
|
||||
let r = visualmode(v)
|
||||
call assert_equal('', r, 'result for ' . v . ' is not "" but ' . r)
|
||||
endfor
|
||||
endfunc
|
@@ -448,7 +448,7 @@ static int included_patches[] = {
|
||||
// 1995 NA
|
||||
// 1994,
|
||||
// 1993,
|
||||
// 1992,
|
||||
1992,
|
||||
1991,
|
||||
1990,
|
||||
1989,
|
||||
|
Reference in New Issue
Block a user