test_true_false.vim 4.7 KB

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