2014-05-23 11:49:51 -07:00
|
|
|
#!/usr/bin/env expect
|
|
|
|
|
|
|
|
if {$argc < 2} {
|
|
|
|
puts "Need commands for running the tests and for starting nvim"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
set timeout 10
|
|
|
|
set run_tests [split [lindex $argv 0] " "]
|
|
|
|
set run_nvim [split [lindex $argv 1] " "]
|
|
|
|
|
|
|
|
# don't echo to stdout
|
|
|
|
log_user 0
|
|
|
|
# set NEOVIM_LISTEN_ADDRESS, so nvim will listen on a known socket
|
|
|
|
set env(NEOVIM_LISTEN_ADDRESS) "/tmp/nvim-[exec date +%s%N].sock"
|
|
|
|
# start nvim
|
|
|
|
spawn {*}$run_nvim
|
|
|
|
# save the job descriptor
|
|
|
|
set nvim_id $spawn_id
|
|
|
|
# Reset function that can be invoked by test runners to put nvim in a cleaner
|
|
|
|
# state
|
|
|
|
send {
|
|
|
|
:function BeforeEachTest()
|
|
|
|
set all&
|
|
|
|
redir => groups
|
|
|
|
silent augroup
|
|
|
|
redir END
|
|
|
|
for group in split(groups)
|
|
|
|
exe 'augroup '.group
|
|
|
|
autocmd!
|
2014-05-28 04:42:14 -07:00
|
|
|
augroup END
|
2014-05-23 11:49:51 -07:00
|
|
|
endfor
|
2014-05-28 04:42:14 -07:00
|
|
|
autocmd!
|
2014-05-23 11:49:51 -07:00
|
|
|
tabnew
|
|
|
|
let curbufnum = eval(bufnr('%'))
|
|
|
|
redir => buflist
|
|
|
|
silent ls!
|
|
|
|
redir END
|
|
|
|
let bufnums = []
|
|
|
|
for buf in split(buflist, '\n')
|
|
|
|
let bufnum = eval(split(buf, '[ u]')[0])
|
|
|
|
if bufnum != curbufnum
|
|
|
|
call add(bufnums, bufnum)
|
|
|
|
endif
|
|
|
|
endfor
|
|
|
|
if len(bufnums) > 0
|
|
|
|
exe 'silent bwipeout! '.join(bufnums, ' ')
|
|
|
|
endif
|
|
|
|
silent tabonly
|
|
|
|
for k in keys(g:)
|
|
|
|
exe 'unlet g:'.k
|
|
|
|
endfor
|
|
|
|
filetype plugin indent off
|
|
|
|
mapclear
|
|
|
|
mapclear!
|
|
|
|
abclear
|
|
|
|
comclear
|
|
|
|
endfunction
|
|
|
|
:echo "read"."y"
|
|
|
|
}
|
|
|
|
# wait until nvim is ready
|
|
|
|
expect "ready"
|
|
|
|
# run tests
|
|
|
|
spawn {*}$run_tests
|
|
|
|
set tests_id $spawn_id
|
|
|
|
set status 1
|
|
|
|
# listen for test output in the background
|
|
|
|
expect_background {
|
|
|
|
* {
|
|
|
|
# show test output to the user
|
|
|
|
send_user -- $expect_out(buffer)
|
|
|
|
}
|
|
|
|
eof {
|
|
|
|
# collect the exit status code
|
|
|
|
set spawn_id $tests_id
|
|
|
|
catch wait result
|
|
|
|
set status [lindex $result 3]
|
|
|
|
set spawn_id $nvim_id
|
|
|
|
# quit nvim
|
|
|
|
send ":qa!\r"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
# switch back nvim and wait until it exits
|
|
|
|
set spawn_id $nvim_id
|
|
|
|
expect eof
|
|
|
|
exit $status
|