179815f1eSBram Moolenaar" test execute()
279815f1eSBram Moolenaar
3345f28dfSBram Moolenaarsource view_util.vim
45a4c3082SBram Moolenaarsource check.vim
5345f28dfSBram Moolenaar
679815f1eSBram Moolenaarfunc NestedEval()
779815f1eSBram Moolenaar  let nested = execute('echo "nested\nlines"')
879815f1eSBram Moolenaar  echo 'got: "' . nested . '"'
979815f1eSBram Moolenaarendfunc
1079815f1eSBram Moolenaar
1179815f1eSBram Moolenaarfunc NestedRedir()
1279815f1eSBram Moolenaar  redir => var
1379815f1eSBram Moolenaar  echo 'broken'
1479815f1eSBram Moolenaar  redir END
1579815f1eSBram Moolenaarendfunc
1679815f1eSBram Moolenaar
1779815f1eSBram Moolenaarfunc Test_execute_string()
1879815f1eSBram Moolenaar  call assert_equal("\nnocompatible", execute('set compatible?'))
1979815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute('echo "something\nnice"'))
2079815f1eSBram Moolenaar  call assert_equal("noendofline", execute('echon "noendofline"'))
2179815f1eSBram Moolenaar  call assert_equal("", execute(123))
2279815f1eSBram Moolenaar
2379815f1eSBram Moolenaar  call assert_equal("\ngot: \"\nnested\nlines\"", execute('call NestedEval()'))
2479815f1eSBram Moolenaar  redir => redired
2579815f1eSBram Moolenaar  echo 'this'
2679815f1eSBram Moolenaar  let evaled = execute('echo "that"')
2779815f1eSBram Moolenaar  echo 'theend'
2879815f1eSBram Moolenaar  redir END
2979815f1eSBram Moolenaar  call assert_equal("\nthis\ntheend", redired)
3079815f1eSBram Moolenaar  call assert_equal("\nthat", evaled)
3179815f1eSBram Moolenaar
3279815f1eSBram Moolenaar  call assert_fails('call execute("doesnotexist")', 'E492:')
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!'))
39*5feabe00SBram Moolenaar  if has('float')
40*5feabe00SBram Moolenaar    call assert_fails('call execute(3.4)', 'E806:')
4179815f1eSBram Moolenaar    call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:')
42*5feabe00SBram Moolenaar  endif
4379815f1eSBram Moolenaarendfunc
4479815f1eSBram Moolenaar
4579815f1eSBram Moolenaarfunc Test_execute_list()
4679815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute(['echo "something"', 'echo "nice"']))
4779815f1eSBram Moolenaar  let l = ['for n in range(0, 3)',
4879815f1eSBram Moolenaar	\  'echo n',
4979815f1eSBram Moolenaar	\  'endfor']
5079815f1eSBram Moolenaar  call assert_equal("\n0\n1\n2\n3", execute(l))
5179815f1eSBram Moolenaar
5279815f1eSBram Moolenaar  call assert_equal("", execute([]))
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
9305ad5ff0SBram Moolenaar  if has('popupwin')
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
106345f28dfSBram Moolenaarfunc Test_win_execute_update_ruler()
1075a4c3082SBram Moolenaar  CheckFeature quickfix
1085a4c3082SBram Moolenaar
109345f28dfSBram Moolenaar  enew
110345f28dfSBram Moolenaar  call setline(1, range(500))
111345f28dfSBram Moolenaar  20
112345f28dfSBram Moolenaar  split
113345f28dfSBram Moolenaar  let winid = win_getid()
114345f28dfSBram Moolenaar  set ruler
115345f28dfSBram Moolenaar  wincmd w
116345f28dfSBram Moolenaar  let height = winheight(winid)
117345f28dfSBram Moolenaar  redraw
118345f28dfSBram Moolenaar  call assert_match('20,1', Screenline(height + 1))
119345f28dfSBram Moolenaar  let line = win_execute(winid, 'call cursor(100, 1)')
120345f28dfSBram Moolenaar  redraw
121345f28dfSBram Moolenaar  call assert_match('100,1', Screenline(height + 1))
122345f28dfSBram Moolenaar
123345f28dfSBram Moolenaar  bwipe!
124345f28dfSBram Moolenaarendfunc
125345f28dfSBram Moolenaar
126820680b9SBram Moolenaarfunc Test_win_execute_other_tab()
127820680b9SBram Moolenaar  let thiswin = win_getid()
128820680b9SBram Moolenaar  tabnew
129820680b9SBram Moolenaar  call win_execute(thiswin, 'let xyz = 1')
130820680b9SBram Moolenaar  call assert_equal(1, xyz)
131820680b9SBram Moolenaar  tabclose
132820680b9SBram Moolenaar  unlet xyz
133820680b9SBram Moolenaarendfunc
134e2a8f077SBram Moolenaar
135e2a8f077SBram Moolenaarfunc Test_execute_null()
136e2a8f077SBram Moolenaar  call assert_equal("", execute(test_null_string()))
137e2a8f077SBram Moolenaar  call assert_equal("", execute(test_null_list()))
138e2a8f077SBram Moolenaar  call assert_fails('call execute(test_null_dict())', 'E731:')
139e2a8f077SBram Moolenaar  call assert_fails('call execute(test_null_blob())', 'E976:')
140e2a8f077SBram Moolenaar  call assert_fails('call execute(test_null_partial())','E729:')
141e2a8f077SBram Moolenaar  if has('job')
142e2a8f077SBram Moolenaar    call assert_fails('call execute(test_null_job())', 'E908:')
143e2a8f077SBram Moolenaar    call assert_fails('call execute(test_null_channel())', 'E908:')
144e2a8f077SBram Moolenaar  endif
145e2a8f077SBram Moolenaarendfunc
146