aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/testdir/runnvim.vim
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2018-03-18 02:38:27 +0300
committerZyX <kp-pav@yandex.ru>2018-03-18 23:51:43 +0300
commit1c0a2a39b65ebf47b9d4997ce84f470c5d09d140 (patch)
treeeb97f33a43872a93088e9bba6bce68b2b9cbb576 /src/nvim/testdir/runnvim.vim
parent4e02f1ab871f30d80250537877924d522497493b (diff)
downloadrneovim-1c0a2a39b65ebf47b9d4997ce84f470c5d09d140.tar.gz
rneovim-1c0a2a39b65ebf47b9d4997ce84f470c5d09d140.tar.bz2
rneovim-1c0a2a39b65ebf47b9d4997ce84f470c5d09d140.zip
oldtests: Run old tests in :terminal
Reasoning: - No need to check for terminal size. - No need to mess with terminal title. - Allows old tests to timeout with the rest of the build proceeding. - Less and less messy output to travis log. - Opens a path allowing old tests run in parallel. Though last bit needs test refactoring.
Diffstat (limited to 'src/nvim/testdir/runnvim.vim')
-rw-r--r--src/nvim/testdir/runnvim.vim55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/nvim/testdir/runnvim.vim b/src/nvim/testdir/runnvim.vim
new file mode 100644
index 0000000000..396a3a6477
--- /dev/null
+++ b/src/nvim/testdir/runnvim.vim
@@ -0,0 +1,55 @@
+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
+
+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
+ let job = termopen(args, s:logger)
+ let results = jobwait([job], 5 * 60 * 1000)
+ " TODO(ZyX-I): Get colors
+ let screen = getline(1, '$')
+ bwipeout!
+ let stringified_events = map(s:logger.d_events,
+ \'v:val[0] . ": " . ' .
+ \'join(map(v:val[1], '.
+ \ '''substitute(v:val, '.
+ \ '"\\v\\C(\\p@!.|\\<)", '.
+ \ '"\\=printf(\"<%x>\", '.
+ \ 'char2nr(submatch(0)))", '.
+ \ '"")''), '.
+ \ '''\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
+ if results[0] != -1
+ call jobstop(job)
+ endif
+ cquit
+ else
+ qall
+ endif
+endfunction
+
+call Main()