18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language.
28a7d6542SBram Moolenaar
3673660abSBram Moolenaarsource check.vim
4ad39c094SBram Moolenaarsource view_util.vim
5673660abSBram Moolenaar
68a7d6542SBram Moolenaar" Check that "lines" inside ":def" results in an "error" message.
78a7d6542SBram Moolenaarfunc CheckDefFailure(lines, error)
8978d170bSBram Moolenaar  call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef')
98a7d6542SBram Moolenaar  call assert_fails('so Xdef', a:error, a:lines)
108a7d6542SBram Moolenaar  call delete('Xdef')
118a7d6542SBram Moolenaarendfunc
128a7d6542SBram Moolenaar
138a7d6542SBram Moolenaarfunc CheckScriptFailure(lines, error)
148a7d6542SBram Moolenaar  call writefile(a:lines, 'Xdef')
158a7d6542SBram Moolenaar  call assert_fails('so Xdef', a:error, a:lines)
168a7d6542SBram Moolenaar  call delete('Xdef')
178a7d6542SBram Moolenaarendfunc
188a7d6542SBram Moolenaar
198a7d6542SBram Moolenaardef Test_syntax()
208a7d6542SBram Moolenaar  let var = 234
218a7d6542SBram Moolenaar  let other: list<string> = ['asdf']
228a7d6542SBram Moolenaarenddef
238a7d6542SBram Moolenaar
248a7d6542SBram Moolenaarfunc Test_def_basic()
258a7d6542SBram Moolenaar  def SomeFunc(): string
268a7d6542SBram Moolenaar    return 'yes'
278a7d6542SBram Moolenaar  enddef
288a7d6542SBram Moolenaar  call assert_equal('yes', SomeFunc())
298a7d6542SBram Moolenaarendfunc
308a7d6542SBram Moolenaar
316e587dcbSBram Moolenaarlet s:appendToMe = 'xxx'
326e587dcbSBram Moolenaarlet s:addToMe = 111
33401d9ffbSBram Moolenaarlet g:existing = 'yes'
346e587dcbSBram Moolenaar
358a7d6542SBram Moolenaardef Test_assignment()
368a7d6542SBram Moolenaar  let bool1: bool = true
378a7d6542SBram Moolenaar  assert_equal(v:true, bool1)
388a7d6542SBram Moolenaar  let bool2: bool = false
398a7d6542SBram Moolenaar  assert_equal(v:false, bool2)
408a7d6542SBram Moolenaar
410c2ca58eSBram Moolenaar  let list1: list<bool> = [false, true, false]
428a7d6542SBram Moolenaar  let list2: list<number> = [1, 2, 3]
430c2ca58eSBram Moolenaar  let list3: list<string> = ['sdf', 'asdf']
440c2ca58eSBram Moolenaar  let list4: list<any> = ['yes', true, 1234]
450c2ca58eSBram Moolenaar  let list5: list<blob> = [0z01, 0z02]
468a7d6542SBram Moolenaar
47436472f5SBram Moolenaar  let listS: list<string> = []
48436472f5SBram Moolenaar  let listN: list<number> = []
498a7d6542SBram Moolenaar
500c2ca58eSBram Moolenaar  let dict1: dict<bool> = #{one: false, two: true}
518a7d6542SBram Moolenaar  let dict2: dict<number> = #{one: 1, two: 2}
520c2ca58eSBram Moolenaar  let dict3: dict<string> = #{key: 'value'}
530c2ca58eSBram Moolenaar  let dict4: dict<any> = #{one: 1, two: '2'}
540c2ca58eSBram Moolenaar  let dict5: dict<blob> = #{one: 0z01, tw: 0z02}
55b283a8a6SBram Moolenaar
56*42a480bfSBram Moolenaar  if has('channel')
57*42a480bfSBram Moolenaar    let chan1: channel
58*42a480bfSBram Moolenaar  endif
59*42a480bfSBram Moolenaar
60401d9ffbSBram Moolenaar  g:newvar = 'new'
61401d9ffbSBram Moolenaar  assert_equal('new', g:newvar)
62401d9ffbSBram Moolenaar
63401d9ffbSBram Moolenaar  assert_equal('yes', g:existing)
64401d9ffbSBram Moolenaar  g:existing = 'no'
65401d9ffbSBram Moolenaar  assert_equal('no', g:existing)
66401d9ffbSBram Moolenaar
67b283a8a6SBram Moolenaar  v:char = 'abc'
686e587dcbSBram Moolenaar  assert_equal('abc', v:char)
69b283a8a6SBram Moolenaar
70b283a8a6SBram Moolenaar  $ENVVAR = 'foobar'
716e587dcbSBram Moolenaar  assert_equal('foobar', $ENVVAR)
72b283a8a6SBram Moolenaar  $ENVVAR = ''
736e587dcbSBram Moolenaar
74fd1823e0SBram Moolenaar  s:appendToMe ..= 'yyy'
75fd1823e0SBram Moolenaar  assert_equal('xxxyyy', s:appendToMe)
76fd1823e0SBram Moolenaar  s:addToMe += 222
77fd1823e0SBram Moolenaar  assert_equal(333, s:addToMe)
780bbf722aSBram Moolenaar  s:newVar = 'new'
790bbf722aSBram Moolenaar  assert_equal('new', s:newVar)
808a7d6542SBram Moolenaarenddef
818a7d6542SBram Moolenaar
828a7d6542SBram Moolenaarfunc Test_assignment_failure()
838a7d6542SBram Moolenaar  call CheckDefFailure(['let var=234'], 'E1004:')
848a7d6542SBram Moolenaar  call CheckDefFailure(['let var =234'], 'E1004:')
858a7d6542SBram Moolenaar  call CheckDefFailure(['let var= 234'], 'E1004:')
868a7d6542SBram Moolenaar
878a7d6542SBram Moolenaar  call CheckDefFailure(['let true = 1'], 'E1034:')
888a7d6542SBram Moolenaar  call CheckDefFailure(['let false = 1'], 'E1034:')
898a7d6542SBram Moolenaar
908a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>')
918a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
928a7d6542SBram Moolenaar
938a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
948a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
958a7d6542SBram Moolenaar
968a7d6542SBram Moolenaar  call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:')
978a7d6542SBram Moolenaar  call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void')
98*42a480bfSBram Moolenaar
99*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: dict <number>'], 'E1007:')
100*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
101*42a480bfSBram Moolenaar
102*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: ally'], 'E1010:')
103*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: bram'], 'E1010:')
104*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: cathy'], 'E1010:')
105*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: dom'], 'E1010:')
106*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: freddy'], 'E1010:')
107*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: john'], 'E1010:')
108*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: larry'], 'E1010:')
109*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: ned'], 'E1010:')
110*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: pam'], 'E1010:')
111*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: sam'], 'E1010:')
112*42a480bfSBram Moolenaar  call CheckDefFailure(['let var: vim'], 'E1010:')
1138a7d6542SBram Moolenaarendfunc
1148a7d6542SBram Moolenaar
1158a7d6542SBram Moolenaarfunc Test_const()
1168a7d6542SBram Moolenaar  call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:')
1178a7d6542SBram Moolenaar  call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:')
1188a7d6542SBram Moolenaar  call CheckDefFailure(['const two'], 'E1021:')
1198a7d6542SBram Moolenaarendfunc
1208a7d6542SBram Moolenaar
1218a7d6542SBram Moolenaardef Test_block()
1228a7d6542SBram Moolenaar  let outer = 1
1238a7d6542SBram Moolenaar  {
1248a7d6542SBram Moolenaar    let inner = 2
1258a7d6542SBram Moolenaar    assert_equal(1, outer)
1268a7d6542SBram Moolenaar    assert_equal(2, inner)
1278a7d6542SBram Moolenaar  }
1288a7d6542SBram Moolenaar  assert_equal(1, outer)
1298a7d6542SBram Moolenaarenddef
1308a7d6542SBram Moolenaar
1318a7d6542SBram Moolenaarfunc Test_block_failure()
1328a7d6542SBram Moolenaar  call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
1338a7d6542SBram Moolenaarendfunc
1348a7d6542SBram Moolenaar
1358a7d6542SBram Moolenaardef ReturnString(): string
1368a7d6542SBram Moolenaar  return 'string'
1378a7d6542SBram Moolenaarenddef
1388a7d6542SBram Moolenaar
1398a7d6542SBram Moolenaardef ReturnNumber(): number
1408a7d6542SBram Moolenaar  return 123
1418a7d6542SBram Moolenaarenddef
1428a7d6542SBram Moolenaar
14309f28f49SBram Moolenaarlet g:notNumber = 'string'
14409f28f49SBram Moolenaar
14509f28f49SBram Moolenaardef ReturnGlobal(): number
14609f28f49SBram Moolenaar  return g:notNumber
14709f28f49SBram Moolenaarenddef
14809f28f49SBram Moolenaar
1498a7d6542SBram Moolenaardef Test_return_string()
1508a7d6542SBram Moolenaar  assert_equal('string', ReturnString())
1518a7d6542SBram Moolenaar  assert_equal(123, ReturnNumber())
15209f28f49SBram Moolenaar  assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string')
1538a7d6542SBram Moolenaarenddef
1548a7d6542SBram Moolenaar
1558a7d6542SBram Moolenaarfunc Increment()
1568a7d6542SBram Moolenaar  let g:counter += 1
1578a7d6542SBram Moolenaarendfunc
1588a7d6542SBram Moolenaar
1598a7d6542SBram Moolenaardef Test_call_ufunc_count()
1608a7d6542SBram Moolenaar  g:counter = 1
1618a7d6542SBram Moolenaar  Increment()
1628a7d6542SBram Moolenaar  Increment()
1638a7d6542SBram Moolenaar  Increment()
1648a7d6542SBram Moolenaar  " works with and without :call
1658a7d6542SBram Moolenaar  assert_equal(4, g:counter)
166b283a8a6SBram Moolenaar  call assert_equal(4, g:counter)
1678a7d6542SBram Moolenaar  unlet g:counter
1688a7d6542SBram Moolenaarenddef
1698a7d6542SBram Moolenaar
1708a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string
1718a7d6542SBram Moolenaar  let res = arg
1728a7d6542SBram Moolenaar  for s in rest
1738a7d6542SBram Moolenaar    res ..= ',' .. s
1748a7d6542SBram Moolenaar  endfor
1758a7d6542SBram Moolenaar  return res
1768a7d6542SBram Moolenaarenddef
1778a7d6542SBram Moolenaar
1788a7d6542SBram Moolenaardef Test_call_varargs()
1798a7d6542SBram Moolenaar  assert_equal('one', MyVarargs('one'))
1808a7d6542SBram Moolenaar  assert_equal('one,two', MyVarargs('one', 'two'))
1818a7d6542SBram Moolenaar  assert_equal('one,two,three', MyVarargs('one', 'two', 'three'))
1828a7d6542SBram Moolenaarenddef
1838a7d6542SBram Moolenaar
184170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string
185170fcfcfSBram Moolenaar  return name
186170fcfcfSBram Moolenaarenddef
187170fcfcfSBram Moolenaar
188170fcfcfSBram Moolenaardef Test_call_default_args()
189170fcfcfSBram Moolenaar  assert_equal('string', MyDefaultArgs())
190170fcfcfSBram Moolenaar  assert_equal('one', MyDefaultArgs('one'))
191170fcfcfSBram Moolenaar  assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
192170fcfcfSBram Moolenaarenddef
193170fcfcfSBram Moolenaar
194170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func()
195170fcfcfSBram Moolenaar  call assert_equal('string', MyDefaultArgs())
196170fcfcfSBram Moolenaar  call assert_equal('one', MyDefaultArgs('one'))
197170fcfcfSBram Moolenaar  call assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
198170fcfcfSBram Moolenaarendfunc
199170fcfcfSBram Moolenaar
200b35efa5eSBram Moolenaarfunc TakesOneArg(arg)
201b35efa5eSBram Moolenaar  echo a:arg
202b35efa5eSBram Moolenaarendfunc
203b35efa5eSBram Moolenaar
204b35efa5eSBram Moolenaardef Test_call_wrong_arg_count()
205b35efa5eSBram Moolenaar  call CheckDefFailure(['TakesOneArg()'], 'E119:')
206b35efa5eSBram Moolenaar  call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:')
207b35efa5eSBram Moolenaarenddef
208b35efa5eSBram Moolenaar
209170fcfcfSBram Moolenaar" Default arg and varargs
210170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string
211170fcfcfSBram Moolenaar  let res = one .. ',' .. two
212170fcfcfSBram Moolenaar  for s in rest
213170fcfcfSBram Moolenaar    res ..= ',' .. s
214170fcfcfSBram Moolenaar  endfor
215170fcfcfSBram Moolenaar  return res
216170fcfcfSBram Moolenaarenddef
217170fcfcfSBram Moolenaar
218170fcfcfSBram Moolenaardef Test_call_def_varargs()
219170fcfcfSBram Moolenaar  call assert_fails('call MyDefVarargs()', 'E119:')
220170fcfcfSBram Moolenaar  assert_equal('one,foo', MyDefVarargs('one'))
221170fcfcfSBram Moolenaar  assert_equal('one,two', MyDefVarargs('one', 'two'))
222170fcfcfSBram Moolenaar  assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three'))
223170fcfcfSBram Moolenaarenddef
224170fcfcfSBram Moolenaar
225*42a480bfSBram Moolenaardef Test_using_var_as_arg()
226*42a480bfSBram Moolenaar  call writefile(['def Func(x: number)',  'let x = 234', 'enddef'], 'Xdef')
227*42a480bfSBram Moolenaar  call assert_fails('so Xdef', 'E1006:')
228*42a480bfSBram Moolenaar  call delete('Xdef')
229*42a480bfSBram Moolenaarenddef
230*42a480bfSBram Moolenaar
231b35efa5eSBram Moolenaardef Test_call_func_defined_later()
232b35efa5eSBram Moolenaar  call assert_equal('one', DefinedLater('one'))
233b35efa5eSBram Moolenaar  call assert_fails('call NotDefined("one")', 'E117:')
234b35efa5eSBram Moolenaarenddef
235170fcfcfSBram Moolenaar
236b35efa5eSBram Moolenaarfunc DefinedLater(arg)
23726e117e9SBram Moolenaar  return a:arg
23826e117e9SBram Moolenaarendfunc
23926e117e9SBram Moolenaar
2407eeefd4aSBram Moolenaardef FuncWithForwardCall()
2417eeefd4aSBram Moolenaar  return DefinedEvenLater("yes")
2427eeefd4aSBram Moolenaarenddef
2437eeefd4aSBram Moolenaar
2447eeefd4aSBram Moolenaardef DefinedEvenLater(arg: string): string
2457eeefd4aSBram Moolenaar  return arg
2467eeefd4aSBram Moolenaarenddef
2477eeefd4aSBram Moolenaar
2487eeefd4aSBram Moolenaardef Test_error_in_nested_function()
2497eeefd4aSBram Moolenaar  " Error in called function requires unwinding the call stack.
2507eeefd4aSBram Moolenaar  assert_fails('call FuncWithForwardCall()', 'E1029')
2517eeefd4aSBram Moolenaarenddef
2527eeefd4aSBram Moolenaar
2538a7d6542SBram Moolenaardef Test_return_type_wrong()
254978d170bSBram Moolenaar  CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string')
255978d170bSBram Moolenaar  CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number')
256978d170bSBram Moolenaar  CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string')
257978d170bSBram Moolenaar  CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string')
2588a7d6542SBram Moolenaarenddef
2598a7d6542SBram Moolenaar
260bfe12043SBram Moolenaardef Test_arg_type_wrong()
261bfe12043SBram Moolenaar  CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>')
262bfe12043SBram Moolenaarenddef
263bfe12043SBram Moolenaar
2648a7d6542SBram Moolenaardef Test_try_catch()
2658a7d6542SBram Moolenaar  let l = []
2668a7d6542SBram Moolenaar  try
2678a7d6542SBram Moolenaar    add(l, '1')
2688a7d6542SBram Moolenaar    throw 'wrong'
2698a7d6542SBram Moolenaar    add(l, '2')
2708a7d6542SBram Moolenaar  catch
2718a7d6542SBram Moolenaar    add(l, v:exception)
2728a7d6542SBram Moolenaar  finally
2738a7d6542SBram Moolenaar    add(l, '3')
2748a7d6542SBram Moolenaar  endtry
2758a7d6542SBram Moolenaar  assert_equal(['1', 'wrong', '3'], l)
2768a7d6542SBram Moolenaarenddef
2778a7d6542SBram Moolenaar
278257cc5eeSBram Moolenaardef ThrowFromDef()
279257cc5eeSBram Moolenaar  throw 'getout'
280257cc5eeSBram Moolenaarenddef
281257cc5eeSBram Moolenaar
282257cc5eeSBram Moolenaarfunc CatchInFunc()
283257cc5eeSBram Moolenaar  try
284257cc5eeSBram Moolenaar    call ThrowFromDef()
285257cc5eeSBram Moolenaar  catch
286257cc5eeSBram Moolenaar    let g:thrown_func = v:exception
287257cc5eeSBram Moolenaar  endtry
288257cc5eeSBram Moolenaarendfunc
289257cc5eeSBram Moolenaar
290257cc5eeSBram Moolenaardef CatchInDef()
291257cc5eeSBram Moolenaar  try
292257cc5eeSBram Moolenaar    ThrowFromDef()
293257cc5eeSBram Moolenaar  catch
294257cc5eeSBram Moolenaar    g:thrown_def = v:exception
295257cc5eeSBram Moolenaar  endtry
296257cc5eeSBram Moolenaarenddef
297257cc5eeSBram Moolenaar
298f575adffSBram Moolenaardef ReturnFinally(): string
299f575adffSBram Moolenaar  try
300f575adffSBram Moolenaar    return 'intry'
301f575adffSBram Moolenaar  finally
302f575adffSBram Moolenaar    g:in_finally = 'finally'
303f575adffSBram Moolenaar  endtry
304f575adffSBram Moolenaar  return 'end'
305f575adffSBram Moolenaarenddef
306f575adffSBram Moolenaar
307257cc5eeSBram Moolenaardef Test_try_catch_nested()
308257cc5eeSBram Moolenaar  CatchInFunc()
309257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_func)
310257cc5eeSBram Moolenaar
311257cc5eeSBram Moolenaar  CatchInDef()
312257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_def)
313f575adffSBram Moolenaar
314f575adffSBram Moolenaar  assert_equal('intry', ReturnFinally())
315f575adffSBram Moolenaar  assert_equal('finally', g:in_finally)
316f575adffSBram Moolenaarenddef
317f575adffSBram Moolenaar
318f575adffSBram Moolenaardef Test_try_catch_match()
319f575adffSBram Moolenaar  let seq = 'a'
320f575adffSBram Moolenaar  try
321f575adffSBram Moolenaar    throw 'something'
322f575adffSBram Moolenaar  catch /nothing/
323f575adffSBram Moolenaar    seq ..= 'x'
324f575adffSBram Moolenaar  catch /some/
325f575adffSBram Moolenaar    seq ..= 'b'
326f575adffSBram Moolenaar  catch /asdf/
327f575adffSBram Moolenaar    seq ..= 'x'
328f575adffSBram Moolenaar  finally
329f575adffSBram Moolenaar    seq ..= 'c'
330f575adffSBram Moolenaar  endtry
331f575adffSBram Moolenaar  assert_equal('abc', seq)
332257cc5eeSBram Moolenaarenddef
333257cc5eeSBram Moolenaar
3348a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END
3358a7d6542SBram Moolenaar  vim9script
3368a7d6542SBram Moolenaar  let name: string = 'bob'
3378a7d6542SBram Moolenaar  def Concat(arg: string): string
3388a7d6542SBram Moolenaar    return name .. arg
3398a7d6542SBram Moolenaar  enddef
3408a7d6542SBram Moolenaar  let g:result = Concat('bie')
3418a7d6542SBram Moolenaar  let g:localname = name
3428a7d6542SBram Moolenaar
3438a7d6542SBram Moolenaar  export const CONST = 1234
3448a7d6542SBram Moolenaar  export let exported = 9876
3456e587dcbSBram Moolenaar  export let exp_name = 'John'
3468a7d6542SBram Moolenaar  export def Exported(): string
3478a7d6542SBram Moolenaar    return 'Exported'
3488a7d6542SBram Moolenaar  enddef
3498a7d6542SBram MoolenaarEND
3508a7d6542SBram Moolenaar
3518a7d6542SBram Moolenaardef Test_vim9script()
3528a7d6542SBram Moolenaar  let import_script_lines =<< trim END
3538a7d6542SBram Moolenaar    vim9script
3548a7d6542SBram Moolenaar    import {exported, Exported} from './Xexport.vim'
3558a7d6542SBram Moolenaar    g:imported = exported
3566e587dcbSBram Moolenaar    exported += 3
3576e587dcbSBram Moolenaar    g:imported_added = exported
3588a7d6542SBram Moolenaar    g:imported_func = Exported()
3596e587dcbSBram Moolenaar
3606e587dcbSBram Moolenaar    import {exp_name} from './Xexport.vim'
3616e587dcbSBram Moolenaar    g:imported_name = exp_name
3626e587dcbSBram Moolenaar    exp_name ..= ' Doe'
3636e587dcbSBram Moolenaar    g:imported_name_appended = exp_name
3648a7d6542SBram Moolenaar  END
3658a7d6542SBram Moolenaar
3668a7d6542SBram Moolenaar  writefile(import_script_lines, 'Ximport.vim')
3678a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport.vim')
3688a7d6542SBram Moolenaar
3698a7d6542SBram Moolenaar  source Ximport.vim
3708a7d6542SBram Moolenaar
3718a7d6542SBram Moolenaar  assert_equal('bobbie', g:result)
3728a7d6542SBram Moolenaar  assert_equal('bob', g:localname)
3738a7d6542SBram Moolenaar  assert_equal(9876, g:imported)
3746e587dcbSBram Moolenaar  assert_equal(9879, g:imported_added)
3758a7d6542SBram Moolenaar  assert_equal('Exported', g:imported_func)
3766e587dcbSBram Moolenaar  assert_equal('John', g:imported_name)
3776e587dcbSBram Moolenaar  assert_equal('John Doe', g:imported_name_appended)
3788a7d6542SBram Moolenaar  assert_false(exists('g:name'))
3798a7d6542SBram Moolenaar
3808a7d6542SBram Moolenaar  unlet g:result
3818a7d6542SBram Moolenaar  unlet g:localname
3828a7d6542SBram Moolenaar  unlet g:imported
3836e587dcbSBram Moolenaar  unlet g:imported_added
3848a7d6542SBram Moolenaar  unlet g:imported_func
3856e587dcbSBram Moolenaar  unlet g:imported_name g:imported_name_appended
3868a7d6542SBram Moolenaar  delete('Ximport.vim')
387f2d5c240SBram Moolenaar
388f2d5c240SBram Moolenaar  let import_star_as_lines =<< trim END
389f2d5c240SBram Moolenaar    vim9script
390f2d5c240SBram Moolenaar    import * as Export from './Xexport.vim'
391f2d5c240SBram Moolenaar    def UseExport()
392f2d5c240SBram Moolenaar      g:imported = Export.exported
393f2d5c240SBram Moolenaar    enddef
394f2d5c240SBram Moolenaar    UseExport()
395f2d5c240SBram Moolenaar  END
396f2d5c240SBram Moolenaar  writefile(import_star_as_lines, 'Ximport.vim')
397f2d5c240SBram Moolenaar  source Ximport.vim
398f2d5c240SBram Moolenaar  assert_equal(9876, g:imported)
399f2d5c240SBram Moolenaar
400f2d5c240SBram Moolenaar  let import_star_lines =<< trim END
401f2d5c240SBram Moolenaar    vim9script
402f2d5c240SBram Moolenaar    import * from './Xexport.vim'
403f2d5c240SBram Moolenaar    g:imported = exported
404f2d5c240SBram Moolenaar  END
405f2d5c240SBram Moolenaar  writefile(import_star_lines, 'Ximport.vim')
406f2d5c240SBram Moolenaar  assert_fails('source Ximport.vim', 'E1045:')
407f2d5c240SBram Moolenaar
408fa29c8abSBram Moolenaar  " try to import something that exists but is not exported
409fa29c8abSBram Moolenaar  let import_not_exported_lines =<< trim END
410fa29c8abSBram Moolenaar    vim9script
411fa29c8abSBram Moolenaar    import name from './Xexport.vim'
412fa29c8abSBram Moolenaar  END
413fa29c8abSBram Moolenaar  writefile(import_not_exported_lines, 'Ximport.vim')
414fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1049:')
415fa29c8abSBram Moolenaar
416fa29c8abSBram Moolenaar  " import a very long name, requires making a copy
417fa29c8abSBram Moolenaar  let import_long_name_lines =<< trim END
418fa29c8abSBram Moolenaar    vim9script
419fa29c8abSBram Moolenaar    import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
420fa29c8abSBram Moolenaar  END
421fa29c8abSBram Moolenaar  writefile(import_long_name_lines, 'Ximport.vim')
422fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
423fa29c8abSBram Moolenaar
424fa29c8abSBram Moolenaar  let import_no_from_lines =<< trim END
425fa29c8abSBram Moolenaar    vim9script
426fa29c8abSBram Moolenaar    import name './Xexport.vim'
427fa29c8abSBram Moolenaar  END
428fa29c8abSBram Moolenaar  writefile(import_no_from_lines, 'Ximport.vim')
429fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1070:')
430fa29c8abSBram Moolenaar
431fa29c8abSBram Moolenaar  let import_invalid_string_lines =<< trim END
432fa29c8abSBram Moolenaar    vim9script
433fa29c8abSBram Moolenaar    import name from Xexport.vim
434fa29c8abSBram Moolenaar  END
435fa29c8abSBram Moolenaar  writefile(import_invalid_string_lines, 'Ximport.vim')
436fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1071:')
437fa29c8abSBram Moolenaar
438fa29c8abSBram Moolenaar  let import_wrong_name_lines =<< trim END
439fa29c8abSBram Moolenaar    vim9script
440fa29c8abSBram Moolenaar    import name from './XnoExport.vim'
441fa29c8abSBram Moolenaar  END
442fa29c8abSBram Moolenaar  writefile(import_wrong_name_lines, 'Ximport.vim')
443fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1053:')
444fa29c8abSBram Moolenaar
445fa29c8abSBram Moolenaar  let import_missing_comma_lines =<< trim END
446fa29c8abSBram Moolenaar    vim9script
447fa29c8abSBram Moolenaar    import {exported name} from './Xexport.vim'
448fa29c8abSBram Moolenaar  END
449fa29c8abSBram Moolenaar  writefile(import_missing_comma_lines, 'Ximport.vim')
450fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1046:')
451fa29c8abSBram Moolenaar
452f2d5c240SBram Moolenaar  delete('Ximport.vim')
4538a7d6542SBram Moolenaar  delete('Xexport.vim')
4548a7d6542SBram Moolenaar
455750802b5SBram Moolenaar  " Check that in a Vim9 script 'cpo' is set to the Vim default.
456750802b5SBram Moolenaar  set cpo&vi
457750802b5SBram Moolenaar  let cpo_before = &cpo
458750802b5SBram Moolenaar  let lines =<< trim END
459750802b5SBram Moolenaar    vim9script
460750802b5SBram Moolenaar    g:cpo_in_vim9script = &cpo
461750802b5SBram Moolenaar  END
462750802b5SBram Moolenaar  writefile(lines, 'Xvim9_script')
463750802b5SBram Moolenaar  source Xvim9_script
464750802b5SBram Moolenaar  assert_equal(cpo_before, &cpo)
465750802b5SBram Moolenaar  set cpo&vim
466750802b5SBram Moolenaar  assert_equal(&cpo, g:cpo_in_vim9script)
467750802b5SBram Moolenaar  delete('Xvim9_script')
468750802b5SBram Moolenaarenddef
469750802b5SBram Moolenaar
470750802b5SBram Moolenaardef Test_vim9script_fails()
4718a7d6542SBram Moolenaar  CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
4728a7d6542SBram Moolenaar  CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
473750802b5SBram Moolenaar  CheckScriptFailure(['export let some = 123'], 'E1042:')
474f2d5c240SBram Moolenaar  CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:')
475750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:')
476750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
477750802b5SBram Moolenaar
478750802b5SBram Moolenaar  assert_fails('vim9script', 'E1038')
479750802b5SBram Moolenaar  assert_fails('export something', 'E1042')
4808a7d6542SBram Moolenaarenddef
4818a7d6542SBram Moolenaar
4828a7d6542SBram Moolenaardef Test_vim9script_call()
4838a7d6542SBram Moolenaar  let lines =<< trim END
4848a7d6542SBram Moolenaar    vim9script
4858a7d6542SBram Moolenaar    let var = ''
4868a7d6542SBram Moolenaar    def MyFunc(arg: string)
4878a7d6542SBram Moolenaar       var = arg
4888a7d6542SBram Moolenaar    enddef
4898a7d6542SBram Moolenaar    MyFunc('foobar')
4908a7d6542SBram Moolenaar    assert_equal('foobar', var)
4918a7d6542SBram Moolenaar
4928a7d6542SBram Moolenaar    let str = 'barfoo'
4938a7d6542SBram Moolenaar    str->MyFunc()
4948a7d6542SBram Moolenaar    assert_equal('barfoo', var)
4958a7d6542SBram Moolenaar
4968a7d6542SBram Moolenaar    let g:value = 'value'
4978a7d6542SBram Moolenaar    g:value->MyFunc()
4988a7d6542SBram Moolenaar    assert_equal('value', var)
4998a7d6542SBram Moolenaar
5008a7d6542SBram Moolenaar    let listvar = []
5018a7d6542SBram Moolenaar    def ListFunc(arg: list<number>)
5028a7d6542SBram Moolenaar       listvar = arg
5038a7d6542SBram Moolenaar    enddef
5048a7d6542SBram Moolenaar    [1, 2, 3]->ListFunc()
5058a7d6542SBram Moolenaar    assert_equal([1, 2, 3], listvar)
5068a7d6542SBram Moolenaar
5078a7d6542SBram Moolenaar    let dictvar = {}
5088a7d6542SBram Moolenaar    def DictFunc(arg: dict<number>)
5098a7d6542SBram Moolenaar       dictvar = arg
5108a7d6542SBram Moolenaar    enddef
5118a7d6542SBram Moolenaar    {'a': 1, 'b': 2}->DictFunc()
5128a7d6542SBram Moolenaar    assert_equal(#{a: 1, b: 2}, dictvar)
5138a7d6542SBram Moolenaar    #{a: 3, b: 4}->DictFunc()
5148a7d6542SBram Moolenaar    assert_equal(#{a: 3, b: 4}, dictvar)
5150c6ceaf9SBram Moolenaar
5160c6ceaf9SBram Moolenaar    ('text')->MyFunc()
5170c6ceaf9SBram Moolenaar    assert_equal('text', var)
5180c6ceaf9SBram Moolenaar    ("some")->MyFunc()
5190c6ceaf9SBram Moolenaar    assert_equal('some', var)
5208a7d6542SBram Moolenaar  END
5218a7d6542SBram Moolenaar  writefile(lines, 'Xcall.vim')
5228a7d6542SBram Moolenaar  source Xcall.vim
5238a7d6542SBram Moolenaar  delete('Xcall.vim')
5248a7d6542SBram Moolenaarenddef
5258a7d6542SBram Moolenaar
5268a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl()
5278a7d6542SBram Moolenaar  let lines =<< trim END
5288a7d6542SBram Moolenaar    vim9script
5298a7d6542SBram Moolenaar    let var = ''
5308a7d6542SBram Moolenaar    def MyFunc(arg: string)
5318a7d6542SBram Moolenaar       let var = 123
5328a7d6542SBram Moolenaar    enddef
5338a7d6542SBram Moolenaar  END
5348a7d6542SBram Moolenaar  writefile(lines, 'Xcall_decl.vim')
5358a7d6542SBram Moolenaar  assert_fails('source Xcall_decl.vim', 'E1054:')
5368a7d6542SBram Moolenaar  delete('Xcall_decl.vim')
5378a7d6542SBram Moolenaarenddef
5388a7d6542SBram Moolenaar
5398a7d6542SBram Moolenaardef Test_vim9script_call_fail_const()
5408a7d6542SBram Moolenaar  let lines =<< trim END
5418a7d6542SBram Moolenaar    vim9script
5428a7d6542SBram Moolenaar    const var = ''
5438a7d6542SBram Moolenaar    def MyFunc(arg: string)
5448a7d6542SBram Moolenaar       var = 'asdf'
5458a7d6542SBram Moolenaar    enddef
5468a7d6542SBram Moolenaar  END
5478a7d6542SBram Moolenaar  writefile(lines, 'Xcall_const.vim')
5488a7d6542SBram Moolenaar  assert_fails('source Xcall_const.vim', 'E46:')
5498a7d6542SBram Moolenaar  delete('Xcall_const.vim')
5508a7d6542SBram Moolenaarenddef
5518a7d6542SBram Moolenaar
5528a7d6542SBram Moolenaardef Test_vim9script_reload()
5538a7d6542SBram Moolenaar  let lines =<< trim END
5548a7d6542SBram Moolenaar    vim9script
5558a7d6542SBram Moolenaar    const var = ''
5568a7d6542SBram Moolenaar    let valone = 1234
5578a7d6542SBram Moolenaar    def MyFunc(arg: string)
5588a7d6542SBram Moolenaar       valone = 5678
5598a7d6542SBram Moolenaar    enddef
5608a7d6542SBram Moolenaar  END
5618a7d6542SBram Moolenaar  let morelines =<< trim END
5628a7d6542SBram Moolenaar    let valtwo = 222
5638a7d6542SBram Moolenaar    export def GetValtwo(): number
5648a7d6542SBram Moolenaar      return valtwo
5658a7d6542SBram Moolenaar    enddef
5668a7d6542SBram Moolenaar  END
5678a7d6542SBram Moolenaar  writefile(lines + morelines, 'Xreload.vim')
5688a7d6542SBram Moolenaar  source Xreload.vim
5698a7d6542SBram Moolenaar  source Xreload.vim
5708a7d6542SBram Moolenaar  source Xreload.vim
5718a7d6542SBram Moolenaar
5728a7d6542SBram Moolenaar  let testlines =<< trim END
5738a7d6542SBram Moolenaar    vim9script
5748a7d6542SBram Moolenaar    def TheFunc()
5758a7d6542SBram Moolenaar      import GetValtwo from './Xreload.vim'
5768a7d6542SBram Moolenaar      assert_equal(222, GetValtwo())
5778a7d6542SBram Moolenaar    enddef
5788a7d6542SBram Moolenaar    TheFunc()
5798a7d6542SBram Moolenaar  END
5808a7d6542SBram Moolenaar  writefile(testlines, 'Ximport.vim')
5818a7d6542SBram Moolenaar  source Ximport.vim
5828a7d6542SBram Moolenaar
5838a7d6542SBram Moolenaar  " test that when not using "morelines" valtwo is still defined
5848a7d6542SBram Moolenaar  " need to source Xreload.vim again, import doesn't reload a script
5858a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
5868a7d6542SBram Moolenaar  source Xreload.vim
5878a7d6542SBram Moolenaar  source Ximport.vim
5888a7d6542SBram Moolenaar
5898a7d6542SBram Moolenaar  " cannot declare a var twice
5908a7d6542SBram Moolenaar  lines =<< trim END
5918a7d6542SBram Moolenaar    vim9script
5928a7d6542SBram Moolenaar    let valone = 1234
5938a7d6542SBram Moolenaar    let valone = 5678
5948a7d6542SBram Moolenaar  END
5958a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
5968a7d6542SBram Moolenaar  assert_fails('source Xreload.vim', 'E1041:')
5978a7d6542SBram Moolenaar
5988a7d6542SBram Moolenaar  delete('Xreload.vim')
5998a7d6542SBram Moolenaar  delete('Ximport.vim')
6008a7d6542SBram Moolenaarenddef
6018a7d6542SBram Moolenaar
6028a7d6542SBram Moolenaardef Test_import_absolute()
6038a7d6542SBram Moolenaar  let import_lines = [
6048a7d6542SBram Moolenaar        \ 'vim9script',
6058a7d6542SBram Moolenaar        \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"',
606b283a8a6SBram Moolenaar        \ 'def UseExported()',
6078a7d6542SBram Moolenaar        \ '  g:imported_abs = exported',
6084e12a5dfSBram Moolenaar        \ '  exported = 8888',
6094e12a5dfSBram Moolenaar        \ '  g:imported_after = exported',
610b283a8a6SBram Moolenaar        \ 'enddef',
611b283a8a6SBram Moolenaar        \ 'UseExported()',
6124e12a5dfSBram Moolenaar        \ 'g:import_disassembled = execute("disass UseExported")',
6138a7d6542SBram Moolenaar        \ ]
6148a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_abs.vim')
6158a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport_abs.vim')
6168a7d6542SBram Moolenaar
6178a7d6542SBram Moolenaar  source Ximport_abs.vim
6188a7d6542SBram Moolenaar
6198a7d6542SBram Moolenaar  assert_equal(9876, g:imported_abs)
6204e12a5dfSBram Moolenaar  assert_equal(8888, g:imported_after)
621b283a8a6SBram Moolenaar  assert_match('<SNR>\d\+_UseExported.*'
622b283a8a6SBram Moolenaar        \ .. 'g:imported_abs = exported.*'
623b283a8a6SBram Moolenaar        \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*'
6244e12a5dfSBram Moolenaar        \ .. '1 STOREG g:imported_abs.*'
6254e12a5dfSBram Moolenaar        \ .. 'exported = 8888.*'
6264e12a5dfSBram Moolenaar        \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*'
6274e12a5dfSBram Moolenaar        \ .. 'g:imported_after = exported.*'
6284e12a5dfSBram Moolenaar        \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*'
6294e12a5dfSBram Moolenaar        \ .. '5 STOREG g:imported_after.*'
6304e12a5dfSBram Moolenaar        \, g:import_disassembled)
6318a7d6542SBram Moolenaar  unlet g:imported_abs
6324e12a5dfSBram Moolenaar  unlet g:import_disassembled
6338a7d6542SBram Moolenaar
6348a7d6542SBram Moolenaar  delete('Ximport_abs.vim')
6358a7d6542SBram Moolenaar  delete('Xexport_abs.vim')
6368a7d6542SBram Moolenaarenddef
6378a7d6542SBram Moolenaar
6388a7d6542SBram Moolenaardef Test_import_rtp()
6398a7d6542SBram Moolenaar  let import_lines = [
6408a7d6542SBram Moolenaar        \ 'vim9script',
6418a7d6542SBram Moolenaar        \ 'import exported from "Xexport_rtp.vim"',
6428a7d6542SBram Moolenaar        \ 'g:imported_rtp = exported',
6438a7d6542SBram Moolenaar        \ ]
6448a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_rtp.vim')
6458a7d6542SBram Moolenaar  mkdir('import')
6468a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
6478a7d6542SBram Moolenaar
6488a7d6542SBram Moolenaar  let save_rtp = &rtp
6498a7d6542SBram Moolenaar  &rtp = getcwd()
6508a7d6542SBram Moolenaar  source Ximport_rtp.vim
6518a7d6542SBram Moolenaar  &rtp = save_rtp
6528a7d6542SBram Moolenaar
6538a7d6542SBram Moolenaar  assert_equal(9876, g:imported_rtp)
6548a7d6542SBram Moolenaar  unlet g:imported_rtp
6558a7d6542SBram Moolenaar
6568a7d6542SBram Moolenaar  delete('Ximport_rtp.vim')
6578a7d6542SBram Moolenaar  delete('import/Xexport_rtp.vim')
6588a7d6542SBram Moolenaar  delete('import', 'd')
6598a7d6542SBram Moolenaarenddef
6608a7d6542SBram Moolenaar
6618a7d6542SBram Moolenaardef Test_fixed_size_list()
6628a7d6542SBram Moolenaar  " will be allocated as one piece of memory, check that changes work
6638a7d6542SBram Moolenaar  let l = [1, 2, 3, 4]
6648a7d6542SBram Moolenaar  l->remove(0)
6658a7d6542SBram Moolenaar  l->add(5)
6668a7d6542SBram Moolenaar  l->insert(99, 1)
6670f18b6d1SBram Moolenaar  assert_equal([2, 99, 3, 4, 5], l)
6688a7d6542SBram Moolenaarenddef
6698a7d6542SBram Moolenaar
670673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not
671673660abSBram Moolenaar" recognized.
672673660abSBram Moolenaarfunc Test_function_python()
673673660abSBram Moolenaar  CheckFeature python3
674673660abSBram Moolenaar  let py = 'python3'
675673660abSBram Moolenaar  execute py "<< EOF"
676673660abSBram Moolenaardef do_something():
677673660abSBram Moolenaar  return 1
678673660abSBram MoolenaarEOF
679673660abSBram Moolenaarendfunc
680673660abSBram Moolenaar
681158906cfSBram Moolenaardef IfElse(what: number): string
682158906cfSBram Moolenaar  let res = ''
683158906cfSBram Moolenaar  if what == 1
684158906cfSBram Moolenaar    res = "one"
685158906cfSBram Moolenaar  elseif what == 2
686158906cfSBram Moolenaar    res = "two"
687a259d8d3SBram Moolenaar  else
688158906cfSBram Moolenaar    res = "three"
689a259d8d3SBram Moolenaar  endif
690158906cfSBram Moolenaar  return res
691a259d8d3SBram Moolenaarenddef
692a259d8d3SBram Moolenaar
693158906cfSBram Moolenaardef Test_if_elseif_else()
694158906cfSBram Moolenaar  assert_equal('one', IfElse(1))
695158906cfSBram Moolenaar  assert_equal('two', IfElse(2))
696158906cfSBram Moolenaar  assert_equal('three', IfElse(3))
6970f18b6d1SBram Moolenaarenddef
6980f18b6d1SBram Moolenaar
69963ce4849SBram Moolenaardef Test_delfunc()
70063ce4849SBram Moolenaar  let lines =<< trim END
70163ce4849SBram Moolenaar    vim9script
70263ce4849SBram Moolenaar    def GoneSoon()
70363ce4849SBram Moolenaar      echo 'hello'
70463ce4849SBram Moolenaar    enddef
70563ce4849SBram Moolenaar
70663ce4849SBram Moolenaar    def CallGoneSoon()
70763ce4849SBram Moolenaar      GoneSoon()
70863ce4849SBram Moolenaar    enddef
70963ce4849SBram Moolenaar
71063ce4849SBram Moolenaar    delfunc GoneSoon
71163ce4849SBram Moolenaar    CallGoneSoon()
71263ce4849SBram Moolenaar  END
71363ce4849SBram Moolenaar  writefile(lines, 'XToDelFunc')
71463ce4849SBram Moolenaar  assert_fails('so XToDelFunc', 'E933')
71563ce4849SBram Moolenaar  assert_fails('so XToDelFunc', 'E933')
71663ce4849SBram Moolenaar
71763ce4849SBram Moolenaar  delete('XToDelFunc')
71863ce4849SBram Moolenaarenddef
71963ce4849SBram Moolenaar
7205b1c8fe3SBram Moolenaardef Test_substitute_cmd()
7215b1c8fe3SBram Moolenaar  new
7225b1c8fe3SBram Moolenaar  setline(1, 'something')
7235b1c8fe3SBram Moolenaar  :substitute(some(other(
7245b1c8fe3SBram Moolenaar  assert_equal('otherthing', getline(1))
72583f37b91SBram Moolenaar  bwipe!
72683f37b91SBram Moolenaar
72783f37b91SBram Moolenaar  " also when the context is Vim9 script
72883f37b91SBram Moolenaar  let lines =<< trim END
72983f37b91SBram Moolenaar    vim9script
73083f37b91SBram Moolenaar    new
73183f37b91SBram Moolenaar    setline(1, 'something')
73283f37b91SBram Moolenaar    :substitute(some(other(
73383f37b91SBram Moolenaar    assert_equal('otherthing', getline(1))
73483f37b91SBram Moolenaar    bwipe!
73583f37b91SBram Moolenaar  END
73683f37b91SBram Moolenaar  writefile(lines, 'Xvim9lines')
73783f37b91SBram Moolenaar  source Xvim9lines
73883f37b91SBram Moolenaar
73983f37b91SBram Moolenaar  delete('Xvim9lines')
7405b1c8fe3SBram Moolenaarenddef
7415b1c8fe3SBram Moolenaar
742ad39c094SBram Moolenaardef Test_execute_cmd()
743ad39c094SBram Moolenaar  new
744ad39c094SBram Moolenaar  setline(1, 'default')
745ad39c094SBram Moolenaar  execute 'call setline(1, "execute-string")'
746ad39c094SBram Moolenaar  assert_equal('execute-string', getline(1))
747ad39c094SBram Moolenaar  let cmd1 = 'call setline(1,'
748ad39c094SBram Moolenaar  let cmd2 = '"execute-var")'
749ad39c094SBram Moolenaar  execute cmd1 cmd2
750ad39c094SBram Moolenaar  assert_equal('execute-var', getline(1))
751ad39c094SBram Moolenaar  execute cmd1 cmd2 '|call setline(1, "execute-var-string")'
752ad39c094SBram Moolenaar  assert_equal('execute-var-string', getline(1))
753ad39c094SBram Moolenaar  let cmd_first = 'call '
754ad39c094SBram Moolenaar  let cmd_last = 'setline(1, "execute-var-var")'
755ad39c094SBram Moolenaar  execute cmd_first .. cmd_last
756ad39c094SBram Moolenaar  assert_equal('execute-var-var', getline(1))
757ad39c094SBram Moolenaar  bwipe!
758ad39c094SBram Moolenaarenddef
759ad39c094SBram Moolenaar
760ad39c094SBram Moolenaardef Test_echo_cmd()
761ad39c094SBram Moolenaar  echo 'something'
762ad39c094SBram Moolenaar  assert_match('^something$', Screenline(&lines))
763ad39c094SBram Moolenaar
764ad39c094SBram Moolenaar  let str1 = 'some'
765ad39c094SBram Moolenaar  let str2 = 'more'
766ad39c094SBram Moolenaar  echo str1 str2
767ad39c094SBram Moolenaar  assert_match('^some more$', Screenline(&lines))
768ad39c094SBram Moolenaarenddef
769ad39c094SBram Moolenaar
7708a7d6542SBram Moolenaar
7718a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
772