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