179815f1eSBram Moolenaar" test execute()
279815f1eSBram Moolenaar
3*345f28dfSBram Moolenaarsource view_util.vim
4*345f28dfSBram Moolenaar
579815f1eSBram Moolenaarfunc NestedEval()
679815f1eSBram Moolenaar  let nested = execute('echo "nested\nlines"')
779815f1eSBram Moolenaar  echo 'got: "' . nested . '"'
879815f1eSBram Moolenaarendfunc
979815f1eSBram Moolenaar
1079815f1eSBram Moolenaarfunc NestedRedir()
1179815f1eSBram Moolenaar  redir => var
1279815f1eSBram Moolenaar  echo 'broken'
1379815f1eSBram Moolenaar  redir END
1479815f1eSBram Moolenaarendfunc
1579815f1eSBram Moolenaar
1679815f1eSBram Moolenaarfunc Test_execute_string()
1779815f1eSBram Moolenaar  call assert_equal("\nnocompatible", execute('set compatible?'))
1879815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute('echo "something\nnice"'))
1979815f1eSBram Moolenaar  call assert_equal("noendofline", execute('echon "noendofline"'))
2079815f1eSBram Moolenaar  call assert_equal("", execute(123))
2179815f1eSBram Moolenaar
2279815f1eSBram Moolenaar  call assert_equal("\ngot: \"\nnested\nlines\"", execute('call NestedEval()'))
2379815f1eSBram Moolenaar  redir => redired
2479815f1eSBram Moolenaar  echo 'this'
2579815f1eSBram Moolenaar  let evaled = execute('echo "that"')
2679815f1eSBram Moolenaar  echo 'theend'
2779815f1eSBram Moolenaar  redir END
2879815f1eSBram Moolenaar  call assert_equal("\nthis\ntheend", redired)
2979815f1eSBram Moolenaar  call assert_equal("\nthat", evaled)
3079815f1eSBram Moolenaar
3179815f1eSBram Moolenaar  call assert_fails('call execute("doesnotexist")', 'E492:')
3279815f1eSBram Moolenaar  call assert_fails('call execute(3.4)', 'E806:')
3379815f1eSBram Moolenaar  call assert_fails('call execute("call NestedRedir()")', 'E930:')
3479815f1eSBram Moolenaar
3579815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', ''))
3679815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', 'silent'))
3779815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', 'silent!'))
3879815f1eSBram Moolenaar  call assert_equal("", execute('burp', 'silent!'))
3979815f1eSBram Moolenaar  call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:')
4079815f1eSBram Moolenaar
4179815f1eSBram Moolenaar  call assert_equal("", execute(test_null_string()))
4279815f1eSBram Moolenaarendfunc
4379815f1eSBram Moolenaar
4479815f1eSBram Moolenaarfunc Test_execute_list()
4579815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute(['echo "something"', 'echo "nice"']))
4679815f1eSBram Moolenaar  let l = ['for n in range(0, 3)',
4779815f1eSBram Moolenaar	\  'echo n',
4879815f1eSBram Moolenaar	\  'endfor']
4979815f1eSBram Moolenaar  call assert_equal("\n0\n1\n2\n3", execute(l))
5079815f1eSBram Moolenaar
5179815f1eSBram Moolenaar  call assert_equal("", execute([]))
5279815f1eSBram Moolenaar  call assert_equal("", execute(test_null_list()))
5379815f1eSBram Moolenaarendfunc
5410ccaa17SBram Moolenaar
5510ccaa17SBram Moolenaarfunc Test_execute_does_not_change_col()
5610ccaa17SBram Moolenaar  echo ''
5710ccaa17SBram Moolenaar  echon 'abcd'
5810ccaa17SBram Moolenaar  let x = execute('silent echo 234343')
5910ccaa17SBram Moolenaar  echon 'xyz'
6010ccaa17SBram Moolenaar  let text = ''
6110ccaa17SBram Moolenaar  for col in range(1, 7)
6210ccaa17SBram Moolenaar    let text .= nr2char(screenchar(&lines, col))
6310ccaa17SBram Moolenaar  endfor
6410ccaa17SBram Moolenaar  call assert_equal('abcdxyz', text)
6510ccaa17SBram Moolenaarendfunc
66446e7a3cSBram Moolenaar
67446e7a3cSBram Moolenaarfunc Test_execute_not_silent()
68446e7a3cSBram Moolenaar  echo ''
69446e7a3cSBram Moolenaar  echon 'abcd'
70446e7a3cSBram Moolenaar  let x = execute('echon 234', '')
71446e7a3cSBram Moolenaar  echo 'xyz'
72446e7a3cSBram Moolenaar  let text1 = ''
73446e7a3cSBram Moolenaar  for col in range(1, 8)
74446e7a3cSBram Moolenaar    let text1 .= nr2char(screenchar(&lines - 1, col))
75446e7a3cSBram Moolenaar  endfor
76446e7a3cSBram Moolenaar  call assert_equal('abcd234 ', text1)
77446e7a3cSBram Moolenaar  let text2 = ''
78446e7a3cSBram Moolenaar  for col in range(1, 4)
79446e7a3cSBram Moolenaar    let text2 .= nr2char(screenchar(&lines, col))
80446e7a3cSBram Moolenaar  endfor
81446e7a3cSBram Moolenaar  call assert_equal('xyz ', text2)
82446e7a3cSBram Moolenaarendfunc
83868b7b67SBram Moolenaar
84868b7b67SBram Moolenaarfunc Test_win_execute()
85868b7b67SBram Moolenaar  let thiswin = win_getid()
86868b7b67SBram Moolenaar  new
87868b7b67SBram Moolenaar  let otherwin = win_getid()
88868b7b67SBram Moolenaar  call setline(1, 'the new window')
89868b7b67SBram Moolenaar  call win_gotoid(thiswin)
90868b7b67SBram Moolenaar  let line = win_execute(otherwin, 'echo getline(1)')
91868b7b67SBram Moolenaar  call assert_match('the new window', line)
92868b7b67SBram Moolenaar
93868b7b67SBram Moolenaar  if has('textprop')
94868b7b67SBram Moolenaar    let popupwin = popup_create('the popup win', {'line': 2, 'col': 3})
95868b7b67SBram Moolenaar    redraw
96f92e58caSBram Moolenaar    let line = 'echo getline(1)'->win_execute(popupwin)
97868b7b67SBram Moolenaar    call assert_match('the popup win', line)
98868b7b67SBram Moolenaar
99868b7b67SBram Moolenaar    call popup_close(popupwin)
100868b7b67SBram Moolenaar  endif
101868b7b67SBram Moolenaar
102868b7b67SBram Moolenaar  call win_gotoid(otherwin)
103868b7b67SBram Moolenaar  bwipe!
104868b7b67SBram Moolenaarendfunc
105820680b9SBram Moolenaar
106*345f28dfSBram Moolenaarfunc Test_win_execute_update_ruler()
107*345f28dfSBram Moolenaar  enew
108*345f28dfSBram Moolenaar  call setline(1, range(500))
109*345f28dfSBram Moolenaar  20
110*345f28dfSBram Moolenaar  split
111*345f28dfSBram Moolenaar  let winid = win_getid()
112*345f28dfSBram Moolenaar  set ruler
113*345f28dfSBram Moolenaar  wincmd w
114*345f28dfSBram Moolenaar  let height = winheight(winid)
115*345f28dfSBram Moolenaar  redraw
116*345f28dfSBram Moolenaar  call assert_match('20,1', Screenline(height + 1))
117*345f28dfSBram Moolenaar  let line = win_execute(winid, 'call cursor(100, 1)')
118*345f28dfSBram Moolenaar  redraw
119*345f28dfSBram Moolenaar  call assert_match('100,1', Screenline(height + 1))
120*345f28dfSBram Moolenaar
121*345f28dfSBram Moolenaar  bwipe!
122*345f28dfSBram Moolenaarendfunc
123*345f28dfSBram Moolenaar
124820680b9SBram Moolenaarfunc Test_win_execute_other_tab()
125820680b9SBram Moolenaar  let thiswin = win_getid()
126820680b9SBram Moolenaar  tabnew
127820680b9SBram Moolenaar  call win_execute(thiswin, 'let xyz = 1')
128820680b9SBram Moolenaar  call assert_equal(1, xyz)
129820680b9SBram Moolenaar  tabclose
130820680b9SBram Moolenaar  unlet xyz
131820680b9SBram Moolenaarendfunc
132