1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
Before:
let g:can_run_socket_tests = !has('win32')
\ && (exists('*ch_close') || exists('*chanclose'))
if g:can_run_socket_tests
call ale#test#SetDirectory('/testplugin/test')
let g:channel_id_received = 0
let g:data_received = ''
function! WaitForData(expected_data, timeout) abort
let l:ticks = 0
while l:ticks < a:timeout
" Sleep first, so we can switch to the callback.
let l:ticks += 10
sleep 10ms
if g:data_received is# a:expected_data
break
endif
endwhile
endfunction
function! TestCallback(channel_id, data) abort
let g:channel_id_received = a:channel_id
let g:data_received .= a:data
endfunction
let g:port = 10347
let g:pid_tcp = str2nr(system(
\ 'python'
\ . ' ' . ale#Escape(g:dir . '/script/dumb_tcp_server.py')
\ . ' ' . g:port
\))
let g:pipe_path = tempname()
let g:pid_pipe = str2nr(system(
\ 'python'
\ . ' ' . ale#Escape(g:dir . '/script/dumb_named_pipe_server.py')
\ . ' ' . g:pipe_path
\))
endif
After:
if g:can_run_socket_tests
call ale#test#RestoreDirectory()
unlet! g:channel_id_received
unlet! g:data_received
unlet! g:channel_id
delfunction WaitForData
delfunction TestCallback
if has_key(g:, 'pid_tcp')
call system('kill ' . g:pid_tcp)
endif
if has_key(g:, 'pid_pipe')
call system('kill ' . g:pid_pipe)
endif
unlet! g:pid_tcp
unlet! g:port
unlet! g:pid_pipe
unlet! g:pipe_path
endif
unlet! g:can_run_socket_tests
Execute(Sending and receiving connections to tcp sockets should work):
if g:can_run_socket_tests
let g:channel_id = ale#socket#Open(
\ '127.0.0.1:' . g:port,
\ {'callback': function('TestCallback')}
\)
Assert g:channel_id >= 0, 'The socket was not opened!'
call ale#socket#Send(g:channel_id, 'hello')
call ale#socket#Send(g:channel_id, ' world')
AssertEqual 1, ale#socket#IsOpen(g:channel_id)
" Wait up to 1 second for the expected data to arrive.
call WaitForData('hello world', 1000)
AssertEqual g:channel_id, g:channel_id_received
AssertEqual 'hello world', g:data_received
AssertEqual '127.0.0.1:' . g:port, ale#socket#GetAddress(g:channel_id)
call ale#socket#Close(g:channel_id)
AssertEqual 0, ale#socket#IsOpen(g:channel_id)
AssertEqual '', ale#socket#GetAddress(g:channel_id)
endif
" NeoVim versions which can't connect to sockets should just fail.
if has('nvim') && !exists('*chanclose')
AssertEqual -1, ale#socket#Open(
\ '127.0.0.1:1111',
\ {'callback': function('function')}
\)
endif
Execute(Sending and receiving connections to named pipe sockets should work):
if g:can_run_socket_tests && has('nvim-0.4')
let g:channel_id = ale#socket#Open(
\ g:pipe_path,
\ {'callback': function('TestCallback')}
\)
Assert g:channel_id >= 0, 'The socket was not opened!'
call ale#socket#Send(g:channel_id, 'hello')
call ale#socket#Send(g:channel_id, ' world')
AssertEqual 1, ale#socket#IsOpen(g:channel_id)
" Wait up to 1 second for the expected data to arrive.
call WaitForData('hello world', 1000)
AssertEqual g:channel_id, g:channel_id_received
AssertEqual 'hello world', g:data_received
AssertEqual g:pipe_path, ale#socket#GetAddress(g:channel_id)
call ale#socket#Close(g:channel_id)
AssertEqual 0, ale#socket#IsOpen(g:channel_id)
AssertEqual '', ale#socket#GetAddress(g:channel_id)
endif
" NeoVim versions which can't connect to sockets should just fail.
if has('nvim-0.4') && !exists('*chanclose')
AssertEqual -1, ale#socket#Open(
\ g:pipe_path,
\ {'callback': function('function')}
\)
endif
|