2018-02-01 16:57:49 -07:00
|
|
|
" Tests for the :let command.
|
|
|
|
|
|
|
|
func Test_let()
|
|
|
|
" Test to not autoload when assigning. It causes internal error.
|
|
|
|
set runtimepath+=./sautest
|
|
|
|
let Test104#numvar = function('tr')
|
|
|
|
call assert_equal("function('tr')", string(Test104#numvar))
|
|
|
|
|
|
|
|
let a = 1
|
|
|
|
let b = 2
|
|
|
|
|
|
|
|
let out = execute('let a b')
|
|
|
|
let s = "\na #1\nb #2"
|
|
|
|
call assert_equal(s, out)
|
|
|
|
|
|
|
|
let out = execute('let {0 == 1 ? "a" : "b"}')
|
|
|
|
let s = "\nb #2"
|
|
|
|
call assert_equal(s, out)
|
|
|
|
|
|
|
|
let out = execute('let {0 == 1 ? "a" : "b"} a')
|
|
|
|
let s = "\nb #2\na #1"
|
|
|
|
call assert_equal(s, out)
|
|
|
|
|
|
|
|
let out = execute('let a {0 == 1 ? "a" : "b"}')
|
|
|
|
let s = "\na #1\nb #2"
|
|
|
|
call assert_equal(s, out)
|
2019-11-26 18:05:52 -07:00
|
|
|
|
|
|
|
let x = 0
|
|
|
|
if 0 | let x = 1 | endif
|
|
|
|
call assert_equal(0, x)
|
2018-02-01 16:57:49 -07:00
|
|
|
endfunc
|
2019-08-21 11:17:09 -07:00
|
|
|
|
|
|
|
func s:set_arg1(a) abort
|
|
|
|
let a:a = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg2(a) abort
|
|
|
|
let a:b = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg3(a) abort
|
|
|
|
let b = a:
|
|
|
|
let b['a'] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg4(a) abort
|
|
|
|
let b = a:
|
|
|
|
let b['a'] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg5(a) abort
|
|
|
|
let b = a:
|
|
|
|
let b['a'][0] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg6(a) abort
|
|
|
|
let a:a[0] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg7(a) abort
|
|
|
|
call extend(a:, {'a': 1})
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg8(a) abort
|
|
|
|
call extend(a:, {'b': 1})
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg9(a) abort
|
|
|
|
let a:['b'] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg10(a) abort
|
|
|
|
let b = a:
|
|
|
|
call extend(b, {'a': 1})
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg11(a) abort
|
|
|
|
let b = a:
|
|
|
|
call extend(b, {'b': 1})
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_arg12(a) abort
|
|
|
|
let b = a:
|
|
|
|
let b['b'] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func Test_let_arg_fail()
|
|
|
|
call assert_fails('call s:set_arg1(1)', 'E46:')
|
|
|
|
call assert_fails('call s:set_arg2(1)', 'E461:')
|
|
|
|
call assert_fails('call s:set_arg3(1)', 'E46:')
|
|
|
|
call assert_fails('call s:set_arg4(1)', 'E46:')
|
|
|
|
call assert_fails('call s:set_arg5(1)', 'E46:')
|
|
|
|
call s:set_arg6([0])
|
|
|
|
call assert_fails('call s:set_arg7(1)', 'E742:')
|
|
|
|
call assert_fails('call s:set_arg8(1)', 'E742:')
|
|
|
|
call assert_fails('call s:set_arg9(1)', 'E461:')
|
|
|
|
call assert_fails('call s:set_arg10(1)', 'E742:')
|
|
|
|
call assert_fails('call s:set_arg11(1)', 'E742:')
|
|
|
|
call assert_fails('call s:set_arg12(1)', 'E461:')
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg1(...) abort
|
|
|
|
let a:000 = []
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg2(...) abort
|
|
|
|
let a:000[0] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg3(...) abort
|
|
|
|
let a:000 += [1]
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg4(...) abort
|
|
|
|
call add(a:000, 1)
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg5(...) abort
|
|
|
|
let a:000[0][0] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg6(...) abort
|
|
|
|
let b = a:000
|
|
|
|
let b[0] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg7(...) abort
|
|
|
|
let b = a:000
|
|
|
|
call add(b, 1)
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func s:set_varg8(...) abort
|
|
|
|
let b = a:000
|
|
|
|
let b[0][0] = 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
func Test_let_varg_fail()
|
|
|
|
call assert_fails('call s:set_varg1(1)', 'E46:')
|
|
|
|
call assert_fails('call s:set_varg2(1)', 'E742:')
|
|
|
|
call assert_fails('call s:set_varg3(1)', 'E46:')
|
|
|
|
call assert_fails('call s:set_varg4(1)', 'E742:')
|
|
|
|
call s:set_varg5([0])
|
|
|
|
call assert_fails('call s:set_varg6(1)', 'E742:')
|
|
|
|
call assert_fails('call s:set_varg7(1)', 'E742:')
|
|
|
|
call s:set_varg8([0])
|
|
|
|
endfunction
|
2019-09-22 12:47:24 -07:00
|
|
|
|
2019-11-06 20:01:58 -07:00
|
|
|
func Test_let_utf8_environment()
|
|
|
|
let $a = 'ĀĒĪŌŪあいうえお'
|
|
|
|
call assert_equal('ĀĒĪŌŪあいうえお', $a)
|
|
|
|
endfunc
|
|
|
|
|
2020-11-29 23:12:34 -07:00
|
|
|
func Test_let_no_type_checking()
|
|
|
|
let v = 1
|
|
|
|
let v = [1,2,3]
|
|
|
|
let v = {'a': 1, 'b': 2}
|
|
|
|
let v = 3.4
|
|
|
|
let v = 'hello'
|
|
|
|
endfunc
|
|
|
|
|
|
|
|
func Test_let_termcap()
|
|
|
|
throw 'skipped: Nvim does not support termcap option'
|
|
|
|
" Terminal code
|
|
|
|
let old_t_te = &t_te
|
|
|
|
let &t_te = "\<Esc>[yes;"
|
|
|
|
call assert_match('t_te.*^[[yes;', execute("set termcap"))
|
|
|
|
let &t_te = old_t_te
|
|
|
|
|
|
|
|
if exists("+t_k1")
|
|
|
|
" Key code
|
|
|
|
let old_t_k1 = &t_k1
|
|
|
|
let &t_k1 = "that"
|
|
|
|
call assert_match('t_k1.*that', execute("set termcap"))
|
|
|
|
let &t_k1 = old_t_k1
|
|
|
|
endif
|
|
|
|
|
|
|
|
call assert_fails('let x = &t_xx', 'E113')
|
|
|
|
let &t_xx = "yes"
|
|
|
|
call assert_equal("yes", &t_xx)
|
|
|
|
let &t_xx = ""
|
|
|
|
call assert_fails('let x = &t_xx', 'E113')
|
|
|
|
endfunc
|
|
|
|
|
|
|
|
func Test_let_option_error()
|
|
|
|
let _w = &tw
|
|
|
|
let &tw = 80
|
|
|
|
call assert_fails('let &tw .= 1', 'E734')
|
|
|
|
call assert_equal(80, &tw)
|
|
|
|
let &tw = _w
|
|
|
|
|
|
|
|
let _w = &fillchars
|
|
|
|
let &fillchars = "vert:|"
|
|
|
|
call assert_fails('let &fillchars += "diff:-"', 'E734')
|
|
|
|
call assert_equal("vert:|", &fillchars)
|
|
|
|
let &fillchars = _w
|
|
|
|
endfunc
|
|
|
|
|
|
|
|
func Test_let_errors()
|
|
|
|
let s = 'abcd'
|
|
|
|
call assert_fails('let s[1] = 5', 'E689:')
|
|
|
|
|
|
|
|
let l = [1, 2, 3]
|
|
|
|
call assert_fails('let l[:] = 5', 'E709:')
|
|
|
|
endfunc
|
|
|
|
|
2019-09-23 10:46:45 -07:00
|
|
|
func Test_let_heredoc_fails()
|
|
|
|
call assert_fails('let v =<< marker', 'E991:')
|
|
|
|
|
|
|
|
let text =<< trim END
|
|
|
|
func WrongSyntax()
|
|
|
|
let v =<< that there
|
|
|
|
endfunc
|
|
|
|
END
|
|
|
|
call writefile(text, 'XheredocFail')
|
|
|
|
call assert_fails('source XheredocFail', 'E126:')
|
|
|
|
call delete('XheredocFail')
|
|
|
|
|
2019-10-12 14:47:00 -07:00
|
|
|
let text =<< trim CodeEnd
|
2019-09-23 10:46:45 -07:00
|
|
|
func MissingEnd()
|
|
|
|
let v =<< END
|
|
|
|
endfunc
|
2019-10-12 14:47:00 -07:00
|
|
|
CodeEnd
|
2019-09-23 10:46:45 -07:00
|
|
|
call writefile(text, 'XheredocWrong')
|
|
|
|
call assert_fails('source XheredocWrong', 'E126:')
|
|
|
|
call delete('XheredocWrong')
|
2019-10-12 14:47:00 -07:00
|
|
|
|
|
|
|
let text =<< trim TEXTend
|
|
|
|
let v =<< " comment
|
|
|
|
TEXTend
|
|
|
|
call writefile(text, 'XheredocNoMarker')
|
|
|
|
call assert_fails('source XheredocNoMarker', 'E172:')
|
|
|
|
call delete('XheredocNoMarker')
|
|
|
|
|
|
|
|
let text =<< trim TEXTend
|
|
|
|
let v =<< text
|
|
|
|
TEXTend
|
|
|
|
call writefile(text, 'XheredocBadMarker')
|
|
|
|
call assert_fails('source XheredocBadMarker', 'E221:')
|
|
|
|
call delete('XheredocBadMarker')
|
2019-09-23 10:46:45 -07:00
|
|
|
endfunc
|
2019-09-22 12:47:24 -07:00
|
|
|
|
2019-10-12 15:04:41 -07:00
|
|
|
func Test_let_heredoc_trim_no_indent_marker()
|
|
|
|
let text =<< trim END
|
|
|
|
Text
|
|
|
|
with
|
|
|
|
indent
|
|
|
|
END
|
|
|
|
call assert_equal(['Text', 'with', 'indent'], text)
|
|
|
|
endfunc
|
|
|
|
|
2019-09-22 12:47:24 -07:00
|
|
|
" Test for the setting a variable using the heredoc syntax
|
|
|
|
func Test_let_heredoc()
|
|
|
|
let var1 =<< END
|
|
|
|
Some sample text
|
|
|
|
Text with indent
|
|
|
|
!@#$%^&*()-+_={}|[]\~`:";'<>?,./
|
|
|
|
END
|
|
|
|
|
|
|
|
call assert_equal(["Some sample text", "\tText with indent", " !@#$%^&*()-+_={}|[]\\~`:\";'<>?,./"], var1)
|
|
|
|
|
2019-10-12 14:47:00 -07:00
|
|
|
let var2 =<< XXX
|
2019-09-22 12:47:24 -07:00
|
|
|
Editor
|
2019-10-12 14:47:00 -07:00
|
|
|
XXX
|
2019-09-22 12:47:24 -07:00
|
|
|
call assert_equal(['Editor'], var2)
|
|
|
|
|
|
|
|
let var3 =<<END
|
|
|
|
END
|
|
|
|
call assert_equal([], var3)
|
|
|
|
|
|
|
|
let var3 =<<END
|
|
|
|
vim
|
|
|
|
|
|
|
|
end
|
|
|
|
END
|
|
|
|
END
|
|
|
|
END
|
|
|
|
call assert_equal(['vim', '', 'end', ' END', 'END '], var3)
|
|
|
|
|
2019-09-23 10:46:45 -07:00
|
|
|
let var1 =<< trim END
|
|
|
|
Line1
|
|
|
|
Line2
|
|
|
|
Line3
|
|
|
|
END
|
|
|
|
END
|
2019-09-22 12:47:24 -07:00
|
|
|
call assert_equal(['Line1', ' Line2', "\tLine3", ' END'], var1)
|
|
|
|
|
2019-10-12 00:48:48 -07:00
|
|
|
let var1 =<< trim !!!
|
|
|
|
Line1
|
|
|
|
line2
|
|
|
|
Line3
|
|
|
|
!!!
|
|
|
|
!!!
|
|
|
|
call assert_equal(['Line1', ' line2', "\tLine3", '!!!',], var1)
|
|
|
|
|
2019-10-12 14:47:00 -07:00
|
|
|
let var1 =<< trim XX
|
2019-09-22 12:47:24 -07:00
|
|
|
Line1
|
2019-10-12 14:47:00 -07:00
|
|
|
XX
|
2019-10-12 00:48:48 -07:00
|
|
|
call assert_equal(['Line1'], var1)
|
2019-09-22 12:47:24 -07:00
|
|
|
|
2019-09-23 10:46:45 -07:00
|
|
|
" ignore "endfunc"
|
|
|
|
let var1 =<< END
|
|
|
|
something
|
2019-09-22 12:47:24 -07:00
|
|
|
endfunc
|
2019-09-23 10:46:45 -07:00
|
|
|
END
|
|
|
|
call assert_equal(['something', 'endfunc'], var1)
|
2019-09-22 12:47:24 -07:00
|
|
|
|
2019-09-23 10:46:45 -07:00
|
|
|
" ignore "endfunc" with trim
|
|
|
|
let var1 =<< trim END
|
|
|
|
something
|
|
|
|
endfunc
|
|
|
|
END
|
|
|
|
call assert_equal(['something', 'endfunc'], var1)
|
|
|
|
|
|
|
|
" ignore "python << xx"
|
|
|
|
let var1 =<<END
|
|
|
|
something
|
|
|
|
python << xx
|
|
|
|
END
|
|
|
|
call assert_equal(['something', 'python << xx'], var1)
|
|
|
|
|
|
|
|
" ignore "python << xx" with trim
|
|
|
|
let var1 =<< trim END
|
|
|
|
something
|
|
|
|
python << xx
|
|
|
|
END
|
|
|
|
call assert_equal(['something', 'python << xx'], var1)
|
2019-09-22 12:47:24 -07:00
|
|
|
|
2019-09-23 10:46:45 -07:00
|
|
|
" ignore "append"
|
2019-10-12 14:47:00 -07:00
|
|
|
let var1 =<< E
|
2019-09-23 10:46:45 -07:00
|
|
|
something
|
|
|
|
app
|
2019-10-12 14:47:00 -07:00
|
|
|
E
|
2019-09-23 10:46:45 -07:00
|
|
|
call assert_equal(['something', 'app'], var1)
|
|
|
|
|
|
|
|
" ignore "append" with trim
|
2019-10-12 14:47:00 -07:00
|
|
|
let var1 =<< trim END
|
2019-09-23 10:46:45 -07:00
|
|
|
something
|
|
|
|
app
|
2019-10-12 14:47:00 -07:00
|
|
|
END
|
2019-09-23 10:46:45 -07:00
|
|
|
call assert_equal(['something', 'app'], var1)
|
2019-10-20 17:17:25 -07:00
|
|
|
|
|
|
|
let check = []
|
|
|
|
if 0
|
|
|
|
let check =<< trim END
|
|
|
|
from heredoc
|
|
|
|
END
|
|
|
|
endif
|
|
|
|
call assert_equal([], check)
|
2019-11-06 20:32:54 -07:00
|
|
|
|
|
|
|
" unpack assignment
|
|
|
|
let [a, b, c] =<< END
|
|
|
|
x
|
|
|
|
\y
|
|
|
|
z
|
|
|
|
END
|
|
|
|
call assert_equal([' x', ' \y', ' z'], [a, b, c])
|
2019-09-22 12:47:24 -07:00
|
|
|
endfunc
|