1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
" Test behavior of boolean-like values.
source check.vim
" 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')
if has('float')
call assert_fails('if 1.3")', 'E805')
endif
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
abbr asdf asdff
call Try_arg_true_false('hasmapto("asdff", "i", %v%)', 0, 1)
call Try_arg_true_false('index(["a", "A"], "A", 0, %v%)', 1, 0)
function FilterMapArg(d)
if type(a:d) == type({})
return filter(a:d, 'v:key == "rhs"')
endif
return a:d
endfunction
call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff")
call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'})
call Try_arg_true_false('"asdf"->hasmapto("i", %v%)', 0, 1)
new colored
call setline(1, '<here>')
syn match brackets "<.*>"
syn match here "here" transparent
let brackets_id = synID(1, 1, 0)
let here_id = synID(1, 3, 0)
call Try_arg_true_false('synID(1, 3, %v%)', here_id, brackets_id)
bwipe!
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
|