neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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