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