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
137a092245SBram Moolenaardef CheckScriptFailure(lines: list<string>, error: string)
147a092245SBram Moolenaar  writefile(lines, 'Xdef')
157a092245SBram Moolenaar  assert_fails('so Xdef', error, lines)
167a092245SBram Moolenaar  delete('Xdef')
177a092245SBram Moolenaarenddef
187a092245SBram Moolenaar
197a092245SBram Moolenaardef CheckScriptSuccess(lines: list<string>)
207a092245SBram Moolenaar  writefile(lines, 'Xdef')
217a092245SBram Moolenaar  so Xdef
227a092245SBram Moolenaar  delete('Xdef')
237a092245SBram Moolenaarenddef
248a7d6542SBram Moolenaar
258a7d6542SBram Moolenaardef Test_syntax()
268a7d6542SBram Moolenaar  let var = 234
278a7d6542SBram Moolenaar  let other: list<string> = ['asdf']
288a7d6542SBram Moolenaarenddef
298a7d6542SBram Moolenaar
306e587dcbSBram Moolenaarlet s:appendToMe = 'xxx'
316e587dcbSBram Moolenaarlet s:addToMe = 111
32401d9ffbSBram Moolenaarlet g:existing = 'yes'
33a8c17704SBram Moolenaarlet g:inc_counter = 1
34a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some'
356e587dcbSBram Moolenaar
368a7d6542SBram Moolenaardef Test_assignment()
378a7d6542SBram Moolenaar  let bool1: bool = true
388a7d6542SBram Moolenaar  assert_equal(v:true, bool1)
398a7d6542SBram Moolenaar  let bool2: bool = false
408a7d6542SBram Moolenaar  assert_equal(v:false, bool2)
418a7d6542SBram Moolenaar
420c2ca58eSBram Moolenaar  let list1: list<bool> = [false, true, false]
438a7d6542SBram Moolenaar  let list2: list<number> = [1, 2, 3]
440c2ca58eSBram Moolenaar  let list3: list<string> = ['sdf', 'asdf']
450c2ca58eSBram Moolenaar  let list4: list<any> = ['yes', true, 1234]
460c2ca58eSBram Moolenaar  let list5: list<blob> = [0z01, 0z02]
478a7d6542SBram Moolenaar
48436472f5SBram Moolenaar  let listS: list<string> = []
49436472f5SBram Moolenaar  let listN: list<number> = []
508a7d6542SBram Moolenaar
510c2ca58eSBram Moolenaar  let dict1: dict<bool> = #{one: false, two: true}
528a7d6542SBram Moolenaar  let dict2: dict<number> = #{one: 1, two: 2}
530c2ca58eSBram Moolenaar  let dict3: dict<string> = #{key: 'value'}
540c2ca58eSBram Moolenaar  let dict4: dict<any> = #{one: 1, two: '2'}
550c2ca58eSBram Moolenaar  let dict5: dict<blob> = #{one: 0z01, tw: 0z02}
56b283a8a6SBram Moolenaar
579be61bbbSBram Moolenaar  let a: number = 6
589be61bbbSBram Moolenaar  assert_equal(6, a)
599be61bbbSBram Moolenaar
6042a480bfSBram Moolenaar  if has('channel')
6142a480bfSBram Moolenaar    let chan1: channel
62fbdd08edSBram Moolenaar    let job1: job
63f51cb4e0SBram Moolenaar    let job2: job = job_start('willfail')
6442a480bfSBram Moolenaar  endif
65fbdd08edSBram Moolenaar  if has('float')
66fbdd08edSBram Moolenaar    let float1: float = 3.4
67fbdd08edSBram Moolenaar  endif
685deeb3f1SBram Moolenaar  let Funky1: func
695deeb3f1SBram Moolenaar  let Funky2: func = function('len')
705deeb3f1SBram Moolenaar  let Party2: func = funcref('Test_syntax')
7142a480bfSBram Moolenaar
72cb711abfSBram Moolenaar  # type becomes list<any>
7361a6d4e4SBram Moolenaar  let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
74cb711abfSBram Moolenaar  # type becomes dict<any>
755381c7a1SBram Moolenaar  let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
7661a6d4e4SBram Moolenaar
77401d9ffbSBram Moolenaar  g:newvar = 'new'
78401d9ffbSBram Moolenaar  assert_equal('new', g:newvar)
79401d9ffbSBram Moolenaar
80401d9ffbSBram Moolenaar  assert_equal('yes', g:existing)
81401d9ffbSBram Moolenaar  g:existing = 'no'
82401d9ffbSBram Moolenaar  assert_equal('no', g:existing)
83401d9ffbSBram Moolenaar
84b283a8a6SBram Moolenaar  v:char = 'abc'
856e587dcbSBram Moolenaar  assert_equal('abc', v:char)
86b283a8a6SBram Moolenaar
87b283a8a6SBram Moolenaar  $ENVVAR = 'foobar'
886e587dcbSBram Moolenaar  assert_equal('foobar', $ENVVAR)
89b283a8a6SBram Moolenaar  $ENVVAR = ''
906e587dcbSBram Moolenaar
91fd1823e0SBram Moolenaar  s:appendToMe ..= 'yyy'
92fd1823e0SBram Moolenaar  assert_equal('xxxyyy', s:appendToMe)
93fd1823e0SBram Moolenaar  s:addToMe += 222
94fd1823e0SBram Moolenaar  assert_equal(333, s:addToMe)
950bbf722aSBram Moolenaar  s:newVar = 'new'
960bbf722aSBram Moolenaar  assert_equal('new', s:newVar)
97a8c17704SBram Moolenaar
98a8c17704SBram Moolenaar  set ts=7
99a8c17704SBram Moolenaar  &ts += 1
100a8c17704SBram Moolenaar  assert_equal(8, &ts)
10180c34ca3SBram Moolenaar  &ts -= 3
10280c34ca3SBram Moolenaar  assert_equal(5, &ts)
10380c34ca3SBram Moolenaar  &ts *= 2
10480c34ca3SBram Moolenaar  assert_equal(10, &ts)
10580c34ca3SBram Moolenaar  &ts /= 3
10680c34ca3SBram Moolenaar  assert_equal(3, &ts)
10780c34ca3SBram Moolenaar  set ts=10
10880c34ca3SBram Moolenaar  &ts %= 4
10980c34ca3SBram Moolenaar  assert_equal(2, &ts)
110a8c17704SBram Moolenaar  call CheckDefFailure(['&notex += 3'], 'E113:')
111a8c17704SBram Moolenaar  call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
112a8c17704SBram Moolenaar  call CheckDefFailure(['&path += 3'], 'E1013:')
113cb711abfSBram Moolenaar  # test freeing ISN_STOREOPT
114585fea7bSBram Moolenaar  call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
11580c34ca3SBram Moolenaar  &ts = 8
116a8c17704SBram Moolenaar
117a8c17704SBram Moolenaar  g:inc_counter += 1
118a8c17704SBram Moolenaar  assert_equal(2, g:inc_counter)
119a8c17704SBram Moolenaar
120a8c17704SBram Moolenaar  $SOME_ENV_VAR ..= 'more'
121a8c17704SBram Moolenaar  assert_equal('somemore', $SOME_ENV_VAR)
122a8c17704SBram Moolenaar  call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:')
123a8c17704SBram Moolenaar  call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:')
124a8c17704SBram Moolenaar
125a8c17704SBram Moolenaar  @a = 'areg'
126a8c17704SBram Moolenaar  @a ..= 'add'
127a8c17704SBram Moolenaar  assert_equal('aregadd', @a)
128a8c17704SBram Moolenaar  call CheckDefFailure(['@a += "more"'], 'E1013:')
129a8c17704SBram Moolenaar  call CheckDefFailure(['@a += 123'], 'E1013:')
130e69f6d04SBram Moolenaar
131e69f6d04SBram Moolenaar  v:errmsg = 'none'
132e69f6d04SBram Moolenaar  v:errmsg ..= 'again'
133e69f6d04SBram Moolenaar  assert_equal('noneagain', v:errmsg)
134e69f6d04SBram Moolenaar  call CheckDefFailure(['v:errmsg += "more"'], 'E1013:')
135e69f6d04SBram Moolenaar  call CheckDefFailure(['v:errmsg += 123'], 'E1013:')
1365deeb3f1SBram Moolenaarenddef
1375deeb3f1SBram Moolenaar
138d3aac291SBram Moolenaardef Test_assignment_local()
139d3aac291SBram Moolenaar  " Test in a separated file in order not to the current buffer/window/tab is
140d3aac291SBram Moolenaar  " changed.
141d3aac291SBram Moolenaar  let script_lines: list<string> =<< trim END
142d3aac291SBram Moolenaar    let b:existing = 'yes'
143d3aac291SBram Moolenaar    let w:existing = 'yes'
144d3aac291SBram Moolenaar    let t:existing = 'yes'
145d3aac291SBram Moolenaar
146d3aac291SBram Moolenaar    def Test_assignment_local_internal()
147d3aac291SBram Moolenaar      b:newvar = 'new'
148d3aac291SBram Moolenaar      assert_equal('new', b:newvar)
149d3aac291SBram Moolenaar      assert_equal('yes', b:existing)
150d3aac291SBram Moolenaar      b:existing = 'no'
151d3aac291SBram Moolenaar      assert_equal('no', b:existing)
152d3aac291SBram Moolenaar
153d3aac291SBram Moolenaar      w:newvar = 'new'
154d3aac291SBram Moolenaar      assert_equal('new', w:newvar)
155d3aac291SBram Moolenaar      assert_equal('yes', w:existing)
156d3aac291SBram Moolenaar      w:existing = 'no'
157d3aac291SBram Moolenaar      assert_equal('no', w:existing)
158d3aac291SBram Moolenaar
159d3aac291SBram Moolenaar      t:newvar = 'new'
160d3aac291SBram Moolenaar      assert_equal('new', t:newvar)
161d3aac291SBram Moolenaar      assert_equal('yes', t:existing)
162d3aac291SBram Moolenaar      t:existing = 'no'
163d3aac291SBram Moolenaar      assert_equal('no', t:existing)
164d3aac291SBram Moolenaar    enddef
165d3aac291SBram Moolenaar    call Test_assignment_local_internal()
166d3aac291SBram Moolenaar  END
167d3aac291SBram Moolenaar  call CheckScriptSuccess(script_lines)
168d3aac291SBram Moolenaarenddef
169d3aac291SBram Moolenaar
1705deeb3f1SBram Moolenaardef Test_assignment_default()
171e69f6d04SBram Moolenaar
172cb711abfSBram Moolenaar  # Test default values.
173e69f6d04SBram Moolenaar  let thebool: bool
174e69f6d04SBram Moolenaar  assert_equal(v:false, thebool)
175e69f6d04SBram Moolenaar
176e69f6d04SBram Moolenaar  let thenumber: number
177e69f6d04SBram Moolenaar  assert_equal(0, thenumber)
178e69f6d04SBram Moolenaar
179e69f6d04SBram Moolenaar  if has('float')
180e69f6d04SBram Moolenaar    let thefloat: float
181e69f6d04SBram Moolenaar    assert_equal(0.0, thefloat)
182e69f6d04SBram Moolenaar  endif
183e69f6d04SBram Moolenaar
184e69f6d04SBram Moolenaar  let thestring: string
185e69f6d04SBram Moolenaar  assert_equal('', thestring)
186e69f6d04SBram Moolenaar
187e69f6d04SBram Moolenaar  let theblob: blob
188e69f6d04SBram Moolenaar  assert_equal(0z, theblob)
189e69f6d04SBram Moolenaar
1905deeb3f1SBram Moolenaar  let Thefunc: func
1915deeb3f1SBram Moolenaar  assert_equal(test_null_function(), Thefunc)
192e69f6d04SBram Moolenaar
193e69f6d04SBram Moolenaar  let thelist: list<any>
194e69f6d04SBram Moolenaar  assert_equal([], thelist)
195e69f6d04SBram Moolenaar
196e69f6d04SBram Moolenaar  let thedict: dict<any>
197e69f6d04SBram Moolenaar  assert_equal({}, thedict)
198e69f6d04SBram Moolenaar
1992c869deeSBram Moolenaar  if has('channel')
200e69f6d04SBram Moolenaar    let thejob: job
201e69f6d04SBram Moolenaar    assert_equal(test_null_job(), thejob)
202e69f6d04SBram Moolenaar
203e69f6d04SBram Moolenaar    let thechannel: channel
204e69f6d04SBram Moolenaar    assert_equal(test_null_channel(), thechannel)
2052c869deeSBram Moolenaar  endif
206585fea7bSBram Moolenaar
207585fea7bSBram Moolenaar  let nr = 1234 | nr = 5678
208585fea7bSBram Moolenaar  assert_equal(5678, nr)
2098a7d6542SBram Moolenaarenddef
2108a7d6542SBram Moolenaar
211cab27678SBram Moolenaardef Mess(): string
212cab27678SBram Moolenaar  v:foldstart = 123
213cab27678SBram Moolenaar  return 'xxx'
214cab27678SBram Moolenaarenddef
215cab27678SBram Moolenaar
216d72c1bf0SBram Moolenaardef Test_assignment_failure()
2178a7d6542SBram Moolenaar  call CheckDefFailure(['let var=234'], 'E1004:')
2188a7d6542SBram Moolenaar  call CheckDefFailure(['let var =234'], 'E1004:')
2198a7d6542SBram Moolenaar  call CheckDefFailure(['let var= 234'], 'E1004:')
2208a7d6542SBram Moolenaar
2218a7d6542SBram Moolenaar  call CheckDefFailure(['let true = 1'], 'E1034:')
2228a7d6542SBram Moolenaar  call CheckDefFailure(['let false = 1'], 'E1034:')
2238a7d6542SBram Moolenaar
2249be61bbbSBram Moolenaar  call CheckDefFailure(['let [a; b; c] = g:list'], 'E452:')
2259be61bbbSBram Moolenaar
226e69f6d04SBram Moolenaar  call CheckDefFailure(['let somevar'], "E1022:")
2279be61bbbSBram Moolenaar  call CheckDefFailure(['let &option'], 'E1052:')
2289be61bbbSBram Moolenaar  call CheckDefFailure(['&g:option = 5'], 'E113:')
2299be61bbbSBram Moolenaar
2309be61bbbSBram Moolenaar  call CheckDefFailure(['let $VAR = 5'], 'E1065:')
2319be61bbbSBram Moolenaar
2329be61bbbSBram Moolenaar  call CheckDefFailure(['let @~ = 5'], 'E354:')
2339be61bbbSBram Moolenaar  call CheckDefFailure(['let @a = 5'], 'E1066:')
2349be61bbbSBram Moolenaar
2359be61bbbSBram Moolenaar  call CheckDefFailure(['let g:var = 5'], 'E1016:')
236d3aac291SBram Moolenaar  call CheckDefFailure(['let w:var = 5'], 'E1079:')
237d3aac291SBram Moolenaar  call CheckDefFailure(['let b:var = 5'], 'E1078:')
238d3aac291SBram Moolenaar  call CheckDefFailure(['let t:var = 5'], 'E1080:')
2399be61bbbSBram Moolenaar
2409be61bbbSBram Moolenaar  call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
2419be61bbbSBram Moolenaar  call CheckDefFailure(['let xnr += 4'], 'E1020:')
2429be61bbbSBram Moolenaar
24333fa29cfSBram Moolenaar  call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef'], 'E1050:')
24433fa29cfSBram Moolenaar
2458a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>')
2468a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
2478a7d6542SBram Moolenaar
2488a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
2498a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
2508a7d6542SBram Moolenaar
2518a7d6542SBram Moolenaar  call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:')
2528a7d6542SBram Moolenaar  call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void')
25342a480bfSBram Moolenaar
254d77a8525SBram Moolenaar  call CheckDefFailure(['let var: dict <number>'], 'E1068:')
25542a480bfSBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
256cab27678SBram Moolenaar
257cab27678SBram Moolenaar  call assert_fails('s/^/\=Mess()/n', 'E794:')
258cab27678SBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
259d72c1bf0SBram Moolenaarenddef
260d72c1bf0SBram Moolenaar
261d72c1bf0SBram Moolenaardef Test_unlet()
262d72c1bf0SBram Moolenaar  g:somevar = 'yes'
263d72c1bf0SBram Moolenaar  assert_true(exists('g:somevar'))
264d72c1bf0SBram Moolenaar  unlet g:somevar
265d72c1bf0SBram Moolenaar  assert_false(exists('g:somevar'))
266d72c1bf0SBram Moolenaar  unlet! g:somevar
267d72c1bf0SBram Moolenaar
268d72c1bf0SBram Moolenaar  call CheckScriptFailure([
269d72c1bf0SBram Moolenaar        'vim9script',
270d72c1bf0SBram Moolenaar        'let svar = 123',
271d72c1bf0SBram Moolenaar        'unlet svar',
272d72c1bf0SBram Moolenaar        ], 'E1081:')
273d72c1bf0SBram Moolenaar  call CheckScriptFailure([
274d72c1bf0SBram Moolenaar        'vim9script',
275d72c1bf0SBram Moolenaar        'let svar = 123',
276d72c1bf0SBram Moolenaar        'unlet s:svar',
277d72c1bf0SBram Moolenaar        ], 'E1081:')
278d72c1bf0SBram Moolenaar  call CheckScriptFailure([
279d72c1bf0SBram Moolenaar        'vim9script',
280d72c1bf0SBram Moolenaar        'let svar = 123',
281d72c1bf0SBram Moolenaar        'def Func()',
282d72c1bf0SBram Moolenaar        '  unlet svar',
283d72c1bf0SBram Moolenaar        'enddef',
284d72c1bf0SBram Moolenaar        ], 'E1081:')
285d72c1bf0SBram Moolenaar  call CheckScriptFailure([
286d72c1bf0SBram Moolenaar        'vim9script',
287d72c1bf0SBram Moolenaar        'let svar = 123',
288d72c1bf0SBram Moolenaar        'def Func()',
289d72c1bf0SBram Moolenaar        '  unlet s:svar',
290d72c1bf0SBram Moolenaar        'enddef',
291d72c1bf0SBram Moolenaar        ], 'E1081:')
2927bdaea6eSBram Moolenaar
2937bdaea6eSBram Moolenaar  $ENVVAR = 'foobar'
2947bdaea6eSBram Moolenaar  assert_equal('foobar', $ENVVAR)
2957bdaea6eSBram Moolenaar  unlet $ENVVAR
2967bdaea6eSBram Moolenaar  assert_equal('', $ENVVAR)
297d72c1bf0SBram Moolenaarenddef
298599c89c8SBram Moolenaar
299599c89c8SBram Moolenaarfunc Test_wrong_type()
300599c89c8SBram Moolenaar  call CheckDefFailure(['let var: list<nothing>'], 'E1010:')
301599c89c8SBram Moolenaar  call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
302599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<nothing>'], 'E1010:')
303599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:')
304599c89c8SBram Moolenaar
305599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
306599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<list<number>'], 'E1009:')
30742a480bfSBram Moolenaar
30842a480bfSBram Moolenaar  call CheckDefFailure(['let var: ally'], 'E1010:')
30942a480bfSBram Moolenaar  call CheckDefFailure(['let var: bram'], 'E1010:')
31042a480bfSBram Moolenaar  call CheckDefFailure(['let var: cathy'], 'E1010:')
31142a480bfSBram Moolenaar  call CheckDefFailure(['let var: dom'], 'E1010:')
31242a480bfSBram Moolenaar  call CheckDefFailure(['let var: freddy'], 'E1010:')
31342a480bfSBram Moolenaar  call CheckDefFailure(['let var: john'], 'E1010:')
31442a480bfSBram Moolenaar  call CheckDefFailure(['let var: larry'], 'E1010:')
31542a480bfSBram Moolenaar  call CheckDefFailure(['let var: ned'], 'E1010:')
31642a480bfSBram Moolenaar  call CheckDefFailure(['let var: pam'], 'E1010:')
31742a480bfSBram Moolenaar  call CheckDefFailure(['let var: sam'], 'E1010:')
31842a480bfSBram Moolenaar  call CheckDefFailure(['let var: vim'], 'E1010:')
3198a7d6542SBram Moolenaarendfunc
3208a7d6542SBram Moolenaar
3218a7d6542SBram Moolenaarfunc Test_const()
3228a7d6542SBram Moolenaar  call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:')
3238a7d6542SBram Moolenaar  call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:')
3248a7d6542SBram Moolenaar  call CheckDefFailure(['const two'], 'E1021:')
3259be61bbbSBram Moolenaar  call CheckDefFailure(['const &option'], 'E996:')
3268a7d6542SBram Moolenaarendfunc
3278a7d6542SBram Moolenaar
3288a7d6542SBram Moolenaardef Test_block()
3298a7d6542SBram Moolenaar  let outer = 1
3308a7d6542SBram Moolenaar  {
3318a7d6542SBram Moolenaar    let inner = 2
3328a7d6542SBram Moolenaar    assert_equal(1, outer)
3338a7d6542SBram Moolenaar    assert_equal(2, inner)
3348a7d6542SBram Moolenaar  }
3358a7d6542SBram Moolenaar  assert_equal(1, outer)
3368a7d6542SBram Moolenaarenddef
3378a7d6542SBram Moolenaar
3388a7d6542SBram Moolenaarfunc Test_block_failure()
3398a7d6542SBram Moolenaar  call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
340585fea7bSBram Moolenaar  call CheckDefFailure(['}'], 'E1025:')
341585fea7bSBram Moolenaar  call CheckDefFailure(['{', 'echo 1'], 'E1026:')
3428a7d6542SBram Moolenaarendfunc
3438a7d6542SBram Moolenaar
344585fea7bSBram Moolenaardef Test_cmd_modifier()
345585fea7bSBram Moolenaar  tab echo '0'
346585fea7bSBram Moolenaar  call CheckDefFailure(['5tab echo 3'], 'E16:')
347585fea7bSBram Moolenaarenddef
348585fea7bSBram Moolenaar
3498a7d6542SBram Moolenaardef Test_try_catch()
3508a7d6542SBram Moolenaar  let l = []
3517a092245SBram Moolenaar  try # comment
3528a7d6542SBram Moolenaar    add(l, '1')
3538a7d6542SBram Moolenaar    throw 'wrong'
3548a7d6542SBram Moolenaar    add(l, '2')
3557a092245SBram Moolenaar  catch # comment
3568a7d6542SBram Moolenaar    add(l, v:exception)
3577a092245SBram Moolenaar  finally # comment
3588a7d6542SBram Moolenaar    add(l, '3')
3597a092245SBram Moolenaar  endtry # comment
3608a7d6542SBram Moolenaar  assert_equal(['1', 'wrong', '3'], l)
3618a7d6542SBram Moolenaarenddef
3628a7d6542SBram Moolenaar
363257cc5eeSBram Moolenaardef ThrowFromDef()
364*a72cfb80SBram Moolenaar  throw "getout" # comment
365257cc5eeSBram Moolenaarenddef
366257cc5eeSBram Moolenaar
367257cc5eeSBram Moolenaarfunc CatchInFunc()
368257cc5eeSBram Moolenaar  try
369257cc5eeSBram Moolenaar    call ThrowFromDef()
370257cc5eeSBram Moolenaar  catch
371257cc5eeSBram Moolenaar    let g:thrown_func = v:exception
372257cc5eeSBram Moolenaar  endtry
373257cc5eeSBram Moolenaarendfunc
374257cc5eeSBram Moolenaar
375257cc5eeSBram Moolenaardef CatchInDef()
376257cc5eeSBram Moolenaar  try
377257cc5eeSBram Moolenaar    ThrowFromDef()
378257cc5eeSBram Moolenaar  catch
379257cc5eeSBram Moolenaar    g:thrown_def = v:exception
380257cc5eeSBram Moolenaar  endtry
381257cc5eeSBram Moolenaarenddef
382257cc5eeSBram Moolenaar
383f575adffSBram Moolenaardef ReturnFinally(): string
384f575adffSBram Moolenaar  try
385f575adffSBram Moolenaar    return 'intry'
386f575adffSBram Moolenaar  finally
387f575adffSBram Moolenaar    g:in_finally = 'finally'
388f575adffSBram Moolenaar  endtry
389f575adffSBram Moolenaar  return 'end'
390f575adffSBram Moolenaarenddef
391f575adffSBram Moolenaar
392257cc5eeSBram Moolenaardef Test_try_catch_nested()
393257cc5eeSBram Moolenaar  CatchInFunc()
394257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_func)
395257cc5eeSBram Moolenaar
396257cc5eeSBram Moolenaar  CatchInDef()
397257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_def)
398f575adffSBram Moolenaar
399f575adffSBram Moolenaar  assert_equal('intry', ReturnFinally())
400f575adffSBram Moolenaar  assert_equal('finally', g:in_finally)
401f575adffSBram Moolenaarenddef
402f575adffSBram Moolenaar
403f575adffSBram Moolenaardef Test_try_catch_match()
404f575adffSBram Moolenaar  let seq = 'a'
405f575adffSBram Moolenaar  try
406f575adffSBram Moolenaar    throw 'something'
407f575adffSBram Moolenaar  catch /nothing/
408f575adffSBram Moolenaar    seq ..= 'x'
409f575adffSBram Moolenaar  catch /some/
410f575adffSBram Moolenaar    seq ..= 'b'
411f575adffSBram Moolenaar  catch /asdf/
412f575adffSBram Moolenaar    seq ..= 'x'
413e8c4abbbSBram Moolenaar  catch ?a\?sdf?
414e8c4abbbSBram Moolenaar    seq ..= 'y'
415f575adffSBram Moolenaar  finally
416f575adffSBram Moolenaar    seq ..= 'c'
417f575adffSBram Moolenaar  endtry
418f575adffSBram Moolenaar  assert_equal('abc', seq)
419257cc5eeSBram Moolenaarenddef
420257cc5eeSBram Moolenaar
421e8c4abbbSBram Moolenaardef Test_try_catch_fails()
422e8c4abbbSBram Moolenaar  call CheckDefFailure(['catch'], 'E603:')
423e8c4abbbSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:')
424e8c4abbbSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:')
425585fea7bSBram Moolenaar  call CheckDefFailure(['finally'], 'E606:')
426585fea7bSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:')
427585fea7bSBram Moolenaar  call CheckDefFailure(['endtry'], 'E602:')
428585fea7bSBram Moolenaar  call CheckDefFailure(['while 1', 'endtry'], 'E170:')
429585fea7bSBram Moolenaar  call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
430585fea7bSBram Moolenaar  call CheckDefFailure(['if 2', 'endtry'], 'E171:')
431585fea7bSBram Moolenaar  call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
432585fea7bSBram Moolenaar
433*a72cfb80SBram Moolenaar  call CheckDefFailure(['throw'], 'E1015:')
434585fea7bSBram Moolenaar  call CheckDefFailure(['throw xxx'], 'E1001:')
435e8c4abbbSBram Moolenaarenddef
436e8c4abbbSBram Moolenaar
4378a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END
4388a7d6542SBram Moolenaar  vim9script
4398a7d6542SBram Moolenaar  let name: string = 'bob'
4408a7d6542SBram Moolenaar  def Concat(arg: string): string
4418a7d6542SBram Moolenaar    return name .. arg
4428a7d6542SBram Moolenaar  enddef
4438a7d6542SBram Moolenaar  let g:result = Concat('bie')
4448a7d6542SBram Moolenaar  let g:localname = name
4458a7d6542SBram Moolenaar
4468a7d6542SBram Moolenaar  export const CONST = 1234
4478a7d6542SBram Moolenaar  export let exported = 9876
4486e587dcbSBram Moolenaar  export let exp_name = 'John'
4498a7d6542SBram Moolenaar  export def Exported(): string
4508a7d6542SBram Moolenaar    return 'Exported'
4518a7d6542SBram Moolenaar  enddef
4528a7d6542SBram MoolenaarEND
4538a7d6542SBram Moolenaar
4545269bd2aSBram Moolenaardef Test_vim9_import_export()
4558a7d6542SBram Moolenaar  let import_script_lines =<< trim END
4568a7d6542SBram Moolenaar    vim9script
4578a7d6542SBram Moolenaar    import {exported, Exported} from './Xexport.vim'
4588a7d6542SBram Moolenaar    g:imported = exported
4596e587dcbSBram Moolenaar    exported += 3
4606e587dcbSBram Moolenaar    g:imported_added = exported
4618a7d6542SBram Moolenaar    g:imported_func = Exported()
4626e587dcbSBram Moolenaar
4636e587dcbSBram Moolenaar    import {exp_name} from './Xexport.vim'
4646e587dcbSBram Moolenaar    g:imported_name = exp_name
4656e587dcbSBram Moolenaar    exp_name ..= ' Doe'
4666e587dcbSBram Moolenaar    g:imported_name_appended = exp_name
4675381c7a1SBram Moolenaar    g:imported_later = exported
4688a7d6542SBram Moolenaar  END
4698a7d6542SBram Moolenaar
4708a7d6542SBram Moolenaar  writefile(import_script_lines, 'Ximport.vim')
4718a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport.vim')
4728a7d6542SBram Moolenaar
4738a7d6542SBram Moolenaar  source Ximport.vim
4748a7d6542SBram Moolenaar
4758a7d6542SBram Moolenaar  assert_equal('bobbie', g:result)
4768a7d6542SBram Moolenaar  assert_equal('bob', g:localname)
4778a7d6542SBram Moolenaar  assert_equal(9876, g:imported)
4786e587dcbSBram Moolenaar  assert_equal(9879, g:imported_added)
4795381c7a1SBram Moolenaar  assert_equal(9879, g:imported_later)
4808a7d6542SBram Moolenaar  assert_equal('Exported', g:imported_func)
4816e587dcbSBram Moolenaar  assert_equal('John', g:imported_name)
4826e587dcbSBram Moolenaar  assert_equal('John Doe', g:imported_name_appended)
4838a7d6542SBram Moolenaar  assert_false(exists('g:name'))
4848a7d6542SBram Moolenaar
4858a7d6542SBram Moolenaar  unlet g:result
4868a7d6542SBram Moolenaar  unlet g:localname
4878a7d6542SBram Moolenaar  unlet g:imported
4886e587dcbSBram Moolenaar  unlet g:imported_added
4895381c7a1SBram Moolenaar  unlet g:imported_later
4908a7d6542SBram Moolenaar  unlet g:imported_func
4916e587dcbSBram Moolenaar  unlet g:imported_name g:imported_name_appended
4928a7d6542SBram Moolenaar  delete('Ximport.vim')
493f2d5c240SBram Moolenaar
4945381c7a1SBram Moolenaar  let import_in_def_lines =<< trim END
4955381c7a1SBram Moolenaar    vim9script
4965381c7a1SBram Moolenaar    def ImportInDef()
4975381c7a1SBram Moolenaar      import exported from './Xexport.vim'
4985381c7a1SBram Moolenaar      g:imported = exported
4995381c7a1SBram Moolenaar      exported += 7
5005381c7a1SBram Moolenaar      g:imported_added = exported
5015381c7a1SBram Moolenaar    enddef
5025381c7a1SBram Moolenaar    ImportInDef()
5035381c7a1SBram Moolenaar  END
5045381c7a1SBram Moolenaar  writefile(import_in_def_lines, 'Ximport2.vim')
5055381c7a1SBram Moolenaar  source Ximport2.vim
5065381c7a1SBram Moolenaar  " TODO: this should be 9879
5075381c7a1SBram Moolenaar  assert_equal(9876, g:imported)
5085381c7a1SBram Moolenaar  assert_equal(9883, g:imported_added)
5095381c7a1SBram Moolenaar  unlet g:imported
5105381c7a1SBram Moolenaar  unlet g:imported_added
5115381c7a1SBram Moolenaar  delete('Ximport2.vim')
5125381c7a1SBram Moolenaar
513f2d5c240SBram Moolenaar  let import_star_as_lines =<< trim END
514f2d5c240SBram Moolenaar    vim9script
515f2d5c240SBram Moolenaar    import * as Export from './Xexport.vim'
516f2d5c240SBram Moolenaar    def UseExport()
517f2d5c240SBram Moolenaar      g:imported = Export.exported
518f2d5c240SBram Moolenaar    enddef
519f2d5c240SBram Moolenaar    UseExport()
520f2d5c240SBram Moolenaar  END
521f2d5c240SBram Moolenaar  writefile(import_star_as_lines, 'Ximport.vim')
522f2d5c240SBram Moolenaar  source Ximport.vim
5235381c7a1SBram Moolenaar  assert_equal(9883, g:imported)
524f2d5c240SBram Moolenaar
525599c89c8SBram Moolenaar  let import_star_as_lines_no_dot =<< trim END
526599c89c8SBram Moolenaar    vim9script
527599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
528599c89c8SBram Moolenaar    def Func()
529599c89c8SBram Moolenaar      let dummy = 1
530599c89c8SBram Moolenaar      let imported = Export + dummy
531599c89c8SBram Moolenaar    enddef
532599c89c8SBram Moolenaar  END
533599c89c8SBram Moolenaar  writefile(import_star_as_lines_no_dot, 'Ximport.vim')
534599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1060:')
535599c89c8SBram Moolenaar
536599c89c8SBram Moolenaar  let import_star_as_lines_dot_space =<< trim END
537599c89c8SBram Moolenaar    vim9script
538599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
539599c89c8SBram Moolenaar    def Func()
540599c89c8SBram Moolenaar      let imported = Export . exported
541599c89c8SBram Moolenaar    enddef
542599c89c8SBram Moolenaar  END
543599c89c8SBram Moolenaar  writefile(import_star_as_lines_dot_space, 'Ximport.vim')
544599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1074:')
545599c89c8SBram Moolenaar
546599c89c8SBram Moolenaar  let import_star_as_lines_missing_name =<< trim END
547599c89c8SBram Moolenaar    vim9script
548599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
549599c89c8SBram Moolenaar    def Func()
550599c89c8SBram Moolenaar      let imported = Export.
551599c89c8SBram Moolenaar    enddef
552599c89c8SBram Moolenaar  END
553599c89c8SBram Moolenaar  writefile(import_star_as_lines_missing_name, 'Ximport.vim')
554599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
555599c89c8SBram Moolenaar
556f2d5c240SBram Moolenaar  let import_star_lines =<< trim END
557f2d5c240SBram Moolenaar    vim9script
558f2d5c240SBram Moolenaar    import * from './Xexport.vim'
559f2d5c240SBram Moolenaar    g:imported = exported
560f2d5c240SBram Moolenaar  END
561f2d5c240SBram Moolenaar  writefile(import_star_lines, 'Ximport.vim')
562f2d5c240SBram Moolenaar  assert_fails('source Ximport.vim', 'E1045:')
563f2d5c240SBram Moolenaar
564fa29c8abSBram Moolenaar  " try to import something that exists but is not exported
565fa29c8abSBram Moolenaar  let import_not_exported_lines =<< trim END
566fa29c8abSBram Moolenaar    vim9script
567fa29c8abSBram Moolenaar    import name from './Xexport.vim'
568fa29c8abSBram Moolenaar  END
569fa29c8abSBram Moolenaar  writefile(import_not_exported_lines, 'Ximport.vim')
570fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1049:')
571fa29c8abSBram Moolenaar
5725269bd2aSBram Moolenaar  " try to import something that is already defined
5735269bd2aSBram Moolenaar  let import_already_defined =<< trim END
5745269bd2aSBram Moolenaar    vim9script
5755269bd2aSBram Moolenaar    let exported = 'something'
5765269bd2aSBram Moolenaar    import exported from './Xexport.vim'
5775269bd2aSBram Moolenaar  END
5785269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5795269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5805269bd2aSBram Moolenaar
5815269bd2aSBram Moolenaar  " try to import something that is already defined
5825269bd2aSBram Moolenaar  import_already_defined =<< trim END
5835269bd2aSBram Moolenaar    vim9script
5845269bd2aSBram Moolenaar    let exported = 'something'
5855269bd2aSBram Moolenaar    import * as exported from './Xexport.vim'
5865269bd2aSBram Moolenaar  END
5875269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5885269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5895269bd2aSBram Moolenaar
5905269bd2aSBram Moolenaar  " try to import something that is already defined
5915269bd2aSBram Moolenaar  import_already_defined =<< trim END
5925269bd2aSBram Moolenaar    vim9script
5935269bd2aSBram Moolenaar    let exported = 'something'
5945269bd2aSBram Moolenaar    import {exported} from './Xexport.vim'
5955269bd2aSBram Moolenaar  END
5965269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5975269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5985269bd2aSBram Moolenaar
599fa29c8abSBram Moolenaar  " import a very long name, requires making a copy
600fa29c8abSBram Moolenaar  let import_long_name_lines =<< trim END
601fa29c8abSBram Moolenaar    vim9script
602fa29c8abSBram Moolenaar    import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
603fa29c8abSBram Moolenaar  END
604fa29c8abSBram Moolenaar  writefile(import_long_name_lines, 'Ximport.vim')
605fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
606fa29c8abSBram Moolenaar
607fa29c8abSBram Moolenaar  let import_no_from_lines =<< trim END
608fa29c8abSBram Moolenaar    vim9script
609fa29c8abSBram Moolenaar    import name './Xexport.vim'
610fa29c8abSBram Moolenaar  END
611fa29c8abSBram Moolenaar  writefile(import_no_from_lines, 'Ximport.vim')
612fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1070:')
613fa29c8abSBram Moolenaar
614fa29c8abSBram Moolenaar  let import_invalid_string_lines =<< trim END
615fa29c8abSBram Moolenaar    vim9script
616fa29c8abSBram Moolenaar    import name from Xexport.vim
617fa29c8abSBram Moolenaar  END
618fa29c8abSBram Moolenaar  writefile(import_invalid_string_lines, 'Ximport.vim')
619fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1071:')
620fa29c8abSBram Moolenaar
621fa29c8abSBram Moolenaar  let import_wrong_name_lines =<< trim END
622fa29c8abSBram Moolenaar    vim9script
623fa29c8abSBram Moolenaar    import name from './XnoExport.vim'
624fa29c8abSBram Moolenaar  END
625fa29c8abSBram Moolenaar  writefile(import_wrong_name_lines, 'Ximport.vim')
626fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1053:')
627fa29c8abSBram Moolenaar
628fa29c8abSBram Moolenaar  let import_missing_comma_lines =<< trim END
629fa29c8abSBram Moolenaar    vim9script
630fa29c8abSBram Moolenaar    import {exported name} from './Xexport.vim'
631fa29c8abSBram Moolenaar  END
6325269bd2aSBram Moolenaar  writefile(import_missing_comma_lines, 'Ximport3.vim')
6335269bd2aSBram Moolenaar  assert_fails('source Ximport3.vim', 'E1046:')
634fa29c8abSBram Moolenaar
635f2d5c240SBram Moolenaar  delete('Ximport.vim')
6365269bd2aSBram Moolenaar  delete('Ximport3.vim')
6378a7d6542SBram Moolenaar  delete('Xexport.vim')
6388a7d6542SBram Moolenaar
639750802b5SBram Moolenaar  " Check that in a Vim9 script 'cpo' is set to the Vim default.
640750802b5SBram Moolenaar  set cpo&vi
641750802b5SBram Moolenaar  let cpo_before = &cpo
642750802b5SBram Moolenaar  let lines =<< trim END
643750802b5SBram Moolenaar    vim9script
644750802b5SBram Moolenaar    g:cpo_in_vim9script = &cpo
645750802b5SBram Moolenaar  END
646750802b5SBram Moolenaar  writefile(lines, 'Xvim9_script')
647750802b5SBram Moolenaar  source Xvim9_script
648750802b5SBram Moolenaar  assert_equal(cpo_before, &cpo)
649750802b5SBram Moolenaar  set cpo&vim
650750802b5SBram Moolenaar  assert_equal(&cpo, g:cpo_in_vim9script)
651750802b5SBram Moolenaar  delete('Xvim9_script')
652750802b5SBram Moolenaarenddef
653750802b5SBram Moolenaar
654750802b5SBram Moolenaardef Test_vim9script_fails()
6558a7d6542SBram Moolenaar  CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
6568a7d6542SBram Moolenaar  CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
657750802b5SBram Moolenaar  CheckScriptFailure(['export let some = 123'], 'E1042:')
658f2d5c240SBram Moolenaar  CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:')
659750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:')
660750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
661750802b5SBram Moolenaar
662750802b5SBram Moolenaar  assert_fails('vim9script', 'E1038')
663a26b9700SBram Moolenaar  assert_fails('export something', 'E1043')
6648a7d6542SBram Moolenaarenddef
6658a7d6542SBram Moolenaar
6668a7d6542SBram Moolenaardef Test_vim9script_reload()
6678a7d6542SBram Moolenaar  let lines =<< trim END
6688a7d6542SBram Moolenaar    vim9script
6698a7d6542SBram Moolenaar    const var = ''
6708a7d6542SBram Moolenaar    let valone = 1234
6718a7d6542SBram Moolenaar    def MyFunc(arg: string)
6728a7d6542SBram Moolenaar       valone = 5678
6738a7d6542SBram Moolenaar    enddef
6748a7d6542SBram Moolenaar  END
6758a7d6542SBram Moolenaar  let morelines =<< trim END
6768a7d6542SBram Moolenaar    let valtwo = 222
6778a7d6542SBram Moolenaar    export def GetValtwo(): number
6788a7d6542SBram Moolenaar      return valtwo
6798a7d6542SBram Moolenaar    enddef
6808a7d6542SBram Moolenaar  END
681675f716eSBram Moolenaar  writefile(lines + morelines,
682675f716eSBram Moolenaar            'Xreload.vim')
6838a7d6542SBram Moolenaar  source Xreload.vim
6848a7d6542SBram Moolenaar  source Xreload.vim
6858a7d6542SBram Moolenaar  source Xreload.vim
6868a7d6542SBram Moolenaar
6878a7d6542SBram Moolenaar  let testlines =<< trim END
6888a7d6542SBram Moolenaar    vim9script
6898a7d6542SBram Moolenaar    def TheFunc()
6908a7d6542SBram Moolenaar      import GetValtwo from './Xreload.vim'
6918a7d6542SBram Moolenaar      assert_equal(222, GetValtwo())
6928a7d6542SBram Moolenaar    enddef
6938a7d6542SBram Moolenaar    TheFunc()
6948a7d6542SBram Moolenaar  END
6958a7d6542SBram Moolenaar  writefile(testlines, 'Ximport.vim')
6968a7d6542SBram Moolenaar  source Ximport.vim
6978a7d6542SBram Moolenaar
6988a7d6542SBram Moolenaar  " test that when not using "morelines" valtwo is still defined
6998a7d6542SBram Moolenaar  " need to source Xreload.vim again, import doesn't reload a script
7008a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
7018a7d6542SBram Moolenaar  source Xreload.vim
7028a7d6542SBram Moolenaar  source Ximport.vim
7038a7d6542SBram Moolenaar
7048a7d6542SBram Moolenaar  " cannot declare a var twice
7058a7d6542SBram Moolenaar  lines =<< trim END
7068a7d6542SBram Moolenaar    vim9script
7078a7d6542SBram Moolenaar    let valone = 1234
7088a7d6542SBram Moolenaar    let valone = 5678
7098a7d6542SBram Moolenaar  END
7108a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
7118a7d6542SBram Moolenaar  assert_fails('source Xreload.vim', 'E1041:')
7128a7d6542SBram Moolenaar
7138a7d6542SBram Moolenaar  delete('Xreload.vim')
7148a7d6542SBram Moolenaar  delete('Ximport.vim')
7158a7d6542SBram Moolenaarenddef
7168a7d6542SBram Moolenaar
7178a7d6542SBram Moolenaardef Test_import_absolute()
7188a7d6542SBram Moolenaar  let import_lines = [
719e6085c53SBram Moolenaar        'vim9script',
720e6085c53SBram Moolenaar        'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"',
721e6085c53SBram Moolenaar        'def UseExported()',
722e6085c53SBram Moolenaar        '  g:imported_abs = exported',
723e6085c53SBram Moolenaar        '  exported = 8888',
724e6085c53SBram Moolenaar        '  g:imported_after = exported',
725e6085c53SBram Moolenaar        'enddef',
726e6085c53SBram Moolenaar        'UseExported()',
727e6085c53SBram Moolenaar        'g:import_disassembled = execute("disass UseExported")',
728e6085c53SBram Moolenaar        ]
7298a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_abs.vim')
7308a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport_abs.vim')
7318a7d6542SBram Moolenaar
7328a7d6542SBram Moolenaar  source Ximport_abs.vim
7338a7d6542SBram Moolenaar
7348a7d6542SBram Moolenaar  assert_equal(9876, g:imported_abs)
7354e12a5dfSBram Moolenaar  assert_equal(8888, g:imported_after)
736675f716eSBram Moolenaar  assert_match('<SNR>\d\+_UseExported.*' ..
737675f716eSBram Moolenaar          'g:imported_abs = exported.*' ..
738675f716eSBram Moolenaar          '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' ..
739675f716eSBram Moolenaar          '1 STOREG g:imported_abs.*' ..
740675f716eSBram Moolenaar          'exported = 8888.*' ..
741675f716eSBram Moolenaar          '3 STORESCRIPT exported in .*Xexport_abs.vim.*' ..
742675f716eSBram Moolenaar          'g:imported_after = exported.*' ..
743675f716eSBram Moolenaar          '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' ..
744675f716eSBram Moolenaar          '5 STOREG g:imported_after.*',
745e6085c53SBram Moolenaar        g:import_disassembled)
7468a7d6542SBram Moolenaar  unlet g:imported_abs
7474e12a5dfSBram Moolenaar  unlet g:import_disassembled
7488a7d6542SBram Moolenaar
7498a7d6542SBram Moolenaar  delete('Ximport_abs.vim')
7508a7d6542SBram Moolenaar  delete('Xexport_abs.vim')
7518a7d6542SBram Moolenaarenddef
7528a7d6542SBram Moolenaar
7538a7d6542SBram Moolenaardef Test_import_rtp()
7548a7d6542SBram Moolenaar  let import_lines = [
755e6085c53SBram Moolenaar        'vim9script',
756e6085c53SBram Moolenaar        'import exported from "Xexport_rtp.vim"',
757e6085c53SBram Moolenaar        'g:imported_rtp = exported',
758e6085c53SBram Moolenaar        ]
7598a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_rtp.vim')
7608a7d6542SBram Moolenaar  mkdir('import')
7618a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
7628a7d6542SBram Moolenaar
7638a7d6542SBram Moolenaar  let save_rtp = &rtp
7648a7d6542SBram Moolenaar  &rtp = getcwd()
7658a7d6542SBram Moolenaar  source Ximport_rtp.vim
7668a7d6542SBram Moolenaar  &rtp = save_rtp
7678a7d6542SBram Moolenaar
7688a7d6542SBram Moolenaar  assert_equal(9876, g:imported_rtp)
7698a7d6542SBram Moolenaar  unlet g:imported_rtp
7708a7d6542SBram Moolenaar
7718a7d6542SBram Moolenaar  delete('Ximport_rtp.vim')
7728a7d6542SBram Moolenaar  delete('import/Xexport_rtp.vim')
7738a7d6542SBram Moolenaar  delete('import', 'd')
7748a7d6542SBram Moolenaarenddef
7758a7d6542SBram Moolenaar
7768a7d6542SBram Moolenaardef Test_fixed_size_list()
7778a7d6542SBram Moolenaar  " will be allocated as one piece of memory, check that changes work
7788a7d6542SBram Moolenaar  let l = [1, 2, 3, 4]
7798a7d6542SBram Moolenaar  l->remove(0)
7808a7d6542SBram Moolenaar  l->add(5)
7818a7d6542SBram Moolenaar  l->insert(99, 1)
7820f18b6d1SBram Moolenaar  assert_equal([2, 99, 3, 4, 5], l)
7838a7d6542SBram Moolenaarenddef
7848a7d6542SBram Moolenaar
785158906cfSBram Moolenaardef IfElse(what: number): string
786158906cfSBram Moolenaar  let res = ''
787158906cfSBram Moolenaar  if what == 1
788158906cfSBram Moolenaar    res = "one"
789158906cfSBram Moolenaar  elseif what == 2
790158906cfSBram Moolenaar    res = "two"
791a259d8d3SBram Moolenaar  else
792158906cfSBram Moolenaar    res = "three"
793a259d8d3SBram Moolenaar  endif
794158906cfSBram Moolenaar  return res
795a259d8d3SBram Moolenaarenddef
796a259d8d3SBram Moolenaar
797158906cfSBram Moolenaardef Test_if_elseif_else()
798158906cfSBram Moolenaar  assert_equal('one', IfElse(1))
799158906cfSBram Moolenaar  assert_equal('two', IfElse(2))
800158906cfSBram Moolenaar  assert_equal('three', IfElse(3))
8010f18b6d1SBram Moolenaarenddef
8020f18b6d1SBram Moolenaar
803e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails()
804e8c4abbbSBram Moolenaar  call CheckDefFailure(['elseif true'], 'E582:')
805e8c4abbbSBram Moolenaar  call CheckDefFailure(['else'], 'E581:')
806e8c4abbbSBram Moolenaar  call CheckDefFailure(['endif'], 'E580:')
807e8c4abbbSBram Moolenaar  call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:')
808585fea7bSBram Moolenaar  call CheckDefFailure(['if true', 'echo 1'], 'E171:')
809e8c4abbbSBram Moolenaarenddef
810e8c4abbbSBram Moolenaar
8116d69bf60SBram Moolenaarlet g:bool_true = v:true
8126d69bf60SBram Moolenaarlet g:bool_false = v:false
8136d69bf60SBram Moolenaar
8146d69bf60SBram Moolenaardef Test_if_const_expr()
8156d69bf60SBram Moolenaar  let res = false
8166d69bf60SBram Moolenaar  if true ? true : false
8176d69bf60SBram Moolenaar    res = true
8186d69bf60SBram Moolenaar  endif
8196d69bf60SBram Moolenaar  assert_equal(true, res)
8206d69bf60SBram Moolenaar
821585fea7bSBram Moolenaar  g:glob = 2
822585fea7bSBram Moolenaar  if false
823585fea7bSBram Moolenaar    execute('let g:glob = 3')
824585fea7bSBram Moolenaar  endif
825585fea7bSBram Moolenaar  assert_equal(2, g:glob)
826585fea7bSBram Moolenaar  if true
827585fea7bSBram Moolenaar    execute('let g:glob = 3')
828585fea7bSBram Moolenaar  endif
829585fea7bSBram Moolenaar  assert_equal(3, g:glob)
830585fea7bSBram Moolenaar
8316d69bf60SBram Moolenaar  res = false
8326d69bf60SBram Moolenaar  if g:bool_true ? true : false
8336d69bf60SBram Moolenaar    res = true
8346d69bf60SBram Moolenaar  endif
8356d69bf60SBram Moolenaar  assert_equal(true, res)
8366d69bf60SBram Moolenaar
8376d69bf60SBram Moolenaar  res = false
8386d69bf60SBram Moolenaar  if true ? g:bool_true : false
8396d69bf60SBram Moolenaar    res = true
8406d69bf60SBram Moolenaar  endif
8416d69bf60SBram Moolenaar  assert_equal(true, res)
8426d69bf60SBram Moolenaar
8436d69bf60SBram Moolenaar  res = false
8446d69bf60SBram Moolenaar  if true ? true : g:bool_false
8456d69bf60SBram Moolenaar    res = true
8466d69bf60SBram Moolenaar  endif
8476d69bf60SBram Moolenaar  assert_equal(true, res)
8486d69bf60SBram Moolenaar
8496d69bf60SBram Moolenaar  res = false
8506d69bf60SBram Moolenaar  if true ? false : true
8516d69bf60SBram Moolenaar    res = true
8526d69bf60SBram Moolenaar  endif
8536d69bf60SBram Moolenaar  assert_equal(false, res)
8546d69bf60SBram Moolenaar
8556d69bf60SBram Moolenaar  res = false
8566d69bf60SBram Moolenaar  if false ? false : true
8576d69bf60SBram Moolenaar    res = true
8586d69bf60SBram Moolenaar  endif
8596d69bf60SBram Moolenaar  assert_equal(true, res)
8606d69bf60SBram Moolenaar
8616d69bf60SBram Moolenaar  res = false
8626d69bf60SBram Moolenaar  if false ? true : false
8636d69bf60SBram Moolenaar    res = true
8646d69bf60SBram Moolenaar  endif
8656d69bf60SBram Moolenaar  assert_equal(false, res)
8666d69bf60SBram Moolenaar
8676d69bf60SBram Moolenaar  res = false
868e8c4abbbSBram Moolenaar  if has('xyz') ? true : false
869e8c4abbbSBram Moolenaar    res = true
870e8c4abbbSBram Moolenaar  endif
871e8c4abbbSBram Moolenaar  assert_equal(false, res)
872e8c4abbbSBram Moolenaar
873e8c4abbbSBram Moolenaar  res = false
8746d69bf60SBram Moolenaar  if true && true
8756d69bf60SBram Moolenaar    res = true
8766d69bf60SBram Moolenaar  endif
8776d69bf60SBram Moolenaar  assert_equal(true, res)
8786d69bf60SBram Moolenaar
8796d69bf60SBram Moolenaar  res = false
8806d69bf60SBram Moolenaar  if true && false
8816d69bf60SBram Moolenaar    res = true
8826d69bf60SBram Moolenaar  endif
8836d69bf60SBram Moolenaar  assert_equal(false, res)
8846d69bf60SBram Moolenaar
8856d69bf60SBram Moolenaar  res = false
8866d69bf60SBram Moolenaar  if g:bool_true && false
8876d69bf60SBram Moolenaar    res = true
8886d69bf60SBram Moolenaar  endif
8896d69bf60SBram Moolenaar  assert_equal(false, res)
8906d69bf60SBram Moolenaar
8916d69bf60SBram Moolenaar  res = false
8926d69bf60SBram Moolenaar  if true && g:bool_false
8936d69bf60SBram Moolenaar    res = true
8946d69bf60SBram Moolenaar  endif
8956d69bf60SBram Moolenaar  assert_equal(false, res)
8966d69bf60SBram Moolenaar
8976d69bf60SBram Moolenaar  res = false
8986d69bf60SBram Moolenaar  if false && false
8996d69bf60SBram Moolenaar    res = true
9006d69bf60SBram Moolenaar  endif
9016d69bf60SBram Moolenaar  assert_equal(false, res)
9026d69bf60SBram Moolenaar
9036d69bf60SBram Moolenaar  res = false
9046d69bf60SBram Moolenaar  if true || false
9056d69bf60SBram Moolenaar    res = true
9066d69bf60SBram Moolenaar  endif
9076d69bf60SBram Moolenaar  assert_equal(true, res)
9086d69bf60SBram Moolenaar
9096d69bf60SBram Moolenaar  res = false
9106d69bf60SBram Moolenaar  if g:bool_true || false
9116d69bf60SBram Moolenaar    res = true
9126d69bf60SBram Moolenaar  endif
9136d69bf60SBram Moolenaar  assert_equal(true, res)
9146d69bf60SBram Moolenaar
9156d69bf60SBram Moolenaar  res = false
9166d69bf60SBram Moolenaar  if true || g:bool_false
9176d69bf60SBram Moolenaar    res = true
9186d69bf60SBram Moolenaar  endif
9196d69bf60SBram Moolenaar  assert_equal(true, res)
9206d69bf60SBram Moolenaar
9216d69bf60SBram Moolenaar  res = false
9226d69bf60SBram Moolenaar  if false || false
9236d69bf60SBram Moolenaar    res = true
9246d69bf60SBram Moolenaar  endif
9256d69bf60SBram Moolenaar  assert_equal(false, res)
92680c34ca3SBram Moolenaarenddef
9276d69bf60SBram Moolenaar
92880c34ca3SBram Moolenaardef Test_if_const_expr_fails()
92980c34ca3SBram Moolenaar  call CheckDefFailure(['if "aaa" == "bbb'], 'E114:')
93080c34ca3SBram Moolenaar  call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:')
931e8c4abbbSBram Moolenaar  call CheckDefFailure(["if has('aaa'"], 'E110:')
932e8c4abbbSBram Moolenaar  call CheckDefFailure(["if has('aaa') ? true false"], 'E109:')
9336d69bf60SBram Moolenaarenddef
9346d69bf60SBram Moolenaar
935ad39c094SBram Moolenaardef Test_execute_cmd()
936ad39c094SBram Moolenaar  new
937ad39c094SBram Moolenaar  setline(1, 'default')
938ad39c094SBram Moolenaar  execute 'call setline(1, "execute-string")'
939ad39c094SBram Moolenaar  assert_equal('execute-string', getline(1))
940*a72cfb80SBram Moolenaar
941*a72cfb80SBram Moolenaar  execute "call setline(1, 'execute-string')"
942*a72cfb80SBram Moolenaar  assert_equal('execute-string', getline(1))
943*a72cfb80SBram Moolenaar
944ad39c094SBram Moolenaar  let cmd1 = 'call setline(1,'
945ad39c094SBram Moolenaar  let cmd2 = '"execute-var")'
946*a72cfb80SBram Moolenaar  execute cmd1 cmd2 # comment
947ad39c094SBram Moolenaar  assert_equal('execute-var', getline(1))
948*a72cfb80SBram Moolenaar
949ad39c094SBram Moolenaar  execute cmd1 cmd2 '|call setline(1, "execute-var-string")'
950ad39c094SBram Moolenaar  assert_equal('execute-var-string', getline(1))
951*a72cfb80SBram Moolenaar
952ad39c094SBram Moolenaar  let cmd_first = 'call '
953ad39c094SBram Moolenaar  let cmd_last = 'setline(1, "execute-var-var")'
954ad39c094SBram Moolenaar  execute cmd_first .. cmd_last
955ad39c094SBram Moolenaar  assert_equal('execute-var-var', getline(1))
956ad39c094SBram Moolenaar  bwipe!
957585fea7bSBram Moolenaar
958585fea7bSBram Moolenaar  call CheckDefFailure(['execute xxx'], 'E1001:')
959*a72cfb80SBram Moolenaar  call CheckDefFailure(['execute "cmd"# comment'], 'E488:')
960ad39c094SBram Moolenaarenddef
961ad39c094SBram Moolenaar
962ad39c094SBram Moolenaardef Test_echo_cmd()
963*a72cfb80SBram Moolenaar  echo 'some' # comment
964585fea7bSBram Moolenaar  echon 'thing'
965ad39c094SBram Moolenaar  assert_match('^something$', Screenline(&lines))
966ad39c094SBram Moolenaar
967*a72cfb80SBram Moolenaar  echo "some" # comment
968*a72cfb80SBram Moolenaar  echon "thing"
969*a72cfb80SBram Moolenaar  assert_match('^something$', Screenline(&lines))
970*a72cfb80SBram Moolenaar
971ad39c094SBram Moolenaar  let str1 = 'some'
972ad39c094SBram Moolenaar  let str2 = 'more'
973ad39c094SBram Moolenaar  echo str1 str2
974ad39c094SBram Moolenaar  assert_match('^some more$', Screenline(&lines))
975*a72cfb80SBram Moolenaar
976*a72cfb80SBram Moolenaar  call CheckDefFailure(['echo "xxx"# comment'], 'E488:')
977ad39c094SBram Moolenaarenddef
978ad39c094SBram Moolenaar
97941fe0617SBram Moolenaardef Test_for_outside_of_function()
98041fe0617SBram Moolenaar  let lines =<< trim END
98141fe0617SBram Moolenaar    vim9script
98241fe0617SBram Moolenaar    new
98341fe0617SBram Moolenaar    for var in range(0, 3)
98441fe0617SBram Moolenaar      append(line('$'), var)
98541fe0617SBram Moolenaar    endfor
98641fe0617SBram Moolenaar    assert_equal(['', '0', '1', '2', '3'], getline(1, '$'))
98741fe0617SBram Moolenaar    bwipe!
98841fe0617SBram Moolenaar  END
98941fe0617SBram Moolenaar  writefile(lines, 'Xvim9for.vim')
99041fe0617SBram Moolenaar  source Xvim9for.vim
99141fe0617SBram Moolenaar  delete('Xvim9for.vim')
99241fe0617SBram Moolenaarenddef
9938a7d6542SBram Moolenaar
994e8c4abbbSBram Moolenaardef Test_for_loop()
995e8c4abbbSBram Moolenaar  let result = ''
996e8c4abbbSBram Moolenaar  for cnt in range(7)
997e8c4abbbSBram Moolenaar    if cnt == 4
998e8c4abbbSBram Moolenaar      break
999e8c4abbbSBram Moolenaar    endif
1000e8c4abbbSBram Moolenaar    if cnt == 2
1001e8c4abbbSBram Moolenaar      continue
1002e8c4abbbSBram Moolenaar    endif
1003e8c4abbbSBram Moolenaar    result ..= cnt .. '_'
1004e8c4abbbSBram Moolenaar  endfor
1005e8c4abbbSBram Moolenaar  assert_equal('0_1_3_', result)
1006e8c4abbbSBram Moolenaarenddef
1007e8c4abbbSBram Moolenaar
1008e8c4abbbSBram Moolenaardef Test_for_loop_fails()
1009675f716eSBram Moolenaar  CheckDefFailure(['for # in range(5)'], 'E690:')
1010675f716eSBram Moolenaar  CheckDefFailure(['for i In range(5)'], 'E690:')
1011675f716eSBram Moolenaar  CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:')
10126e949784SBram Moolenaar  CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:')
1013675f716eSBram Moolenaar  CheckDefFailure(['for i in "text"'], 'E1024:')
1014675f716eSBram Moolenaar  CheckDefFailure(['for i in xxx'], 'E1001:')
1015675f716eSBram Moolenaar  CheckDefFailure(['endfor'], 'E588:')
1016675f716eSBram Moolenaar  CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:')
1017e8c4abbbSBram Moolenaarenddef
1018e8c4abbbSBram Moolenaar
1019d0df1aacSBram Moolenaardef Test_while_loop()
1020d0df1aacSBram Moolenaar  let result = ''
1021d0df1aacSBram Moolenaar  let cnt = 0
1022d0df1aacSBram Moolenaar  while cnt < 555
1023d0df1aacSBram Moolenaar    if cnt == 3
1024d0df1aacSBram Moolenaar      break
1025d0df1aacSBram Moolenaar    endif
1026d0df1aacSBram Moolenaar    cnt += 1
1027d0df1aacSBram Moolenaar    if cnt == 2
1028d0df1aacSBram Moolenaar      continue
1029d0df1aacSBram Moolenaar    endif
1030d0df1aacSBram Moolenaar    result ..= cnt .. '_'
1031d0df1aacSBram Moolenaar  endwhile
1032d0df1aacSBram Moolenaar  assert_equal('1_3_', result)
1033d0df1aacSBram Moolenaarenddef
1034d0df1aacSBram Moolenaar
1035e8c4abbbSBram Moolenaardef Test_while_loop_fails()
1036675f716eSBram Moolenaar  CheckDefFailure(['while xxx'], 'E1001:')
1037675f716eSBram Moolenaar  CheckDefFailure(['endwhile'], 'E588:')
1038675f716eSBram Moolenaar  CheckDefFailure(['continue'], 'E586:')
1039675f716eSBram Moolenaar  CheckDefFailure(['if true', 'continue'], 'E586:')
1040675f716eSBram Moolenaar  CheckDefFailure(['break'], 'E587:')
1041675f716eSBram Moolenaar  CheckDefFailure(['if true', 'break'], 'E587:')
1042675f716eSBram Moolenaar  CheckDefFailure(['while 1', 'echo 3'], 'E170:')
1043bd5da371SBram Moolenaarenddef
1044bd5da371SBram Moolenaar
10459645e2d9SBram Moolenaardef Test_interrupt_loop()
104697acfc78SBram Moolenaar  let caught = false
10479645e2d9SBram Moolenaar  let x = 0
104897acfc78SBram Moolenaar  try
10499645e2d9SBram Moolenaar    while 1
10509645e2d9SBram Moolenaar      x += 1
10519645e2d9SBram Moolenaar      if x == 100
10529645e2d9SBram Moolenaar        feedkeys("\<C-C>", 'Lt')
10539645e2d9SBram Moolenaar      endif
10549645e2d9SBram Moolenaar    endwhile
105597acfc78SBram Moolenaar  catch
105697acfc78SBram Moolenaar    caught = true
105797acfc78SBram Moolenaar    assert_equal(100, x)
105897acfc78SBram Moolenaar  endtry
105997acfc78SBram Moolenaar  assert_true(caught, 'should have caught an exception')
10609645e2d9SBram Moolenaarenddef
106120431c9dSBram Moolenaar
10624fdae999SBram Moolenaardef Test_automatic_line_continuation()
10634fdae999SBram Moolenaar  let mylist = [
10644fdae999SBram Moolenaar      'one',
10654fdae999SBram Moolenaar      'two',
10664fdae999SBram Moolenaar      'three',
10674fdae999SBram Moolenaar      ] " comment
10684fdae999SBram Moolenaar  assert_equal(['one', 'two', 'three'], mylist)
10694fdae999SBram Moolenaar
10704fdae999SBram Moolenaar  let mydict = {
10714fdae999SBram Moolenaar      'one': 1,
10724fdae999SBram Moolenaar      'two': 2,
10734fdae999SBram Moolenaar      'three':
10744fdae999SBram Moolenaar          3,
10754fdae999SBram Moolenaar      } " comment
10764fdae999SBram Moolenaar  assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict)
10774fdae999SBram Moolenaar  mydict = #{
10782c330432SBram Moolenaar      one: 1,  # comment
10792c330432SBram Moolenaar      two:     # comment
10802c330432SBram Moolenaar           2,  # comment
10812c330432SBram Moolenaar      three: 3 # comment
10822c330432SBram Moolenaar      }
10832c330432SBram Moolenaar  assert_equal(#{one: 1, two: 2, three: 3}, mydict)
10842c330432SBram Moolenaar  mydict = #{
10852c330432SBram Moolenaar      one: 1,
10864fdae999SBram Moolenaar      two:
10874fdae999SBram Moolenaar           2,
10882c330432SBram Moolenaar      three: 3
10894fdae999SBram Moolenaar      }
10904fdae999SBram Moolenaar  assert_equal(#{one: 1, two: 2, three: 3}, mydict)
1091e6085c53SBram Moolenaar
1092e6085c53SBram Moolenaar  assert_equal(
1093e6085c53SBram Moolenaar        ['one', 'two', 'three'],
1094e6085c53SBram Moolenaar        split('one two three')
1095e6085c53SBram Moolenaar        )
10964fdae999SBram Moolenaarenddef
10974fdae999SBram Moolenaar
10987a092245SBram Moolenaardef Test_vim9_comment()
10997a092245SBram Moolenaar  CheckScriptSuccess([
11007a092245SBram Moolenaar      'vim9script',
11017a092245SBram Moolenaar      '# something',
11027a092245SBram Moolenaar      ])
11037a092245SBram Moolenaar  CheckScriptFailure([
11047a092245SBram Moolenaar      'vim9script',
11057a092245SBram Moolenaar      ':# something',
11067a092245SBram Moolenaar      ], 'E488:')
11077a092245SBram Moolenaar  CheckScriptFailure([
11087a092245SBram Moolenaar      '# something',
11097a092245SBram Moolenaar      ], 'E488:')
11107a092245SBram Moolenaar  CheckScriptFailure([
11117a092245SBram Moolenaar      ':# something',
11127a092245SBram Moolenaar      ], 'E488:')
11137a092245SBram Moolenaar
11144a8d9f2eSBram Moolenaar  { # block start
11154a8d9f2eSBram Moolenaar  } # block end
11164a8d9f2eSBram Moolenaar  CheckDefFailure([
11174a8d9f2eSBram Moolenaar      '{# comment',
11184a8d9f2eSBram Moolenaar      ], 'E488:')
11194a8d9f2eSBram Moolenaar  CheckDefFailure([
11204a8d9f2eSBram Moolenaar      '{',
11214a8d9f2eSBram Moolenaar      '}# comment',
11224a8d9f2eSBram Moolenaar      ], 'E488:')
11234a8d9f2eSBram Moolenaar
11244a8d9f2eSBram Moolenaar  echo "yes" # comment
11254a8d9f2eSBram Moolenaar  CheckDefFailure([
11264a8d9f2eSBram Moolenaar      'echo "yes"# comment',
11274a8d9f2eSBram Moolenaar      ], 'E488:')
11287a092245SBram Moolenaar  CheckScriptSuccess([
11297a092245SBram Moolenaar      'vim9script',
11307a092245SBram Moolenaar      'echo "yes" # something',
11317a092245SBram Moolenaar      ])
11327a092245SBram Moolenaar  CheckScriptFailure([
11337a092245SBram Moolenaar      'vim9script',
11347a092245SBram Moolenaar      'echo "yes"# something',
11357a092245SBram Moolenaar      ], 'E121:')
11367a092245SBram Moolenaar  CheckScriptFailure([
11377a092245SBram Moolenaar      'vim9script',
11387a092245SBram Moolenaar      'echo# something',
11397a092245SBram Moolenaar      ], 'E121:')
11407a092245SBram Moolenaar  CheckScriptFailure([
11417a092245SBram Moolenaar      'echo "yes" # something',
11427a092245SBram Moolenaar      ], 'E121:')
11437a092245SBram Moolenaar
11444a8d9f2eSBram Moolenaar  exe "echo" # comment
11454a8d9f2eSBram Moolenaar  CheckDefFailure([
11464a8d9f2eSBram Moolenaar      'exe "echo"# comment',
11474a8d9f2eSBram Moolenaar      ], 'E488:')
11484a8d9f2eSBram Moolenaar  CheckScriptSuccess([
11494a8d9f2eSBram Moolenaar      'vim9script',
11504a8d9f2eSBram Moolenaar      'exe "echo" # something',
11514a8d9f2eSBram Moolenaar      ])
11524a8d9f2eSBram Moolenaar  CheckScriptFailure([
11534a8d9f2eSBram Moolenaar      'vim9script',
11544a8d9f2eSBram Moolenaar      'exe "echo"# something',
11554a8d9f2eSBram Moolenaar      ], 'E121:')
11564a8d9f2eSBram Moolenaar  CheckDefFailure([
11574a8d9f2eSBram Moolenaar      'exe # comment',
11584a8d9f2eSBram Moolenaar      ], 'E1015:')
11594a8d9f2eSBram Moolenaar  CheckScriptFailure([
11604a8d9f2eSBram Moolenaar      'vim9script',
11614a8d9f2eSBram Moolenaar      'exe# something',
11624a8d9f2eSBram Moolenaar      ], 'E121:')
11634a8d9f2eSBram Moolenaar  CheckScriptFailure([
11644a8d9f2eSBram Moolenaar      'exe "echo" # something',
11654a8d9f2eSBram Moolenaar      ], 'E121:')
11664a8d9f2eSBram Moolenaar
11677a092245SBram Moolenaar  CheckDefFailure([
11687a092245SBram Moolenaar      'try# comment',
11697a092245SBram Moolenaar      '  echo "yes"',
11707a092245SBram Moolenaar      'catch',
11717a092245SBram Moolenaar      'endtry',
11727a092245SBram Moolenaar      ], 'E488:')
11732c5ed4e3SBram Moolenaar  CheckScriptFailure([
11742c5ed4e3SBram Moolenaar      'vim9script',
11752c5ed4e3SBram Moolenaar      'try# comment',
11762c5ed4e3SBram Moolenaar      'echo "yes"',
11772c5ed4e3SBram Moolenaar      ], 'E488:')
11787a092245SBram Moolenaar  CheckDefFailure([
11797a092245SBram Moolenaar      'try',
1180*a72cfb80SBram Moolenaar      '  throw#comment',
1181*a72cfb80SBram Moolenaar      'catch',
1182*a72cfb80SBram Moolenaar      'endtry',
1183*a72cfb80SBram Moolenaar      ], 'E1015:')
1184*a72cfb80SBram Moolenaar  CheckDefFailure([
1185*a72cfb80SBram Moolenaar      'try',
1186*a72cfb80SBram Moolenaar      '  throw "yes"#comment',
1187*a72cfb80SBram Moolenaar      'catch',
1188*a72cfb80SBram Moolenaar      'endtry',
1189*a72cfb80SBram Moolenaar      ], 'E488:')
1190*a72cfb80SBram Moolenaar  CheckDefFailure([
1191*a72cfb80SBram Moolenaar      'try',
11927a092245SBram Moolenaar      '  echo "yes"',
11937a092245SBram Moolenaar      'catch# comment',
11947a092245SBram Moolenaar      'endtry',
11957a092245SBram Moolenaar      ], 'E488:')
11962c5ed4e3SBram Moolenaar  CheckScriptFailure([
11972c5ed4e3SBram Moolenaar      'vim9script',
11982c5ed4e3SBram Moolenaar      'try',
11992c5ed4e3SBram Moolenaar      '  echo "yes"',
12002c5ed4e3SBram Moolenaar      'catch# comment',
12012c5ed4e3SBram Moolenaar      'endtry',
12022c5ed4e3SBram Moolenaar      ], 'E654:')
12032c5ed4e3SBram Moolenaar  CheckDefFailure([
12042c5ed4e3SBram Moolenaar      'try',
12052c5ed4e3SBram Moolenaar      '  echo "yes"',
12062c5ed4e3SBram Moolenaar      'catch /pat/# comment',
12072c5ed4e3SBram Moolenaar      'endtry',
12082c5ed4e3SBram Moolenaar      ], 'E488:')
12092c5ed4e3SBram Moolenaar  CheckScriptFailure([
12102c5ed4e3SBram Moolenaar      'vim9script',
12112c5ed4e3SBram Moolenaar      'try',
12122c5ed4e3SBram Moolenaar      '  throw "pat"',
12132c5ed4e3SBram Moolenaar      'catch /pat/# comment',
12142c5ed4e3SBram Moolenaar      'endtry',
12152c5ed4e3SBram Moolenaar      ], 'E605:')
12167a092245SBram Moolenaar  CheckDefFailure([
12177a092245SBram Moolenaar      'try',
12187a092245SBram Moolenaar      'echo "yes"',
12197a092245SBram Moolenaar      'catch',
12207a092245SBram Moolenaar      'endtry# comment',
12217a092245SBram Moolenaar      ], 'E488:')
12222c5ed4e3SBram Moolenaar  CheckScriptFailure([
12232c5ed4e3SBram Moolenaar      'vim9script',
12242c5ed4e3SBram Moolenaar      'try',
12252c5ed4e3SBram Moolenaar      '  echo "yes"',
12262c5ed4e3SBram Moolenaar      'catch',
12272c5ed4e3SBram Moolenaar      'endtry# comment',
12282c5ed4e3SBram Moolenaar      ], 'E600:')
12292c5ed4e3SBram Moolenaar
12302c5ed4e3SBram Moolenaar  CheckScriptSuccess([
12312c5ed4e3SBram Moolenaar      'vim9script',
12322c5ed4e3SBram Moolenaar      'hi # comment',
12332c5ed4e3SBram Moolenaar      ])
12342c5ed4e3SBram Moolenaar  CheckScriptFailure([
12352c5ed4e3SBram Moolenaar      'vim9script',
12362c5ed4e3SBram Moolenaar      'hi# comment',
12372c5ed4e3SBram Moolenaar      ], 'E416:')
12381966c248SBram Moolenaar  CheckScriptSuccess([
12391966c248SBram Moolenaar      'vim9script',
12401966c248SBram Moolenaar      'hi Search # comment',
12411966c248SBram Moolenaar      ])
12421966c248SBram Moolenaar  CheckScriptFailure([
12431966c248SBram Moolenaar      'vim9script',
12441966c248SBram Moolenaar      'hi Search# comment',
12451966c248SBram Moolenaar      ], 'E416:')
12461966c248SBram Moolenaar  CheckScriptSuccess([
12471966c248SBram Moolenaar      'vim9script',
12481966c248SBram Moolenaar      'hi link This Search # comment',
12491966c248SBram Moolenaar      ])
12501966c248SBram Moolenaar  CheckScriptFailure([
12511966c248SBram Moolenaar      'vim9script',
12521966c248SBram Moolenaar      'hi link This That# comment',
12531966c248SBram Moolenaar      ], 'E413:')
12541966c248SBram Moolenaar  CheckScriptSuccess([
12551966c248SBram Moolenaar      'vim9script',
12561966c248SBram Moolenaar      'hi clear This # comment',
12571966c248SBram Moolenaar      'hi clear # comment',
12581966c248SBram Moolenaar      ])
12591966c248SBram Moolenaar  " not tested, because it doesn't give an error but a warning:
12601966c248SBram Moolenaar  " hi clear This# comment',
12611966c248SBram Moolenaar  CheckScriptFailure([
12621966c248SBram Moolenaar      'vim9script',
12631966c248SBram Moolenaar      'hi clear# comment',
12641966c248SBram Moolenaar      ], 'E416:')
12651966c248SBram Moolenaar
12661966c248SBram Moolenaar  CheckScriptSuccess([
12671966c248SBram Moolenaar      'vim9script',
12681966c248SBram Moolenaar      'hi Group term=bold',
12691966c248SBram Moolenaar      'match Group /todo/ # comment',
12701966c248SBram Moolenaar      ])
12711966c248SBram Moolenaar  CheckScriptFailure([
12721966c248SBram Moolenaar      'vim9script',
12731966c248SBram Moolenaar      'hi Group term=bold',
12741966c248SBram Moolenaar      'match Group /todo/# comment',
12751966c248SBram Moolenaar      ], 'E488:')
12761966c248SBram Moolenaar  CheckScriptSuccess([
12771966c248SBram Moolenaar      'vim9script',
12781966c248SBram Moolenaar      'match # comment',
12791966c248SBram Moolenaar      ])
12801966c248SBram Moolenaar  CheckScriptFailure([
12811966c248SBram Moolenaar      'vim9script',
12821966c248SBram Moolenaar      'match# comment',
12831966c248SBram Moolenaar      ], 'E475:')
12841966c248SBram Moolenaar  CheckScriptSuccess([
12851966c248SBram Moolenaar      'vim9script',
12861966c248SBram Moolenaar      'match none # comment',
12871966c248SBram Moolenaar      ])
12881966c248SBram Moolenaar  CheckScriptFailure([
12891966c248SBram Moolenaar      'vim9script',
12901966c248SBram Moolenaar      'match none# comment',
12911966c248SBram Moolenaar      ], 'E475:')
12921966c248SBram Moolenaar
12931966c248SBram Moolenaar  CheckScriptSuccess([
12941966c248SBram Moolenaar      'vim9script',
12951966c248SBram Moolenaar      'menutrans clear # comment',
12961966c248SBram Moolenaar      ])
12971966c248SBram Moolenaar  CheckScriptFailure([
12981966c248SBram Moolenaar      'vim9script',
12991966c248SBram Moolenaar      'menutrans clear# comment text',
13001966c248SBram Moolenaar      ], 'E474:')
13011966c248SBram Moolenaar
13021966c248SBram Moolenaar  CheckScriptSuccess([
13031966c248SBram Moolenaar      'vim9script',
13041966c248SBram Moolenaar      'syntax clear # comment',
13051966c248SBram Moolenaar      ])
13061966c248SBram Moolenaar  CheckScriptFailure([
13071966c248SBram Moolenaar      'vim9script',
13081966c248SBram Moolenaar      'syntax clear# comment text',
13091966c248SBram Moolenaar      ], 'E28:')
13101966c248SBram Moolenaar  CheckScriptSuccess([
13111966c248SBram Moolenaar      'vim9script',
13121966c248SBram Moolenaar      'syntax keyword Word some',
13131966c248SBram Moolenaar      'syntax clear Word # comment',
13141966c248SBram Moolenaar      ])
13151966c248SBram Moolenaar  CheckScriptFailure([
13161966c248SBram Moolenaar      'vim9script',
13171966c248SBram Moolenaar      'syntax keyword Word some',
13181966c248SBram Moolenaar      'syntax clear Word# comment text',
13191966c248SBram Moolenaar      ], 'E28:')
13201966c248SBram Moolenaar
13211966c248SBram Moolenaar  CheckScriptSuccess([
13221966c248SBram Moolenaar      'vim9script',
13231966c248SBram Moolenaar      'syntax list # comment',
13241966c248SBram Moolenaar      ])
13251966c248SBram Moolenaar  CheckScriptFailure([
13261966c248SBram Moolenaar      'vim9script',
13271966c248SBram Moolenaar      'syntax list# comment text',
13281966c248SBram Moolenaar      ], 'E28:')
13291966c248SBram Moolenaar
13301966c248SBram Moolenaar  CheckScriptSuccess([
13311966c248SBram Moolenaar      'vim9script',
13321966c248SBram Moolenaar      'syntax match Word /pat/ oneline # comment',
13331966c248SBram Moolenaar      ])
13341966c248SBram Moolenaar  CheckScriptFailure([
13351966c248SBram Moolenaar      'vim9script',
13361966c248SBram Moolenaar      'syntax match Word /pat/ oneline# comment',
13371966c248SBram Moolenaar      ], 'E475:')
13381966c248SBram Moolenaar
13391966c248SBram Moolenaar  CheckScriptSuccess([
13401966c248SBram Moolenaar      'vim9script',
13411966c248SBram Moolenaar      'syntax keyword Word word # comm[ent',
13421966c248SBram Moolenaar      ])
13431966c248SBram Moolenaar  CheckScriptFailure([
13441966c248SBram Moolenaar      'vim9script',
13451966c248SBram Moolenaar      'syntax keyword Word word# comm[ent',
13461966c248SBram Moolenaar      ], 'E789:')
13471966c248SBram Moolenaar
13481966c248SBram Moolenaar  CheckScriptSuccess([
13491966c248SBram Moolenaar      'vim9script',
13501966c248SBram Moolenaar      'syntax match Word /pat/ # comment',
13511966c248SBram Moolenaar      ])
13521966c248SBram Moolenaar  CheckScriptFailure([
13531966c248SBram Moolenaar      'vim9script',
13541966c248SBram Moolenaar      'syntax match Word /pat/# comment',
13551966c248SBram Moolenaar      ], 'E402:')
13561966c248SBram Moolenaar
13571966c248SBram Moolenaar  CheckScriptSuccess([
13581966c248SBram Moolenaar      'vim9script',
13591966c248SBram Moolenaar      'syntax match Word /pat/ contains=Something # comment',
13601966c248SBram Moolenaar      ])
13611966c248SBram Moolenaar  CheckScriptFailure([
13621966c248SBram Moolenaar      'vim9script',
13631966c248SBram Moolenaar      'syntax match Word /pat/ contains=Something# comment',
13641966c248SBram Moolenaar      ], 'E475:')
13651966c248SBram Moolenaar  CheckScriptFailure([
13661966c248SBram Moolenaar      'vim9script',
13671966c248SBram Moolenaar      'syntax match Word /pat/ contains= # comment',
13681966c248SBram Moolenaar      ], 'E406:')
13691966c248SBram Moolenaar  CheckScriptFailure([
13701966c248SBram Moolenaar      'vim9script',
13711966c248SBram Moolenaar      'syntax match Word /pat/ contains=# comment',
13721966c248SBram Moolenaar      ], 'E475:')
13731966c248SBram Moolenaar
13741966c248SBram Moolenaar  CheckScriptSuccess([
13751966c248SBram Moolenaar      'vim9script',
13761966c248SBram Moolenaar      'syntax region Word start=/pat/ end=/pat/ # comment',
13771966c248SBram Moolenaar      ])
13781966c248SBram Moolenaar  CheckScriptFailure([
13791966c248SBram Moolenaar      'vim9script',
13801966c248SBram Moolenaar      'syntax region Word start=/pat/ end=/pat/# comment',
13811966c248SBram Moolenaar      ], 'E475:')
13821966c248SBram Moolenaar
13831966c248SBram Moolenaar  CheckScriptSuccess([
13841966c248SBram Moolenaar      'vim9script',
13851966c248SBram Moolenaar      'syntax sync # comment',
13861966c248SBram Moolenaar      ])
13871966c248SBram Moolenaar  CheckScriptFailure([
13881966c248SBram Moolenaar      'vim9script',
13891966c248SBram Moolenaar      'syntax sync# comment',
13901966c248SBram Moolenaar      ], 'E404:')
13911966c248SBram Moolenaar  CheckScriptSuccess([
13921966c248SBram Moolenaar      'vim9script',
13931966c248SBram Moolenaar      'syntax sync ccomment # comment',
13941966c248SBram Moolenaar      ])
13951966c248SBram Moolenaar  CheckScriptFailure([
13961966c248SBram Moolenaar      'vim9script',
13971966c248SBram Moolenaar      'syntax sync ccomment# comment',
13981966c248SBram Moolenaar      ], 'E404:')
13991966c248SBram Moolenaar
14001966c248SBram Moolenaar  CheckScriptSuccess([
14011966c248SBram Moolenaar      'vim9script',
14021966c248SBram Moolenaar      'syntax cluster Some contains=Word # comment',
14031966c248SBram Moolenaar      ])
14041966c248SBram Moolenaar  CheckScriptFailure([
14051966c248SBram Moolenaar      'vim9script',
14061966c248SBram Moolenaar      'syntax cluster Some contains=Word# comment',
14071966c248SBram Moolenaar      ], 'E475:')
1408*a72cfb80SBram Moolenaar
1409*a72cfb80SBram Moolenaar  CheckScriptSuccess([
1410*a72cfb80SBram Moolenaar      'vim9script',
1411*a72cfb80SBram Moolenaar      'command Echo echo # comment',
1412*a72cfb80SBram Moolenaar      'command Echo # comment',
1413*a72cfb80SBram Moolenaar      ])
1414*a72cfb80SBram Moolenaar  CheckScriptFailure([
1415*a72cfb80SBram Moolenaar      'vim9script',
1416*a72cfb80SBram Moolenaar      'command Echo echo# comment',
1417*a72cfb80SBram Moolenaar      'Echo',
1418*a72cfb80SBram Moolenaar      ], 'E121:')
1419*a72cfb80SBram Moolenaar  CheckScriptFailure([
1420*a72cfb80SBram Moolenaar      'vim9script',
1421*a72cfb80SBram Moolenaar      'command Echo# comment',
1422*a72cfb80SBram Moolenaar      ], 'E182:')
1423*a72cfb80SBram Moolenaar  CheckScriptFailure([
1424*a72cfb80SBram Moolenaar      'vim9script',
1425*a72cfb80SBram Moolenaar      'command Echo echo',
1426*a72cfb80SBram Moolenaar      'command Echo# comment',
1427*a72cfb80SBram Moolenaar      ], 'E182:')
1428*a72cfb80SBram Moolenaar
1429*a72cfb80SBram Moolenaar  CheckScriptSuccess([
1430*a72cfb80SBram Moolenaar      'vim9script',
1431*a72cfb80SBram Moolenaar      'function # comment',
1432*a72cfb80SBram Moolenaar      ])
1433*a72cfb80SBram Moolenaar  CheckScriptFailure([
1434*a72cfb80SBram Moolenaar      'vim9script',
1435*a72cfb80SBram Moolenaar      'function# comment',
1436*a72cfb80SBram Moolenaar      ], 'E129:')
1437*a72cfb80SBram Moolenaar  CheckScriptSuccess([
1438*a72cfb80SBram Moolenaar      'vim9script',
1439*a72cfb80SBram Moolenaar      'function CheckScriptSuccess # comment',
1440*a72cfb80SBram Moolenaar      ])
1441*a72cfb80SBram Moolenaar  CheckScriptFailure([
1442*a72cfb80SBram Moolenaar      'vim9script',
1443*a72cfb80SBram Moolenaar      'function CheckScriptSuccess# comment',
1444*a72cfb80SBram Moolenaar      ], 'E488:')
1445*a72cfb80SBram Moolenaar
1446*a72cfb80SBram Moolenaar  CheckScriptSuccess([
1447*a72cfb80SBram Moolenaar      'vim9script',
1448*a72cfb80SBram Moolenaar      'func DeleteMe()',
1449*a72cfb80SBram Moolenaar      'endfunc',
1450*a72cfb80SBram Moolenaar      'delfunction DeleteMe # comment',
1451*a72cfb80SBram Moolenaar      ])
1452*a72cfb80SBram Moolenaar  CheckScriptFailure([
1453*a72cfb80SBram Moolenaar      'vim9script',
1454*a72cfb80SBram Moolenaar      'func DeleteMe()',
1455*a72cfb80SBram Moolenaar      'endfunc',
1456*a72cfb80SBram Moolenaar      'delfunction DeleteMe# comment',
1457*a72cfb80SBram Moolenaar      ], 'E488:')
1458*a72cfb80SBram Moolenaar
1459*a72cfb80SBram Moolenaar  CheckScriptSuccess([
1460*a72cfb80SBram Moolenaar      'vim9script',
1461*a72cfb80SBram Moolenaar      'call execute("ls") # comment',
1462*a72cfb80SBram Moolenaar      ])
1463*a72cfb80SBram Moolenaar  CheckScriptFailure([
1464*a72cfb80SBram Moolenaar      'vim9script',
1465*a72cfb80SBram Moolenaar      'call execute("ls")# comment',
1466*a72cfb80SBram Moolenaar      ], 'E488:')
14672c5ed4e3SBram Moolenaarenddef
14682c5ed4e3SBram Moolenaar
14692c5ed4e3SBram Moolenaardef Test_vim9_comment_gui()
14702c5ed4e3SBram Moolenaar  CheckCanRunGui
14712c5ed4e3SBram Moolenaar
14722c5ed4e3SBram Moolenaar  CheckScriptFailure([
14732c5ed4e3SBram Moolenaar      'vim9script',
14742c5ed4e3SBram Moolenaar      'gui#comment'
14752c5ed4e3SBram Moolenaar      ], 'E499:')
14762c5ed4e3SBram Moolenaar  CheckScriptFailure([
14772c5ed4e3SBram Moolenaar      'vim9script',
14782c5ed4e3SBram Moolenaar      'gui -f#comment'
14792c5ed4e3SBram Moolenaar      ], 'E499:')
14807a092245SBram Moolenaarenddef
14817a092245SBram Moolenaar
1482a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled()
1483a26b9700SBram Moolenaar  au TabEnter *.vim let g:entered = 1
1484a26b9700SBram Moolenaar  au TabEnter *.x let g:entered = 2
1485a26b9700SBram Moolenaar
1486a26b9700SBram Moolenaar  edit test.vim
1487a26b9700SBram Moolenaar  doautocmd TabEnter #comment
1488a26b9700SBram Moolenaar  assert_equal(1, g:entered)
1489a26b9700SBram Moolenaar
1490a26b9700SBram Moolenaar  doautocmd TabEnter f.x
1491a26b9700SBram Moolenaar  assert_equal(2, g:entered)
1492a26b9700SBram Moolenaar
1493a26b9700SBram Moolenaar  g:entered = 0
1494a26b9700SBram Moolenaar  doautocmd TabEnter f.x #comment
1495a26b9700SBram Moolenaar  assert_equal(2, g:entered)
1496a26b9700SBram Moolenaar
1497a26b9700SBram Moolenaar  assert_fails('doautocmd Syntax#comment', 'E216:')
1498a26b9700SBram Moolenaar
1499a26b9700SBram Moolenaar  au! TabEnter
1500a26b9700SBram Moolenaar  unlet g:entered
1501d72c1bf0SBram Moolenaar
1502d72c1bf0SBram Moolenaar  CheckScriptSuccess([
1503d72c1bf0SBram Moolenaar      'vim9script',
1504d72c1bf0SBram Moolenaar      'let g:var = 123',
1505d72c1bf0SBram Moolenaar      'let w:var = 777',
1506d72c1bf0SBram Moolenaar      'unlet g:var w:var # something',
1507d72c1bf0SBram Moolenaar      ])
1508d72c1bf0SBram Moolenaar
1509d72c1bf0SBram Moolenaar  CheckScriptFailure([
1510d72c1bf0SBram Moolenaar      'vim9script',
1511d72c1bf0SBram Moolenaar      'let g:var = 123',
1512d72c1bf0SBram Moolenaar      'unlet g:var# comment',
1513d72c1bf0SBram Moolenaar      ], 'E108:')
1514d72c1bf0SBram Moolenaar
1515d72c1bf0SBram Moolenaar  CheckScriptFailure([
1516d72c1bf0SBram Moolenaar      'let g:var = 123',
1517d72c1bf0SBram Moolenaar      'unlet g:var # something',
1518d72c1bf0SBram Moolenaar      ], 'E488:')
1519faac4104SBram Moolenaar
1520faac4104SBram Moolenaar  CheckScriptSuccess([
1521faac4104SBram Moolenaar      'vim9script',
1522faac4104SBram Moolenaar      'if 1 # comment',
1523faac4104SBram Moolenaar      '  echo "yes"',
1524faac4104SBram Moolenaar      'elseif 2 #comment',
1525faac4104SBram Moolenaar      '  echo "no"',
1526faac4104SBram Moolenaar      'endif',
1527faac4104SBram Moolenaar      ])
1528faac4104SBram Moolenaar
1529faac4104SBram Moolenaar  CheckScriptFailure([
1530faac4104SBram Moolenaar      'vim9script',
1531faac4104SBram Moolenaar      'if 1# comment',
1532faac4104SBram Moolenaar      '  echo "yes"',
1533faac4104SBram Moolenaar      'endif',
1534faac4104SBram Moolenaar      ], 'E15:')
1535faac4104SBram Moolenaar
1536faac4104SBram Moolenaar  CheckScriptFailure([
1537faac4104SBram Moolenaar      'vim9script',
1538faac4104SBram Moolenaar      'if 0 # comment',
1539faac4104SBram Moolenaar      '  echo "yes"',
1540faac4104SBram Moolenaar      'elseif 2#comment',
1541faac4104SBram Moolenaar      '  echo "no"',
1542faac4104SBram Moolenaar      'endif',
1543faac4104SBram Moolenaar      ], 'E15:')
1544faac4104SBram Moolenaar
1545faac4104SBram Moolenaar  CheckScriptSuccess([
1546faac4104SBram Moolenaar      'vim9script',
1547faac4104SBram Moolenaar      'let # comment',
1548faac4104SBram Moolenaar      ])
1549faac4104SBram Moolenaar
1550faac4104SBram Moolenaar  CheckScriptFailure([
1551faac4104SBram Moolenaar      'vim9script',
1552faac4104SBram Moolenaar      'let# comment',
1553faac4104SBram Moolenaar      ], 'E121:')
1554faac4104SBram Moolenaar
1555faac4104SBram Moolenaar  CheckScriptSuccess([
1556faac4104SBram Moolenaar      'vim9script',
1557faac4104SBram Moolenaar      'let v:version # comment',
1558faac4104SBram Moolenaar      ])
1559faac4104SBram Moolenaar
1560faac4104SBram Moolenaar  CheckScriptFailure([
1561faac4104SBram Moolenaar      'vim9script',
1562faac4104SBram Moolenaar      'let v:version# comment',
1563faac4104SBram Moolenaar      ], 'E121:')
1564faac4104SBram Moolenaar
1565faac4104SBram Moolenaar  CheckScriptSuccess([
1566faac4104SBram Moolenaar      'vim9script',
1567faac4104SBram Moolenaar      'new'
1568faac4104SBram Moolenaar      'call setline(1, ["# define pat", "last"])',
1569faac4104SBram Moolenaar      '$',
1570faac4104SBram Moolenaar      'dsearch /pat/ #comment',
1571faac4104SBram Moolenaar      'bwipe!',
1572faac4104SBram Moolenaar      ])
1573faac4104SBram Moolenaar
1574faac4104SBram Moolenaar  CheckScriptFailure([
1575faac4104SBram Moolenaar      'vim9script',
1576faac4104SBram Moolenaar      'new'
1577faac4104SBram Moolenaar      'call setline(1, ["# define pat", "last"])',
1578faac4104SBram Moolenaar      '$',
1579faac4104SBram Moolenaar      'dsearch /pat/#comment',
1580faac4104SBram Moolenaar      'bwipe!',
1581faac4104SBram Moolenaar      ], 'E488:')
1582a26b9700SBram Moolenaarenddef
1583a26b9700SBram Moolenaar
1584585fea7bSBram Moolenaar" Keep this last, it messes up highlighting.
1585585fea7bSBram Moolenaardef Test_substitute_cmd()
1586585fea7bSBram Moolenaar  new
1587585fea7bSBram Moolenaar  setline(1, 'something')
1588585fea7bSBram Moolenaar  :substitute(some(other(
1589585fea7bSBram Moolenaar  assert_equal('otherthing', getline(1))
1590585fea7bSBram Moolenaar  bwipe!
1591585fea7bSBram Moolenaar
1592585fea7bSBram Moolenaar  " also when the context is Vim9 script
1593585fea7bSBram Moolenaar  let lines =<< trim END
1594585fea7bSBram Moolenaar    vim9script
1595585fea7bSBram Moolenaar    new
1596585fea7bSBram Moolenaar    setline(1, 'something')
1597585fea7bSBram Moolenaar    :substitute(some(other(
1598585fea7bSBram Moolenaar    assert_equal('otherthing', getline(1))
1599585fea7bSBram Moolenaar    bwipe!
1600585fea7bSBram Moolenaar  END
1601585fea7bSBram Moolenaar  writefile(lines, 'Xvim9lines')
1602585fea7bSBram Moolenaar  source Xvim9lines
1603585fea7bSBram Moolenaar
1604585fea7bSBram Moolenaar  delete('Xvim9lines')
1605585fea7bSBram Moolenaarenddef
1606585fea7bSBram Moolenaar
16078a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
1608