179815f1eSBram Moolenaar" test execute()
279815f1eSBram Moolenaar
3345f28dfSBram Moolenaarsource view_util.vim
45a4c3082SBram Moolenaarsource check.vim
53cfa5b16SBram Moolenaarsource vim9.vim
6345f28dfSBram Moolenaar
779815f1eSBram Moolenaarfunc NestedEval()
879815f1eSBram Moolenaar  let nested = execute('echo "nested\nlines"')
979815f1eSBram Moolenaar  echo 'got: "' . nested . '"'
1079815f1eSBram Moolenaarendfunc
1179815f1eSBram Moolenaar
1279815f1eSBram Moolenaarfunc NestedRedir()
1379815f1eSBram Moolenaar  redir => var
1479815f1eSBram Moolenaar  echo 'broken'
1579815f1eSBram Moolenaar  redir END
1679815f1eSBram Moolenaarendfunc
1779815f1eSBram Moolenaar
1879815f1eSBram Moolenaarfunc Test_execute_string()
1979815f1eSBram Moolenaar  call assert_equal("\nnocompatible", execute('set compatible?'))
2079815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute('echo "something\nnice"'))
2179815f1eSBram Moolenaar  call assert_equal("noendofline", execute('echon "noendofline"'))
2279815f1eSBram Moolenaar  call assert_equal("", execute(123))
2379815f1eSBram Moolenaar
2479815f1eSBram Moolenaar  call assert_equal("\ngot: \"\nnested\nlines\"", execute('call NestedEval()'))
2579815f1eSBram Moolenaar  redir => redired
2679815f1eSBram Moolenaar  echo 'this'
2779815f1eSBram Moolenaar  let evaled = execute('echo "that"')
2879815f1eSBram Moolenaar  echo 'theend'
2979815f1eSBram Moolenaar  redir END
3079815f1eSBram Moolenaar  call assert_equal("\nthis\ntheend", redired)
3179815f1eSBram Moolenaar  call assert_equal("\nthat", evaled)
3279815f1eSBram Moolenaar
3379815f1eSBram Moolenaar  call assert_fails('call execute("doesnotexist")', 'E492:')
3479815f1eSBram Moolenaar  call assert_fails('call execute("call NestedRedir()")', 'E930:')
3579815f1eSBram Moolenaar
3679815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', ''))
3779815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', 'silent'))
3879815f1eSBram Moolenaar  call assert_equal("\nsomething", execute('echo "something"', 'silent!'))
3979815f1eSBram Moolenaar  call assert_equal("", execute('burp', 'silent!'))
405feabe00SBram Moolenaar  if has('float')
413cfa5b16SBram Moolenaar    call assert_fails('call execute(3.4)', 'E492:')
423cfa5b16SBram Moolenaar    call assert_equal("\nx", execute("echo \"x\"", 3.4))
434490ec4eSYegappan Lakshmanan    call CheckDefExecAndScriptFailure2(['execute("echo \"x\"", 3.4)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1174:')
445feabe00SBram Moolenaar  endif
4579815f1eSBram Moolenaarendfunc
4679815f1eSBram Moolenaar
4779815f1eSBram Moolenaarfunc Test_execute_list()
4879815f1eSBram Moolenaar  call assert_equal("\nsomething\nnice", execute(['echo "something"', 'echo "nice"']))
4979815f1eSBram Moolenaar  let l = ['for n in range(0, 3)',
5079815f1eSBram Moolenaar	\  'echo n',
5179815f1eSBram Moolenaar	\  'endfor']
5279815f1eSBram Moolenaar  call assert_equal("\n0\n1\n2\n3", execute(l))
5379815f1eSBram Moolenaar
5479815f1eSBram Moolenaar  call assert_equal("", execute([]))
5579815f1eSBram Moolenaarendfunc
5610ccaa17SBram Moolenaar
5710ccaa17SBram Moolenaarfunc Test_execute_does_not_change_col()
5810ccaa17SBram Moolenaar  echo ''
5910ccaa17SBram Moolenaar  echon 'abcd'
6010ccaa17SBram Moolenaar  let x = execute('silent echo 234343')
6110ccaa17SBram Moolenaar  echon 'xyz'
6210ccaa17SBram Moolenaar  let text = ''
6310ccaa17SBram Moolenaar  for col in range(1, 7)
6410ccaa17SBram Moolenaar    let text .= nr2char(screenchar(&lines, col))
6510ccaa17SBram Moolenaar  endfor
6610ccaa17SBram Moolenaar  call assert_equal('abcdxyz', text)
6710ccaa17SBram Moolenaarendfunc
68446e7a3cSBram Moolenaar
69446e7a3cSBram Moolenaarfunc Test_execute_not_silent()
70446e7a3cSBram Moolenaar  echo ''
71446e7a3cSBram Moolenaar  echon 'abcd'
72446e7a3cSBram Moolenaar  let x = execute('echon 234', '')
73446e7a3cSBram Moolenaar  echo 'xyz'
74446e7a3cSBram Moolenaar  let text1 = ''
75446e7a3cSBram Moolenaar  for col in range(1, 8)
76446e7a3cSBram Moolenaar    let text1 .= nr2char(screenchar(&lines - 1, col))
77446e7a3cSBram Moolenaar  endfor
78446e7a3cSBram Moolenaar  call assert_equal('abcd234 ', text1)
79446e7a3cSBram Moolenaar  let text2 = ''
80446e7a3cSBram Moolenaar  for col in range(1, 4)
81446e7a3cSBram Moolenaar    let text2 .= nr2char(screenchar(&lines, col))
82446e7a3cSBram Moolenaar  endfor
83446e7a3cSBram Moolenaar  call assert_equal('xyz ', text2)
84446e7a3cSBram Moolenaarendfunc
85868b7b67SBram Moolenaar
86868b7b67SBram Moolenaarfunc Test_win_execute()
87868b7b67SBram Moolenaar  let thiswin = win_getid()
88868b7b67SBram Moolenaar  new
89868b7b67SBram Moolenaar  let otherwin = win_getid()
90868b7b67SBram Moolenaar  call setline(1, 'the new window')
91868b7b67SBram Moolenaar  call win_gotoid(thiswin)
92868b7b67SBram Moolenaar  let line = win_execute(otherwin, 'echo getline(1)')
93868b7b67SBram Moolenaar  call assert_match('the new window', line)
9437487e16SBram Moolenaar  let line = win_execute(134343, 'echo getline(1)')
9537487e16SBram Moolenaar  call assert_equal('', line)
96868b7b67SBram Moolenaar
9705ad5ff0SBram Moolenaar  if has('popupwin')
98868b7b67SBram Moolenaar    let popupwin = popup_create('the popup win', {'line': 2, 'col': 3})
99868b7b67SBram Moolenaar    redraw
100f92e58caSBram Moolenaar    let line = 'echo getline(1)'->win_execute(popupwin)
101868b7b67SBram Moolenaar    call assert_match('the popup win', line)
102868b7b67SBram Moolenaar
103868b7b67SBram Moolenaar    call popup_close(popupwin)
104868b7b67SBram Moolenaar  endif
105868b7b67SBram Moolenaar
106868b7b67SBram Moolenaar  call win_gotoid(otherwin)
107868b7b67SBram Moolenaar  bwipe!
108*7f13b24aSBram Moolenaar
109*7f13b24aSBram Moolenaar  " check :lcd in another window does not change directory
110*7f13b24aSBram Moolenaar  let curid = win_getid()
111*7f13b24aSBram Moolenaar  let curdir = getcwd()
112*7f13b24aSBram Moolenaar  split Xother
113*7f13b24aSBram Moolenaar  lcd ..
114*7f13b24aSBram Moolenaar  " Use :pwd to get the actual current directory
115*7f13b24aSBram Moolenaar  let otherdir = execute('pwd')
116*7f13b24aSBram Moolenaar  call win_execute(curid, 'lcd testdir')
117*7f13b24aSBram Moolenaar  call assert_equal(otherdir, execute('pwd'))
118*7f13b24aSBram Moolenaar  bwipe!
119*7f13b24aSBram Moolenaar  execute 'cd ' .. curdir
120868b7b67SBram Moolenaarendfunc
121820680b9SBram Moolenaar
122345f28dfSBram Moolenaarfunc Test_win_execute_update_ruler()
1235a4c3082SBram Moolenaar  CheckFeature quickfix
1245a4c3082SBram Moolenaar
125345f28dfSBram Moolenaar  enew
126345f28dfSBram Moolenaar  call setline(1, range(500))
127345f28dfSBram Moolenaar  20
128345f28dfSBram Moolenaar  split
129345f28dfSBram Moolenaar  let winid = win_getid()
130345f28dfSBram Moolenaar  set ruler
131345f28dfSBram Moolenaar  wincmd w
132345f28dfSBram Moolenaar  let height = winheight(winid)
133345f28dfSBram Moolenaar  redraw
134345f28dfSBram Moolenaar  call assert_match('20,1', Screenline(height + 1))
135345f28dfSBram Moolenaar  let line = win_execute(winid, 'call cursor(100, 1)')
136345f28dfSBram Moolenaar  redraw
137345f28dfSBram Moolenaar  call assert_match('100,1', Screenline(height + 1))
138345f28dfSBram Moolenaar
139345f28dfSBram Moolenaar  bwipe!
140345f28dfSBram Moolenaarendfunc
141345f28dfSBram Moolenaar
142820680b9SBram Moolenaarfunc Test_win_execute_other_tab()
143820680b9SBram Moolenaar  let thiswin = win_getid()
144820680b9SBram Moolenaar  tabnew
145820680b9SBram Moolenaar  call win_execute(thiswin, 'let xyz = 1')
146820680b9SBram Moolenaar  call assert_equal(1, xyz)
147820680b9SBram Moolenaar  tabclose
148820680b9SBram Moolenaar  unlet xyz
149820680b9SBram Moolenaarendfunc
150e2a8f077SBram Moolenaar
1519d8d0b5cSBram Moolenaarfunc Test_execute_func_with_null()
152e2a8f077SBram Moolenaar  call assert_equal("", execute(test_null_string()))
153e2a8f077SBram Moolenaar  call assert_equal("", execute(test_null_list()))
154e2a8f077SBram Moolenaar  call assert_fails('call execute(test_null_dict())', 'E731:')
155e2a8f077SBram Moolenaar  call assert_fails('call execute(test_null_blob())', 'E976:')
156e2a8f077SBram Moolenaar  call assert_fails('call execute(test_null_partial())','E729:')
157e2a8f077SBram Moolenaar  if has('job')
158e2a8f077SBram Moolenaar    call assert_fails('call execute(test_null_job())', 'E908:')
159e2a8f077SBram Moolenaar    call assert_fails('call execute(test_null_channel())', 'E908:')
160e2a8f077SBram Moolenaar  endif
161e2a8f077SBram Moolenaarendfunc
1629d8d0b5cSBram Moolenaar
1639d8d0b5cSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
164