xref: /vim-8.2.3635/src/testdir/test_let.vim (revision b521766c)
14a137b45SBram Moolenaar" Tests for the :let command.
24a137b45SBram Moolenaar
34a137b45SBram Moolenaarfunc Test_let()
44a137b45SBram Moolenaar  " Test to not autoload when assigning.  It causes internal error.
54a137b45SBram Moolenaar  set runtimepath+=./sautest
64a137b45SBram Moolenaar  let Test104#numvar = function('tr')
74a137b45SBram Moolenaar  call assert_equal("function('tr')", string(Test104#numvar))
84a137b45SBram Moolenaar
94a137b45SBram Moolenaar  let a = 1
104a137b45SBram Moolenaar  let b = 2
114a137b45SBram Moolenaar
124a137b45SBram Moolenaar  let out = execute('let a b')
134a137b45SBram Moolenaar  let s = "\na                     #1\nb                     #2"
144a137b45SBram Moolenaar  call assert_equal(s, out)
154a137b45SBram Moolenaar
164a137b45SBram Moolenaar  let out = execute('let {0 == 1 ? "a" : "b"}')
174a137b45SBram Moolenaar  let s = "\nb                     #2"
184a137b45SBram Moolenaar  call assert_equal(s, out)
194a137b45SBram Moolenaar
204a137b45SBram Moolenaar  let out = execute('let {0 == 1 ? "a" : "b"} a')
214a137b45SBram Moolenaar  let s = "\nb                     #2\na                     #1"
224a137b45SBram Moolenaar  call assert_equal(s, out)
234a137b45SBram Moolenaar
244a137b45SBram Moolenaar  let out = execute('let a {0 == 1 ? "a" : "b"}')
254a137b45SBram Moolenaar  let s = "\na                     #1\nb                     #2"
264a137b45SBram Moolenaar  call assert_equal(s, out)
278f76e6b1SBram Moolenaar
288dfcce3aSBram Moolenaar  " Test for displaying a string variable
298dfcce3aSBram Moolenaar  let s = 'vim'
308dfcce3aSBram Moolenaar  let out = execute('let s')
318dfcce3aSBram Moolenaar  let s = "\ns                      vim"
328dfcce3aSBram Moolenaar  call assert_equal(s, out)
338dfcce3aSBram Moolenaar
348dfcce3aSBram Moolenaar  " Test for displaying a list variable
358dfcce3aSBram Moolenaar  let l = [1, 2]
368dfcce3aSBram Moolenaar  let out = execute('let l')
378dfcce3aSBram Moolenaar  let s = "\nl                     [1, 2]"
388dfcce3aSBram Moolenaar  call assert_equal(s, out)
398dfcce3aSBram Moolenaar
408dfcce3aSBram Moolenaar  " Test for displaying a dict variable
418dfcce3aSBram Moolenaar  let d = {'k' : 'v'}
428dfcce3aSBram Moolenaar  let out = execute('let d')
438dfcce3aSBram Moolenaar  let s = "\nd                     {'k': 'v'}"
448dfcce3aSBram Moolenaar  call assert_equal(s, out)
458dfcce3aSBram Moolenaar
468dfcce3aSBram Moolenaar  " Test for displaying a function reference variable
478dfcce3aSBram Moolenaar  let F = function('min')
488dfcce3aSBram Moolenaar  let out = execute('let F')
498dfcce3aSBram Moolenaar  let s = "\nF                     *min()"
508dfcce3aSBram Moolenaar  call assert_equal(s, out)
518dfcce3aSBram Moolenaar
528f76e6b1SBram Moolenaar  let x = 0
538f76e6b1SBram Moolenaar  if 0 | let x = 1 | endif
548f76e6b1SBram Moolenaar  call assert_equal(0, x)
558dfcce3aSBram Moolenaar
568dfcce3aSBram Moolenaar  " Display a list item using an out of range index
578dfcce3aSBram Moolenaar  let l = [10]
588dfcce3aSBram Moolenaar  call assert_fails('let l[1]', 'E684:')
598dfcce3aSBram Moolenaar
608dfcce3aSBram Moolenaar  " List special variable dictionaries
618dfcce3aSBram Moolenaar  let g:Test_Global_Var = 5
628dfcce3aSBram Moolenaar  call assert_match("\nTest_Global_Var       #5", execute('let g:'))
638dfcce3aSBram Moolenaar  unlet g:Test_Global_Var
648dfcce3aSBram Moolenaar
658dfcce3aSBram Moolenaar  let b:Test_Buf_Var = 8
668dfcce3aSBram Moolenaar  call assert_match("\nb:Test_Buf_Var        #8", execute('let b:'))
678dfcce3aSBram Moolenaar  unlet b:Test_Buf_Var
688dfcce3aSBram Moolenaar
698dfcce3aSBram Moolenaar  let w:Test_Win_Var = 'foo'
708dfcce3aSBram Moolenaar  call assert_equal("\nw:Test_Win_Var         foo", execute('let w:'))
718dfcce3aSBram Moolenaar  unlet w:Test_Win_Var
728dfcce3aSBram Moolenaar
738dfcce3aSBram Moolenaar  let t:Test_Tab_Var = 'bar'
748dfcce3aSBram Moolenaar  call assert_equal("\nt:Test_Tab_Var         bar", execute('let t:'))
758dfcce3aSBram Moolenaar  unlet t:Test_Tab_Var
768dfcce3aSBram Moolenaar
778dfcce3aSBram Moolenaar  let s:Test_Script_Var = [7]
788dfcce3aSBram Moolenaar  call assert_match("\ns:Test_Script_Var     \\[7]", execute('let s:'))
798dfcce3aSBram Moolenaar  unlet s:Test_Script_Var
808dfcce3aSBram Moolenaar
818dfcce3aSBram Moolenaar  let l:Test_Local_Var = {'k' : 5}
828dfcce3aSBram Moolenaar  call assert_match("\nl:Test_Local_Var      {'k': 5}", execute('let l:'))
838dfcce3aSBram Moolenaar  call assert_match("v:errors              []", execute('let v:'))
849d8d0b5cSBram Moolenaar
859d8d0b5cSBram Moolenaar  " Test for assigning multiple list items
869d8d0b5cSBram Moolenaar  let l = [1, 2, 3]
879d8d0b5cSBram Moolenaar  let [l[0], l[1]] = [10, 20]
889d8d0b5cSBram Moolenaar  call assert_equal([10, 20, 3], l)
899d8d0b5cSBram Moolenaar
909d8d0b5cSBram Moolenaar  " Test for errors in conditional expression
919d8d0b5cSBram Moolenaar  call assert_fails('let val = [] ? 1 : 2', 'E745:')
929d8d0b5cSBram Moolenaar  call assert_fails('let val = 1 ? 5+ : 6', 'E121:')
939d8d0b5cSBram Moolenaar  call assert_fails('let val = 1 ? 0 : 5+', 'E15:')
949d8d0b5cSBram Moolenaar  call assert_false(exists('val'))
959d8d0b5cSBram Moolenaar
969d8d0b5cSBram Moolenaar  " Test for errors in logical operators
979d8d0b5cSBram Moolenaar  let @a = 'if [] || 0 | let val = 2 | endif'
989d8d0b5cSBram Moolenaar  call assert_fails('exe @a', 'E745:')
999d8d0b5cSBram Moolenaar  call assert_fails('call feedkeys(":let val = 0 || []\<cr>", "xt")', 'E745:')
1009d8d0b5cSBram Moolenaar  call assert_fails('exe "let val = [] && 5"', 'E745:')
1019d8d0b5cSBram Moolenaar  call assert_fails('exe "let val = 6 && []"', 'E745:')
1024a137b45SBram Moolenaarendfunc
10331b81604SBram Moolenaar
10431b81604SBram Moolenaarfunc s:set_arg1(a) abort
10531b81604SBram Moolenaar  let a:a = 1
10631b81604SBram Moolenaarendfunction
10731b81604SBram Moolenaar
10831b81604SBram Moolenaarfunc s:set_arg2(a) abort
10931b81604SBram Moolenaar  let a:b = 1
11031b81604SBram Moolenaarendfunction
11131b81604SBram Moolenaar
11231b81604SBram Moolenaarfunc s:set_arg3(a) abort
11331b81604SBram Moolenaar  let b = a:
11431b81604SBram Moolenaar  let b['a'] = 1
11531b81604SBram Moolenaarendfunction
11631b81604SBram Moolenaar
11731b81604SBram Moolenaarfunc s:set_arg4(a) abort
11831b81604SBram Moolenaar  let b = a:
11931b81604SBram Moolenaar  let b['a'] = 1
12031b81604SBram Moolenaarendfunction
12131b81604SBram Moolenaar
12231b81604SBram Moolenaarfunc s:set_arg5(a) abort
12331b81604SBram Moolenaar  let b = a:
12431b81604SBram Moolenaar  let b['a'][0] = 1
12531b81604SBram Moolenaarendfunction
12631b81604SBram Moolenaar
12731b81604SBram Moolenaarfunc s:set_arg6(a) abort
12831b81604SBram Moolenaar  let a:a[0] = 1
12931b81604SBram Moolenaarendfunction
13031b81604SBram Moolenaar
13131b81604SBram Moolenaarfunc s:set_arg7(a) abort
13231b81604SBram Moolenaar  call extend(a:, {'a': 1})
13331b81604SBram Moolenaarendfunction
13431b81604SBram Moolenaar
13531b81604SBram Moolenaarfunc s:set_arg8(a) abort
13631b81604SBram Moolenaar  call extend(a:, {'b': 1})
13731b81604SBram Moolenaarendfunction
13831b81604SBram Moolenaar
13931b81604SBram Moolenaarfunc s:set_arg9(a) abort
14031b81604SBram Moolenaar  let a:['b'] = 1
14131b81604SBram Moolenaarendfunction
14231b81604SBram Moolenaar
14331b81604SBram Moolenaarfunc s:set_arg10(a) abort
14431b81604SBram Moolenaar  let b = a:
14531b81604SBram Moolenaar  call extend(b, {'a': 1})
14631b81604SBram Moolenaarendfunction
14731b81604SBram Moolenaar
14831b81604SBram Moolenaarfunc s:set_arg11(a) abort
14931b81604SBram Moolenaar  let b = a:
15031b81604SBram Moolenaar  call extend(b, {'b': 1})
15131b81604SBram Moolenaarendfunction
15231b81604SBram Moolenaar
15331b81604SBram Moolenaarfunc s:set_arg12(a) abort
15431b81604SBram Moolenaar  let b = a:
15531b81604SBram Moolenaar  let b['b'] = 1
15631b81604SBram Moolenaarendfunction
15731b81604SBram Moolenaar
15831b81604SBram Moolenaarfunc Test_let_arg_fail()
15931b81604SBram Moolenaar  call assert_fails('call s:set_arg1(1)', 'E46:')
16031b81604SBram Moolenaar  call assert_fails('call s:set_arg2(1)', 'E461:')
16131b81604SBram Moolenaar  call assert_fails('call s:set_arg3(1)', 'E46:')
16231b81604SBram Moolenaar  call assert_fails('call s:set_arg4(1)', 'E46:')
16331b81604SBram Moolenaar  call assert_fails('call s:set_arg5(1)', 'E46:')
16431b81604SBram Moolenaar  call s:set_arg6([0])
16531b81604SBram Moolenaar  call assert_fails('call s:set_arg7(1)', 'E742:')
16631b81604SBram Moolenaar  call assert_fails('call s:set_arg8(1)', 'E742:')
16731b81604SBram Moolenaar  call assert_fails('call s:set_arg9(1)', 'E461:')
16831b81604SBram Moolenaar  call assert_fails('call s:set_arg10(1)', 'E742:')
16931b81604SBram Moolenaar  call assert_fails('call s:set_arg11(1)', 'E742:')
17031b81604SBram Moolenaar  call assert_fails('call s:set_arg12(1)', 'E461:')
17131b81604SBram Moolenaarendfunction
17231b81604SBram Moolenaar
17331b81604SBram Moolenaarfunc s:set_varg1(...) abort
17431b81604SBram Moolenaar  let a:000 = []
17531b81604SBram Moolenaarendfunction
17631b81604SBram Moolenaar
17731b81604SBram Moolenaarfunc s:set_varg2(...) abort
17831b81604SBram Moolenaar  let a:000[0] = 1
17931b81604SBram Moolenaarendfunction
18031b81604SBram Moolenaar
18131b81604SBram Moolenaarfunc s:set_varg3(...) abort
18231b81604SBram Moolenaar  let a:000 += [1]
18331b81604SBram Moolenaarendfunction
18431b81604SBram Moolenaar
18531b81604SBram Moolenaarfunc s:set_varg4(...) abort
18631b81604SBram Moolenaar  call add(a:000, 1)
18731b81604SBram Moolenaarendfunction
18831b81604SBram Moolenaar
18931b81604SBram Moolenaarfunc s:set_varg5(...) abort
19031b81604SBram Moolenaar  let a:000[0][0] = 1
19131b81604SBram Moolenaarendfunction
19231b81604SBram Moolenaar
19331b81604SBram Moolenaarfunc s:set_varg6(...) abort
19431b81604SBram Moolenaar  let b = a:000
19531b81604SBram Moolenaar  let b[0] = 1
19631b81604SBram Moolenaarendfunction
19731b81604SBram Moolenaar
19831b81604SBram Moolenaarfunc s:set_varg7(...) abort
19931b81604SBram Moolenaar  let b = a:000
20031b81604SBram Moolenaar  let b += [1]
20131b81604SBram Moolenaarendfunction
20231b81604SBram Moolenaar
20331b81604SBram Moolenaarfunc s:set_varg8(...) abort
20431b81604SBram Moolenaar  let b = a:000
20531b81604SBram Moolenaar  call add(b, 1)
20631b81604SBram Moolenaarendfunction
20731b81604SBram Moolenaar
20831b81604SBram Moolenaarfunc s:set_varg9(...) abort
20931b81604SBram Moolenaar  let b = a:000
21031b81604SBram Moolenaar  let b[0][0] = 1
21131b81604SBram Moolenaarendfunction
21231b81604SBram Moolenaar
21331b81604SBram Moolenaarfunc Test_let_varg_fail()
21431b81604SBram Moolenaar  call assert_fails('call s:set_varg1(1)', 'E46:')
21531b81604SBram Moolenaar  call assert_fails('call s:set_varg2(1)', 'E742:')
21631b81604SBram Moolenaar  call assert_fails('call s:set_varg3(1)', 'E46:')
21731b81604SBram Moolenaar  call assert_fails('call s:set_varg4(1)', 'E742:')
21831b81604SBram Moolenaar  call s:set_varg5([0])
21931b81604SBram Moolenaar  call assert_fails('call s:set_varg6(1)', 'E742:')
22005c00c03SBram Moolenaar  call assert_fails('call s:set_varg7(1)', 'E742:')
22131b81604SBram Moolenaar  call assert_fails('call s:set_varg8(1)', 'E742:')
22231b81604SBram Moolenaar  call s:set_varg9([0])
22331b81604SBram Moolenaarendfunction
224f0908e6fSBram Moolenaar
225f0908e6fSBram Moolenaarfunc Test_let_utf8_environment()
226f0908e6fSBram Moolenaar  let $a = 'ĀĒĪŌŪあいうえお'
227f0908e6fSBram Moolenaar  call assert_equal('ĀĒĪŌŪあいうえお', $a)
228f0908e6fSBram Moolenaarendfunc
229f5842c5aSBram Moolenaar
230fcf8a874SBram Moolenaarfunc Test_let_no_type_checking()
231fcf8a874SBram Moolenaar  let v = 1
232fcf8a874SBram Moolenaar  let v = [1,2,3]
233fcf8a874SBram Moolenaar  let v = {'a': 1, 'b': 2}
234fcf8a874SBram Moolenaar  let v = 3.4
235fcf8a874SBram Moolenaar  let v = 'hello'
236fcf8a874SBram Moolenaarendfunc
237fcf8a874SBram Moolenaar
238fcf8a874SBram Moolenaarfunc Test_let_termcap()
239fcf8a874SBram Moolenaar  " Terminal code
240fcf8a874SBram Moolenaar  let old_t_te = &t_te
241fcf8a874SBram Moolenaar  let &t_te = "\<Esc>[yes;"
242fcf8a874SBram Moolenaar  call assert_match('t_te.*^[[yes;', execute("set termcap"))
243fcf8a874SBram Moolenaar  let &t_te = old_t_te
244fcf8a874SBram Moolenaar
245fcf8a874SBram Moolenaar  if exists("+t_k1")
246fcf8a874SBram Moolenaar    " Key code
247fcf8a874SBram Moolenaar    let old_t_k1 = &t_k1
248fcf8a874SBram Moolenaar    let &t_k1 = "that"
249fcf8a874SBram Moolenaar    call assert_match('t_k1.*that', execute("set termcap"))
250fcf8a874SBram Moolenaar    let &t_k1 = old_t_k1
251fcf8a874SBram Moolenaar  endif
252fcf8a874SBram Moolenaar
253e2e4075fSBram Moolenaar  call assert_fails('let x = &t_xx', 'E113:')
254fcf8a874SBram Moolenaar  let &t_xx = "yes"
255fcf8a874SBram Moolenaar  call assert_equal("yes", &t_xx)
256fcf8a874SBram Moolenaar  let &t_xx = ""
257e2e4075fSBram Moolenaar  call assert_fails('let x = &t_xx', 'E113:')
258fcf8a874SBram Moolenaarendfunc
259fcf8a874SBram Moolenaar
260fcf8a874SBram Moolenaarfunc Test_let_option_error()
261fcf8a874SBram Moolenaar  let _w = &tw
262fcf8a874SBram Moolenaar  let &tw = 80
263e2e4075fSBram Moolenaar  call assert_fails('let &tw .= 1', 'E734:')
264fcf8a874SBram Moolenaar  call assert_equal(80, &tw)
265fcf8a874SBram Moolenaar  let &tw = _w
266fcf8a874SBram Moolenaar
267fcf8a874SBram Moolenaar  let _w = &fillchars
268fcf8a874SBram Moolenaar  let &fillchars = "vert:|"
269e2e4075fSBram Moolenaar  call assert_fails('let &fillchars += "diff:-"', 'E734:')
270fcf8a874SBram Moolenaar  call assert_equal("vert:|", &fillchars)
271fcf8a874SBram Moolenaar  let &fillchars = _w
272fcf8a874SBram Moolenaarendfunc
273fcf8a874SBram Moolenaar
2748dfcce3aSBram Moolenaar" Errors with the :let statement
275fcf8a874SBram Moolenaarfunc Test_let_errors()
276fcf8a874SBram Moolenaar  let s = 'abcd'
277fcf8a874SBram Moolenaar  call assert_fails('let s[1] = 5', 'E689:')
278fcf8a874SBram Moolenaar
279fcf8a874SBram Moolenaar  let l = [1, 2, 3]
280fcf8a874SBram Moolenaar  call assert_fails('let l[:] = 5', 'E709:')
2818dfcce3aSBram Moolenaar
282*b521766cSBram Moolenaar  call assert_fails('let x:lnum=5', ['E121:', 'E121:'])
2838dfcce3aSBram Moolenaar  call assert_fails('let v:=5', 'E461:')
2848dfcce3aSBram Moolenaar  call assert_fails('let [a]', 'E474:')
2858dfcce3aSBram Moolenaar  call assert_fails('let [a, b] = [', 'E697:')
2868dfcce3aSBram Moolenaar  call assert_fails('let [a, b] = [10, 20', 'E696:')
2878dfcce3aSBram Moolenaar  call assert_fails('let [a, b] = 10', 'E714:')
2888dfcce3aSBram Moolenaar  call assert_fails('let [a, , b] = [10, 20]', 'E475:')
2898dfcce3aSBram Moolenaar  call assert_fails('let [a, b&] = [10, 20]', 'E475:')
2908dfcce3aSBram Moolenaar  call assert_fails('let $ = 10', 'E475:')
2918dfcce3aSBram Moolenaar  call assert_fails('let $FOO[1] = "abc"', 'E18:')
2928dfcce3aSBram Moolenaar  call assert_fails('let &buftype[1] = "nofile"', 'E18:')
2938dfcce3aSBram Moolenaar  let s = "var"
2948dfcce3aSBram Moolenaar  let var = 1
295ea04a6e8SBram Moolenaar  call assert_fails('let var += [1,2]', 'E734:')
2963a3b10e8SBram Moolenaar  call assert_fails('let {s}.1 = 2', 'E1203:')
2978b633135SBram Moolenaar  call assert_fails('let a[1] = 5', 'E121:')
2988b633135SBram Moolenaar  let l = [[1,2]]
2998b633135SBram Moolenaar  call assert_fails('let l[:][0] = [5]', 'E708:')
3008b633135SBram Moolenaar  let d = {'k' : 4}
30163be3d4bSBram Moolenaar  call assert_fails('let d.# = 5', 'E488:')
30258fb7c39SBram Moolenaar  call assert_fails('let d.m += 5', 'E716:')
3039d8d0b5cSBram Moolenaar  call assert_fails('let m = d[{]', 'E15:')
3048b633135SBram Moolenaar  let l = [1, 2]
3058b633135SBram Moolenaar  call assert_fails('let l[2] = 0', 'E684:')
3068b633135SBram Moolenaar  call assert_fails('let l[0:1] = [1, 2, 3]', 'E710:')
3078b633135SBram Moolenaar  call assert_fails('let l[-2:-3] = [3, 4]', 'E684:')
3088b633135SBram Moolenaar  call assert_fails('let l[0:4] = [5, 6]', 'E711:')
3099d8d0b5cSBram Moolenaar  call assert_fails('let l -= 2', 'E734:')
3109d8d0b5cSBram Moolenaar  call assert_fails('let l += 2', 'E734:')
311ea04a6e8SBram Moolenaar  call assert_fails('let g:["a;b"] = 10', 'E461:')
312ea04a6e8SBram Moolenaar  call assert_fails('let g:.min = function("max")', 'E704:')
3139d8d0b5cSBram Moolenaar  if has('channel')
3149d8d0b5cSBram Moolenaar    let ch = test_null_channel()
3159d8d0b5cSBram Moolenaar    call assert_fails('let ch += 1', 'E734:')
3169d8d0b5cSBram Moolenaar  endif
317fae55a9cSBram Moolenaar  call assert_fails('let name = "a" .. "b",', 'E488: Trailing characters: ,')
3188dfcce3aSBram Moolenaar
3198dfcce3aSBram Moolenaar  " This test works only when the language is English
3208dfcce3aSBram Moolenaar  if v:lang == "C" || v:lang =~ '^[Ee]n'
3218dfcce3aSBram Moolenaar    call assert_fails('let [a ; b;] = [10, 20]',
3228dfcce3aSBram Moolenaar          \ 'Double ; in list of variables')
3238dfcce3aSBram Moolenaar  endif
324fcf8a874SBram Moolenaarendfunc
325fcf8a874SBram Moolenaar
3268471e570SBram Moolenaarfunc Test_let_heredoc_fails()
3278471e570SBram Moolenaar  call assert_fails('let v =<< marker', 'E991:')
3288dfcce3aSBram Moolenaar  try
3298dfcce3aSBram Moolenaar    exe "let v =<< TEXT | abc | TEXT"
3308dfcce3aSBram Moolenaar    call assert_report('No exception thrown')
3318dfcce3aSBram Moolenaar  catch /E488:/
3328dfcce3aSBram Moolenaar  catch
3338dfcce3aSBram Moolenaar    call assert_report("Caught exception: " .. v:exception)
3348dfcce3aSBram Moolenaar  endtry
3358471e570SBram Moolenaar
3368471e570SBram Moolenaar  let text =<< trim END
3378471e570SBram Moolenaar  func WrongSyntax()
3388471e570SBram Moolenaar    let v =<< that there
3398471e570SBram Moolenaar  endfunc
3408471e570SBram Moolenaar  END
3418471e570SBram Moolenaar  call writefile(text, 'XheredocFail')
342b5b9480eSBram Moolenaar  call assert_fails('source XheredocFail', 'E1145:')
3438471e570SBram Moolenaar  call delete('XheredocFail')
3448471e570SBram Moolenaar
34524582007SBram Moolenaar  let text =<< trim CodeEnd
3468471e570SBram Moolenaar  func MissingEnd()
3478471e570SBram Moolenaar    let v =<< END
3488471e570SBram Moolenaar  endfunc
34924582007SBram Moolenaar  CodeEnd
3508471e570SBram Moolenaar  call writefile(text, 'XheredocWrong')
351b5b9480eSBram Moolenaar  call assert_fails('source XheredocWrong', 'E1145:')
3528471e570SBram Moolenaar  call delete('XheredocWrong')
35324582007SBram Moolenaar
35424582007SBram Moolenaar  let text =<< trim TEXTend
35524582007SBram Moolenaar    let v =<< " comment
35624582007SBram Moolenaar  TEXTend
35724582007SBram Moolenaar  call writefile(text, 'XheredocNoMarker')
35824582007SBram Moolenaar  call assert_fails('source XheredocNoMarker', 'E172:')
35924582007SBram Moolenaar  call delete('XheredocNoMarker')
36024582007SBram Moolenaar
36124582007SBram Moolenaar  let text =<< trim TEXTend
36224582007SBram Moolenaar    let v =<< text
36324582007SBram Moolenaar  TEXTend
36424582007SBram Moolenaar  call writefile(text, 'XheredocBadMarker')
36524582007SBram Moolenaar  call assert_fails('source XheredocBadMarker', 'E221:')
36624582007SBram Moolenaar  call delete('XheredocBadMarker')
3678dfcce3aSBram Moolenaar
3688dfcce3aSBram Moolenaar  call writefile(['let v =<< TEXT', 'abc'], 'XheredocMissingMarker')
3698dfcce3aSBram Moolenaar  call assert_fails('source XheredocMissingMarker', 'E990:')
3708dfcce3aSBram Moolenaar  call delete('XheredocMissingMarker')
3718471e570SBram Moolenaarendfunc
3728471e570SBram Moolenaar
373ecaa75b4SBram Moolenaarfunc Test_let_heredoc_trim_no_indent_marker()
374ecaa75b4SBram Moolenaar  let text =<< trim END
375ecaa75b4SBram Moolenaar  Text
376ecaa75b4SBram Moolenaar  with
377ecaa75b4SBram Moolenaar  indent
378ecaa75b4SBram MoolenaarEND
379ecaa75b4SBram Moolenaar  call assert_equal(['Text', 'with', 'indent'], text)
380ecaa75b4SBram Moolenaarendfunc
381ecaa75b4SBram Moolenaar
382f5842c5aSBram Moolenaar" Test for the setting a variable using the heredoc syntax
383f5842c5aSBram Moolenaarfunc Test_let_heredoc()
384f5842c5aSBram Moolenaar  let var1 =<< END
385f5842c5aSBram MoolenaarSome sample text
386f5842c5aSBram Moolenaar	Text with indent
387f5842c5aSBram Moolenaar  !@#$%^&*()-+_={}|[]\~`:";'<>?,./
388f5842c5aSBram MoolenaarEND
389f5842c5aSBram Moolenaar
390f5842c5aSBram Moolenaar  call assert_equal(["Some sample text", "\tText with indent", "  !@#$%^&*()-+_={}|[]\\~`:\";'<>?,./"], var1)
391f5842c5aSBram Moolenaar
39224582007SBram Moolenaar  let var2 =<< XXX
393f5842c5aSBram MoolenaarEditor
39424582007SBram MoolenaarXXX
395f5842c5aSBram Moolenaar  call assert_equal(['Editor'], var2)
396f5842c5aSBram Moolenaar
397f5842c5aSBram Moolenaar  let var3 =<<END
398f5842c5aSBram MoolenaarEND
399f5842c5aSBram Moolenaar  call assert_equal([], var3)
400f5842c5aSBram Moolenaar
401f5842c5aSBram Moolenaar  let var3 =<<END
402f5842c5aSBram Moolenaarvim
403f5842c5aSBram Moolenaar
404f5842c5aSBram Moolenaarend
405f5842c5aSBram Moolenaar  END
406f5842c5aSBram MoolenaarEND
407f5842c5aSBram MoolenaarEND
408f5842c5aSBram Moolenaar  call assert_equal(['vim', '', 'end', '  END', 'END '], var3)
409f5842c5aSBram Moolenaar
410f5842c5aSBram Moolenaar	let var1 =<< trim END
411f5842c5aSBram Moolenaar	Line1
412f5842c5aSBram Moolenaar	  Line2
413f5842c5aSBram Moolenaar		Line3
414f5842c5aSBram Moolenaar	 END
415f5842c5aSBram Moolenaar	END
416f5842c5aSBram Moolenaar  call assert_equal(['Line1', '  Line2', "\tLine3", ' END'], var1)
417f5842c5aSBram Moolenaar
418e7eb9270SBram Moolenaar  let var1 =<< trim !!!
419e7eb9270SBram Moolenaar	Line1
420e7eb9270SBram Moolenaar	 line2
421e7eb9270SBram Moolenaar		Line3
422e7eb9270SBram Moolenaar	!!!
423e7eb9270SBram Moolenaar  !!!
424e7eb9270SBram Moolenaar  call assert_equal(['Line1', ' line2', "\tLine3", '!!!',], var1)
425e7eb9270SBram Moolenaar
42624582007SBram Moolenaar  let var1 =<< trim XX
427f5842c5aSBram Moolenaar    Line1
42824582007SBram Moolenaar  XX
429f5842c5aSBram Moolenaar  call assert_equal(['Line1'], var1)
430f5842c5aSBram Moolenaar
4318471e570SBram Moolenaar  " ignore "endfunc"
4328471e570SBram Moolenaar  let var1 =<< END
4338471e570SBram Moolenaarsomething
434f5842c5aSBram Moolenaarendfunc
4358471e570SBram MoolenaarEND
4368471e570SBram Moolenaar  call assert_equal(['something', 'endfunc'], var1)
437f5842c5aSBram Moolenaar
4388471e570SBram Moolenaar  " ignore "endfunc" with trim
4398471e570SBram Moolenaar  let var1 =<< trim END
4408471e570SBram Moolenaar  something
441f5842c5aSBram Moolenaar  endfunc
4428471e570SBram Moolenaar  END
4438471e570SBram Moolenaar  call assert_equal(['something', 'endfunc'], var1)
444f5842c5aSBram Moolenaar
445e96a2498SBram Moolenaar  " not concatenate lines
446e96a2498SBram Moolenaar  let var1 =<< END
447e96a2498SBram Moolenaarsome
448e96a2498SBram Moolenaar  \thing
449e96a2498SBram Moolenaar  \ else
450e96a2498SBram MoolenaarEND
451e96a2498SBram Moolenaar  call assert_equal(['some', '  \thing', '  \ else'], var1)
452e96a2498SBram Moolenaar
4538471e570SBram Moolenaar  " ignore "python << xx"
4548471e570SBram Moolenaar  let var1 =<<END
4558471e570SBram Moolenaarsomething
4568471e570SBram Moolenaarpython << xx
4578471e570SBram MoolenaarEND
4588471e570SBram Moolenaar  call assert_equal(['something', 'python << xx'], var1)
4598471e570SBram Moolenaar
4608471e570SBram Moolenaar  " ignore "python << xx" with trim
4618471e570SBram Moolenaar  let var1 =<< trim END
4628471e570SBram Moolenaar  something
4638471e570SBram Moolenaar  python << xx
4648471e570SBram Moolenaar  END
4658471e570SBram Moolenaar  call assert_equal(['something', 'python << xx'], var1)
4668471e570SBram Moolenaar
4678471e570SBram Moolenaar  " ignore "append"
46824582007SBram Moolenaar  let var1 =<< E
4698471e570SBram Moolenaarsomething
4708471e570SBram Moolenaarapp
47124582007SBram MoolenaarE
4728471e570SBram Moolenaar  call assert_equal(['something', 'app'], var1)
4738471e570SBram Moolenaar
4748471e570SBram Moolenaar  " ignore "append" with trim
47524582007SBram Moolenaar  let var1 =<< trim END
4768471e570SBram Moolenaar  something
4778471e570SBram Moolenaar  app
47824582007SBram Moolenaar  END
4798471e570SBram Moolenaar  call assert_equal(['something', 'app'], var1)
480b1ba9abcSBram Moolenaar
481b1ba9abcSBram Moolenaar  let check = []
482b1ba9abcSBram Moolenaar  if 0
483b1ba9abcSBram Moolenaar     let check =<< trim END
484b1ba9abcSBram Moolenaar       from heredoc
485b1ba9abcSBram Moolenaar     END
486b1ba9abcSBram Moolenaar  endif
487b1ba9abcSBram Moolenaar  call assert_equal([], check)
4881e673b9eSBram Moolenaar
4891e673b9eSBram Moolenaar  " unpack assignment
4901e673b9eSBram Moolenaar  let [a, b, c] =<< END
4911e673b9eSBram Moolenaar     x
4921e673b9eSBram Moolenaar     \y
4931e673b9eSBram Moolenaar     z
4941e673b9eSBram MoolenaarEND
4951e673b9eSBram Moolenaar  call assert_equal(['     x', '     \y', '     z'], [a, b, c])
496f5842c5aSBram Moolenaarendfunc
4978dfcce3aSBram Moolenaar
4988dfcce3aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
499