16d91bcb4SBram Moolenaar" Test for 'fileformat'
2e8ef3a09SBram Moolenaar
3*41a7f82dSYegappan Lakshmanansource shared.vim
4*41a7f82dSYegappan Lakshmanan
572fcf07bSBram Moolenaar" Test behavior of fileformat after bwipeout of last buffer
6e8ef3a09SBram Moolenaarfunc Test_fileformat_after_bw()
7e8ef3a09SBram Moolenaar  bwipeout
8e8ef3a09SBram Moolenaar  set fileformat&
9e8ef3a09SBram Moolenaar  if &fileformat == 'dos'
10e8ef3a09SBram Moolenaar    let test_fileformats = 'unix'
11e8ef3a09SBram Moolenaar  elseif &fileformat == 'unix'
12e8ef3a09SBram Moolenaar    let test_fileformats = 'mac'
13e8ef3a09SBram Moolenaar  else  " must be mac
14e8ef3a09SBram Moolenaar    let test_fileformats = 'dos'
15e8ef3a09SBram Moolenaar  endif
16e8ef3a09SBram Moolenaar  exec 'set fileformats='.test_fileformats
17e8ef3a09SBram Moolenaar  bwipeout!
18e8ef3a09SBram Moolenaar  call assert_equal(test_fileformats, &fileformat)
19e8ef3a09SBram Moolenaar  set fileformats&
20e8ef3a09SBram Moolenaarendfunc
217a2699e8SBram Moolenaar
227a2699e8SBram Moolenaarfunc Test_fileformat_autocommand()
232aa5f696SBram Moolenaar  let filecnt = ["", "foobar\<CR>", "eins\<CR>", "\<CR>", "zwei\<CR>", "drei", "vier", "fünf", ""]
247a2699e8SBram Moolenaar  let ffs = &ffs
257a2699e8SBram Moolenaar  call writefile(filecnt, 'Xfile', 'b')
267a2699e8SBram Moolenaar  au BufReadPre Xfile set ffs=dos ff=dos
277a2699e8SBram Moolenaar  new Xfile
287a2699e8SBram Moolenaar  call assert_equal('dos', &l:ff)
297a2699e8SBram Moolenaar  call assert_equal('dos', &ffs)
301695f99dSBram Moolenaar
317a2699e8SBram Moolenaar  " cleanup
321695f99dSBram Moolenaar  call delete('Xfile')
337a2699e8SBram Moolenaar  let &ffs = ffs
347a2699e8SBram Moolenaar  au! BufReadPre Xfile
357a2699e8SBram Moolenaar  bw!
367a2699e8SBram Moolenaarendfunc
3772fcf07bSBram Moolenaar
386fd367a9SBram Moolenaarfunc Test_fileformat_nomodifiable()
396fd367a9SBram Moolenaar  new
406fd367a9SBram Moolenaar  setlocal nomodifiable
416fd367a9SBram Moolenaar
426fd367a9SBram Moolenaar  call assert_fails('set fileformat=latin1', 'E21:')
436fd367a9SBram Moolenaar
446fd367a9SBram Moolenaar  bw
456fd367a9SBram Moolenaarendfunc
466fd367a9SBram Moolenaar
4772fcf07bSBram Moolenaar" Convert the contents of a file into a literal string
4872fcf07bSBram Moolenaarfunc s:file2str(fname)
4972fcf07bSBram Moolenaar  let b = readfile(a:fname, 'B')
5072fcf07bSBram Moolenaar  let s = ''
5172fcf07bSBram Moolenaar  for c in b
5272fcf07bSBram Moolenaar    let s .= nr2char(c)
5372fcf07bSBram Moolenaar  endfor
5472fcf07bSBram Moolenaar  return s
5572fcf07bSBram Moolenaarendfunc
5672fcf07bSBram Moolenaar
5772fcf07bSBram Moolenaar" Concatenate the contents of files 'f1' and 'f2' and create 'destfile'
5872fcf07bSBram Moolenaarfunc s:concat_files(f1, f2, destfile)
5972fcf07bSBram Moolenaar  let b1 = readfile(a:f1, 'B')
6072fcf07bSBram Moolenaar  let b2 = readfile(a:f2, 'B')
6172fcf07bSBram Moolenaar  let b3 = b1 + b2
6272fcf07bSBram Moolenaar  call writefile(b3, a:destfile, 'B')
6372fcf07bSBram Moolenaarendfun
6472fcf07bSBram Moolenaar
6572fcf07bSBram Moolenaar" Test for a lot of variations of the 'fileformats' option
6672fcf07bSBram Moolenaarfunc Test_fileformats()
6772fcf07bSBram Moolenaar  " create three test files, one in each format
6872fcf07bSBram Moolenaar  call writefile(['unix', 'unix'], 'XXUnix')
6972fcf07bSBram Moolenaar  call writefile(["dos\r", "dos\r"], 'XXDos')
7072fcf07bSBram Moolenaar  call writefile(["mac\rmac\r"], 'XXMac', 'b')
7172fcf07bSBram Moolenaar  " create a file with no End Of Line
7272fcf07bSBram Moolenaar  call writefile(["noeol"], 'XXEol', 'b')
7372fcf07bSBram Moolenaar  " create mixed format files
7472fcf07bSBram Moolenaar  call s:concat_files('XXUnix', 'XXDos', 'XXUxDs')
7572fcf07bSBram Moolenaar  call s:concat_files('XXUnix', 'XXMac', 'XXUxMac')
7672fcf07bSBram Moolenaar  call s:concat_files('XXDos', 'XXMac', 'XXDosMac')
7772fcf07bSBram Moolenaar  call s:concat_files('XXMac', 'XXEol', 'XXMacEol')
7872fcf07bSBram Moolenaar  call s:concat_files('XXUxDs', 'XXMac', 'XXUxDsMc')
7972fcf07bSBram Moolenaar
8072fcf07bSBram Moolenaar  new
8172fcf07bSBram Moolenaar
8272fcf07bSBram Moolenaar  " Test 1: try reading and writing with 'fileformats' empty
8372fcf07bSBram Moolenaar  set fileformats=
8472fcf07bSBram Moolenaar
8572fcf07bSBram Moolenaar  " try with 'fileformat' set to 'unix'
8672fcf07bSBram Moolenaar  set fileformat=unix
8772fcf07bSBram Moolenaar  e! XXUnix
8872fcf07bSBram Moolenaar  w! Xtest
8972fcf07bSBram Moolenaar  call assert_equal("unix\nunix\n", s:file2str('Xtest'))
9072fcf07bSBram Moolenaar  e! XXDos
9172fcf07bSBram Moolenaar  w! Xtest
9272fcf07bSBram Moolenaar  call assert_equal("dos\r\ndos\r\n", s:file2str('Xtest'))
9372fcf07bSBram Moolenaar  e! XXMac
9472fcf07bSBram Moolenaar  w! Xtest
9572fcf07bSBram Moolenaar  call assert_equal("mac\rmac\r\n", s:file2str('Xtest'))
9672fcf07bSBram Moolenaar  bwipe XXUnix XXDos XXMac
9772fcf07bSBram Moolenaar
9872fcf07bSBram Moolenaar  " try with 'fileformat' set to 'dos'
9972fcf07bSBram Moolenaar  set fileformat=dos
10072fcf07bSBram Moolenaar  e! XXUnix
10172fcf07bSBram Moolenaar  w! Xtest
10272fcf07bSBram Moolenaar  call assert_equal("unix\r\nunix\r\n", s:file2str('Xtest'))
10372fcf07bSBram Moolenaar  e! XXDos
10472fcf07bSBram Moolenaar  w! Xtest
10572fcf07bSBram Moolenaar  call assert_equal("dos\r\ndos\r\n", s:file2str('Xtest'))
10672fcf07bSBram Moolenaar  e! XXMac
10772fcf07bSBram Moolenaar  w! Xtest
10872fcf07bSBram Moolenaar  call assert_equal("mac\rmac\r\r\n", s:file2str('Xtest'))
10972fcf07bSBram Moolenaar  bwipe XXUnix XXDos XXMac
11072fcf07bSBram Moolenaar
11172fcf07bSBram Moolenaar  " try with 'fileformat' set to 'mac'
11272fcf07bSBram Moolenaar  set fileformat=mac
11372fcf07bSBram Moolenaar  e! XXUnix
11472fcf07bSBram Moolenaar  w! Xtest
11572fcf07bSBram Moolenaar  call assert_equal("unix\nunix\n\r", s:file2str('Xtest'))
11672fcf07bSBram Moolenaar  e! XXDos
11772fcf07bSBram Moolenaar  w! Xtest
11872fcf07bSBram Moolenaar  call assert_equal("dos\r\ndos\r\n\r", s:file2str('Xtest'))
11972fcf07bSBram Moolenaar  e! XXMac
12072fcf07bSBram Moolenaar  w! Xtest
12172fcf07bSBram Moolenaar  call assert_equal("mac\rmac\r", s:file2str('Xtest'))
12272fcf07bSBram Moolenaar  bwipe XXUnix XXDos XXMac
12372fcf07bSBram Moolenaar
12472fcf07bSBram Moolenaar  " Test 2: try reading and writing with 'fileformats' set to one format
12572fcf07bSBram Moolenaar
12672fcf07bSBram Moolenaar  " try with 'fileformats' set to 'unix'
12772fcf07bSBram Moolenaar  set fileformats=unix
12872fcf07bSBram Moolenaar  e! XXUxDsMc
12972fcf07bSBram Moolenaar  w! Xtest
13072fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n",
13172fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
13272fcf07bSBram Moolenaar  bwipe XXUxDsMc
13372fcf07bSBram Moolenaar
13472fcf07bSBram Moolenaar  " try with 'fileformats' set to 'dos'
13572fcf07bSBram Moolenaar  set fileformats=dos
13672fcf07bSBram Moolenaar  e! XXUxDsMc
13772fcf07bSBram Moolenaar  w! Xtest
13872fcf07bSBram Moolenaar  call assert_equal("unix\r\nunix\r\ndos\r\ndos\r\nmac\rmac\r\r\n",
13972fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
14072fcf07bSBram Moolenaar  bwipe XXUxDsMc
14172fcf07bSBram Moolenaar
14272fcf07bSBram Moolenaar  " try with 'fileformats' set to 'mac'
14372fcf07bSBram Moolenaar  set fileformats=mac
14472fcf07bSBram Moolenaar  e! XXUxDsMc
14572fcf07bSBram Moolenaar  w! Xtest
14672fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r",
14772fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
14872fcf07bSBram Moolenaar  bwipe XXUxDsMc
14972fcf07bSBram Moolenaar
15072fcf07bSBram Moolenaar  " Test 3: try reading and writing with 'fileformats' set to two formats
15172fcf07bSBram Moolenaar
15272fcf07bSBram Moolenaar  " try with 'fileformats' set to 'unix,dos'
15372fcf07bSBram Moolenaar  set fileformats=unix,dos
15472fcf07bSBram Moolenaar  e! XXUxDsMc
15572fcf07bSBram Moolenaar  w! Xtest
15672fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n",
15772fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
15872fcf07bSBram Moolenaar  bwipe XXUxDsMc
15972fcf07bSBram Moolenaar
16072fcf07bSBram Moolenaar  e! XXUxMac
16172fcf07bSBram Moolenaar  w! Xtest
16272fcf07bSBram Moolenaar  call assert_equal("unix\nunix\nmac\rmac\r\n", s:file2str('Xtest'))
16372fcf07bSBram Moolenaar  bwipe XXUxMac
16472fcf07bSBram Moolenaar
16572fcf07bSBram Moolenaar  e! XXDosMac
16672fcf07bSBram Moolenaar  w! Xtest
16772fcf07bSBram Moolenaar  call assert_equal("dos\r\ndos\r\nmac\rmac\r\r\n", s:file2str('Xtest'))
16872fcf07bSBram Moolenaar  bwipe XXDosMac
16972fcf07bSBram Moolenaar
17072fcf07bSBram Moolenaar  " try with 'fileformats' set to 'unix,mac'
17172fcf07bSBram Moolenaar  set fileformats=unix,mac
17272fcf07bSBram Moolenaar  e! XXUxDs
17372fcf07bSBram Moolenaar  w! Xtest
17472fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\n", s:file2str('Xtest'))
17572fcf07bSBram Moolenaar  bwipe XXUxDs
17672fcf07bSBram Moolenaar
17772fcf07bSBram Moolenaar  e! XXUxDsMc
17872fcf07bSBram Moolenaar  w! Xtest
17972fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n",
18072fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
18172fcf07bSBram Moolenaar  bwipe XXUxDsMc
18272fcf07bSBram Moolenaar
18372fcf07bSBram Moolenaar  e! XXDosMac
18472fcf07bSBram Moolenaar  w! Xtest
18572fcf07bSBram Moolenaar  call assert_equal("dos\r\ndos\r\nmac\rmac\r", s:file2str('Xtest'))
18672fcf07bSBram Moolenaar  bwipe XXDosMac
18772fcf07bSBram Moolenaar
18872fcf07bSBram Moolenaar  e! XXEol
18972fcf07bSBram Moolenaar  exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>"
19072fcf07bSBram Moolenaar  w! Xtest
19172fcf07bSBram Moolenaar  call assert_equal("unix,mac:unix\nnoeol\n", s:file2str('Xtest'))
19272fcf07bSBram Moolenaar  bwipe! XXEol
19372fcf07bSBram Moolenaar
19472fcf07bSBram Moolenaar  " try with 'fileformats' set to 'dos,mac'
19572fcf07bSBram Moolenaar  set fileformats=dos,mac
19672fcf07bSBram Moolenaar  e! XXUxDs
19772fcf07bSBram Moolenaar  w! Xtest
19872fcf07bSBram Moolenaar  call assert_equal("unix\r\nunix\r\ndos\r\ndos\r\n", s:file2str('Xtest'))
19972fcf07bSBram Moolenaar  bwipe XXUxDs
20072fcf07bSBram Moolenaar
20172fcf07bSBram Moolenaar  e! XXUxMac
20272fcf07bSBram Moolenaar  exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>"
20372fcf07bSBram Moolenaar  w! Xtest
20472fcf07bSBram Moolenaar  call assert_equal("dos,mac:dos\r\nunix\r\nunix\r\nmac\rmac\r\r\n",
20572fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
20672fcf07bSBram Moolenaar  bwipe! XXUxMac
20772fcf07bSBram Moolenaar
20872fcf07bSBram Moolenaar  e! XXUxDsMc
20972fcf07bSBram Moolenaar  w! Xtest
21072fcf07bSBram Moolenaar  call assert_equal("unix\r\nunix\r\ndos\r\ndos\r\nmac\rmac\r\r\n",
21172fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
21272fcf07bSBram Moolenaar  bwipe XXUxDsMc
21372fcf07bSBram Moolenaar
21472fcf07bSBram Moolenaar  e! XXMacEol
21572fcf07bSBram Moolenaar  exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>"
21672fcf07bSBram Moolenaar  w! Xtest
21772fcf07bSBram Moolenaar  call assert_equal("dos,mac:mac\rmac\rmac\rnoeol\r", s:file2str('Xtest'))
21872fcf07bSBram Moolenaar  bwipe! XXMacEol
21972fcf07bSBram Moolenaar
22072fcf07bSBram Moolenaar  " Test 4: try reading and writing with 'fileformats' set to three formats
22172fcf07bSBram Moolenaar  set fileformats=unix,dos,mac
22272fcf07bSBram Moolenaar  e! XXUxDsMc
22372fcf07bSBram Moolenaar  w! Xtest
22472fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n",
22572fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
22672fcf07bSBram Moolenaar  bwipe XXUxDsMc
22772fcf07bSBram Moolenaar
22872fcf07bSBram Moolenaar  e! XXEol
22972fcf07bSBram Moolenaar  exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>"
23072fcf07bSBram Moolenaar  w! Xtest
23172fcf07bSBram Moolenaar  call assert_equal("unix,dos,mac:unix\nnoeol\n", s:file2str('Xtest'))
23272fcf07bSBram Moolenaar  bwipe! XXEol
23372fcf07bSBram Moolenaar
23472fcf07bSBram Moolenaar  set fileformats=mac,dos,unix
23572fcf07bSBram Moolenaar  e! XXUxDsMc
23672fcf07bSBram Moolenaar  w! Xtest
23772fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n",
23872fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
23972fcf07bSBram Moolenaar  bwipe XXUxDsMc
24072fcf07bSBram Moolenaar
24172fcf07bSBram Moolenaar  e! XXEol
24272fcf07bSBram Moolenaar  exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>"
24372fcf07bSBram Moolenaar  w! Xtest
24472fcf07bSBram Moolenaar  call assert_equal("mac,dos,unix:mac\rnoeol\r", s:file2str('Xtest'))
24572fcf07bSBram Moolenaar  bwipe! XXEol
24672fcf07bSBram Moolenaar
24772fcf07bSBram Moolenaar  " Test 5: try with 'binary' set
24872fcf07bSBram Moolenaar  set fileformats=mac,unix,dos
24972fcf07bSBram Moolenaar  set binary
25072fcf07bSBram Moolenaar  e! XXUxDsMc
25172fcf07bSBram Moolenaar  w! Xtest
25272fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r",
25372fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
25472fcf07bSBram Moolenaar  bwipe XXUxDsMc
25572fcf07bSBram Moolenaar
25672fcf07bSBram Moolenaar  set fileformats=mac
25772fcf07bSBram Moolenaar  e! XXUxDsMc
25872fcf07bSBram Moolenaar  w! Xtest
25972fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r",
26072fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
26172fcf07bSBram Moolenaar  bwipe XXUxDsMc
26272fcf07bSBram Moolenaar
26372fcf07bSBram Moolenaar  set fileformats=dos
26472fcf07bSBram Moolenaar  e! XXUxDsMc
26572fcf07bSBram Moolenaar  w! Xtest
26672fcf07bSBram Moolenaar  call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r",
26772fcf07bSBram Moolenaar	      \ s:file2str('Xtest'))
26872fcf07bSBram Moolenaar  bwipe XXUxDsMc
26972fcf07bSBram Moolenaar
27072fcf07bSBram Moolenaar  e! XXUnix
27172fcf07bSBram Moolenaar  w! Xtest
27272fcf07bSBram Moolenaar  call assert_equal("unix\nunix\n", s:file2str('Xtest'))
27372fcf07bSBram Moolenaar  bwipe! XXUnix
27472fcf07bSBram Moolenaar
27572fcf07bSBram Moolenaar  set nobinary ff& ffs&
27672fcf07bSBram Moolenaar
27772fcf07bSBram Moolenaar  " cleanup
27872fcf07bSBram Moolenaar  only
27972fcf07bSBram Moolenaar  %bwipe!
28072fcf07bSBram Moolenaar  call delete('XXUnix')
28172fcf07bSBram Moolenaar  call delete('XXDos')
28272fcf07bSBram Moolenaar  call delete('XXMac')
28372fcf07bSBram Moolenaar  call delete('XXEol')
28472fcf07bSBram Moolenaar  call delete('XXUxDs')
28572fcf07bSBram Moolenaar  call delete('XXUxMac')
28672fcf07bSBram Moolenaar  call delete('XXDosMac')
28772fcf07bSBram Moolenaar  call delete('XXMacEol')
28872fcf07bSBram Moolenaar  call delete('XXUxDsMc')
28972fcf07bSBram Moolenaar  call delete('Xtest')
29072fcf07bSBram Moolenaarendfunc
291f0cee197SBram Moolenaar
292f0cee197SBram Moolenaar" Test for changing the fileformat using ++read
293f0cee197SBram Moolenaarfunc Test_fileformat_plusplus_read()
294f0cee197SBram Moolenaar  new
295f0cee197SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
296f0cee197SBram Moolenaar  w ++ff=dos Xfile1
297f0cee197SBram Moolenaar  enew!
298a36c830aSBram Moolenaar  set ff=unix
29950434bd7SBram Moolenaar  " A :read doesn't change the fileformat, but does apply to the read lines.
300f0cee197SBram Moolenaar  r ++fileformat=unix Xfile1
301f0cee197SBram Moolenaar  call assert_equal('unix', &fileformat)
30250434bd7SBram Moolenaar  call assert_equal("three\r", getline('$'))
303f0cee197SBram Moolenaar  3r ++edit Xfile1
304f0cee197SBram Moolenaar  call assert_equal('dos', &fileformat)
305f0cee197SBram Moolenaar  close!
306f0cee197SBram Moolenaar  call delete('Xfile1')
307f0cee197SBram Moolenaar  set fileformat&
308f0cee197SBram Moolenaar  call assert_fails('e ++fileformat Xfile1', 'E474:')
309f0cee197SBram Moolenaar  call assert_fails('e ++ff=abc Xfile1', 'E474:')
310f0cee197SBram Moolenaar  call assert_fails('e ++abc1 Xfile1', 'E474:')
311f0cee197SBram Moolenaarendfunc
312f0cee197SBram Moolenaar
313*41a7f82dSYegappan Lakshmanan" When Vim starts up with an empty buffer the first item in 'fileformats' is
314*41a7f82dSYegappan Lakshmanan" used as the 'fileformat'.
315*41a7f82dSYegappan Lakshmananfunc Test_fileformat_on_startup()
316*41a7f82dSYegappan Lakshmanan  let after =<< trim END
317*41a7f82dSYegappan Lakshmanan    call writefile([&fileformat], 'Xfile', 'a')
318*41a7f82dSYegappan Lakshmanan    quit
319*41a7f82dSYegappan Lakshmanan  END
320*41a7f82dSYegappan Lakshmanan  call RunVim(["set ffs=dos,unix,mac"], after, '')
321*41a7f82dSYegappan Lakshmanan  call RunVim(["set ffs=mac,dos,unix"], after, '')
322*41a7f82dSYegappan Lakshmanan  call RunVim(["set ffs=unix,mac,dos"], after, '')
323*41a7f82dSYegappan Lakshmanan  call assert_equal(['dos', 'mac', 'unix'], readfile('Xfile'))
324*41a7f82dSYegappan Lakshmanan  call delete('Xfile')
325*41a7f82dSYegappan Lakshmananendfunc
326*41a7f82dSYegappan Lakshmanan
327f0cee197SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
328