1" test execute() 2 3source view_util.vim 4 5func NestedEval() 6 let nested = execute('echo "nested\nlines"') 7 echo 'got: "' . nested . '"' 8endfunc 9 10func NestedRedir() 11 redir => var 12 echo 'broken' 13 redir END 14endfunc 15 16func Test_execute_string() 17 call assert_equal("\nnocompatible", execute('set compatible?')) 18 call assert_equal("\nsomething\nnice", execute('echo "something\nnice"')) 19 call assert_equal("noendofline", execute('echon "noendofline"')) 20 call assert_equal("", execute(123)) 21 22 call assert_equal("\ngot: \"\nnested\nlines\"", execute('call NestedEval()')) 23 redir => redired 24 echo 'this' 25 let evaled = execute('echo "that"') 26 echo 'theend' 27 redir END 28 call assert_equal("\nthis\ntheend", redired) 29 call assert_equal("\nthat", evaled) 30 31 call assert_fails('call execute("doesnotexist")', 'E492:') 32 call assert_fails('call execute(3.4)', 'E806:') 33 call assert_fails('call execute("call NestedRedir()")', 'E930:') 34 35 call assert_equal("\nsomething", execute('echo "something"', '')) 36 call assert_equal("\nsomething", execute('echo "something"', 'silent')) 37 call assert_equal("\nsomething", execute('echo "something"', 'silent!')) 38 call assert_equal("", execute('burp', 'silent!')) 39 call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:') 40 41 call assert_equal("", execute(test_null_string())) 42endfunc 43 44func Test_execute_list() 45 call assert_equal("\nsomething\nnice", execute(['echo "something"', 'echo "nice"'])) 46 let l = ['for n in range(0, 3)', 47 \ 'echo n', 48 \ 'endfor'] 49 call assert_equal("\n0\n1\n2\n3", execute(l)) 50 51 call assert_equal("", execute([])) 52 call assert_equal("", execute(test_null_list())) 53endfunc 54 55func Test_execute_does_not_change_col() 56 echo '' 57 echon 'abcd' 58 let x = execute('silent echo 234343') 59 echon 'xyz' 60 let text = '' 61 for col in range(1, 7) 62 let text .= nr2char(screenchar(&lines, col)) 63 endfor 64 call assert_equal('abcdxyz', text) 65endfunc 66 67func Test_execute_not_silent() 68 echo '' 69 echon 'abcd' 70 let x = execute('echon 234', '') 71 echo 'xyz' 72 let text1 = '' 73 for col in range(1, 8) 74 let text1 .= nr2char(screenchar(&lines - 1, col)) 75 endfor 76 call assert_equal('abcd234 ', text1) 77 let text2 = '' 78 for col in range(1, 4) 79 let text2 .= nr2char(screenchar(&lines, col)) 80 endfor 81 call assert_equal('xyz ', text2) 82endfunc 83 84func Test_win_execute() 85 let thiswin = win_getid() 86 new 87 let otherwin = win_getid() 88 call setline(1, 'the new window') 89 call win_gotoid(thiswin) 90 let line = win_execute(otherwin, 'echo getline(1)') 91 call assert_match('the new window', line) 92 93 if has('textprop') 94 let popupwin = popup_create('the popup win', {'line': 2, 'col': 3}) 95 redraw 96 let line = 'echo getline(1)'->win_execute(popupwin) 97 call assert_match('the popup win', line) 98 99 call popup_close(popupwin) 100 endif 101 102 call win_gotoid(otherwin) 103 bwipe! 104endfunc 105 106func Test_win_execute_update_ruler() 107 enew 108 call setline(1, range(500)) 109 20 110 split 111 let winid = win_getid() 112 set ruler 113 wincmd w 114 let height = winheight(winid) 115 redraw 116 call assert_match('20,1', Screenline(height + 1)) 117 let line = win_execute(winid, 'call cursor(100, 1)') 118 redraw 119 call assert_match('100,1', Screenline(height + 1)) 120 121 bwipe! 122endfunc 123 124func Test_win_execute_other_tab() 125 let thiswin = win_getid() 126 tabnew 127 call win_execute(thiswin, 'let xyz = 1') 128 call assert_equal(1, xyz) 129 tabclose 130 unlet xyz 131endfunc 132