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