let s:suite = themis#suite('popen') let s:assert = themis#helper('assert') function! s:suite.popen2() abort if !vimproc#util#is_windows() && !executable('ls') call s:assert.skip('ls command is not installed.') return endif if vimproc#util#is_windows() let cmd = ['cmd', '/c', 'DIR', '/B'] else let cmd = ['ls'] endif let sub = vimproc#popen2(cmd) let res = '' while !sub.stdout.eof let res .= sub.stdout.read() endwhile " Newline conversion. let res = substitute(res, '\r\n', '\n', 'g') call s:assert.true(sub.is_valid) let [cond, status] = sub.waitpid() call s:assert.equals(cond, 'exit') call s:assert.equals(status, 0) call s:assert.false(sub.is_valid) call s:assert.equals(res, system(join(cmd))) unlet cmd unlet sub if vimproc#util#is_windows() let cmd = ['cmd', '/c', 'DIR', '/B', '/A'] else let cmd = ['ls', '-la'] endif let sub = vimproc#popen2(cmd) let res = '' while !sub.stdout.eof let res .= sub.stdout.read() endwhile " Newline conversion. let res = substitute(res, '\r\n', '\n', 'g') call s:assert.true(sub.is_valid) let [cond, status] = sub.waitpid() call s:assert.equals(cond, 'exit') call s:assert.equals(status, 0) call s:assert.false(sub.is_valid) call s:assert.equals(res, system(join(cmd))) unlet cmd unlet sub endfunction function! s:suite.popen3() abort if vimproc#util#is_windows() let cmd = ['cmd', '/c', 'DIR', '/B'] else let cmd = ['ls'] endif let sub = vimproc#popen3(cmd) let res = '' while !sub.stdout.eof let res .= sub.stdout.read() endwhile " Newline conversion. let res = substitute(res, '\r\n', '\n', 'g') call s:assert.true(sub.is_valid) let [cond, status] = sub.waitpid() call s:assert.equals(cond, 'exit') call s:assert.equals(status, 0) call s:assert.false(sub.is_valid) call s:assert.equals(res, system(join(cmd))) unlet cmd unlet sub endfunction function! s:suite.redirection1() abort let output = vimproc#system('echo "foo" > test.txt | echo "bar"') call s:assert.equals(output, "bar\n") sleep 3 call s:assert.equals(readfile('test.txt'), ['foo']) if filereadable('test.txt') call delete('test.txt') endif endfunction function! s:suite.redirection2() abort let sub = vimproc#ptyopen('echo "foo" > test.txt | echo "bar"') let res = '' while !sub.stdout.eof let res .= sub.stdout.read() endwhile " Newline conversion. let res = substitute(res, '\r\n', '\n', 'g') sleep 3 call s:assert.equals(readfile('test.txt'), ['foo']) if filereadable('test.txt') call delete('test.txt') endif endfunction " vim:foldmethod=marker:fen: