mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 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!
 | 
						|
    augroup END
 | 
						|
  endfor
 | 
						|
  autocmd!
 | 
						|
  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
 |