patch 7.4.1504
Problem:    No test for reading last-but-one line.
Solution:   Add a test.
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 5133a24..5321cce 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -629,6 +629,83 @@
   endtry
 endfunc
 
+" Wait a little while for the last line, minus "offset", to equal "line".
+func Wait_for_last_line(line, offset)
+  for i in range(100)
+    sleep 10m
+    if getline(line('$') - a:offset) == a:line
+      break
+    endif
+  endfor
+endfunc
+
+func Test_pipe_io_two_buffers()
+  if !has('job')
+    return
+  endif
+  call ch_log('Test_pipe_io_two_buffers()')
+
+  " Create two buffers, one to read from and one to write to.
+  split pipe-output
+  set buftype=nofile
+  split pipe-input
+  set buftype=nofile
+
+  let job = job_start(s:python . " test_channel_pipe.py",
+	\ {'in-io': 'buffer', 'in-name': 'pipe-input', 'in-top': 0,
+	\  'out-io': 'buffer', 'out-name': 'pipe-output'})
+  call assert_equal("run", job_status(job))
+  try
+    exe "normal Gaecho hello\<CR>"
+    exe bufwinnr('pipe-output') . "wincmd w"
+    call Wait_for_last_line('hello', 0)
+    call assert_equal('hello', getline('$'))
+
+    exe bufwinnr('pipe-input') . "wincmd w"
+    exe "normal Gadouble this\<CR>"
+    exe bufwinnr('pipe-output') . "wincmd w"
+    call Wait_for_last_line('AND this', 0)
+    call assert_equal('this', getline(line('$') - 1))
+    call assert_equal('AND this', getline('$'))
+
+    bwipe!
+    exe bufwinnr('pipe-input') . "wincmd w"
+    bwipe!
+  finally
+    call job_stop(job)
+  endtry
+endfunc
+
+func Test_pipe_io_one_buffer()
+  if !has('job')
+    return
+  endif
+  call ch_log('Test_pipe_io_one_buffer()')
+
+  " Create one buffer to read from and to write to.
+  split pipe-io
+  set buftype=nofile
+
+  let job = job_start(s:python . " test_channel_pipe.py",
+	\ {'in-io': 'buffer', 'in-name': 'pipe-io', 'in-top': 0,
+	\  'out-io': 'buffer', 'out-name': 'pipe-io'})
+  call assert_equal("run", job_status(job))
+  try
+    exe "normal Goecho hello\<CR>"
+    call Wait_for_last_line('hello', 1)
+    call assert_equal('hello', getline(line('$') - 1))
+
+    exe "normal Gadouble this\<CR>"
+    call Wait_for_last_line('AND this', 1)
+    call assert_equal('this', getline(line('$') - 2))
+    call assert_equal('AND this', getline(line('$') - 1))
+
+    bwipe!
+  finally
+    call job_stop(job)
+  endtry
+endfunc
+
 """"""""""
 
 let s:unletResponse = ''
diff --git a/src/version.c b/src/version.c
index 92fb02a..1ba0ab0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1504,
+/**/
     1503,
 /**/
     1502,