1cfe435d7SBram Moolenaar" Test commands that are not compiled in a :def function
2cfe435d7SBram Moolenaar
36378c4feSBram Moolenaarsource check.vim
4cfe435d7SBram Moolenaarsource vim9.vim
5e88c8e80SBram Moolenaarsource term_util.vim
6e9f262bdSBram Moolenaarsource view_util.vim
7cfe435d7SBram Moolenaar
839f3b141SBram Moolenaardef Test_vim9cmd()
939f3b141SBram Moolenaar  var lines =<< trim END
1039f3b141SBram Moolenaar    vim9cmd var x = 123
1139f3b141SBram Moolenaar    let s:y = 'yes'
1239f3b141SBram Moolenaar    vim9c assert_equal(123, x)
1339f3b141SBram Moolenaar    vim9cm assert_equal('yes', y)
1439f3b141SBram Moolenaar  END
1539f3b141SBram Moolenaar  CheckScriptSuccess(lines)
16dd9de50fSBram Moolenaar
176d37e8e3SDominique Pelle  assert_fails('vim9cmd', 'E1164:')
18dd9de50fSBram Moolenaar  assert_fails('legacy', 'E1234:')
192596a4e7SBram Moolenaar  assert_fails('vim9cmd echo "con" . "cat"', 'E15:')
20678b207fSBram Moolenaar
21678b207fSBram Moolenaar  lines =<< trim END
22dd9de50fSBram Moolenaar      let str = 'con'
23dd9de50fSBram Moolenaar      vim9cmd str .= 'cat'
24dd9de50fSBram Moolenaar  END
25dd9de50fSBram Moolenaar  CheckScriptFailure(lines, 'E492:')
26dd9de50fSBram Moolenaar
27dd9de50fSBram Moolenaar  lines =<< trim END
28dd9de50fSBram Moolenaar      vim9script
29dd9de50fSBram Moolenaar      legacy echo "con" . "cat"
30dd9de50fSBram Moolenaar      legacy let str = 'con'
31dd9de50fSBram Moolenaar      legacy let str .= 'cat'
32dd9de50fSBram Moolenaar  END
33dd9de50fSBram Moolenaar  CheckScriptSuccess(lines)
34dd9de50fSBram Moolenaar
35dd9de50fSBram Moolenaar  lines =<< trim END
36678b207fSBram Moolenaar      vim9script
37678b207fSBram Moolenaar      def Foo()
38678b207fSBram Moolenaar        g:found_bar = "bar"
39678b207fSBram Moolenaar      enddef
40678b207fSBram Moolenaar      nmap ,; :vim9cmd <SID>Foo()<CR>
41678b207fSBram Moolenaar  END
42678b207fSBram Moolenaar  CheckScriptSuccess(lines)
43dd9de50fSBram Moolenaar
44678b207fSBram Moolenaar  feedkeys(',;', 'xt')
45678b207fSBram Moolenaar  assert_equal("bar", g:found_bar)
46678b207fSBram Moolenaar  nunmap ,;
47678b207fSBram Moolenaar  unlet g:found_bar
48dd9de50fSBram Moolenaar
49dd9de50fSBram Moolenaar  lines =<< trim END
50dd9de50fSBram Moolenaar      vim9script
51dd9de50fSBram Moolenaar      legacy echo 1'000
52dd9de50fSBram Moolenaar  END
53dd9de50fSBram Moolenaar  CheckScriptFailure(lines, 'E115:')
54dd9de50fSBram Moolenaar
55dd9de50fSBram Moolenaar  if has('float')
56dd9de50fSBram Moolenaar    lines =<< trim END
57dd9de50fSBram Moolenaar        vim9script
58dd9de50fSBram Moolenaar        echo .10
59dd9de50fSBram Moolenaar    END
60dd9de50fSBram Moolenaar    CheckScriptSuccess(lines)
61dd9de50fSBram Moolenaar    lines =<< trim END
62dd9de50fSBram Moolenaar        vim9cmd echo .10
63dd9de50fSBram Moolenaar    END
64dd9de50fSBram Moolenaar    CheckScriptSuccess(lines)
65dd9de50fSBram Moolenaar    lines =<< trim END
66dd9de50fSBram Moolenaar        vim9script
67dd9de50fSBram Moolenaar        legacy echo .10
68dd9de50fSBram Moolenaar    END
69dd9de50fSBram Moolenaar    CheckScriptFailure(lines, 'E15:')
70dd9de50fSBram Moolenaar  endif
71dd9de50fSBram Moolenaar
72dd9de50fSBram Moolenaar  echo v:version
73dd9de50fSBram Moolenaar  assert_fails('vim9cmd echo version', 'E121:')
74dd9de50fSBram Moolenaar  lines =<< trim END
75dd9de50fSBram Moolenaar      vim9script
76dd9de50fSBram Moolenaar      echo version
77dd9de50fSBram Moolenaar  END
78dd9de50fSBram Moolenaar  CheckScriptFailure(lines, 'E121:')
79dd9de50fSBram Moolenaar  lines =<< trim END
80dd9de50fSBram Moolenaar      vim9script
81dd9de50fSBram Moolenaar      legacy echo version
82dd9de50fSBram Moolenaar  END
83dd9de50fSBram Moolenaar  CheckScriptSuccess(lines)
8439f3b141SBram Moolenaarenddef
8539f3b141SBram Moolenaar
86cfe435d7SBram Moolenaardef Test_edit_wildcards()
87ac564082SBram Moolenaar  var filename = 'Xtest'
88cfe435d7SBram Moolenaar  edit `=filename`
89cfe435d7SBram Moolenaar  assert_equal('Xtest', bufname())
90cfe435d7SBram Moolenaar
91ac564082SBram Moolenaar  var filenr = 123
92cfe435d7SBram Moolenaar  edit Xtest`=filenr`
93cfe435d7SBram Moolenaar  assert_equal('Xtest123', bufname())
94cfe435d7SBram Moolenaar
95cfe435d7SBram Moolenaar  filenr = 77
96cfe435d7SBram Moolenaar  edit `=filename``=filenr`
97cfe435d7SBram Moolenaar  assert_equal('Xtest77', bufname())
98cfe435d7SBram Moolenaar
99cfe435d7SBram Moolenaar  edit X`=filename`xx`=filenr`yy
100cfe435d7SBram Moolenaar  assert_equal('XXtestxx77yy', bufname())
101025cb1caSBram Moolenaar
102025cb1caSBram Moolenaar  CheckDefFailure(['edit `=xxx`'], 'E1001:')
103025cb1caSBram Moolenaar  CheckDefFailure(['edit `="foo"'], 'E1083:')
104b288ba9fSBram Moolenaar
105b288ba9fSBram Moolenaar  var files = ['file 1', 'file%2', 'file# 3']
106b288ba9fSBram Moolenaar  args `=files`
107b288ba9fSBram Moolenaar  assert_equal(files, argv())
108cfe435d7SBram Moolenaarenddef
109cfe435d7SBram Moolenaar
1104389f9cdSBram Moolenaardef Test_expand_alternate_file()
1114389f9cdSBram Moolenaar  var lines =<< trim END
1124389f9cdSBram Moolenaar    edit Xfileone
1134389f9cdSBram Moolenaar    var bone = bufnr()
1144389f9cdSBram Moolenaar    edit Xfiletwo
1154389f9cdSBram Moolenaar    var btwo = bufnr()
1164389f9cdSBram Moolenaar    edit Xfilethree
1174389f9cdSBram Moolenaar    var bthree = bufnr()
1184389f9cdSBram Moolenaar
1194389f9cdSBram Moolenaar    edit #
1204389f9cdSBram Moolenaar    assert_equal(bthree, bufnr())
1214389f9cdSBram Moolenaar    edit %%
1224389f9cdSBram Moolenaar    assert_equal(btwo, bufnr())
1234389f9cdSBram Moolenaar    edit %% # comment
1244389f9cdSBram Moolenaar    assert_equal(bthree, bufnr())
1254389f9cdSBram Moolenaar    edit %%yy
1264389f9cdSBram Moolenaar    assert_equal('Xfiletwoyy', bufname())
1274389f9cdSBram Moolenaar
1284389f9cdSBram Moolenaar    exe "edit %%" .. bone
1294389f9cdSBram Moolenaar    assert_equal(bone, bufnr())
1304389f9cdSBram Moolenaar    exe "edit %%" .. btwo .. "xx"
1314389f9cdSBram Moolenaar    assert_equal('Xfiletwoxx', bufname())
1324389f9cdSBram Moolenaar
1334389f9cdSBram Moolenaar    next Xfileone Xfiletwo Xfilethree
1344389f9cdSBram Moolenaar    assert_equal('Xfileone', argv(0))
1354389f9cdSBram Moolenaar    assert_equal('Xfiletwo', argv(1))
1364389f9cdSBram Moolenaar    assert_equal('Xfilethree', argv(2))
1374389f9cdSBram Moolenaar    next %%%zz
1384389f9cdSBram Moolenaar    assert_equal('Xfileone', argv(0))
1394389f9cdSBram Moolenaar    assert_equal('Xfiletwo', argv(1))
1404389f9cdSBram Moolenaar    assert_equal('Xfilethreezz', argv(2))
1414389f9cdSBram Moolenaar
1424389f9cdSBram Moolenaar    v:oldfiles = ['Xonefile', 'Xtwofile']
1434389f9cdSBram Moolenaar    edit %%<1
1444389f9cdSBram Moolenaar    assert_equal('Xonefile', bufname())
1454389f9cdSBram Moolenaar    edit %%<2
1464389f9cdSBram Moolenaar    assert_equal('Xtwofile', bufname())
1474389f9cdSBram Moolenaar    assert_fails('edit %%<3', 'E684:')
1484389f9cdSBram Moolenaar
1494389f9cdSBram Moolenaar    edit Xfileone.vim
1504389f9cdSBram Moolenaar    edit Xfiletwo
1514389f9cdSBram Moolenaar    edit %%:r
1524389f9cdSBram Moolenaar    assert_equal('Xfileone', bufname())
153dfbc5fd8SBram Moolenaar
154dfbc5fd8SBram Moolenaar    assert_false(bufexists('altfoo'))
155dfbc5fd8SBram Moolenaar    edit altfoo
156dfbc5fd8SBram Moolenaar    edit bar
157dfbc5fd8SBram Moolenaar    assert_true(bufexists('altfoo'))
158dfbc5fd8SBram Moolenaar    assert_true(buflisted('altfoo'))
159dfbc5fd8SBram Moolenaar    bdel %%
160dfbc5fd8SBram Moolenaar    assert_true(bufexists('altfoo'))
161dfbc5fd8SBram Moolenaar    assert_false(buflisted('altfoo'))
162dfbc5fd8SBram Moolenaar    bwipe! altfoo
163dfbc5fd8SBram Moolenaar    bwipe! bar
1644389f9cdSBram Moolenaar  END
1654389f9cdSBram Moolenaar  CheckDefAndScriptSuccess(lines)
1664389f9cdSBram Moolenaarenddef
1674389f9cdSBram Moolenaar
16856ce9ea3SBram Moolenaardef Test_global_backtick_expansion()
16956ce9ea3SBram Moolenaar  new
17056ce9ea3SBram Moolenaar  setline(1, 'xx')
17156ce9ea3SBram Moolenaar  var name = 'foobar'
17256ce9ea3SBram Moolenaar  g/^xx/s/.*/`=name`
17356ce9ea3SBram Moolenaar  assert_equal('foobar', getline(1))
17456ce9ea3SBram Moolenaar  bwipe!
17556ce9ea3SBram Moolenaarenddef
17656ce9ea3SBram Moolenaar
177ecac591cSBram Moolenaardef Test_folddo_backtick_expansion()
178ecac591cSBram Moolenaar  new
179ecac591cSBram Moolenaar  var name = 'xxx'
180ecac591cSBram Moolenaar  folddoopen edit `=name`
181ecac591cSBram Moolenaar  assert_equal('xxx', bufname())
182ecac591cSBram Moolenaar  bwipe!
183ecac591cSBram Moolenaar
184ecac591cSBram Moolenaar  new
185ecac591cSBram Moolenaar  setline(1, ['one', 'two'])
186ecac591cSBram Moolenaar  set nomodified
187ecac591cSBram Moolenaar  :1,2fold
188ecac591cSBram Moolenaar  foldclose
189ecac591cSBram Moolenaar  folddoclose edit `=name`
190ecac591cSBram Moolenaar  assert_equal('xxx', bufname())
191ecac591cSBram Moolenaar  bwipe!
192ecac591cSBram Moolenaarenddef
193ecac591cSBram Moolenaar
1946378c4feSBram Moolenaardef Test_hardcopy_wildcards()
1956378c4feSBram Moolenaar  CheckUnix
1966378c4feSBram Moolenaar  CheckFeature postscript
1976378c4feSBram Moolenaar
198ac564082SBram Moolenaar  var outfile = 'print'
1996378c4feSBram Moolenaar  hardcopy > X`=outfile`.ps
2006378c4feSBram Moolenaar  assert_true(filereadable('Xprint.ps'))
2016378c4feSBram Moolenaar
2026378c4feSBram Moolenaar  delete('Xprint.ps')
2036378c4feSBram Moolenaarenddef
2046378c4feSBram Moolenaar
2056378c4feSBram Moolenaardef Test_syn_include_wildcards()
2066378c4feSBram Moolenaar  writefile(['syn keyword Found found'], 'Xthemine.vim')
207ac564082SBram Moolenaar  var save_rtp = &rtp
2086378c4feSBram Moolenaar  &rtp = '.'
2096378c4feSBram Moolenaar
210ac564082SBram Moolenaar  var fname = 'mine'
2116378c4feSBram Moolenaar  syn include @Group Xthe`=fname`.vim
2126378c4feSBram Moolenaar  assert_match('Found.* contained found', execute('syn list Found'))
2136378c4feSBram Moolenaar
2146378c4feSBram Moolenaar  &rtp = save_rtp
2156378c4feSBram Moolenaar  delete('Xthemine.vim')
2166378c4feSBram Moolenaarenddef
2176378c4feSBram Moolenaar
2187e8967fdSBram Moolenaardef Test_echo_linebreak()
219ac564082SBram Moolenaar  var lines =<< trim END
2207e8967fdSBram Moolenaar      vim9script
2217e8967fdSBram Moolenaar      redir @a
2227e8967fdSBram Moolenaar      echo 'one'
2237e8967fdSBram Moolenaar            .. 'two'
2247e8967fdSBram Moolenaar      redir END
2257e8967fdSBram Moolenaar      assert_equal("\nonetwo", @a)
2267e8967fdSBram Moolenaar  END
2277e8967fdSBram Moolenaar  CheckScriptSuccess(lines)
2287e8967fdSBram Moolenaar
2297e8967fdSBram Moolenaar  lines =<< trim END
2307e8967fdSBram Moolenaar      vim9script
2317e8967fdSBram Moolenaar      redir @a
2327e8967fdSBram Moolenaar      echo 11 +
2337e8967fdSBram Moolenaar            77
2347e8967fdSBram Moolenaar            - 22
2357e8967fdSBram Moolenaar      redir END
2367e8967fdSBram Moolenaar      assert_equal("\n66", @a)
2377e8967fdSBram Moolenaar  END
2387e8967fdSBram Moolenaar  CheckScriptSuccess(lines)
2397e8967fdSBram Moolenaarenddef
2407e8967fdSBram Moolenaar
24113106605SBram Moolenaardef Test_condition_types()
24213106605SBram Moolenaar  var lines =<< trim END
24313106605SBram Moolenaar      if 'text'
24413106605SBram Moolenaar      endif
24513106605SBram Moolenaar  END
246ea2d407fSBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1135:', 1)
24713106605SBram Moolenaar
24813106605SBram Moolenaar  lines =<< trim END
24913106605SBram Moolenaar      if [1]
25013106605SBram Moolenaar      endif
25113106605SBram Moolenaar  END
25213106605SBram Moolenaar  CheckDefFailure(lines, 'E1012:', 1)
25313106605SBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
25413106605SBram Moolenaar
25513106605SBram Moolenaar  lines =<< trim END
25613106605SBram Moolenaar      g:cond = 'text'
25713106605SBram Moolenaar      if g:cond
25813106605SBram Moolenaar      endif
25913106605SBram Moolenaar  END
260ea2d407fSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
26113106605SBram Moolenaar
26213106605SBram Moolenaar  lines =<< trim END
26313106605SBram Moolenaar      g:cond = 0
26413106605SBram Moolenaar      if g:cond
26513106605SBram Moolenaar      elseif 'text'
26613106605SBram Moolenaar      endif
26713106605SBram Moolenaar  END
26813106605SBram Moolenaar  CheckDefFailure(lines, 'E1012:', 3)
269ea2d407fSBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E1135:', 4)
27013106605SBram Moolenaar
27113106605SBram Moolenaar  lines =<< trim END
27213106605SBram Moolenaar      if g:cond
27313106605SBram Moolenaar      elseif [1]
27413106605SBram Moolenaar      endif
27513106605SBram Moolenaar  END
27613106605SBram Moolenaar  CheckDefFailure(lines, 'E1012:', 2)
27713106605SBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E745:', 3)
27813106605SBram Moolenaar
27913106605SBram Moolenaar  lines =<< trim END
28013106605SBram Moolenaar      g:cond = 'text'
28113106605SBram Moolenaar      if 0
28213106605SBram Moolenaar      elseif g:cond
28313106605SBram Moolenaar      endif
28413106605SBram Moolenaar  END
285ea2d407fSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
28613106605SBram Moolenaar
28713106605SBram Moolenaar  lines =<< trim END
28813106605SBram Moolenaar      while 'text'
28913106605SBram Moolenaar      endwhile
29013106605SBram Moolenaar  END
29113106605SBram Moolenaar  CheckDefFailure(lines, 'E1012:', 1)
292ea2d407fSBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
29313106605SBram Moolenaar
29413106605SBram Moolenaar  lines =<< trim END
29513106605SBram Moolenaar      while [1]
29613106605SBram Moolenaar      endwhile
29713106605SBram Moolenaar  END
29813106605SBram Moolenaar  CheckDefFailure(lines, 'E1012:', 1)
29913106605SBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
30013106605SBram Moolenaar
30113106605SBram Moolenaar  lines =<< trim END
30213106605SBram Moolenaar      g:cond = 'text'
30313106605SBram Moolenaar      while g:cond
30413106605SBram Moolenaar      endwhile
30513106605SBram Moolenaar  END
306ea2d407fSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
30713106605SBram Moolenaarenddef
30813106605SBram Moolenaar
309faf8626bSBram Moolenaardef Test_if_linebreak()
310ac564082SBram Moolenaar  var lines =<< trim END
311faf8626bSBram Moolenaar      vim9script
312faf8626bSBram Moolenaar      if 1 &&
3132bb2658bSBram Moolenaar            true
3142bb2658bSBram Moolenaar            || 1
315faf8626bSBram Moolenaar        g:res = 42
316faf8626bSBram Moolenaar      endif
317faf8626bSBram Moolenaar      assert_equal(42, g:res)
318faf8626bSBram Moolenaar  END
319faf8626bSBram Moolenaar  CheckScriptSuccess(lines)
320faf8626bSBram Moolenaar  unlet g:res
321faf8626bSBram Moolenaar
322faf8626bSBram Moolenaar  lines =<< trim END
323faf8626bSBram Moolenaar      vim9script
324faf8626bSBram Moolenaar      if 1 &&
325faf8626bSBram Moolenaar            0
326faf8626bSBram Moolenaar        g:res = 0
327faf8626bSBram Moolenaar      elseif 0 ||
328faf8626bSBram Moolenaar              0
329faf8626bSBram Moolenaar              || 1
330faf8626bSBram Moolenaar        g:res = 12
331faf8626bSBram Moolenaar      endif
332faf8626bSBram Moolenaar      assert_equal(12, g:res)
333faf8626bSBram Moolenaar  END
334faf8626bSBram Moolenaar  CheckScriptSuccess(lines)
335faf8626bSBram Moolenaar  unlet g:res
336faf8626bSBram Moolenaarenddef
337faf8626bSBram Moolenaar
338faf8626bSBram Moolenaardef Test_while_linebreak()
339ac564082SBram Moolenaar  var lines =<< trim END
340faf8626bSBram Moolenaar      vim9script
341ac564082SBram Moolenaar      var nr = 0
342d5053d01SBram Moolenaar      while nr <
343d5053d01SBram Moolenaar              10 + 3
344d5053d01SBram Moolenaar            nr = nr
345d5053d01SBram Moolenaar                  + 4
346d5053d01SBram Moolenaar      endwhile
347d5053d01SBram Moolenaar      assert_equal(16, nr)
348d5053d01SBram Moolenaar  END
349d5053d01SBram Moolenaar  CheckScriptSuccess(lines)
350d5053d01SBram Moolenaar
351d5053d01SBram Moolenaar  lines =<< trim END
352d5053d01SBram Moolenaar      vim9script
353ac564082SBram Moolenaar      var nr = 0
354d5053d01SBram Moolenaar      while nr
355d5053d01SBram Moolenaar            <
356d5053d01SBram Moolenaar              10
357d5053d01SBram Moolenaar              +
358d5053d01SBram Moolenaar              3
359d5053d01SBram Moolenaar            nr = nr
360d5053d01SBram Moolenaar                  +
361d5053d01SBram Moolenaar                  4
362faf8626bSBram Moolenaar      endwhile
363faf8626bSBram Moolenaar      assert_equal(16, nr)
364faf8626bSBram Moolenaar  END
365faf8626bSBram Moolenaar  CheckScriptSuccess(lines)
366faf8626bSBram Moolenaarenddef
367cfe435d7SBram Moolenaar
368b7a78f7aSBram Moolenaardef Test_for_linebreak()
369ac564082SBram Moolenaar  var lines =<< trim END
370b7a78f7aSBram Moolenaar      vim9script
371ac564082SBram Moolenaar      var nr = 0
372b7a78f7aSBram Moolenaar      for x
373b7a78f7aSBram Moolenaar            in
374b7a78f7aSBram Moolenaar              [1, 2, 3, 4]
375b7a78f7aSBram Moolenaar          nr = nr + x
376b7a78f7aSBram Moolenaar      endfor
377b7a78f7aSBram Moolenaar      assert_equal(10, nr)
378b7a78f7aSBram Moolenaar  END
379b7a78f7aSBram Moolenaar  CheckScriptSuccess(lines)
380b7a78f7aSBram Moolenaar
381b7a78f7aSBram Moolenaar  lines =<< trim END
382b7a78f7aSBram Moolenaar      vim9script
383ac564082SBram Moolenaar      var nr = 0
384b7a78f7aSBram Moolenaar      for x
385b7a78f7aSBram Moolenaar            in
386b7a78f7aSBram Moolenaar              [1, 2,
387b7a78f7aSBram Moolenaar                  3, 4
388b7a78f7aSBram Moolenaar                  ]
389b7a78f7aSBram Moolenaar          nr = nr
390b7a78f7aSBram Moolenaar                 +
391b7a78f7aSBram Moolenaar                  x
392b7a78f7aSBram Moolenaar      endfor
393b7a78f7aSBram Moolenaar      assert_equal(10, nr)
394b7a78f7aSBram Moolenaar  END
395b7a78f7aSBram Moolenaar  CheckScriptSuccess(lines)
396b7a78f7aSBram Moolenaarenddef
397b7a78f7aSBram Moolenaar
398e0890d67SBram Moolenaardef MethodAfterLinebreak(arg: string)
399e0890d67SBram Moolenaar  arg
400e0890d67SBram Moolenaar    ->setline(1)
401e0890d67SBram Moolenaarenddef
402e0890d67SBram Moolenaar
403d2ef6b32SBram Moolenaardef Test_method_call_linebreak()
404ac564082SBram Moolenaar  var lines =<< trim END
4055f195938SBram Moolenaar      vim9script
406ac564082SBram Moolenaar      var res = []
4075f195938SBram Moolenaar      func RetArg(
4085f195938SBram Moolenaar            arg
4095f195938SBram Moolenaar            )
4105f195938SBram Moolenaar            let s:res = a:arg
4115f195938SBram Moolenaar      endfunc
4125f195938SBram Moolenaar      [1,
4135f195938SBram Moolenaar          2,
4145f195938SBram Moolenaar          3]->RetArg()
4155f195938SBram Moolenaar      assert_equal([1, 2, 3], res)
4165f195938SBram Moolenaar  END
4175f195938SBram Moolenaar  CheckScriptSuccess(lines)
418148be9bcSBram Moolenaar
419148be9bcSBram Moolenaar  lines =<< trim END
420148be9bcSBram Moolenaar      new
421148be9bcSBram Moolenaar      var name = [1, 2]
422148be9bcSBram Moolenaar      name
423148be9bcSBram Moolenaar          ->copy()
424148be9bcSBram Moolenaar          ->setline(1)
425148be9bcSBram Moolenaar      assert_equal(['1', '2'], getline(1, 2))
426148be9bcSBram Moolenaar      bwipe!
427148be9bcSBram Moolenaar  END
428148be9bcSBram Moolenaar  CheckDefAndScriptSuccess(lines)
429148be9bcSBram Moolenaar
430148be9bcSBram Moolenaar  lines =<< trim END
431148be9bcSBram Moolenaar      new
4326914e87dSBram Moolenaar      def Foo(): string
4336914e87dSBram Moolenaar        return 'the text'
4346914e87dSBram Moolenaar      enddef
4356914e87dSBram Moolenaar      def Bar(F: func): string
4366914e87dSBram Moolenaar        return F()
4376914e87dSBram Moolenaar      enddef
4386914e87dSBram Moolenaar      def Test()
43977b10ffaSBram Moolenaar        Foo  ->Bar()
4406914e87dSBram Moolenaar             ->setline(1)
4416914e87dSBram Moolenaar      enddef
4426914e87dSBram Moolenaar      Test()
4436914e87dSBram Moolenaar      assert_equal('the text', getline(1))
4446914e87dSBram Moolenaar      bwipe!
4456914e87dSBram Moolenaar  END
4466914e87dSBram Moolenaar  CheckDefAndScriptSuccess(lines)
4476914e87dSBram Moolenaar
4486914e87dSBram Moolenaar  lines =<< trim END
4496914e87dSBram Moolenaar      new
450148be9bcSBram Moolenaar      g:shortlist
451148be9bcSBram Moolenaar          ->copy()
452148be9bcSBram Moolenaar          ->setline(1)
453148be9bcSBram Moolenaar      assert_equal(['1', '2'], getline(1, 2))
454148be9bcSBram Moolenaar      bwipe!
455148be9bcSBram Moolenaar  END
456148be9bcSBram Moolenaar  g:shortlist = [1, 2]
457148be9bcSBram Moolenaar  CheckDefAndScriptSuccess(lines)
458148be9bcSBram Moolenaar  unlet g:shortlist
459e0890d67SBram Moolenaar
460e0890d67SBram Moolenaar  new
461e0890d67SBram Moolenaar  MethodAfterLinebreak('foobar')
462e0890d67SBram Moolenaar  assert_equal('foobar', getline(1))
463e0890d67SBram Moolenaar  bwipe!
4642e2d7589SBram Moolenaar
4652e2d7589SBram Moolenaar  lines =<< trim END
4662e2d7589SBram Moolenaar      vim9script
4672e2d7589SBram Moolenaar      def Foo(): string
4682e2d7589SBram Moolenaar          return '# some text'
4692e2d7589SBram Moolenaar      enddef
4702e2d7589SBram Moolenaar
4712e2d7589SBram Moolenaar      def Bar(F: func): string
4722e2d7589SBram Moolenaar          return F()
4732e2d7589SBram Moolenaar      enddef
4742e2d7589SBram Moolenaar
47577b10ffaSBram Moolenaar      Foo->Bar()
4762e2d7589SBram Moolenaar         ->setline(1)
4772e2d7589SBram Moolenaar  END
4782e2d7589SBram Moolenaar  CheckScriptSuccess(lines)
4792e2d7589SBram Moolenaar  assert_equal('# some text', getline(1))
4802e2d7589SBram Moolenaar  bwipe!
4815f195938SBram Moolenaarenddef
4825f195938SBram Moolenaar
4837cebe8baSBram Moolenaardef Test_method_call_whitespace()
4847cebe8baSBram Moolenaar  var lines =<< trim END
4857cebe8baSBram Moolenaar    new
4867cebe8baSBram Moolenaar    var yank = 'text'
4877cebe8baSBram Moolenaar    yank->setline(1)
4887cebe8baSBram Moolenaar    yank  ->setline(2)
4897cebe8baSBram Moolenaar    yank->  setline(3)
4907cebe8baSBram Moolenaar    yank  ->  setline(4)
4917cebe8baSBram Moolenaar    assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
4927cebe8baSBram Moolenaar    bwipe!
4937cebe8baSBram Moolenaar  END
4947cebe8baSBram Moolenaar  CheckDefAndScriptSuccess(lines)
4957cebe8baSBram Moolenaarenddef
4967cebe8baSBram Moolenaar
49777b10ffaSBram Moolenaardef Test_method_and_user_command()
49877b10ffaSBram Moolenaar  var lines =<< trim END
49977b10ffaSBram Moolenaar      vim9script
50077b10ffaSBram Moolenaar      def Cmd()
50177b10ffaSBram Moolenaar        g:didFunc = 1
50277b10ffaSBram Moolenaar      enddef
50377b10ffaSBram Moolenaar      command Cmd g:didCmd = 1
50477b10ffaSBram Moolenaar      Cmd
50577b10ffaSBram Moolenaar      assert_equal(1, g:didCmd)
50677b10ffaSBram Moolenaar      Cmd()
50777b10ffaSBram Moolenaar      assert_equal(1, g:didFunc)
50877b10ffaSBram Moolenaar      unlet g:didFunc
50977b10ffaSBram Moolenaar      unlet g:didCmd
51077b10ffaSBram Moolenaar
51177b10ffaSBram Moolenaar      def InDefFunc()
51277b10ffaSBram Moolenaar        Cmd
51377b10ffaSBram Moolenaar        assert_equal(1, g:didCmd)
51477b10ffaSBram Moolenaar        Cmd()
51577b10ffaSBram Moolenaar        assert_equal(1, g:didFunc)
51677b10ffaSBram Moolenaar        unlet g:didFunc
51777b10ffaSBram Moolenaar        unlet g:didCmd
51877b10ffaSBram Moolenaar      enddef
51977b10ffaSBram Moolenaar      InDefFunc()
52077b10ffaSBram Moolenaar  END
52177b10ffaSBram Moolenaar  CheckScriptSuccess(lines)
52277b10ffaSBram Moolenaarenddef
52377b10ffaSBram Moolenaar
524bf5f2878SBram Moolenaardef Test_option_use_linebreak()
525bf5f2878SBram Moolenaar  var lines =<< trim END
526bf5f2878SBram Moolenaar      new
527bf5f2878SBram Moolenaar      &matchpairs = '(:)'
528bf5f2878SBram Moolenaar      &matchpairs->setline(1)
529bf5f2878SBram Moolenaar      &matchpairs = '[:]'
530bf5f2878SBram Moolenaar      &matchpairs   ->setline(2)
531bf5f2878SBram Moolenaar      &matchpairs = '{:}'
532bf5f2878SBram Moolenaar      &matchpairs
533bf5f2878SBram Moolenaar          ->setline(3)
534bf5f2878SBram Moolenaar      assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
535bf5f2878SBram Moolenaar      bwipe!
536bf5f2878SBram Moolenaar  END
537bf5f2878SBram Moolenaar  CheckDefAndScriptSuccess(lines)
538bf5f2878SBram Moolenaarenddef
539bf5f2878SBram Moolenaar
5404799cef8SBram Moolenaardef Test_use_register()
54173170917SBram Moolenaar  var lines =<< trim END
54273170917SBram Moolenaar      new
54373170917SBram Moolenaar      @a = 'one'
54473170917SBram Moolenaar      @a->setline(1)
54573170917SBram Moolenaar      @b = 'two'
54673170917SBram Moolenaar      @b   ->setline(2)
54773170917SBram Moolenaar      @c = 'three'
54873170917SBram Moolenaar      @c
54973170917SBram Moolenaar          ->setline(3)
55073170917SBram Moolenaar      assert_equal(['one', 'two', 'three'], getline(1, '$'))
55173170917SBram Moolenaar      bwipe!
55273170917SBram Moolenaar  END
55373170917SBram Moolenaar  CheckDefAndScriptSuccess(lines)
5544799cef8SBram Moolenaar
5554799cef8SBram Moolenaar  lines =<< trim END
5564799cef8SBram Moolenaar      @a = 'echo "text"'
5574799cef8SBram Moolenaar      @a
5584799cef8SBram Moolenaar  END
5594799cef8SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1207:')
56073170917SBram Moolenaarenddef
56173170917SBram Moolenaar
5625ca5cc64SBram Moolenaardef Test_environment_use_linebreak()
5635ca5cc64SBram Moolenaar  var lines =<< trim END
5645ca5cc64SBram Moolenaar      new
5655ca5cc64SBram Moolenaar      $TESTENV = 'one'
5665ca5cc64SBram Moolenaar      $TESTENV->setline(1)
5675ca5cc64SBram Moolenaar      $TESTENV = 'two'
5685ca5cc64SBram Moolenaar      $TESTENV  ->setline(2)
5695ca5cc64SBram Moolenaar      $TESTENV = 'three'
5705ca5cc64SBram Moolenaar      $TESTENV
5715ca5cc64SBram Moolenaar          ->setline(3)
5725ca5cc64SBram Moolenaar      assert_equal(['one', 'two', 'three'], getline(1, '$'))
5735ca5cc64SBram Moolenaar      bwipe!
5745ca5cc64SBram Moolenaar  END
5755ca5cc64SBram Moolenaar  CheckDefAndScriptSuccess(lines)
5765ca5cc64SBram Moolenaarenddef
5775ca5cc64SBram Moolenaar
578683581ebSBram Moolenaardef Test_skipped_expr_linebreak()
579683581ebSBram Moolenaar  if 0
580683581ebSBram Moolenaar    var x = []
5812949cfdbSBram Moolenaar               ->map(() => 0)
582683581ebSBram Moolenaar  endif
583683581ebSBram Moolenaarenddef
584683581ebSBram Moolenaar
5850a47e097SBram Moolenaardef Test_dict_member()
586e0de171eSBram Moolenaar   var test: dict<list<number>> = {data: [3, 1, 2]}
5870a47e097SBram Moolenaar   test.data->sort()
588e0de171eSBram Moolenaar   assert_equal({data: [1, 2, 3]}, test)
5890a47e097SBram Moolenaar   test.data
5900a47e097SBram Moolenaar      ->reverse()
591e0de171eSBram Moolenaar   assert_equal({data: [3, 2, 1]}, test)
5920a47e097SBram Moolenaar
593ac564082SBram Moolenaar  var lines =<< trim END
5940a47e097SBram Moolenaar      vim9script
595e0de171eSBram Moolenaar      var test: dict<list<number>> = {data: [3, 1, 2]}
5960a47e097SBram Moolenaar      test.data->sort()
597e0de171eSBram Moolenaar      assert_equal({data: [1, 2, 3]}, test)
5980a47e097SBram Moolenaar  END
5990a47e097SBram Moolenaar  CheckScriptSuccess(lines)
6000a47e097SBram Moolenaarenddef
6010a47e097SBram Moolenaar
602e9f262bdSBram Moolenaardef Test_bar_after_command()
603e9f262bdSBram Moolenaar  def RedrawAndEcho()
604ac564082SBram Moolenaar    var x = 'did redraw'
605e9f262bdSBram Moolenaar    redraw | echo x
606e9f262bdSBram Moolenaar  enddef
607e9f262bdSBram Moolenaar  RedrawAndEcho()
608e9f262bdSBram Moolenaar  assert_match('did redraw', Screenline(&lines))
609e9f262bdSBram Moolenaar
610788123c0SBram Moolenaar  def CallAndEcho()
611ac564082SBram Moolenaar    var x = 'did redraw'
612788123c0SBram Moolenaar    reg_executing() | echo x
613788123c0SBram Moolenaar  enddef
614788123c0SBram Moolenaar  CallAndEcho()
615788123c0SBram Moolenaar  assert_match('did redraw', Screenline(&lines))
616788123c0SBram Moolenaar
617e9f262bdSBram Moolenaar  if has('unix')
618e9f262bdSBram Moolenaar    # bar in filter write command does not start new command
619e9f262bdSBram Moolenaar    def WriteToShell()
620e9f262bdSBram Moolenaar      new
621e9f262bdSBram Moolenaar      setline(1, 'some text')
622e9f262bdSBram Moolenaar      w !cat | cat > Xoutfile
623e9f262bdSBram Moolenaar      bwipe!
624e9f262bdSBram Moolenaar    enddef
625e9f262bdSBram Moolenaar    WriteToShell()
626e9f262bdSBram Moolenaar    assert_equal(['some text'], readfile('Xoutfile'))
627e9f262bdSBram Moolenaar    delete('Xoutfile')
628e9f262bdSBram Moolenaar
629e9f262bdSBram Moolenaar    # bar in filter read command does not start new command
630e9f262bdSBram Moolenaar    def ReadFromShell()
631e9f262bdSBram Moolenaar      new
632e9f262bdSBram Moolenaar      r! echo hello there | cat > Xoutfile
633e9f262bdSBram Moolenaar      r !echo again | cat >> Xoutfile
634e9f262bdSBram Moolenaar      bwipe!
635e9f262bdSBram Moolenaar    enddef
636e9f262bdSBram Moolenaar    ReadFromShell()
637e9f262bdSBram Moolenaar    assert_equal(['hello there', 'again'], readfile('Xoutfile'))
638e9f262bdSBram Moolenaar    delete('Xoutfile')
639e9f262bdSBram Moolenaar  endif
640e9f262bdSBram Moolenaarenddef
641e9f262bdSBram Moolenaar
642b074e8b8SBram Moolenaardef Test_filter_is_not_modifier()
643e0de171eSBram Moolenaar  var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
6442949cfdbSBram Moolenaar  filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
645e0de171eSBram Moolenaar  assert_equal([{x: 3, y: 4}], tags)
646b074e8b8SBram Moolenaarenddef
647b074e8b8SBram Moolenaar
648e88c8e80SBram Moolenaardef Test_command_modifier_filter()
6494f6b6ed2SBram Moolenaar  var lines =<< trim END
6504f6b6ed2SBram Moolenaar    final expected = "\nType Name Content\n  c  \"c   piyo"
6514f6b6ed2SBram Moolenaar    @a = 'hoge'
6524f6b6ed2SBram Moolenaar    @b = 'fuga'
6534f6b6ed2SBram Moolenaar    @c = 'piyo'
6544f6b6ed2SBram Moolenaar
6554f6b6ed2SBram Moolenaar    assert_equal(execute('filter /piyo/ registers abc'), expected)
6564f6b6ed2SBram Moolenaar  END
6574f6b6ed2SBram Moolenaar  CheckDefAndScriptSuccess(lines)
658e729ce29SBram Moolenaar
659e729ce29SBram Moolenaar  # also do this compiled
660e729ce29SBram Moolenaar  lines =<< trim END
661e729ce29SBram Moolenaar      @a = 'very specific z3d37dh234 string'
662e729ce29SBram Moolenaar      filter z3d37dh234 registers
663e729ce29SBram Moolenaar      assert_match('very specific z3d37dh234 string', Screenline(&lines))
664e729ce29SBram Moolenaar  END
665e729ce29SBram Moolenaar  CheckDefAndScriptSuccess(lines)
6664f6b6ed2SBram Moolenaarenddef
6674f6b6ed2SBram Moolenaar
668e88c8e80SBram Moolenaardef Test_win_command_modifiers()
669e88c8e80SBram Moolenaar  assert_equal(1, winnr('$'))
670e88c8e80SBram Moolenaar
671e88c8e80SBram Moolenaar  set splitright
672e88c8e80SBram Moolenaar  vsplit
673e88c8e80SBram Moolenaar  assert_equal(2, winnr())
674e88c8e80SBram Moolenaar  close
675e88c8e80SBram Moolenaar  aboveleft vsplit
676e88c8e80SBram Moolenaar  assert_equal(1, winnr())
677e88c8e80SBram Moolenaar  close
678e88c8e80SBram Moolenaar  set splitright&
679e88c8e80SBram Moolenaar
680e88c8e80SBram Moolenaar  vsplit
681e88c8e80SBram Moolenaar  assert_equal(1, winnr())
682e88c8e80SBram Moolenaar  close
683e88c8e80SBram Moolenaar  belowright vsplit
684e88c8e80SBram Moolenaar  assert_equal(2, winnr())
685e88c8e80SBram Moolenaar  close
686e88c8e80SBram Moolenaar  rightbelow vsplit
687e88c8e80SBram Moolenaar  assert_equal(2, winnr())
688e88c8e80SBram Moolenaar  close
689e88c8e80SBram Moolenaar
69097a19005SBram Moolenaar  if has('browse')
691e88c8e80SBram Moolenaar    browse set
692e88c8e80SBram Moolenaar    assert_equal('option-window', expand('%'))
693e88c8e80SBram Moolenaar    close
69497a19005SBram Moolenaar  endif
695e88c8e80SBram Moolenaar
696e88c8e80SBram Moolenaar  vsplit
697e88c8e80SBram Moolenaar  botright split
698e88c8e80SBram Moolenaar  assert_equal(3, winnr())
699e88c8e80SBram Moolenaar  assert_equal(&columns, winwidth(0))
700e88c8e80SBram Moolenaar  close
701e88c8e80SBram Moolenaar  close
702e88c8e80SBram Moolenaar
703e88c8e80SBram Moolenaar  vsplit
704e88c8e80SBram Moolenaar  topleft split
705e88c8e80SBram Moolenaar  assert_equal(1, winnr())
706e88c8e80SBram Moolenaar  assert_equal(&columns, winwidth(0))
707e88c8e80SBram Moolenaar  close
708e88c8e80SBram Moolenaar  close
709e88c8e80SBram Moolenaar
710e88c8e80SBram Moolenaar  gettabinfo()->len()->assert_equal(1)
711e88c8e80SBram Moolenaar  tab split
712e88c8e80SBram Moolenaar  gettabinfo()->len()->assert_equal(2)
713e88c8e80SBram Moolenaar  tabclose
714e88c8e80SBram Moolenaar
715e88c8e80SBram Moolenaar  vertical new
716e88c8e80SBram Moolenaar  assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
717e88c8e80SBram Moolenaar  close
718e88c8e80SBram Moolenaarenddef
719e88c8e80SBram Moolenaar
720e88c8e80SBram Moolenaarfunc Test_command_modifier_confirm()
721e88c8e80SBram Moolenaar  CheckNotGui
722e88c8e80SBram Moolenaar  CheckRunVimInTerminal
723e88c8e80SBram Moolenaar
724e88c8e80SBram Moolenaar  " Test for saving all the modified buffers
725e88c8e80SBram Moolenaar  let lines =<< trim END
726e88c8e80SBram Moolenaar    call setline(1, 'changed')
727e88c8e80SBram Moolenaar    def Getout()
728e88c8e80SBram Moolenaar      confirm write Xfile
729e88c8e80SBram Moolenaar    enddef
730e88c8e80SBram Moolenaar  END
731e88c8e80SBram Moolenaar  call writefile(lines, 'Xconfirmscript')
732e88c8e80SBram Moolenaar  call writefile(['empty'], 'Xfile')
733e88c8e80SBram Moolenaar  let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
734e88c8e80SBram Moolenaar  call term_sendkeys(buf, ":call Getout()\n")
735e88c8e80SBram Moolenaar  call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
736e88c8e80SBram Moolenaar  call term_sendkeys(buf, "y")
737645cd3ebSBram Moolenaar  call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
738645cd3ebSBram Moolenaar  call term_sendkeys(buf, "\<CR>")
739645cd3ebSBram Moolenaar  call TermWait(buf)
740e88c8e80SBram Moolenaar  call StopVimInTerminal(buf)
741e88c8e80SBram Moolenaar
742e88c8e80SBram Moolenaar  call assert_equal(['changed'], readfile('Xfile'))
743e88c8e80SBram Moolenaar  call delete('Xfile')
744645cd3ebSBram Moolenaar  call delete('.Xfile.swp')  " in case Vim was killed
745e88c8e80SBram Moolenaar  call delete('Xconfirmscript')
746e88c8e80SBram Moolenaarendfunc
747e88c8e80SBram Moolenaar
748e88c8e80SBram Moolenaardef Test_command_modifiers_keep()
749e88c8e80SBram Moolenaar  if has('unix')
750e88c8e80SBram Moolenaar    def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
751e88c8e80SBram Moolenaar      new
752e88c8e80SBram Moolenaar      setline(1, ['one', 'two', 'three'])
753e88c8e80SBram Moolenaar      normal 1Gma
754e88c8e80SBram Moolenaar      normal 2Gmb
755e88c8e80SBram Moolenaar      normal 3Gmc
756e88c8e80SBram Moolenaar      if addRflag
757e88c8e80SBram Moolenaar        set cpo+=R
758e88c8e80SBram Moolenaar      else
759e88c8e80SBram Moolenaar        set cpo-=R
760e88c8e80SBram Moolenaar      endif
761e88c8e80SBram Moolenaar      if keepMarks
762e88c8e80SBram Moolenaar        keepmarks :%!cat
763e88c8e80SBram Moolenaar      else
764e88c8e80SBram Moolenaar        :%!cat
765e88c8e80SBram Moolenaar      endif
766e88c8e80SBram Moolenaar      if hasMarks
767e88c8e80SBram Moolenaar        assert_equal(1, line("'a"))
768e88c8e80SBram Moolenaar        assert_equal(2, line("'b"))
769e88c8e80SBram Moolenaar        assert_equal(3, line("'c"))
770e88c8e80SBram Moolenaar      else
771e88c8e80SBram Moolenaar        assert_equal(0, line("'a"))
772e88c8e80SBram Moolenaar        assert_equal(0, line("'b"))
773e88c8e80SBram Moolenaar        assert_equal(0, line("'c"))
774e88c8e80SBram Moolenaar      endif
775e88c8e80SBram Moolenaar      quit!
776e88c8e80SBram Moolenaar    enddef
777e88c8e80SBram Moolenaar    DoTest(false, false, true)
778e88c8e80SBram Moolenaar    DoTest(true, false, false)
779e88c8e80SBram Moolenaar    DoTest(false, true, true)
780e88c8e80SBram Moolenaar    DoTest(true, true, true)
781e88c8e80SBram Moolenaar    set cpo&vim
782f65b35b4SBram Moolenaar
783f65b35b4SBram Moolenaar    new
784f65b35b4SBram Moolenaar    setline(1, ['one', 'two', 'three', 'four'])
785f65b35b4SBram Moolenaar    assert_equal(4, line("$"))
786f65b35b4SBram Moolenaar    normal 1Gma
787f65b35b4SBram Moolenaar    normal 2Gmb
788f65b35b4SBram Moolenaar    normal 3Gmc
789f65b35b4SBram Moolenaar    lockmarks :1,2!wc
790f65b35b4SBram Moolenaar    # line is deleted, marks don't move
791f65b35b4SBram Moolenaar    assert_equal(3, line("$"))
792f65b35b4SBram Moolenaar    assert_equal('four', getline(3))
793f65b35b4SBram Moolenaar    assert_equal(1, line("'a"))
794f65b35b4SBram Moolenaar    assert_equal(2, line("'b"))
795f65b35b4SBram Moolenaar    assert_equal(3, line("'c"))
796f65b35b4SBram Moolenaar    quit!
797e88c8e80SBram Moolenaar  endif
798e88c8e80SBram Moolenaar
799f65b35b4SBram Moolenaar  edit Xone
800f65b35b4SBram Moolenaar  edit Xtwo
801f65b35b4SBram Moolenaar  assert_equal('Xone', expand('#'))
802f65b35b4SBram Moolenaar  keepalt edit Xthree
803f65b35b4SBram Moolenaar  assert_equal('Xone', expand('#'))
804f65b35b4SBram Moolenaar
805f65b35b4SBram Moolenaar  normal /a*b*
806f65b35b4SBram Moolenaar  assert_equal('a*b*', histget("search"))
807f65b35b4SBram Moolenaar  keeppatterns normal /c*d*
808f65b35b4SBram Moolenaar  assert_equal('a*b*', histget("search"))
809f65b35b4SBram Moolenaar
810f65b35b4SBram Moolenaar  new
811f65b35b4SBram Moolenaar  setline(1, range(10))
812f65b35b4SBram Moolenaar  :10
813f65b35b4SBram Moolenaar  normal gg
814f65b35b4SBram Moolenaar  assert_equal(10, getpos("''")[1])
815f65b35b4SBram Moolenaar  keepjumps normal 5G
816f65b35b4SBram Moolenaar  assert_equal(10, getpos("''")[1])
817f65b35b4SBram Moolenaar  quit!
818e88c8e80SBram Moolenaarenddef
819e88c8e80SBram Moolenaar
8208242ebbdSBram Moolenaardef Test_bar_line_continuation()
8218242ebbdSBram Moolenaar  var lines =<< trim END
82266669fc6SBram Moolenaar      au BufNewFile Xfile g:readFile = 1
823dcc58e03SBram Moolenaar          | g:readExtra = 2
82466669fc6SBram Moolenaar      g:readFile = 0
825dcc58e03SBram Moolenaar      g:readExtra = 0
82666669fc6SBram Moolenaar      edit Xfile
82766669fc6SBram Moolenaar      assert_equal(1, g:readFile)
828dcc58e03SBram Moolenaar      assert_equal(2, g:readExtra)
82966669fc6SBram Moolenaar      bwipe!
830dcc58e03SBram Moolenaar      au! BufNewFile
831dcc58e03SBram Moolenaar
832dcc58e03SBram Moolenaar      au BufNewFile Xfile g:readFile = 1
833dcc58e03SBram Moolenaar          | g:readExtra = 2
834dcc58e03SBram Moolenaar          | g:readMore = 3
835dcc58e03SBram Moolenaar      g:readFile = 0
836dcc58e03SBram Moolenaar      g:readExtra = 0
837dcc58e03SBram Moolenaar      g:readMore = 0
838dcc58e03SBram Moolenaar      edit Xfile
839dcc58e03SBram Moolenaar      assert_equal(1, g:readFile)
840dcc58e03SBram Moolenaar      assert_equal(2, g:readExtra)
841dcc58e03SBram Moolenaar      assert_equal(3, g:readMore)
842dcc58e03SBram Moolenaar      bwipe!
843dcc58e03SBram Moolenaar      au! BufNewFile
844dcc58e03SBram Moolenaar      unlet g:readFile
845dcc58e03SBram Moolenaar      unlet g:readExtra
846dcc58e03SBram Moolenaar      unlet g:readMore
8478242ebbdSBram Moolenaar  END
8488242ebbdSBram Moolenaar  CheckDefAndScriptSuccess(lines)
8498242ebbdSBram Moolenaarenddef
8508242ebbdSBram Moolenaar
8518242ebbdSBram Moolenaardef Test_command_modifier_other()
8528242ebbdSBram Moolenaar  new Xsomefile
8538242ebbdSBram Moolenaar  setline(1, 'changed')
8548242ebbdSBram Moolenaar  var buf = bufnr()
8558242ebbdSBram Moolenaar  hide edit Xotherfile
8568242ebbdSBram Moolenaar  var info = getbufinfo(buf)
8578242ebbdSBram Moolenaar  assert_equal(1, info[0].hidden)
8588242ebbdSBram Moolenaar  assert_equal(1, info[0].changed)
8598242ebbdSBram Moolenaar  edit Xsomefile
8608242ebbdSBram Moolenaar  bwipe!
8618242ebbdSBram Moolenaar
8628242ebbdSBram Moolenaar  au BufNewFile Xfile g:readFile = 1
8638242ebbdSBram Moolenaar  g:readFile = 0
8648242ebbdSBram Moolenaar  edit Xfile
8658242ebbdSBram Moolenaar  assert_equal(1, g:readFile)
8668242ebbdSBram Moolenaar  bwipe!
8678242ebbdSBram Moolenaar  g:readFile = 0
8688242ebbdSBram Moolenaar  noautocmd edit Xfile
8698242ebbdSBram Moolenaar  assert_equal(0, g:readFile)
8708242ebbdSBram Moolenaar  au! BufNewFile
8718242ebbdSBram Moolenaar  unlet g:readFile
87266669fc6SBram Moolenaar
87366669fc6SBram Moolenaar  noswapfile edit XnoSwap
874dd1f426bSBram Moolenaar  assert_equal(false, &l:swapfile)
87566669fc6SBram Moolenaar  bwipe!
87666669fc6SBram Moolenaar
87766669fc6SBram Moolenaar  var caught = false
87866669fc6SBram Moolenaar  try
87966669fc6SBram Moolenaar    sandbox !ls
88066669fc6SBram Moolenaar  catch /E48:/
88166669fc6SBram Moolenaar    caught = true
88266669fc6SBram Moolenaar  endtry
88366669fc6SBram Moolenaar  assert_true(caught)
88466669fc6SBram Moolenaar
88566669fc6SBram Moolenaar  :8verbose g:verbose_now = &verbose
88666669fc6SBram Moolenaar  assert_equal(8, g:verbose_now)
88766669fc6SBram Moolenaar  unlet g:verbose_now
88866669fc6SBram Moolenaarenddef
88966669fc6SBram Moolenaar
89066669fc6SBram Moolenaardef EchoHere()
89166669fc6SBram Moolenaar  echomsg 'here'
89266669fc6SBram Moolenaarenddef
89366669fc6SBram Moolenaardef EchoThere()
89466669fc6SBram Moolenaar  unsilent echomsg 'there'
89566669fc6SBram Moolenaarenddef
89666669fc6SBram Moolenaar
89766669fc6SBram Moolenaardef Test_modifier_silent_unsilent()
89866669fc6SBram Moolenaar  echomsg 'last one'
89966669fc6SBram Moolenaar  silent echomsg "text"
90066669fc6SBram Moolenaar  assert_equal("\nlast one", execute(':1messages'))
90166669fc6SBram Moolenaar
90266669fc6SBram Moolenaar  silent! echoerr "error"
90366669fc6SBram Moolenaar
90466669fc6SBram Moolenaar  echomsg 'last one'
90566669fc6SBram Moolenaar  silent EchoHere()
90666669fc6SBram Moolenaar  assert_equal("\nlast one", execute(':1messages'))
90766669fc6SBram Moolenaar
90866669fc6SBram Moolenaar  silent EchoThere()
90966669fc6SBram Moolenaar  assert_equal("\nthere", execute(':1messages'))
91020a76298SBram Moolenaar
91120a76298SBram Moolenaar  try
91220a76298SBram Moolenaar    silent eval [][0]
91320a76298SBram Moolenaar  catch
91420a76298SBram Moolenaar    echomsg "caught"
91520a76298SBram Moolenaar  endtry
91620a76298SBram Moolenaar  assert_equal("\ncaught", execute(':1messages'))
917917c46abSBram Moolenaar
918917c46abSBram Moolenaar  var lines =<< trim END
919917c46abSBram Moolenaar      vim9script
920917c46abSBram Moolenaar      set history=11
921917c46abSBram Moolenaar      silent! while 0
922917c46abSBram Moolenaar        set history=22
923917c46abSBram Moolenaar      silent! endwhile
924917c46abSBram Moolenaar      assert_equal(11, &history)
925917c46abSBram Moolenaar      set history&
926917c46abSBram Moolenaar  END
927917c46abSBram Moolenaar  CheckScriptSuccess(lines)
928e88c8e80SBram Moolenaarenddef
929e88c8e80SBram Moolenaar
93036113e46SBram Moolenaardef Test_range_after_command_modifier()
9316e2c2c50SBram Moolenaar  CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
93236113e46SBram Moolenaar  new
93336113e46SBram Moolenaar  setline(1, 'xxx')
93436113e46SBram Moolenaar  CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
93536113e46SBram Moolenaar  assert_equal('', getline(1))
93636113e46SBram Moolenaar  bwipe!
93736113e46SBram Moolenaarenddef
93836113e46SBram Moolenaar
939ece0b87cSBram Moolenaardef Test_silent_pattern()
940ece0b87cSBram Moolenaar  new
941ece0b87cSBram Moolenaar  silent! :/pat/put _
942ece0b87cSBram Moolenaar  bwipe!
943ece0b87cSBram Moolenaarenddef
944ece0b87cSBram Moolenaar
945fa984418SBram Moolenaardef Test_useless_command_modifier()
946fa984418SBram Moolenaar  g:maybe = true
947fa984418SBram Moolenaar  var lines =<< trim END
948fa984418SBram Moolenaar      if g:maybe
949fa984418SBram Moolenaar      silent endif
950fa984418SBram Moolenaar  END
951fa984418SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1176:', 2)
952fa984418SBram Moolenaar
953fa984418SBram Moolenaar  lines =<< trim END
954fa984418SBram Moolenaar      for i in [0]
955fa984418SBram Moolenaar      silent endfor
956fa984418SBram Moolenaar  END
957917c46abSBram Moolenaar  CheckDefFailure(lines, 'E1176:', 2)
958917c46abSBram Moolenaar  CheckScriptSuccess(['vim9script'] + lines)
959fa984418SBram Moolenaar
960fa984418SBram Moolenaar  lines =<< trim END
961fa984418SBram Moolenaar      while g:maybe
962fa984418SBram Moolenaar      silent endwhile
963fa984418SBram Moolenaar  END
964917c46abSBram Moolenaar  CheckDefFailure(lines, 'E1176:', 2)
965917c46abSBram Moolenaar  g:maybe = false
966917c46abSBram Moolenaar  CheckScriptSuccess(['vim9script'] + lines)
967fa984418SBram Moolenaar
968fa984418SBram Moolenaar  lines =<< trim END
969fa984418SBram Moolenaar      silent try
970fa984418SBram Moolenaar      finally
971fa984418SBram Moolenaar      endtry
972fa984418SBram Moolenaar  END
973fa984418SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1176:', 1)
974fa984418SBram Moolenaar
975fa984418SBram Moolenaar  lines =<< trim END
976fa984418SBram Moolenaar      try
977fa984418SBram Moolenaar      silent catch
978fa984418SBram Moolenaar      endtry
979fa984418SBram Moolenaar  END
980fa984418SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1176:', 2)
981fa984418SBram Moolenaar
982fa984418SBram Moolenaar  lines =<< trim END
983fa984418SBram Moolenaar      try
984fa984418SBram Moolenaar      silent finally
985fa984418SBram Moolenaar      endtry
986fa984418SBram Moolenaar  END
987fa984418SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1176:', 2)
988fa984418SBram Moolenaar
989fa984418SBram Moolenaar  lines =<< trim END
990fa984418SBram Moolenaar      try
991fa984418SBram Moolenaar      finally
992fa984418SBram Moolenaar      silent endtry
993fa984418SBram Moolenaar  END
994fa984418SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1176:', 3)
995fa984418SBram Moolenaarenddef
996fa984418SBram Moolenaar
997007f9d6eSBram Moolenaardef Test_eval_command()
998ac564082SBram Moolenaar  var from = 3
999ac564082SBram Moolenaar  var to = 5
1000007f9d6eSBram Moolenaar  g:val = 111
1001007f9d6eSBram Moolenaar  def Increment(nrs: list<number>)
1002007f9d6eSBram Moolenaar    for nr in nrs
1003007f9d6eSBram Moolenaar      g:val += nr
1004007f9d6eSBram Moolenaar    endfor
1005007f9d6eSBram Moolenaar  enddef
1006007f9d6eSBram Moolenaar  eval range(from, to)
1007007f9d6eSBram Moolenaar        ->Increment()
1008007f9d6eSBram Moolenaar  assert_equal(111 + 3 + 4 + 5, g:val)
1009007f9d6eSBram Moolenaar  unlet g:val
1010d0fe620cSBram Moolenaar
1011d0fe620cSBram Moolenaar  var lines =<< trim END
1012d0fe620cSBram Moolenaar    vim9script
1013d0fe620cSBram Moolenaar    g:caught = 'no'
1014d0fe620cSBram Moolenaar    try
1015d0fe620cSBram Moolenaar      eval 123 || 0
1016d0fe620cSBram Moolenaar    catch
1017d0fe620cSBram Moolenaar      g:caught = 'yes'
1018d0fe620cSBram Moolenaar    endtry
1019d0fe620cSBram Moolenaar    assert_equal('yes', g:caught)
1020d0fe620cSBram Moolenaar    unlet g:caught
1021d0fe620cSBram Moolenaar  END
1022d0fe620cSBram Moolenaar  CheckScriptSuccess(lines)
1023007f9d6eSBram Moolenaarenddef
1024007f9d6eSBram Moolenaar
1025b8a9296cSBram Moolenaardef Test_map_command()
1026ac564082SBram Moolenaar  var lines =<< trim END
1027b8a9296cSBram Moolenaar      nnoremap <F3> :echo 'hit F3 #'<CR>
1028b8a9296cSBram Moolenaar      assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1029b8a9296cSBram Moolenaar  END
1030b8a9296cSBram Moolenaar  CheckDefSuccess(lines)
1031b8a9296cSBram Moolenaar  CheckScriptSuccess(['vim9script'] + lines)
1032b8a9296cSBram Moolenaarenddef
1033b8a9296cSBram Moolenaar
1034b3ea36c5SBram Moolenaardef Test_normal_command()
1035b3ea36c5SBram Moolenaar  new
1036b3ea36c5SBram Moolenaar  setline(1, 'doesnotexist')
1037ac564082SBram Moolenaar  var caught = 0
1038b3ea36c5SBram Moolenaar  try
1039b3ea36c5SBram Moolenaar    exe "norm! \<C-]>"
1040b3ea36c5SBram Moolenaar  catch /E433/
1041b3ea36c5SBram Moolenaar    caught = 2
1042b3ea36c5SBram Moolenaar  endtry
1043b3ea36c5SBram Moolenaar  assert_equal(2, caught)
1044b3ea36c5SBram Moolenaar
1045b3ea36c5SBram Moolenaar  try
1046b3ea36c5SBram Moolenaar    exe "norm! 3\<C-]>"
1047b3ea36c5SBram Moolenaar  catch /E433/
1048b3ea36c5SBram Moolenaar    caught = 3
1049b3ea36c5SBram Moolenaar  endtry
1050b3ea36c5SBram Moolenaar  assert_equal(3, caught)
1051b3ea36c5SBram Moolenaar  bwipe!
1052b3ea36c5SBram Moolenaarenddef
1053b3ea36c5SBram Moolenaar
1054c3516f7eSBram Moolenaardef Test_put_command()
1055c3516f7eSBram Moolenaar  new
1056c3516f7eSBram Moolenaar  @p = 'ppp'
1057c3516f7eSBram Moolenaar  put p
1058c3516f7eSBram Moolenaar  assert_equal('ppp', getline(2))
1059c3516f7eSBram Moolenaar
1060c3516f7eSBram Moolenaar  put ='below'
1061c3516f7eSBram Moolenaar  assert_equal('below', getline(3))
1062c3516f7eSBram Moolenaar  put! ='above'
1063c3516f7eSBram Moolenaar  assert_equal('above', getline(3))
1064c3516f7eSBram Moolenaar  assert_equal('below', getline(4))
1065c3516f7eSBram Moolenaar
1066883cf97fSBram Moolenaar  :2put =['a', 'b', 'c']
1067883cf97fSBram Moolenaar  assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1068883cf97fSBram Moolenaar
106908597875SBram Moolenaar  # compute range at runtime
107008597875SBram Moolenaar  setline(1, range(1, 8))
107108597875SBram Moolenaar  @a = 'aaa'
107208597875SBram Moolenaar  :$-2put a
107308597875SBram Moolenaar  assert_equal('aaa', getline(7))
107408597875SBram Moolenaar
107508597875SBram Moolenaar  setline(1, range(1, 8))
107608597875SBram Moolenaar  :2
107708597875SBram Moolenaar  :+2put! a
107808597875SBram Moolenaar  assert_equal('aaa', getline(4))
107908597875SBram Moolenaar
1080a28639e7SBram Moolenaar  []->mapnew(() => 0)
1081a28639e7SBram Moolenaar  :$put ='end'
1082a28639e7SBram Moolenaar  assert_equal('end', getline('$'))
1083a28639e7SBram Moolenaar
1084c3516f7eSBram Moolenaar  bwipe!
1085025cb1caSBram Moolenaar
1086025cb1caSBram Moolenaar  CheckDefFailure(['put =xxx'], 'E1001:')
1087025cb1caSBram Moolenaarenddef
1088025cb1caSBram Moolenaar
1089025cb1caSBram Moolenaardef Test_put_with_linebreak()
1090025cb1caSBram Moolenaar  new
1091025cb1caSBram Moolenaar  var lines =<< trim END
1092025cb1caSBram Moolenaar    vim9script
1093025cb1caSBram Moolenaar    pu =split('abc', '\zs')
1094025cb1caSBram Moolenaar            ->join()
1095025cb1caSBram Moolenaar  END
1096025cb1caSBram Moolenaar  CheckScriptSuccess(lines)
1097025cb1caSBram Moolenaar  getline(2)->assert_equal('a b c')
1098025cb1caSBram Moolenaar  bwipe!
1099c3516f7eSBram Moolenaarenddef
1100c3516f7eSBram Moolenaar
11013bd8de40SBram Moolenaardef Test_command_star_range()
11023bd8de40SBram Moolenaar  new
11033bd8de40SBram Moolenaar  setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
11043bd8de40SBram Moolenaar  setpos("'<", [0, 1, 0, 0])
11053bd8de40SBram Moolenaar  setpos("'>", [0, 3, 0, 0])
11063bd8de40SBram Moolenaar  :*s/\(foo\|bar\)/baz/g
11073bd8de40SBram Moolenaar  getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
11083bd8de40SBram Moolenaar
11093bd8de40SBram Moolenaar  bwipe!
11103bd8de40SBram Moolenaarenddef
11113bd8de40SBram Moolenaar
111220d89e0aSBram Moolenaardef Test_f_args()
111320d89e0aSBram Moolenaar  var lines =<< trim END
111420d89e0aSBram Moolenaar    vim9script
111520d89e0aSBram Moolenaar
111620d89e0aSBram Moolenaar    func SaveCmdArgs(...)
111720d89e0aSBram Moolenaar      let g:args = a:000
111820d89e0aSBram Moolenaar    endfunc
111920d89e0aSBram Moolenaar
112020d89e0aSBram Moolenaar    command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
112120d89e0aSBram Moolenaar
112220d89e0aSBram Moolenaar    TestFArgs
112320d89e0aSBram Moolenaar    assert_equal([], g:args)
112420d89e0aSBram Moolenaar
112520d89e0aSBram Moolenaar    TestFArgs one two three
112620d89e0aSBram Moolenaar    assert_equal(['one', 'two', 'three'], g:args)
112720d89e0aSBram Moolenaar  END
112820d89e0aSBram Moolenaar  CheckScriptSuccess(lines)
112920d89e0aSBram Moolenaarenddef
1130c3516f7eSBram Moolenaar
1131d1510ee9SBram Moolenaardef Test_user_command_comment()
1132d1510ee9SBram Moolenaar  command -nargs=1 Comd echom <q-args>
1133d1510ee9SBram Moolenaar
1134d1510ee9SBram Moolenaar  var lines =<< trim END
1135d1510ee9SBram Moolenaar      vim9script
1136d1510ee9SBram Moolenaar      Comd # comment
1137d1510ee9SBram Moolenaar  END
1138d1510ee9SBram Moolenaar  CheckScriptSuccess(lines)
1139d1510ee9SBram Moolenaar
1140d1510ee9SBram Moolenaar  lines =<< trim END
1141d1510ee9SBram Moolenaar      vim9script
1142d1510ee9SBram Moolenaar      Comd# comment
1143d1510ee9SBram Moolenaar  END
1144d1510ee9SBram Moolenaar  CheckScriptFailure(lines, 'E1144:')
1145d1510ee9SBram Moolenaar  delcommand Comd
1146b98cec28SBram Moolenaar
1147b98cec28SBram Moolenaar  lines =<< trim END
1148b98cec28SBram Moolenaar      vim9script
1149b98cec28SBram Moolenaar      command Foo echo 'Foo'
1150b98cec28SBram Moolenaar      Foo3Bar
1151b98cec28SBram Moolenaar  END
1152b98cec28SBram Moolenaar  CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1153b98cec28SBram Moolenaar
1154b98cec28SBram Moolenaar  delcommand Foo
1155d1510ee9SBram Moolenaarenddef
1156d1510ee9SBram Moolenaar
115795388e31SBram Moolenaardef Test_star_command()
115895388e31SBram Moolenaar  var lines =<< trim END
115995388e31SBram Moolenaar    vim9script
116095388e31SBram Moolenaar    @s = 'g:success = 8'
116195388e31SBram Moolenaar    set cpo+=*
116295388e31SBram Moolenaar    exe '*s'
116395388e31SBram Moolenaar    assert_equal(8, g:success)
116495388e31SBram Moolenaar    unlet g:success
116595388e31SBram Moolenaar    set cpo-=*
116695388e31SBram Moolenaar    assert_fails("exe '*s'", 'E1050:')
116795388e31SBram Moolenaar  END
116895388e31SBram Moolenaar  CheckScriptSuccess(lines)
116995388e31SBram Moolenaarenddef
117095388e31SBram Moolenaar
117147a2abf0SBram Moolenaardef Test_cmd_argument_without_colon()
117247a2abf0SBram Moolenaar  new Xfile
117347a2abf0SBram Moolenaar  setline(1, ['a', 'b', 'c', 'd'])
117447a2abf0SBram Moolenaar  write
117547a2abf0SBram Moolenaar  edit +3 %
117647a2abf0SBram Moolenaar  assert_equal(3, getcurpos()[1])
117747a2abf0SBram Moolenaar  edit +/a %
117847a2abf0SBram Moolenaar  assert_equal(1, getcurpos()[1])
117947a2abf0SBram Moolenaar  bwipe
118047a2abf0SBram Moolenaar  delete('Xfile')
118147a2abf0SBram Moolenaarenddef
118247a2abf0SBram Moolenaar
11831c0aa978SBram Moolenaardef Test_ambiguous_user_cmd()
1184d1510ee9SBram Moolenaar  command Cmd1 eval 0
1185d1510ee9SBram Moolenaar  command Cmd2 eval 0
11861c0aa978SBram Moolenaar  var lines =<< trim END
11871c0aa978SBram Moolenaar      Cmd
11881c0aa978SBram Moolenaar  END
1189d1510ee9SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E464:', 1)
1190d1510ee9SBram Moolenaar  delcommand Cmd1
1191d1510ee9SBram Moolenaar  delcommand Cmd2
11921c0aa978SBram Moolenaarenddef
11931c0aa978SBram Moolenaar
119452c124d3SBram Moolenaardef Test_command_not_recognized()
119552c124d3SBram Moolenaar  var lines =<< trim END
119652c124d3SBram Moolenaar    d.key = 'asdf'
119752c124d3SBram Moolenaar  END
119852c124d3SBram Moolenaar  CheckDefFailure(lines, 'E1146:', 1)
119952c124d3SBram Moolenaar
120052c124d3SBram Moolenaar  lines =<< trim END
120152c124d3SBram Moolenaar    d['key'] = 'asdf'
120252c124d3SBram Moolenaar  END
120352c124d3SBram Moolenaar  CheckDefFailure(lines, 'E1146:', 1)
120452c124d3SBram Moolenaarenddef
1205b7a78f7aSBram Moolenaar
1206f4e2099eSBram Moolenaardef Test_magic_not_used()
1207f4e2099eSBram Moolenaar  new
1208f4e2099eSBram Moolenaar  for cmd in ['set magic', 'set nomagic']
1209f4e2099eSBram Moolenaar    exe cmd
1210f4e2099eSBram Moolenaar    setline(1, 'aaa')
1211f4e2099eSBram Moolenaar    s/.../bbb/
1212f4e2099eSBram Moolenaar    assert_equal('bbb', getline(1))
1213f4e2099eSBram Moolenaar  endfor
1214f4e2099eSBram Moolenaar
1215f4e2099eSBram Moolenaar  set magic
1216f4e2099eSBram Moolenaar  setline(1, 'aaa')
1217f4e2099eSBram Moolenaar  assert_fails('s/.\M../bbb/', 'E486:')
1218f4e2099eSBram Moolenaar  assert_fails('snomagic/.../bbb/', 'E486:')
1219f4e2099eSBram Moolenaar  assert_equal('aaa', getline(1))
1220f4e2099eSBram Moolenaar
1221f4e2099eSBram Moolenaar  bwipe!
1222f4e2099eSBram Moolenaarenddef
1223f4e2099eSBram Moolenaar
122460f63100SBram Moolenaardef Test_gdefault_not_used()
122560f63100SBram Moolenaar  new
122660f63100SBram Moolenaar  for cmd in ['set gdefault', 'set nogdefault']
122760f63100SBram Moolenaar    exe cmd
122860f63100SBram Moolenaar    setline(1, 'aaa')
122960f63100SBram Moolenaar    s/./b/
123060f63100SBram Moolenaar    assert_equal('baa', getline(1))
123160f63100SBram Moolenaar  endfor
123260f63100SBram Moolenaar
123360f63100SBram Moolenaar  set nogdefault
123460f63100SBram Moolenaar  bwipe!
123560f63100SBram Moolenaarenddef
123660f63100SBram Moolenaar
1237179eb567SBram Moolenaardef g:SomeComplFunc(findstart: number, base: string): any
1238179eb567SBram Moolenaar  if findstart
1239179eb567SBram Moolenaar    return 0
1240179eb567SBram Moolenaar  else
1241179eb567SBram Moolenaar    return ['aaa', 'bbb']
1242179eb567SBram Moolenaar  endif
1243179eb567SBram Moolenaarenddef
1244179eb567SBram Moolenaar
1245179eb567SBram Moolenaardef Test_insert_complete()
1246179eb567SBram Moolenaar  # this was running into an error with the matchparen hack
1247179eb567SBram Moolenaar  new
1248179eb567SBram Moolenaar  set completefunc=SomeComplFunc
1249179eb567SBram Moolenaar  feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1250179eb567SBram Moolenaar  assert_equal('aaa', getline(1))
1251179eb567SBram Moolenaar
1252179eb567SBram Moolenaar  set completefunc=
1253179eb567SBram Moolenaar  bwipe!
1254179eb567SBram Moolenaarenddef
1255179eb567SBram Moolenaar
1256a11919faSBram Moolenaardef Test_wincmd()
1257a11919faSBram Moolenaar  split
1258a11919faSBram Moolenaar  var id1 = win_getid()
1259a11919faSBram Moolenaar  if true
1260a11919faSBram Moolenaar    try | wincmd w | catch | endtry
1261a11919faSBram Moolenaar  endif
1262a11919faSBram Moolenaar  assert_notequal(id1, win_getid())
1263a11919faSBram Moolenaar  close
12641ff89deeSBram Moolenaar
12651ff89deeSBram Moolenaar  split
12661ff89deeSBram Moolenaar  var id = win_getid()
12671ff89deeSBram Moolenaar  split
12681ff89deeSBram Moolenaar  :2wincmd o
12691ff89deeSBram Moolenaar  assert_equal(id, win_getid())
12701ff89deeSBram Moolenaar  only
12711ff89deeSBram Moolenaar
12721ff89deeSBram Moolenaar  split
12731ff89deeSBram Moolenaar  split
12741ff89deeSBram Moolenaar  assert_equal(3, winnr('$'))
12751ff89deeSBram Moolenaar  :2wincmd c
12761ff89deeSBram Moolenaar  assert_equal(2, winnr('$'))
12771ff89deeSBram Moolenaar  only
12781ff89deeSBram Moolenaar
12791ff89deeSBram Moolenaar  split
12801ff89deeSBram Moolenaar  split
12811ff89deeSBram Moolenaar  assert_equal(3, winnr('$'))
12821ff89deeSBram Moolenaar  :2wincmd q
12831ff89deeSBram Moolenaar  assert_equal(2, winnr('$'))
12841ff89deeSBram Moolenaar  only
1285a11919faSBram Moolenaarenddef
1286a11919faSBram Moolenaar
12879567efa1SBram Moolenaardef Test_windo_missing_endif()
12889567efa1SBram Moolenaar  var lines =<< trim END
12899567efa1SBram Moolenaar      windo if 1
12909567efa1SBram Moolenaar  END
12919567efa1SBram Moolenaar  CheckDefExecFailure(lines, 'E171:', 1)
12929567efa1SBram Moolenaarenddef
12939567efa1SBram Moolenaar
1294b2cb6c8bSBram Moolenaarlet s:theList = [1, 2, 3]
1295b2cb6c8bSBram Moolenaar
1296b2cb6c8bSBram Moolenaardef Test_lockvar()
1297b2cb6c8bSBram Moolenaar  s:theList[1] = 22
1298b2cb6c8bSBram Moolenaar  assert_equal([1, 22, 3], s:theList)
1299b2cb6c8bSBram Moolenaar  lockvar s:theList
1300b2cb6c8bSBram Moolenaar  assert_fails('theList[1] = 77', 'E741:')
1301b2cb6c8bSBram Moolenaar  unlockvar s:theList
1302b2cb6c8bSBram Moolenaar  s:theList[1] = 44
1303b2cb6c8bSBram Moolenaar  assert_equal([1, 44, 3], s:theList)
1304b2cb6c8bSBram Moolenaar
1305aacc966cSBram Moolenaar  var d = {a: 1, b: 2}
1306aacc966cSBram Moolenaar  d.a = 3
1307aacc966cSBram Moolenaar  d.b = 4
1308aacc966cSBram Moolenaar  assert_equal({a: 3, b: 4}, d)
1309aacc966cSBram Moolenaar  lockvar d.a
1310aacc966cSBram Moolenaar  d.b = 5
1311aacc966cSBram Moolenaar  var ex = ''
1312aacc966cSBram Moolenaar  try
1313aacc966cSBram Moolenaar    d.a = 6
1314aacc966cSBram Moolenaar  catch
1315aacc966cSBram Moolenaar    ex = v:exception
1316aacc966cSBram Moolenaar  endtry
1317aacc966cSBram Moolenaar  assert_match('E1121:', ex)
1318aacc966cSBram Moolenaar  unlockvar d.a
1319aacc966cSBram Moolenaar  d.a = 7
1320aacc966cSBram Moolenaar  assert_equal({a: 7, b: 5}, d)
1321aacc966cSBram Moolenaar
1322b2cb6c8bSBram Moolenaar  var lines =<< trim END
1323b2cb6c8bSBram Moolenaar      vim9script
1324b2cb6c8bSBram Moolenaar      var theList = [1, 2, 3]
1325b2cb6c8bSBram Moolenaar      def SetList()
1326b2cb6c8bSBram Moolenaar        theList[1] = 22
1327b2cb6c8bSBram Moolenaar        assert_equal([1, 22, 3], theList)
1328b2cb6c8bSBram Moolenaar        lockvar theList
1329b2cb6c8bSBram Moolenaar        theList[1] = 77
1330b2cb6c8bSBram Moolenaar      enddef
1331b2cb6c8bSBram Moolenaar      SetList()
1332b2cb6c8bSBram Moolenaar  END
1333b2cb6c8bSBram Moolenaar  CheckScriptFailure(lines, 'E1119', 4)
1334b2cb6c8bSBram Moolenaar
1335b2cb6c8bSBram Moolenaar  lines =<< trim END
1336b2cb6c8bSBram Moolenaar      var theList = [1, 2, 3]
1337b2cb6c8bSBram Moolenaar      lockvar theList
1338b2cb6c8bSBram Moolenaar  END
1339b2cb6c8bSBram Moolenaar  CheckDefFailure(lines, 'E1178', 2)
1340b2cb6c8bSBram Moolenaar
1341b2cb6c8bSBram Moolenaar  lines =<< trim END
1342b2cb6c8bSBram Moolenaar      var theList = [1, 2, 3]
1343b2cb6c8bSBram Moolenaar      unlockvar theList
1344b2cb6c8bSBram Moolenaar  END
1345b2cb6c8bSBram Moolenaar  CheckDefFailure(lines, 'E1178', 2)
1346b2cb6c8bSBram Moolenaarenddef
1347b2cb6c8bSBram Moolenaar
13484c137214SBram Moolenaardef Test_substitute_expr()
13494c137214SBram Moolenaar  var to = 'repl'
13504c137214SBram Moolenaar  new
13514c137214SBram Moolenaar  setline(1, 'one from two')
13524c137214SBram Moolenaar  s/from/\=to
13534c137214SBram Moolenaar  assert_equal('one repl two', getline(1))
13544c137214SBram Moolenaar
13554c137214SBram Moolenaar  setline(1, 'one from two')
13564c137214SBram Moolenaar  s/from/\=to .. '_x'
13574c137214SBram Moolenaar  assert_equal('one repl_x two', getline(1))
13584c137214SBram Moolenaar
13594c137214SBram Moolenaar  setline(1, 'one from two from three')
13604c137214SBram Moolenaar  var also = 'also'
13614c137214SBram Moolenaar  s/from/\=to .. '_' .. also/g#e
13624c137214SBram Moolenaar  assert_equal('one repl_also two repl_also three', getline(1))
13634c137214SBram Moolenaar
13648238f088SBram Moolenaar  setline(1, 'abc abc abc')
13658238f088SBram Moolenaar  for choice in [true, false]
13668238f088SBram Moolenaar    :1s/abc/\=choice ? 'yes' : 'no'/
13678238f088SBram Moolenaar  endfor
13688238f088SBram Moolenaar  assert_equal('yes no abc', getline(1))
13698238f088SBram Moolenaar
1370d386e923SBram Moolenaar  bwipe!
1371d386e923SBram Moolenaar
13724c137214SBram Moolenaar  CheckDefFailure(['s/from/\="x")/'], 'E488:')
13734c137214SBram Moolenaar  CheckDefFailure(['s/from/\="x"/9'], 'E488:')
13744c137214SBram Moolenaar
1375d386e923SBram Moolenaar  # When calling a function the right instruction list needs to be restored.
13765930ddcdSBram Moolenaar  g:cond = true
1377d386e923SBram Moolenaar  var lines =<< trim END
1378d386e923SBram Moolenaar      vim9script
1379d386e923SBram Moolenaar      def Foo()
1380d386e923SBram Moolenaar          Bar([])
1381d386e923SBram Moolenaar      enddef
1382d386e923SBram Moolenaar      def Bar(l: list<number>)
13835930ddcdSBram Moolenaar        if g:cond
1384d386e923SBram Moolenaar          s/^/\=Rep()/
1385d386e923SBram Moolenaar          for n in l[:]
1386d386e923SBram Moolenaar          endfor
13875930ddcdSBram Moolenaar        endif
1388d386e923SBram Moolenaar      enddef
1389d386e923SBram Moolenaar      def Rep(): string
1390d386e923SBram Moolenaar          return 'rep'
1391d386e923SBram Moolenaar      enddef
1392d386e923SBram Moolenaar      new
1393d386e923SBram Moolenaar      Foo()
1394d386e923SBram Moolenaar      assert_equal('rep', getline(1))
13954c137214SBram Moolenaar      bwipe!
1396d386e923SBram Moolenaar  END
1397d386e923SBram Moolenaar  CheckScriptSuccess(lines)
13985930ddcdSBram Moolenaar  unlet g:cond
139927523606SBram Moolenaar
140027523606SBram Moolenaar  # List results in multiple lines
140127523606SBram Moolenaar  new
140227523606SBram Moolenaar  setline(1, 'some text here')
140327523606SBram Moolenaar  s/text/\=['aaa', 'bbb', 'ccc']/
140427523606SBram Moolenaar  assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
140527523606SBram Moolenaar  bwipe!
14064c137214SBram Moolenaarenddef
14074c137214SBram Moolenaar
14082d1c57edSBram Moolenaardef Test_redir_to_var()
14092d1c57edSBram Moolenaar  var result: string
14102d1c57edSBram Moolenaar  redir => result
14112d1c57edSBram Moolenaar    echo 'something'
14122d1c57edSBram Moolenaar  redir END
14132d1c57edSBram Moolenaar  assert_equal("\nsomething", result)
14142d1c57edSBram Moolenaar
14152d1c57edSBram Moolenaar  redir =>> result
14162d1c57edSBram Moolenaar    echo 'more'
14172d1c57edSBram Moolenaar  redir END
14182d1c57edSBram Moolenaar  assert_equal("\nsomething\nmore", result)
14192d1c57edSBram Moolenaar
1420753bcf8cSBram Moolenaar  var d: dict<string>
1421753bcf8cSBram Moolenaar  redir => d.redir
1422753bcf8cSBram Moolenaar    echo 'dict'
1423753bcf8cSBram Moolenaar  redir END
1424753bcf8cSBram Moolenaar  assert_equal({redir: "\ndict"}, d)
1425753bcf8cSBram Moolenaar
1426753bcf8cSBram Moolenaar  var l = ['a', 'b', 'c']
1427753bcf8cSBram Moolenaar  redir => l[1]
1428753bcf8cSBram Moolenaar    echo 'list'
1429753bcf8cSBram Moolenaar  redir END
1430753bcf8cSBram Moolenaar  assert_equal(['a', "\nlist", 'c'], l)
1431753bcf8cSBram Moolenaar
1432753bcf8cSBram Moolenaar  var dl = {l: ['x']}
1433753bcf8cSBram Moolenaar  redir => dl.l[0]
1434753bcf8cSBram Moolenaar    echo 'dict-list'
1435753bcf8cSBram Moolenaar  redir END
1436753bcf8cSBram Moolenaar  assert_equal({l: ["\ndict-list"]}, dl)
1437753bcf8cSBram Moolenaar
1438a369c3d9SBram Moolenaar  redir =>> d.redir
1439a369c3d9SBram Moolenaar    echo 'more'
1440a369c3d9SBram Moolenaar  redir END
1441a369c3d9SBram Moolenaar  assert_equal({redir: "\ndict\nmore"}, d)
1442a369c3d9SBram Moolenaar
14432d1c57edSBram Moolenaar  var lines =<< trim END
14442d1c57edSBram Moolenaar    redir => notexist
14452d1c57edSBram Moolenaar  END
14462d1c57edSBram Moolenaar  CheckDefFailure(lines, 'E1089:')
1447753bcf8cSBram Moolenaar
1448753bcf8cSBram Moolenaar  lines =<< trim END
1449753bcf8cSBram Moolenaar    var ls = 'asdf'
1450753bcf8cSBram Moolenaar    redir => ls[1]
1451753bcf8cSBram Moolenaar    redir END
1452753bcf8cSBram Moolenaar  END
1453753bcf8cSBram Moolenaar  CheckDefFailure(lines, 'E1141:')
14542d1c57edSBram Moolenaarenddef
14552d1c57edSBram Moolenaar
145668db996bSBram Moolenaardef Test_echo_void()
145768db996bSBram Moolenaar  var lines =<< trim END
145868db996bSBram Moolenaar      vim9script
145968db996bSBram Moolenaar      def NoReturn()
146068db996bSBram Moolenaar        echo 'nothing'
146168db996bSBram Moolenaar      enddef
146268db996bSBram Moolenaar      echo NoReturn()
146368db996bSBram Moolenaar  END
146468db996bSBram Moolenaar  CheckScriptFailure(lines, 'E1186:', 5)
146568db996bSBram Moolenaar
146668db996bSBram Moolenaar  lines =<< trim END
146768db996bSBram Moolenaar      vim9script
146868db996bSBram Moolenaar      def NoReturn()
146968db996bSBram Moolenaar        echo 'nothing'
147068db996bSBram Moolenaar      enddef
147168db996bSBram Moolenaar      def Try()
147268db996bSBram Moolenaar        echo NoReturn()
147368db996bSBram Moolenaar      enddef
147468db996bSBram Moolenaar      defcompile
147568db996bSBram Moolenaar  END
147668db996bSBram Moolenaar  CheckScriptFailure(lines, 'E1186:', 1)
14772c70711eSBram Moolenaarenddef
14782c70711eSBram Moolenaar
14792c70711eSBram Moolenaardef Test_cmdwin_block()
14802c70711eSBram Moolenaar  augroup justTesting
14812c70711eSBram Moolenaar    autocmd BufEnter * {
14822c70711eSBram Moolenaar      echomsg 'in block'
14832c70711eSBram Moolenaar    }
14842c70711eSBram Moolenaar  augroup END
14852c70711eSBram Moolenaar  feedkeys('q:', 'xt')
14862c70711eSBram Moolenaar  redraw
14872c70711eSBram Moolenaar  feedkeys("aclose\<CR>", 'xt')
14882c70711eSBram Moolenaar
14892c70711eSBram Moolenaar  au! justTesting
149068db996bSBram Moolenaarenddef
149168db996bSBram Moolenaar
14927b829268SBram Moolenaardef Test_var_not_cmd()
14937b829268SBram Moolenaar  var lines =<< trim END
14947b829268SBram Moolenaar      g:notexist:cmd
14957b829268SBram Moolenaar  END
14967b829268SBram Moolenaar  CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1)
14977b829268SBram Moolenaar
14987b829268SBram Moolenaar  lines =<< trim END
14997b829268SBram Moolenaar      g-pat-cmd
15007b829268SBram Moolenaar  END
15017b829268SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1241:', 1)
1502051a8a37SBram Moolenaar  lines =<< trim END
1503051a8a37SBram Moolenaar      g.pat.cmd
1504051a8a37SBram Moolenaar  END
1505051a8a37SBram Moolenaar  CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1)
15067b829268SBram Moolenaar
15077b829268SBram Moolenaar  lines =<< trim END
15087b829268SBram Moolenaar      s:notexist:repl
15097b829268SBram Moolenaar  END
15107b829268SBram Moolenaar  CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1)
15117b829268SBram Moolenaar
15127b829268SBram Moolenaar  lines =<< trim END
15137b829268SBram Moolenaar      s-pat-repl
15147b829268SBram Moolenaar  END
15157b829268SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1241:', 1)
1516051a8a37SBram Moolenaar  lines =<< trim END
1517051a8a37SBram Moolenaar      s.pat.repl
1518051a8a37SBram Moolenaar  END
1519051a8a37SBram Moolenaar  CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1)
15207b829268SBram Moolenaar
15217b829268SBram Moolenaar  lines =<< trim END
15227b829268SBram Moolenaar      w:notexist->len()
15237b829268SBram Moolenaar  END
15247b829268SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
15257b829268SBram Moolenaar
15267b829268SBram Moolenaar  lines =<< trim END
15277b829268SBram Moolenaar      b:notexist->len()
15287b829268SBram Moolenaar  END
15297b829268SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
15307b829268SBram Moolenaar
15317b829268SBram Moolenaar  lines =<< trim END
15327b829268SBram Moolenaar      t:notexist->len()
15337b829268SBram Moolenaar  END
15347b829268SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
15357b829268SBram Moolenaarenddef
15367b829268SBram Moolenaar
15377b829268SBram Moolenaardef Test_no_space_after_command()
15387b829268SBram Moolenaar  var lines =<< trim END
15397b829268SBram Moolenaar      g /pat/cmd
15407b829268SBram Moolenaar  END
15417b829268SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1242:', 1)
1542c0abac67SBram Moolenaar  lines =<< trim END
1543c0abac67SBram Moolenaar      g #pat#cmd
1544c0abac67SBram Moolenaar  END
1545c0abac67SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1242:', 1)
1546c0abac67SBram Moolenaar  lines =<< trim END
1547c0abac67SBram Moolenaar      g#pat#cmd
1548c0abac67SBram Moolenaar  END
1549c0abac67SBram Moolenaar  CheckDefAndScriptSuccess(lines)
1550c0abac67SBram Moolenaar  lines =<< trim END
1551c0abac67SBram Moolenaar      g# pat#cmd
1552c0abac67SBram Moolenaar  END
1553c0abac67SBram Moolenaar  CheckDefAndScriptSuccess(lines)
15547b829268SBram Moolenaar
15557b829268SBram Moolenaar  lines =<< trim END
15567b829268SBram Moolenaar      s /pat/repl
15577b829268SBram Moolenaar  END
15587b829268SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1242:', 1)
1559c0abac67SBram Moolenaar  lines =<< trim END
1560c0abac67SBram Moolenaar      s #pat#repl
1561c0abac67SBram Moolenaar  END
1562c0abac67SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1242:', 1)
1563c0abac67SBram Moolenaar  lines =<< trim END
1564c0abac67SBram Moolenaar      s#pat#repl
1565c0abac67SBram Moolenaar  END
1566c0abac67SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1567c0abac67SBram Moolenaar  lines =<< trim END
1568c0abac67SBram Moolenaar      s# pat#repl
1569c0abac67SBram Moolenaar  END
1570c0abac67SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E486:', 1)
15717b829268SBram Moolenaarenddef
15727b829268SBram Moolenaar
15732a16dc66SYegappan Lakshmanan" Test for the 'previewpopup' option
15742a16dc66SYegappan Lakshmanandef Test_previewpopup()
1575733b124aSYegappan Lakshmanan  set previewpopup=height:10,width:60
1576733b124aSYegappan Lakshmanan  pedit Xfile
1577733b124aSYegappan Lakshmanan  var id = popup_findpreview()
1578733b124aSYegappan Lakshmanan  assert_notequal(id, 0)
1579733b124aSYegappan Lakshmanan  assert_match('Xfile', popup_getoptions(id).title)
1580733b124aSYegappan Lakshmanan  popup_clear()
1581733b124aSYegappan Lakshmanan  set previewpopup&
1582733b124aSYegappan Lakshmananenddef
1583733b124aSYegappan Lakshmanan
1584*c8a9fe54SBram Moolenaardef Test_syntax_enable_clear()
1585*c8a9fe54SBram Moolenaar  syntax clear
1586*c8a9fe54SBram Moolenaar  syntax enable
1587*c8a9fe54SBram Moolenaar  highlight clear String
1588*c8a9fe54SBram Moolenaar  assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1589*c8a9fe54SBram Moolenaar  syntax clear
1590*c8a9fe54SBram Moolenaarenddef
1591*c8a9fe54SBram Moolenaar
1592b2cb6c8bSBram Moolenaar
1593cfe435d7SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
1594