179815f1eSBram Moolenaar" test execute()
279815f1eSBram Moolenaar
379815f1eSBram Moolenaarfunc NestedEval()
479815f1eSBram Moolenaar  let nested = execute('echo "nested\nlines"')
579815f1eSBram Moolenaar  echo 'got: "' . nested . '"'
679815f1eSBram Moolenaarendfunc
779815f1eSBram Moolenaar
879815f1eSBram Moolenaarfunc NestedRedir()
979815f1eSBram Moolenaar  redir => var
1079815f1eSBram Moolenaar  echo 'broken'
1179815f1eSBram Moolenaar  redir END
1279815f1eSBram Moolenaarendfunc
1379815f1eSBram Moolenaar
1479815f1eSBram Moolenaarfunc Test_execute_string()
1579815f1eSBram Moolenaar  call assert_equal("\nnocompatible", execute('set compatible?'))
1679815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute('echo "something\nnice"'))
1779815f1eSBram Moolenaar  call assert_equal("noendofline", execute('echon "noendofline"'))
1879815f1eSBram Moolenaar  call assert_equal("", execute(123))
1979815f1eSBram Moolenaar
2079815f1eSBram Moolenaar  call assert_equal("\ngot: \"\nnested\nlines\"", execute('call NestedEval()'))
2179815f1eSBram Moolenaar  redir => redired
2279815f1eSBram Moolenaar  echo 'this'
2379815f1eSBram Moolenaar  let evaled = execute('echo "that"')
2479815f1eSBram Moolenaar  echo 'theend'
2579815f1eSBram Moolenaar  redir END
2679815f1eSBram Moolenaar  call assert_equal("\nthis\ntheend", redired)
2779815f1eSBram Moolenaar  call assert_equal("\nthat", evaled)
2879815f1eSBram Moolenaar
2979815f1eSBram Moolenaar  call assert_fails('call execute("doesnotexist")', 'E492:')
3079815f1eSBram Moolenaar  call assert_fails('call execute(3.4)', 'E806:')
3179815f1eSBram Moolenaar  call assert_fails('call execute("call NestedRedir()")', 'E930:')
3279815f1eSBram Moolenaar
3379815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', ''))
3479815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', 'silent'))
3579815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', 'silent!'))
3679815f1eSBram Moolenaar  call assert_equal("", execute('burp', 'silent!'))
3779815f1eSBram Moolenaar  call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:')
3879815f1eSBram Moolenaar
3979815f1eSBram Moolenaar  call assert_equal("", execute(test_null_string()))
4079815f1eSBram Moolenaarendfunc
4179815f1eSBram Moolenaar
4279815f1eSBram Moolenaarfunc Test_execute_list()
4379815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute(['echo "something"', 'echo "nice"']))
4479815f1eSBram Moolenaar  let l = ['for n in range(0, 3)',
4579815f1eSBram Moolenaar	\  'echo n',
4679815f1eSBram Moolenaar	\  'endfor']
4779815f1eSBram Moolenaar  call assert_equal("\n0\n1\n2\n3", execute(l))
4879815f1eSBram Moolenaar
4979815f1eSBram Moolenaar  call assert_equal("", execute([]))
5079815f1eSBram Moolenaar  call assert_equal("", execute(test_null_list()))
5179815f1eSBram Moolenaarendfunc
5210ccaa17SBram Moolenaar
5310ccaa17SBram Moolenaarfunc Test_execute_does_not_change_col()
5410ccaa17SBram Moolenaar  echo ''
5510ccaa17SBram Moolenaar  echon 'abcd'
5610ccaa17SBram Moolenaar  let x = execute('silent echo 234343')
5710ccaa17SBram Moolenaar  echon 'xyz'
5810ccaa17SBram Moolenaar  let text = ''
5910ccaa17SBram Moolenaar  for col in range(1, 7)
6010ccaa17SBram Moolenaar    let text .= nr2char(screenchar(&lines, col))
6110ccaa17SBram Moolenaar  endfor
6210ccaa17SBram Moolenaar  call assert_equal('abcdxyz', text)
6310ccaa17SBram Moolenaarendfunc
64446e7a3cSBram Moolenaar
65446e7a3cSBram Moolenaarfunc Test_execute_not_silent()
66446e7a3cSBram Moolenaar  echo ''
67446e7a3cSBram Moolenaar  echon 'abcd'
68446e7a3cSBram Moolenaar  let x = execute('echon 234', '')
69446e7a3cSBram Moolenaar  echo 'xyz'
70446e7a3cSBram Moolenaar  let text1 = ''
71446e7a3cSBram Moolenaar  for col in range(1, 8)
72446e7a3cSBram Moolenaar    let text1 .= nr2char(screenchar(&lines - 1, col))
73446e7a3cSBram Moolenaar  endfor
74446e7a3cSBram Moolenaar  call assert_equal('abcd234 ', text1)
75446e7a3cSBram Moolenaar  let text2 = ''
76446e7a3cSBram Moolenaar  for col in range(1, 4)
77446e7a3cSBram Moolenaar    let text2 .= nr2char(screenchar(&lines, col))
78446e7a3cSBram Moolenaar  endfor
79446e7a3cSBram Moolenaar  call assert_equal('xyz ', text2)
80446e7a3cSBram Moolenaarendfunc
81868b7b67SBram Moolenaar
82868b7b67SBram Moolenaarfunc Test_win_execute()
83868b7b67SBram Moolenaar  let thiswin = win_getid()
84868b7b67SBram Moolenaar  new
85868b7b67SBram Moolenaar  let otherwin = win_getid()
86868b7b67SBram Moolenaar  call setline(1, 'the new window')
87868b7b67SBram Moolenaar  call win_gotoid(thiswin)
88868b7b67SBram Moolenaar  let line = win_execute(otherwin, 'echo getline(1)')
89868b7b67SBram Moolenaar  call assert_match('the new window', line)
90868b7b67SBram Moolenaar
91868b7b67SBram Moolenaar  if has('textprop')
92868b7b67SBram Moolenaar    let popupwin = popup_create('the popup win', {'line': 2, 'col': 3})
93868b7b67SBram Moolenaar    redraw
94*f92e58caSBram Moolenaar    let line = 'echo getline(1)'->win_execute(popupwin)
95868b7b67SBram Moolenaar    call assert_match('the popup win', line)
96868b7b67SBram Moolenaar
97868b7b67SBram Moolenaar    call popup_close(popupwin)
98868b7b67SBram Moolenaar  endif
99868b7b67SBram Moolenaar
100868b7b67SBram Moolenaar  call win_gotoid(otherwin)
101868b7b67SBram Moolenaar  bwipe!
102868b7b67SBram Moolenaarendfunc
103820680b9SBram Moolenaar
104820680b9SBram Moolenaarfunc Test_win_execute_other_tab()
105820680b9SBram Moolenaar  let thiswin = win_getid()
106820680b9SBram Moolenaar  tabnew
107820680b9SBram Moolenaar  call win_execute(thiswin, 'let xyz = 1')
108820680b9SBram Moolenaar  call assert_equal(1, xyz)
109820680b9SBram Moolenaar  tabclose
110820680b9SBram Moolenaar  unlet xyz
111820680b9SBram Moolenaarendfunc
112