comparison src/testdir/test_vim9_script.vim @ 27457:4c16acb2525f v8.2.4257

patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent Commit: https://github.com/vim/vim/commit/62aec93bfdb9e1b40d03a6d2e8e9511f8b1bdb2d Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 29 21:45:34 2022 +0000 patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent Problem: Vim9: finding global function without g: prefix but not finding global variable is inconsistent. Solution: Require using g: for a global function. Change the vim9.vim script into a Vim9 script with exports. Fix that import in legacy script does not work.
author Bram Moolenaar <Bram@vim.org>
date Sat, 29 Jan 2022 23:00:05 +0100
parents 44cb142c8615
children 55613f0d59bc
comparison
equal deleted inserted replaced
27456:a8e2d91995ce 27457:4c16acb2525f
1 " Test various aspects of the Vim9 script language. 1 " Test various aspects of the Vim9 script language.
2 2
3 source check.vim 3 source check.vim
4 source term_util.vim 4 source term_util.vim
5 source vim9.vim 5 import './vim9.vim' as v9
6 source screendump.vim 6 source screendump.vim
7 source shared.vim 7 source shared.vim
8 8
9 def Test_vim9script_feature() 9 def Test_vim9script_feature()
10 # example from the help, here the feature is always present 10 # example from the help, here the feature is always present
16 endif 16 endif
17 vim9script 17 vim9script
18 # Vim9 script commands go here 18 # Vim9 script commands go here
19 g:didit = true 19 g:didit = true
20 END 20 END
21 CheckScriptSuccess(lines) 21 v9.CheckScriptSuccess(lines)
22 assert_equal(true, g:didit) 22 assert_equal(true, g:didit)
23 unlet g:didit 23 unlet g:didit
24 enddef 24 enddef
25 25
26 def Test_range_only() 26 def Test_range_only()
33 # without range commands use current line 33 # without range commands use current line
34 new 34 new
35 setline(1, ['one', 'two', 'three']) 35 setline(1, ['one', 'two', 'three'])
36 :2 36 :2
37 print 37 print
38 assert_equal('two', Screenline(&lines)) 38 assert_equal('two', g:Screenline(&lines))
39 :3 39 :3
40 list 40 list
41 assert_equal('three$', Screenline(&lines)) 41 assert_equal('three$', g:Screenline(&lines))
42 42
43 # missing command does not print the line 43 # missing command does not print the line
44 var lines =<< trim END 44 var lines =<< trim END
45 vim9script 45 vim9script
46 :1| 46 :1|
47 assert_equal('three$', Screenline(&lines)) 47 assert_equal('three$', g:Screenline(&lines))
48 :| 48 :|
49 assert_equal('three$', Screenline(&lines)) 49 assert_equal('three$', g:Screenline(&lines))
50 END 50 END
51 CheckScriptSuccess(lines) 51 v9.CheckScriptSuccess(lines)
52 52
53 bwipe! 53 bwipe!
54 54
55 # won't generate anything 55 # won't generate anything
56 if false 56 if false
62 let g:astring = 'text' 62 let g:astring = 'text'
63 let g:anumber = 123 63 let g:anumber = 123
64 64
65 def Test_delfunction() 65 def Test_delfunction()
66 # Check function is defined in script namespace 66 # Check function is defined in script namespace
67 CheckScriptSuccess([ 67 v9.CheckScriptSuccess([
68 'vim9script', 68 'vim9script',
69 'func CheckMe()', 69 'func CheckMe()',
70 ' return 123', 70 ' return 123',
71 'endfunc', 71 'endfunc',
72 'assert_equal(123, s:CheckMe())', 72 'assert_equal(123, s:CheckMe())',
73 ]) 73 ])
74 74
75 # Check function in script namespace cannot be deleted 75 # Check function in script namespace cannot be deleted
76 CheckScriptFailure([ 76 v9.CheckScriptFailure([
77 'vim9script', 77 'vim9script',
78 'func DeleteMe1()', 78 'func DeleteMe1()',
79 'endfunc', 79 'endfunc',
80 'delfunction DeleteMe1', 80 'delfunction DeleteMe1',
81 ], 'E1084:') 81 ], 'E1084:')
82 CheckScriptFailure([ 82 v9.CheckScriptFailure([
83 'vim9script', 83 'vim9script',
84 'func DeleteMe2()', 84 'func DeleteMe2()',
85 'endfunc', 85 'endfunc',
86 'def DoThat()', 86 'def DoThat()',
87 ' delfunction DeleteMe2', 87 ' delfunction DeleteMe2',
88 'enddef', 88 'enddef',
89 'DoThat()', 89 'DoThat()',
90 ], 'E1084:') 90 ], 'E1084:')
91 CheckScriptFailure([ 91 v9.CheckScriptFailure([
92 'vim9script', 92 'vim9script',
93 'def DeleteMe3()', 93 'def DeleteMe3()',
94 'enddef', 94 'enddef',
95 'delfunction DeleteMe3', 95 'delfunction DeleteMe3',
96 ], 'E1084:') 96 ], 'E1084:')
97 CheckScriptFailure([ 97 v9.CheckScriptFailure([
98 'vim9script', 98 'vim9script',
99 'def DeleteMe4()', 99 'def DeleteMe4()',
100 'enddef', 100 'enddef',
101 'def DoThat()', 101 'def DoThat()',
102 ' delfunction DeleteMe4', 102 ' delfunction DeleteMe4',
116 enddef 116 enddef
117 assert_equal("no", g:Global()) 117 assert_equal("no", g:Global())
118 delfunc g:Global 118 delfunc g:Global
119 assert_false(exists('*g:Global')) 119 assert_false(exists('*g:Global'))
120 END 120 END
121 CheckScriptSuccess(lines) 121 v9.CheckScriptSuccess(lines)
122 122
123 # Check that global function can be replaced by a :def function and deleted 123 # Check that global function can be replaced by a :def function and deleted
124 lines =<< trim END 124 lines =<< trim END
125 vim9script 125 vim9script
126 func g:Global() 126 func g:Global()
132 enddef 132 enddef
133 assert_equal("no", g:Global()) 133 assert_equal("no", g:Global())
134 delfunc g:Global 134 delfunc g:Global
135 assert_false(exists('*g:Global')) 135 assert_false(exists('*g:Global'))
136 END 136 END
137 CheckScriptSuccess(lines) 137 v9.CheckScriptSuccess(lines)
138 138
139 # Check that global :def function can be replaced by a function and deleted 139 # Check that global :def function can be replaced by a function and deleted
140 lines =<< trim END 140 lines =<< trim END
141 vim9script 141 vim9script
142 def g:Global(): string 142 def g:Global(): string
148 endfunc 148 endfunc
149 assert_equal("no", g:Global()) 149 assert_equal("no", g:Global())
150 delfunc g:Global 150 delfunc g:Global
151 assert_false(exists('*g:Global')) 151 assert_false(exists('*g:Global'))
152 END 152 END
153 CheckScriptSuccess(lines) 153 v9.CheckScriptSuccess(lines)
154 enddef 154 enddef
155 155
156 def Test_wrong_type() 156 def Test_wrong_type()
157 CheckDefFailure(['var name: list<nothing>'], 'E1010:') 157 v9.CheckDefFailure(['var name: list<nothing>'], 'E1010:')
158 CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:') 158 v9.CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:')
159 CheckDefFailure(['var name: dict<nothing>'], 'E1010:') 159 v9.CheckDefFailure(['var name: dict<nothing>'], 'E1010:')
160 CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:') 160 v9.CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:')
161 161
162 CheckDefFailure(['var name: dict<number'], 'E1009:') 162 v9.CheckDefFailure(['var name: dict<number'], 'E1009:')
163 CheckDefFailure(['var name: dict<list<number>'], 'E1009:') 163 v9.CheckDefFailure(['var name: dict<list<number>'], 'E1009:')
164 164
165 CheckDefFailure(['var name: ally'], 'E1010:') 165 v9.CheckDefFailure(['var name: ally'], 'E1010:')
166 CheckDefFailure(['var name: bram'], 'E1010:') 166 v9.CheckDefFailure(['var name: bram'], 'E1010:')
167 CheckDefFailure(['var name: cathy'], 'E1010:') 167 v9.CheckDefFailure(['var name: cathy'], 'E1010:')
168 CheckDefFailure(['var name: dom'], 'E1010:') 168 v9.CheckDefFailure(['var name: dom'], 'E1010:')
169 CheckDefFailure(['var name: freddy'], 'E1010:') 169 v9.CheckDefFailure(['var name: freddy'], 'E1010:')
170 CheckDefFailure(['var name: john'], 'E1010:') 170 v9.CheckDefFailure(['var name: john'], 'E1010:')
171 CheckDefFailure(['var name: larry'], 'E1010:') 171 v9.CheckDefFailure(['var name: larry'], 'E1010:')
172 CheckDefFailure(['var name: ned'], 'E1010:') 172 v9.CheckDefFailure(['var name: ned'], 'E1010:')
173 CheckDefFailure(['var name: pam'], 'E1010:') 173 v9.CheckDefFailure(['var name: pam'], 'E1010:')
174 CheckDefFailure(['var name: sam'], 'E1010:') 174 v9.CheckDefFailure(['var name: sam'], 'E1010:')
175 CheckDefFailure(['var name: vim'], 'E1010:') 175 v9.CheckDefFailure(['var name: vim'], 'E1010:')
176 176
177 CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') 177 v9.CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:')
178 CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') 178 v9.CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:')
179 enddef 179 enddef
180 180
181 def Test_script_wrong_type() 181 def Test_script_wrong_type()
182 var lines =<< trim END 182 var lines =<< trim END
183 vim9script 183 vim9script
184 var s:dict: dict<string> 184 var s:dict: dict<string>
185 s:dict['a'] = ['x'] 185 s:dict['a'] = ['x']
186 END 186 END
187 CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3) 187 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3)
188 enddef 188 enddef
189 189
190 def Test_const() 190 def Test_const()
191 CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') 191 v9.CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:')
192 CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') 192 v9.CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:')
193 CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') 193 v9.CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:')
194 CheckDefFailure(['final two'], 'E1125:') 194 v9.CheckDefFailure(['final two'], 'E1125:')
195 CheckDefFailure(['final &option'], 'E996:') 195 v9.CheckDefFailure(['final &option'], 'E996:')
196 196
197 var lines =<< trim END 197 var lines =<< trim END
198 final list = [1, 2, 3] 198 final list = [1, 2, 3]
199 list[0] = 4 199 list[0] = 4
200 list->assert_equal([4, 2, 3]) 200 list->assert_equal([4, 2, 3])
215 constdict['two']['six'] = 66 215 constdict['two']['six'] = 66
216 var cd = constdict['two'] 216 var cd = constdict['two']
217 cd['six'] = 66 217 cd['six'] = 66
218 constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3}) 218 constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3})
219 END 219 END
220 CheckDefAndScriptSuccess(lines) 220 v9.CheckDefAndScriptSuccess(lines)
221 enddef 221 enddef
222 222
223 def Test_const_bang() 223 def Test_const_bang()
224 var lines =<< trim END 224 var lines =<< trim END
225 const var = 234 225 const var = 234
226 var = 99 226 var = 99
227 END 227 END
228 CheckDefExecFailure(lines, 'E1018:', 2) 228 v9.CheckDefExecFailure(lines, 'E1018:', 2)
229 CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) 229 v9.CheckScriptFailure(['vim9script'] + lines, 'E46:', 3)
230 230
231 lines =<< trim END 231 lines =<< trim END
232 const ll = [2, 3, 4] 232 const ll = [2, 3, 4]
233 ll[0] = 99 233 ll[0] = 99
234 END 234 END
235 CheckDefExecFailure(lines, 'E1119:', 2) 235 v9.CheckDefExecFailure(lines, 'E1119:', 2)
236 CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 236 v9.CheckScriptFailure(['vim9script'] + lines, 'E741:', 3)
237 237
238 lines =<< trim END 238 lines =<< trim END
239 const ll = [2, 3, 4] 239 const ll = [2, 3, 4]
240 ll[3] = 99 240 ll[3] = 99
241 END 241 END
242 CheckDefExecFailure(lines, 'E1118:', 2) 242 v9.CheckDefExecFailure(lines, 'E1118:', 2)
243 CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) 243 v9.CheckScriptFailure(['vim9script'] + lines, 'E684:', 3)
244 244
245 lines =<< trim END 245 lines =<< trim END
246 const dd = {one: 1, two: 2} 246 const dd = {one: 1, two: 2}
247 dd["one"] = 99 247 dd["one"] = 99
248 END 248 END
249 CheckDefExecFailure(lines, 'E1121:', 2) 249 v9.CheckDefExecFailure(lines, 'E1121:', 2)
250 CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 250 v9.CheckScriptFailure(['vim9script'] + lines, 'E741:', 3)
251 251
252 lines =<< trim END 252 lines =<< trim END
253 const dd = {one: 1, two: 2} 253 const dd = {one: 1, two: 2}
254 dd["three"] = 99 254 dd["three"] = 99
255 END 255 END
256 CheckDefExecFailure(lines, 'E1120:') 256 v9.CheckDefExecFailure(lines, 'E1120:')
257 CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 257 v9.CheckScriptFailure(['vim9script'] + lines, 'E741:', 3)
258 enddef 258 enddef
259 259
260 def Test_range_no_colon() 260 def Test_range_no_colon()
261 CheckDefFailure(['%s/a/b/'], 'E1050:') 261 v9.CheckDefFailure(['%s/a/b/'], 'E1050:')
262 CheckDefFailure(['+ s/a/b/'], 'E1050:') 262 v9.CheckDefFailure(['+ s/a/b/'], 'E1050:')
263 CheckDefFailure(['- s/a/b/'], 'E1050:') 263 v9.CheckDefFailure(['- s/a/b/'], 'E1050:')
264 CheckDefFailure(['. s/a/b/'], 'E1050:') 264 v9.CheckDefFailure(['. s/a/b/'], 'E1050:')
265 enddef 265 enddef
266 266
267 267
268 def Test_block() 268 def Test_block()
269 var outer = 1 269 var outer = 1
276 276
277 {|echo 'yes'|} 277 {|echo 'yes'|}
278 enddef 278 enddef
279 279
280 def Test_block_failure() 280 def Test_block_failure()
281 CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') 281 v9.CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:')
282 CheckDefFailure(['}'], 'E1025:') 282 v9.CheckDefFailure(['}'], 'E1025:')
283 CheckDefFailure(['{', 'echo 1'], 'E1026:') 283 v9.CheckDefFailure(['{', 'echo 1'], 'E1026:')
284 enddef 284 enddef
285 285
286 def Test_block_local_vars() 286 def Test_block_local_vars()
287 var lines =<< trim END 287 var lines =<< trim END
288 vim9script 288 vim9script
320 END 320 END
321 321
322 # need to execute this with a separate Vim instance to avoid the current 322 # need to execute this with a separate Vim instance to avoid the current
323 # context gets garbage collected. 323 # context gets garbage collected.
324 writefile(lines, 'Xscript') 324 writefile(lines, 'Xscript')
325 RunVim([], [], '-S Xscript') 325 g:RunVim([], [], '-S Xscript')
326 assert_equal(['ok'], readfile('Xdidit')) 326 assert_equal(['ok'], readfile('Xdidit'))
327 327
328 delete('Xscript') 328 delete('Xscript')
329 delete('Xdidit') 329 delete('Xdidit')
330 enddef 330 enddef
343 endif 343 endif
344 # function is compiled here, after blocks have finished, can still access 344 # function is compiled here, after blocks have finished, can still access
345 # "foo" and "bar" 345 # "foo" and "bar"
346 assert_equal(['foo', 'bar'], Func()) 346 assert_equal(['foo', 'bar'], Func())
347 END 347 END
348 CheckScriptSuccess(lines) 348 v9.CheckScriptSuccess(lines)
349 enddef 349 enddef
350 350
351 " legacy func for command that's defined later 351 " legacy func for command that's defined later
352 func InvokeSomeCommand() 352 func s:InvokeSomeCommand()
353 SomeCommand 353 SomeCommand
354 endfunc 354 endfunc
355 355
356 def Test_autocommand_block() 356 def Test_autocommand_block()
357 com SomeCommand { 357 com SomeCommand {
555 n = 333 555 n = 333
556 endtry 556 endtry
557 assert_equal(333, n) 557 assert_equal(333, n)
558 558
559 try 559 try
560 l = DeletedFunc() 560 l = g:DeletedFunc()
561 catch /E933:/ 561 catch /E933:/
562 n = 344 562 n = 344
563 endtry 563 endtry
564 assert_equal(344, n) 564 assert_equal(344, n)
565 565
677 ->setline(1) 677 ->setline(1)
678 catch 678 catch
679 g:caught = v:exception 679 g:caught = v:exception
680 endtry 680 endtry
681 END 681 END
682 CheckScriptSuccess(lines) 682 v9.CheckScriptSuccess(lines)
683 assert_match('E1219: Float or Number required for argument 1', g:caught) 683 assert_match('E1219: Float or Number required for argument 1', g:caught)
684 unlet g:caught 684 unlet g:caught
685 685
686 # missing catch and/or finally 686 # missing catch and/or finally
687 lines =<< trim END 687 lines =<< trim END
688 vim9script 688 vim9script
689 try 689 try
690 echo 'something' 690 echo 'something'
691 endtry 691 endtry
692 END 692 END
693 CheckScriptFailure(lines, 'E1032:') 693 v9.CheckScriptFailure(lines, 'E1032:')
694 694
695 # skipping try-finally-endtry when try-finally-endtry is used in another block 695 # skipping try-finally-endtry when try-finally-endtry is used in another block
696 lines =<< trim END 696 lines =<< trim END
697 if v:true 697 if v:true
698 try 698 try
702 try 702 try
703 finally 703 finally
704 endtry 704 endtry
705 endif 705 endif
706 END 706 END
707 CheckDefAndScriptSuccess(lines) 707 v9.CheckDefAndScriptSuccess(lines)
708 enddef 708 enddef
709 709
710 def Test_try_ends_in_return() 710 def Test_try_ends_in_return()
711 var lines =<< trim END 711 var lines =<< trim END
712 vim9script 712 vim9script
717 return 'caught' 717 return 'caught'
718 endtry 718 endtry
719 enddef 719 enddef
720 assert_equal('foo', Foo()) 720 assert_equal('foo', Foo())
721 END 721 END
722 CheckScriptSuccess(lines) 722 v9.CheckScriptSuccess(lines)
723 723
724 lines =<< trim END 724 lines =<< trim END
725 vim9script 725 vim9script
726 def Foo(): string 726 def Foo(): string
727 try 727 try
731 endtry 731 endtry
732 echo 'notreached' 732 echo 'notreached'
733 enddef 733 enddef
734 assert_equal('foo', Foo()) 734 assert_equal('foo', Foo())
735 END 735 END
736 CheckScriptFailure(lines, 'E1095:') 736 v9.CheckScriptFailure(lines, 'E1095:')
737 737
738 lines =<< trim END 738 lines =<< trim END
739 vim9script 739 vim9script
740 def Foo(): string 740 def Foo(): string
741 try 741 try
744 return 'caught' 744 return 'caught'
745 endtry 745 endtry
746 enddef 746 enddef
747 assert_equal('foo', Foo()) 747 assert_equal('foo', Foo())
748 END 748 END
749 CheckScriptFailure(lines, 'E1027:') 749 v9.CheckScriptFailure(lines, 'E1027:')
750 750
751 lines =<< trim END 751 lines =<< trim END
752 vim9script 752 vim9script
753 def Foo(): string 753 def Foo(): string
754 try 754 try
759 return 'done' 759 return 'done'
760 endtry 760 endtry
761 enddef 761 enddef
762 assert_equal('done', Foo()) 762 assert_equal('done', Foo())
763 END 763 END
764 CheckScriptSuccess(lines) 764 v9.CheckScriptSuccess(lines)
765 765
766 enddef 766 enddef
767 767
768 def Test_try_in_catch() 768 def Test_try_in_catch()
769 var lines =<< trim END 769 var lines =<< trim END
797 eval [][0] 797 eval [][0]
798 catch /E684:/ 798 catch /E684:/
799 eval [][0] 799 eval [][0]
800 endtry 800 endtry
801 END 801 END
802 CheckDefExecFailure(lines, 'E684:', 4) 802 v9.CheckDefExecFailure(lines, 'E684:', 4)
803 enddef 803 enddef
804 804
805 " :while at the very start of a function that :continue jumps to 805 " :while at the very start of a function that :continue jumps to
806 def TryContinueFunc() 806 def s:TryContinueFunc()
807 while g:Count < 2 807 while g:Count < 2
808 g:sequence ..= 't' 808 g:sequence ..= 't'
809 try 809 try
810 echoerr 'Test' 810 echoerr 'Test'
811 catch 811 catch
865 CnextOrCfirst() 865 CnextOrCfirst()
866 writefile([getqflist({idx: 0}).idx], 'Xresult') 866 writefile([getqflist({idx: 0}).idx], 'Xresult')
867 qall 867 qall
868 END 868 END
869 writefile(lines, 'XCatchCnext') 869 writefile(lines, 'XCatchCnext')
870 RunVim([], [], '--clean -S XCatchCnext') 870 g:RunVim([], [], '--clean -S XCatchCnext')
871 assert_equal(['1'], readfile('Xresult')) 871 assert_equal(['1'], readfile('Xresult'))
872 872
873 delete('Xfile1') 873 delete('Xfile1')
874 delete('Xfile2') 874 delete('Xfile2')
875 delete('XCatchCnext') 875 delete('XCatchCnext')
899 return ['delete me'] 899 return ['delete me']
900 enddef 900 enddef
901 defcompile 901 defcompile
902 delfunc DeletedFunc 902 delfunc DeletedFunc
903 903
904 def ThrowFromDef() 904 def s:ThrowFromDef()
905 throw "getout" # comment 905 throw "getout" # comment
906 enddef 906 enddef
907 907
908 func CatchInFunc() 908 func s:CatchInFunc()
909 try 909 try
910 call ThrowFromDef() 910 call s:ThrowFromDef()
911 catch 911 catch
912 let g:thrown_func = v:exception 912 let g:thrown_func = v:exception
913 endtry 913 endtry
914 endfunc 914 endfunc
915 915
916 def CatchInDef() 916 def s:CatchInDef()
917 try 917 try
918 ThrowFromDef() 918 ThrowFromDef()
919 catch 919 catch
920 g:thrown_def = v:exception 920 g:thrown_def = v:exception
921 endtry 921 endtry
922 enddef 922 enddef
923 923
924 def ReturnFinally(): string 924 def s:ReturnFinally(): string
925 try 925 try
926 return 'intry' 926 return 'intry'
927 finall 927 finall
928 g:in_finally = 'finally' 928 g:in_finally = 'finally'
929 endtry 929 endtry
982 l->add('4') 982 l->add('4')
983 endtry 983 endtry
984 assert_equal(['1', '2', '3', '4'], l) 984 assert_equal(['1', '2', '3', '4'], l)
985 enddef 985 enddef
986 986
987 def TryOne(): number 987 def s:TryOne(): number
988 try 988 try
989 return 0 989 return 0
990 catch 990 catch
991 endtry 991 endtry
992 return 0 992 return 0
993 enddef 993 enddef
994 994
995 def TryTwo(n: number): string 995 def s:TryTwo(n: number): string
996 try 996 try
997 var x = {} 997 var x = {}
998 catch 998 catch
999 endtry 999 endtry
1000 return 'text' 1000 return 'text'
1021 endtry 1021 endtry
1022 assert_equal('abc', seq) 1022 assert_equal('abc', seq)
1023 enddef 1023 enddef
1024 1024
1025 def Test_try_catch_fails() 1025 def Test_try_catch_fails()
1026 CheckDefFailure(['catch'], 'E603:') 1026 v9.CheckDefFailure(['catch'], 'E603:')
1027 CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 1027 v9.CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:')
1028 CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 1028 v9.CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:')
1029 CheckDefFailure(['finally'], 'E606:') 1029 v9.CheckDefFailure(['finally'], 'E606:')
1030 CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 1030 v9.CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:')
1031 CheckDefFailure(['endtry'], 'E602:') 1031 v9.CheckDefFailure(['endtry'], 'E602:')
1032 CheckDefFailure(['while 1', 'endtry'], 'E170:') 1032 v9.CheckDefFailure(['while 1', 'endtry'], 'E170:')
1033 CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 1033 v9.CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
1034 CheckDefFailure(['if 1', 'endtry'], 'E171:') 1034 v9.CheckDefFailure(['if 1', 'endtry'], 'E171:')
1035 CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 1035 v9.CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
1036 1036
1037 CheckDefFailure(['throw'], 'E1143:') 1037 v9.CheckDefFailure(['throw'], 'E1143:')
1038 CheckDefFailure(['throw xxx'], 'E1001:') 1038 v9.CheckDefFailure(['throw xxx'], 'E1001:')
1039 enddef 1039 enddef
1040 1040
1041 def Try_catch_skipped() 1041 def Try_catch_skipped()
1042 var l = [] 1042 var l = []
1043 try 1043 try
1068 .. 'two' 1068 .. 'two'
1069 catch 1069 catch
1070 assert_equal('onetwo', v:exception) 1070 assert_equal('onetwo', v:exception)
1071 endtry 1071 endtry
1072 END 1072 END
1073 CheckScriptSuccess(lines) 1073 v9.CheckScriptSuccess(lines)
1074 1074
1075 lines =<< trim END 1075 lines =<< trim END
1076 vim9script 1076 vim9script
1077 @r = '' 1077 @r = ''
1078 def Func() 1078 def Func()
1084 catch /E1129:/ 1084 catch /E1129:/
1085 result = 'caught' 1085 result = 'caught'
1086 endtry 1086 endtry
1087 assert_equal('caught', result) 1087 assert_equal('caught', result)
1088 END 1088 END
1089 CheckScriptSuccess(lines) 1089 v9.CheckScriptSuccess(lines)
1090 enddef 1090 enddef
1091 1091
1092 def Test_error_in_nested_function() 1092 def Test_error_in_nested_function()
1093 # an error in a nested :function aborts executing in the calling :def function 1093 # an error in a nested :function aborts executing in the calling :def function
1094 var lines =<< trim END 1094 var lines =<< trim END
1101 eval [][0] 1101 eval [][0]
1102 endfunc 1102 endfunc
1103 Func() 1103 Func()
1104 END 1104 END
1105 g:test_var = 0 1105 g:test_var = 0
1106 CheckScriptFailure(lines, 'E684:') 1106 v9.CheckScriptFailure(lines, 'E684:')
1107 assert_equal(0, g:test_var) 1107 assert_equal(0, g:test_var)
1108 enddef 1108 enddef
1109 1109
1110 def Test_abort_after_error() 1110 def Test_abort_after_error()
1111 var lines =<< trim END 1111 var lines =<< trim END
1114 echo notfound 1114 echo notfound
1115 endwhile 1115 endwhile
1116 g:gotthere = true 1116 g:gotthere = true
1117 END 1117 END
1118 g:gotthere = false 1118 g:gotthere = false
1119 CheckScriptFailure(lines, 'E121:') 1119 v9.CheckScriptFailure(lines, 'E121:')
1120 assert_false(g:gotthere) 1120 assert_false(g:gotthere)
1121 unlet g:gotthere 1121 unlet g:gotthere
1122 enddef 1122 enddef
1123 1123
1124 def Test_cexpr_vimscript() 1124 def Test_cexpr_vimscript()
1129 cexpr 'File' 1129 cexpr 'File'
1130 .. ' someFile' .. 1130 .. ' someFile' ..
1131 ' line 19' 1131 ' line 19'
1132 assert_equal(19, getqflist()[0].lnum) 1132 assert_equal(19, getqflist()[0].lnum)
1133 END 1133 END
1134 CheckScriptSuccess(lines) 1134 v9.CheckScriptSuccess(lines)
1135 set errorformat& 1135 set errorformat&
1136 enddef 1136 enddef
1137 1137
1138 def Test_statusline_syntax() 1138 def Test_statusline_syntax()
1139 # legacy syntax is used for 'statusline' 1139 # legacy syntax is used for 'statusline'
1144 endfunc 1144 endfunc
1145 set laststatus=2 statusline=%!Status() 1145 set laststatus=2 statusline=%!Status()
1146 redrawstatus 1146 redrawstatus
1147 set laststatus statusline= 1147 set laststatus statusline=
1148 END 1148 END
1149 CheckScriptSuccess(lines) 1149 v9.CheckScriptSuccess(lines)
1150 enddef 1150 enddef
1151 1151
1152 def Test_list_vimscript() 1152 def Test_list_vimscript()
1153 # checks line continuation and comments 1153 # checks line continuation and comments
1154 var lines =<< trim END 1154 var lines =<< trim END
1160 1160
1161 'three', 1161 'three',
1162 ] 1162 ]
1163 assert_equal(['one', 'two', 'three'], mylist) 1163 assert_equal(['one', 'two', 'three'], mylist)
1164 END 1164 END
1165 CheckScriptSuccess(lines) 1165 v9.CheckScriptSuccess(lines)
1166 1166
1167 # check all lines from heredoc are kept 1167 # check all lines from heredoc are kept
1168 lines =<< trim END 1168 lines =<< trim END
1169 # comment 1 1169 # comment 1
1170 two 1170 two
1177 1177
1178 lines =<< trim END 1178 lines =<< trim END
1179 [{ 1179 [{
1180 a: 0}]->string()->assert_equal("[{'a': 0}]") 1180 a: 0}]->string()->assert_equal("[{'a': 0}]")
1181 END 1181 END
1182 CheckDefAndScriptSuccess(lines) 1182 v9.CheckDefAndScriptSuccess(lines)
1183 enddef 1183 enddef
1184 1184
1185 if has('channel') 1185 if has('channel')
1186 let someJob = test_null_job() 1186 let someJob = test_null_job()
1187 1187
1208 vim9script 1208 vim9script
1209 g:legacy = 0 1209 g:legacy = 0
1210 END 1210 END
1211 g:feature = 'eval' 1211 g:feature = 'eval'
1212 g:legacy = -1 1212 g:legacy = -1
1213 CheckScriptSuccess(lines) 1213 v9.CheckScriptSuccess(lines)
1214 assert_equal(1, g:legacy) 1214 assert_equal(1, g:legacy)
1215 1215
1216 g:feature = 'noteval' 1216 g:feature = 'noteval'
1217 g:legacy = -1 1217 g:legacy = -1
1218 CheckScriptSuccess(lines) 1218 v9.CheckScriptSuccess(lines)
1219 assert_equal(0, g:legacy) 1219 assert_equal(0, g:legacy)
1220 enddef 1220 enddef
1221 1221
1222 def Test_vim9script_fails() 1222 def Test_vim9script_fails()
1223 CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 1223 v9.CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
1224 CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1224 v9.CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
1225 1225
1226 CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') 1226 v9.CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:')
1227 CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1227 v9.CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:')
1228 1228
1229 assert_fails('vim9script', 'E1038:') 1229 assert_fails('vim9script', 'E1038:')
1230 enddef 1230 enddef
1231 1231
1232 def Test_script_var_shadows_function() 1232 def Test_script_var_shadows_function()
1235 def Func(): number 1235 def Func(): number
1236 return 123 1236 return 123
1237 enddef 1237 enddef
1238 var Func = 1 1238 var Func = 1
1239 END 1239 END
1240 CheckScriptFailure(lines, 'E1041:', 5) 1240 v9.CheckScriptFailure(lines, 'E1041:', 5)
1241 enddef 1241 enddef
1242 1242
1243 def Test_function_shadows_script_var() 1243 def Test_function_shadows_script_var()
1244 var lines =<< trim END 1244 var lines =<< trim END
1245 vim9script 1245 vim9script
1246 var Func = 1 1246 var Func = 1
1247 def Func(): number 1247 def Func(): number
1248 return 123 1248 return 123
1249 enddef 1249 enddef
1250 END 1250 END
1251 CheckScriptFailure(lines, 'E1041:', 3) 1251 v9.CheckScriptFailure(lines, 'E1041:', 3)
1252 enddef 1252 enddef
1253 1253
1254 def Test_script_var_shadows_command() 1254 def Test_script_var_shadows_command()
1255 var lines =<< trim END 1255 var lines =<< trim END
1256 var undo = 1 1256 var undo = 1
1257 undo = 2 1257 undo = 2
1258 assert_equal(2, undo) 1258 assert_equal(2, undo)
1259 END 1259 END
1260 CheckDefAndScriptSuccess(lines) 1260 v9.CheckDefAndScriptSuccess(lines)
1261 1261
1262 lines =<< trim END 1262 lines =<< trim END
1263 var undo = 1 1263 var undo = 1
1264 undo 1264 undo
1265 END 1265 END
1266 CheckDefAndScriptFailure(lines, 'E1207:', 2) 1266 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
1267 enddef 1267 enddef
1268 1268
1269 def Test_vim9script_call_wrong_type() 1269 def Test_vim9script_call_wrong_type()
1270 var lines =<< trim END 1270 var lines =<< trim END
1271 vim9script 1271 vim9script
1272 var Time = 'localtime' 1272 var Time = 'localtime'
1273 Time() 1273 Time()
1274 END 1274 END
1275 CheckScriptFailure(lines, 'E1085:') 1275 v9.CheckScriptFailure(lines, 'E1085:')
1276 enddef 1276 enddef
1277 1277
1278 def Test_vim9script_reload_delfunc() 1278 def Test_vim9script_reload_delfunc()
1279 var first_lines =<< trim END 1279 var first_lines =<< trim END
1280 vim9script 1280 vim9script
1369 enddef 1369 enddef
1370 def Func() 1370 def Func()
1371 echo 'two' 1371 echo 'two'
1372 enddef 1372 enddef
1373 END 1373 END
1374 CheckScriptFailure(lines, 'E1073:') 1374 v9.CheckScriptFailure(lines, 'E1073:')
1375 1375
1376 lines =<< trim END 1376 lines =<< trim END
1377 vim9script 1377 vim9script
1378 def Foo(): string 1378 def Foo(): string
1379 return 'foo' 1379 return 'foo'
1381 def Func() 1381 def Func()
1382 var Foo = {-> 'lambda'} 1382 var Foo = {-> 'lambda'}
1383 enddef 1383 enddef
1384 defcompile 1384 defcompile
1385 END 1385 END
1386 CheckScriptFailure(lines, 'E1073:') 1386 v9.CheckScriptFailure(lines, 'E1073:')
1387 enddef 1387 enddef
1388 1388
1389 def Test_fixed_size_list() 1389 def Test_fixed_size_list()
1390 # will be allocated as one piece of memory, check that changes work 1390 # will be allocated as one piece of memory, check that changes work
1391 var l = [1, 2, 3, 4] 1391 var l = [1, 2, 3, 4]
1394 l->insert(99, 1) 1394 l->insert(99, 1)
1395 assert_equal([2, 99, 3, 4, 5], l) 1395 assert_equal([2, 99, 3, 4, 5], l)
1396 enddef 1396 enddef
1397 1397
1398 def Test_no_insert_xit() 1398 def Test_no_insert_xit()
1399 CheckDefExecFailure(['a = 1'], 'E1100:') 1399 v9.CheckDefExecFailure(['a = 1'], 'E1100:')
1400 CheckDefExecFailure(['c = 1'], 'E1100:') 1400 v9.CheckDefExecFailure(['c = 1'], 'E1100:')
1401 CheckDefExecFailure(['i = 1'], 'E1100:') 1401 v9.CheckDefExecFailure(['i = 1'], 'E1100:')
1402 CheckDefExecFailure(['t = 1'], 'E1100:') 1402 v9.CheckDefExecFailure(['t = 1'], 'E1100:')
1403 CheckDefExecFailure(['x = 1'], 'E1100:') 1403 v9.CheckDefExecFailure(['x = 1'], 'E1100:')
1404 1404
1405 CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1405 v9.CheckScriptFailure(['vim9script', 'a = 1'], 'E488:')
1406 CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1406 v9.CheckScriptFailure(['vim9script', 'a'], 'E1100:')
1407 CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1407 v9.CheckScriptFailure(['vim9script', 'c = 1'], 'E488:')
1408 CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1408 v9.CheckScriptFailure(['vim9script', 'c'], 'E1100:')
1409 CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1409 v9.CheckScriptFailure(['vim9script', 'i = 1'], 'E488:')
1410 CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1410 v9.CheckScriptFailure(['vim9script', 'i'], 'E1100:')
1411 CheckScriptFailure(['vim9script', 'o = 1'], 'E1100:') 1411 v9.CheckScriptFailure(['vim9script', 'o = 1'], 'E1100:')
1412 CheckScriptFailure(['vim9script', 'o'], 'E1100:') 1412 v9.CheckScriptFailure(['vim9script', 'o'], 'E1100:')
1413 CheckScriptFailure(['vim9script', 't'], 'E1100:') 1413 v9.CheckScriptFailure(['vim9script', 't'], 'E1100:')
1414 CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1414 v9.CheckScriptFailure(['vim9script', 't = 1'], 'E1100:')
1415 CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1415 v9.CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:')
1416 enddef 1416 enddef
1417 1417
1418 def IfElse(what: number): string 1418 def s:IfElse(what: number): string
1419 var res = '' 1419 var res = ''
1420 if what == 1 1420 if what == 1
1421 res = "one" 1421 res = "one"
1422 elseif what == 2 1422 elseif what == 2
1423 res = "two" 1423 res = "two"
1432 assert_equal('two', IfElse(2)) 1432 assert_equal('two', IfElse(2))
1433 assert_equal('three', IfElse(3)) 1433 assert_equal('three', IfElse(3))
1434 enddef 1434 enddef
1435 1435
1436 def Test_if_elseif_else_fails() 1436 def Test_if_elseif_else_fails()
1437 CheckDefFailure(['elseif true'], 'E582:') 1437 v9.CheckDefFailure(['elseif true'], 'E582:')
1438 CheckDefFailure(['else'], 'E581:') 1438 v9.CheckDefFailure(['else'], 'E581:')
1439 CheckDefFailure(['endif'], 'E580:') 1439 v9.CheckDefFailure(['endif'], 'E580:')
1440 CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:') 1440 v9.CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:')
1441 CheckDefFailure(['if true', 'echo 1'], 'E171:') 1441 v9.CheckDefFailure(['if true', 'echo 1'], 'E171:')
1442 1442
1443 var lines =<< trim END 1443 var lines =<< trim END
1444 var s = '' 1444 var s = ''
1445 if s = '' 1445 if s = ''
1446 endif 1446 endif
1447 END 1447 END
1448 CheckDefFailure(lines, 'E488:') 1448 v9.CheckDefFailure(lines, 'E488:')
1449 1449
1450 lines =<< trim END 1450 lines =<< trim END
1451 var s = '' 1451 var s = ''
1452 if s == '' 1452 if s == ''
1453 elseif s = '' 1453 elseif s = ''
1454 endif 1454 endif
1455 END 1455 END
1456 CheckDefFailure(lines, 'E488:') 1456 v9.CheckDefFailure(lines, 'E488:')
1457 enddef 1457 enddef
1458 1458
1459 let g:bool_true = v:true 1459 let g:bool_true = v:true
1460 let g:bool_false = v:false 1460 let g:bool_false = v:false
1461 1461
1588 )->setline(1) 1588 )->setline(1)
1589 endif 1589 endif
1590 enddef 1590 enddef
1591 1591
1592 def Test_if_const_expr_fails() 1592 def Test_if_const_expr_fails()
1593 CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 1593 v9.CheckDefFailure(['if "aaa" == "bbb'], 'E114:')
1594 CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1594 v9.CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:')
1595 CheckDefFailure(["if has('aaa'"], 'E110:') 1595 v9.CheckDefFailure(["if has('aaa'"], 'E110:')
1596 CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 1596 v9.CheckDefFailure(["if has('aaa') ? true false"], 'E109:')
1597 enddef 1597 enddef
1598 1598
1599 def RunNested(i: number): number 1599 def s:RunNested(i: number): number
1600 var x: number = 0 1600 var x: number = 0
1601 if i % 2 1601 if i % 2
1602 if 1 1602 if 1
1603 # comment 1603 # comment
1604 else 1604 else
1643 assert_equal('execute-var-var', getline(1)) 1643 assert_equal('execute-var-var', getline(1))
1644 bwipe! 1644 bwipe!
1645 1645
1646 var n = true 1646 var n = true
1647 execute 'echomsg' (n ? '"true"' : '"no"') 1647 execute 'echomsg' (n ? '"true"' : '"no"')
1648 assert_match('^true$', Screenline(&lines)) 1648 assert_match('^true$', g:Screenline(&lines))
1649 1649
1650 echomsg [1, 2, 3] {a: 1, b: 2} 1650 echomsg [1, 2, 3] {a: 1, b: 2}
1651 assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 1651 assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', g:Screenline(&lines))
1652 1652
1653 CheckDefFailure(['execute xxx'], 'E1001:', 1) 1653 v9.CheckDefFailure(['execute xxx'], 'E1001:', 1)
1654 CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 1654 v9.CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1)
1655 CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 1655 v9.CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1)
1656 enddef 1656 enddef
1657 1657
1658 def Test_execute_cmd_vimscript() 1658 def Test_execute_cmd_vimscript()
1659 # only checks line continuation 1659 # only checks line continuation
1660 var lines =<< trim END 1660 var lines =<< trim END
1663 .. ' = ' .. 1663 .. ' = ' ..
1664 '28' 1664 '28'
1665 assert_equal(28, g:someVar) 1665 assert_equal(28, g:someVar)
1666 unlet g:someVar 1666 unlet g:someVar
1667 END 1667 END
1668 CheckScriptSuccess(lines) 1668 v9.CheckScriptSuccess(lines)
1669 enddef 1669 enddef
1670 1670
1671 def Test_echo_cmd() 1671 def Test_echo_cmd()
1672 echo 'some' # comment 1672 echo 'some' # comment
1673 echon 'thing' 1673 echon 'thing'
1674 assert_match('^something$', Screenline(&lines)) 1674 assert_match('^something$', g:Screenline(&lines))
1675 1675
1676 echo "some" # comment 1676 echo "some" # comment
1677 echon "thing" 1677 echon "thing"
1678 assert_match('^something$', Screenline(&lines)) 1678 assert_match('^something$', g:Screenline(&lines))
1679 1679
1680 var str1 = 'some' 1680 var str1 = 'some'
1681 var str2 = 'more' 1681 var str2 = 'more'
1682 echo str1 str2 1682 echo str1 str2
1683 assert_match('^some more$', Screenline(&lines)) 1683 assert_match('^some more$', g:Screenline(&lines))
1684 1684
1685 CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1685 v9.CheckDefFailure(['echo "xxx"# comment'], 'E488:')
1686 enddef 1686 enddef
1687 1687
1688 def Test_echomsg_cmd() 1688 def Test_echomsg_cmd()
1689 echomsg 'some' 'more' # comment 1689 echomsg 'some' 'more' # comment
1690 assert_match('^some more$', Screenline(&lines)) 1690 assert_match('^some more$', g:Screenline(&lines))
1691 echo 'clear' 1691 echo 'clear'
1692 :1messages 1692 :1messages
1693 assert_match('^some more$', Screenline(&lines)) 1693 assert_match('^some more$', g:Screenline(&lines))
1694 1694
1695 CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1695 v9.CheckDefFailure(['echomsg "xxx"# comment'], 'E488:')
1696 enddef 1696 enddef
1697 1697
1698 def Test_echomsg_cmd_vimscript() 1698 def Test_echomsg_cmd_vimscript()
1699 # only checks line continuation 1699 # only checks line continuation
1700 var lines =<< trim END 1700 var lines =<< trim END
1701 vim9script 1701 vim9script
1702 echomsg 'here' 1702 echomsg 'here'
1703 .. ' is ' .. 1703 .. ' is ' ..
1704 'a message' 1704 'a message'
1705 assert_match('^here is a message$', Screenline(&lines)) 1705 assert_match('^here is a message$', g:Screenline(&lines))
1706 END 1706 END
1707 CheckScriptSuccess(lines) 1707 v9.CheckScriptSuccess(lines)
1708 enddef 1708 enddef
1709 1709
1710 def Test_echoerr_cmd() 1710 def Test_echoerr_cmd()
1711 var local = 'local' 1711 var local = 'local'
1712 try 1712 try
1726 'wrong' 1726 'wrong'
1727 catch 1727 catch
1728 assert_match('this is wrong', v:exception) 1728 assert_match('this is wrong', v:exception)
1729 endtry 1729 endtry
1730 END 1730 END
1731 CheckScriptSuccess(lines) 1731 v9.CheckScriptSuccess(lines)
1732 enddef 1732 enddef
1733 1733
1734 def Test_echoconsole_cmd() 1734 def Test_echoconsole_cmd()
1735 var local = 'local' 1735 var local = 'local'
1736 echoconsole 'something' local # comment 1736 echoconsole 'something' local # comment
1784 result += [n] 1784 result += [n]
1785 endfor 1785 endfor
1786 endif 1786 endif
1787 assert_equal([3, 4], result) 1787 assert_equal([3, 4], result)
1788 END 1788 END
1789 CheckDefAndScriptSuccess(lines) 1789 v9.CheckDefAndScriptSuccess(lines)
1790 1790
1791 # test skipped blocks at inside of function 1791 # test skipped blocks at inside of function
1792 lines =<< trim END 1792 lines =<< trim END
1793 def DefTrue() 1793 def DefTrue()
1794 var result = [] 1794 var result = []
1818 endif 1818 endif
1819 assert_equal([3, 4], result) 1819 assert_equal([3, 4], result)
1820 enddef 1820 enddef
1821 DefFalse() 1821 DefFalse()
1822 END 1822 END
1823 CheckDefAndScriptSuccess(lines) 1823 v9.CheckDefAndScriptSuccess(lines)
1824 enddef 1824 enddef
1825 1825
1826 def Test_for_loop() 1826 def Test_for_loop()
1827 var lines =<< trim END 1827 var lines =<< trim END
1828 var result = '' 1828 var result = ''
1929 for _ in range(3) 1929 for _ in range(3)
1930 reslist->add('x') 1930 reslist->add('x')
1931 endfor 1931 endfor
1932 assert_equal(['x', 'x', 'x'], reslist) 1932 assert_equal(['x', 'x', 'x'], reslist)
1933 END 1933 END
1934 CheckDefAndScriptSuccess(lines) 1934 v9.CheckDefAndScriptSuccess(lines)
1935 enddef 1935 enddef
1936 1936
1937 def Test_for_loop_with_closure() 1937 def Test_for_loop_with_closure()
1938 var lines =<< trim END 1938 var lines =<< trim END
1939 var flist: list<func> 1939 var flist: list<func>
1943 endfor 1943 endfor
1944 for i in range(5) 1944 for i in range(5)
1945 assert_equal(4, flist[i]()) 1945 assert_equal(4, flist[i]())
1946 endfor 1946 endfor
1947 END 1947 END
1948 CheckDefAndScriptSuccess(lines) 1948 v9.CheckDefAndScriptSuccess(lines)
1949 1949
1950 lines =<< trim END 1950 lines =<< trim END
1951 var flist: list<func> 1951 var flist: list<func>
1952 for i in range(5) 1952 for i in range(5)
1953 var inloop = i 1953 var inloop = i
1957 endfor 1957 endfor
1958 for i in range(5) 1958 for i in range(5)
1959 assert_equal(4, flist[i]()) 1959 assert_equal(4, flist[i]())
1960 endfor 1960 endfor
1961 END 1961 END
1962 CheckDefAndScriptSuccess(lines) 1962 v9.CheckDefAndScriptSuccess(lines)
1963 enddef 1963 enddef
1964 1964
1965 def Test_for_loop_fails() 1965 def Test_for_loop_fails()
1966 CheckDefAndScriptFailure(['for '], ['E1097:', 'E690:']) 1966 v9.CheckDefAndScriptFailure(['for '], ['E1097:', 'E690:'])
1967 CheckDefAndScriptFailure(['for x'], ['E1097:', 'E690:']) 1967 v9.CheckDefAndScriptFailure(['for x'], ['E1097:', 'E690:'])
1968 CheckDefAndScriptFailure(['for x in'], ['E1097:', 'E15:']) 1968 v9.CheckDefAndScriptFailure(['for x in'], ['E1097:', 'E15:'])
1969 CheckDefAndScriptFailure(['for # in range(5)'], 'E690:') 1969 v9.CheckDefAndScriptFailure(['for # in range(5)'], 'E690:')
1970 CheckDefAndScriptFailure(['for i In range(5)'], 'E690:') 1970 v9.CheckDefAndScriptFailure(['for i In range(5)'], 'E690:')
1971 CheckDefAndScriptFailure(['var x = 5', 'for x in range(5)', 'endfor'], ['E1017:', 'E1041:']) 1971 v9.CheckDefAndScriptFailure(['var x = 5', 'for x in range(5)', 'endfor'], ['E1017:', 'E1041:'])
1972 CheckScriptFailure(['vim9script', 'var x = 5', 'for x in range(5)', '# comment', 'endfor'], 'E1041:', 3) 1972 v9.CheckScriptFailure(['vim9script', 'var x = 5', 'for x in range(5)', '# comment', 'endfor'], 'E1041:', 3)
1973 CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 1973 v9.CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:')
1974 delfunc! g:Func 1974 delfunc! g:Func
1975 CheckDefFailure(['for i in xxx'], 'E1001:') 1975 v9.CheckDefFailure(['for i in xxx'], 'E1001:')
1976 CheckDefFailure(['endfor'], 'E588:') 1976 v9.CheckDefFailure(['endfor'], 'E588:')
1977 CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1977 v9.CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:')
1978 1978
1979 # wrong type detected at compile time 1979 # wrong type detected at compile time
1980 CheckDefFailure(['for i in {a: 1}', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported') 1980 v9.CheckDefFailure(['for i in {a: 1}', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported')
1981 1981
1982 # wrong type detected at runtime 1982 # wrong type detected at runtime
1983 g:adict = {a: 1} 1983 g:adict = {a: 1}
1984 CheckDefExecFailure(['for i in g:adict', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported') 1984 v9.CheckDefExecFailure(['for i in g:adict', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported')
1985 unlet g:adict 1985 unlet g:adict
1986 1986
1987 var lines =<< trim END 1987 var lines =<< trim END
1988 var d: list<dict<any>> = [{a: 0}] 1988 var d: list<dict<any>> = [{a: 0}]
1989 for e in d 1989 for e in d
1990 e = {a: 0, b: ''} 1990 e = {a: 0, b: ''}
1991 endfor 1991 endfor
1992 END 1992 END
1993 CheckDefAndScriptFailure(lines, ['E1018:', 'E46:'], 3) 1993 v9.CheckDefAndScriptFailure(lines, ['E1018:', 'E46:'], 3)
1994 1994
1995 lines =<< trim END 1995 lines =<< trim END
1996 for nr: number in ['foo'] 1996 for nr: number in ['foo']
1997 endfor 1997 endfor
1998 END 1998 END
1999 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) 1999 v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got string', 1)
2000 2000
2001 lines =<< trim END 2001 lines =<< trim END
2002 for n : number in [1, 2] 2002 for n : number in [1, 2]
2003 echo n 2003 echo n
2004 endfor 2004 endfor
2005 END 2005 END
2006 CheckDefAndScriptFailure(lines, 'E1059:', 1) 2006 v9.CheckDefAndScriptFailure(lines, 'E1059:', 1)
2007 2007
2008 lines =<< trim END 2008 lines =<< trim END
2009 var d: dict<number> = {a: 1, b: 2} 2009 var d: dict<number> = {a: 1, b: 2}
2010 for [k: job, v: job] in d->items() 2010 for [k: job, v: job] in d->items()
2011 echo k v 2011 echo k v
2012 endfor 2012 endfor
2013 END 2013 END
2014 CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2) 2014 v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2)
2015 2015
2016 lines =<< trim END 2016 lines =<< trim END
2017 var i = 0 2017 var i = 0
2018 for i in [1, 2, 3] 2018 for i in [1, 2, 3]
2019 echo i 2019 echo i
2020 endfor 2020 endfor
2021 END 2021 END
2022 CheckDefExecAndScriptFailure(lines, ['E1017:', 'E1041:']) 2022 v9.CheckDefExecAndScriptFailure(lines, ['E1017:', 'E1041:'])
2023 2023
2024 lines =<< trim END 2024 lines =<< trim END
2025 var l = [0] 2025 var l = [0]
2026 for l[0] in [1, 2, 3] 2026 for l[0] in [1, 2, 3]
2027 echo l[0] 2027 echo l[0]
2028 endfor 2028 endfor
2029 END 2029 END
2030 CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) 2030 v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:'])
2031 2031
2032 lines =<< trim END 2032 lines =<< trim END
2033 var d = {x: 0} 2033 var d = {x: 0}
2034 for d.x in [1, 2, 3] 2034 for d.x in [1, 2, 3]
2035 echo d.x 2035 echo d.x
2036 endfor 2036 endfor
2037 END 2037 END
2038 CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) 2038 v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:'])
2039 enddef 2039 enddef
2040 2040
2041 def Test_for_loop_script_var() 2041 def Test_for_loop_script_var()
2042 # cannot use s:var in a :def function 2042 # cannot use s:var in a :def function
2043 CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:') 2043 v9.CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:')
2044 2044
2045 # can use s:var in Vim9 script, with or without s: 2045 # can use s:var in Vim9 script, with or without s:
2046 var lines =<< trim END 2046 var lines =<< trim END
2047 vim9script 2047 vim9script
2048 var total = 0 2048 var total = 0
2105 for [_, n, _] in [[1, 2, 3], [4, 5, 6]] 2105 for [_, n, _] in [[1, 2, 3], [4, 5, 6]]
2106 res->add(n) 2106 res->add(n)
2107 endfor 2107 endfor
2108 assert_equal([2, 5], res) 2108 assert_equal([2, 5], res)
2109 END 2109 END
2110 CheckDefAndScriptSuccess(lines) 2110 v9.CheckDefAndScriptSuccess(lines)
2111 2111
2112 lines =<< trim END 2112 lines =<< trim END
2113 for [v1, v2] in [[1, 2, 3], [3, 4]] 2113 for [v1, v2] in [[1, 2, 3], [3, 4]]
2114 echo v1 v2 2114 echo v1 v2
2115 endfor 2115 endfor
2116 END 2116 END
2117 CheckDefExecFailure(lines, 'E710:', 1) 2117 v9.CheckDefExecFailure(lines, 'E710:', 1)
2118 2118
2119 lines =<< trim END 2119 lines =<< trim END
2120 for [v1, v2] in [[1], [3, 4]] 2120 for [v1, v2] in [[1], [3, 4]]
2121 echo v1 v2 2121 echo v1 v2
2122 endfor 2122 endfor
2123 END 2123 END
2124 CheckDefExecFailure(lines, 'E711:', 1) 2124 v9.CheckDefExecFailure(lines, 'E711:', 1)
2125 2125
2126 lines =<< trim END 2126 lines =<< trim END
2127 for [v1, v1] in [[1, 2], [3, 4]] 2127 for [v1, v1] in [[1, 2], [3, 4]]
2128 echo v1 2128 echo v1
2129 endfor 2129 endfor
2130 END 2130 END
2131 CheckDefExecFailure(lines, 'E1017:', 1) 2131 v9.CheckDefExecFailure(lines, 'E1017:', 1)
2132 enddef 2132 enddef
2133 2133
2134 def Test_for_loop_with_try_continue() 2134 def Test_for_loop_with_try_continue()
2135 var lines =<< trim END 2135 var lines =<< trim END
2136 var looped = 0 2136 var looped = 0
2146 endtry 2146 endtry
2147 endfor 2147 endfor
2148 assert_equal(3, looped) 2148 assert_equal(3, looped)
2149 assert_equal(3, cleanup) 2149 assert_equal(3, cleanup)
2150 END 2150 END
2151 CheckDefAndScriptSuccess(lines) 2151 v9.CheckDefAndScriptSuccess(lines)
2152 enddef 2152 enddef
2153 2153
2154 def Test_while_skipped_block() 2154 def Test_while_skipped_block()
2155 # test skipped blocks at outside of function 2155 # test skipped blocks at outside of function
2156 var lines =<< trim END 2156 var lines =<< trim END
2185 n += 1 2185 n += 1
2186 endwhile 2186 endwhile
2187 endif 2187 endif
2188 assert_equal([3, 4], result) 2188 assert_equal([3, 4], result)
2189 END 2189 END
2190 CheckDefAndScriptSuccess(lines) 2190 v9.CheckDefAndScriptSuccess(lines)
2191 2191
2192 # test skipped blocks at inside of function 2192 # test skipped blocks at inside of function
2193 lines =<< trim END 2193 lines =<< trim END
2194 def DefTrue() 2194 def DefTrue()
2195 var result = [] 2195 var result = []
2229 endif 2229 endif
2230 assert_equal([3, 4], result) 2230 assert_equal([3, 4], result)
2231 enddef 2231 enddef
2232 DefFalse() 2232 DefFalse()
2233 END 2233 END
2234 CheckDefAndScriptSuccess(lines) 2234 v9.CheckDefAndScriptSuccess(lines)
2235 enddef 2235 enddef
2236 2236
2237 def Test_while_loop() 2237 def Test_while_loop()
2238 var result = '' 2238 var result = ''
2239 var cnt = 0 2239 var cnt = 0
2264 result ..= s 2264 result ..= s
2265 cnt += 1 2265 cnt += 1
2266 endwhile 2266 endwhile
2267 assert_equal('v0v1v2', result) 2267 assert_equal('v0v1v2', result)
2268 END 2268 END
2269 CheckScriptSuccess(lines) 2269 v9.CheckScriptSuccess(lines)
2270 enddef 2270 enddef
2271 2271
2272 def Test_while_loop_fails() 2272 def Test_while_loop_fails()
2273 CheckDefFailure(['while xxx'], 'E1001:') 2273 v9.CheckDefFailure(['while xxx'], 'E1001:')
2274 CheckDefFailure(['endwhile'], 'E588:') 2274 v9.CheckDefFailure(['endwhile'], 'E588:')
2275 CheckDefFailure(['continue'], 'E586:') 2275 v9.CheckDefFailure(['continue'], 'E586:')
2276 CheckDefFailure(['if true', 'continue'], 'E586:') 2276 v9.CheckDefFailure(['if true', 'continue'], 'E586:')
2277 CheckDefFailure(['break'], 'E587:') 2277 v9.CheckDefFailure(['break'], 'E587:')
2278 CheckDefFailure(['if true', 'break'], 'E587:') 2278 v9.CheckDefFailure(['if true', 'break'], 'E587:')
2279 CheckDefFailure(['while 1', 'echo 3'], 'E170:') 2279 v9.CheckDefFailure(['while 1', 'echo 3'], 'E170:')
2280 2280
2281 var lines =<< trim END 2281 var lines =<< trim END
2282 var s = '' 2282 var s = ''
2283 while s = '' 2283 while s = ''
2284 endwhile 2284 endwhile
2285 END 2285 END
2286 CheckDefFailure(lines, 'E488:') 2286 v9.CheckDefFailure(lines, 'E488:')
2287 enddef 2287 enddef
2288 2288
2289 def Test_interrupt_loop() 2289 def Test_interrupt_loop()
2290 var caught = false 2290 var caught = false
2291 var x = 0 2291 var x = 0
2340 split('one two three') 2340 split('one two three')
2341 ) 2341 )
2342 enddef 2342 enddef
2343 2343
2344 def Test_vim9_comment() 2344 def Test_vim9_comment()
2345 CheckScriptSuccess([ 2345 v9.CheckScriptSuccess([
2346 'vim9script', 2346 'vim9script',
2347 '# something', 2347 '# something',
2348 '#something', 2348 '#something',
2349 '#{something', 2349 '#{something',
2350 ]) 2350 ])
2351 2351
2352 split Xfile 2352 split Xfile
2353 CheckScriptSuccess([ 2353 v9.CheckScriptSuccess([
2354 'vim9script', 2354 'vim9script',
2355 'edit #something', 2355 'edit #something',
2356 ]) 2356 ])
2357 CheckScriptSuccess([ 2357 v9.CheckScriptSuccess([
2358 'vim9script', 2358 'vim9script',
2359 'edit #{something', 2359 'edit #{something',
2360 ]) 2360 ])
2361 close 2361 close
2362 2362
2363 CheckScriptFailure([ 2363 v9.CheckScriptFailure([
2364 'vim9script', 2364 'vim9script',
2365 ':# something', 2365 ':# something',
2366 ], 'E488:') 2366 ], 'E488:')
2367 CheckScriptFailure([ 2367 v9.CheckScriptFailure([
2368 '# something', 2368 '# something',
2369 ], 'E488:') 2369 ], 'E488:')
2370 CheckScriptFailure([ 2370 v9.CheckScriptFailure([
2371 ':# something', 2371 ':# something',
2372 ], 'E488:') 2372 ], 'E488:')
2373 2373
2374 { # block start 2374 { # block start
2375 } # block end 2375 } # block end
2376 CheckDefFailure([ 2376 v9.CheckDefFailure([
2377 '{# comment', 2377 '{# comment',
2378 ], 'E488:') 2378 ], 'E488:')
2379 CheckDefFailure([ 2379 v9.CheckDefFailure([
2380 '{', 2380 '{',
2381 '}# comment', 2381 '}# comment',
2382 ], 'E488:') 2382 ], 'E488:')
2383 2383
2384 echo "yes" # comment 2384 echo "yes" # comment
2385 CheckDefFailure([ 2385 v9.CheckDefFailure([
2386 'echo "yes"# comment', 2386 'echo "yes"# comment',
2387 ], 'E488:') 2387 ], 'E488:')
2388 CheckScriptSuccess([ 2388 v9.CheckScriptSuccess([
2389 'vim9script', 2389 'vim9script',
2390 'echo "yes" # something', 2390 'echo "yes" # something',
2391 ]) 2391 ])
2392 CheckScriptFailure([ 2392 v9.CheckScriptFailure([
2393 'vim9script', 2393 'vim9script',
2394 'echo "yes"# something', 2394 'echo "yes"# something',
2395 ], 'E121:') 2395 ], 'E121:')
2396 CheckScriptFailure([ 2396 v9.CheckScriptFailure([
2397 'vim9script', 2397 'vim9script',
2398 'echo# something', 2398 'echo# something',
2399 ], 'E1144:') 2399 ], 'E1144:')
2400 CheckScriptFailure([ 2400 v9.CheckScriptFailure([
2401 'echo "yes" # something', 2401 'echo "yes" # something',
2402 ], 'E121:') 2402 ], 'E121:')
2403 2403
2404 exe "echo" # comment 2404 exe "echo" # comment
2405 CheckDefFailure([ 2405 v9.CheckDefFailure([
2406 'exe "echo"# comment', 2406 'exe "echo"# comment',
2407 ], 'E488:') 2407 ], 'E488:')
2408 CheckScriptSuccess([ 2408 v9.CheckScriptSuccess([
2409 'vim9script', 2409 'vim9script',
2410 'exe "echo" # something', 2410 'exe "echo" # something',
2411 ]) 2411 ])
2412 CheckScriptFailure([ 2412 v9.CheckScriptFailure([
2413 'vim9script', 2413 'vim9script',
2414 'exe "echo"# something', 2414 'exe "echo"# something',
2415 ], 'E121:') 2415 ], 'E121:')
2416 CheckScriptFailure([ 2416 v9.CheckScriptFailure([
2417 'vim9script', 2417 'vim9script',
2418 'exe# something', 2418 'exe# something',
2419 ], 'E1144:') 2419 ], 'E1144:')
2420 CheckScriptFailure([ 2420 v9.CheckScriptFailure([
2421 'exe "echo" # something', 2421 'exe "echo" # something',
2422 ], 'E121:') 2422 ], 'E121:')
2423 2423
2424 CheckDefFailure([ 2424 v9.CheckDefFailure([
2425 'try# comment', 2425 'try# comment',
2426 ' echo "yes"', 2426 ' echo "yes"',
2427 'catch', 2427 'catch',
2428 'endtry', 2428 'endtry',
2429 ], 'E1144:') 2429 ], 'E1144:')
2430 CheckScriptFailure([ 2430 v9.CheckScriptFailure([
2431 'vim9script', 2431 'vim9script',
2432 'try# comment', 2432 'try# comment',
2433 'echo "yes"', 2433 'echo "yes"',
2434 ], 'E1144:') 2434 ], 'E1144:')
2435 CheckDefFailure([ 2435 v9.CheckDefFailure([
2436 'try', 2436 'try',
2437 ' throw#comment', 2437 ' throw#comment',
2438 'catch', 2438 'catch',
2439 'endtry', 2439 'endtry',
2440 ], 'E1144:') 2440 ], 'E1144:')
2441 CheckDefFailure([ 2441 v9.CheckDefFailure([
2442 'try', 2442 'try',
2443 ' throw "yes"#comment', 2443 ' throw "yes"#comment',
2444 'catch', 2444 'catch',
2445 'endtry', 2445 'endtry',
2446 ], 'E488:') 2446 ], 'E488:')
2447 CheckDefFailure([ 2447 v9.CheckDefFailure([
2448 'try', 2448 'try',
2449 ' echo "yes"', 2449 ' echo "yes"',
2450 'catch# comment', 2450 'catch# comment',
2451 'endtry', 2451 'endtry',
2452 ], 'E1144:') 2452 ], 'E1144:')
2453 CheckScriptFailure([ 2453 v9.CheckScriptFailure([
2454 'vim9script', 2454 'vim9script',
2455 'try', 2455 'try',
2456 ' echo "yes"', 2456 ' echo "yes"',
2457 'catch# comment', 2457 'catch# comment',
2458 'endtry', 2458 'endtry',
2459 ], 'E1144:') 2459 ], 'E1144:')
2460 CheckDefFailure([ 2460 v9.CheckDefFailure([
2461 'try', 2461 'try',
2462 ' echo "yes"', 2462 ' echo "yes"',
2463 'catch /pat/# comment', 2463 'catch /pat/# comment',
2464 'endtry', 2464 'endtry',
2465 ], 'E488:') 2465 ], 'E488:')
2466 CheckDefFailure([ 2466 v9.CheckDefFailure([
2467 'try', 2467 'try',
2468 'echo "yes"', 2468 'echo "yes"',
2469 'catch', 2469 'catch',
2470 'endtry# comment', 2470 'endtry# comment',
2471 ], 'E1144:') 2471 ], 'E1144:')
2472 CheckScriptFailure([ 2472 v9.CheckScriptFailure([
2473 'vim9script', 2473 'vim9script',
2474 'try', 2474 'try',
2475 ' echo "yes"', 2475 ' echo "yes"',
2476 'catch', 2476 'catch',
2477 'endtry# comment', 2477 'endtry# comment',
2478 ], 'E1144:') 2478 ], 'E1144:')
2479 2479
2480 CheckScriptSuccess([ 2480 v9.CheckScriptSuccess([
2481 'vim9script', 2481 'vim9script',
2482 'hi # comment', 2482 'hi # comment',
2483 ]) 2483 ])
2484 CheckScriptFailure([ 2484 v9.CheckScriptFailure([
2485 'vim9script', 2485 'vim9script',
2486 'hi# comment', 2486 'hi# comment',
2487 ], 'E1144:') 2487 ], 'E1144:')
2488 CheckScriptSuccess([ 2488 v9.CheckScriptSuccess([
2489 'vim9script', 2489 'vim9script',
2490 'hi Search # comment', 2490 'hi Search # comment',
2491 ]) 2491 ])
2492 CheckScriptFailure([ 2492 v9.CheckScriptFailure([
2493 'vim9script', 2493 'vim9script',
2494 'hi Search# comment', 2494 'hi Search# comment',
2495 ], 'E416:') 2495 ], 'E416:')
2496 CheckScriptSuccess([ 2496 v9.CheckScriptSuccess([
2497 'vim9script', 2497 'vim9script',
2498 'hi link This Search # comment', 2498 'hi link This Search # comment',
2499 ]) 2499 ])
2500 CheckScriptFailure([ 2500 v9.CheckScriptFailure([
2501 'vim9script', 2501 'vim9script',
2502 'hi link This That# comment', 2502 'hi link This That# comment',
2503 ], 'E413:') 2503 ], 'E413:')
2504 CheckScriptSuccess([ 2504 v9.CheckScriptSuccess([
2505 'vim9script', 2505 'vim9script',
2506 'hi clear This # comment', 2506 'hi clear This # comment',
2507 'hi clear # comment', 2507 'hi clear # comment',
2508 ]) 2508 ])
2509 # not tested, because it doesn't give an error but a warning: 2509 # not tested, because it doesn't give an error but a warning:
2510 # hi clear This# comment', 2510 # hi clear This# comment',
2511 CheckScriptFailure([ 2511 v9.CheckScriptFailure([
2512 'vim9script', 2512 'vim9script',
2513 'hi clear# comment', 2513 'hi clear# comment',
2514 ], 'E416:') 2514 ], 'E416:')
2515 2515
2516 CheckScriptSuccess([ 2516 v9.CheckScriptSuccess([
2517 'vim9script', 2517 'vim9script',
2518 'hi Group term=bold', 2518 'hi Group term=bold',
2519 'match Group /todo/ # comment', 2519 'match Group /todo/ # comment',
2520 ]) 2520 ])
2521 CheckScriptFailure([ 2521 v9.CheckScriptFailure([
2522 'vim9script', 2522 'vim9script',
2523 'hi Group term=bold', 2523 'hi Group term=bold',
2524 'match Group /todo/# comment', 2524 'match Group /todo/# comment',
2525 ], 'E488:') 2525 ], 'E488:')
2526 CheckScriptSuccess([ 2526 v9.CheckScriptSuccess([
2527 'vim9script', 2527 'vim9script',
2528 'match # comment', 2528 'match # comment',
2529 ]) 2529 ])
2530 CheckScriptFailure([ 2530 v9.CheckScriptFailure([
2531 'vim9script', 2531 'vim9script',
2532 'match# comment', 2532 'match# comment',
2533 ], 'E1144:') 2533 ], 'E1144:')
2534 CheckScriptSuccess([ 2534 v9.CheckScriptSuccess([
2535 'vim9script', 2535 'vim9script',
2536 'match none # comment', 2536 'match none # comment',
2537 ]) 2537 ])
2538 CheckScriptFailure([ 2538 v9.CheckScriptFailure([
2539 'vim9script', 2539 'vim9script',
2540 'match none# comment', 2540 'match none# comment',
2541 ], 'E475:') 2541 ], 'E475:')
2542 2542
2543 CheckScriptSuccess([ 2543 v9.CheckScriptSuccess([
2544 'vim9script', 2544 'vim9script',
2545 'menutrans clear # comment', 2545 'menutrans clear # comment',
2546 ]) 2546 ])
2547 CheckScriptFailure([ 2547 v9.CheckScriptFailure([
2548 'vim9script', 2548 'vim9script',
2549 'menutrans clear# comment text', 2549 'menutrans clear# comment text',
2550 ], 'E474:') 2550 ], 'E474:')
2551 2551
2552 CheckScriptSuccess([ 2552 v9.CheckScriptSuccess([
2553 'vim9script', 2553 'vim9script',
2554 'syntax clear # comment', 2554 'syntax clear # comment',
2555 ]) 2555 ])
2556 CheckScriptFailure([ 2556 v9.CheckScriptFailure([
2557 'vim9script', 2557 'vim9script',
2558 'syntax clear# comment text', 2558 'syntax clear# comment text',
2559 ], 'E28:') 2559 ], 'E28:')
2560 CheckScriptSuccess([ 2560 v9.CheckScriptSuccess([
2561 'vim9script', 2561 'vim9script',
2562 'syntax keyword Word some', 2562 'syntax keyword Word some',
2563 'syntax clear Word # comment', 2563 'syntax clear Word # comment',
2564 ]) 2564 ])
2565 CheckScriptFailure([ 2565 v9.CheckScriptFailure([
2566 'vim9script', 2566 'vim9script',
2567 'syntax keyword Word some', 2567 'syntax keyword Word some',
2568 'syntax clear Word# comment text', 2568 'syntax clear Word# comment text',
2569 ], 'E28:') 2569 ], 'E28:')
2570 2570
2571 CheckScriptSuccess([ 2571 v9.CheckScriptSuccess([
2572 'vim9script', 2572 'vim9script',
2573 'syntax list # comment', 2573 'syntax list # comment',
2574 ]) 2574 ])
2575 CheckScriptFailure([ 2575 v9.CheckScriptFailure([
2576 'vim9script', 2576 'vim9script',
2577 'syntax list# comment text', 2577 'syntax list# comment text',
2578 ], 'E28:') 2578 ], 'E28:')
2579 2579
2580 CheckScriptSuccess([ 2580 v9.CheckScriptSuccess([
2581 'vim9script', 2581 'vim9script',
2582 'syntax match Word /pat/ oneline # comment', 2582 'syntax match Word /pat/ oneline # comment',
2583 ]) 2583 ])
2584 CheckScriptFailure([ 2584 v9.CheckScriptFailure([
2585 'vim9script', 2585 'vim9script',
2586 'syntax match Word /pat/ oneline# comment', 2586 'syntax match Word /pat/ oneline# comment',
2587 ], 'E475:') 2587 ], 'E475:')
2588 2588
2589 CheckScriptSuccess([ 2589 v9.CheckScriptSuccess([
2590 'vim9script', 2590 'vim9script',
2591 'syntax keyword Word word # comm[ent', 2591 'syntax keyword Word word # comm[ent',
2592 ]) 2592 ])
2593 CheckScriptFailure([ 2593 v9.CheckScriptFailure([
2594 'vim9script', 2594 'vim9script',
2595 'syntax keyword Word word# comm[ent', 2595 'syntax keyword Word word# comm[ent',
2596 ], 'E789:') 2596 ], 'E789:')
2597 2597
2598 CheckScriptSuccess([ 2598 v9.CheckScriptSuccess([
2599 'vim9script', 2599 'vim9script',
2600 'syntax match Word /pat/ # comment', 2600 'syntax match Word /pat/ # comment',
2601 ]) 2601 ])
2602 CheckScriptFailure([ 2602 v9.CheckScriptFailure([
2603 'vim9script', 2603 'vim9script',
2604 'syntax match Word /pat/# comment', 2604 'syntax match Word /pat/# comment',
2605 ], 'E402:') 2605 ], 'E402:')
2606 2606
2607 CheckScriptSuccess([ 2607 v9.CheckScriptSuccess([
2608 'vim9script', 2608 'vim9script',
2609 'syntax match Word /pat/ contains=Something # comment', 2609 'syntax match Word /pat/ contains=Something # comment',
2610 ]) 2610 ])
2611 CheckScriptFailure([ 2611 v9.CheckScriptFailure([
2612 'vim9script', 2612 'vim9script',
2613 'syntax match Word /pat/ contains=Something# comment', 2613 'syntax match Word /pat/ contains=Something# comment',
2614 ], 'E475:') 2614 ], 'E475:')
2615 CheckScriptFailure([ 2615 v9.CheckScriptFailure([
2616 'vim9script', 2616 'vim9script',
2617 'syntax match Word /pat/ contains= # comment', 2617 'syntax match Word /pat/ contains= # comment',
2618 ], 'E406:') 2618 ], 'E406:')
2619 CheckScriptFailure([ 2619 v9.CheckScriptFailure([
2620 'vim9script', 2620 'vim9script',
2621 'syntax match Word /pat/ contains=# comment', 2621 'syntax match Word /pat/ contains=# comment',
2622 ], 'E475:') 2622 ], 'E475:')
2623 2623
2624 CheckScriptSuccess([ 2624 v9.CheckScriptSuccess([
2625 'vim9script', 2625 'vim9script',
2626 'syntax region Word start=/pat/ end=/pat/ # comment', 2626 'syntax region Word start=/pat/ end=/pat/ # comment',
2627 ]) 2627 ])
2628 CheckScriptFailure([ 2628 v9.CheckScriptFailure([
2629 'vim9script', 2629 'vim9script',
2630 'syntax region Word start=/pat/ end=/pat/# comment', 2630 'syntax region Word start=/pat/ end=/pat/# comment',
2631 ], 'E402:') 2631 ], 'E402:')
2632 2632
2633 CheckScriptSuccess([ 2633 v9.CheckScriptSuccess([
2634 'vim9script', 2634 'vim9script',
2635 'syntax sync # comment', 2635 'syntax sync # comment',
2636 ]) 2636 ])
2637 CheckScriptFailure([ 2637 v9.CheckScriptFailure([
2638 'vim9script', 2638 'vim9script',
2639 'syntax sync# comment', 2639 'syntax sync# comment',
2640 ], 'E404:') 2640 ], 'E404:')
2641 CheckScriptSuccess([ 2641 v9.CheckScriptSuccess([
2642 'vim9script', 2642 'vim9script',
2643 'syntax sync ccomment # comment', 2643 'syntax sync ccomment # comment',
2644 ]) 2644 ])
2645 CheckScriptFailure([ 2645 v9.CheckScriptFailure([
2646 'vim9script', 2646 'vim9script',
2647 'syntax sync ccomment# comment', 2647 'syntax sync ccomment# comment',
2648 ], 'E404:') 2648 ], 'E404:')
2649 2649
2650 CheckScriptSuccess([ 2650 v9.CheckScriptSuccess([
2651 'vim9script', 2651 'vim9script',
2652 'syntax cluster Some contains=Word # comment', 2652 'syntax cluster Some contains=Word # comment',
2653 ]) 2653 ])
2654 CheckScriptFailure([ 2654 v9.CheckScriptFailure([
2655 'vim9script', 2655 'vim9script',
2656 'syntax cluster Some contains=Word# comment', 2656 'syntax cluster Some contains=Word# comment',
2657 ], 'E475:') 2657 ], 'E475:')
2658 2658
2659 CheckScriptSuccess([ 2659 v9.CheckScriptSuccess([
2660 'vim9script', 2660 'vim9script',
2661 'command Echo echo # comment', 2661 'command Echo echo # comment',
2662 'command Echo # comment', 2662 'command Echo # comment',
2663 'delcommand Echo', 2663 'delcommand Echo',
2664 ]) 2664 ])
2665 CheckScriptFailure([ 2665 v9.CheckScriptFailure([
2666 'vim9script', 2666 'vim9script',
2667 'command Echo echo# comment', 2667 'command Echo echo# comment',
2668 'Echo', 2668 'Echo',
2669 ], 'E1144:') 2669 ], 'E1144:')
2670 delcommand Echo 2670 delcommand Echo
2671 2671
2672 var curdir = getcwd() 2672 var curdir = getcwd()
2673 CheckScriptSuccess([ 2673 v9.CheckScriptSuccess([
2674 'command Echo cd " comment', 2674 'command Echo cd " comment',
2675 'Echo', 2675 'Echo',
2676 'delcommand Echo', 2676 'delcommand Echo',
2677 ]) 2677 ])
2678 CheckScriptSuccess([ 2678 v9.CheckScriptSuccess([
2679 'vim9script', 2679 'vim9script',
2680 'command Echo cd # comment', 2680 'command Echo cd # comment',
2681 'Echo', 2681 'Echo',
2682 'delcommand Echo', 2682 'delcommand Echo',
2683 ]) 2683 ])
2684 CheckScriptFailure([ 2684 v9.CheckScriptFailure([
2685 'vim9script', 2685 'vim9script',
2686 'command Echo cd " comment', 2686 'command Echo cd " comment',
2687 'Echo', 2687 'Echo',
2688 ], 'E344:') 2688 ], 'E344:')
2689 delcommand Echo 2689 delcommand Echo
2690 chdir(curdir) 2690 chdir(curdir)
2691 2691
2692 CheckScriptFailure([ 2692 v9.CheckScriptFailure([
2693 'vim9script', 2693 'vim9script',
2694 'command Echo# comment', 2694 'command Echo# comment',
2695 ], 'E182:') 2695 ], 'E182:')
2696 CheckScriptFailure([ 2696 v9.CheckScriptFailure([
2697 'vim9script', 2697 'vim9script',
2698 'command Echo echo', 2698 'command Echo echo',
2699 'command Echo# comment', 2699 'command Echo# comment',
2700 ], 'E182:') 2700 ], 'E182:')
2701 delcommand Echo 2701 delcommand Echo
2702 2702
2703 CheckScriptSuccess([ 2703 v9.CheckScriptSuccess([
2704 'vim9script', 2704 'vim9script',
2705 'function # comment', 2705 'function # comment',
2706 ]) 2706 ])
2707 CheckScriptFailure([ 2707 v9.CheckScriptFailure([
2708 'vim9script', 2708 'vim9script',
2709 'function " comment', 2709 'function " comment',
2710 ], 'E129:') 2710 ], 'E129:')
2711 CheckScriptFailure([ 2711 v9.CheckScriptFailure([
2712 'vim9script', 2712 'vim9script',
2713 'function# comment', 2713 'function# comment',
2714 ], 'E1144:') 2714 ], 'E1144:')
2715 CheckScriptSuccess([ 2715 v9.CheckScriptSuccess([
2716 'vim9script', 2716 'vim9script',
2717 'function CheckScriptSuccess # comment', 2717 'import "./vim9.vim" as v9',
2718 ]) 2718 'function v9.CheckScriptSuccess # comment',
2719 CheckScriptFailure([ 2719 ])
2720 'vim9script', 2720 v9.CheckScriptFailure([
2721 'function CheckScriptSuccess# comment', 2721 'vim9script',
2722 ], 'E488:') 2722 'import "./vim9.vim" as v9',
2723 2723 'function v9.CheckScriptSuccess# comment',
2724 CheckScriptSuccess([ 2724 ], 'E1048: Item not found in script: CheckScriptSuccess#')
2725
2726 v9.CheckScriptSuccess([
2725 'vim9script', 2727 'vim9script',
2726 'func g:DeleteMeA()', 2728 'func g:DeleteMeA()',
2727 'endfunc', 2729 'endfunc',
2728 'delfunction g:DeleteMeA # comment', 2730 'delfunction g:DeleteMeA # comment',
2729 ]) 2731 ])
2730 CheckScriptFailure([ 2732 v9.CheckScriptFailure([
2731 'vim9script', 2733 'vim9script',
2732 'func g:DeleteMeB()', 2734 'func g:DeleteMeB()',
2733 'endfunc', 2735 'endfunc',
2734 'delfunction g:DeleteMeB# comment', 2736 'delfunction g:DeleteMeB# comment',
2735 ], 'E488:') 2737 ], 'E488:')
2736 2738
2737 CheckScriptSuccess([ 2739 v9.CheckScriptSuccess([
2738 'vim9script', 2740 'vim9script',
2739 'call execute("ls") # comment', 2741 'call execute("ls") # comment',
2740 ]) 2742 ])
2741 CheckScriptFailure([ 2743 v9.CheckScriptFailure([
2742 'vim9script', 2744 'vim9script',
2743 'call execute("ls")# comment', 2745 'call execute("ls")# comment',
2744 ], 'E488:') 2746 ], 'E488:')
2745 2747
2746 CheckScriptFailure([ 2748 v9.CheckScriptFailure([
2747 'def Test() " comment', 2749 'def Test() " comment',
2748 'enddef', 2750 'enddef',
2749 ], 'E488:') 2751 ], 'E488:')
2750 CheckScriptFailure([ 2752 v9.CheckScriptFailure([
2751 'vim9script', 2753 'vim9script',
2752 'def Test() " comment', 2754 'def Test() " comment',
2753 'enddef', 2755 'enddef',
2754 ], 'E488:') 2756 ], 'E488:')
2755 2757
2756 CheckScriptSuccess([ 2758 v9.CheckScriptSuccess([
2757 'func Test() " comment', 2759 'func Test() " comment',
2758 'endfunc', 2760 'endfunc',
2759 'delfunc Test', 2761 'delfunc Test',
2760 ]) 2762 ])
2761 CheckScriptSuccess([ 2763 v9.CheckScriptSuccess([
2762 'vim9script', 2764 'vim9script',
2763 'func Test() " comment', 2765 'func Test() " comment',
2764 'endfunc', 2766 'endfunc',
2765 ]) 2767 ])
2766 2768
2767 CheckScriptSuccess([ 2769 v9.CheckScriptSuccess([
2768 'def Test() # comment', 2770 'def Test() # comment',
2769 'enddef', 2771 'enddef',
2770 ]) 2772 ])
2771 CheckScriptFailure([ 2773 v9.CheckScriptFailure([
2772 'func Test() # comment', 2774 'func Test() # comment',
2773 'endfunc', 2775 'endfunc',
2774 ], 'E488:') 2776 ], 'E488:')
2775 2777
2776 var lines =<< trim END 2778 var lines =<< trim END
2781 \ end='bar' 2783 \ end='bar'
2782 syn region Text start='foo' 2784 syn region Text start='foo'
2783 #\ comment 2785 #\ comment
2784 \ end='bar' 2786 \ end='bar'
2785 END 2787 END
2786 CheckScriptSuccess(lines) 2788 v9.CheckScriptSuccess(lines)
2787 2789
2788 lines =<< trim END 2790 lines =<< trim END
2789 vim9script 2791 vim9script
2790 syn region Text 2792 syn region Text
2791 \ start='foo' 2793 \ start='foo'
2792 "\ comment 2794 "\ comment
2793 \ end='bar' 2795 \ end='bar'
2794 END 2796 END
2795 CheckScriptFailure(lines, 'E399:') 2797 v9.CheckScriptFailure(lines, 'E399:')
2796 enddef 2798 enddef
2797 2799
2798 def Test_vim9_comment_gui() 2800 def Test_vim9_comment_gui()
2799 CheckCanRunGui 2801 CheckCanRunGui
2800 2802
2801 CheckScriptFailure([ 2803 v9.CheckScriptFailure([
2802 'vim9script', 2804 'vim9script',
2803 'gui#comment' 2805 'gui#comment'
2804 ], 'E1144:') 2806 ], 'E1144:')
2805 CheckScriptFailure([ 2807 v9.CheckScriptFailure([
2806 'vim9script', 2808 'vim9script',
2807 'gui -f#comment' 2809 'gui -f#comment'
2808 ], 'E194:') 2810 ], 'E194:')
2809 enddef 2811 enddef
2810 2812
2826 assert_fails('doautocmd Syntax#comment', 'E216:') 2828 assert_fails('doautocmd Syntax#comment', 'E216:')
2827 2829
2828 au! TabEnter 2830 au! TabEnter
2829 unlet g:entered 2831 unlet g:entered
2830 2832
2831 CheckScriptSuccess([ 2833 v9.CheckScriptSuccess([
2832 'vim9script', 2834 'vim9script',
2833 'g:var = 123', 2835 'g:var = 123',
2834 'b:var = 456', 2836 'b:var = 456',
2835 'w:var = 777', 2837 'w:var = 777',
2836 't:var = 888', 2838 't:var = 888',
2837 'unlet g:var w:var # something', 2839 'unlet g:var w:var # something',
2838 ]) 2840 ])
2839 2841
2840 CheckScriptFailure([ 2842 v9.CheckScriptFailure([
2841 'vim9script', 2843 'vim9script',
2842 'let var = 123', 2844 'let var = 123',
2843 ], 'E1126: Cannot use :let in Vim9 script') 2845 ], 'E1126: Cannot use :let in Vim9 script')
2844 2846
2845 CheckScriptFailure([ 2847 v9.CheckScriptFailure([
2846 'vim9script', 2848 'vim9script',
2847 'var g:var = 123', 2849 'var g:var = 123',
2848 ], 'E1016: Cannot declare a global variable:') 2850 ], 'E1016: Cannot declare a global variable:')
2849 2851
2850 CheckScriptFailure([ 2852 v9.CheckScriptFailure([
2851 'vim9script', 2853 'vim9script',
2852 'var b:var = 123', 2854 'var b:var = 123',
2853 ], 'E1016: Cannot declare a buffer variable:') 2855 ], 'E1016: Cannot declare a buffer variable:')
2854 2856
2855 CheckScriptFailure([ 2857 v9.CheckScriptFailure([
2856 'vim9script', 2858 'vim9script',
2857 'var w:var = 123', 2859 'var w:var = 123',
2858 ], 'E1016: Cannot declare a window variable:') 2860 ], 'E1016: Cannot declare a window variable:')
2859 2861
2860 CheckScriptFailure([ 2862 v9.CheckScriptFailure([
2861 'vim9script', 2863 'vim9script',
2862 'var t:var = 123', 2864 'var t:var = 123',
2863 ], 'E1016: Cannot declare a tab variable:') 2865 ], 'E1016: Cannot declare a tab variable:')
2864 2866
2865 CheckScriptFailure([ 2867 v9.CheckScriptFailure([
2866 'vim9script', 2868 'vim9script',
2867 'var v:version = 123', 2869 'var v:version = 123',
2868 ], 'E1016: Cannot declare a v: variable:') 2870 ], 'E1016: Cannot declare a v: variable:')
2869 2871
2870 CheckScriptFailure([ 2872 v9.CheckScriptFailure([
2871 'vim9script', 2873 'vim9script',
2872 'var $VARIABLE = "text"', 2874 'var $VARIABLE = "text"',
2873 ], 'E1016: Cannot declare an environment variable:') 2875 ], 'E1016: Cannot declare an environment variable:')
2874 2876
2875 CheckScriptFailure([ 2877 v9.CheckScriptFailure([
2876 'vim9script', 2878 'vim9script',
2877 'g:var = 123', 2879 'g:var = 123',
2878 'unlet g:var# comment1', 2880 'unlet g:var# comment1',
2879 ], 'E108:') 2881 ], 'E108:')
2880 2882
2881 CheckScriptFailure([ 2883 v9.CheckScriptFailure([
2882 'let g:var = 123', 2884 'let g:var = 123',
2883 'unlet g:var # something', 2885 'unlet g:var # something',
2884 ], 'E488:') 2886 ], 'E488:')
2885 2887
2886 CheckScriptSuccess([ 2888 v9.CheckScriptSuccess([
2887 'vim9script', 2889 'vim9script',
2888 'if 1 # comment2', 2890 'if 1 # comment2',
2889 ' echo "yes"', 2891 ' echo "yes"',
2890 'elseif 2 #comment', 2892 'elseif 2 #comment',
2891 ' echo "no"', 2893 ' echo "no"',
2892 'endif', 2894 'endif',
2893 ]) 2895 ])
2894 2896
2895 CheckScriptFailure([ 2897 v9.CheckScriptFailure([
2896 'vim9script', 2898 'vim9script',
2897 'if 1# comment3', 2899 'if 1# comment3',
2898 ' echo "yes"', 2900 ' echo "yes"',
2899 'endif', 2901 'endif',
2900 ], 'E488:') 2902 ], 'E488:')
2901 2903
2902 CheckScriptFailure([ 2904 v9.CheckScriptFailure([
2903 'vim9script', 2905 'vim9script',
2904 'if 0 # comment4', 2906 'if 0 # comment4',
2905 ' echo "yes"', 2907 ' echo "yes"',
2906 'elseif 2#comment', 2908 'elseif 2#comment',
2907 ' echo "no"', 2909 ' echo "no"',
2908 'endif', 2910 'endif',
2909 ], 'E488:') 2911 ], 'E488:')
2910 2912
2911 CheckScriptSuccess([ 2913 v9.CheckScriptSuccess([
2912 'vim9script', 2914 'vim9script',
2913 'var v = 1 # comment5', 2915 'var v = 1 # comment5',
2914 ]) 2916 ])
2915 2917
2916 CheckScriptFailure([ 2918 v9.CheckScriptFailure([
2917 'vim9script', 2919 'vim9script',
2918 'var v = 1# comment6', 2920 'var v = 1# comment6',
2919 ], 'E488:') 2921 ], 'E488:')
2920 2922
2921 CheckScriptSuccess([ 2923 v9.CheckScriptSuccess([
2922 'vim9script', 2924 'vim9script',
2923 'new' 2925 'new'
2924 'setline(1, ["# define pat", "last"])', 2926 'setline(1, ["# define pat", "last"])',
2925 ':$', 2927 ':$',
2926 'dsearch /pat/ #comment', 2928 'dsearch /pat/ #comment',
2927 'bwipe!', 2929 'bwipe!',
2928 ]) 2930 ])
2929 2931
2930 CheckScriptFailure([ 2932 v9.CheckScriptFailure([
2931 'vim9script', 2933 'vim9script',
2932 'new' 2934 'new'
2933 'setline(1, ["# define pat", "last"])', 2935 'setline(1, ["# define pat", "last"])',
2934 ':$', 2936 ':$',
2935 'dsearch /pat/#comment', 2937 'dsearch /pat/#comment',
2936 'bwipe!', 2938 'bwipe!',
2937 ], 'E488:') 2939 ], 'E488:')
2938 2940
2939 CheckScriptFailure([ 2941 v9.CheckScriptFailure([
2940 'vim9script', 2942 'vim9script',
2941 'func! SomeFunc()', 2943 'func! SomeFunc()',
2942 ], 'E477:') 2944 ], 'E477:')
2943 enddef 2945 enddef
2944 2946
3003 catch 3005 catch
3004 error = v:exception 3006 error = v:exception
3005 endtry 3007 endtry
3006 assert_match('E741: Value is locked: local', error) 3008 assert_match('E741: Value is locked: local', error)
3007 END 3009 END
3008 CheckScriptSuccess(lines) 3010 v9.CheckScriptSuccess(lines)
3009 enddef 3011 enddef
3010 3012
3011 3013
3012 func Test_vim9script_not_global() 3014 func Test_vim9script_not_global()
3013 " check that items defined in Vim9 script are script-local, not global 3015 " check that items defined in Vim9 script are script-local, not global
3063 call s:Func() 3065 call s:Func()
3064 doau CursorHold 3066 doau CursorHold
3065 call assert_equal(2, s:counter) 3067 call assert_equal(2, s:counter)
3066 au! CursorHold 3068 au! CursorHold
3067 END 3069 END
3068 CheckScriptSuccess(lines) 3070 v9.CheckScriptSuccess(lines)
3069 enddef 3071 enddef
3070 3072
3071 def Test_error_in_autoload_script() 3073 def Test_error_in_autoload_script()
3072 var save_rtp = &rtp 3074 var save_rtp = &rtp
3073 var dir = getcwd() .. '/Xruntime' 3075 var dir = getcwd() .. '/Xruntime'
3100 endtry 3102 endtry
3101 endfunction 3103 endfunction
3102 3104
3103 Legacy() 3105 Legacy()
3104 END 3106 END
3105 CheckScriptSuccess(lines) 3107 v9.CheckScriptSuccess(lines)
3106 3108
3107 &rtp = save_rtp 3109 &rtp = save_rtp
3108 delete(dir, 'rf') 3110 delete(dir, 'rf')
3109 enddef 3111 enddef
3110 3112
3111 def Test_invalid_sid() 3113 def Test_invalid_sid()
3112 assert_fails('func <SNR>1234_func', 'E123:') 3114 assert_fails('func <SNR>1234_func', 'E123:')
3113 3115
3114 if RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"') 3116 if g:RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"')
3115 assert_equal([], readfile('Xdidit')) 3117 assert_equal([], readfile('Xdidit'))
3116 endif 3118 endif
3117 delete('Xdidit') 3119 delete('Xdidit')
3118 enddef 3120 enddef
3119 3121
3120 def Test_restoring_cpo() 3122 def Test_restoring_cpo()
3121 writefile(['vim9script', 'set nocp'], 'Xsourced') 3123 writefile(['vim9script', 'set nocp'], 'Xsourced')
3122 writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose') 3124 writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose')
3123 if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose') 3125 if g:RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose')
3124 assert_equal(['done'], readfile('Xdone')) 3126 assert_equal(['done'], readfile('Xdone'))
3125 endif 3127 endif
3126 delete('Xsourced') 3128 delete('Xsourced')
3127 delete('Xclose') 3129 delete('Xclose')
3128 delete('Xdone') 3130 delete('Xdone')
3167 call writefile(['vim9: ' .. &cpo], 'Xresult', 'a') 3169 call writefile(['vim9: ' .. &cpo], 'Xresult', 'a')
3168 qa 3170 qa
3169 END 3171 END
3170 writefile(lines, 'Xvim9') 3172 writefile(lines, 'Xvim9')
3171 3173
3172 var cmd = GetVimCommand() .. " -S Xlegacy -S Xvim9" 3174 var cmd = g:GetVimCommand() .. " -S Xlegacy -S Xvim9"
3173 cmd = substitute(cmd, '-u NONE', '', '') 3175 cmd = substitute(cmd, '-u NONE', '', '')
3174 exe "silent !" .. cmd 3176 exe "silent !" .. cmd
3175 3177
3176 assert_equal([ 3178 assert_equal([
3177 'before: aABceFs', 3179 'before: aABceFs',
3206 exe 'set rtp^=' .. getcwd() .. '/Xdir' 3208 exe 'set rtp^=' .. getcwd() .. '/Xdir'
3207 au CmdlineEnter : ++once timer_start(0, (_) => script#func()) 3209 au CmdlineEnter : ++once timer_start(0, (_) => script#func())
3208 setline(1, 'some text') 3210 setline(1, 'some text')
3209 END 3211 END
3210 call writefile(lines, 'XTest_redraw_cpo') 3212 call writefile(lines, 'XTest_redraw_cpo')
3211 let buf = RunVimInTerminal('-S XTest_redraw_cpo', {'rows': 6}) 3213 let buf = g:RunVimInTerminal('-S XTest_redraw_cpo', {'rows': 6})
3212 call term_sendkeys(buf, "V:") 3214 call term_sendkeys(buf, "V:")
3213 call VerifyScreenDump(buf, 'Test_vim9_no_redraw', {}) 3215 call VerifyScreenDump(buf, 'Test_vim9_no_redraw', {})
3214 3216
3215 " clean up 3217 " clean up
3216 call term_sendkeys(buf, "\<Esc>u") 3218 call term_sendkeys(buf, "\<Esc>u")
3217 call StopVimInTerminal(buf) 3219 call g:StopVimInTerminal(buf)
3218 call delete('XTest_redraw_cpo') 3220 call delete('XTest_redraw_cpo')
3219 call delete('Xdir', 'rf') 3221 call delete('Xdir', 'rf')
3220 endfunc 3222 endfunc
3221 3223
3222 3224
3223 def Test_unset_any_variable() 3225 def Test_unset_any_variable()
3224 var lines =<< trim END 3226 var lines =<< trim END
3225 var name: any 3227 var name: any
3226 assert_equal(0, name) 3228 assert_equal(0, name)
3227 END 3229 END
3228 CheckDefAndScriptSuccess(lines) 3230 v9.CheckDefAndScriptSuccess(lines)
3229 enddef 3231 enddef
3230 3232
3231 func Test_define_func_at_command_line() 3233 func Test_define_func_at_command_line()
3232 CheckRunVimInTerminal 3234 CheckRunVimInTerminal
3233 3235
3243 call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd') 3245 call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd')
3244 endfunc 3246 endfunc
3245 END 3247 END
3246 writefile([''], 'Xdidcmd') 3248 writefile([''], 'Xdidcmd')
3247 writefile(lines, 'XcallFunc') 3249 writefile(lines, 'XcallFunc')
3248 var buf = RunVimInTerminal('-S XcallFunc', {rows: 6}) 3250 var buf = g:RunVimInTerminal('-S XcallFunc', {rows: 6})
3249 # define Afunc() on the command line 3251 # define Afunc() on the command line
3250 term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>") 3252 term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>")
3251 term_sendkeys(buf, ":call CheckAndQuit()\<CR>") 3253 term_sendkeys(buf, ":call CheckAndQuit()\<CR>")
3252 WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd'))) 3254 g:WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd')))
3253 3255
3254 call StopVimInTerminal(buf) 3256 call g:StopVimInTerminal(buf)
3255 delete('XcallFunc') 3257 delete('XcallFunc')
3256 delete('Xdidcmd') 3258 delete('Xdidcmd')
3257 enddef 3259 enddef
3258 3260
3259 def Test_script_var_scope() 3261 def Test_script_var_scope()
3265 echo one 3267 echo one
3266 endif 3268 endif
3267 echo one 3269 echo one
3268 endif 3270 endif
3269 END 3271 END
3270 CheckScriptFailure(lines, 'E121:', 7) 3272 v9.CheckScriptFailure(lines, 'E121:', 7)
3271 3273
3272 lines =<< trim END 3274 lines =<< trim END
3273 vim9script 3275 vim9script
3274 if true 3276 if true
3275 if false 3277 if false
3280 echo one 3282 echo one
3281 endif 3283 endif
3282 echo one 3284 echo one
3283 endif 3285 endif
3284 END 3286 END
3285 CheckScriptFailure(lines, 'E121:', 10) 3287 v9.CheckScriptFailure(lines, 'E121:', 10)
3286 3288
3287 lines =<< trim END 3289 lines =<< trim END
3288 vim9script 3290 vim9script
3289 while true 3291 while true
3290 var one = 'one' 3292 var one = 'one'
3291 echo one 3293 echo one
3292 break 3294 break
3293 endwhile 3295 endwhile
3294 echo one 3296 echo one
3295 END 3297 END
3296 CheckScriptFailure(lines, 'E121:', 7) 3298 v9.CheckScriptFailure(lines, 'E121:', 7)
3297 3299
3298 lines =<< trim END 3300 lines =<< trim END
3299 vim9script 3301 vim9script
3300 for i in range(1) 3302 for i in range(1)
3301 var one = 'one' 3303 var one = 'one'
3302 echo one 3304 echo one
3303 endfor 3305 endfor
3304 echo one 3306 echo one
3305 END 3307 END
3306 CheckScriptFailure(lines, 'E121:', 6) 3308 v9.CheckScriptFailure(lines, 'E121:', 6)
3307 3309
3308 lines =<< trim END 3310 lines =<< trim END
3309 vim9script 3311 vim9script
3310 { 3312 {
3311 var one = 'one' 3313 var one = 'one'
3312 assert_equal('one', one) 3314 assert_equal('one', one)
3313 } 3315 }
3314 assert_false(exists('one')) 3316 assert_false(exists('one'))
3315 assert_false(exists('s:one')) 3317 assert_false(exists('s:one'))
3316 END 3318 END
3317 CheckScriptSuccess(lines) 3319 v9.CheckScriptSuccess(lines)
3318 3320
3319 lines =<< trim END 3321 lines =<< trim END
3320 vim9script 3322 vim9script
3321 { 3323 {
3322 var one = 'one' 3324 var one = 'one'
3323 echo one 3325 echo one
3324 } 3326 }
3325 echo one 3327 echo one
3326 END 3328 END
3327 CheckScriptFailure(lines, 'E121:', 6) 3329 v9.CheckScriptFailure(lines, 'E121:', 6)
3328 enddef 3330 enddef
3329 3331
3330 def Test_catch_exception_in_callback() 3332 def Test_catch_exception_in_callback()
3331 var lines =<< trim END 3333 var lines =<< trim END
3332 vim9script 3334 vim9script
3342 endtry 3344 endtry
3343 enddef 3345 enddef
3344 popup_menu('popup', {callback: Callback}) 3346 popup_menu('popup', {callback: Callback})
3345 feedkeys("\r", 'xt') 3347 feedkeys("\r", 'xt')
3346 END 3348 END
3347 CheckScriptSuccess(lines) 3349 v9.CheckScriptSuccess(lines)
3348 3350
3349 unlet g:caught 3351 unlet g:caught
3350 enddef 3352 enddef
3351 3353
3352 def Test_no_unknown_error_after_error() 3354 def Test_no_unknown_error_after_error()
3394 3396
3395 def Test_white_space_after_command() 3397 def Test_white_space_after_command()
3396 var lines =<< trim END 3398 var lines =<< trim END
3397 exit_cb: Func}) 3399 exit_cb: Func})
3398 END 3400 END
3399 CheckDefAndScriptFailure(lines, 'E1144:', 1) 3401 v9.CheckDefAndScriptFailure(lines, 'E1144:', 1)
3400 3402
3401 lines =<< trim END 3403 lines =<< trim END
3402 e# 3404 e#
3403 END 3405 END
3404 CheckDefAndScriptFailure(lines, 'E1144:', 1) 3406 v9.CheckDefAndScriptFailure(lines, 'E1144:', 1)
3405 enddef 3407 enddef
3406 3408
3407 def Test_script_var_gone_when_sourced_twice() 3409 def Test_script_var_gone_when_sourced_twice()
3408 var lines =<< trim END 3410 var lines =<< trim END
3409 vim9script 3411 vim9script
3436 3438
3437 def Test_unsupported_commands() 3439 def Test_unsupported_commands()
3438 var lines =<< trim END 3440 var lines =<< trim END
3439 ka 3441 ka
3440 END 3442 END
3441 CheckDefFailure(lines, 'E476:') 3443 v9.CheckDefFailure(lines, 'E476:')
3442 CheckScriptFailure(['vim9script'] + lines, 'E492:') 3444 v9.CheckScriptFailure(['vim9script'] + lines, 'E492:')
3443 3445
3444 lines =<< trim END 3446 lines =<< trim END
3445 :1ka 3447 :1ka
3446 END 3448 END
3447 CheckDefFailure(lines, 'E476:') 3449 v9.CheckDefFailure(lines, 'E476:')
3448 CheckScriptFailure(['vim9script'] + lines, 'E492:') 3450 v9.CheckScriptFailure(['vim9script'] + lines, 'E492:')
3449 3451
3450 lines =<< trim END 3452 lines =<< trim END
3451 t 3453 t
3452 END 3454 END
3453 CheckDefFailure(lines, 'E1100:') 3455 v9.CheckDefFailure(lines, 'E1100:')
3454 CheckScriptFailure(['vim9script'] + lines, 'E1100:') 3456 v9.CheckScriptFailure(['vim9script'] + lines, 'E1100:')
3455 3457
3456 lines =<< trim END 3458 lines =<< trim END
3457 x 3459 x
3458 END 3460 END
3459 CheckDefFailure(lines, 'E1100:') 3461 v9.CheckDefFailure(lines, 'E1100:')
3460 CheckScriptFailure(['vim9script'] + lines, 'E1100:') 3462 v9.CheckScriptFailure(['vim9script'] + lines, 'E1100:')
3461 3463
3462 lines =<< trim END 3464 lines =<< trim END
3463 xit 3465 xit
3464 END 3466 END
3465 CheckDefFailure(lines, 'E1100:') 3467 v9.CheckDefFailure(lines, 'E1100:')
3466 CheckScriptFailure(['vim9script'] + lines, 'E1100:') 3468 v9.CheckScriptFailure(['vim9script'] + lines, 'E1100:')
3467 enddef 3469 enddef
3468 3470
3469 def Test_mapping_line_number() 3471 def Test_mapping_line_number()
3470 var lines =<< trim END 3472 var lines =<< trim END
3471 vim9script 3473 vim9script
3483 .. '<F3> a' 3485 .. '<F3> a'
3484 .. 'b' 3486 .. 'b'
3485 .. 'c' 3487 .. 'c'
3486 enddef 3488 enddef
3487 END 3489 END
3488 CheckScriptSuccess(lines) 3490 v9.CheckScriptSuccess(lines)
3489 var res = execute('verbose nmap <F3>') 3491 var res = execute('verbose nmap <F3>')
3490 assert_match('No mapping found', res) 3492 assert_match('No mapping found', res)
3491 3493
3492 g:FuncA() 3494 g:FuncA()
3493 res = execute('verbose nmap <F3>') 3495 res = execute('verbose nmap <F3>')
3501 # legacy script allows for white space 3503 # legacy script allows for white space
3502 var lines =<< trim END 3504 var lines =<< trim END
3503 set foldlevel =11 3505 set foldlevel =11
3504 call assert_equal(11, &foldlevel) 3506 call assert_equal(11, &foldlevel)
3505 END 3507 END
3506 CheckScriptSuccess(lines) 3508 v9.CheckScriptSuccess(lines)
3507 3509
3508 set foldlevel 3510 set foldlevel
3509 set foldlevel=12 3511 set foldlevel=12
3510 assert_equal(12, &foldlevel) 3512 assert_equal(12, &foldlevel)
3511 set foldlevel+=2 3513 set foldlevel+=2
3514 assert_equal(11, &foldlevel) 3516 assert_equal(11, &foldlevel)
3515 3517
3516 lines =<< trim END 3518 lines =<< trim END
3517 set foldlevel =1 3519 set foldlevel =1
3518 END 3520 END
3519 CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: =1') 3521 v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: =1')
3520 3522
3521 lines =<< trim END 3523 lines =<< trim END
3522 set foldlevel +=1 3524 set foldlevel +=1
3523 END 3525 END
3524 CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: +=1') 3526 v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: +=1')
3525 3527
3526 lines =<< trim END 3528 lines =<< trim END
3527 set foldlevel ^=1 3529 set foldlevel ^=1
3528 END 3530 END
3529 CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: ^=1') 3531 v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: ^=1')
3530 3532
3531 lines =<< trim END 3533 lines =<< trim END
3532 set foldlevel -=1 3534 set foldlevel -=1
3533 END 3535 END
3534 CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: -=1') 3536 v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: -=1')
3535 3537
3536 set foldlevel& 3538 set foldlevel&
3537 enddef 3539 enddef
3538 3540
3539 def Test_option_modifier() 3541 def Test_option_modifier()
3540 # legacy script allows for white space 3542 # legacy script allows for white space
3541 var lines =<< trim END 3543 var lines =<< trim END
3542 set hlsearch & hlsearch ! 3544 set hlsearch & hlsearch !
3543 call assert_equal(1, &hlsearch) 3545 call assert_equal(1, &hlsearch)
3544 END 3546 END
3545 CheckScriptSuccess(lines) 3547 v9.CheckScriptSuccess(lines)
3546 3548
3547 set hlsearch 3549 set hlsearch
3548 set hlsearch! 3550 set hlsearch!
3549 assert_equal(false, &hlsearch) 3551 assert_equal(false, &hlsearch)
3550 3552
3553 assert_equal(false, &hlsearch) 3555 assert_equal(false, &hlsearch)
3554 3556
3555 lines =<< trim END 3557 lines =<< trim END
3556 set hlsearch & 3558 set hlsearch &
3557 END 3559 END
3558 CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: &') 3560 v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: &')
3559 3561
3560 lines =<< trim END 3562 lines =<< trim END
3561 set hlsearch ! 3563 set hlsearch !
3562 END 3564 END
3563 CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: !') 3565 v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: !')
3564 3566
3565 set hlsearch& 3567 set hlsearch&
3566 enddef 3568 enddef
3567 3569
3568 " This must be called last, it may cause following :def functions to fail 3570 " This must be called last, it may cause following :def functions to fail
3570 var lines =<< trim END 3572 var lines =<< trim END
3571 echoerr 'some' 3573 echoerr 'some'
3572 .. ' error' 3574 .. ' error'
3573 .. ' continued' 3575 .. ' continued'
3574 END 3576 END
3575 CheckDefExecAndScriptFailure(lines, 'some error continued', 1) 3577 v9.CheckDefExecAndScriptFailure(lines, 'some error continued', 1)
3576 enddef 3578 enddef
3577 3579
3578 func Test_debug_with_lambda() 3580 func Test_debug_with_lambda()
3579 CheckRunVimInTerminal 3581 CheckRunVimInTerminal
3580 3582
3591 enddef 3593 enddef
3592 breakadd func Func 3594 breakadd func Func
3593 Func() 3595 Func()
3594 END 3596 END
3595 writefile(lines, 'XdebugFunc') 3597 writefile(lines, 'XdebugFunc')
3596 var buf = RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0}) 3598 var buf = g:RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0})
3597 WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) 3599 g:WaitForAssert(() => assert_match('^>', term_getline(buf, 6)))
3598 3600
3599 term_sendkeys(buf, "cont\<CR>") 3601 term_sendkeys(buf, "cont\<CR>")
3600 WaitForAssert(() => assert_match('\[0\]', term_getline(buf, 5))) 3602 g:WaitForAssert(() => assert_match('\[0\]', term_getline(buf, 5)))
3601 3603
3602 StopVimInTerminal(buf) 3604 g:StopVimInTerminal(buf)
3603 delete('XdebugFunc') 3605 delete('XdebugFunc')
3604 enddef 3606 enddef
3605 3607
3606 func Test_debug_running_out_of_lines() 3608 func Test_debug_running_out_of_lines()
3607 CheckRunVimInTerminal 3609 CheckRunVimInTerminal
3627 enddef 3629 enddef
3628 breakadd func Crash 3630 breakadd func Crash
3629 Crash() 3631 Crash()
3630 END 3632 END
3631 writefile(lines, 'XdebugFunc') 3633 writefile(lines, 'XdebugFunc')
3632 var buf = RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0}) 3634 var buf = g:RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0})
3633 WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) 3635 g:WaitForAssert(() => assert_match('^>', term_getline(buf, 6)))
3634 3636
3635 term_sendkeys(buf, "next\<CR>") 3637 term_sendkeys(buf, "next\<CR>")
3636 TermWait(buf) 3638 g:TermWait(buf)
3637 WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) 3639 g:WaitForAssert(() => assert_match('^>', term_getline(buf, 6)))
3638 3640
3639 term_sendkeys(buf, "cont\<CR>") 3641 term_sendkeys(buf, "cont\<CR>")
3640 TermWait(buf) 3642 g:TermWait(buf)
3641 3643
3642 StopVimInTerminal(buf) 3644 g:StopVimInTerminal(buf)
3643 delete('XdebugFunc') 3645 delete('XdebugFunc')
3644 enddef 3646 enddef
3645 3647
3646 def ProfiledWithLambda() 3648 def s:ProfiledWithLambda()
3647 var n = 3 3649 var n = 3
3648 echo [[1, 2], [3, 4]]->filter((_, l) => l[0] == n) 3650 echo [[1, 2], [3, 4]]->filter((_, l) => l[0] == n)
3649 enddef 3651 enddef
3650 3652
3651 def ProfiledNested() 3653 def s:ProfiledNested()
3652 var x = 0 3654 var x = 0
3653 def Nested(): any 3655 def Nested(): any
3654 return x 3656 return x
3655 enddef 3657 enddef
3656 Nested() 3658 Nested()
3669 vim9script 3671 vim9script
3670 command CmdA echomsg 'CmdA' 3672 command CmdA echomsg 'CmdA'
3671 command CmdB echomsg 'CmdB' 3673 command CmdB echomsg 'CmdB'
3672 Cmd 3674 Cmd
3673 END 3675 END
3674 CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 4) 3676 v9.CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 4)
3675 3677
3676 lines =<< trim END 3678 lines =<< trim END
3677 vim9script 3679 vim9script
3678 def Func() 3680 def Func()
3679 Cmd 3681 Cmd
3680 enddef 3682 enddef
3681 Func() 3683 Func()
3682 END 3684 END
3683 CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 1) 3685 v9.CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 1)
3684 3686
3685 lines =<< trim END 3687 lines =<< trim END
3686 vim9script 3688 vim9script
3687 nnoremap <F3> <ScriptCmd>Cmd<CR> 3689 nnoremap <F3> <ScriptCmd>Cmd<CR>
3688 feedkeys("\<F3>", 'xt') 3690 feedkeys("\<F3>", 'xt')
3689 END 3691 END
3690 CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 3) 3692 v9.CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 3)
3691 3693
3692 delcommand CmdA 3694 delcommand CmdA
3693 delcommand CmdB 3695 delcommand CmdB
3694 nunmap <F3> 3696 nunmap <F3>
3695 enddef 3697 enddef
3707 ProfiledNested() 3709 ProfiledNested()
3708 3710
3709 # Also profile the nested function. Use a different function, although the 3711 # Also profile the nested function. Use a different function, although the
3710 # contents is the same, to make sure it was not already compiled. 3712 # contents is the same, to make sure it was not already compiled.
3711 profile func * 3713 profile func *
3712 ProfiledNestedProfiled() 3714 g:ProfiledNestedProfiled()
3713 3715
3714 profdel func * 3716 profdel func *
3715 profile pause 3717 profile pause
3716 enddef 3718 enddef
3717 3719