1" Test behavior of boolean-like values. 2 3" Test what is explained at ":help TRUE" and ":help FALSE". 4func Test_if() 5 if v:false 6 call assert_true(false, 'v:false is false') 7 endif 8 if 0 9 call assert_true(false, 'zero is false') 10 endif 11 if "0" 12 call assert_true(false, 'zero string is false') 13 endif 14 if "foo" 15 call assert_true(false, 'foo is false') 16 endif 17 if " " 18 call assert_true(false, 'space is false') 19 endif 20 if empty("foo") 21 call assert_true(false, 'foo is not empty') 22 endif 23 24 if v:true 25 else 26 call assert_true(false, 'v:true is true') 27 endif 28 if 1 29 else 30 call assert_true(false, 'one is true') 31 endif 32 if "1" 33 else 34 call assert_true(false, 'one string is true') 35 endif 36 if "1foo" 37 else 38 call assert_true(false, 'one in string is true') 39 endif 40 41 call assert_fails('if [1]', 'E745') 42 call assert_fails('if {1: 1}', 'E728') 43 call assert_fails('if function("string")', 'E703') 44 call assert_fails('if 1.3")', 'E805') 45endfunc 46 47function Try_arg_true_false(expr, false_val, true_val) 48 for v in ['v:false', '0', '"0"', '"foo"', '" "'] 49 let r = eval(substitute(a:expr, '%v%', v, '')) 50 call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . string(a:false_val) . ' but ' . string(r)) 51 endfor 52 for v in ['v:true', '1', '"1"', '"1foo"'] 53 let r = eval(substitute(a:expr, '%v%', v, '')) 54 call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . string(a:true_val) . ' but ' . string(r)) 55 endfor 56endfunc 57 58" Test using TRUE or FALSE values for an argument. 59func Test_true_false_arg() 60 call Try_arg_true_false('count(["a", "A"], "a", %v%)', 1, 2) 61 62 set wildignore=*.swp 63 call Try_arg_true_false('expand("foo.swp", %v%)', "", "foo.swp") 64 call Try_arg_true_false('expand("foo.vim", 0, %v%)', "foo.vim", ["foo.vim"]) 65 66 call setreg('a', ['x', 'y']) 67 call Try_arg_true_false('getreg("a", 1, %v%)', "x\ny\n", ['x', 'y']) 68 69 set wildignore=*.vim 70 call Try_arg_true_false('glob("runtest.vim", %v%)', "", "runtest.vim") 71 set wildignore=*.swp 72 call Try_arg_true_false('glob("runtest.vim", 0, %v%)', "runtest.vim", ["runtest.vim"]) 73 if has('unix') 74 silent !ln -s doesntexit Xlink 75 call Try_arg_true_false('glob("Xlink", 0, 0, %v%)', "", "Xlink") 76 silent !rm Xlink 77 endif 78 79 set wildignore=*.vim 80 call Try_arg_true_false('globpath(".", "runtest.vim", %v%)', "", "./runtest.vim") 81 set wildignore=*.swp 82 call Try_arg_true_false('globpath(".", "runtest.vim", 0, %v%)', "./runtest.vim", ["./runtest.vim"]) 83 if has('unix') 84 silent !ln -s doesntexit Xlink 85 call Try_arg_true_false('globpath(".", "Xlink", 0, 0, %v%)', "", "./Xlink") 86 silent !rm Xlink 87 endif 88 89 abbr asdf asdff 90 call Try_arg_true_false('hasmapto("asdff", "i", %v%)', 0, 1) 91 92 call Try_arg_true_false('index(["a", "A"], "A", 0, %v%)', 1, 0) 93 94 function FilterMapArg(d) 95 if type(a:d) == type({}) 96 return filter(a:d, 'v:key == "rhs"') 97 endif 98 return a:d 99 endfunction 100 call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff") 101 call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'}) 102 103 call Try_arg_true_false('hasmapto("asdf", "i", %v%)', 0, 1) 104 105 new colored 106 call setline(1, '<here>') 107 syn match brackets "<.*>" 108 syn match here "here" transparent 109 let brackets_id = synID(1, 1, 0) 110 let here_id = synID(1, 3, 0) 111 call Try_arg_true_false('synID(1, 3, %v%)', here_id, brackets_id) 112 bwipe! 113endfunc 114 115function Try_arg_non_zero(expr, false_val, true_val) 116 for v in ['v:false', '0', '[1]', '{2:3}', '3.4'] 117 let r = eval(substitute(a:expr, '%v%', v, '')) 118 call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r) 119 endfor 120 for v in ['v:true', '1', '" "', '"0"'] 121 let r = eval(substitute(a:expr, '%v%', v, '')) 122 call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . a:true_val . ' but ' . r) 123 endfor 124endfunc 125 126 127" Test using non-zero-arg for an argument. 128func Test_non_zero_arg() 129 call test_settime(93784) 130 call Try_arg_non_zero("mode(%v%)", 'x', 'x!') 131 call test_settime(0) 132 133 call Try_arg_non_zero("shellescape('foo%', %v%)", "'foo%'", "'foo\\%'") 134 135 " visualmode() needs to be called twice to check 136 for v in [v:false, 0, [1], {2:3}, 3.4] 137 normal vv 138 let r = visualmode(v) 139 call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r) 140 let r = visualmode(v) 141 call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r) 142 endfor 143 for v in [v:true, 1, " ", "0"] 144 normal vv 145 let r = visualmode(v) 146 call assert_equal('v', r, 'result for ' . v . ' is not "v" but ' . r) 147 let r = visualmode(v) 148 call assert_equal('', r, 'result for ' . v . ' is not "" but ' . r) 149 endfor 150endfunc 151