let s:suite = themis#suite('fopen') let s:assert = themis#helper('assert') call themis#helper('command').with(s:) let s:filename = 'test.txt' let s:contents = ['foo', 'bar'] function! s:suite.before_each() abort call writefile(s:contents, s:filename, 'b') endfunction function! s:suite.after_each() abort if filereadable(s:filename) call delete(s:filename) endif endfunction function! s:suite.read() abort let file = vimproc#fopen(s:filename) let res = file.read() call s:assert.true(file.is_valid) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ split(res, '\r\n\|\r\|\n')) endfunction function! s:suite.read_lines() abort let file = vimproc#fopen(s:filename, 'r') let res = file.read_lines() call s:assert.true(file.is_valid) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename, 'b'), res) endfunction function! s:suite.read_line() abort let file = vimproc#fopen(s:filename, 'r', 0) let res = [] while !file.eof let res += [file.read_line()] endwhile call s:assert.true(file.is_valid) call file.close() call s:assert.false(file.is_valid) call s:assert.equals(readfile(s:filename), res) endfunction function! s:suite.write() abort let file = vimproc#fopen(s:filename, 'w') let res = "hello\nvimproc\n.vim" call s:assert.true(file.is_valid) call file.write(res) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ split(res, '\r\n\|\r\|\n')) endfunction function! s:suite.append() abort let file = vimproc#fopen(s:filename, 'a') let res = "\nhello\nvimproc\n.vim" call s:assert.true(file.is_valid) call file.write(res) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ s:contents + split(res, '\r\n\|\r\|\n')) endfunction function! s:suite.read_write() abort let file = vimproc#fopen(s:filename, 'r+') let res = file.read() call s:assert.equals( \ readfile(s:filename), \ split(res, '\r\n\|\r\|\n')) call s:assert.true(file.is_valid) let res = "\nhello\nvimproc\n.vim" call file.write(res) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ s:contents + split(res, '\r\n\|\r\|\n')) endfunction function! s:suite.with_oflag() abort let file = vimproc#fopen(s:filename, 'O_RDONLY') let res = file.read() call s:assert.true(file.is_valid) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ split(res, '\r\n\|\r\|\n')) let file = vimproc#fopen(s:filename, 'O_WRONLY|O_TRUNC') let res = "hello\nvimproc\n.vim" call file.write(res) call s:assert.true(file.is_valid) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ split(res, '\r\n\|\r\|\n')) let file = vimproc#fopen(s:filename, 'O_RDWR|O_APPEND') let res2 = "\nworld\n!" call file.write(res2) call s:assert.true(file.is_valid) call file.close() call s:assert.false(file.is_valid) call s:assert.equals( \ readfile(s:filename), \ split(res . res2, '\r\n\|\r\|\n')) endfunction function! s:suite.invalid_fmode() abort let file = vimproc#fopen(s:filename, 'r') Throws /write() error/ file.write('foo') call file.close() call s:assert.equals(readfile(s:filename), s:contents) let file = vimproc#fopen(s:filename, 'w') Throws /read() error/ file.read() call file.close() call s:assert.true(empty(readfile(s:filename))) endfunction " vim:foldmethod=marker:fen: