vim9.vim (7444B)
1 " Use a different file name for each run. 2 let s:sequence = 1 3 4 func CheckDefSuccess(lines) 5 return 6 endfunc 7 8 func CheckDefFailure(lines, error, lnum = -3) 9 return 10 endfunc 11 12 func CheckDefExecFailure(lines, error, lnum = -3) 13 return 14 endfunc 15 16 func CheckScriptFailure(lines, error, lnum = -3) 17 if get(a:lines, 0, '') ==# 'vim9script' 18 return 19 endif 20 let cwd = getcwd() 21 let fname = 'XScriptFailure' .. s:sequence 22 let s:sequence += 1 23 call writefile(a:lines, fname) 24 try 25 call assert_fails('so ' .. fname, a:error, a:lines, a:lnum) 26 finally 27 call chdir(cwd) 28 call delete(fname) 29 endtry 30 endfunc 31 32 func CheckScriptSuccess(lines) 33 if get(a:lines, 0, '') ==# 'vim9script' 34 return 35 endif 36 let cwd = getcwd() 37 let fname = 'XScriptSuccess' .. s:sequence 38 let s:sequence += 1 39 call writefile(a:lines, fname) 40 try 41 exe 'so ' .. fname 42 finally 43 call chdir(cwd) 44 call delete(fname) 45 endtry 46 endfunc 47 48 func CheckDefAndScriptSuccess(lines) 49 return 50 endfunc 51 52 func CheckDefAndScriptFailure(lines, error, lnum = -3) 53 return 54 endfunc 55 56 func CheckDefExecAndScriptFailure(lines, error, lnum = -3) 57 return 58 endfunc 59 60 " Check that "lines" inside a legacy function has no error. 61 func CheckLegacySuccess(lines) 62 let cwd = getcwd() 63 let fname = 'XlegacySuccess' .. s:sequence 64 let s:sequence += 1 65 call writefile(['func Func()'] + a:lines + ['endfunc'], fname) 66 try 67 exe 'so ' .. fname 68 call Func() 69 finally 70 delfunc! Func 71 call chdir(cwd) 72 call delete(fname) 73 endtry 74 endfunc 75 76 " Check that "lines" inside a legacy function results in the expected error 77 func CheckLegacyFailure(lines, error) 78 let cwd = getcwd() 79 let fname = 'XlegacyFails' .. s:sequence 80 let s:sequence += 1 81 call writefile(['func Func()'] + a:lines + ['endfunc', 'call Func()'], fname) 82 try 83 call assert_fails('so ' .. fname, a:error) 84 finally 85 delfunc! Func 86 call chdir(cwd) 87 call delete(fname) 88 endtry 89 endfunc 90 91 " Translate "lines" to legacy Vim script 92 func s:LegacyTrans(lines) 93 return a:lines->mapnew({_, v -> 94 \ v->substitute('\<VAR\>', 'let', 'g') 95 \ ->substitute('\<LET\>', 'let', 'g') 96 \ ->substitute('\<LSTART\>', '{', 'g') 97 \ ->substitute('\<LMIDDLE\>', '->', 'g') 98 \ ->substitute('\<LEND\>', '}', 'g') 99 \ ->substitute('\<TRUE\>', '1', 'g') 100 \ ->substitute('\<FALSE\>', '0', 'g') 101 \ ->substitute('#"', ' "', 'g') 102 \ }) 103 endfunc 104 105 " Execute "lines" in a legacy function, translated as in 106 " CheckLegacyAndVim9Success() 107 func CheckTransLegacySuccess(lines) 108 call CheckLegacySuccess(s:LegacyTrans(a:lines)) 109 endfunc 110 111 func CheckTransDefSuccess(lines) 112 return 113 endfunc 114 115 func CheckTransVim9Success(lines) 116 return 117 endfunc 118 119 " Execute "lines" in a legacy function 120 " Use 'VAR' for a declaration. 121 " Use 'LET' for an assignment 122 " Use ' #"' for a comment 123 " Use LSTART arg LMIDDLE expr LEND for lambda 124 " Use 'TRUE' for 1 125 " Use 'FALSE' for 0 126 func CheckLegacyAndVim9Success(lines) 127 call CheckTransLegacySuccess(a:lines) 128 endfunc 129 130 " Execute "lines" in a legacy function 131 " Use 'VAR' for a declaration. 132 " Use 'LET' for an assignment 133 " Use ' #"' for a comment 134 func CheckLegacyAndVim9Failure(lines, error) 135 if type(a:error) == type('string') 136 let legacyError = a:error 137 else 138 let legacyError = a:error[0] 139 endif 140 141 let legacylines = a:lines->mapnew({_, v -> 142 \ v->substitute('\<VAR\>', 'let', 'g') 143 \ ->substitute('\<LET\>', 'let', 'g') 144 \ ->substitute('#"', ' "', 'g') 145 \ }) 146 call CheckLegacyFailure(legacylines, legacyError) 147 endfunc 148 149 " Check that "lines" inside a legacy function has no error. 150 func CheckSourceLegacySuccess(lines) 151 let cwd = getcwd() 152 new 153 call setline(1, ['func Func()'] + a:lines + ['endfunc', 'call Func()']) 154 let bnr = bufnr() 155 try 156 :source 157 finally 158 delfunc! Func 159 call chdir(cwd) 160 exe $':bw! {bnr}' 161 endtry 162 endfunc 163 164 " Check that "lines" inside a legacy function results in the expected error 165 func CheckSourceLegacyFailure(lines, error) 166 let cwd = getcwd() 167 new 168 call setline(1, ['func Func()'] + a:lines + ['endfunc', 'call Func()']) 169 let bnr = bufnr() 170 try 171 call assert_fails('source', a:error) 172 finally 173 delfunc! Func 174 call chdir(cwd) 175 exe $':bw! {bnr}' 176 endtry 177 endfunc 178 179 " Execute "lines" in a legacy function, translated as in 180 " CheckSourceLegacyAndVim9Success() 181 func CheckSourceTransLegacySuccess(lines) 182 call CheckSourceLegacySuccess(s:LegacyTrans(a:lines)) 183 endfunc 184 185 " Execute "lines" in a :def function, translated as in 186 " CheckLegacyAndVim9Success() 187 func CheckSourceTransDefSuccess(lines) 188 return 189 endfunc 190 191 " Execute "lines" in a Vim9 script, translated as in 192 " CheckLegacyAndVim9Success() 193 func CheckSourceTransVim9Success(lines) 194 return 195 endfunc 196 197 " Execute "lines" in a legacy function, :def function and Vim9 script. 198 " Use 'VAR' for a declaration. 199 " Use 'LET' for an assignment 200 " Use ' #"' for a comment 201 " Use LSTART arg LMIDDLE expr LEND for lambda 202 " Use 'TRUE' for 1 in legacy, true in Vim9 203 " Use 'FALSE' for 0 in legacy, false in Vim9 204 func CheckSourceLegacyAndVim9Success(lines) 205 call CheckSourceTransLegacySuccess(a:lines) 206 endfunc 207 208 " :source a list of "lines" and check whether it fails with "error" 209 func CheckSourceScriptFailure(lines, error, lnum = -3) 210 if get(a:lines, 0, '') ==# 'vim9script' 211 return 212 endif 213 let cwd = getcwd() 214 new 215 call setline(1, a:lines) 216 let bnr = bufnr() 217 try 218 call assert_fails('source', a:error, a:lines, a:lnum) 219 finally 220 call chdir(cwd) 221 exe $':bw! {bnr}' 222 endtry 223 endfunc 224 225 " :source a list of "lines" and check whether it fails with the list of 226 " "errors" 227 func CheckSourceScriptFailureList(lines, errors, lnum = -3) 228 if get(a:lines, 0, '') ==# 'vim9script' 229 return 230 endif 231 let cwd = getcwd() 232 new 233 let bnr = bufnr() 234 call setline(1, a:lines) 235 try 236 call assert_fails('source', a:errors, a:lines, a:lnum) 237 finally 238 call chdir(cwd) 239 exe $':bw! {bnr}' 240 endtry 241 endfunc 242 243 " :source a list of "lines" and check whether it succeeds 244 func CheckSourceScriptSuccess(lines) 245 if get(a:lines, 0, '') ==# 'vim9script' 246 return 247 endif 248 let cwd = getcwd() 249 new 250 let bnr = bufnr() 251 call setline(1, a:lines) 252 try 253 :source 254 finally 255 call chdir(cwd) 256 exe $':bw! {bnr}' 257 endtry 258 endfunc 259 260 func CheckSourceDefSuccess(lines) 261 return 262 endfunc 263 264 func CheckSourceDefCompileSuccess(lines) 265 return 266 endfunc 267 268 func CheckSourceDefFailure(lines, error, lnum = -3) 269 return 270 endfunc 271 272 func CheckSourceDefExecFailure(lines, error, lnum = -3) 273 return 274 endfunc 275 276 func CheckSourceDefAndScriptFailure(lines, error, lnum = -3) 277 return 278 endfunc 279 280 func CheckSourceDefExecAndScriptFailure(lines, error, lnum = -3) 281 return 282 endfunc 283 284 func CheckSourceSuccess(lines) 285 call CheckSourceScriptSuccess(a:lines) 286 endfunc 287 288 func CheckSourceFailure(lines, error, lnum = -3) 289 call CheckSourceScriptFailure(a:lines, a:error, a:lnum) 290 endfunc 291 292 func CheckSourceFailureList(lines, errors, lnum = -3) 293 call CheckSourceScriptFailureList(a:lines, a:errors, a:lnum) 294 endfunc 295 296 func CheckSourceDefAndScriptSuccess(lines) 297 return 298 endfunc 299 300 " Execute "lines" in a legacy function, :def function and Vim9 script. 301 " Use 'VAR' for a declaration. 302 " Use 'LET' for an assignment 303 " Use ' #"' for a comment 304 func CheckSourceLegacyAndVim9Failure(lines, error) 305 let legacyError = type(a:error) == type('string') ? a:error : a:error[0] 306 call CheckSourceLegacyFailure(s:LegacyTrans(a:lines), legacyError) 307 endfunc