18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language.
28a7d6542SBram Moolenaar
3673660abSBram Moolenaarsource check.vim
4ad39c094SBram Moolenaarsource view_util.vim
5*cfe435d7SBram Moolenaarsource vim9.vim
68a7d6542SBram Moolenaar
78a7d6542SBram Moolenaardef Test_syntax()
88a7d6542SBram Moolenaar  let var = 234
98a7d6542SBram Moolenaar  let other: list<string> = ['asdf']
108a7d6542SBram Moolenaarenddef
118a7d6542SBram Moolenaar
126e587dcbSBram Moolenaarlet s:appendToMe = 'xxx'
136e587dcbSBram Moolenaarlet s:addToMe = 111
14401d9ffbSBram Moolenaarlet g:existing = 'yes'
15a8c17704SBram Moolenaarlet g:inc_counter = 1
16a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some'
176e587dcbSBram Moolenaar
188a7d6542SBram Moolenaardef Test_assignment()
198a7d6542SBram Moolenaar  let bool1: bool = true
208a7d6542SBram Moolenaar  assert_equal(v:true, bool1)
218a7d6542SBram Moolenaar  let bool2: bool = false
228a7d6542SBram Moolenaar  assert_equal(v:false, bool2)
238a7d6542SBram Moolenaar
240c2ca58eSBram Moolenaar  let list1: list<bool> = [false, true, false]
258a7d6542SBram Moolenaar  let list2: list<number> = [1, 2, 3]
260c2ca58eSBram Moolenaar  let list3: list<string> = ['sdf', 'asdf']
270c2ca58eSBram Moolenaar  let list4: list<any> = ['yes', true, 1234]
280c2ca58eSBram Moolenaar  let list5: list<blob> = [0z01, 0z02]
298a7d6542SBram Moolenaar
30436472f5SBram Moolenaar  let listS: list<string> = []
31436472f5SBram Moolenaar  let listN: list<number> = []
328a7d6542SBram Moolenaar
330c2ca58eSBram Moolenaar  let dict1: dict<bool> = #{one: false, two: true}
348a7d6542SBram Moolenaar  let dict2: dict<number> = #{one: 1, two: 2}
350c2ca58eSBram Moolenaar  let dict3: dict<string> = #{key: 'value'}
360c2ca58eSBram Moolenaar  let dict4: dict<any> = #{one: 1, two: '2'}
370c2ca58eSBram Moolenaar  let dict5: dict<blob> = #{one: 0z01, tw: 0z02}
38b283a8a6SBram Moolenaar
39f93c7feaSBram Moolenaar  call CheckDefFailure(['let x:string'], 'E1069:')
40f93c7feaSBram Moolenaar  call CheckDefFailure(['let x:string = "x"'], 'E1069:')
41f93c7feaSBram Moolenaar  call CheckDefFailure(['let a:string = "x"'], 'E1082:')
42f93c7feaSBram Moolenaar
439be61bbbSBram Moolenaar  let a: number = 6
449be61bbbSBram Moolenaar  assert_equal(6, a)
459be61bbbSBram Moolenaar
4642a480bfSBram Moolenaar  if has('channel')
4742a480bfSBram Moolenaar    let chan1: channel
48fbdd08edSBram Moolenaar    let job1: job
49f51cb4e0SBram Moolenaar    let job2: job = job_start('willfail')
5042a480bfSBram Moolenaar  endif
51fbdd08edSBram Moolenaar  if has('float')
52fbdd08edSBram Moolenaar    let float1: float = 3.4
53fbdd08edSBram Moolenaar  endif
545deeb3f1SBram Moolenaar  let Funky1: func
555deeb3f1SBram Moolenaar  let Funky2: func = function('len')
565deeb3f1SBram Moolenaar  let Party2: func = funcref('Test_syntax')
5742a480bfSBram Moolenaar
58cb711abfSBram Moolenaar  # type becomes list<any>
5961a6d4e4SBram Moolenaar  let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
60cb711abfSBram Moolenaar  # type becomes dict<any>
615381c7a1SBram Moolenaar  let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
6261a6d4e4SBram Moolenaar
63401d9ffbSBram Moolenaar  g:newvar = 'new'
64401d9ffbSBram Moolenaar  assert_equal('new', g:newvar)
65401d9ffbSBram Moolenaar
66401d9ffbSBram Moolenaar  assert_equal('yes', g:existing)
67401d9ffbSBram Moolenaar  g:existing = 'no'
68401d9ffbSBram Moolenaar  assert_equal('no', g:existing)
69401d9ffbSBram Moolenaar
70b283a8a6SBram Moolenaar  v:char = 'abc'
716e587dcbSBram Moolenaar  assert_equal('abc', v:char)
72b283a8a6SBram Moolenaar
73b283a8a6SBram Moolenaar  $ENVVAR = 'foobar'
746e587dcbSBram Moolenaar  assert_equal('foobar', $ENVVAR)
75b283a8a6SBram Moolenaar  $ENVVAR = ''
766e587dcbSBram Moolenaar
77fd1823e0SBram Moolenaar  s:appendToMe ..= 'yyy'
78fd1823e0SBram Moolenaar  assert_equal('xxxyyy', s:appendToMe)
79fd1823e0SBram Moolenaar  s:addToMe += 222
80fd1823e0SBram Moolenaar  assert_equal(333, s:addToMe)
810bbf722aSBram Moolenaar  s:newVar = 'new'
820bbf722aSBram Moolenaar  assert_equal('new', s:newVar)
83a8c17704SBram Moolenaar
84a8c17704SBram Moolenaar  set ts=7
85a8c17704SBram Moolenaar  &ts += 1
86a8c17704SBram Moolenaar  assert_equal(8, &ts)
8780c34ca3SBram Moolenaar  &ts -= 3
8880c34ca3SBram Moolenaar  assert_equal(5, &ts)
8980c34ca3SBram Moolenaar  &ts *= 2
9080c34ca3SBram Moolenaar  assert_equal(10, &ts)
9180c34ca3SBram Moolenaar  &ts /= 3
9280c34ca3SBram Moolenaar  assert_equal(3, &ts)
9380c34ca3SBram Moolenaar  set ts=10
9480c34ca3SBram Moolenaar  &ts %= 4
9580c34ca3SBram Moolenaar  assert_equal(2, &ts)
96a8c17704SBram Moolenaar  call CheckDefFailure(['&notex += 3'], 'E113:')
97a8c17704SBram Moolenaar  call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
98a8c17704SBram Moolenaar  call CheckDefFailure(['&path += 3'], 'E1013:')
99cb711abfSBram Moolenaar  # test freeing ISN_STOREOPT
100585fea7bSBram Moolenaar  call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
10180c34ca3SBram Moolenaar  &ts = 8
102a8c17704SBram Moolenaar
103a8c17704SBram Moolenaar  g:inc_counter += 1
104a8c17704SBram Moolenaar  assert_equal(2, g:inc_counter)
105a8c17704SBram Moolenaar
106a8c17704SBram Moolenaar  $SOME_ENV_VAR ..= 'more'
107a8c17704SBram Moolenaar  assert_equal('somemore', $SOME_ENV_VAR)
108a8c17704SBram Moolenaar  call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:')
109a8c17704SBram Moolenaar  call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:')
110a8c17704SBram Moolenaar
111a8c17704SBram Moolenaar  @a = 'areg'
112a8c17704SBram Moolenaar  @a ..= 'add'
113a8c17704SBram Moolenaar  assert_equal('aregadd', @a)
114a8c17704SBram Moolenaar  call CheckDefFailure(['@a += "more"'], 'E1013:')
115a8c17704SBram Moolenaar  call CheckDefFailure(['@a += 123'], 'E1013:')
116e69f6d04SBram Moolenaar
117e69f6d04SBram Moolenaar  v:errmsg = 'none'
118e69f6d04SBram Moolenaar  v:errmsg ..= 'again'
119e69f6d04SBram Moolenaar  assert_equal('noneagain', v:errmsg)
120e69f6d04SBram Moolenaar  call CheckDefFailure(['v:errmsg += "more"'], 'E1013:')
121e69f6d04SBram Moolenaar  call CheckDefFailure(['v:errmsg += 123'], 'E1013:')
1225deeb3f1SBram Moolenaarenddef
1235deeb3f1SBram Moolenaar
124d3aac291SBram Moolenaardef Test_assignment_local()
125d3aac291SBram Moolenaar  " Test in a separated file in order not to the current buffer/window/tab is
126d3aac291SBram Moolenaar  " changed.
127d3aac291SBram Moolenaar  let script_lines: list<string> =<< trim END
128d3aac291SBram Moolenaar    let b:existing = 'yes'
129d3aac291SBram Moolenaar    let w:existing = 'yes'
130d3aac291SBram Moolenaar    let t:existing = 'yes'
131d3aac291SBram Moolenaar
132d3aac291SBram Moolenaar    def Test_assignment_local_internal()
133d3aac291SBram Moolenaar      b:newvar = 'new'
134d3aac291SBram Moolenaar      assert_equal('new', b:newvar)
135d3aac291SBram Moolenaar      assert_equal('yes', b:existing)
136d3aac291SBram Moolenaar      b:existing = 'no'
137d3aac291SBram Moolenaar      assert_equal('no', b:existing)
138d3aac291SBram Moolenaar
139d3aac291SBram Moolenaar      w:newvar = 'new'
140d3aac291SBram Moolenaar      assert_equal('new', w:newvar)
141d3aac291SBram Moolenaar      assert_equal('yes', w:existing)
142d3aac291SBram Moolenaar      w:existing = 'no'
143d3aac291SBram Moolenaar      assert_equal('no', w:existing)
144d3aac291SBram Moolenaar
145d3aac291SBram Moolenaar      t:newvar = 'new'
146d3aac291SBram Moolenaar      assert_equal('new', t:newvar)
147d3aac291SBram Moolenaar      assert_equal('yes', t:existing)
148d3aac291SBram Moolenaar      t:existing = 'no'
149d3aac291SBram Moolenaar      assert_equal('no', t:existing)
150d3aac291SBram Moolenaar    enddef
151d3aac291SBram Moolenaar    call Test_assignment_local_internal()
152d3aac291SBram Moolenaar  END
153d3aac291SBram Moolenaar  call CheckScriptSuccess(script_lines)
154d3aac291SBram Moolenaarenddef
155d3aac291SBram Moolenaar
1565deeb3f1SBram Moolenaardef Test_assignment_default()
157e69f6d04SBram Moolenaar
158cb711abfSBram Moolenaar  # Test default values.
159e69f6d04SBram Moolenaar  let thebool: bool
160e69f6d04SBram Moolenaar  assert_equal(v:false, thebool)
161e69f6d04SBram Moolenaar
162e69f6d04SBram Moolenaar  let thenumber: number
163e69f6d04SBram Moolenaar  assert_equal(0, thenumber)
164e69f6d04SBram Moolenaar
165e69f6d04SBram Moolenaar  if has('float')
166e69f6d04SBram Moolenaar    let thefloat: float
167e69f6d04SBram Moolenaar    assert_equal(0.0, thefloat)
168e69f6d04SBram Moolenaar  endif
169e69f6d04SBram Moolenaar
170e69f6d04SBram Moolenaar  let thestring: string
171e69f6d04SBram Moolenaar  assert_equal('', thestring)
172e69f6d04SBram Moolenaar
173e69f6d04SBram Moolenaar  let theblob: blob
174e69f6d04SBram Moolenaar  assert_equal(0z, theblob)
175e69f6d04SBram Moolenaar
1765deeb3f1SBram Moolenaar  let Thefunc: func
1775deeb3f1SBram Moolenaar  assert_equal(test_null_function(), Thefunc)
178e69f6d04SBram Moolenaar
179e69f6d04SBram Moolenaar  let thelist: list<any>
180e69f6d04SBram Moolenaar  assert_equal([], thelist)
181e69f6d04SBram Moolenaar
182e69f6d04SBram Moolenaar  let thedict: dict<any>
183e69f6d04SBram Moolenaar  assert_equal({}, thedict)
184e69f6d04SBram Moolenaar
1852c869deeSBram Moolenaar  if has('channel')
186e69f6d04SBram Moolenaar    let thejob: job
187e69f6d04SBram Moolenaar    assert_equal(test_null_job(), thejob)
188e69f6d04SBram Moolenaar
189e69f6d04SBram Moolenaar    let thechannel: channel
190e69f6d04SBram Moolenaar    assert_equal(test_null_channel(), thechannel)
1912c869deeSBram Moolenaar  endif
192585fea7bSBram Moolenaar
193585fea7bSBram Moolenaar  let nr = 1234 | nr = 5678
194585fea7bSBram Moolenaar  assert_equal(5678, nr)
1958a7d6542SBram Moolenaarenddef
1968a7d6542SBram Moolenaar
197cab27678SBram Moolenaardef Mess(): string
198cab27678SBram Moolenaar  v:foldstart = 123
199cab27678SBram Moolenaar  return 'xxx'
200cab27678SBram Moolenaarenddef
201cab27678SBram Moolenaar
202d72c1bf0SBram Moolenaardef Test_assignment_failure()
2038a7d6542SBram Moolenaar  call CheckDefFailure(['let var=234'], 'E1004:')
2048a7d6542SBram Moolenaar  call CheckDefFailure(['let var =234'], 'E1004:')
2058a7d6542SBram Moolenaar  call CheckDefFailure(['let var= 234'], 'E1004:')
2068a7d6542SBram Moolenaar
2078a7d6542SBram Moolenaar  call CheckDefFailure(['let true = 1'], 'E1034:')
2088a7d6542SBram Moolenaar  call CheckDefFailure(['let false = 1'], 'E1034:')
2098a7d6542SBram Moolenaar
2109be61bbbSBram Moolenaar  call CheckDefFailure(['let [a; b; c] = g:list'], 'E452:')
2119be61bbbSBram Moolenaar
212e69f6d04SBram Moolenaar  call CheckDefFailure(['let somevar'], "E1022:")
2139be61bbbSBram Moolenaar  call CheckDefFailure(['let &option'], 'E1052:')
2149be61bbbSBram Moolenaar  call CheckDefFailure(['&g:option = 5'], 'E113:')
2159be61bbbSBram Moolenaar
2169be61bbbSBram Moolenaar  call CheckDefFailure(['let $VAR = 5'], 'E1065:')
2179be61bbbSBram Moolenaar
2189be61bbbSBram Moolenaar  call CheckDefFailure(['let @~ = 5'], 'E354:')
2199be61bbbSBram Moolenaar  call CheckDefFailure(['let @a = 5'], 'E1066:')
2209be61bbbSBram Moolenaar
2219be61bbbSBram Moolenaar  call CheckDefFailure(['let g:var = 5'], 'E1016:')
222d3aac291SBram Moolenaar  call CheckDefFailure(['let w:var = 5'], 'E1079:')
223d3aac291SBram Moolenaar  call CheckDefFailure(['let b:var = 5'], 'E1078:')
224d3aac291SBram Moolenaar  call CheckDefFailure(['let t:var = 5'], 'E1080:')
2259be61bbbSBram Moolenaar
2269be61bbbSBram Moolenaar  call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
2279be61bbbSBram Moolenaar  call CheckDefFailure(['let xnr += 4'], 'E1020:')
2289be61bbbSBram Moolenaar
22933fa29cfSBram Moolenaar  call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef'], 'E1050:')
23033fa29cfSBram Moolenaar
2318a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>')
2328a7d6542SBram Moolenaar  call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
2338a7d6542SBram Moolenaar
2348a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
2358a7d6542SBram Moolenaar  call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
2368a7d6542SBram Moolenaar
2378a7d6542SBram Moolenaar  call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:')
2388a7d6542SBram Moolenaar  call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void')
23942a480bfSBram Moolenaar
240d77a8525SBram Moolenaar  call CheckDefFailure(['let var: dict <number>'], 'E1068:')
24142a480bfSBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
242cab27678SBram Moolenaar
243cab27678SBram Moolenaar  call assert_fails('s/^/\=Mess()/n', 'E794:')
244cab27678SBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
245d72c1bf0SBram Moolenaarenddef
246d72c1bf0SBram Moolenaar
247d72c1bf0SBram Moolenaardef Test_unlet()
248d72c1bf0SBram Moolenaar  g:somevar = 'yes'
249d72c1bf0SBram Moolenaar  assert_true(exists('g:somevar'))
250d72c1bf0SBram Moolenaar  unlet g:somevar
251d72c1bf0SBram Moolenaar  assert_false(exists('g:somevar'))
252d72c1bf0SBram Moolenaar  unlet! g:somevar
253d72c1bf0SBram Moolenaar
254d72c1bf0SBram Moolenaar  call CheckScriptFailure([
255d72c1bf0SBram Moolenaar        'vim9script',
256d72c1bf0SBram Moolenaar        'let svar = 123',
257d72c1bf0SBram Moolenaar        'unlet svar',
258d72c1bf0SBram Moolenaar        ], 'E1081:')
259d72c1bf0SBram Moolenaar  call CheckScriptFailure([
260d72c1bf0SBram Moolenaar        'vim9script',
261d72c1bf0SBram Moolenaar        'let svar = 123',
262d72c1bf0SBram Moolenaar        'unlet s:svar',
263d72c1bf0SBram Moolenaar        ], 'E1081:')
264d72c1bf0SBram Moolenaar  call CheckScriptFailure([
265d72c1bf0SBram Moolenaar        'vim9script',
266d72c1bf0SBram Moolenaar        'let svar = 123',
267d72c1bf0SBram Moolenaar        'def Func()',
268d72c1bf0SBram Moolenaar        '  unlet svar',
269d72c1bf0SBram Moolenaar        'enddef',
270d72c1bf0SBram Moolenaar        ], 'E1081:')
271d72c1bf0SBram Moolenaar  call CheckScriptFailure([
272d72c1bf0SBram Moolenaar        'vim9script',
273d72c1bf0SBram Moolenaar        'let svar = 123',
274d72c1bf0SBram Moolenaar        'def Func()',
275d72c1bf0SBram Moolenaar        '  unlet s:svar',
276d72c1bf0SBram Moolenaar        'enddef',
277d72c1bf0SBram Moolenaar        ], 'E1081:')
2787bdaea6eSBram Moolenaar
2797bdaea6eSBram Moolenaar  $ENVVAR = 'foobar'
2807bdaea6eSBram Moolenaar  assert_equal('foobar', $ENVVAR)
2817bdaea6eSBram Moolenaar  unlet $ENVVAR
2827bdaea6eSBram Moolenaar  assert_equal('', $ENVVAR)
283d72c1bf0SBram Moolenaarenddef
284599c89c8SBram Moolenaar
285599c89c8SBram Moolenaarfunc Test_wrong_type()
286599c89c8SBram Moolenaar  call CheckDefFailure(['let var: list<nothing>'], 'E1010:')
287599c89c8SBram Moolenaar  call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
288599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<nothing>'], 'E1010:')
289599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:')
290599c89c8SBram Moolenaar
291599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<number'], 'E1009:')
292599c89c8SBram Moolenaar  call CheckDefFailure(['let var: dict<list<number>'], 'E1009:')
29342a480bfSBram Moolenaar
29442a480bfSBram Moolenaar  call CheckDefFailure(['let var: ally'], 'E1010:')
29542a480bfSBram Moolenaar  call CheckDefFailure(['let var: bram'], 'E1010:')
29642a480bfSBram Moolenaar  call CheckDefFailure(['let var: cathy'], 'E1010:')
29742a480bfSBram Moolenaar  call CheckDefFailure(['let var: dom'], 'E1010:')
29842a480bfSBram Moolenaar  call CheckDefFailure(['let var: freddy'], 'E1010:')
29942a480bfSBram Moolenaar  call CheckDefFailure(['let var: john'], 'E1010:')
30042a480bfSBram Moolenaar  call CheckDefFailure(['let var: larry'], 'E1010:')
30142a480bfSBram Moolenaar  call CheckDefFailure(['let var: ned'], 'E1010:')
30242a480bfSBram Moolenaar  call CheckDefFailure(['let var: pam'], 'E1010:')
30342a480bfSBram Moolenaar  call CheckDefFailure(['let var: sam'], 'E1010:')
30442a480bfSBram Moolenaar  call CheckDefFailure(['let var: vim'], 'E1010:')
3058a7d6542SBram Moolenaarendfunc
3068a7d6542SBram Moolenaar
3078a7d6542SBram Moolenaarfunc Test_const()
3088a7d6542SBram Moolenaar  call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:')
3098a7d6542SBram Moolenaar  call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:')
3108a7d6542SBram Moolenaar  call CheckDefFailure(['const two'], 'E1021:')
3119be61bbbSBram Moolenaar  call CheckDefFailure(['const &option'], 'E996:')
3128a7d6542SBram Moolenaarendfunc
3138a7d6542SBram Moolenaar
3148a7d6542SBram Moolenaardef Test_block()
3158a7d6542SBram Moolenaar  let outer = 1
3168a7d6542SBram Moolenaar  {
3178a7d6542SBram Moolenaar    let inner = 2
3188a7d6542SBram Moolenaar    assert_equal(1, outer)
3198a7d6542SBram Moolenaar    assert_equal(2, inner)
3208a7d6542SBram Moolenaar  }
3218a7d6542SBram Moolenaar  assert_equal(1, outer)
3228a7d6542SBram Moolenaarenddef
3238a7d6542SBram Moolenaar
3248a7d6542SBram Moolenaarfunc Test_block_failure()
3258a7d6542SBram Moolenaar  call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
326585fea7bSBram Moolenaar  call CheckDefFailure(['}'], 'E1025:')
327585fea7bSBram Moolenaar  call CheckDefFailure(['{', 'echo 1'], 'E1026:')
3288a7d6542SBram Moolenaarendfunc
3298a7d6542SBram Moolenaar
330585fea7bSBram Moolenaardef Test_cmd_modifier()
331585fea7bSBram Moolenaar  tab echo '0'
332585fea7bSBram Moolenaar  call CheckDefFailure(['5tab echo 3'], 'E16:')
333585fea7bSBram Moolenaarenddef
334585fea7bSBram Moolenaar
3358a7d6542SBram Moolenaardef Test_try_catch()
3368a7d6542SBram Moolenaar  let l = []
3377a092245SBram Moolenaar  try # comment
3388a7d6542SBram Moolenaar    add(l, '1')
3398a7d6542SBram Moolenaar    throw 'wrong'
3408a7d6542SBram Moolenaar    add(l, '2')
3417a092245SBram Moolenaar  catch # comment
3428a7d6542SBram Moolenaar    add(l, v:exception)
3437a092245SBram Moolenaar  finally # comment
3448a7d6542SBram Moolenaar    add(l, '3')
3457a092245SBram Moolenaar  endtry # comment
3468a7d6542SBram Moolenaar  assert_equal(['1', 'wrong', '3'], l)
3478a7d6542SBram Moolenaarenddef
3488a7d6542SBram Moolenaar
349257cc5eeSBram Moolenaardef ThrowFromDef()
350a72cfb80SBram Moolenaar  throw "getout" # comment
351257cc5eeSBram Moolenaarenddef
352257cc5eeSBram Moolenaar
353257cc5eeSBram Moolenaarfunc CatchInFunc()
354257cc5eeSBram Moolenaar  try
355257cc5eeSBram Moolenaar    call ThrowFromDef()
356257cc5eeSBram Moolenaar  catch
357257cc5eeSBram Moolenaar    let g:thrown_func = v:exception
358257cc5eeSBram Moolenaar  endtry
359257cc5eeSBram Moolenaarendfunc
360257cc5eeSBram Moolenaar
361257cc5eeSBram Moolenaardef CatchInDef()
362257cc5eeSBram Moolenaar  try
363257cc5eeSBram Moolenaar    ThrowFromDef()
364257cc5eeSBram Moolenaar  catch
365257cc5eeSBram Moolenaar    g:thrown_def = v:exception
366257cc5eeSBram Moolenaar  endtry
367257cc5eeSBram Moolenaarenddef
368257cc5eeSBram Moolenaar
369f575adffSBram Moolenaardef ReturnFinally(): string
370f575adffSBram Moolenaar  try
371f575adffSBram Moolenaar    return 'intry'
372f575adffSBram Moolenaar  finally
373f575adffSBram Moolenaar    g:in_finally = 'finally'
374f575adffSBram Moolenaar  endtry
375f575adffSBram Moolenaar  return 'end'
376f575adffSBram Moolenaarenddef
377f575adffSBram Moolenaar
378257cc5eeSBram Moolenaardef Test_try_catch_nested()
379257cc5eeSBram Moolenaar  CatchInFunc()
380257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_func)
381257cc5eeSBram Moolenaar
382257cc5eeSBram Moolenaar  CatchInDef()
383257cc5eeSBram Moolenaar  assert_equal('getout', g:thrown_def)
384f575adffSBram Moolenaar
385f575adffSBram Moolenaar  assert_equal('intry', ReturnFinally())
386f575adffSBram Moolenaar  assert_equal('finally', g:in_finally)
387f575adffSBram Moolenaarenddef
388f575adffSBram Moolenaar
389f575adffSBram Moolenaardef Test_try_catch_match()
390f575adffSBram Moolenaar  let seq = 'a'
391f575adffSBram Moolenaar  try
392f575adffSBram Moolenaar    throw 'something'
393f575adffSBram Moolenaar  catch /nothing/
394f575adffSBram Moolenaar    seq ..= 'x'
395f575adffSBram Moolenaar  catch /some/
396f575adffSBram Moolenaar    seq ..= 'b'
397f575adffSBram Moolenaar  catch /asdf/
398f575adffSBram Moolenaar    seq ..= 'x'
399e8c4abbbSBram Moolenaar  catch ?a\?sdf?
400e8c4abbbSBram Moolenaar    seq ..= 'y'
401f575adffSBram Moolenaar  finally
402f575adffSBram Moolenaar    seq ..= 'c'
403f575adffSBram Moolenaar  endtry
404f575adffSBram Moolenaar  assert_equal('abc', seq)
405257cc5eeSBram Moolenaarenddef
406257cc5eeSBram Moolenaar
407e8c4abbbSBram Moolenaardef Test_try_catch_fails()
408e8c4abbbSBram Moolenaar  call CheckDefFailure(['catch'], 'E603:')
409e8c4abbbSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:')
410e8c4abbbSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:')
411585fea7bSBram Moolenaar  call CheckDefFailure(['finally'], 'E606:')
412585fea7bSBram Moolenaar  call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:')
413585fea7bSBram Moolenaar  call CheckDefFailure(['endtry'], 'E602:')
414585fea7bSBram Moolenaar  call CheckDefFailure(['while 1', 'endtry'], 'E170:')
415585fea7bSBram Moolenaar  call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
416585fea7bSBram Moolenaar  call CheckDefFailure(['if 2', 'endtry'], 'E171:')
417585fea7bSBram Moolenaar  call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
418585fea7bSBram Moolenaar
419a72cfb80SBram Moolenaar  call CheckDefFailure(['throw'], 'E1015:')
420585fea7bSBram Moolenaar  call CheckDefFailure(['throw xxx'], 'E1001:')
421e8c4abbbSBram Moolenaarenddef
422e8c4abbbSBram Moolenaar
4238a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END
4248a7d6542SBram Moolenaar  vim9script
4258a7d6542SBram Moolenaar  let name: string = 'bob'
4268a7d6542SBram Moolenaar  def Concat(arg: string): string
4278a7d6542SBram Moolenaar    return name .. arg
4288a7d6542SBram Moolenaar  enddef
4298a7d6542SBram Moolenaar  let g:result = Concat('bie')
4308a7d6542SBram Moolenaar  let g:localname = name
4318a7d6542SBram Moolenaar
4328a7d6542SBram Moolenaar  export const CONST = 1234
4338a7d6542SBram Moolenaar  export let exported = 9876
4346e587dcbSBram Moolenaar  export let exp_name = 'John'
4358a7d6542SBram Moolenaar  export def Exported(): string
4368a7d6542SBram Moolenaar    return 'Exported'
4378a7d6542SBram Moolenaar  enddef
4388a7d6542SBram MoolenaarEND
4398a7d6542SBram Moolenaar
4405269bd2aSBram Moolenaardef Test_vim9_import_export()
4418a7d6542SBram Moolenaar  let import_script_lines =<< trim END
4428a7d6542SBram Moolenaar    vim9script
4438a7d6542SBram Moolenaar    import {exported, Exported} from './Xexport.vim'
4448a7d6542SBram Moolenaar    g:imported = exported
4456e587dcbSBram Moolenaar    exported += 3
4466e587dcbSBram Moolenaar    g:imported_added = exported
4478a7d6542SBram Moolenaar    g:imported_func = Exported()
4486e587dcbSBram Moolenaar
4496e587dcbSBram Moolenaar    import {exp_name} from './Xexport.vim'
4506e587dcbSBram Moolenaar    g:imported_name = exp_name
4516e587dcbSBram Moolenaar    exp_name ..= ' Doe'
4526e587dcbSBram Moolenaar    g:imported_name_appended = exp_name
4535381c7a1SBram Moolenaar    g:imported_later = exported
4548a7d6542SBram Moolenaar  END
4558a7d6542SBram Moolenaar
4568a7d6542SBram Moolenaar  writefile(import_script_lines, 'Ximport.vim')
4578a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport.vim')
4588a7d6542SBram Moolenaar
4598a7d6542SBram Moolenaar  source Ximport.vim
4608a7d6542SBram Moolenaar
4618a7d6542SBram Moolenaar  assert_equal('bobbie', g:result)
4628a7d6542SBram Moolenaar  assert_equal('bob', g:localname)
4638a7d6542SBram Moolenaar  assert_equal(9876, g:imported)
4646e587dcbSBram Moolenaar  assert_equal(9879, g:imported_added)
4655381c7a1SBram Moolenaar  assert_equal(9879, g:imported_later)
4668a7d6542SBram Moolenaar  assert_equal('Exported', g:imported_func)
4676e587dcbSBram Moolenaar  assert_equal('John', g:imported_name)
4686e587dcbSBram Moolenaar  assert_equal('John Doe', g:imported_name_appended)
4698a7d6542SBram Moolenaar  assert_false(exists('g:name'))
4708a7d6542SBram Moolenaar
4718a7d6542SBram Moolenaar  unlet g:result
4728a7d6542SBram Moolenaar  unlet g:localname
4738a7d6542SBram Moolenaar  unlet g:imported
4746e587dcbSBram Moolenaar  unlet g:imported_added
4755381c7a1SBram Moolenaar  unlet g:imported_later
4768a7d6542SBram Moolenaar  unlet g:imported_func
4776e587dcbSBram Moolenaar  unlet g:imported_name g:imported_name_appended
4788a7d6542SBram Moolenaar  delete('Ximport.vim')
479f2d5c240SBram Moolenaar
4805381c7a1SBram Moolenaar  let import_in_def_lines =<< trim END
4815381c7a1SBram Moolenaar    vim9script
4825381c7a1SBram Moolenaar    def ImportInDef()
4835381c7a1SBram Moolenaar      import exported from './Xexport.vim'
4845381c7a1SBram Moolenaar      g:imported = exported
4855381c7a1SBram Moolenaar      exported += 7
4865381c7a1SBram Moolenaar      g:imported_added = exported
4875381c7a1SBram Moolenaar    enddef
4885381c7a1SBram Moolenaar    ImportInDef()
4895381c7a1SBram Moolenaar  END
4905381c7a1SBram Moolenaar  writefile(import_in_def_lines, 'Ximport2.vim')
4915381c7a1SBram Moolenaar  source Ximport2.vim
4925381c7a1SBram Moolenaar  " TODO: this should be 9879
4935381c7a1SBram Moolenaar  assert_equal(9876, g:imported)
4945381c7a1SBram Moolenaar  assert_equal(9883, g:imported_added)
4955381c7a1SBram Moolenaar  unlet g:imported
4965381c7a1SBram Moolenaar  unlet g:imported_added
4975381c7a1SBram Moolenaar  delete('Ximport2.vim')
4985381c7a1SBram Moolenaar
499f2d5c240SBram Moolenaar  let import_star_as_lines =<< trim END
500f2d5c240SBram Moolenaar    vim9script
501f2d5c240SBram Moolenaar    import * as Export from './Xexport.vim'
502f2d5c240SBram Moolenaar    def UseExport()
503f2d5c240SBram Moolenaar      g:imported = Export.exported
504f2d5c240SBram Moolenaar    enddef
505f2d5c240SBram Moolenaar    UseExport()
506f2d5c240SBram Moolenaar  END
507f2d5c240SBram Moolenaar  writefile(import_star_as_lines, 'Ximport.vim')
508f2d5c240SBram Moolenaar  source Ximport.vim
5095381c7a1SBram Moolenaar  assert_equal(9883, g:imported)
510f2d5c240SBram Moolenaar
511599c89c8SBram Moolenaar  let import_star_as_lines_no_dot =<< trim END
512599c89c8SBram Moolenaar    vim9script
513599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
514599c89c8SBram Moolenaar    def Func()
515599c89c8SBram Moolenaar      let dummy = 1
516599c89c8SBram Moolenaar      let imported = Export + dummy
517599c89c8SBram Moolenaar    enddef
518599c89c8SBram Moolenaar  END
519599c89c8SBram Moolenaar  writefile(import_star_as_lines_no_dot, 'Ximport.vim')
520599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1060:')
521599c89c8SBram Moolenaar
522599c89c8SBram Moolenaar  let import_star_as_lines_dot_space =<< trim END
523599c89c8SBram Moolenaar    vim9script
524599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
525599c89c8SBram Moolenaar    def Func()
526599c89c8SBram Moolenaar      let imported = Export . exported
527599c89c8SBram Moolenaar    enddef
528599c89c8SBram Moolenaar  END
529599c89c8SBram Moolenaar  writefile(import_star_as_lines_dot_space, 'Ximport.vim')
530599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1074:')
531599c89c8SBram Moolenaar
532599c89c8SBram Moolenaar  let import_star_as_lines_missing_name =<< trim END
533599c89c8SBram Moolenaar    vim9script
534599c89c8SBram Moolenaar    import * as Export from './Xexport.vim'
535599c89c8SBram Moolenaar    def Func()
536599c89c8SBram Moolenaar      let imported = Export.
537599c89c8SBram Moolenaar    enddef
538599c89c8SBram Moolenaar  END
539599c89c8SBram Moolenaar  writefile(import_star_as_lines_missing_name, 'Ximport.vim')
540599c89c8SBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
541599c89c8SBram Moolenaar
542f2d5c240SBram Moolenaar  let import_star_lines =<< trim END
543f2d5c240SBram Moolenaar    vim9script
544f2d5c240SBram Moolenaar    import * from './Xexport.vim'
545f2d5c240SBram Moolenaar    g:imported = exported
546f2d5c240SBram Moolenaar  END
547f2d5c240SBram Moolenaar  writefile(import_star_lines, 'Ximport.vim')
548f2d5c240SBram Moolenaar  assert_fails('source Ximport.vim', 'E1045:')
549f2d5c240SBram Moolenaar
550fa29c8abSBram Moolenaar  " try to import something that exists but is not exported
551fa29c8abSBram Moolenaar  let import_not_exported_lines =<< trim END
552fa29c8abSBram Moolenaar    vim9script
553fa29c8abSBram Moolenaar    import name from './Xexport.vim'
554fa29c8abSBram Moolenaar  END
555fa29c8abSBram Moolenaar  writefile(import_not_exported_lines, 'Ximport.vim')
556fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1049:')
557fa29c8abSBram Moolenaar
5585269bd2aSBram Moolenaar  " try to import something that is already defined
5595269bd2aSBram Moolenaar  let import_already_defined =<< trim END
5605269bd2aSBram Moolenaar    vim9script
5615269bd2aSBram Moolenaar    let exported = 'something'
5625269bd2aSBram Moolenaar    import exported from './Xexport.vim'
5635269bd2aSBram Moolenaar  END
5645269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5655269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5665269bd2aSBram Moolenaar
5675269bd2aSBram Moolenaar  " try to import something that is already defined
5685269bd2aSBram Moolenaar  import_already_defined =<< trim END
5695269bd2aSBram Moolenaar    vim9script
5705269bd2aSBram Moolenaar    let exported = 'something'
5715269bd2aSBram Moolenaar    import * as exported from './Xexport.vim'
5725269bd2aSBram Moolenaar  END
5735269bd2aSBram Moolenaar  writefile(import_already_defined, 'Ximport.vim')
5745269bd2aSBram Moolenaar  assert_fails('source Ximport.vim', 'E1073:')
5755269bd2aSBram Moolenaar
5765269bd2aSBram Moolenaar  " try to import something that is already defined
5775269bd2aSBram Moolenaar  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
585fa29c8abSBram Moolenaar  " import a very long name, requires making a copy
586fa29c8abSBram Moolenaar  let import_long_name_lines =<< trim END
587fa29c8abSBram Moolenaar    vim9script
588fa29c8abSBram Moolenaar    import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
589fa29c8abSBram Moolenaar  END
590fa29c8abSBram Moolenaar  writefile(import_long_name_lines, 'Ximport.vim')
591fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1048:')
592fa29c8abSBram Moolenaar
593fa29c8abSBram Moolenaar  let import_no_from_lines =<< trim END
594fa29c8abSBram Moolenaar    vim9script
595fa29c8abSBram Moolenaar    import name './Xexport.vim'
596fa29c8abSBram Moolenaar  END
597fa29c8abSBram Moolenaar  writefile(import_no_from_lines, 'Ximport.vim')
598fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1070:')
599fa29c8abSBram Moolenaar
600fa29c8abSBram Moolenaar  let import_invalid_string_lines =<< trim END
601fa29c8abSBram Moolenaar    vim9script
602fa29c8abSBram Moolenaar    import name from Xexport.vim
603fa29c8abSBram Moolenaar  END
604fa29c8abSBram Moolenaar  writefile(import_invalid_string_lines, 'Ximport.vim')
605fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1071:')
606fa29c8abSBram Moolenaar
607fa29c8abSBram Moolenaar  let import_wrong_name_lines =<< trim END
608fa29c8abSBram Moolenaar    vim9script
609fa29c8abSBram Moolenaar    import name from './XnoExport.vim'
610fa29c8abSBram Moolenaar  END
611fa29c8abSBram Moolenaar  writefile(import_wrong_name_lines, 'Ximport.vim')
612fa29c8abSBram Moolenaar  assert_fails('source Ximport.vim', 'E1053:')
613fa29c8abSBram Moolenaar
614fa29c8abSBram Moolenaar  let import_missing_comma_lines =<< trim END
615fa29c8abSBram Moolenaar    vim9script
616fa29c8abSBram Moolenaar    import {exported name} from './Xexport.vim'
617fa29c8abSBram Moolenaar  END
6185269bd2aSBram Moolenaar  writefile(import_missing_comma_lines, 'Ximport3.vim')
6195269bd2aSBram Moolenaar  assert_fails('source Ximport3.vim', 'E1046:')
620fa29c8abSBram Moolenaar
621f2d5c240SBram Moolenaar  delete('Ximport.vim')
6225269bd2aSBram Moolenaar  delete('Ximport3.vim')
6238a7d6542SBram Moolenaar  delete('Xexport.vim')
6248a7d6542SBram Moolenaar
625750802b5SBram Moolenaar  " Check that in a Vim9 script 'cpo' is set to the Vim default.
626750802b5SBram Moolenaar  set cpo&vi
627750802b5SBram Moolenaar  let cpo_before = &cpo
628750802b5SBram Moolenaar  let lines =<< trim END
629750802b5SBram Moolenaar    vim9script
630750802b5SBram Moolenaar    g:cpo_in_vim9script = &cpo
631750802b5SBram Moolenaar  END
632750802b5SBram Moolenaar  writefile(lines, 'Xvim9_script')
633750802b5SBram Moolenaar  source Xvim9_script
634750802b5SBram Moolenaar  assert_equal(cpo_before, &cpo)
635750802b5SBram Moolenaar  set cpo&vim
636750802b5SBram Moolenaar  assert_equal(&cpo, g:cpo_in_vim9script)
637750802b5SBram Moolenaar  delete('Xvim9_script')
638750802b5SBram Moolenaarenddef
639750802b5SBram Moolenaar
640750802b5SBram Moolenaardef Test_vim9script_fails()
6418a7d6542SBram Moolenaar  CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
6428a7d6542SBram Moolenaar  CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
643750802b5SBram Moolenaar  CheckScriptFailure(['export let some = 123'], 'E1042:')
644f2d5c240SBram Moolenaar  CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:')
645750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:')
646750802b5SBram Moolenaar  CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
647750802b5SBram Moolenaar
648750802b5SBram Moolenaar  assert_fails('vim9script', 'E1038')
649a26b9700SBram Moolenaar  assert_fails('export something', 'E1043')
6508a7d6542SBram Moolenaarenddef
6518a7d6542SBram Moolenaar
6528a7d6542SBram Moolenaardef Test_vim9script_reload()
6538a7d6542SBram Moolenaar  let lines =<< trim END
6548a7d6542SBram Moolenaar    vim9script
6558a7d6542SBram Moolenaar    const var = ''
6568a7d6542SBram Moolenaar    let valone = 1234
6578a7d6542SBram Moolenaar    def MyFunc(arg: string)
6588a7d6542SBram Moolenaar       valone = 5678
6598a7d6542SBram Moolenaar    enddef
6608a7d6542SBram Moolenaar  END
6618a7d6542SBram Moolenaar  let morelines =<< trim END
6628a7d6542SBram Moolenaar    let valtwo = 222
6638a7d6542SBram Moolenaar    export def GetValtwo(): number
6648a7d6542SBram Moolenaar      return valtwo
6658a7d6542SBram Moolenaar    enddef
6668a7d6542SBram Moolenaar  END
667675f716eSBram Moolenaar  writefile(lines + morelines,
668675f716eSBram Moolenaar            'Xreload.vim')
6698a7d6542SBram Moolenaar  source Xreload.vim
6708a7d6542SBram Moolenaar  source Xreload.vim
6718a7d6542SBram Moolenaar  source Xreload.vim
6728a7d6542SBram Moolenaar
6738a7d6542SBram Moolenaar  let testlines =<< trim END
6748a7d6542SBram Moolenaar    vim9script
6758a7d6542SBram Moolenaar    def TheFunc()
6768a7d6542SBram Moolenaar      import GetValtwo from './Xreload.vim'
6778a7d6542SBram Moolenaar      assert_equal(222, GetValtwo())
6788a7d6542SBram Moolenaar    enddef
6798a7d6542SBram Moolenaar    TheFunc()
6808a7d6542SBram Moolenaar  END
6818a7d6542SBram Moolenaar  writefile(testlines, 'Ximport.vim')
6828a7d6542SBram Moolenaar  source Ximport.vim
6838a7d6542SBram Moolenaar
6848a7d6542SBram Moolenaar  " test that when not using "morelines" valtwo is still defined
6858a7d6542SBram Moolenaar  " need to source Xreload.vim again, import doesn't reload a script
6868a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
6878a7d6542SBram Moolenaar  source Xreload.vim
6888a7d6542SBram Moolenaar  source Ximport.vim
6898a7d6542SBram Moolenaar
6908a7d6542SBram Moolenaar  " cannot declare a var twice
6918a7d6542SBram Moolenaar  lines =<< trim END
6928a7d6542SBram Moolenaar    vim9script
6938a7d6542SBram Moolenaar    let valone = 1234
6948a7d6542SBram Moolenaar    let valone = 5678
6958a7d6542SBram Moolenaar  END
6968a7d6542SBram Moolenaar  writefile(lines, 'Xreload.vim')
6978a7d6542SBram Moolenaar  assert_fails('source Xreload.vim', 'E1041:')
6988a7d6542SBram Moolenaar
6998a7d6542SBram Moolenaar  delete('Xreload.vim')
7008a7d6542SBram Moolenaar  delete('Ximport.vim')
7018a7d6542SBram Moolenaarenddef
7028a7d6542SBram Moolenaar
7038a7d6542SBram Moolenaardef Test_import_absolute()
7048a7d6542SBram Moolenaar  let import_lines = [
705e6085c53SBram Moolenaar        'vim9script',
706e6085c53SBram Moolenaar        'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"',
707e6085c53SBram Moolenaar        'def UseExported()',
708e6085c53SBram Moolenaar        '  g:imported_abs = exported',
709e6085c53SBram Moolenaar        '  exported = 8888',
710e6085c53SBram Moolenaar        '  g:imported_after = exported',
711e6085c53SBram Moolenaar        'enddef',
712e6085c53SBram Moolenaar        'UseExported()',
713e6085c53SBram Moolenaar        'g:import_disassembled = execute("disass UseExported")',
714e6085c53SBram Moolenaar        ]
7158a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_abs.vim')
7168a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'Xexport_abs.vim')
7178a7d6542SBram Moolenaar
7188a7d6542SBram Moolenaar  source Ximport_abs.vim
7198a7d6542SBram Moolenaar
7208a7d6542SBram Moolenaar  assert_equal(9876, g:imported_abs)
7214e12a5dfSBram Moolenaar  assert_equal(8888, g:imported_after)
722675f716eSBram Moolenaar  assert_match('<SNR>\d\+_UseExported.*' ..
723675f716eSBram Moolenaar          'g:imported_abs = exported.*' ..
724675f716eSBram Moolenaar          '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' ..
725675f716eSBram Moolenaar          '1 STOREG g:imported_abs.*' ..
726675f716eSBram Moolenaar          'exported = 8888.*' ..
727675f716eSBram Moolenaar          '3 STORESCRIPT exported in .*Xexport_abs.vim.*' ..
728675f716eSBram Moolenaar          'g:imported_after = exported.*' ..
729675f716eSBram Moolenaar          '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' ..
730675f716eSBram Moolenaar          '5 STOREG g:imported_after.*',
731e6085c53SBram Moolenaar        g:import_disassembled)
7328a7d6542SBram Moolenaar  unlet g:imported_abs
7334e12a5dfSBram Moolenaar  unlet g:import_disassembled
7348a7d6542SBram Moolenaar
7358a7d6542SBram Moolenaar  delete('Ximport_abs.vim')
7368a7d6542SBram Moolenaar  delete('Xexport_abs.vim')
7378a7d6542SBram Moolenaarenddef
7388a7d6542SBram Moolenaar
7398a7d6542SBram Moolenaardef Test_import_rtp()
7408a7d6542SBram Moolenaar  let import_lines = [
741e6085c53SBram Moolenaar        'vim9script',
742e6085c53SBram Moolenaar        'import exported from "Xexport_rtp.vim"',
743e6085c53SBram Moolenaar        'g:imported_rtp = exported',
744e6085c53SBram Moolenaar        ]
7458a7d6542SBram Moolenaar  writefile(import_lines, 'Ximport_rtp.vim')
7468a7d6542SBram Moolenaar  mkdir('import')
7478a7d6542SBram Moolenaar  writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
7488a7d6542SBram Moolenaar
7498a7d6542SBram Moolenaar  let save_rtp = &rtp
7508a7d6542SBram Moolenaar  &rtp = getcwd()
7518a7d6542SBram Moolenaar  source Ximport_rtp.vim
7528a7d6542SBram Moolenaar  &rtp = save_rtp
7538a7d6542SBram Moolenaar
7548a7d6542SBram Moolenaar  assert_equal(9876, g:imported_rtp)
7558a7d6542SBram Moolenaar  unlet g:imported_rtp
7568a7d6542SBram Moolenaar
7578a7d6542SBram Moolenaar  delete('Ximport_rtp.vim')
7588a7d6542SBram Moolenaar  delete('import/Xexport_rtp.vim')
7598a7d6542SBram Moolenaar  delete('import', 'd')
7608a7d6542SBram Moolenaarenddef
7618a7d6542SBram Moolenaar
7628a7d6542SBram Moolenaardef Test_fixed_size_list()
7638a7d6542SBram Moolenaar  " will be allocated as one piece of memory, check that changes work
7648a7d6542SBram Moolenaar  let l = [1, 2, 3, 4]
7658a7d6542SBram Moolenaar  l->remove(0)
7668a7d6542SBram Moolenaar  l->add(5)
7678a7d6542SBram Moolenaar  l->insert(99, 1)
7680f18b6d1SBram Moolenaar  assert_equal([2, 99, 3, 4, 5], l)
7698a7d6542SBram Moolenaarenddef
7708a7d6542SBram Moolenaar
771158906cfSBram Moolenaardef IfElse(what: number): string
772158906cfSBram Moolenaar  let res = ''
773158906cfSBram Moolenaar  if what == 1
774158906cfSBram Moolenaar    res = "one"
775158906cfSBram Moolenaar  elseif what == 2
776158906cfSBram Moolenaar    res = "two"
777a259d8d3SBram Moolenaar  else
778158906cfSBram Moolenaar    res = "three"
779a259d8d3SBram Moolenaar  endif
780158906cfSBram Moolenaar  return res
781a259d8d3SBram Moolenaarenddef
782a259d8d3SBram Moolenaar
783158906cfSBram Moolenaardef Test_if_elseif_else()
784158906cfSBram Moolenaar  assert_equal('one', IfElse(1))
785158906cfSBram Moolenaar  assert_equal('two', IfElse(2))
786158906cfSBram Moolenaar  assert_equal('three', IfElse(3))
7870f18b6d1SBram Moolenaarenddef
7880f18b6d1SBram Moolenaar
789e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails()
790e8c4abbbSBram Moolenaar  call CheckDefFailure(['elseif true'], 'E582:')
791e8c4abbbSBram Moolenaar  call CheckDefFailure(['else'], 'E581:')
792e8c4abbbSBram Moolenaar  call CheckDefFailure(['endif'], 'E580:')
793e8c4abbbSBram Moolenaar  call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:')
794585fea7bSBram Moolenaar  call CheckDefFailure(['if true', 'echo 1'], 'E171:')
795e8c4abbbSBram Moolenaarenddef
796e8c4abbbSBram Moolenaar
7976d69bf60SBram Moolenaarlet g:bool_true = v:true
7986d69bf60SBram Moolenaarlet g:bool_false = v:false
7996d69bf60SBram Moolenaar
8006d69bf60SBram Moolenaardef Test_if_const_expr()
8016d69bf60SBram Moolenaar  let res = false
8026d69bf60SBram Moolenaar  if true ? true : false
8036d69bf60SBram Moolenaar    res = true
8046d69bf60SBram Moolenaar  endif
8056d69bf60SBram Moolenaar  assert_equal(true, res)
8066d69bf60SBram Moolenaar
807585fea7bSBram Moolenaar  g:glob = 2
808585fea7bSBram Moolenaar  if false
809585fea7bSBram Moolenaar    execute('let g:glob = 3')
810585fea7bSBram Moolenaar  endif
811585fea7bSBram Moolenaar  assert_equal(2, g:glob)
812585fea7bSBram Moolenaar  if true
813585fea7bSBram Moolenaar    execute('let g:glob = 3')
814585fea7bSBram Moolenaar  endif
815585fea7bSBram Moolenaar  assert_equal(3, g:glob)
816585fea7bSBram Moolenaar
8176d69bf60SBram Moolenaar  res = false
8186d69bf60SBram Moolenaar  if g:bool_true ? true : false
8196d69bf60SBram Moolenaar    res = true
8206d69bf60SBram Moolenaar  endif
8216d69bf60SBram Moolenaar  assert_equal(true, res)
8226d69bf60SBram Moolenaar
8236d69bf60SBram Moolenaar  res = false
8246d69bf60SBram Moolenaar  if true ? g:bool_true : false
8256d69bf60SBram Moolenaar    res = true
8266d69bf60SBram Moolenaar  endif
8276d69bf60SBram Moolenaar  assert_equal(true, res)
8286d69bf60SBram Moolenaar
8296d69bf60SBram Moolenaar  res = false
8306d69bf60SBram Moolenaar  if true ? true : g:bool_false
8316d69bf60SBram Moolenaar    res = true
8326d69bf60SBram Moolenaar  endif
8336d69bf60SBram Moolenaar  assert_equal(true, res)
8346d69bf60SBram Moolenaar
8356d69bf60SBram Moolenaar  res = false
8366d69bf60SBram Moolenaar  if true ? false : true
8376d69bf60SBram Moolenaar    res = true
8386d69bf60SBram Moolenaar  endif
8396d69bf60SBram Moolenaar  assert_equal(false, res)
8406d69bf60SBram Moolenaar
8416d69bf60SBram Moolenaar  res = false
8426d69bf60SBram Moolenaar  if false ? false : true
8436d69bf60SBram Moolenaar    res = true
8446d69bf60SBram Moolenaar  endif
8456d69bf60SBram Moolenaar  assert_equal(true, res)
8466d69bf60SBram Moolenaar
8476d69bf60SBram Moolenaar  res = false
8486d69bf60SBram Moolenaar  if false ? true : false
8496d69bf60SBram Moolenaar    res = true
8506d69bf60SBram Moolenaar  endif
8516d69bf60SBram Moolenaar  assert_equal(false, res)
8526d69bf60SBram Moolenaar
8536d69bf60SBram Moolenaar  res = false
854e8c4abbbSBram Moolenaar  if has('xyz') ? true : false
855e8c4abbbSBram Moolenaar    res = true
856e8c4abbbSBram Moolenaar  endif
857e8c4abbbSBram Moolenaar  assert_equal(false, res)
858e8c4abbbSBram Moolenaar
859e8c4abbbSBram Moolenaar  res = false
8606d69bf60SBram Moolenaar  if true && true
8616d69bf60SBram Moolenaar    res = true
8626d69bf60SBram Moolenaar  endif
8636d69bf60SBram Moolenaar  assert_equal(true, res)
8646d69bf60SBram Moolenaar
8656d69bf60SBram Moolenaar  res = false
8666d69bf60SBram Moolenaar  if true && false
8676d69bf60SBram Moolenaar    res = true
8686d69bf60SBram Moolenaar  endif
8696d69bf60SBram Moolenaar  assert_equal(false, res)
8706d69bf60SBram Moolenaar
8716d69bf60SBram Moolenaar  res = false
8726d69bf60SBram Moolenaar  if g:bool_true && false
8736d69bf60SBram Moolenaar    res = true
8746d69bf60SBram Moolenaar  endif
8756d69bf60SBram Moolenaar  assert_equal(false, res)
8766d69bf60SBram Moolenaar
8776d69bf60SBram Moolenaar  res = false
8786d69bf60SBram Moolenaar  if true && g:bool_false
8796d69bf60SBram Moolenaar    res = true
8806d69bf60SBram Moolenaar  endif
8816d69bf60SBram Moolenaar  assert_equal(false, res)
8826d69bf60SBram Moolenaar
8836d69bf60SBram Moolenaar  res = false
8846d69bf60SBram Moolenaar  if false && false
8856d69bf60SBram Moolenaar    res = true
8866d69bf60SBram Moolenaar  endif
8876d69bf60SBram Moolenaar  assert_equal(false, res)
8886d69bf60SBram Moolenaar
8896d69bf60SBram Moolenaar  res = false
8906d69bf60SBram Moolenaar  if true || false
8916d69bf60SBram Moolenaar    res = true
8926d69bf60SBram Moolenaar  endif
8936d69bf60SBram Moolenaar  assert_equal(true, res)
8946d69bf60SBram Moolenaar
8956d69bf60SBram Moolenaar  res = false
8966d69bf60SBram Moolenaar  if g:bool_true || false
8976d69bf60SBram Moolenaar    res = true
8986d69bf60SBram Moolenaar  endif
8996d69bf60SBram Moolenaar  assert_equal(true, res)
9006d69bf60SBram Moolenaar
9016d69bf60SBram Moolenaar  res = false
9026d69bf60SBram Moolenaar  if true || g:bool_false
9036d69bf60SBram Moolenaar    res = true
9046d69bf60SBram Moolenaar  endif
9056d69bf60SBram Moolenaar  assert_equal(true, res)
9066d69bf60SBram Moolenaar
9076d69bf60SBram Moolenaar  res = false
9086d69bf60SBram Moolenaar  if false || false
9096d69bf60SBram Moolenaar    res = true
9106d69bf60SBram Moolenaar  endif
9116d69bf60SBram Moolenaar  assert_equal(false, res)
91280c34ca3SBram Moolenaarenddef
9136d69bf60SBram Moolenaar
91480c34ca3SBram Moolenaardef Test_if_const_expr_fails()
91580c34ca3SBram Moolenaar  call CheckDefFailure(['if "aaa" == "bbb'], 'E114:')
91680c34ca3SBram Moolenaar  call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:')
917e8c4abbbSBram Moolenaar  call CheckDefFailure(["if has('aaa'"], 'E110:')
918e8c4abbbSBram Moolenaar  call CheckDefFailure(["if has('aaa') ? true false"], 'E109:')
9196d69bf60SBram Moolenaarenddef
9206d69bf60SBram Moolenaar
921ad39c094SBram Moolenaardef Test_execute_cmd()
922ad39c094SBram Moolenaar  new
923ad39c094SBram Moolenaar  setline(1, 'default')
924ad39c094SBram Moolenaar  execute 'call setline(1, "execute-string")'
925ad39c094SBram Moolenaar  assert_equal('execute-string', getline(1))
926a72cfb80SBram Moolenaar
927a72cfb80SBram Moolenaar  execute "call setline(1, 'execute-string')"
928a72cfb80SBram Moolenaar  assert_equal('execute-string', getline(1))
929a72cfb80SBram Moolenaar
930ad39c094SBram Moolenaar  let cmd1 = 'call setline(1,'
931ad39c094SBram Moolenaar  let cmd2 = '"execute-var")'
932a72cfb80SBram Moolenaar  execute cmd1 cmd2 # comment
933ad39c094SBram Moolenaar  assert_equal('execute-var', getline(1))
934a72cfb80SBram Moolenaar
935ad39c094SBram Moolenaar  execute cmd1 cmd2 '|call setline(1, "execute-var-string")'
936ad39c094SBram Moolenaar  assert_equal('execute-var-string', getline(1))
937a72cfb80SBram Moolenaar
938ad39c094SBram Moolenaar  let cmd_first = 'call '
939ad39c094SBram Moolenaar  let cmd_last = 'setline(1, "execute-var-var")'
940ad39c094SBram Moolenaar  execute cmd_first .. cmd_last
941ad39c094SBram Moolenaar  assert_equal('execute-var-var', getline(1))
942ad39c094SBram Moolenaar  bwipe!
943585fea7bSBram Moolenaar
944585fea7bSBram Moolenaar  call CheckDefFailure(['execute xxx'], 'E1001:')
945a72cfb80SBram Moolenaar  call CheckDefFailure(['execute "cmd"# comment'], 'E488:')
946ad39c094SBram Moolenaarenddef
947ad39c094SBram Moolenaar
948ad39c094SBram Moolenaardef Test_echo_cmd()
949a72cfb80SBram Moolenaar  echo 'some' # comment
950585fea7bSBram Moolenaar  echon 'thing'
951ad39c094SBram Moolenaar  assert_match('^something$', Screenline(&lines))
952ad39c094SBram Moolenaar
953a72cfb80SBram Moolenaar  echo "some" # comment
954a72cfb80SBram Moolenaar  echon "thing"
955a72cfb80SBram Moolenaar  assert_match('^something$', Screenline(&lines))
956a72cfb80SBram Moolenaar
957ad39c094SBram Moolenaar  let str1 = 'some'
958ad39c094SBram Moolenaar  let str2 = 'more'
959ad39c094SBram Moolenaar  echo str1 str2
960ad39c094SBram Moolenaar  assert_match('^some more$', Screenline(&lines))
961a72cfb80SBram Moolenaar
962a72cfb80SBram Moolenaar  call CheckDefFailure(['echo "xxx"# comment'], 'E488:')
963ad39c094SBram Moolenaarenddef
964ad39c094SBram Moolenaar
965f93c7feaSBram Moolenaardef Test_echomsg_cmd()
966f93c7feaSBram Moolenaar  echomsg 'some' 'more' # comment
967f93c7feaSBram Moolenaar  assert_match('^some more$', Screenline(&lines))
968f93c7feaSBram Moolenaar  echo 'clear'
969f93c7feaSBram Moolenaar  1messages
970f93c7feaSBram Moolenaar  assert_match('^some more$', Screenline(&lines))
971f93c7feaSBram Moolenaar
972f93c7feaSBram Moolenaar  call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:')
973f93c7feaSBram Moolenaarenddef
974f93c7feaSBram Moolenaar
975f93c7feaSBram Moolenaardef Test_echoerr_cmd()
976f93c7feaSBram Moolenaar  # TODO: write this test
977f93c7feaSBram Moolenaarenddef
978f93c7feaSBram 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',
1180a72cfb80SBram Moolenaar      '  throw#comment',
1181a72cfb80SBram Moolenaar      'catch',
1182a72cfb80SBram Moolenaar      'endtry',
1183a72cfb80SBram Moolenaar      ], 'E1015:')
1184a72cfb80SBram Moolenaar  CheckDefFailure([
1185a72cfb80SBram Moolenaar      'try',
1186a72cfb80SBram Moolenaar      '  throw "yes"#comment',
1187a72cfb80SBram Moolenaar      'catch',
1188a72cfb80SBram Moolenaar      'endtry',
1189a72cfb80SBram Moolenaar      ], 'E488:')
1190a72cfb80SBram Moolenaar  CheckDefFailure([
1191a72cfb80SBram 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:')
1408a72cfb80SBram Moolenaar
1409a72cfb80SBram Moolenaar  CheckScriptSuccess([
1410a72cfb80SBram Moolenaar      'vim9script',
1411a72cfb80SBram Moolenaar      'command Echo echo # comment',
1412a72cfb80SBram Moolenaar      'command Echo # comment',
1413a72cfb80SBram Moolenaar      ])
1414a72cfb80SBram Moolenaar  CheckScriptFailure([
1415a72cfb80SBram Moolenaar      'vim9script',
1416a72cfb80SBram Moolenaar      'command Echo echo# comment',
1417a72cfb80SBram Moolenaar      'Echo',
1418a72cfb80SBram Moolenaar      ], 'E121:')
1419a72cfb80SBram Moolenaar  CheckScriptFailure([
1420a72cfb80SBram Moolenaar      'vim9script',
1421a72cfb80SBram Moolenaar      'command Echo# comment',
1422a72cfb80SBram Moolenaar      ], 'E182:')
1423a72cfb80SBram Moolenaar  CheckScriptFailure([
1424a72cfb80SBram Moolenaar      'vim9script',
1425a72cfb80SBram Moolenaar      'command Echo echo',
1426a72cfb80SBram Moolenaar      'command Echo# comment',
1427a72cfb80SBram Moolenaar      ], 'E182:')
1428a72cfb80SBram Moolenaar
1429a72cfb80SBram Moolenaar  CheckScriptSuccess([
1430a72cfb80SBram Moolenaar      'vim9script',
1431a72cfb80SBram Moolenaar      'function # comment',
1432a72cfb80SBram Moolenaar      ])
1433a72cfb80SBram Moolenaar  CheckScriptFailure([
1434a72cfb80SBram Moolenaar      'vim9script',
1435a72cfb80SBram Moolenaar      'function# comment',
1436a72cfb80SBram Moolenaar      ], 'E129:')
1437a72cfb80SBram Moolenaar  CheckScriptSuccess([
1438a72cfb80SBram Moolenaar      'vim9script',
1439a72cfb80SBram Moolenaar      'function CheckScriptSuccess # comment',
1440a72cfb80SBram Moolenaar      ])
1441a72cfb80SBram Moolenaar  CheckScriptFailure([
1442a72cfb80SBram Moolenaar      'vim9script',
1443a72cfb80SBram Moolenaar      'function CheckScriptSuccess# comment',
1444a72cfb80SBram Moolenaar      ], 'E488:')
1445a72cfb80SBram Moolenaar
1446a72cfb80SBram Moolenaar  CheckScriptSuccess([
1447a72cfb80SBram Moolenaar      'vim9script',
1448a72cfb80SBram Moolenaar      'func DeleteMe()',
1449a72cfb80SBram Moolenaar      'endfunc',
1450a72cfb80SBram Moolenaar      'delfunction DeleteMe # comment',
1451a72cfb80SBram Moolenaar      ])
1452a72cfb80SBram Moolenaar  CheckScriptFailure([
1453a72cfb80SBram Moolenaar      'vim9script',
1454a72cfb80SBram Moolenaar      'func DeleteMe()',
1455a72cfb80SBram Moolenaar      'endfunc',
1456a72cfb80SBram Moolenaar      'delfunction DeleteMe# comment',
1457a72cfb80SBram Moolenaar      ], 'E488:')
1458a72cfb80SBram Moolenaar
1459a72cfb80SBram Moolenaar  CheckScriptSuccess([
1460a72cfb80SBram Moolenaar      'vim9script',
1461a72cfb80SBram Moolenaar      'call execute("ls") # comment',
1462a72cfb80SBram Moolenaar      ])
1463a72cfb80SBram Moolenaar  CheckScriptFailure([
1464a72cfb80SBram Moolenaar      'vim9script',
1465a72cfb80SBram Moolenaar      'call execute("ls")# comment',
1466a72cfb80SBram 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