neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

runnvim.vim (1813B)


      1 let s:logger = {'d_events': []}
      2 function s:logger.on_stdout(id, data, event)
      3  call add(self.d_events, [a:event, a:data])
      4 endfunction
      5 let s:logger.on_stderr = s:logger.on_stdout
      6 function s:logger.on_exit(id, data, event)
      7  call add(self.d_events, [a:event, ['']])
      8 endfunction
      9 
     10 let s:logger.env = #{VIMRUNTIME: $VIMRUNTIME}
     11 let s:logger.term = v:true
     12 
     13 " Replace non-printable chars by special sequence, or "<%x>".
     14 let s:escaped_char = {"\n": '\n', "\r": '\r', "\t": '\t'}
     15 function! s:escape_non_printable(char) abort
     16  let r = get(s:escaped_char, a:char)
     17  return r is 0 ? printf('<%x>', char2nr(a:char)) : r
     18 endfunction
     19 
     20 function Main()
     21  let argc = +$NVIM_TEST_ARGC
     22  let args = []
     23  for i in range(argc)
     24    call add(args, eval("$NVIM_TEST_ARG" . i))
     25  endfor
     26  set lines=25
     27  set columns=80
     28  enew
     29  let job = jobstart(args, s:logger)
     30  let results = jobwait([job], 5 * 60 * 1000)
     31  " TODO(ZyX-I): Get colors
     32  let screen = getline(1, '$')
     33  call jobstop(job)  " kills the job always.
     34  bwipeout!
     35  let stringified_events = map(s:logger.d_events,
     36        \'v:val[0] . ": " . ' .
     37        \'join(map(v:val[1], '.
     38        \         '''substitute(v:val, '.
     39        \                      '"\\v\\C(\\p@!.|\\<)", '.
     40        \                      '"\\=s:escape_non_printable(submatch(0))", '.
     41        \                      '"g")''), '.
     42        \     '''\n'')')
     43  call setline(1, [
     44        \ 'Job exited with code ' . results[0],
     45        \ printf('Screen (%u lines)', len(screen)),
     46        \ repeat('=', 80),
     47        \] +  screen + [
     48        \ repeat('=', 80),
     49        \ printf('Events (%u lines):', len(stringified_events)),
     50        \ repeat('=', 80),
     51        \] + stringified_events + [
     52        \ repeat('=', 80),
     53        \])
     54  write
     55  if results[0] != 0
     56    cquit
     57  else
     58    qall
     59  endif
     60 endfunction
     61 
     62 call Main()