#!/usr/bin/env expect if {$argc < 2} { puts "Need commands for running the tests and for starting nvim" exit 1 } set timeout 60 set run_tests [split [lindex $argv 0] " "] set run_nvim [split [lindex $argv 1] " "] # don't echo to stdout log_user 0 # set NVIM_LISTEN_ADDRESS, so nvim will listen on a known socket set env(NVIM_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 { :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