comparison src/testdir/script_util.vim @ 21632:792398a9fe39 v8.2.1366

patch 8.2.1366: test 49 is old style Commit: https://github.com/vim/vim/commit/a6296200bd5191bab7efcdcc16c9e79eb498e8e0 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 5 11:23:13 2020 +0200 patch 8.2.1366: test 49 is old style Problem: Test 49 is old style. Solution: Convert several tests to new style. (Yegappan Lakshmanan, closes #6629)
author Bram Moolenaar <Bram@vim.org>
date Wed, 05 Aug 2020 11:30:03 +0200
parents
children f936d46cc9c1
comparison
equal deleted inserted replaced
21631:e55aba8c2146 21632:792398a9fe39
1 " Functions shared by the tests for Vim Script
2
3 " Commands to track the execution path of a script
4 com! XpathINIT let g:Xpath = ''
5 com! -nargs=1 -bar Xpath let g:Xpath ..= <args>
6 com! XloopINIT let g:Xloop = 1
7 com! -nargs=1 -bar Xloop let g:Xpath ..= <args> .. g:Xloop
8 com! XloopNEXT let g:Xloop += 1
9
10 " MakeScript() - Make a script file from a function. {{{2
11 "
12 " Create a script that consists of the body of the function a:funcname.
13 " Replace any ":return" by a ":finish", any argument variable by a global
14 " variable, and every ":call" by a ":source" for the next following argument
15 " in the variable argument list. This function is useful if similar tests are
16 " to be made for a ":return" from a function call or a ":finish" in a script
17 " file.
18 func MakeScript(funcname, ...)
19 let script = tempname()
20 execute "redir! >" . script
21 execute "function" a:funcname
22 redir END
23 execute "edit" script
24 " Delete the "function" and the "endfunction" lines. Do not include the
25 " word "function" in the pattern since it might be translated if LANG is
26 " set. When MakeScript() is being debugged, this deletes also the debugging
27 " output of its line 3 and 4.
28 exec '1,/.*' . a:funcname . '(.*)/d'
29 /^\d*\s*endfunction\>/,$d
30 %s/^\d*//e
31 %s/return/finish/e
32 %s/\<a:\(\h\w*\)/g:\1/ge
33 normal gg0
34 let cnt = 0
35 while search('\<call\s*\%(\u\|s:\)\w*\s*(.*)', 'W') > 0
36 let cnt = cnt + 1
37 s/\<call\s*\%(\u\|s:\)\w*\s*(.*)/\='source ' . a:{cnt}/
38 endwhile
39 g/^\s*$/d
40 write
41 bwipeout
42 return script
43 endfunc
44
45 " ExecAsScript - Source a temporary script made from a function. {{{2
46 "
47 " Make a temporary script file from the function a:funcname, ":source" it, and
48 " delete it afterwards. However, if an exception is thrown the file may remain,
49 " the caller should call DeleteTheScript() afterwards.
50 let s:script_name = ''
51 function! ExecAsScript(funcname)
52 " Make a script from the function passed as argument.
53 let s:script_name = MakeScript(a:funcname)
54
55 " Source and delete the script.
56 exec "source" s:script_name
57 call delete(s:script_name)
58 let s:script_name = ''
59 endfunction
60
61 function! DeleteTheScript()
62 if s:script_name
63 call delete(s:script_name)
64 let s:script_name = ''
65 endif
66 endfunc
67
68 com! -nargs=1 -bar ExecAsScript call ExecAsScript(<f-args>)
69