blob: 9b34658426b42c2faf3344489b4dfb7a7cbe447e [file] [log] [blame] [edit]
" Tests for clipmethod
source util/window_manager.vim
CheckFeature clipboard_working
CheckFeature xterm_clipboard
CheckFeature wayland_clipboard
CheckUnix
" Test if no available clipmethod sets v:clipmethod to none and deinits clipboard
func Test_no_clipmethod_sets_v_clipmethod_none()
CheckNotGui
set clipmethod=
call assert_equal("none", v:clipmethod)
call assert_equal(0, has('clipboard_working'))
endfunc
" Test if method chosen is in line with clipmethod order
func Test_clipmethod_order()
CheckNotGui
set cpm=wayland,x11
let l:wayland_display = StartWaylandCompositor()
let $WAYLAND_DISPLAY = l:wayland_display
exe 'wlrestore ' .. l:wayland_display
call assert_equal("wayland", v:clipmethod)
:wlrestore 1239
clipreset
if exists("$DISPLAY")
call assert_equal("x11", v:clipmethod)
endif
:xrestore 1239
clipreset
call assert_equal("none", v:clipmethod)
call assert_equal(0, has('clipboard_working'))
exe ":wlrestore " . $WAYLAND_DISPLAY
exe ":xrestore " . $DISPLAY
clipreset
call assert_equal("wayland", v:clipmethod)
call assert_equal(1, has('clipboard_working'))
if exists("$DISPLAY")
set cpm=x11
call assert_equal("x11", v:clipmethod)
endif
set cpm=wayland
call assert_equal("wayland", v:clipmethod)
call EndWaylandCompositor(l:wayland_display)
endfunc
" Test if clipmethod is set to 'none' when gui is started
func Test_clipmethod_is_none_when_gui()
CheckCanRunGui
let lines =<< trim END
set cpm=wayland,x11
call writefile([v:clipmethod != ""], 'Cbdscript')
gui -f
call writefile([v:clipmethod], 'Cbdscript', 'a')
clipreset
call writefile([v:clipmethod], 'Cbdscript', 'a')
quit
END
call writefile(lines, 'Cbdscript', 'D')
call system($'{GetVimCommand()} -S Cbdscript')
call assert_equal(['1', 'none', 'none'], readfile('Cbdscript'))
endfunc
" Test if :clipreset switches methods when current one doesn't work
func Test_clipreset_switches()
CheckNotGui
CheckFeature clientserver
CheckXServer
CheckWaylandCompositor
let l:wayland_display = StartWaylandCompositor()
set cpm=wayland,x11
exe 'wlrestore ' .. l:wayland_display
call assert_equal(l:wayland_display, v:wayland_display)
call assert_equal("wayland", v:clipmethod)
call EndWaylandCompositor(l:wayland_display)
" wlrestore updates clipmethod as well
wlrestore!
call assert_equal("", v:wayland_display)
if exists("$DISPLAY")
call assert_equal("x11", v:clipmethod)
endif
" Do the same but kill a X11 server
" X11 error handling relies on longjmp magic, but essentially if the X server
" is killed then it will simply abandon the current commands, making the test
" hang.
" This will only happen for commands given from the command line, which
" is why we cannot just directly call Vim or use the actual Vim instance thats
" doing all the testing, since main_loop() is never executed.
" Therefore we should start a separate Vim instance and communicate with it
" remotely, so we can execute the actual testing stuff with main_loop()
" running.
let l:lines =<< trim END
set cpm=x11
source util/shared.vim
func Test()
clipreset
if v:clipmethod ==# 'none'
return 1
endif
return 0
endfunc
func DoIt()
call WaitFor(function('Test'))
if v:clipmethod == 'none'
call writefile(['SUCCESS'], 'Xtest')
else
call writefile(['FAIL'], 'Xtest')
endif
quitall
endfunc
END
call writefile(l:lines, 'Xtester', 'D')
let l:xdisplay = StartXServer()
let l:name = 'XVIMTEST'
let l:cmd = GetVimCommand() .. ' -S Xtester --servername ' .. l:name
let l:job = job_start(l:cmd, { 'stoponexit': 'kill', 'out_io': 'null'})
call WaitForAssert({-> assert_equal("run", job_status(l:job))})
if exists("$DISPLAY")
call WaitForAssert({-> assert_match(l:name, serverlist())})
endif
" Change x server to the one that will be killed, then block until
" v:clipmethod is none.
if exists("$DISPLAY")
call remote_send(l:name, ":xrestore " .. l:xdisplay ..
\ ' | call DoIt()' .. "\<CR>")
call EndXServer(l:xdisplay)
call WaitFor({-> filereadable('Xtest')})
" For some reason readfile sometimes returns an empty list despite the file
" existing, this why WaitForAssert() is used.
call WaitForAssert({-> assert_equal(['SUCCESS'], readfile('Xtest'))}, 1000)
endif
endfunc
" vim: shiftwidth=2 sts=2 expandtab