aboutsummaryrefslogtreecommitdiff
path: root/test/old/testdir/runnvim.vim
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2023-11-29 21:52:58 +0000
committerJosh Rahm <joshuarahm@gmail.com>2023-11-29 21:52:58 +0000
commit931bffbda3668ddc609fc1da8f9eb576b170aa52 (patch)
treed8c1843a95da5ea0bb4acc09f7e37843d9995c86 /test/old/testdir/runnvim.vim
parent142d9041391780ac15b89886a54015fdc5c73995 (diff)
parent4a8bf24ac690004aedf5540fa440e788459e5e34 (diff)
downloadrneovim-userreg.tar.gz
rneovim-userreg.tar.bz2
rneovim-userreg.zip
Merge remote-tracking branch 'upstream/master' into userreguserreg
Diffstat (limited to 'test/old/testdir/runnvim.vim')
-rw-r--r--test/old/testdir/runnvim.vim60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/old/testdir/runnvim.vim b/test/old/testdir/runnvim.vim
new file mode 100644
index 0000000000..2db60d05b3
--- /dev/null
+++ b/test/old/testdir/runnvim.vim
@@ -0,0 +1,60 @@
+let s:logger = {'d_events': []}
+function s:logger.on_stdout(id, data, event)
+ call add(self.d_events, [a:event, a:data])
+endfunction
+let s:logger.on_stderr = s:logger.on_stdout
+function s:logger.on_exit(id, data, event)
+ call add(self.d_events, [a:event, ['']])
+endfunction
+
+" Replace non-printable chars by special sequence, or "<%x>".
+let s:escaped_char = {"\n": '\n', "\r": '\r', "\t": '\t'}
+function! s:escape_non_printable(char) abort
+ let r = get(s:escaped_char, a:char)
+ return r is 0 ? printf('<%x>', char2nr(a:char)) : r
+endfunction
+
+function Main()
+ let argc = +$NVIM_TEST_ARGC
+ let args = []
+ for i in range(argc)
+ call add(args, eval("$NVIM_TEST_ARG" . i))
+ endfor
+ set lines=25
+ set columns=80
+ enew
+ " FIXME: using termopen() hangs on Windows CI
+ let job = has('win32') ? jobstart(args, s:logger) : termopen(args, s:logger)
+ let results = jobwait([job], 5 * 60 * 1000)
+ " TODO(ZyX-I): Get colors
+ let screen = getline(1, '$')
+ call jobstop(job) " kills the job always.
+ bwipeout!
+ let stringified_events = map(s:logger.d_events,
+ \'v:val[0] . ": " . ' .
+ \'join(map(v:val[1], '.
+ \ '''substitute(v:val, '.
+ \ '"\\v\\C(\\p@!.|\\<)", '.
+ \ '"\\=s:escape_non_printable(submatch(0))", '.
+ \ '"g")''), '.
+ \ '''\n'')')
+ call setline(1, [
+ \ 'Job exited with code ' . results[0],
+ \ printf('Screen (%u lines)', len(screen)),
+ \ repeat('=', 80),
+ \] + screen + [
+ \ repeat('=', 80),
+ \ printf('Events (%u lines):', len(stringified_events)),
+ \ repeat('=', 80),
+ \] + stringified_events + [
+ \ repeat('=', 80),
+ \])
+ write
+ if results[0] != 0
+ cquit
+ else
+ qall
+ endif
+endfunction
+
+call Main()