]> granicus.if.org Git - vim/commitdiff
patch 7.4.1299 v7.4.1299
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Feb 2016 20:07:14 +0000 (21:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Feb 2016 20:07:14 +0000 (21:07 +0100)
Problem:    When the server sends a message with ID zero the channel handler
            is not invoked. (Christian J.  Robinson)
Solution:   Recognize zero value for the request ID.  Add a test for invoking
            the channel handler.

src/channel.c
src/testdir/test_channel.py
src/testdir/test_channel.vim
src/version.c

index 50dd18087c8ef9f1888fc933da6f76f89fc0f95c..af282cdae4a0116853bae7112cd41620868d8e89 100644 (file)
@@ -786,6 +786,7 @@ channel_get_json(int ch_idx, int id, typval_T **rettv)
 
        if ((id > 0 && tv->v_type == VAR_NUMBER && tv->vval.v_number == id)
              || (id <= 0 && (tv->v_type != VAR_NUMBER
+                              || tv->vval.v_number == 0
                               || tv->vval.v_number != channel->ch_block_id)))
        {
            *rettv = item->value;
index 039a9de91ec15a6f50c969cea7ddfd13f3f1b747..311fbc07c8072a6ccb0669c80232ed1b481e99a2 100644 (file)
@@ -130,6 +130,16 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
                     elif decoded[1] == 'eval-result':
                         # Send back the last received eval result.
                         response = last_eval
+                    elif decoded[1] == 'call me':
+                        cmd = '[0,"we called you"]'
+                        print("sending: {}".format(cmd))
+                        self.request.sendall(cmd.encode('utf-8'))
+                        response = "ok"
+                    elif decoded[1] == 'call me again':
+                        cmd = '[0,"we did call you"]'
+                        print("sending: {}".format(cmd))
+                        self.request.sendall(cmd.encode('utf-8'))
+                        response = ""
                     elif decoded[1] == '!quit!':
                         # we're done
                         self.server.shutdown()
@@ -140,9 +150,12 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
                     else:
                         response = "what?"
 
-                    encoded = json.dumps([decoded[0], response])
-                    print("sending: {}".format(encoded))
-                    self.request.sendall(encoded.encode('utf-8'))
+                    if response == "":
+                        print("no response")
+                    else:
+                        encoded = json.dumps([decoded[0], response])
+                        print("sending: {}".format(encoded))
+                        self.request.sendall(encoded.encode('utf-8'))
 
                 # Negative numbers are used for "eval" responses.
                 elif decoded[0] < 0:
index 819370348fb0cc866f7107920dbf6fa298709566..d77778a3e760ebcdc9d2f9d6649cc79bc4f0e7f3 100644 (file)
@@ -204,6 +204,35 @@ func Test_server_crash()
   call s:run_server('s:server_crash')
 endfunc
 
+let s:reply = ""
+func s:Handler(chan, msg)
+  let s:reply = a:msg
+endfunc
+
+func s:channel_handler(port)
+  let chopt = copy(s:chopt)
+  let chopt['callback'] = 's:Handler'
+  let handle = ch_open('localhost:' . a:port, chopt)
+  if handle < 0
+    call assert_false(1, "Can't open channel")
+    return
+  endif
+
+  " Test that it works while waiting on a numbered message.
+  call assert_equal('ok', ch_sendexpr(handle, 'call me'))
+  sleep 10m
+  call assert_equal('we called you', s:reply)
+
+  " Test that it works while not waiting on a numbered message.
+  call ch_sendexpr(handle, 'call me again', 0)
+  sleep 10m
+  call assert_equal('we did call you', s:reply)
+endfunc
+
+func Test_channel_handler()
+  call s:run_server('s:channel_handler')
+endfunc
+
 " Test that trying to connect to a non-existing port fails quickly.
 func Test_connect_waittime()
   let start = reltime()
index e6dbc9e0dc395aa4dea898de099f4afb72373e3f..9a77db0bd3ed7ca7e7ad1d9c29c2b8b5ee04c053 100644 (file)
@@ -747,6 +747,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1299,
 /**/
     1298,
 /**/