view src/testdir/test_true_false.vim @ 34780:54890be01c00 v9.1.0265

patch 9.1.0265: console dialog cannot save unnamed buffers Commit: https://github.com/vim/vim/commit/df46115fc839c8912ed60646e86a412e5180ba1d Author: glepnir <glephunter@gmail.com> Date: Thu Apr 4 22:23:29 2024 +0200 patch 9.1.0265: console dialog cannot save unnamed buffers Problem: console dialog cannot save unnamed buffers Solution: set bufname before save (glepnir). Define dialog_con_gui to test for GUI+Console dialog support, use it to skip the test when the GUI feature has been defined. Note: The dialog_changed() function will also try to call the browse_save_fname() function, when FEAT_BROWSE is defined (which is only defined in a GUI build of Vim). This will eventually lead to a call of do_browse(), which causes an error message if a GUI is not currently running (see the TODO: in do_browse()) and will then lead to a failure in Test_goto_buf_with_onfirm(). Therefore, we must disable the Test_goto_buf_with_onfirm(), when the dialog_con_gui feature is enabled (which basically means dialog feature for GUI and Console builds, in contrast to the dialog_con and dialog_gui feature). (Previously this wasn't a problem, because the test aborted in the YES case for the :confirm :b XgotoConf case and did therefore not run into the browse function call) closes: #14398 Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 04 Apr 2024 23:45:02 +0200
parents dbec60b8c253
children
line wrap: on
line source

" Test behavior of boolean-like values.

source check.vim

" Test what is explained at ":help TRUE" and ":help FALSE".
func Test_if()
  if v:false
    call assert_true(false, 'v:false is false')
  endif
  if 0
    call assert_true(false, 'zero is false')
  endif
  if "0"
    call assert_true(false, 'zero string is false')
  endif
  if "foo"
    call assert_true(false, 'foo is false')
  endif
  if " "
    call assert_true(false, 'space is false')
  endif
  if empty("foo")
    call assert_true(false, 'foo is not empty')
  endif

  if v:true
  else
    call assert_true(false, 'v:true is true')
  endif
  if 1
  else
    call assert_true(false, 'one is true')
  endif
  if "1"
  else
    call assert_true(false, 'one string is true')
  endif
  if "1foo"
  else
    call assert_true(false, 'one in string is true')
  endif

  call assert_fails('if [1]', 'E745:')
  call assert_fails('if {1: 1}', 'E728:')
  call assert_fails('if function("string")', 'E703:')
  call assert_fails('if 1.3")', 'E805:')
endfunc

function Try_arg_true_false(expr, false_val, true_val)
  for v in ['v:false', '0', '"0"', '"foo"', '" "']
    let r = eval(substitute(a:expr, '%v%', v, ''))
    call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . string(a:false_val) . ' but ' . string(r))
  endfor
  for v in ['v:true', '1', '"1"', '"1foo"']
    let r = eval(substitute(a:expr, '%v%', v, ''))
    call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . string(a:true_val) . ' but ' . string(r))
  endfor
endfunc

" Test using TRUE or FALSE values for an argument.
func Test_true_false_arg()
  call Try_arg_true_false('count(["a", "A"], "a", %v%)', 1, 2)

  set wildignore=*.swp
  call Try_arg_true_false('expand("foo.swp", %v%)', "", "foo.swp")
  call Try_arg_true_false('expand("foo.vim", 0, %v%)', "foo.vim", ["foo.vim"])

  call setreg('a', ['x', 'y'])
  call Try_arg_true_false('getreg("a", 1, %v%)', "x\ny\n", ['x', 'y'])

  set wildignore=*.vim
  call Try_arg_true_false('glob("runtest.vim", %v%)', "", "runtest.vim")
  set wildignore=*.swp
  call Try_arg_true_false('glob("runtest.vim", 0, %v%)', "runtest.vim", ["runtest.vim"])
  if has('unix')
    silent !ln -s doesntexit Xlink
    call Try_arg_true_false('glob("Xlink", 0, 0, %v%)', "", "Xlink")
    silent !rm Xlink
  endif

  set wildignore=*.vim
  call Try_arg_true_false('globpath(".", "runtest.vim", %v%)', "", "./runtest.vim")
  set wildignore=*.swp
  call Try_arg_true_false('globpath(".", "runtest.vim", 0, %v%)', "./runtest.vim", ["./runtest.vim"])
  if has('unix')
    silent !ln -s doesntexit Xlink
    call Try_arg_true_false('globpath(".", "Xlink", 0, 0, %v%)', "", "./Xlink")
    silent !rm Xlink
  endif

  abbr asdf asdff
  call Try_arg_true_false('hasmapto("asdff", "i", %v%)', 0, 1)

  call Try_arg_true_false('index(["a", "A"], "A", 0, %v%)', 1, 0)

  function FilterMapArg(d)
    if type(a:d) == type({})
      return filter(a:d, 'v:key == "rhs"')
    endif
    return a:d
  endfunction
  call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff")
  call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'})

  call Try_arg_true_false('"asdf"->hasmapto("i", %v%)', 0, 1)

  new colored
  call setline(1, '<here>')
  syn match brackets "<.*>"
  syn match here "here" transparent
  let brackets_id = synID(1, 1, 0)
  let here_id = synID(1, 3, 0)
  call Try_arg_true_false('synID(1, 3, %v%)', here_id, brackets_id)
  bwipe!
endfunc

function Try_arg_non_zero(expr, false_val, true_val)
  for v in ['v:false', '0', '[1]', '{2:3}', '3.4']
    let r = eval(substitute(a:expr, '%v%', v, ''))
    call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r)
  endfor
  for v in ['v:true', '1', '" "', '"0"']
    let r = eval(substitute(a:expr, '%v%', v, ''))
    call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . a:true_val . ' but ' . r)
  endfor
endfunc


" Test using non-zero-arg for an argument.
func Test_non_zero_arg()
  call test_settime(93784)
  call Try_arg_non_zero("mode(%v%)", 'x', 'x!')
  call test_settime(0)

  call Try_arg_non_zero("shellescape('foo%', %v%)", "'foo%'", "'foo\\%'")

  " visualmode() needs to be called twice to check
  for v in [v:false, 0, [1], {2:3}, 3.4]
    normal vv
    let r = visualmode(v)
    call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
    let r = visualmode(v)
    call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
  endfor
  for v in [v:true, 1, " ", "0"]
    normal vv
    let r = visualmode(v)
    call assert_equal('v', r, 'result for ' . v . ' is not "v" but ' . r)
    let r = visualmode(v)
    call assert_equal('', r, 'result for ' . v . ' is not "" but ' . r)
  endfor
endfunc

" vim: shiftwidth=2 sts=2 expandtab