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
57*f93c7feaSBram Moolenaar  call CheckDefFailure(['let x:string'], 'E1069:')
58*f93c7feaSBram Moolenaar  call CheckDefFailure(['let x:string = "x"'], 'E1069:')
59*f93c7feaSBram Moolenaar  call CheckDefFailure(['let a:string = "x"'], 'E1082:')
60*f93c7feaSBram Moolenaar
619be61bbbSBram Moolenaar  let a: number = 6
629be61bbbSBram Moolenaar  assert_equal(6, a)
639be61bbbSBram Moolenaar
6442a480bfSBram Moolenaar  if has('channel')
6542a480bfSBram Moolenaar    let chan1: channel
66fbdd08edSBram Moolenaar    let job1: job
67f51cb4e0SBram Moolenaar    let job2: job = job_start('willfail')
6842a480bfSBram Moolenaar  endif
69fbdd08edSBram Moolenaar  if has('float')
70fbdd08edSBram Moolenaar    let float1: float = 3.4
71fbdd08edSBram Moolenaar  endif
725deeb3f1SBram Moolenaar  let Funky1: func
735deeb3f1SBram Moolenaar  let Funky2: func = function('len')
745deeb3f1SBram Moolenaar  let Party2: func = funcref('Test_syntax')
7542a480bfSBram Moolenaar
76cb711abfSBram Moolenaar  # type becomes list<any>
7761a6d4e4SBram Moolenaar  let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
78cb711abfSBram Moolenaar  # type becomes dict<any>
795381c7a1SBram Moolenaar  let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
8061a6d4e4SBram Moolenaar
81401d9ffbSBram Moolenaar  g:newvar = 'new'
82401d9ffbSBram Moolenaar  assert_equal('new', g:newvar)
83401d9ffbSBram Moolenaar
84401d9ffbSBram Moolenaar  assert_equal('yes', g:existing)
85401d9ffbSBram Moolenaar  g:existing = 'no'
86401d9ffbSBram Moolenaar  assert_equal('no', g:existing)
87401d9ffbSBram Moolenaar
88b283a8a6SBram Moolenaar  v:char = 'abc'
896e587dcbSBram Moolenaar  assert_equal('abc', v:char)
90b283a8a6SBram Moolenaar
91b283a8a6SBram Moolenaar  $ENVVAR = 'foobar'
926e587dcbSBram Moolenaar  assert_equal('foobar', $ENVVAR)
93b283a8a6SBram Moolenaar  $ENVVAR = ''
946e587dcbSBram Moolenaar
95fd1823e0SBram Moolenaar  s:appendToMe ..= 'yyy'
96fd1823e0SBram Moolenaar  assert_equal('xxxyyy', s:appendToMe)
97fd1823e0SBram Moolenaar  s:addToMe += 222
98fd1823e0SBram Moolenaar  assert_equal(333, s:addToMe)
990bbf722aSBram Moolenaar  s:newVar = 'new'
1000bbf722aSBram Moolenaar  assert_equal('new', s:newVar)
101a8c17704SBram Moolenaar
102a8c17704SBram Moolenaar  set ts=7
103a8c17704SBram Moolenaar  &ts += 1
104a8c17704SBram Moolenaar  assert_equal(8, &ts)
10580c34ca3SBram Moolenaar  &ts -= 3
10680c34ca3SBram Moolenaar  assert_equal(5, &ts)
10780c34ca3SBram Moolenaar  &ts *= 2
10880c34ca3SBram Moolenaar  assert_equal(10, &ts)
10980c34ca3SBram Moolenaar  &ts /= 3
11080c34ca3SBram Moolenaar  assert_equal(3, &ts)
11180c34ca3SBram Moolenaar  set ts=10
11280c34ca3SBram Moolenaar  &ts %= 4
11380c34ca3SBram Moolenaar  assert_equal(2, &ts)
114a8c17704SBram Moolenaar  call CheckDefFailure(['&notex += 3'], 'E113:')
115a8c17704SBram Moolenaar  call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
116a8c17704SBram Moolenaar  call CheckDefFailure(['&path += 3'], 'E1013:')
117cb711abfSBram Moolenaar  # test freeing ISN_STOREOPT
118585fea7bSBram Moolenaar  call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
11980c34ca3SBram Moolenaar  &ts = 8
120a8c17704SBram Moolenaar
121a8c17704SBram Moolenaar  g:inc_counter += 1
122a8c17704SBram Moolenaar  assert_equal(2, g:inc_counter)
123a8c17704SBram Moolenaar
124a8c17704SBram Moolenaar  $SOME_ENV_VAR ..= 'more'
125a8c17704SBram Moolenaar  assert_equal('somemore', $SOME_ENV_VAR)
126a8c17704SBram Moolenaar  call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:')
127a8c17704SBram Moolenaar  call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:')
128a8c17704SBram Moolenaar
129a8c17704SBram Moolenaar  @a = 'areg'
130a8c17704SBram Moolenaar  @a ..= 'add'
131a8c17704SBram Moolenaar  assert_equal('aregadd', @a)
132a8c17704SBram Moolenaar  call CheckDefFailure(['@a += "more"'], 'E1013:')
133a8c17704SBram Moolenaar  call CheckDefFailure(['@a += 123'], 'E1013:')
134e69f6d04SBram Moolenaar
135e69f6d04SBram Moolenaar  v:errmsg = 'none'
136e69f6d04SBram Moolenaar  v:errmsg ..= 'again'
137e69f6d04SBram Moolenaar  assert_equal('noneagain', v:errmsg)
138e69f6d04SBram Moolenaar  call CheckDefFailure(['v:errmsg += "more"'], 'E1013:')
139e69f6d04SBram Moolenaar  call CheckDefFailure(['v:errmsg += 123'], 'E1013:')
1405deeb3f1SBram Moolenaarenddef
1415deeb3f1SBram Moolenaar
142d3aac291SBram Moolenaardef Test_assignment_local()
143d3aac291SBram Moolenaar  " Test in a separated file in order not to the current buffer/window/tab is
144d3aac291SBram Moolenaar  " changed.
145d3aac291SBram Moolenaar  let script_lines: list<string> =<< trim END
146d3aac291SBram Moolenaar    let b:existing = 'yes'
147d3aac291SBram Moolenaar    let w:existing = 'yes'
148d3aac291SBram Moolenaar    let t:existing = 'yes'
149d3aac291SBram Moolenaar
150d3aac291SBram Moolenaar    def Test_assignment_local_internal()
151d3aac291SBram Moolenaar      b:newvar = 'new'
152d3aac291SBram Moolenaar      assert_equal('new', b:newvar)
153d3aac291SBram Moolenaar      assert_equal('yes', b:existing)
154d3aac291SBram Moolenaar      b:existing = 'no'
155d3aac291SBram Moolenaar      assert_equal('no', b:existing)
156d3aac291SBram Moolenaar
157d3aac291SBram Moolenaar      w:newvar = 'new'
158d3aac291SBram Moolenaar      assert_equal('new', w:newvar)
159d3aac291SBram Moolenaar      assert_equal('yes', w:existing)
160d3aac291SBram Moolenaar      w:existing = 'no'
161d3aac291SBram Moolenaar      assert_equal('no', w:existing)
162d3aac291SBram Moolenaar
163d3aac291SBram Moolenaar      t:newvar = 'new'
164d3aac291SBram Moolenaar      assert_equal('new', t:newvar)
165d3aac291SBram Moolenaar      assert_equal('yes', t:existing)
166d3aac291SBram Moolenaar      t:existing = 'no'
167d3aac291SBram Moolenaar      assert_equal('no', t:existing)
168d3aac291SBram Moolenaar    enddef
169d3aac291SBram Moolenaar    call Test_assignment_local_internal()
170d3aac291SBram Moolenaar  END
171d3aac291SBram Moolenaar  call CheckScriptSuccess(script_lines)
172d3aac291SBram Moolenaarenddef
173d3aac291SBram Moolenaar
1745deeb3f1SBram Moolenaardef Test_assignment_default()
175e69f6d04SBram Moolenaar
176cb711abfSBram Moolenaar  # Test default values.
177e69f6d04SBram Moolenaar  let thebool: bool
178e69f6d04SBram Moolenaar  assert_equal(v:false, thebool)
179e69f6d04SBram Moolenaar
180e69f6d04SBram Moolenaar  let thenumber: number
181e69f6d04SBram Moolenaar  assert_equal(0, thenumber)
182e69f6d04SBram Moolenaar
183e69f6d04SBram Moolenaar  if has('float')
184e69f6d04SBram Moolenaar    let thefloat: float
185e69f6d04SBram Moolenaar    assert_equal(0.0, thefloat)
186e69f6d04SBram Moolenaar  endif
187e69f6d04SBram Moolenaar
188e69f6d04SBram Moolenaar  let thestring: string
189e69f6d04SBram Moolenaar  assert_equal('', thestring)
190e69f6d04SBram Moolenaar
191e69f6d04SBram Moolenaar  let theblob: blob
192e69f6d04SBram Moolenaar  assert_equal(0z, theblob)
193e69f6d04SBram Moolenaar
1945deeb3f1SBram Moolenaar  let Thefunc: func
1955deeb3f1SBram Moolenaar  assert_equal(test_null_function(), Thefunc)
196e69f6d04SBram Moolenaar
197e69f6d04SBram Moolenaar  let thelist: list<any>
198e69f6d04SBram Moolenaar  assert_equal([], thelist)
199e69f6d04SBram Moolenaar
200e69f6d04SBram Moolenaar  let thedict: dict<any>
201e69f6d04SBram Moolenaar  assert_equal({}, thedict)
202e69f6d04SBram Moolenaar
2032c869deeSBram Moolenaar  if has('channel')
204e69f6d04SBram Moolenaar    let thejob: job
205e69f6d04SBram Moolenaar    assert_equal(test_null_job(), thejob)
206e69f6d04SBram Moolenaar
207e69f6d04SBram Moolenaar    let thechannel: channel
208e69f6d04SBram Moolenaar    assert_equal(test_null_channel(), thechannel)
2092c869deeSBram Moolenaar  endif
210585fea7bSBram Moolenaar
211585fea7bSBram Moolenaar  let nr = 1234 | nr = 5678
212585fea7bSBram Moolenaar  assert_equal(5678, nr)
2138a7d6542SBram Moolenaarenddef
2148a7d6542SBram Moolenaar
215cab27678SBram Moolenaardef Mess(): string
216cab27678SBram Moolenaar  v:foldstart = 123
217cab27678SBram Moolenaar  return 'xxx'
218cab27678SBram Moolenaarenddef
219cab27678SBram Moolenaar
220d72c1bf0SBram Moolenaardef Test_assignment_failure()
2218a7d6542SBram Moolenaar  call CheckDefFailure(['let var=234'], 'E1004:')
2228a7d6542SBram Moolenaar  call CheckDefFailure(['let var =234'], 'E1004:')
2238a7d6542SBram Moolenaar  call CheckDefFailure(['let var= 234'], 'E1004:')
2248a7d6542SBram Moolenaar
2258a7d6542SBram Moolenaar  call CheckDefFailure(['let true = 1'], 'E1034:')
2268a7d6542SBram Moolenaar  call CheckDefFailure(['let false = 1'], 'E1034:')
2278a7d6542SBram Moolenaar
2289be61bbbSBram Moolenaar  call CheckDefFailure(['let [a; b; c] = g:list'], 'E452:')
2299be61bbbSBram Moolenaar
230e69f6d04SBram Moolenaar  call CheckDefFailure(['let somevar'], "E1022:")
2319be61bbbSBram Moolenaar  call CheckDefFailure(['let &option'], 'E1052:')
2329be61bbbSBram Moolenaar  call CheckDefFailure(['&g:option = 5'], 'E113:')
2339be61bbbSBram Moolenaar
2349be61bbbSBram Moolenaar  call CheckDefFailure(['let $VAR = 5'], 'E1065:')
2359be61bbbSBram Moolenaar
2369be61bbbSBram Moolenaar  call CheckDefFailure(['let @~ = 5'], 'E354:')
2379be61bbbSBram Moolenaar  call CheckDefFailure(['let @a = 5'], 'E1066:')
2389be61bbbSBram Moolenaar
2399be61bbbSBram Moolenaar  call CheckDefFailure(['let g:var = 5'], 'E1016:')
240d3aac291SBram Moolenaar  call CheckDefFailure(['let w:var = 5'], 'E1079:')
241d3aac291SBram Moolenaar  call CheckDefFailure(['let b:var = 5'], 'E1078:')
242d3aac291SBram Moolenaar  call CheckDefFailure(['let t:var = 5'], 'E1080:')
2439be61bbbSBram Moolenaar
2449be61bbbSBram Moolenaar  call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
2459be61bbbSBram Moolenaar  call CheckDefFailure(['let xnr += 4'], 'E1020:')
2469be61bbbSBram Moolenaar
24733fa29cfSBram Moolenaar  call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef'], 'E1050:')
24833fa29cfSBram Moolenaar
2498a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>')
2508a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
2518a7d6542SBram Moolenaar
2528a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
2538a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
2548a7d6542SBram Moolenaar
2558a7d6542SBram Moolenaar  call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:')
2568a7d6542SBram Moolenaar  call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void')
25742a480bfSBram Moolenaar
258d77a8525SBram Moolenaar  call CheckDefFailure(['let var: dict <number>'], 'E1068:')
25942a480bfSBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
260cab27678SBram Moolenaar
261cab27678SBram Moolenaar  call assert_fails('s/^/\=Mess()/n', 'E794:')
262cab27678SBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
263d72c1bf0SBram Moolenaarenddef
264d72c1bf0SBram Moolenaar
265d72c1bf0SBram Moolenaardef Test_unlet()
266d72c1bf0SBram Moolenaar  g:somevar = 'yes'
267d72c1bf0SBram Moolenaar  assert_true(exists('g:somevar'))
268d72c1bf0SBram Moolenaar  unlet g:somevar
269d72c1bf0SBram Moolenaar  assert_false(exists('g:somevar'))
270d72c1bf0SBram Moolenaar  unlet! g:somevar
271d72c1bf0SBram Moolenaar
272d72c1bf0SBram Moolenaar  call CheckScriptFailure([
273d72c1bf0SBram Moolenaar        'vim9script',
274d72c1bf0SBram Moolenaar        'let svar = 123',
275d72c1bf0SBram Moolenaar        'unlet svar',
276d72c1bf0SBram Moolenaar        ], 'E1081:')
277d72c1bf0SBram Moolenaar  call CheckScriptFailure([
278d72c1bf0SBram Moolenaar        'vim9script',
279d72c1bf0SBram Moolenaar        'let svar = 123',
280d72c1bf0SBram Moolenaar        'unlet s:svar',
281d72c1bf0SBram Moolenaar        ], 'E1081:')
282d72c1bf0SBram Moolenaar  call CheckScriptFailure([
283d72c1bf0SBram Moolenaar        'vim9script',
284d72c1bf0SBram Moolenaar        'let svar = 123',
285d72c1bf0SBram Moolenaar        'def Func()',
286d72c1bf0SBram Moolenaar        '  unlet svar',
287d72c1bf0SBram Moolenaar        'enddef',
288d72c1bf0SBram Moolenaar        ], 'E1081:')
289d72c1bf0SBram Moolenaar  call CheckScriptFailure([
290d72c1bf0SBram Moolenaar        'vim9script',
291d72c1bf0SBram Moolenaar        'let svar = 123',
292d72c1bf0SBram Moolenaar        'def Func()',
293d72c1bf0SBram Moolenaar        '  unlet s:svar',
294d72c1bf0SBram Moolenaar        'enddef',
295d72c1bf0SBram Moolenaar        ], 'E1081:')
2967bdaea6eSBram Moolenaar
2977bdaea6eSBram Moolenaar  $ENVVAR = 'foobar'
2987bdaea6eSBram Moolenaar  assert_equal('foobar', $ENVVAR)
2997bdaea6eSBram Moolenaar  unlet $ENVVAR
3007bdaea6eSBram Moolenaar  assert_equal('', $ENVVAR)
301d72c1bf0SBram Moolenaarenddef
302599c89c8SBram Moolenaar
303599c89c8SBram Moolenaarfunc Test_wrong_type()
304599c89c8SBram Moolenaar  call CheckDefFailure(['let var: list<nothing>'], 'E1010:')
305599c89c8SBram Moolenaar  call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
306599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<nothing>'], 'E1010:')
307599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:')
308599c89c8SBram Moolenaar
309599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
310599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<list<number>'], 'E1009:')
31142a480bfSBram Moolenaar
31242a480bfSBram Moolenaar  call CheckDefFailure(['let var: ally'], 'E1010:')
31342a480bfSBram Moolenaar  call CheckDefFailure(['let var: bram'], 'E1010:')
31442a480bfSBram Moolenaar  call CheckDefFailure(['let var: cathy'], 'E1010:')
31542a480bfSBram Moolenaar  call CheckDefFailure(['let var: dom'], 'E1010:')
31642a480bfSBram Moolenaar  call CheckDefFailure(['let var: freddy'], 'E1010:')
31742a480bfSBram Moolenaar  call CheckDefFailure(['let var: john'], 'E1010:')
31842a480bfSBram Moolenaar  call CheckDefFailure(['let var: larry'], 'E1010:')
31942a480bfSBram Moolenaar  call CheckDefFailure(['let var: ned'], 'E1010:')
32042a480bfSBram Moolenaar  call CheckDefFailure(['let var: pam'], 'E1010:')
32142a480bfSBram Moolenaar  call CheckDefFailure(['let var: sam'], 'E1010:')
32242a480bfSBram Moolenaar  call CheckDefFailure(['let var: vim'], 'E1010:')
3238a7d6542SBram Moolenaarendfunc
3248a7d6542SBram Moolenaar
3258a7d6542SBram Moolenaarfunc Test_const()
3268a7d6542SBram Moolenaar  call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:')
3278a7d6542SBram Moolenaar  call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:')
3288a7d6542SBram Moolenaar  call CheckDefFailure(['const two'], 'E1021:')
3299be61bbbSBram Moolenaar  call CheckDefFailure(['const &option'], 'E996:')
3308a7d6542SBram Moolenaarendfunc
3318a7d6542SBram Moolenaar
3328a7d6542SBram Moolenaardef Test_block()
3338a7d6542SBram Moolenaar  let outer = 1
3348a7d6542SBram Moolenaar  {
3358a7d6542SBram Moolenaar    let inner = 2
3368a7d6542SBram Moolenaar    assert_equal(1, outer)
3378a7d6542SBram Moolenaar    assert_equal(2, inner)
3388a7d6542SBram Moolenaar  }
3398a7d6542SBram Moolenaar  assert_equal(1, outer)
3408a7d6542SBram Moolenaarenddef
3418a7d6542SBram Moolenaar
3428a7d6542SBram Moolenaarfunc Test_block_failure()
3438a7d6542SBram Moolenaar  call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
344585fea7bSBram Moolenaar  call CheckDefFailure(['}'], 'E1025:')
345585fea7bSBram Moolenaar  call CheckDefFailure(['{', 'echo 1'], 'E1026:')
3468a7d6542SBram Moolenaarendfunc
3478a7d6542SBram Moolenaar
348585fea7bSBram Moolenaardef Test_cmd_modifier()
349585fea7bSBram Moolenaar  tab echo '0'
350585fea7bSBram Moolenaar  call CheckDefFailure(['5tab echo 3'], 'E16:')
351585fea7bSBram Moolenaarenddef
352585fea7bSBram Moolenaar
3538a7d6542SBram Moolenaardef Test_try_catch()
3548a7d6542SBram Moolenaar  let l = []
3557a092245SBram Moolenaar  try # comment
3568a7d6542SBram Moolenaar    add(l, '1')
3578a7d6542SBram Moolenaar    throw 'wrong'
3588a7d6542SBram Moolenaar    add(l, '2')
3597a092245SBram Moolenaar  catch # comment
3608a7d6542SBram Moolenaar    add(l, v:exception)
3617a092245SBram Moolenaar  finally # comment
3628a7d6542SBram Moolenaar    add(l, '3')
3637a092245SBram Moolenaar  endtry # comment
3648a7d6542SBram Moolenaar  assert_equal(['1', 'wrong', '3'], l)
3658a7d6542SBram Moolenaarenddef
3668a7d6542SBram Moolenaar
367257cc5eeSBram Moolenaardef ThrowFromDef()
368a72cfb80SBram Moolenaar  throw "getout" # comment
369257cc5eeSBram Moolenaarenddef
370257cc5eeSBram Moolenaar
371257cc5eeSBram Moolenaarfunc CatchInFunc()
372257cc5eeSBram Moolenaar  try
373257cc5eeSBram Moolenaar    call ThrowFromDef()
374257cc5eeSBram Moolenaar  catch
375257cc5eeSBram Moolenaar    let g:thrown_func = v:exception
376257cc5eeSBram Moolenaar  endtry
377257cc5eeSBram Moolenaarendfunc
378257cc5eeSBram Moolenaar
379257cc5eeSBram Moolenaardef CatchInDef()
380257cc5eeSBram Moolenaar  try
381257cc5eeSBram Moolenaar    ThrowFromDef()
382257cc5eeSBram Moolenaar  catch
383257cc5eeSBram Moolenaar    g:thrown_def = v:exception
384257cc5eeSBram Moolenaar  endtry
385257cc5eeSBram Moolenaarenddef
386257cc5eeSBram Moolenaar
387f575adffSBram Moolenaardef ReturnFinally(): string
388f575adffSBram Moolenaar  try
389f575adffSBram Moolenaar    return 'intry'
390f575adffSBram Moolenaar  finally
391f575adffSBram Moolenaar    g:in_finally = 'finally'
392f575adffSBram Moolenaar  endtry
393f575adffSBram Moolenaar  return 'end'
394f575adffSBram Moolenaarenddef
395f575adffSBram Moolenaar
396257cc5eeSBram Moolenaardef Test_try_catch_nested()
397257cc5eeSBram Moolenaar  CatchInFunc()
398257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_func)
399257cc5eeSBram Moolenaar
400257cc5eeSBram Moolenaar  CatchInDef()
401257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_def)
402f575adffSBram Moolenaar
403f575adffSBram Moolenaar  assert_equal('intry', ReturnFinally())
404f575adffSBram Moolenaar  assert_equal('finally', g:in_finally)
405f575adffSBram Moolenaarenddef
406f575adffSBram Moolenaar
407f575adffSBram Moolenaardef Test_try_catch_match()
408f575adffSBram Moolenaar  let seq = 'a'
409f575adffSBram Moolenaar  try
410f575adffSBram Moolenaar    throw 'something'
411f575adffSBram Moolenaar  catch /nothing/
412f575adffSBram Moolenaar    seq ..= 'x'
413f575adffSBram Moolenaar  catch /some/
414f575adffSBram Moolenaar    seq ..= 'b'
415f575adffSBram Moolenaar  catch /asdf/
416f575adffSBram Moolenaar    seq ..= 'x'
417e8c4abbbSBram Moolenaar  catch ?a\?sdf?
418e8c4abbbSBram Moolenaar    seq ..= 'y'
419f575adffSBram Moolenaar  finally
420f575adffSBram Moolenaar    seq ..= 'c'
421f575adffSBram Moolenaar  endtry
422f575adffSBram Moolenaar  assert_equal('abc', seq)
423257cc5eeSBram Moolenaarenddef
424257cc5eeSBram Moolenaar
425e8c4abbbSBram Moolenaardef Test_try_catch_fails()
426e8c4abbbSBram Moolenaar  call CheckDefFailure(['catch'], 'E603:')
427e8c4abbbSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:')
428e8c4abbbSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:')
429585fea7bSBram Moolenaar  call CheckDefFailure(['finally'], 'E606:')
430585fea7bSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:')
431585fea7bSBram Moolenaar  call CheckDefFailure(['endtry'], 'E602:')
432585fea7bSBram Moolenaar  call CheckDefFailure(['while 1', 'endtry'], 'E170:')
433585fea7bSBram Moolenaar  call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
434585fea7bSBram Moolenaar  call CheckDefFailure(['if 2', 'endtry'], 'E171:')
435585fea7bSBram Moolenaar  call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
436585fea7bSBram Moolenaar
437a72cfb80SBram Moolenaar  call CheckDefFailure(['throw'], 'E1015:')
438585fea7bSBram Moolenaar  call CheckDefFailure(['throw xxx'], 'E1001:')
439e8c4abbbSBram Moolenaarenddef
440e8c4abbbSBram Moolenaar
4418a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END
4428a7d6542SBram Moolenaar  vim9script
4438a7d6542SBram Moolenaar  let name: string = 'bob'
4448a7d6542SBram Moolenaar  def Concat(arg: string): string
4458a7d6542SBram Moolenaar    return name .. arg
4468a7d6542SBram Moolenaar  enddef
4478a7d6542SBram Moolenaar  let g:result = Concat('bie')
4488a7d6542SBram Moolenaar  let g:localname = name
4498a7d6542SBram Moolenaar
4508a7d6542SBram Moolenaar  export const CONST = 1234
4518a7d6542SBram Moolenaar  export let exported = 9876
4526e587dcbSBram Moolenaar  export let exp_name = 'John'
4538a7d6542SBram Moolenaar  export def Exported(): string
4548a7d6542SBram Moolenaar    return 'Exported'
4558a7d6542SBram Moolenaar  enddef
4568a7d6542SBram MoolenaarEND
4578a7d6542SBram Moolenaar
4585269bd2aSBram Moolenaardef Test_vim9_import_export()
4598a7d6542SBram Moolenaar  let import_script_lines =<< trim END
4608a7d6542SBram Moolenaar    vim9script
4618a7d6542SBram Moolenaar    import {exported, Exported} from './Xexport.vim'
4628a7d6542SBram Moolenaar    g:imported = exported
4636e587dcbSBram Moolenaar    exported += 3
4646e587dcbSBram Moolenaar    g:imported_added = exported
4658a7d6542SBram Moolenaar    g:imported_func = Exported()
4666e587dcbSBram Moolenaar
4676e587dcbSBram Moolenaar    import {exp_name} from './Xexport.vim'
4686e587dcbSBram Moolenaar    g:imported_name = exp_name
4696e587dcbSBram Moolenaar    exp_name ..= ' Doe'
4706e587dcbSBram Moolenaar    g:imported_name_appended = exp_name
4715381c7a1SBram Moolenaar    g:imported_later = exported
4728a7d6542SBram Moolenaar  END
4738a7d6542SBram Moolenaar
4748a7d6542SBram Moolenaar  writefile(import_script_lines, 'Ximport.vim')
4758a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport.vim')
4768a7d6542SBram Moolenaar
4778a7d6542SBram Moolenaar  source Ximport.vim
4788a7d6542SBram Moolenaar
4798a7d6542SBram Moolenaar  assert_equal('bobbie', g:result)
4808a7d6542SBram Moolenaar  assert_equal('bob', g:localname)
4818a7d6542SBram Moolenaar  assert_equal(9876, g:imported)
4826e587dcbSBram Moolenaar  assert_equal(9879, g:imported_added)
4835381c7a1SBram Moolenaar  assert_equal(9879, g:imported_later)
4848a7d6542SBram Moolenaar  assert_equal('Exported', g:imported_func)
4856e587dcbSBram Moolenaar  assert_equal('John', g:imported_name)
4866e587dcbSBram Moolenaar  assert_equal('John Doe', g:imported_name_appended)
4878a7d6542SBram Moolenaar  assert_false(exists('g:name'))
4888a7d6542SBram Moolenaar
4898a7d6542SBram Moolenaar  unlet g:result
4908a7d6542SBram Moolenaar  unlet g:localname
4918a7d6542SBram Moolenaar  unlet g:imported
4926e587dcbSBram Moolenaar  unlet g:imported_added
4935381c7a1SBram Moolenaar  unlet g:imported_later
4948a7d6542SBram Moolenaar  unlet g:imported_func
4956e587dcbSBram Moolenaar  unlet g:imported_name g:imported_name_appended
4968a7d6542SBram Moolenaar  delete('Ximport.vim')
497f2d5c240SBram Moolenaar
4985381c7a1SBram Moolenaar  let import_in_def_lines =<< trim END
4995381c7a1SBram Moolenaar    vim9script
5005381c7a1SBram Moolenaar    def ImportInDef()
5015381c7a1SBram Moolenaar      import exported from './Xexport.vim'
5025381c7a1SBram Moolenaar      g:imported = exported
5035381c7a1SBram Moolenaar      exported += 7
5045381c7a1SBram Moolenaar      g:imported_added = exported
5055381c7a1SBram Moolenaar    enddef
5065381c7a1SBram Moolenaar    ImportInDef()
5075381c7a1SBram Moolenaar  END
5085381c7a1SBram Moolenaar  writefile(import_in_def_lines, 'Ximport2.vim')
5095381c7a1SBram Moolenaar  source Ximport2.vim
5105381c7a1SBram Moolenaar  " TODO: this should be 9879
5115381c7a1SBram Moolenaar  assert_equal(9876, g:imported)
5125381c7a1SBram Moolenaar  assert_equal(9883, g:imported_added)
5135381c7a1SBram Moolenaar  unlet g:imported
5145381c7a1SBram Moolenaar  unlet g:imported_added
5155381c7a1SBram Moolenaar  delete('Ximport2.vim')
5165381c7a1SBram Moolenaar
517f2d5c240SBram Moolenaar  let import_star_as_lines =<< trim END
518f2d5c240SBram Moolenaar    vim9script
519f2d5c240SBram Moolenaar    import * as Export from './Xexport.vim'
520f2d5c240SBram Moolenaar    def UseExport()
521f2d5c240SBram Moolenaar      g:imported = Export.exported
522f2d5c240SBram Moolenaar    enddef
523f2d5c240SBram Moolenaar    UseExport()
524f2d5c240SBram Moolenaar  END
525f2d5c240SBram Moolenaar  writefile(import_star_as_lines, 'Ximport.vim')
526f2d5c240SBram Moolenaar  source Ximport.vim
5275381c7a1SBram Moolenaar  assert_equal(9883, g:imported)
528f2d5c240SBram Moolenaar
529599c89c8SBram Moolenaar  let import_star_as_lines_no_dot =<< trim END
530599c89c8SBram Moolenaar    vim9script
531599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
532599c89c8SBram Moolenaar    def Func()
533599c89c8SBram Moolenaar      let dummy = 1
534599c89c8SBram Moolenaar      let imported = Export + dummy
535599c89c8SBram Moolenaar    enddef
536599c89c8SBram Moolenaar  END
537599c89c8SBram Moolenaar  writefile(import_star_as_lines_no_dot, 'Ximport.vim')
538599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1060:')
539599c89c8SBram Moolenaar
540599c89c8SBram Moolenaar  let import_star_as_lines_dot_space =<< trim END
541599c89c8SBram Moolenaar    vim9script
542599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
543599c89c8SBram Moolenaar    def Func()
544599c89c8SBram Moolenaar      let imported = Export . exported
545599c89c8SBram Moolenaar    enddef
546599c89c8SBram Moolenaar  END
547599c89c8SBram Moolenaar  writefile(import_star_as_lines_dot_space, 'Ximport.vim')
548599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1074:')
549599c89c8SBram Moolenaar
550599c89c8SBram Moolenaar  let import_star_as_lines_missing_name =<< trim END
551599c89c8SBram Moolenaar    vim9script
552599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
553599c89c8SBram Moolenaar    def Func()
554599c89c8SBram Moolenaar      let imported = Export.
555599c89c8SBram Moolenaar    enddef
556599c89c8SBram Moolenaar  END
557599c89c8SBram Moolenaar  writefile(import_star_as_lines_missing_name, 'Ximport.vim')
558599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
559599c89c8SBram Moolenaar
560f2d5c240SBram Moolenaar  let import_star_lines =<< trim END
561f2d5c240SBram Moolenaar    vim9script
562f2d5c240SBram Moolenaar    import * from './Xexport.vim'
563f2d5c240SBram Moolenaar    g:imported = exported
564f2d5c240SBram Moolenaar  END
565f2d5c240SBram Moolenaar  writefile(import_star_lines, 'Ximport.vim')
566f2d5c240SBram Moolenaar  assert_fails('source Ximport.vim', 'E1045:')
567f2d5c240SBram Moolenaar
568fa29c8abSBram Moolenaar  " try to import something that exists but is not exported
569fa29c8abSBram Moolenaar  let import_not_exported_lines =<< trim END
570fa29c8abSBram Moolenaar    vim9script
571fa29c8abSBram Moolenaar    import name from './Xexport.vim'
572fa29c8abSBram Moolenaar  END
573fa29c8abSBram Moolenaar  writefile(import_not_exported_lines, 'Ximport.vim')
574fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1049:')
575fa29c8abSBram Moolenaar
5765269bd2aSBram Moolenaar  " try to import something that is already defined
5775269bd2aSBram Moolenaar  let import_already_defined =<< trim END
5785269bd2aSBram Moolenaar    vim9script
5795269bd2aSBram Moolenaar    let exported = 'something'
5805269bd2aSBram Moolenaar    import exported from './Xexport.vim'
5815269bd2aSBram Moolenaar  END
5825269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5835269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5845269bd2aSBram Moolenaar
5855269bd2aSBram Moolenaar  " try to import something that is already defined
5865269bd2aSBram Moolenaar  import_already_defined =<< trim END
5875269bd2aSBram Moolenaar    vim9script
5885269bd2aSBram Moolenaar    let exported = 'something'
5895269bd2aSBram Moolenaar    import * as exported from './Xexport.vim'
5905269bd2aSBram Moolenaar  END
5915269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5925269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5935269bd2aSBram Moolenaar
5945269bd2aSBram Moolenaar  " try to import something that is already defined
5955269bd2aSBram Moolenaar  import_already_defined =<< trim END
5965269bd2aSBram Moolenaar    vim9script
5975269bd2aSBram Moolenaar    let exported = 'something'
5985269bd2aSBram Moolenaar    import {exported} from './Xexport.vim'
5995269bd2aSBram Moolenaar  END
6005269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
6015269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
6025269bd2aSBram Moolenaar
603fa29c8abSBram Moolenaar  " import a very long name, requires making a copy
604fa29c8abSBram Moolenaar  let import_long_name_lines =<< trim END
605fa29c8abSBram Moolenaar    vim9script
606fa29c8abSBram Moolenaar    import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
607fa29c8abSBram Moolenaar  END
608fa29c8abSBram Moolenaar  writefile(import_long_name_lines, 'Ximport.vim')
609fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
610fa29c8abSBram Moolenaar
611fa29c8abSBram Moolenaar  let import_no_from_lines =<< trim END
612fa29c8abSBram Moolenaar    vim9script
613fa29c8abSBram Moolenaar    import name './Xexport.vim'
614fa29c8abSBram Moolenaar  END
615fa29c8abSBram Moolenaar  writefile(import_no_from_lines, 'Ximport.vim')
616fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1070:')
617fa29c8abSBram Moolenaar
618fa29c8abSBram Moolenaar  let import_invalid_string_lines =<< trim END
619fa29c8abSBram Moolenaar    vim9script
620fa29c8abSBram Moolenaar    import name from Xexport.vim
621fa29c8abSBram Moolenaar  END
622fa29c8abSBram Moolenaar  writefile(import_invalid_string_lines, 'Ximport.vim')
623fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1071:')
624fa29c8abSBram Moolenaar
625fa29c8abSBram Moolenaar  let import_wrong_name_lines =<< trim END
626fa29c8abSBram Moolenaar    vim9script
627fa29c8abSBram Moolenaar    import name from './XnoExport.vim'
628fa29c8abSBram Moolenaar  END
629fa29c8abSBram Moolenaar  writefile(import_wrong_name_lines, 'Ximport.vim')
630fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1053:')
631fa29c8abSBram Moolenaar
632fa29c8abSBram Moolenaar  let import_missing_comma_lines =<< trim END
633fa29c8abSBram Moolenaar    vim9script
634fa29c8abSBram Moolenaar    import {exported name} from './Xexport.vim'
635fa29c8abSBram Moolenaar  END
6365269bd2aSBram Moolenaar  writefile(import_missing_comma_lines, 'Ximport3.vim')
6375269bd2aSBram Moolenaar  assert_fails('source Ximport3.vim', 'E1046:')
638fa29c8abSBram Moolenaar
639f2d5c240SBram Moolenaar  delete('Ximport.vim')
6405269bd2aSBram Moolenaar  delete('Ximport3.vim')
6418a7d6542SBram Moolenaar  delete('Xexport.vim')
6428a7d6542SBram Moolenaar
643750802b5SBram Moolenaar  " Check that in a Vim9 script 'cpo' is set to the Vim default.
644750802b5SBram Moolenaar  set cpo&vi
645750802b5SBram Moolenaar  let cpo_before = &cpo
646750802b5SBram Moolenaar  let lines =<< trim END
647750802b5SBram Moolenaar    vim9script
648750802b5SBram Moolenaar    g:cpo_in_vim9script = &cpo
649750802b5SBram Moolenaar  END
650750802b5SBram Moolenaar  writefile(lines, 'Xvim9_script')
651750802b5SBram Moolenaar  source Xvim9_script
652750802b5SBram Moolenaar  assert_equal(cpo_before, &cpo)
653750802b5SBram Moolenaar  set cpo&vim
654750802b5SBram Moolenaar  assert_equal(&cpo, g:cpo_in_vim9script)
655750802b5SBram Moolenaar  delete('Xvim9_script')
656750802b5SBram Moolenaarenddef
657750802b5SBram Moolenaar
658750802b5SBram Moolenaardef Test_vim9script_fails()
6598a7d6542SBram Moolenaar  CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
6608a7d6542SBram Moolenaar  CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
661750802b5SBram Moolenaar  CheckScriptFailure(['export let some = 123'], 'E1042:')
662f2d5c240SBram Moolenaar  CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:')
663750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:')
664750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
665750802b5SBram Moolenaar
666750802b5SBram Moolenaar  assert_fails('vim9script', 'E1038')
667a26b9700SBram Moolenaar  assert_fails('export something', 'E1043')
6688a7d6542SBram Moolenaarenddef
6698a7d6542SBram Moolenaar
6708a7d6542SBram Moolenaardef Test_vim9script_reload()
6718a7d6542SBram Moolenaar  let lines =<< trim END
6728a7d6542SBram Moolenaar    vim9script
6738a7d6542SBram Moolenaar    const var = ''
6748a7d6542SBram Moolenaar    let valone = 1234
6758a7d6542SBram Moolenaar    def MyFunc(arg: string)
6768a7d6542SBram Moolenaar       valone = 5678
6778a7d6542SBram Moolenaar    enddef
6788a7d6542SBram Moolenaar  END
6798a7d6542SBram Moolenaar  let morelines =<< trim END
6808a7d6542SBram Moolenaar    let valtwo = 222
6818a7d6542SBram Moolenaar    export def GetValtwo(): number
6828a7d6542SBram Moolenaar      return valtwo
6838a7d6542SBram Moolenaar    enddef
6848a7d6542SBram Moolenaar  END
685675f716eSBram Moolenaar  writefile(lines + morelines,
686675f716eSBram Moolenaar            'Xreload.vim')
6878a7d6542SBram Moolenaar  source Xreload.vim
6888a7d6542SBram Moolenaar  source Xreload.vim
6898a7d6542SBram Moolenaar  source Xreload.vim
6908a7d6542SBram Moolenaar
6918a7d6542SBram Moolenaar  let testlines =<< trim END
6928a7d6542SBram Moolenaar    vim9script
6938a7d6542SBram Moolenaar    def TheFunc()
6948a7d6542SBram Moolenaar      import GetValtwo from './Xreload.vim'
6958a7d6542SBram Moolenaar      assert_equal(222, GetValtwo())
6968a7d6542SBram Moolenaar    enddef
6978a7d6542SBram Moolenaar    TheFunc()
6988a7d6542SBram Moolenaar  END
6998a7d6542SBram Moolenaar  writefile(testlines, 'Ximport.vim')
7008a7d6542SBram Moolenaar  source Ximport.vim
7018a7d6542SBram Moolenaar
7028a7d6542SBram Moolenaar  " test that when not using "morelines" valtwo is still defined
7038a7d6542SBram Moolenaar  " need to source Xreload.vim again, import doesn't reload a script
7048a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
7058a7d6542SBram Moolenaar  source Xreload.vim
7068a7d6542SBram Moolenaar  source Ximport.vim
7078a7d6542SBram Moolenaar
7088a7d6542SBram Moolenaar  " cannot declare a var twice
7098a7d6542SBram Moolenaar  lines =<< trim END
7108a7d6542SBram Moolenaar    vim9script
7118a7d6542SBram Moolenaar    let valone = 1234
7128a7d6542SBram Moolenaar    let valone = 5678
7138a7d6542SBram Moolenaar  END
7148a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
7158a7d6542SBram Moolenaar  assert_fails('source Xreload.vim', 'E1041:')
7168a7d6542SBram Moolenaar
7178a7d6542SBram Moolenaar  delete('Xreload.vim')
7188a7d6542SBram Moolenaar  delete('Ximport.vim')
7198a7d6542SBram Moolenaarenddef
7208a7d6542SBram Moolenaar
7218a7d6542SBram Moolenaardef Test_import_absolute()
7228a7d6542SBram Moolenaar  let import_lines = [
723e6085c53SBram Moolenaar        'vim9script',
724e6085c53SBram Moolenaar        'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"',
725e6085c53SBram Moolenaar        'def UseExported()',
726e6085c53SBram Moolenaar        '  g:imported_abs = exported',
727e6085c53SBram Moolenaar        '  exported = 8888',
728e6085c53SBram Moolenaar        '  g:imported_after = exported',
729e6085c53SBram Moolenaar        'enddef',
730e6085c53SBram Moolenaar        'UseExported()',
731e6085c53SBram Moolenaar        'g:import_disassembled = execute("disass UseExported")',
732e6085c53SBram Moolenaar        ]
7338a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_abs.vim')
7348a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport_abs.vim')
7358a7d6542SBram Moolenaar
7368a7d6542SBram Moolenaar  source Ximport_abs.vim
7378a7d6542SBram Moolenaar
7388a7d6542SBram Moolenaar  assert_equal(9876, g:imported_abs)
7394e12a5dfSBram Moolenaar  assert_equal(8888, g:imported_after)
740675f716eSBram Moolenaar  assert_match('<SNR>\d\+_UseExported.*' ..
741675f716eSBram Moolenaar          'g:imported_abs = exported.*' ..
742675f716eSBram Moolenaar          '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' ..
743675f716eSBram Moolenaar          '1 STOREG g:imported_abs.*' ..
744675f716eSBram Moolenaar          'exported = 8888.*' ..
745675f716eSBram Moolenaar          '3 STORESCRIPT exported in .*Xexport_abs.vim.*' ..
746675f716eSBram Moolenaar          'g:imported_after = exported.*' ..
747675f716eSBram Moolenaar          '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' ..
748675f716eSBram Moolenaar          '5 STOREG g:imported_after.*',
749e6085c53SBram Moolenaar        g:import_disassembled)
7508a7d6542SBram Moolenaar  unlet g:imported_abs
7514e12a5dfSBram Moolenaar  unlet g:import_disassembled
7528a7d6542SBram Moolenaar
7538a7d6542SBram Moolenaar  delete('Ximport_abs.vim')
7548a7d6542SBram Moolenaar  delete('Xexport_abs.vim')
7558a7d6542SBram Moolenaarenddef
7568a7d6542SBram Moolenaar
7578a7d6542SBram Moolenaardef Test_import_rtp()
7588a7d6542SBram Moolenaar  let import_lines = [
759e6085c53SBram Moolenaar        'vim9script',
760e6085c53SBram Moolenaar        'import exported from "Xexport_rtp.vim"',
761e6085c53SBram Moolenaar        'g:imported_rtp = exported',
762e6085c53SBram Moolenaar        ]
7638a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_rtp.vim')
7648a7d6542SBram Moolenaar  mkdir('import')
7658a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
7668a7d6542SBram Moolenaar
7678a7d6542SBram Moolenaar  let save_rtp = &rtp
7688a7d6542SBram Moolenaar  &rtp = getcwd()
7698a7d6542SBram Moolenaar  source Ximport_rtp.vim
7708a7d6542SBram Moolenaar  &rtp = save_rtp
7718a7d6542SBram Moolenaar
7728a7d6542SBram Moolenaar  assert_equal(9876, g:imported_rtp)
7738a7d6542SBram Moolenaar  unlet g:imported_rtp
7748a7d6542SBram Moolenaar
7758a7d6542SBram Moolenaar  delete('Ximport_rtp.vim')
7768a7d6542SBram Moolenaar  delete('import/Xexport_rtp.vim')
7778a7d6542SBram Moolenaar  delete('import', 'd')
7788a7d6542SBram Moolenaarenddef
7798a7d6542SBram Moolenaar
7808a7d6542SBram Moolenaardef Test_fixed_size_list()
7818a7d6542SBram Moolenaar  " will be allocated as one piece of memory, check that changes work
7828a7d6542SBram Moolenaar  let l = [1, 2, 3, 4]
7838a7d6542SBram Moolenaar  l->remove(0)
7848a7d6542SBram Moolenaar  l->add(5)
7858a7d6542SBram Moolenaar  l->insert(99, 1)
7860f18b6d1SBram Moolenaar  assert_equal([2, 99, 3, 4, 5], l)
7878a7d6542SBram Moolenaarenddef
7888a7d6542SBram Moolenaar
789158906cfSBram Moolenaardef IfElse(what: number): string
790158906cfSBram Moolenaar  let res = ''
791158906cfSBram Moolenaar  if what == 1
792158906cfSBram Moolenaar    res = "one"
793158906cfSBram Moolenaar  elseif what == 2
794158906cfSBram Moolenaar    res = "two"
795a259d8d3SBram Moolenaar  else
796158906cfSBram Moolenaar    res = "three"
797a259d8d3SBram Moolenaar  endif
798158906cfSBram Moolenaar  return res
799a259d8d3SBram Moolenaarenddef
800a259d8d3SBram Moolenaar
801158906cfSBram Moolenaardef Test_if_elseif_else()
802158906cfSBram Moolenaar  assert_equal('one', IfElse(1))
803158906cfSBram Moolenaar  assert_equal('two', IfElse(2))
804158906cfSBram Moolenaar  assert_equal('three', IfElse(3))
8050f18b6d1SBram Moolenaarenddef
8060f18b6d1SBram Moolenaar
807e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails()
808e8c4abbbSBram Moolenaar  call CheckDefFailure(['elseif true'], 'E582:')
809e8c4abbbSBram Moolenaar  call CheckDefFailure(['else'], 'E581:')
810e8c4abbbSBram Moolenaar  call CheckDefFailure(['endif'], 'E580:')
811e8c4abbbSBram Moolenaar  call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:')
812585fea7bSBram Moolenaar  call CheckDefFailure(['if true', 'echo 1'], 'E171:')
813e8c4abbbSBram Moolenaarenddef
814e8c4abbbSBram Moolenaar
8156d69bf60SBram Moolenaarlet g:bool_true = v:true
8166d69bf60SBram Moolenaarlet g:bool_false = v:false
8176d69bf60SBram Moolenaar
8186d69bf60SBram Moolenaardef Test_if_const_expr()
8196d69bf60SBram Moolenaar  let res = false
8206d69bf60SBram Moolenaar  if true ? true : false
8216d69bf60SBram Moolenaar    res = true
8226d69bf60SBram Moolenaar  endif
8236d69bf60SBram Moolenaar  assert_equal(true, res)
8246d69bf60SBram Moolenaar
825585fea7bSBram Moolenaar  g:glob = 2
826585fea7bSBram Moolenaar  if false
827585fea7bSBram Moolenaar    execute('let g:glob = 3')
828585fea7bSBram Moolenaar  endif
829585fea7bSBram Moolenaar  assert_equal(2, g:glob)
830585fea7bSBram Moolenaar  if true
831585fea7bSBram Moolenaar    execute('let g:glob = 3')
832585fea7bSBram Moolenaar  endif
833585fea7bSBram Moolenaar  assert_equal(3, g:glob)
834585fea7bSBram Moolenaar
8356d69bf60SBram Moolenaar  res = false
8366d69bf60SBram Moolenaar  if g:bool_true ? true : false
8376d69bf60SBram Moolenaar    res = true
8386d69bf60SBram Moolenaar  endif
8396d69bf60SBram Moolenaar  assert_equal(true, res)
8406d69bf60SBram Moolenaar
8416d69bf60SBram Moolenaar  res = false
8426d69bf60SBram Moolenaar  if true ? g:bool_true : false
8436d69bf60SBram Moolenaar    res = true
8446d69bf60SBram Moolenaar  endif
8456d69bf60SBram Moolenaar  assert_equal(true, res)
8466d69bf60SBram Moolenaar
8476d69bf60SBram Moolenaar  res = false
8486d69bf60SBram Moolenaar  if true ? true : g:bool_false
8496d69bf60SBram Moolenaar    res = true
8506d69bf60SBram Moolenaar  endif
8516d69bf60SBram Moolenaar  assert_equal(true, res)
8526d69bf60SBram Moolenaar
8536d69bf60SBram Moolenaar  res = false
8546d69bf60SBram Moolenaar  if true ? false : true
8556d69bf60SBram Moolenaar    res = true
8566d69bf60SBram Moolenaar  endif
8576d69bf60SBram Moolenaar  assert_equal(false, res)
8586d69bf60SBram Moolenaar
8596d69bf60SBram Moolenaar  res = false
8606d69bf60SBram Moolenaar  if false ? false : true
8616d69bf60SBram Moolenaar    res = true
8626d69bf60SBram Moolenaar  endif
8636d69bf60SBram Moolenaar  assert_equal(true, res)
8646d69bf60SBram Moolenaar
8656d69bf60SBram Moolenaar  res = false
8666d69bf60SBram Moolenaar  if false ? true : false
8676d69bf60SBram Moolenaar    res = true
8686d69bf60SBram Moolenaar  endif
8696d69bf60SBram Moolenaar  assert_equal(false, res)
8706d69bf60SBram Moolenaar
8716d69bf60SBram Moolenaar  res = false
872e8c4abbbSBram Moolenaar  if has('xyz') ? true : false
873e8c4abbbSBram Moolenaar    res = true
874e8c4abbbSBram Moolenaar  endif
875e8c4abbbSBram Moolenaar  assert_equal(false, res)
876e8c4abbbSBram Moolenaar
877e8c4abbbSBram Moolenaar  res = false
8786d69bf60SBram Moolenaar  if true && true
8796d69bf60SBram Moolenaar    res = true
8806d69bf60SBram Moolenaar  endif
8816d69bf60SBram Moolenaar  assert_equal(true, res)
8826d69bf60SBram Moolenaar
8836d69bf60SBram Moolenaar  res = false
8846d69bf60SBram Moolenaar  if true && false
8856d69bf60SBram Moolenaar    res = true
8866d69bf60SBram Moolenaar  endif
8876d69bf60SBram Moolenaar  assert_equal(false, res)
8886d69bf60SBram Moolenaar
8896d69bf60SBram Moolenaar  res = false
8906d69bf60SBram Moolenaar  if g:bool_true && false
8916d69bf60SBram Moolenaar    res = true
8926d69bf60SBram Moolenaar  endif
8936d69bf60SBram Moolenaar  assert_equal(false, res)
8946d69bf60SBram Moolenaar
8956d69bf60SBram Moolenaar  res = false
8966d69bf60SBram Moolenaar  if true && g:bool_false
8976d69bf60SBram Moolenaar    res = true
8986d69bf60SBram Moolenaar  endif
8996d69bf60SBram Moolenaar  assert_equal(false, res)
9006d69bf60SBram Moolenaar
9016d69bf60SBram Moolenaar  res = false
9026d69bf60SBram Moolenaar  if false && false
9036d69bf60SBram Moolenaar    res = true
9046d69bf60SBram Moolenaar  endif
9056d69bf60SBram Moolenaar  assert_equal(false, res)
9066d69bf60SBram Moolenaar
9076d69bf60SBram Moolenaar  res = false
9086d69bf60SBram Moolenaar  if true || false
9096d69bf60SBram Moolenaar    res = true
9106d69bf60SBram Moolenaar  endif
9116d69bf60SBram Moolenaar  assert_equal(true, res)
9126d69bf60SBram Moolenaar
9136d69bf60SBram Moolenaar  res = false
9146d69bf60SBram Moolenaar  if g:bool_true || false
9156d69bf60SBram Moolenaar    res = true
9166d69bf60SBram Moolenaar  endif
9176d69bf60SBram Moolenaar  assert_equal(true, res)
9186d69bf60SBram Moolenaar
9196d69bf60SBram Moolenaar  res = false
9206d69bf60SBram Moolenaar  if true || g:bool_false
9216d69bf60SBram Moolenaar    res = true
9226d69bf60SBram Moolenaar  endif
9236d69bf60SBram Moolenaar  assert_equal(true, res)
9246d69bf60SBram Moolenaar
9256d69bf60SBram Moolenaar  res = false
9266d69bf60SBram Moolenaar  if false || false
9276d69bf60SBram Moolenaar    res = true
9286d69bf60SBram Moolenaar  endif
9296d69bf60SBram Moolenaar  assert_equal(false, res)
93080c34ca3SBram Moolenaarenddef
9316d69bf60SBram Moolenaar
93280c34ca3SBram Moolenaardef Test_if_const_expr_fails()
93380c34ca3SBram Moolenaar  call CheckDefFailure(['if "aaa" == "bbb'], 'E114:')
93480c34ca3SBram Moolenaar  call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:')
935e8c4abbbSBram Moolenaar  call CheckDefFailure(["if has('aaa'"], 'E110:')
936e8c4abbbSBram Moolenaar  call CheckDefFailure(["if has('aaa') ? true false"], 'E109:')
9376d69bf60SBram Moolenaarenddef
9386d69bf60SBram Moolenaar
939ad39c094SBram Moolenaardef Test_execute_cmd()
940ad39c094SBram Moolenaar  new
941ad39c094SBram Moolenaar  setline(1, 'default')
942ad39c094SBram Moolenaar  execute 'call setline(1, "execute-string")'
943ad39c094SBram Moolenaar  assert_equal('execute-string', getline(1))
944a72cfb80SBram Moolenaar
945a72cfb80SBram Moolenaar  execute "call setline(1, 'execute-string')"
946a72cfb80SBram Moolenaar  assert_equal('execute-string', getline(1))
947a72cfb80SBram Moolenaar
948ad39c094SBram Moolenaar  let cmd1 = 'call setline(1,'
949ad39c094SBram Moolenaar  let cmd2 = '"execute-var")'
950a72cfb80SBram Moolenaar  execute cmd1 cmd2 # comment
951ad39c094SBram Moolenaar  assert_equal('execute-var', getline(1))
952a72cfb80SBram Moolenaar
953ad39c094SBram Moolenaar  execute cmd1 cmd2 '|call setline(1, "execute-var-string")'
954ad39c094SBram Moolenaar  assert_equal('execute-var-string', getline(1))
955a72cfb80SBram Moolenaar
956ad39c094SBram Moolenaar  let cmd_first = 'call '
957ad39c094SBram Moolenaar  let cmd_last = 'setline(1, "execute-var-var")'
958ad39c094SBram Moolenaar  execute cmd_first .. cmd_last
959ad39c094SBram Moolenaar  assert_equal('execute-var-var', getline(1))
960ad39c094SBram Moolenaar  bwipe!
961585fea7bSBram Moolenaar
962585fea7bSBram Moolenaar  call CheckDefFailure(['execute xxx'], 'E1001:')
963a72cfb80SBram Moolenaar  call CheckDefFailure(['execute "cmd"# comment'], 'E488:')
964ad39c094SBram Moolenaarenddef
965ad39c094SBram Moolenaar
966ad39c094SBram Moolenaardef Test_echo_cmd()
967a72cfb80SBram Moolenaar  echo 'some' # comment
968585fea7bSBram Moolenaar  echon 'thing'
969ad39c094SBram Moolenaar  assert_match('^something$', Screenline(&lines))
970ad39c094SBram Moolenaar
971a72cfb80SBram Moolenaar  echo "some" # comment
972a72cfb80SBram Moolenaar  echon "thing"
973a72cfb80SBram Moolenaar  assert_match('^something$', Screenline(&lines))
974a72cfb80SBram Moolenaar
975ad39c094SBram Moolenaar  let str1 = 'some'
976ad39c094SBram Moolenaar  let str2 = 'more'
977ad39c094SBram Moolenaar  echo str1 str2
978ad39c094SBram Moolenaar  assert_match('^some more$', Screenline(&lines))
979a72cfb80SBram Moolenaar
980a72cfb80SBram Moolenaar  call CheckDefFailure(['echo "xxx"# comment'], 'E488:')
981ad39c094SBram Moolenaarenddef
982ad39c094SBram Moolenaar
983*f93c7feaSBram Moolenaardef Test_echomsg_cmd()
984*f93c7feaSBram Moolenaar  echomsg 'some' 'more' # comment
985*f93c7feaSBram Moolenaar  assert_match('^some more$', Screenline(&lines))
986*f93c7feaSBram Moolenaar  echo 'clear'
987*f93c7feaSBram Moolenaar  1messages
988*f93c7feaSBram Moolenaar  assert_match('^some more$', Screenline(&lines))
989*f93c7feaSBram Moolenaar
990*f93c7feaSBram Moolenaar  call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:')
991*f93c7feaSBram Moolenaarenddef
992*f93c7feaSBram Moolenaar
993*f93c7feaSBram Moolenaardef Test_echoerr_cmd()
994*f93c7feaSBram Moolenaar  # TODO: write this test
995*f93c7feaSBram Moolenaarenddef
996*f93c7feaSBram Moolenaar
99741fe0617SBram Moolenaardef Test_for_outside_of_function()
99841fe0617SBram Moolenaar  let lines =<< trim END
99941fe0617SBram Moolenaar    vim9script
100041fe0617SBram Moolenaar    new
100141fe0617SBram Moolenaar    for var in range(0, 3)
100241fe0617SBram Moolenaar      append(line('$'), var)
100341fe0617SBram Moolenaar    endfor
100441fe0617SBram Moolenaar    assert_equal(['', '0', '1', '2', '3'], getline(1, '$'))
100541fe0617SBram Moolenaar    bwipe!
100641fe0617SBram Moolenaar  END
100741fe0617SBram Moolenaar  writefile(lines, 'Xvim9for.vim')
100841fe0617SBram Moolenaar  source Xvim9for.vim
100941fe0617SBram Moolenaar  delete('Xvim9for.vim')
101041fe0617SBram Moolenaarenddef
10118a7d6542SBram Moolenaar
1012e8c4abbbSBram Moolenaardef Test_for_loop()
1013e8c4abbbSBram Moolenaar  let result = ''
1014e8c4abbbSBram Moolenaar  for cnt in range(7)
1015e8c4abbbSBram Moolenaar    if cnt == 4
1016e8c4abbbSBram Moolenaar      break
1017e8c4abbbSBram Moolenaar    endif
1018e8c4abbbSBram Moolenaar    if cnt == 2
1019e8c4abbbSBram Moolenaar      continue
1020e8c4abbbSBram Moolenaar    endif
1021e8c4abbbSBram Moolenaar    result ..= cnt .. '_'
1022e8c4abbbSBram Moolenaar  endfor
1023e8c4abbbSBram Moolenaar  assert_equal('0_1_3_', result)
1024e8c4abbbSBram Moolenaarenddef
1025e8c4abbbSBram Moolenaar
1026e8c4abbbSBram Moolenaardef Test_for_loop_fails()
1027675f716eSBram Moolenaar  CheckDefFailure(['for # in range(5)'], 'E690:')
1028675f716eSBram Moolenaar  CheckDefFailure(['for i In range(5)'], 'E690:')
1029675f716eSBram Moolenaar  CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:')
10306e949784SBram Moolenaar  CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:')
1031675f716eSBram Moolenaar  CheckDefFailure(['for i in "text"'], 'E1024:')
1032675f716eSBram Moolenaar  CheckDefFailure(['for i in xxx'], 'E1001:')
1033675f716eSBram Moolenaar  CheckDefFailure(['endfor'], 'E588:')
1034675f716eSBram Moolenaar  CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:')
1035e8c4abbbSBram Moolenaarenddef
1036e8c4abbbSBram Moolenaar
1037d0df1aacSBram Moolenaardef Test_while_loop()
1038d0df1aacSBram Moolenaar  let result = ''
1039d0df1aacSBram Moolenaar  let cnt = 0
1040d0df1aacSBram Moolenaar  while cnt < 555
1041d0df1aacSBram Moolenaar    if cnt == 3
1042d0df1aacSBram Moolenaar      break
1043d0df1aacSBram Moolenaar    endif
1044d0df1aacSBram Moolenaar    cnt += 1
1045d0df1aacSBram Moolenaar    if cnt == 2
1046d0df1aacSBram Moolenaar      continue
1047d0df1aacSBram Moolenaar    endif
1048d0df1aacSBram Moolenaar    result ..= cnt .. '_'
1049d0df1aacSBram Moolenaar  endwhile
1050d0df1aacSBram Moolenaar  assert_equal('1_3_', result)
1051d0df1aacSBram Moolenaarenddef
1052d0df1aacSBram Moolenaar
1053e8c4abbbSBram Moolenaardef Test_while_loop_fails()
1054675f716eSBram Moolenaar  CheckDefFailure(['while xxx'], 'E1001:')
1055675f716eSBram Moolenaar  CheckDefFailure(['endwhile'], 'E588:')
1056675f716eSBram Moolenaar  CheckDefFailure(['continue'], 'E586:')
1057675f716eSBram Moolenaar  CheckDefFailure(['if true', 'continue'], 'E586:')
1058675f716eSBram Moolenaar  CheckDefFailure(['break'], 'E587:')
1059675f716eSBram Moolenaar  CheckDefFailure(['if true', 'break'], 'E587:')
1060675f716eSBram Moolenaar  CheckDefFailure(['while 1', 'echo 3'], 'E170:')
1061bd5da371SBram Moolenaarenddef
1062bd5da371SBram Moolenaar
10639645e2d9SBram Moolenaardef Test_interrupt_loop()
106497acfc78SBram Moolenaar  let caught = false
10659645e2d9SBram Moolenaar  let x = 0
106697acfc78SBram Moolenaar  try
10679645e2d9SBram Moolenaar    while 1
10689645e2d9SBram Moolenaar      x += 1
10699645e2d9SBram Moolenaar      if x == 100
10709645e2d9SBram Moolenaar        feedkeys("\<C-C>", 'Lt')
10719645e2d9SBram Moolenaar      endif
10729645e2d9SBram Moolenaar    endwhile
107397acfc78SBram Moolenaar  catch
107497acfc78SBram Moolenaar    caught = true
107597acfc78SBram Moolenaar    assert_equal(100, x)
107697acfc78SBram Moolenaar  endtry
107797acfc78SBram Moolenaar  assert_true(caught, 'should have caught an exception')
10789645e2d9SBram Moolenaarenddef
107920431c9dSBram Moolenaar
10804fdae999SBram Moolenaardef Test_automatic_line_continuation()
10814fdae999SBram Moolenaar  let mylist = [
10824fdae999SBram Moolenaar      'one',
10834fdae999SBram Moolenaar      'two',
10844fdae999SBram Moolenaar      'three',
10854fdae999SBram Moolenaar      ] " comment
10864fdae999SBram Moolenaar  assert_equal(['one', 'two', 'three'], mylist)
10874fdae999SBram Moolenaar
10884fdae999SBram Moolenaar  let mydict = {
10894fdae999SBram Moolenaar      'one': 1,
10904fdae999SBram Moolenaar      'two': 2,
10914fdae999SBram Moolenaar      'three':
10924fdae999SBram Moolenaar          3,
10934fdae999SBram Moolenaar      } " comment
10944fdae999SBram Moolenaar  assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict)
10954fdae999SBram Moolenaar  mydict = #{
10962c330432SBram Moolenaar      one: 1,  # comment
10972c330432SBram Moolenaar      two:     # comment
10982c330432SBram Moolenaar           2,  # comment
10992c330432SBram Moolenaar      three: 3 # comment
11002c330432SBram Moolenaar      }
11012c330432SBram Moolenaar  assert_equal(#{one: 1, two: 2, three: 3}, mydict)
11022c330432SBram Moolenaar  mydict = #{
11032c330432SBram Moolenaar      one: 1,
11044fdae999SBram Moolenaar      two:
11054fdae999SBram Moolenaar           2,
11062c330432SBram Moolenaar      three: 3
11074fdae999SBram Moolenaar      }
11084fdae999SBram Moolenaar  assert_equal(#{one: 1, two: 2, three: 3}, mydict)
1109e6085c53SBram Moolenaar
1110e6085c53SBram Moolenaar  assert_equal(
1111e6085c53SBram Moolenaar        ['one', 'two', 'three'],
1112e6085c53SBram Moolenaar        split('one two three')
1113e6085c53SBram Moolenaar        )
11144fdae999SBram Moolenaarenddef
11154fdae999SBram Moolenaar
11167a092245SBram Moolenaardef Test_vim9_comment()
11177a092245SBram Moolenaar  CheckScriptSuccess([
11187a092245SBram Moolenaar      'vim9script',
11197a092245SBram Moolenaar      '# something',
11207a092245SBram Moolenaar      ])
11217a092245SBram Moolenaar  CheckScriptFailure([
11227a092245SBram Moolenaar      'vim9script',
11237a092245SBram Moolenaar      ':# something',
11247a092245SBram Moolenaar      ], 'E488:')
11257a092245SBram Moolenaar  CheckScriptFailure([
11267a092245SBram Moolenaar      '# something',
11277a092245SBram Moolenaar      ], 'E488:')
11287a092245SBram Moolenaar  CheckScriptFailure([
11297a092245SBram Moolenaar      ':# something',
11307a092245SBram Moolenaar      ], 'E488:')
11317a092245SBram Moolenaar
11324a8d9f2eSBram Moolenaar  { # block start
11334a8d9f2eSBram Moolenaar  } # block end
11344a8d9f2eSBram Moolenaar  CheckDefFailure([
11354a8d9f2eSBram Moolenaar      '{# comment',
11364a8d9f2eSBram Moolenaar      ], 'E488:')
11374a8d9f2eSBram Moolenaar  CheckDefFailure([
11384a8d9f2eSBram Moolenaar      '{',
11394a8d9f2eSBram Moolenaar      '}# comment',
11404a8d9f2eSBram Moolenaar      ], 'E488:')
11414a8d9f2eSBram Moolenaar
11424a8d9f2eSBram Moolenaar  echo "yes" # comment
11434a8d9f2eSBram Moolenaar  CheckDefFailure([
11444a8d9f2eSBram Moolenaar      'echo "yes"# comment',
11454a8d9f2eSBram Moolenaar      ], 'E488:')
11467a092245SBram Moolenaar  CheckScriptSuccess([
11477a092245SBram Moolenaar      'vim9script',
11487a092245SBram Moolenaar      'echo "yes" # something',
11497a092245SBram Moolenaar      ])
11507a092245SBram Moolenaar  CheckScriptFailure([
11517a092245SBram Moolenaar      'vim9script',
11527a092245SBram Moolenaar      'echo "yes"# something',
11537a092245SBram Moolenaar      ], 'E121:')
11547a092245SBram Moolenaar  CheckScriptFailure([
11557a092245SBram Moolenaar      'vim9script',
11567a092245SBram Moolenaar      'echo# something',
11577a092245SBram Moolenaar      ], 'E121:')
11587a092245SBram Moolenaar  CheckScriptFailure([
11597a092245SBram Moolenaar      'echo "yes" # something',
11607a092245SBram Moolenaar      ], 'E121:')
11617a092245SBram Moolenaar
11624a8d9f2eSBram Moolenaar  exe "echo" # comment
11634a8d9f2eSBram Moolenaar  CheckDefFailure([
11644a8d9f2eSBram Moolenaar      'exe "echo"# comment',
11654a8d9f2eSBram Moolenaar      ], 'E488:')
11664a8d9f2eSBram Moolenaar  CheckScriptSuccess([
11674a8d9f2eSBram Moolenaar      'vim9script',
11684a8d9f2eSBram Moolenaar      'exe "echo" # something',
11694a8d9f2eSBram Moolenaar      ])
11704a8d9f2eSBram Moolenaar  CheckScriptFailure([
11714a8d9f2eSBram Moolenaar      'vim9script',
11724a8d9f2eSBram Moolenaar      'exe "echo"# something',
11734a8d9f2eSBram Moolenaar      ], 'E121:')
11744a8d9f2eSBram Moolenaar  CheckDefFailure([
11754a8d9f2eSBram Moolenaar      'exe # comment',
11764a8d9f2eSBram Moolenaar      ], 'E1015:')
11774a8d9f2eSBram Moolenaar  CheckScriptFailure([
11784a8d9f2eSBram Moolenaar      'vim9script',
11794a8d9f2eSBram Moolenaar      'exe# something',
11804a8d9f2eSBram Moolenaar      ], 'E121:')
11814a8d9f2eSBram Moolenaar  CheckScriptFailure([
11824a8d9f2eSBram Moolenaar      'exe "echo" # something',
11834a8d9f2eSBram Moolenaar      ], 'E121:')
11844a8d9f2eSBram Moolenaar
11857a092245SBram Moolenaar  CheckDefFailure([
11867a092245SBram Moolenaar      'try# comment',
11877a092245SBram Moolenaar      '  echo "yes"',
11887a092245SBram Moolenaar      'catch',
11897a092245SBram Moolenaar      'endtry',
11907a092245SBram Moolenaar      ], 'E488:')
11912c5ed4e3SBram Moolenaar  CheckScriptFailure([
11922c5ed4e3SBram Moolenaar      'vim9script',
11932c5ed4e3SBram Moolenaar      'try# comment',
11942c5ed4e3SBram Moolenaar      'echo "yes"',
11952c5ed4e3SBram Moolenaar      ], 'E488:')
11967a092245SBram Moolenaar  CheckDefFailure([
11977a092245SBram Moolenaar      'try',
1198a72cfb80SBram Moolenaar      '  throw#comment',
1199a72cfb80SBram Moolenaar      'catch',
1200a72cfb80SBram Moolenaar      'endtry',
1201a72cfb80SBram Moolenaar      ], 'E1015:')
1202a72cfb80SBram Moolenaar  CheckDefFailure([
1203a72cfb80SBram Moolenaar      'try',
1204a72cfb80SBram Moolenaar      '  throw "yes"#comment',
1205a72cfb80SBram Moolenaar      'catch',
1206a72cfb80SBram Moolenaar      'endtry',
1207a72cfb80SBram Moolenaar      ], 'E488:')
1208a72cfb80SBram Moolenaar  CheckDefFailure([
1209a72cfb80SBram Moolenaar      'try',
12107a092245SBram Moolenaar      '  echo "yes"',
12117a092245SBram Moolenaar      'catch# comment',
12127a092245SBram Moolenaar      'endtry',
12137a092245SBram Moolenaar      ], 'E488:')
12142c5ed4e3SBram Moolenaar  CheckScriptFailure([
12152c5ed4e3SBram Moolenaar      'vim9script',
12162c5ed4e3SBram Moolenaar      'try',
12172c5ed4e3SBram Moolenaar      '  echo "yes"',
12182c5ed4e3SBram Moolenaar      'catch# comment',
12192c5ed4e3SBram Moolenaar      'endtry',
12202c5ed4e3SBram Moolenaar      ], 'E654:')
12212c5ed4e3SBram Moolenaar  CheckDefFailure([
12222c5ed4e3SBram Moolenaar      'try',
12232c5ed4e3SBram Moolenaar      '  echo "yes"',
12242c5ed4e3SBram Moolenaar      'catch /pat/# comment',
12252c5ed4e3SBram Moolenaar      'endtry',
12262c5ed4e3SBram Moolenaar      ], 'E488:')
12272c5ed4e3SBram Moolenaar  CheckScriptFailure([
12282c5ed4e3SBram Moolenaar      'vim9script',
12292c5ed4e3SBram Moolenaar      'try',
12302c5ed4e3SBram Moolenaar      '  throw "pat"',
12312c5ed4e3SBram Moolenaar      'catch /pat/# comment',
12322c5ed4e3SBram Moolenaar      'endtry',
12332c5ed4e3SBram Moolenaar      ], 'E605:')
12347a092245SBram Moolenaar  CheckDefFailure([
12357a092245SBram Moolenaar      'try',
12367a092245SBram Moolenaar      'echo "yes"',
12377a092245SBram Moolenaar      'catch',
12387a092245SBram Moolenaar      'endtry# comment',
12397a092245SBram Moolenaar      ], 'E488:')
12402c5ed4e3SBram Moolenaar  CheckScriptFailure([
12412c5ed4e3SBram Moolenaar      'vim9script',
12422c5ed4e3SBram Moolenaar      'try',
12432c5ed4e3SBram Moolenaar      '  echo "yes"',
12442c5ed4e3SBram Moolenaar      'catch',
12452c5ed4e3SBram Moolenaar      'endtry# comment',
12462c5ed4e3SBram Moolenaar      ], 'E600:')
12472c5ed4e3SBram Moolenaar
12482c5ed4e3SBram Moolenaar  CheckScriptSuccess([
12492c5ed4e3SBram Moolenaar      'vim9script',
12502c5ed4e3SBram Moolenaar      'hi # comment',
12512c5ed4e3SBram Moolenaar      ])
12522c5ed4e3SBram Moolenaar  CheckScriptFailure([
12532c5ed4e3SBram Moolenaar      'vim9script',
12542c5ed4e3SBram Moolenaar      'hi# comment',
12552c5ed4e3SBram Moolenaar      ], 'E416:')
12561966c248SBram Moolenaar  CheckScriptSuccess([
12571966c248SBram Moolenaar      'vim9script',
12581966c248SBram Moolenaar      'hi Search # comment',
12591966c248SBram Moolenaar      ])
12601966c248SBram Moolenaar  CheckScriptFailure([
12611966c248SBram Moolenaar      'vim9script',
12621966c248SBram Moolenaar      'hi Search# comment',
12631966c248SBram Moolenaar      ], 'E416:')
12641966c248SBram Moolenaar  CheckScriptSuccess([
12651966c248SBram Moolenaar      'vim9script',
12661966c248SBram Moolenaar      'hi link This Search # comment',
12671966c248SBram Moolenaar      ])
12681966c248SBram Moolenaar  CheckScriptFailure([
12691966c248SBram Moolenaar      'vim9script',
12701966c248SBram Moolenaar      'hi link This That# comment',
12711966c248SBram Moolenaar      ], 'E413:')
12721966c248SBram Moolenaar  CheckScriptSuccess([
12731966c248SBram Moolenaar      'vim9script',
12741966c248SBram Moolenaar      'hi clear This # comment',
12751966c248SBram Moolenaar      'hi clear # comment',
12761966c248SBram Moolenaar      ])
12771966c248SBram Moolenaar  " not tested, because it doesn't give an error but a warning:
12781966c248SBram Moolenaar  " hi clear This# comment',
12791966c248SBram Moolenaar  CheckScriptFailure([
12801966c248SBram Moolenaar      'vim9script',
12811966c248SBram Moolenaar      'hi clear# comment',
12821966c248SBram Moolenaar      ], 'E416:')
12831966c248SBram Moolenaar
12841966c248SBram Moolenaar  CheckScriptSuccess([
12851966c248SBram Moolenaar      'vim9script',
12861966c248SBram Moolenaar      'hi Group term=bold',
12871966c248SBram Moolenaar      'match Group /todo/ # comment',
12881966c248SBram Moolenaar      ])
12891966c248SBram Moolenaar  CheckScriptFailure([
12901966c248SBram Moolenaar      'vim9script',
12911966c248SBram Moolenaar      'hi Group term=bold',
12921966c248SBram Moolenaar      'match Group /todo/# comment',
12931966c248SBram Moolenaar      ], 'E488:')
12941966c248SBram Moolenaar  CheckScriptSuccess([
12951966c248SBram Moolenaar      'vim9script',
12961966c248SBram Moolenaar      'match # comment',
12971966c248SBram Moolenaar      ])
12981966c248SBram Moolenaar  CheckScriptFailure([
12991966c248SBram Moolenaar      'vim9script',
13001966c248SBram Moolenaar      'match# comment',
13011966c248SBram Moolenaar      ], 'E475:')
13021966c248SBram Moolenaar  CheckScriptSuccess([
13031966c248SBram Moolenaar      'vim9script',
13041966c248SBram Moolenaar      'match none # comment',
13051966c248SBram Moolenaar      ])
13061966c248SBram Moolenaar  CheckScriptFailure([
13071966c248SBram Moolenaar      'vim9script',
13081966c248SBram Moolenaar      'match none# comment',
13091966c248SBram Moolenaar      ], 'E475:')
13101966c248SBram Moolenaar
13111966c248SBram Moolenaar  CheckScriptSuccess([
13121966c248SBram Moolenaar      'vim9script',
13131966c248SBram Moolenaar      'menutrans clear # comment',
13141966c248SBram Moolenaar      ])
13151966c248SBram Moolenaar  CheckScriptFailure([
13161966c248SBram Moolenaar      'vim9script',
13171966c248SBram Moolenaar      'menutrans clear# comment text',
13181966c248SBram Moolenaar      ], 'E474:')
13191966c248SBram Moolenaar
13201966c248SBram Moolenaar  CheckScriptSuccess([
13211966c248SBram Moolenaar      'vim9script',
13221966c248SBram Moolenaar      'syntax clear # comment',
13231966c248SBram Moolenaar      ])
13241966c248SBram Moolenaar  CheckScriptFailure([
13251966c248SBram Moolenaar      'vim9script',
13261966c248SBram Moolenaar      'syntax clear# comment text',
13271966c248SBram Moolenaar      ], 'E28:')
13281966c248SBram Moolenaar  CheckScriptSuccess([
13291966c248SBram Moolenaar      'vim9script',
13301966c248SBram Moolenaar      'syntax keyword Word some',
13311966c248SBram Moolenaar      'syntax clear Word # comment',
13321966c248SBram Moolenaar      ])
13331966c248SBram Moolenaar  CheckScriptFailure([
13341966c248SBram Moolenaar      'vim9script',
13351966c248SBram Moolenaar      'syntax keyword Word some',
13361966c248SBram Moolenaar      'syntax clear Word# comment text',
13371966c248SBram Moolenaar      ], 'E28:')
13381966c248SBram Moolenaar
13391966c248SBram Moolenaar  CheckScriptSuccess([
13401966c248SBram Moolenaar      'vim9script',
13411966c248SBram Moolenaar      'syntax list # comment',
13421966c248SBram Moolenaar      ])
13431966c248SBram Moolenaar  CheckScriptFailure([
13441966c248SBram Moolenaar      'vim9script',
13451966c248SBram Moolenaar      'syntax list# comment text',
13461966c248SBram Moolenaar      ], 'E28:')
13471966c248SBram Moolenaar
13481966c248SBram Moolenaar  CheckScriptSuccess([
13491966c248SBram Moolenaar      'vim9script',
13501966c248SBram Moolenaar      'syntax match Word /pat/ oneline # comment',
13511966c248SBram Moolenaar      ])
13521966c248SBram Moolenaar  CheckScriptFailure([
13531966c248SBram Moolenaar      'vim9script',
13541966c248SBram Moolenaar      'syntax match Word /pat/ oneline# comment',
13551966c248SBram Moolenaar      ], 'E475:')
13561966c248SBram Moolenaar
13571966c248SBram Moolenaar  CheckScriptSuccess([
13581966c248SBram Moolenaar      'vim9script',
13591966c248SBram Moolenaar      'syntax keyword Word word # comm[ent',
13601966c248SBram Moolenaar      ])
13611966c248SBram Moolenaar  CheckScriptFailure([
13621966c248SBram Moolenaar      'vim9script',
13631966c248SBram Moolenaar      'syntax keyword Word word# comm[ent',
13641966c248SBram Moolenaar      ], 'E789:')
13651966c248SBram Moolenaar
13661966c248SBram Moolenaar  CheckScriptSuccess([
13671966c248SBram Moolenaar      'vim9script',
13681966c248SBram Moolenaar      'syntax match Word /pat/ # comment',
13691966c248SBram Moolenaar      ])
13701966c248SBram Moolenaar  CheckScriptFailure([
13711966c248SBram Moolenaar      'vim9script',
13721966c248SBram Moolenaar      'syntax match Word /pat/# comment',
13731966c248SBram Moolenaar      ], 'E402:')
13741966c248SBram Moolenaar
13751966c248SBram Moolenaar  CheckScriptSuccess([
13761966c248SBram Moolenaar      'vim9script',
13771966c248SBram Moolenaar      'syntax match Word /pat/ contains=Something # comment',
13781966c248SBram Moolenaar      ])
13791966c248SBram Moolenaar  CheckScriptFailure([
13801966c248SBram Moolenaar      'vim9script',
13811966c248SBram Moolenaar      'syntax match Word /pat/ contains=Something# comment',
13821966c248SBram Moolenaar      ], 'E475:')
13831966c248SBram Moolenaar  CheckScriptFailure([
13841966c248SBram Moolenaar      'vim9script',
13851966c248SBram Moolenaar      'syntax match Word /pat/ contains= # comment',
13861966c248SBram Moolenaar      ], 'E406:')
13871966c248SBram Moolenaar  CheckScriptFailure([
13881966c248SBram Moolenaar      'vim9script',
13891966c248SBram Moolenaar      'syntax match Word /pat/ contains=# comment',
13901966c248SBram Moolenaar      ], 'E475:')
13911966c248SBram Moolenaar
13921966c248SBram Moolenaar  CheckScriptSuccess([
13931966c248SBram Moolenaar      'vim9script',
13941966c248SBram Moolenaar      'syntax region Word start=/pat/ end=/pat/ # comment',
13951966c248SBram Moolenaar      ])
13961966c248SBram Moolenaar  CheckScriptFailure([
13971966c248SBram Moolenaar      'vim9script',
13981966c248SBram Moolenaar      'syntax region Word start=/pat/ end=/pat/# comment',
13991966c248SBram Moolenaar      ], 'E475:')
14001966c248SBram Moolenaar
14011966c248SBram Moolenaar  CheckScriptSuccess([
14021966c248SBram Moolenaar      'vim9script',
14031966c248SBram Moolenaar      'syntax sync # comment',
14041966c248SBram Moolenaar      ])
14051966c248SBram Moolenaar  CheckScriptFailure([
14061966c248SBram Moolenaar      'vim9script',
14071966c248SBram Moolenaar      'syntax sync# comment',
14081966c248SBram Moolenaar      ], 'E404:')
14091966c248SBram Moolenaar  CheckScriptSuccess([
14101966c248SBram Moolenaar      'vim9script',
14111966c248SBram Moolenaar      'syntax sync ccomment # comment',
14121966c248SBram Moolenaar      ])
14131966c248SBram Moolenaar  CheckScriptFailure([
14141966c248SBram Moolenaar      'vim9script',
14151966c248SBram Moolenaar      'syntax sync ccomment# comment',
14161966c248SBram Moolenaar      ], 'E404:')
14171966c248SBram Moolenaar
14181966c248SBram Moolenaar  CheckScriptSuccess([
14191966c248SBram Moolenaar      'vim9script',
14201966c248SBram Moolenaar      'syntax cluster Some contains=Word # comment',
14211966c248SBram Moolenaar      ])
14221966c248SBram Moolenaar  CheckScriptFailure([
14231966c248SBram Moolenaar      'vim9script',
14241966c248SBram Moolenaar      'syntax cluster Some contains=Word# comment',
14251966c248SBram Moolenaar      ], 'E475:')
1426a72cfb80SBram Moolenaar
1427a72cfb80SBram Moolenaar  CheckScriptSuccess([
1428a72cfb80SBram Moolenaar      'vim9script',
1429a72cfb80SBram Moolenaar      'command Echo echo # comment',
1430a72cfb80SBram Moolenaar      'command Echo # comment',
1431a72cfb80SBram Moolenaar      ])
1432a72cfb80SBram Moolenaar  CheckScriptFailure([
1433a72cfb80SBram Moolenaar      'vim9script',
1434a72cfb80SBram Moolenaar      'command Echo echo# comment',
1435a72cfb80SBram Moolenaar      'Echo',
1436a72cfb80SBram Moolenaar      ], 'E121:')
1437a72cfb80SBram Moolenaar  CheckScriptFailure([
1438a72cfb80SBram Moolenaar      'vim9script',
1439a72cfb80SBram Moolenaar      'command Echo# comment',
1440a72cfb80SBram Moolenaar      ], 'E182:')
1441a72cfb80SBram Moolenaar  CheckScriptFailure([
1442a72cfb80SBram Moolenaar      'vim9script',
1443a72cfb80SBram Moolenaar      'command Echo echo',
1444a72cfb80SBram Moolenaar      'command Echo# comment',
1445a72cfb80SBram Moolenaar      ], 'E182:')
1446a72cfb80SBram Moolenaar
1447a72cfb80SBram Moolenaar  CheckScriptSuccess([
1448a72cfb80SBram Moolenaar      'vim9script',
1449a72cfb80SBram Moolenaar      'function # comment',
1450a72cfb80SBram Moolenaar      ])
1451a72cfb80SBram Moolenaar  CheckScriptFailure([
1452a72cfb80SBram Moolenaar      'vim9script',
1453a72cfb80SBram Moolenaar      'function# comment',
1454a72cfb80SBram Moolenaar      ], 'E129:')
1455a72cfb80SBram Moolenaar  CheckScriptSuccess([
1456a72cfb80SBram Moolenaar      'vim9script',
1457a72cfb80SBram Moolenaar      'function CheckScriptSuccess # comment',
1458a72cfb80SBram Moolenaar      ])
1459a72cfb80SBram Moolenaar  CheckScriptFailure([
1460a72cfb80SBram Moolenaar      'vim9script',
1461a72cfb80SBram Moolenaar      'function CheckScriptSuccess# comment',
1462a72cfb80SBram Moolenaar      ], 'E488:')
1463a72cfb80SBram Moolenaar
1464a72cfb80SBram Moolenaar  CheckScriptSuccess([
1465a72cfb80SBram Moolenaar      'vim9script',
1466a72cfb80SBram Moolenaar      'func DeleteMe()',
1467a72cfb80SBram Moolenaar      'endfunc',
1468a72cfb80SBram Moolenaar      'delfunction DeleteMe # comment',
1469a72cfb80SBram Moolenaar      ])
1470a72cfb80SBram Moolenaar  CheckScriptFailure([
1471a72cfb80SBram Moolenaar      'vim9script',
1472a72cfb80SBram Moolenaar      'func DeleteMe()',
1473a72cfb80SBram Moolenaar      'endfunc',
1474a72cfb80SBram Moolenaar      'delfunction DeleteMe# comment',
1475a72cfb80SBram Moolenaar      ], 'E488:')
1476a72cfb80SBram Moolenaar
1477a72cfb80SBram Moolenaar  CheckScriptSuccess([
1478a72cfb80SBram Moolenaar      'vim9script',
1479a72cfb80SBram Moolenaar      'call execute("ls") # comment',
1480a72cfb80SBram Moolenaar      ])
1481a72cfb80SBram Moolenaar  CheckScriptFailure([
1482a72cfb80SBram Moolenaar      'vim9script',
1483a72cfb80SBram Moolenaar      'call execute("ls")# comment',
1484a72cfb80SBram Moolenaar      ], 'E488:')
14852c5ed4e3SBram Moolenaarenddef
14862c5ed4e3SBram Moolenaar
14872c5ed4e3SBram Moolenaardef Test_vim9_comment_gui()
14882c5ed4e3SBram Moolenaar  CheckCanRunGui
14892c5ed4e3SBram Moolenaar
14902c5ed4e3SBram Moolenaar  CheckScriptFailure([
14912c5ed4e3SBram Moolenaar      'vim9script',
14922c5ed4e3SBram Moolenaar      'gui#comment'
14932c5ed4e3SBram Moolenaar      ], 'E499:')
14942c5ed4e3SBram Moolenaar  CheckScriptFailure([
14952c5ed4e3SBram Moolenaar      'vim9script',
14962c5ed4e3SBram Moolenaar      'gui -f#comment'
14972c5ed4e3SBram Moolenaar      ], 'E499:')
14987a092245SBram Moolenaarenddef
14997a092245SBram Moolenaar
1500a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled()
1501a26b9700SBram Moolenaar  au TabEnter *.vim let g:entered = 1
1502a26b9700SBram Moolenaar  au TabEnter *.x let g:entered = 2
1503a26b9700SBram Moolenaar
1504a26b9700SBram Moolenaar  edit test.vim
1505a26b9700SBram Moolenaar  doautocmd TabEnter #comment
1506a26b9700SBram Moolenaar  assert_equal(1, g:entered)
1507a26b9700SBram Moolenaar
1508a26b9700SBram Moolenaar  doautocmd TabEnter f.x
1509a26b9700SBram Moolenaar  assert_equal(2, g:entered)
1510a26b9700SBram Moolenaar
1511a26b9700SBram Moolenaar  g:entered = 0
1512a26b9700SBram Moolenaar  doautocmd TabEnter f.x #comment
1513a26b9700SBram Moolenaar  assert_equal(2, g:entered)
1514a26b9700SBram Moolenaar
1515a26b9700SBram Moolenaar  assert_fails('doautocmd Syntax#comment', 'E216:')
1516a26b9700SBram Moolenaar
1517a26b9700SBram Moolenaar  au! TabEnter
1518a26b9700SBram Moolenaar  unlet g:entered
1519d72c1bf0SBram Moolenaar
1520d72c1bf0SBram Moolenaar  CheckScriptSuccess([
1521d72c1bf0SBram Moolenaar      'vim9script',
1522d72c1bf0SBram Moolenaar      'let g:var = 123',
1523d72c1bf0SBram Moolenaar      'let w:var = 777',
1524d72c1bf0SBram Moolenaar      'unlet g:var w:var # something',
1525d72c1bf0SBram Moolenaar      ])
1526d72c1bf0SBram Moolenaar
1527d72c1bf0SBram Moolenaar  CheckScriptFailure([
1528d72c1bf0SBram Moolenaar      'vim9script',
1529d72c1bf0SBram Moolenaar      'let g:var = 123',
1530d72c1bf0SBram Moolenaar      'unlet g:var# comment',
1531d72c1bf0SBram Moolenaar      ], 'E108:')
1532d72c1bf0SBram Moolenaar
1533d72c1bf0SBram Moolenaar  CheckScriptFailure([
1534d72c1bf0SBram Moolenaar      'let g:var = 123',
1535d72c1bf0SBram Moolenaar      'unlet g:var # something',
1536d72c1bf0SBram Moolenaar      ], 'E488:')
1537faac4104SBram Moolenaar
1538faac4104SBram Moolenaar  CheckScriptSuccess([
1539faac4104SBram Moolenaar      'vim9script',
1540faac4104SBram Moolenaar      'if 1 # comment',
1541faac4104SBram Moolenaar      '  echo "yes"',
1542faac4104SBram Moolenaar      'elseif 2 #comment',
1543faac4104SBram Moolenaar      '  echo "no"',
1544faac4104SBram Moolenaar      'endif',
1545faac4104SBram Moolenaar      ])
1546faac4104SBram Moolenaar
1547faac4104SBram Moolenaar  CheckScriptFailure([
1548faac4104SBram Moolenaar      'vim9script',
1549faac4104SBram Moolenaar      'if 1# comment',
1550faac4104SBram Moolenaar      '  echo "yes"',
1551faac4104SBram Moolenaar      'endif',
1552faac4104SBram Moolenaar      ], 'E15:')
1553faac4104SBram Moolenaar
1554faac4104SBram Moolenaar  CheckScriptFailure([
1555faac4104SBram Moolenaar      'vim9script',
1556faac4104SBram Moolenaar      'if 0 # comment',
1557faac4104SBram Moolenaar      '  echo "yes"',
1558faac4104SBram Moolenaar      'elseif 2#comment',
1559faac4104SBram Moolenaar      '  echo "no"',
1560faac4104SBram Moolenaar      'endif',
1561faac4104SBram Moolenaar      ], 'E15:')
1562faac4104SBram Moolenaar
1563faac4104SBram Moolenaar  CheckScriptSuccess([
1564faac4104SBram Moolenaar      'vim9script',
1565faac4104SBram Moolenaar      'let # comment',
1566faac4104SBram Moolenaar      ])
1567faac4104SBram Moolenaar
1568faac4104SBram Moolenaar  CheckScriptFailure([
1569faac4104SBram Moolenaar      'vim9script',
1570faac4104SBram Moolenaar      'let# comment',
1571faac4104SBram Moolenaar      ], 'E121:')
1572faac4104SBram Moolenaar
1573faac4104SBram Moolenaar  CheckScriptSuccess([
1574faac4104SBram Moolenaar      'vim9script',
1575faac4104SBram Moolenaar      'let v:version # comment',
1576faac4104SBram Moolenaar      ])
1577faac4104SBram Moolenaar
1578faac4104SBram Moolenaar  CheckScriptFailure([
1579faac4104SBram Moolenaar      'vim9script',
1580faac4104SBram Moolenaar      'let v:version# comment',
1581faac4104SBram Moolenaar      ], 'E121:')
1582faac4104SBram Moolenaar
1583faac4104SBram Moolenaar  CheckScriptSuccess([
1584faac4104SBram Moolenaar      'vim9script',
1585faac4104SBram Moolenaar      'new'
1586faac4104SBram Moolenaar      'call setline(1, ["# define pat", "last"])',
1587faac4104SBram Moolenaar      '$',
1588faac4104SBram Moolenaar      'dsearch /pat/ #comment',
1589faac4104SBram Moolenaar      'bwipe!',
1590faac4104SBram Moolenaar      ])
1591faac4104SBram Moolenaar
1592faac4104SBram Moolenaar  CheckScriptFailure([
1593faac4104SBram Moolenaar      'vim9script',
1594faac4104SBram Moolenaar      'new'
1595faac4104SBram Moolenaar      'call setline(1, ["# define pat", "last"])',
1596faac4104SBram Moolenaar      '$',
1597faac4104SBram Moolenaar      'dsearch /pat/#comment',
1598faac4104SBram Moolenaar      'bwipe!',
1599faac4104SBram Moolenaar      ], 'E488:')
1600a26b9700SBram Moolenaarenddef
1601a26b9700SBram Moolenaar
1602585fea7bSBram Moolenaar" Keep this last, it messes up highlighting.
1603585fea7bSBram Moolenaardef Test_substitute_cmd()
1604585fea7bSBram Moolenaar  new
1605585fea7bSBram Moolenaar  setline(1, 'something')
1606585fea7bSBram Moolenaar  :substitute(some(other(
1607585fea7bSBram Moolenaar  assert_equal('otherthing', getline(1))
1608585fea7bSBram Moolenaar  bwipe!
1609585fea7bSBram Moolenaar
1610585fea7bSBram Moolenaar  " also when the context is Vim9 script
1611585fea7bSBram Moolenaar  let lines =<< trim END
1612585fea7bSBram Moolenaar    vim9script
1613585fea7bSBram Moolenaar    new
1614585fea7bSBram Moolenaar    setline(1, 'something')
1615585fea7bSBram Moolenaar    :substitute(some(other(
1616585fea7bSBram Moolenaar    assert_equal('otherthing', getline(1))
1617585fea7bSBram Moolenaar    bwipe!
1618585fea7bSBram Moolenaar  END
1619585fea7bSBram Moolenaar  writefile(lines, 'Xvim9lines')
1620585fea7bSBram Moolenaar  source Xvim9lines
1621585fea7bSBram Moolenaar
1622585fea7bSBram Moolenaar  delete('Xvim9lines')
1623585fea7bSBram Moolenaarenddef
1624585fea7bSBram Moolenaar
16258a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
1626