18cf91286SBram Moolenaar" Tests for the writefile() function.
219a1669fSBram Moolenaar
38cf91286SBram Moolenaarfunc Test_writefile()
419a1669fSBram Moolenaar  let f = tempname()
519a1669fSBram Moolenaar  call writefile(["over","written"], f, "b")
619a1669fSBram Moolenaar  call writefile(["hello","world"], f, "b")
719a1669fSBram Moolenaar  call writefile(["!", "good"], f, "a")
819a1669fSBram Moolenaar  call writefile(["morning"], f, "ab")
919a1669fSBram Moolenaar  call writefile(["", "vimmers"], f, "ab")
1019a1669fSBram Moolenaar  let l = readfile(f)
1119a1669fSBram Moolenaar  call assert_equal("hello", l[0])
1219a1669fSBram Moolenaar  call assert_equal("world!", l[1])
1319a1669fSBram Moolenaar  call assert_equal("good", l[2])
1419a1669fSBram Moolenaar  call assert_equal("morning", l[3])
1519a1669fSBram Moolenaar  call assert_equal("vimmers", l[4])
1619a1669fSBram Moolenaar  call delete(f)
178cf91286SBram Moolenaarendfunc
188cf91286SBram Moolenaar
198cf91286SBram Moolenaarfunc Test_writefile_fails_gently()
208cf91286SBram Moolenaar  call assert_fails('call writefile(["test"], "Xfile", [])', 'E730:')
218cf91286SBram Moolenaar  call assert_false(filereadable("Xfile"))
228cf91286SBram Moolenaar  call delete("Xfile")
238cf91286SBram Moolenaar
248cf91286SBram Moolenaar  call assert_fails('call writefile(["test", [], [], [], "tset"], "Xfile")', 'E730:')
258cf91286SBram Moolenaar  call assert_false(filereadable("Xfile"))
268cf91286SBram Moolenaar  call delete("Xfile")
278cf91286SBram Moolenaar
288cf91286SBram Moolenaar  call assert_fails('call writefile([], "Xfile", [])', 'E730:')
298cf91286SBram Moolenaar  call assert_false(filereadable("Xfile"))
308cf91286SBram Moolenaar  call delete("Xfile")
318cf91286SBram Moolenaar
328cf91286SBram Moolenaar  call assert_fails('call writefile([], [])', 'E730:')
338cf91286SBram Moolenaarendfunc
34e6bf655bSBram Moolenaar
35e6bf655bSBram Moolenaarfunc Test_writefile_fails_conversion()
36e6bf655bSBram Moolenaar  if !has('multi_byte') || !has('iconv')
37e6bf655bSBram Moolenaar    return
38e6bf655bSBram Moolenaar  endif
39e6bf655bSBram Moolenaar  set nobackup nowritebackup
40e6bf655bSBram Moolenaar  new
41e6bf655bSBram Moolenaar  let contents = ["line one", "line two"]
42e6bf655bSBram Moolenaar  call writefile(contents, 'Xfile')
43e6bf655bSBram Moolenaar  edit Xfile
44e6bf655bSBram Moolenaar  call setline(1, ["first line", "cannot convert \u010b", "third line"])
45e6bf655bSBram Moolenaar  call assert_fails('write ++enc=cp932')
46e6bf655bSBram Moolenaar  call assert_equal(contents, readfile('Xfile'))
47e6bf655bSBram Moolenaar
48e6bf655bSBram Moolenaar  call delete('Xfile')
49e6bf655bSBram Moolenaar  bwipe!
50e6bf655bSBram Moolenaar  set backup& writebackup&
51e6bf655bSBram Moolenaarendfunc
52*2c33d7bbSBram Moolenaar
53*2c33d7bbSBram Moolenaarfunc SetFlag(timer)
54*2c33d7bbSBram Moolenaar  let g:flag = 1
55*2c33d7bbSBram Moolenaarendfunc
56*2c33d7bbSBram Moolenaar
57*2c33d7bbSBram Moolenaarfunc Test_write_quit_split()
58*2c33d7bbSBram Moolenaar  " Prevent exiting by splitting window on file write.
59*2c33d7bbSBram Moolenaar  augroup testgroup
60*2c33d7bbSBram Moolenaar    autocmd BufWritePre * split
61*2c33d7bbSBram Moolenaar  augroup END
62*2c33d7bbSBram Moolenaar  e! Xfile
63*2c33d7bbSBram Moolenaar  call setline(1, 'nothing')
64*2c33d7bbSBram Moolenaar  wq
65*2c33d7bbSBram Moolenaar
66*2c33d7bbSBram Moolenaar  if has('timers')
67*2c33d7bbSBram Moolenaar    " timer will not run if "exiting" is still set
68*2c33d7bbSBram Moolenaar    let g:flag = 0
69*2c33d7bbSBram Moolenaar    call timer_start(1, 'SetFlag')
70*2c33d7bbSBram Moolenaar    sleep 50m
71*2c33d7bbSBram Moolenaar    call assert_equal(1, g:flag)
72*2c33d7bbSBram Moolenaar    unlet g:flag
73*2c33d7bbSBram Moolenaar  endif
74*2c33d7bbSBram Moolenaar  au! testgroup
75*2c33d7bbSBram Moolenaar  bwipe Xfile
76*2c33d7bbSBram Moolenaar  call delete('Xfile')
77*2c33d7bbSBram Moolenaarendfunc
78*2c33d7bbSBram Moolenaar
79*2c33d7bbSBram Moolenaarfunc Test_nowrite_quit_split()
80*2c33d7bbSBram Moolenaar  " Prevent exiting by opening a help window.
81*2c33d7bbSBram Moolenaar  e! Xfile
82*2c33d7bbSBram Moolenaar  help
83*2c33d7bbSBram Moolenaar  wincmd w
84*2c33d7bbSBram Moolenaar  exe winnr() . 'q'
85*2c33d7bbSBram Moolenaar
86*2c33d7bbSBram Moolenaar  if has('timers')
87*2c33d7bbSBram Moolenaar    " timer will not run if "exiting" is still set
88*2c33d7bbSBram Moolenaar    let g:flag = 0
89*2c33d7bbSBram Moolenaar    call timer_start(1, 'SetFlag')
90*2c33d7bbSBram Moolenaar    sleep 50m
91*2c33d7bbSBram Moolenaar    call assert_equal(1, g:flag)
92*2c33d7bbSBram Moolenaar    unlet g:flag
93*2c33d7bbSBram Moolenaar  endif
94*2c33d7bbSBram Moolenaar  bwipe Xfile
95*2c33d7bbSBram Moolenaarendfunc
96