1e381d3d5SBram Moolenaar" Test behavior of boolean-like values.
2e381d3d5SBram Moolenaar
35feabe00SBram Moolenaarsource check.vim
45feabe00SBram Moolenaar
5e381d3d5SBram Moolenaar" Test what is explained at ":help TRUE" and ":help FALSE".
6e381d3d5SBram Moolenaarfunc Test_if()
7e381d3d5SBram Moolenaar  if v:false
8e381d3d5SBram Moolenaar    call assert_true(false, 'v:false is false')
9e381d3d5SBram Moolenaar  endif
10e381d3d5SBram Moolenaar  if 0
11e381d3d5SBram Moolenaar    call assert_true(false, 'zero is false')
12e381d3d5SBram Moolenaar  endif
13e381d3d5SBram Moolenaar  if "0"
14e381d3d5SBram Moolenaar    call assert_true(false, 'zero string is false')
15e381d3d5SBram Moolenaar  endif
16e381d3d5SBram Moolenaar  if "foo"
17e381d3d5SBram Moolenaar    call assert_true(false, 'foo is false')
18e381d3d5SBram Moolenaar  endif
19e381d3d5SBram Moolenaar  if " "
20e381d3d5SBram Moolenaar    call assert_true(false, 'space is false')
21e381d3d5SBram Moolenaar  endif
22e381d3d5SBram Moolenaar  if empty("foo")
23e381d3d5SBram Moolenaar    call assert_true(false, 'foo is not empty')
24e381d3d5SBram Moolenaar  endif
25e381d3d5SBram Moolenaar
26e381d3d5SBram Moolenaar  if v:true
27e381d3d5SBram Moolenaar  else
28e381d3d5SBram Moolenaar    call assert_true(false, 'v:true is true')
29e381d3d5SBram Moolenaar  endif
30e381d3d5SBram Moolenaar  if 1
31e381d3d5SBram Moolenaar  else
32e381d3d5SBram Moolenaar    call assert_true(false, 'one is true')
33e381d3d5SBram Moolenaar  endif
34e381d3d5SBram Moolenaar  if "1"
35e381d3d5SBram Moolenaar  else
36e381d3d5SBram Moolenaar    call assert_true(false, 'one string is true')
37e381d3d5SBram Moolenaar  endif
38e381d3d5SBram Moolenaar  if "1foo"
39e381d3d5SBram Moolenaar  else
40e381d3d5SBram Moolenaar    call assert_true(false, 'one in string is true')
41e381d3d5SBram Moolenaar  endif
42e381d3d5SBram Moolenaar
43*e2e4075fSBram Moolenaar  call assert_fails('if [1]', 'E745:')
44*e2e4075fSBram Moolenaar  call assert_fails('if {1: 1}', 'E728:')
45*e2e4075fSBram Moolenaar  call assert_fails('if function("string")', 'E703:')
465feabe00SBram Moolenaar  if has('float')
47*e2e4075fSBram Moolenaar    call assert_fails('if 1.3")', 'E805:')
485feabe00SBram Moolenaar  endif
49e381d3d5SBram Moolenaarendfunc
50e381d3d5SBram Moolenaar
51e381d3d5SBram Moolenaarfunction Try_arg_true_false(expr, false_val, true_val)
52e381d3d5SBram Moolenaar  for v in ['v:false', '0', '"0"', '"foo"', '" "']
53e381d3d5SBram Moolenaar    let r = eval(substitute(a:expr, '%v%', v, ''))
54e381d3d5SBram Moolenaar    call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . string(a:false_val) . ' but ' . string(r))
55e381d3d5SBram Moolenaar  endfor
56e381d3d5SBram Moolenaar  for v in ['v:true', '1', '"1"', '"1foo"']
57e381d3d5SBram Moolenaar    let r = eval(substitute(a:expr, '%v%', v, ''))
58e381d3d5SBram Moolenaar    call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . string(a:true_val) . ' but ' . string(r))
59e381d3d5SBram Moolenaar  endfor
60e381d3d5SBram Moolenaarendfunc
61e381d3d5SBram Moolenaar
62e381d3d5SBram Moolenaar" Test using TRUE or FALSE values for an argument.
63e381d3d5SBram Moolenaarfunc Test_true_false_arg()
64e381d3d5SBram Moolenaar  call Try_arg_true_false('count(["a", "A"], "a", %v%)', 1, 2)
65e381d3d5SBram Moolenaar
66e381d3d5SBram Moolenaar  set wildignore=*.swp
67e381d3d5SBram Moolenaar  call Try_arg_true_false('expand("foo.swp", %v%)', "", "foo.swp")
68e381d3d5SBram Moolenaar  call Try_arg_true_false('expand("foo.vim", 0, %v%)', "foo.vim", ["foo.vim"])
69e381d3d5SBram Moolenaar
70e381d3d5SBram Moolenaar  call setreg('a', ['x', 'y'])
71e381d3d5SBram Moolenaar  call Try_arg_true_false('getreg("a", 1, %v%)', "x\ny\n", ['x', 'y'])
72e381d3d5SBram Moolenaar
73e381d3d5SBram Moolenaar  set wildignore=*.vim
74e381d3d5SBram Moolenaar  call Try_arg_true_false('glob("runtest.vim", %v%)', "", "runtest.vim")
75e381d3d5SBram Moolenaar  set wildignore=*.swp
76e381d3d5SBram Moolenaar  call Try_arg_true_false('glob("runtest.vim", 0, %v%)', "runtest.vim", ["runtest.vim"])
77e381d3d5SBram Moolenaar  if has('unix')
78e381d3d5SBram Moolenaar    silent !ln -s doesntexit Xlink
79e381d3d5SBram Moolenaar    call Try_arg_true_false('glob("Xlink", 0, 0, %v%)', "", "Xlink")
80e381d3d5SBram Moolenaar    silent !rm Xlink
81e381d3d5SBram Moolenaar  endif
82e381d3d5SBram Moolenaar
83e381d3d5SBram Moolenaar  set wildignore=*.vim
84e381d3d5SBram Moolenaar  call Try_arg_true_false('globpath(".", "runtest.vim", %v%)', "", "./runtest.vim")
85e381d3d5SBram Moolenaar  set wildignore=*.swp
86e381d3d5SBram Moolenaar  call Try_arg_true_false('globpath(".", "runtest.vim", 0, %v%)', "./runtest.vim", ["./runtest.vim"])
87e381d3d5SBram Moolenaar  if has('unix')
88e381d3d5SBram Moolenaar    silent !ln -s doesntexit Xlink
89e381d3d5SBram Moolenaar    call Try_arg_true_false('globpath(".", "Xlink", 0, 0, %v%)', "", "./Xlink")
90e381d3d5SBram Moolenaar    silent !rm Xlink
91e381d3d5SBram Moolenaar  endif
926bb45014SBram Moolenaar
936bb45014SBram Moolenaar  abbr asdf asdff
946bb45014SBram Moolenaar  call Try_arg_true_false('hasmapto("asdff", "i", %v%)', 0, 1)
956bb45014SBram Moolenaar
966bb45014SBram Moolenaar  call Try_arg_true_false('index(["a", "A"], "A", 0, %v%)', 1, 0)
976bb45014SBram Moolenaar
9805e418d4SBram Moolenaar  function FilterMapArg(d)
9905e418d4SBram Moolenaar    if type(a:d) == type({})
10005e418d4SBram Moolenaar      return filter(a:d, 'v:key == "rhs"')
10105e418d4SBram Moolenaar    endif
10205e418d4SBram Moolenaar    return a:d
10305e418d4SBram Moolenaar  endfunction
1046bb45014SBram Moolenaar  call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff")
10505e418d4SBram Moolenaar  call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'})
1066bb45014SBram Moolenaar
107f9f24ce7SBram Moolenaar  call Try_arg_true_false('"asdf"->hasmapto("i", %v%)', 0, 1)
1086bb45014SBram Moolenaar
1096bb45014SBram Moolenaar  new colored
1106bb45014SBram Moolenaar  call setline(1, '<here>')
1116bb45014SBram Moolenaar  syn match brackets "<.*>"
1126bb45014SBram Moolenaar  syn match here "here" transparent
1136bb45014SBram Moolenaar  let brackets_id = synID(1, 1, 0)
1146bb45014SBram Moolenaar  let here_id = synID(1, 3, 0)
1156bb45014SBram Moolenaar  call Try_arg_true_false('synID(1, 3, %v%)', here_id, brackets_id)
1166bb45014SBram Moolenaar  bwipe!
117e381d3d5SBram Moolenaarendfunc
118e381d3d5SBram Moolenaar
119e381d3d5SBram Moolenaarfunction Try_arg_non_zero(expr, false_val, true_val)
1205feabe00SBram Moolenaar  CheckFeature float
121e381d3d5SBram Moolenaar  for v in ['v:false', '0', '[1]', '{2:3}', '3.4']
122e381d3d5SBram Moolenaar    let r = eval(substitute(a:expr, '%v%', v, ''))
123e381d3d5SBram Moolenaar    call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r)
124e381d3d5SBram Moolenaar  endfor
125e381d3d5SBram Moolenaar  for v in ['v:true', '1', '" "', '"0"']
126e381d3d5SBram Moolenaar    let r = eval(substitute(a:expr, '%v%', v, ''))
127e381d3d5SBram Moolenaar    call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . a:true_val . ' but ' . r)
128e381d3d5SBram Moolenaar  endfor
129e381d3d5SBram Moolenaarendfunc
130e381d3d5SBram Moolenaar
131e381d3d5SBram Moolenaar
132e381d3d5SBram Moolenaar" Test using non-zero-arg for an argument.
133e381d3d5SBram Moolenaarfunc Test_non_zero_arg()
134e381d3d5SBram Moolenaar  call test_settime(93784)
135e381d3d5SBram Moolenaar  call Try_arg_non_zero("mode(%v%)", 'x', 'x!')
136e381d3d5SBram Moolenaar  call test_settime(0)
137e381d3d5SBram Moolenaar
138e381d3d5SBram Moolenaar  call Try_arg_non_zero("shellescape('foo%', %v%)", "'foo%'", "'foo\\%'")
139e381d3d5SBram Moolenaar
140e381d3d5SBram Moolenaar  " visualmode() needs to be called twice to check
141e381d3d5SBram Moolenaar  for v in [v:false, 0, [1], {2:3}, 3.4]
142e381d3d5SBram Moolenaar    normal vv
143e381d3d5SBram Moolenaar    let r = visualmode(v)
144e381d3d5SBram Moolenaar    call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
145e381d3d5SBram Moolenaar    let r = visualmode(v)
146e381d3d5SBram Moolenaar    call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
147e381d3d5SBram Moolenaar  endfor
148e381d3d5SBram Moolenaar  for v in [v:true, 1, " ", "0"]
149e381d3d5SBram Moolenaar    normal vv
150e381d3d5SBram Moolenaar    let r = visualmode(v)
151e381d3d5SBram Moolenaar    call assert_equal('v', r, 'result for ' . v . ' is not "v" but ' . r)
152e381d3d5SBram Moolenaar    let r = visualmode(v)
153e381d3d5SBram Moolenaar    call assert_equal('', r, 'result for ' . v . ' is not "" but ' . r)
154e381d3d5SBram Moolenaar  endfor
155e381d3d5SBram Moolenaarendfunc
1566d91bcb4SBram Moolenaar
1576d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
158