blob: 47b8a04e14f6f9df4b2383af88ca73b674d23d21 [file] [log] [blame]
Bram Moolenaard7ece102016-02-02 23:23:02 +01001" Test for channel functions.
2scriptencoding utf-8
3
Bram Moolenaare2469252016-02-04 10:54:34 +01004if !has('channel')
5 finish
6endif
7
8" This test requires the Python command to run the test server.
Bram Moolenaara8343c12016-02-04 22:09:48 +01009" This most likely only works on Unix and Windows.
Bram Moolenaara0f9cd12016-02-03 20:13:24 +010010if has('unix')
Bram Moolenaar835dc632016-02-07 14:27:38 +010011 " We also need the job feature or the pkill command to make sure the server
12 " can be stopped.
13 if !(executable('python') && (has('job') || executable('pkill')))
Bram Moolenaara0f9cd12016-02-03 20:13:24 +010014 finish
15 endif
Bram Moolenaarb6a77372016-02-15 22:55:28 +010016 let s:python = 'python'
Bram Moolenaara8343c12016-02-04 22:09:48 +010017elseif has('win32')
Bram Moolenaarb6a77372016-02-15 22:55:28 +010018 " Use Python Launcher for Windows (py.exe) if available.
19 if executable('py.exe')
20 let s:python = 'py.exe'
21 elseif executable('python.exe')
22 let s:python = 'python.exe'
23 else
Bram Moolenaara0f9cd12016-02-03 20:13:24 +010024 finish
25 endif
26else
Bram Moolenaard6a8d482016-02-10 20:32:20 +010027 " Can't run this test.
Bram Moolenaard7ece102016-02-02 23:23:02 +010028 finish
29endif
30
Bram Moolenaare74e8e72016-02-16 22:01:30 +010031let s:chopt = {}
Bram Moolenaar3b05b132016-02-03 23:25:07 +010032
Bram Moolenaard6a8d482016-02-10 20:32:20 +010033" Run "testfunc" after sarting the server and stop the server afterwards.
Bram Moolenaar81661fb2016-02-18 22:23:34 +010034func s:run_server(testfunc, ...)
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +010035 " The Python program writes the port number in Xportnr.
36 call delete("Xportnr")
37
Bram Moolenaar81661fb2016-02-18 22:23:34 +010038 if a:0 == 1
39 let arg = ' ' . a:1
40 else
41 let arg = ''
42 endif
43 let cmd = s:python . " test_channel.py" . arg
44
Bram Moolenaard6a8d482016-02-10 20:32:20 +010045 try
46 if has('job')
Bram Moolenaar81661fb2016-02-18 22:23:34 +010047 let s:job = job_start(cmd)
Bram Moolenaard6a8d482016-02-10 20:32:20 +010048 elseif has('win32')
Bram Moolenaar81661fb2016-02-18 22:23:34 +010049 exe 'silent !start cmd /c start "test_channel" ' . cmd
Bram Moolenaard6a8d482016-02-10 20:32:20 +010050 else
Bram Moolenaar81661fb2016-02-18 22:23:34 +010051 exe 'silent !' . cmd . '&'
Bram Moolenaard7ece102016-02-02 23:23:02 +010052 endif
Bram Moolenaard7ece102016-02-02 23:23:02 +010053
Bram Moolenaard6a8d482016-02-10 20:32:20 +010054 " Wait for up to 2 seconds for the port number to be there.
55 let cnt = 20
56 let l = []
57 while cnt > 0
58 try
59 let l = readfile("Xportnr")
60 catch
61 endtry
62 if len(l) >= 1
63 break
64 endif
65 sleep 100m
66 let cnt -= 1
67 endwhile
68 call delete("Xportnr")
69
70 if len(l) == 0
71 " Can't make the connection, give up.
72 call assert_false(1, "Can't start test_channel.py")
73 return -1
74 endif
75 let port = l[0]
76
77 call call(function(a:testfunc), [port])
78 catch
79 call assert_false(1, "Caught exception: " . v:exception)
80 finally
Bram Moolenaara0f9cd12016-02-03 20:13:24 +010081 call s:kill_server()
Bram Moolenaard6a8d482016-02-10 20:32:20 +010082 endtry
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +010083endfunc
84
85func s:kill_server()
Bram Moolenaar835dc632016-02-07 14:27:38 +010086 if has('job')
Bram Moolenaard6a8d482016-02-10 20:32:20 +010087 if exists('s:job')
88 call job_stop(s:job)
89 unlet s:job
90 endif
Bram Moolenaar835dc632016-02-07 14:27:38 +010091 elseif has('win32')
Bram Moolenaarb6a77372016-02-15 22:55:28 +010092 call system('taskkill /IM ' . s:python . ' /T /F /FI "WINDOWTITLE eq test_channel"')
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +010093 else
Bram Moolenaar608a8912016-02-03 22:39:51 +010094 call system("pkill -f test_channel.py")
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +010095 endif
96endfunc
97
Bram Moolenaara07fec92016-02-05 21:04:08 +010098let s:responseMsg = ''
99func s:RequestHandler(handle, msg)
100 let s:responseHandle = a:handle
101 let s:responseMsg = a:msg
102endfunc
103
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100104func s:communicate(port)
105 let handle = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar77073442016-02-13 23:23:53 +0100106 if ch_status(handle) == "fail"
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100107 call assert_false(1, "Can't open channel")
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100108 return
109 endif
Bram Moolenaard7ece102016-02-02 23:23:02 +0100110
111 " Simple string request and reply.
112 call assert_equal('got it', ch_sendexpr(handle, 'hello!'))
113
114 " Request that triggers sending two ex commands. These will usually be
115 " handled before getting the response, but it's not guaranteed, thus wait a
116 " tiny bit for the commands to get executed.
117 call assert_equal('ok', ch_sendexpr(handle, 'make change'))
118 sleep 10m
119 call assert_equal('added1', getline(line('$') - 1))
120 call assert_equal('added2', getline('$'))
121
Bram Moolenaarf4160862016-02-05 23:09:12 +0100122 call assert_equal('ok', ch_sendexpr(handle, 'do normal'))
123 sleep 10m
124 call assert_equal('added more', getline('$'))
125
Bram Moolenaara07fec92016-02-05 21:04:08 +0100126 " Send a request with a specific handler.
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100127 call ch_sendexpr(handle, 'hello!', {'callback': 's:RequestHandler'})
Bram Moolenaara07fec92016-02-05 21:04:08 +0100128 sleep 10m
Bram Moolenaar77073442016-02-13 23:23:53 +0100129 if !exists('s:responseHandle')
130 call assert_false(1, 's:responseHandle was not set')
131 else
132 call assert_equal(handle, s:responseHandle)
133 endif
Bram Moolenaara07fec92016-02-05 21:04:08 +0100134 call assert_equal('got it', s:responseMsg)
135
Bram Moolenaar77073442016-02-13 23:23:53 +0100136 unlet s:responseHandle
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100137 let s:responseMsg = ''
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100138 call ch_sendexpr(handle, 'hello!', {'callback': function('s:RequestHandler')})
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100139 sleep 10m
Bram Moolenaar77073442016-02-13 23:23:53 +0100140 if !exists('s:responseHandle')
141 call assert_false(1, 's:responseHandle was not set')
142 else
143 call assert_equal(handle, s:responseHandle)
144 endif
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100145 call assert_equal('got it', s:responseMsg)
146
Bram Moolenaar40ea1da2016-02-19 22:33:35 +0100147 " check setting options (without testing the effect)
148 call ch_setoptions(handle, {'callback': 's:NotUsed'})
149 call ch_setoptions(handle, {'timeout': 111})
150 call assert_fails("call ch_setoptions(handle, {'waittime': 111})", "E475")
151 call assert_fails("call ch_setoptions(handle, {'mode': 'json'})", "E475")
152
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100153 " Send an eval request that works.
154 call assert_equal('ok', ch_sendexpr(handle, 'eval-works'))
Bram Moolenaara02b3212016-02-04 21:03:33 +0100155 sleep 10m
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100156 call assert_equal([-1, 'foo123'], ch_sendexpr(handle, 'eval-result'))
157
158 " Send an eval request that fails.
159 call assert_equal('ok', ch_sendexpr(handle, 'eval-fails'))
Bram Moolenaara02b3212016-02-04 21:03:33 +0100160 sleep 10m
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100161 call assert_equal([-2, 'ERROR'], ch_sendexpr(handle, 'eval-result'))
162
Bram Moolenaar55fab432016-02-07 16:53:13 +0100163 " Send an eval request that works but can't be encoded.
164 call assert_equal('ok', ch_sendexpr(handle, 'eval-error'))
165 sleep 10m
166 call assert_equal([-3, 'ERROR'], ch_sendexpr(handle, 'eval-result'))
167
Bram Moolenaar66624ff2016-02-03 23:59:43 +0100168 " Send a bad eval request. There will be no response.
169 call assert_equal('ok', ch_sendexpr(handle, 'eval-bad'))
Bram Moolenaara02b3212016-02-04 21:03:33 +0100170 sleep 10m
Bram Moolenaar55fab432016-02-07 16:53:13 +0100171 call assert_equal([-3, 'ERROR'], ch_sendexpr(handle, 'eval-result'))
Bram Moolenaar66624ff2016-02-03 23:59:43 +0100172
Bram Moolenaarf4160862016-02-05 23:09:12 +0100173 " Send an expr request
174 call assert_equal('ok', ch_sendexpr(handle, 'an expr'))
175 sleep 10m
176 call assert_equal('one', getline(line('$') - 2))
177 call assert_equal('two', getline(line('$') - 1))
178 call assert_equal('three', getline('$'))
179
180 " Request a redraw, we don't check for the effect.
181 call assert_equal('ok', ch_sendexpr(handle, 'redraw'))
182 call assert_equal('ok', ch_sendexpr(handle, 'redraw!'))
183
184 call assert_equal('ok', ch_sendexpr(handle, 'empty-request'))
185
Bram Moolenaard7ece102016-02-02 23:23:02 +0100186 " make the server quit, can't check if this works, should not hang.
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100187 call ch_sendexpr(handle, '!quit!', {'callback': 0})
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100188endfunc
Bram Moolenaard7ece102016-02-02 23:23:02 +0100189
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100190func Test_communicate()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100191 call ch_log('Test_communicate()')
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100192 call s:run_server('s:communicate')
Bram Moolenaard7ece102016-02-02 23:23:02 +0100193endfunc
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100194
Bram Moolenaar3b05b132016-02-03 23:25:07 +0100195" Test that we can open two channels.
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100196func s:two_channels(port)
Bram Moolenaar39b21272016-02-10 23:28:21 +0100197 let handle = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar77073442016-02-13 23:23:53 +0100198 if ch_status(handle) == "fail"
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100199 call assert_false(1, "Can't open channel")
Bram Moolenaar3b05b132016-02-03 23:25:07 +0100200 return
201 endif
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100202
Bram Moolenaar3b05b132016-02-03 23:25:07 +0100203 call assert_equal('got it', ch_sendexpr(handle, 'hello!'))
204
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100205 let newhandle = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar77073442016-02-13 23:23:53 +0100206 if ch_status(newhandle) == "fail"
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100207 call assert_false(1, "Can't open second channel")
208 return
209 endif
Bram Moolenaar3b05b132016-02-03 23:25:07 +0100210 call assert_equal('got it', ch_sendexpr(newhandle, 'hello!'))
211 call assert_equal('got it', ch_sendexpr(handle, 'hello!'))
212
213 call ch_close(handle)
214 call assert_equal('got it', ch_sendexpr(newhandle, 'hello!'))
215
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100216 call ch_close(newhandle)
217endfunc
218
219func Test_two_channels()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100220 call ch_log('Test_two_channels()')
Bram Moolenaarbfa1ffc2016-02-13 18:40:30 +0100221 call s:run_server('s:two_channels')
Bram Moolenaar3b05b132016-02-03 23:25:07 +0100222endfunc
223
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100224" Test that a server crash is handled gracefully.
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100225func s:server_crash(port)
226 let handle = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar77073442016-02-13 23:23:53 +0100227 if ch_status(handle) == "fail"
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100228 call assert_false(1, "Can't open channel")
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100229 return
230 endif
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100231
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100232 call ch_sendexpr(handle, '!crash!')
233
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100234 sleep 10m
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100235endfunc
236
237func Test_server_crash()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100238 call ch_log('Test_server_crash()')
Bram Moolenaarbfa1ffc2016-02-13 18:40:30 +0100239 call s:run_server('s:server_crash')
Bram Moolenaarfcb1e3d2016-02-03 21:32:46 +0100240endfunc
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100241
Bram Moolenaarf6157282016-02-10 21:07:14 +0100242let s:reply = ""
243func s:Handler(chan, msg)
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100244 unlet s:reply
Bram Moolenaarf6157282016-02-10 21:07:14 +0100245 let s:reply = a:msg
246endfunc
247
248func s:channel_handler(port)
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100249 let handle = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar77073442016-02-13 23:23:53 +0100250 if ch_status(handle) == "fail"
Bram Moolenaarf6157282016-02-10 21:07:14 +0100251 call assert_false(1, "Can't open channel")
252 return
253 endif
254
255 " Test that it works while waiting on a numbered message.
256 call assert_equal('ok', ch_sendexpr(handle, 'call me'))
257 sleep 10m
258 call assert_equal('we called you', s:reply)
259
260 " Test that it works while not waiting on a numbered message.
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100261 call ch_sendexpr(handle, 'call me again', {'callback': 0})
Bram Moolenaarf6157282016-02-10 21:07:14 +0100262 sleep 10m
263 call assert_equal('we did call you', s:reply)
264endfunc
265
266func Test_channel_handler()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100267 call ch_log('Test_channel_handler()')
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100268 let s:chopt.callback = 's:Handler'
Bram Moolenaarf6157282016-02-10 21:07:14 +0100269 call s:run_server('s:channel_handler')
Bram Moolenaarb6a4fee2016-02-11 20:48:34 +0100270 let s:chopt.callback = function('s:Handler')
271 call s:run_server('s:channel_handler')
272 unlet s:chopt.callback
Bram Moolenaarf6157282016-02-10 21:07:14 +0100273endfunc
274
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100275" Test that trying to connect to a non-existing port fails quickly.
276func Test_connect_waittime()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100277 call ch_log('Test_connect_waittime()')
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100278 let start = reltime()
Bram Moolenaara4833262016-02-09 23:33:25 +0100279 let handle = ch_open('localhost:9876', s:chopt)
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100280 if ch_status(handle) != "fail"
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100281 " Oops, port does exists.
282 call ch_close(handle)
283 else
284 let elapsed = reltime(start)
Bram Moolenaar74f5e652016-02-07 21:44:49 +0100285 call assert_true(reltimefloat(elapsed) < 1.0)
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100286 endif
287
288 let start = reltime()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100289 let handle = ch_open('localhost:9867', {'waittime': 500})
Bram Moolenaar77073442016-02-13 23:23:53 +0100290 if ch_status(handle) != "fail"
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100291 " Oops, port does exists.
292 call ch_close(handle)
293 else
Bram Moolenaar0fa98e72016-02-07 22:21:19 +0100294 " Failed connection doesn't wait the full time on Unix.
Bram Moolenaard6a8d482016-02-10 20:32:20 +0100295 " TODO: why is MS-Windows different?
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100296 let elapsed = reltime(start)
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100297 call assert_true(reltimefloat(elapsed) < 1.0)
Bram Moolenaar7a84dbe2016-02-07 21:29:00 +0100298 endif
299endfunc
Bram Moolenaar6463ca22016-02-13 17:04:46 +0100300
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100301func Test_raw_pipe()
302 if !has('job')
303 return
304 endif
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100305 call ch_log('Test_raw_pipe()')
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100306 let job = job_start(s:python . " test_channel_pipe.py", {'mode': 'raw'})
307 call assert_equal("run", job_status(job))
308 try
309 let handle = job_getchannel(job)
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100310 call ch_sendraw(handle, "echo something\n", {'callback': 0})
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100311 let msg = ch_readraw(handle)
312 call assert_equal("something\n", substitute(msg, "\r", "", 'g'))
313
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100314 call ch_sendraw(handle, "double this\n", {'callback': 0})
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100315 let msg = ch_readraw(handle)
316 call assert_equal("this\nAND this\n", substitute(msg, "\r", "", 'g'))
317
318 let reply = ch_sendraw(handle, "quit\n")
319 call assert_equal("Goodbye!\n", substitute(reply, "\r", "", 'g'))
320 finally
321 call job_stop(job)
322 endtry
323endfunc
324
325func Test_nl_pipe()
Bram Moolenaard8070362016-02-15 21:56:54 +0100326 if !has('job')
Bram Moolenaar6463ca22016-02-13 17:04:46 +0100327 return
328 endif
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100329 call ch_log('Test_nl_pipe()')
Bram Moolenaarb6a77372016-02-15 22:55:28 +0100330 let job = job_start(s:python . " test_channel_pipe.py")
Bram Moolenaar6463ca22016-02-13 17:04:46 +0100331 call assert_equal("run", job_status(job))
332 try
333 let handle = job_getchannel(job)
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100334 call ch_sendraw(handle, "echo something\n", {'callback': 0})
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100335 call assert_equal("something", ch_readraw(handle))
336
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100337 call ch_sendraw(handle, "double this\n", {'callback': 0})
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100338 call assert_equal("this", ch_readraw(handle))
339 call assert_equal("AND this", ch_readraw(handle))
340
Bram Moolenaar6463ca22016-02-13 17:04:46 +0100341 let reply = ch_sendraw(handle, "quit\n")
Bram Moolenaar9a6e33a2016-02-16 19:25:12 +0100342 call assert_equal("Goodbye!", reply)
Bram Moolenaar6463ca22016-02-13 17:04:46 +0100343 finally
344 call job_stop(job)
345 endtry
346endfunc
Bram Moolenaar3bece9f2016-02-15 20:39:46 +0100347
Bram Moolenaard46ae142016-02-16 13:33:52 +0100348""""""""""
349
Bram Moolenaar3bece9f2016-02-15 20:39:46 +0100350let s:unletResponse = ''
351func s:UnletHandler(handle, msg)
352 let s:unletResponse = a:msg
353 unlet s:channelfd
354endfunc
355
356" Test that "unlet handle" in a handler doesn't crash Vim.
357func s:unlet_handle(port)
358 let s:channelfd = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100359 call ch_sendexpr(s:channelfd, "test", {'callback': function('s:UnletHandler')})
Bram Moolenaar3bece9f2016-02-15 20:39:46 +0100360 sleep 10m
361 call assert_equal('what?', s:unletResponse)
362endfunc
363
364func Test_unlet_handle()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100365 call ch_log('Test_unlet_handle()')
Bram Moolenaar3bece9f2016-02-15 20:39:46 +0100366 call s:run_server('s:unlet_handle')
367endfunc
Bram Moolenaar5cefd402016-02-16 12:44:26 +0100368
Bram Moolenaard46ae142016-02-16 13:33:52 +0100369""""""""""
370
371let s:unletResponse = ''
372func s:CloseHandler(handle, msg)
373 let s:unletResponse = a:msg
374 call ch_close(s:channelfd)
375endfunc
376
377" Test that "unlet handle" in a handler doesn't crash Vim.
378func s:close_handle(port)
379 let s:channelfd = ch_open('localhost:' . a:port, s:chopt)
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100380 call ch_sendexpr(s:channelfd, "test", {'callback': function('s:CloseHandler')})
Bram Moolenaard46ae142016-02-16 13:33:52 +0100381 sleep 10m
382 call assert_equal('what?', s:unletResponse)
383endfunc
384
385func Test_close_handle()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100386 call ch_log('Test_close_handle()')
Bram Moolenaard46ae142016-02-16 13:33:52 +0100387 call s:run_server('s:close_handle')
388endfunc
389
390""""""""""
391
Bram Moolenaar5cefd402016-02-16 12:44:26 +0100392func Test_open_fail()
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100393 call ch_log('Test_open_fail()')
Bram Moolenaar5cefd402016-02-16 12:44:26 +0100394 silent! let ch = ch_open("noserver")
395 echo ch
396 let d = ch
397endfunc
Bram Moolenaar81661fb2016-02-18 22:23:34 +0100398
399""""""""""
400
401func s:open_delay(port)
402 " Wait up to a second for the port to open.
403 let s:chopt.waittime = 1000
404 let channel = ch_open('localhost:' . a:port, s:chopt)
405 unlet s:chopt.waittime
406 if ch_status(channel) == "fail"
407 call assert_false(1, "Can't open channel")
408 return
409 endif
410 call assert_equal('got it', ch_sendexpr(channel, 'hello!'))
411 call ch_close(channel)
412endfunc
413
414func Test_open_delay()
415 call ch_log('Test_open_delay()')
416 " The server will wait half a second before creating the port.
417 call s:run_server('s:open_delay', 'delay')
418endfunc