patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options

Problem:    term_start() does not allow in_io, out_io and err_io options.
Solution:   Add JO_OUT_IO to get_job_options().
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index ce3fab7..dce5f05 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -164,10 +164,8 @@
   call term_wait(1234)
 
   call term_wait(buf)
-  if has('win32')
-    " TODO: this should not be needed
-    sleep 100m
-  endif
+  let g:buf = buf
+  call WaitFor('len(term_scrape(g:buf, 1)) > 0')
   call Check_123(buf)
 
   " Must still work after the job ended.
@@ -573,3 +571,45 @@
   call delete('Xdir with spaces', 'rf')
   bwipe
 endfunc
+
+func Test_terminal_wrong_options()
+  call assert_fails('call term_start(&shell, {
+	\ "in_io": "file",
+	\ "in_name": "xxx",
+	\ "out_io": "file",
+	\ "out_name": "xxx",
+	\ "err_io": "file",
+	\ "err_name": "xxx"
+	\ })', 'E474:')
+  call assert_fails('call term_start(&shell, {
+	\ "out_buf": bufnr("%")
+	\ })', 'E474:')
+  call assert_fails('call term_start(&shell, {
+	\ "err_buf": bufnr("%")
+	\ })', 'E474:')
+endfunc
+
+func Test_terminal_redir_file()
+  let cmd = Get_cat_123_cmd()
+  let buf = term_start(cmd, {'out_io': 'file', 'out_name': 'Xfile'})
+  call term_wait(buf)
+  call WaitFor('len(readfile("Xfile")) > 0')
+  call assert_match('123', readfile('Xfile')[0])
+  call delete('Xfile')
+
+  if has('unix')
+    let buf = term_start('xyzabc', {'err_io': 'file', 'err_name': 'Xfile'})
+    call term_wait(buf)
+    call WaitFor('len(readfile("Xfile")) > 0')
+    call assert_match('executing job failed', readfile('Xfile')[0])
+    call delete('Xfile')
+
+    call writefile(['one line'], 'Xfile')
+    let buf = term_start('cat', {'in_io': 'file', 'in_name': 'Xfile'})
+    call term_wait(buf)
+    call WaitFor('term_getline(' . buf . ', 1) == "one line"')
+    call assert_equal('one line', term_getline(buf, 1))
+    bwipe
+    call delete('Xfile')
+  endif
+endfunc