1" Test for 'fileformat' 2 3source shared.vim 4 5" Test behavior of fileformat after bwipeout of last buffer 6func Test_fileformat_after_bw() 7 bwipeout 8 set fileformat& 9 if &fileformat == 'dos' 10 let test_fileformats = 'unix' 11 elseif &fileformat == 'unix' 12 let test_fileformats = 'mac' 13 else " must be mac 14 let test_fileformats = 'dos' 15 endif 16 exec 'set fileformats='.test_fileformats 17 bwipeout! 18 call assert_equal(test_fileformats, &fileformat) 19 set fileformats& 20endfunc 21 22func Test_fileformat_autocommand() 23 let filecnt = ["", "foobar\<CR>", "eins\<CR>", "\<CR>", "zwei\<CR>", "drei", "vier", "fünf", ""] 24 let ffs = &ffs 25 call writefile(filecnt, 'Xfile', 'b') 26 au BufReadPre Xfile set ffs=dos ff=dos 27 new Xfile 28 call assert_equal('dos', &l:ff) 29 call assert_equal('dos', &ffs) 30 31 " cleanup 32 call delete('Xfile') 33 let &ffs = ffs 34 au! BufReadPre Xfile 35 bw! 36endfunc 37 38func Test_fileformat_nomodifiable() 39 new 40 setlocal nomodifiable 41 42 call assert_fails('set fileformat=latin1', 'E21:') 43 44 bw 45endfunc 46 47" Convert the contents of a file into a literal string 48func s:file2str(fname) 49 let b = readfile(a:fname, 'B') 50 let s = '' 51 for c in b 52 let s .= nr2char(c) 53 endfor 54 return s 55endfunc 56 57" Concatenate the contents of files 'f1' and 'f2' and create 'destfile' 58func s:concat_files(f1, f2, destfile) 59 let b1 = readfile(a:f1, 'B') 60 let b2 = readfile(a:f2, 'B') 61 let b3 = b1 + b2 62 call writefile(b3, a:destfile, 'B') 63endfun 64 65" Test for a lot of variations of the 'fileformats' option 66func Test_fileformats() 67 " create three test files, one in each format 68 call writefile(['unix', 'unix'], 'XXUnix') 69 call writefile(["dos\r", "dos\r"], 'XXDos') 70 call writefile(["mac\rmac\r"], 'XXMac', 'b') 71 " create a file with no End Of Line 72 call writefile(["noeol"], 'XXEol', 'b') 73 " create mixed format files 74 call s:concat_files('XXUnix', 'XXDos', 'XXUxDs') 75 call s:concat_files('XXUnix', 'XXMac', 'XXUxMac') 76 call s:concat_files('XXDos', 'XXMac', 'XXDosMac') 77 call s:concat_files('XXMac', 'XXEol', 'XXMacEol') 78 call s:concat_files('XXUxDs', 'XXMac', 'XXUxDsMc') 79 80 new 81 82 " Test 1: try reading and writing with 'fileformats' empty 83 set fileformats= 84 85 " try with 'fileformat' set to 'unix' 86 set fileformat=unix 87 e! XXUnix 88 w! Xtest 89 call assert_equal("unix\nunix\n", s:file2str('Xtest')) 90 e! XXDos 91 w! Xtest 92 call assert_equal("dos\r\ndos\r\n", s:file2str('Xtest')) 93 e! XXMac 94 w! Xtest 95 call assert_equal("mac\rmac\r\n", s:file2str('Xtest')) 96 bwipe XXUnix XXDos XXMac 97 98 " try with 'fileformat' set to 'dos' 99 set fileformat=dos 100 e! XXUnix 101 w! Xtest 102 call assert_equal("unix\r\nunix\r\n", s:file2str('Xtest')) 103 e! XXDos 104 w! Xtest 105 call assert_equal("dos\r\ndos\r\n", s:file2str('Xtest')) 106 e! XXMac 107 w! Xtest 108 call assert_equal("mac\rmac\r\r\n", s:file2str('Xtest')) 109 bwipe XXUnix XXDos XXMac 110 111 " try with 'fileformat' set to 'mac' 112 set fileformat=mac 113 e! XXUnix 114 w! Xtest 115 call assert_equal("unix\nunix\n\r", s:file2str('Xtest')) 116 e! XXDos 117 w! Xtest 118 call assert_equal("dos\r\ndos\r\n\r", s:file2str('Xtest')) 119 e! XXMac 120 w! Xtest 121 call assert_equal("mac\rmac\r", s:file2str('Xtest')) 122 bwipe XXUnix XXDos XXMac 123 124 " Test 2: try reading and writing with 'fileformats' set to one format 125 126 " try with 'fileformats' set to 'unix' 127 set fileformats=unix 128 e! XXUxDsMc 129 w! Xtest 130 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n", 131 \ s:file2str('Xtest')) 132 bwipe XXUxDsMc 133 134 " try with 'fileformats' set to 'dos' 135 set fileformats=dos 136 e! XXUxDsMc 137 w! Xtest 138 call assert_equal("unix\r\nunix\r\ndos\r\ndos\r\nmac\rmac\r\r\n", 139 \ s:file2str('Xtest')) 140 bwipe XXUxDsMc 141 142 " try with 'fileformats' set to 'mac' 143 set fileformats=mac 144 e! XXUxDsMc 145 w! Xtest 146 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r", 147 \ s:file2str('Xtest')) 148 bwipe XXUxDsMc 149 150 " Test 3: try reading and writing with 'fileformats' set to two formats 151 152 " try with 'fileformats' set to 'unix,dos' 153 set fileformats=unix,dos 154 e! XXUxDsMc 155 w! Xtest 156 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n", 157 \ s:file2str('Xtest')) 158 bwipe XXUxDsMc 159 160 e! XXUxMac 161 w! Xtest 162 call assert_equal("unix\nunix\nmac\rmac\r\n", s:file2str('Xtest')) 163 bwipe XXUxMac 164 165 e! XXDosMac 166 w! Xtest 167 call assert_equal("dos\r\ndos\r\nmac\rmac\r\r\n", s:file2str('Xtest')) 168 bwipe XXDosMac 169 170 " try with 'fileformats' set to 'unix,mac' 171 set fileformats=unix,mac 172 e! XXUxDs 173 w! Xtest 174 call assert_equal("unix\nunix\ndos\r\ndos\r\n", s:file2str('Xtest')) 175 bwipe XXUxDs 176 177 e! XXUxDsMc 178 w! Xtest 179 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n", 180 \ s:file2str('Xtest')) 181 bwipe XXUxDsMc 182 183 e! XXDosMac 184 w! Xtest 185 call assert_equal("dos\r\ndos\r\nmac\rmac\r", s:file2str('Xtest')) 186 bwipe XXDosMac 187 188 e! XXEol 189 exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>" 190 w! Xtest 191 call assert_equal("unix,mac:unix\nnoeol\n", s:file2str('Xtest')) 192 bwipe! XXEol 193 194 " try with 'fileformats' set to 'dos,mac' 195 set fileformats=dos,mac 196 e! XXUxDs 197 w! Xtest 198 call assert_equal("unix\r\nunix\r\ndos\r\ndos\r\n", s:file2str('Xtest')) 199 bwipe XXUxDs 200 201 e! XXUxMac 202 exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>" 203 w! Xtest 204 call assert_equal("dos,mac:dos\r\nunix\r\nunix\r\nmac\rmac\r\r\n", 205 \ s:file2str('Xtest')) 206 bwipe! XXUxMac 207 208 e! XXUxDsMc 209 w! Xtest 210 call assert_equal("unix\r\nunix\r\ndos\r\ndos\r\nmac\rmac\r\r\n", 211 \ s:file2str('Xtest')) 212 bwipe XXUxDsMc 213 214 e! XXMacEol 215 exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>" 216 w! Xtest 217 call assert_equal("dos,mac:mac\rmac\rmac\rnoeol\r", s:file2str('Xtest')) 218 bwipe! XXMacEol 219 220 " Test 4: try reading and writing with 'fileformats' set to three formats 221 set fileformats=unix,dos,mac 222 e! XXUxDsMc 223 w! Xtest 224 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n", 225 \ s:file2str('Xtest')) 226 bwipe XXUxDsMc 227 228 e! XXEol 229 exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>" 230 w! Xtest 231 call assert_equal("unix,dos,mac:unix\nnoeol\n", s:file2str('Xtest')) 232 bwipe! XXEol 233 234 set fileformats=mac,dos,unix 235 e! XXUxDsMc 236 w! Xtest 237 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r\n", 238 \ s:file2str('Xtest')) 239 bwipe XXUxDsMc 240 241 e! XXEol 242 exe "normal ggO\<C-R>=&ffs\<CR>:\<C-R>=&ff\<CR>" 243 w! Xtest 244 call assert_equal("mac,dos,unix:mac\rnoeol\r", s:file2str('Xtest')) 245 bwipe! XXEol 246 247 " Test 5: try with 'binary' set 248 set fileformats=mac,unix,dos 249 set binary 250 e! XXUxDsMc 251 w! Xtest 252 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r", 253 \ s:file2str('Xtest')) 254 bwipe XXUxDsMc 255 256 set fileformats=mac 257 e! XXUxDsMc 258 w! Xtest 259 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r", 260 \ s:file2str('Xtest')) 261 bwipe XXUxDsMc 262 263 set fileformats=dos 264 e! XXUxDsMc 265 w! Xtest 266 call assert_equal("unix\nunix\ndos\r\ndos\r\nmac\rmac\r", 267 \ s:file2str('Xtest')) 268 bwipe XXUxDsMc 269 270 e! XXUnix 271 w! Xtest 272 call assert_equal("unix\nunix\n", s:file2str('Xtest')) 273 bwipe! XXUnix 274 275 set nobinary ff& ffs& 276 277 " cleanup 278 only 279 %bwipe! 280 call delete('XXUnix') 281 call delete('XXDos') 282 call delete('XXMac') 283 call delete('XXEol') 284 call delete('XXUxDs') 285 call delete('XXUxMac') 286 call delete('XXDosMac') 287 call delete('XXMacEol') 288 call delete('XXUxDsMc') 289 call delete('Xtest') 290endfunc 291 292" Test for changing the fileformat using ++read 293func Test_fileformat_plusplus_read() 294 new 295 call setline(1, ['one', 'two', 'three']) 296 w ++ff=dos Xfile1 297 enew! 298 set ff=unix 299 " A :read doesn't change the fileformat, but does apply to the read lines. 300 r ++fileformat=unix Xfile1 301 call assert_equal('unix', &fileformat) 302 call assert_equal("three\r", getline('$')) 303 3r ++edit Xfile1 304 call assert_equal('dos', &fileformat) 305 close! 306 call delete('Xfile1') 307 set fileformat& 308 call assert_fails('e ++fileformat Xfile1', 'E474:') 309 call assert_fails('e ++ff=abc Xfile1', 'E474:') 310 call assert_fails('e ++abc1 Xfile1', 'E474:') 311endfunc 312 313" When Vim starts up with an empty buffer the first item in 'fileformats' is 314" used as the 'fileformat'. 315func Test_fileformat_on_startup() 316 let after =<< trim END 317 call writefile([&fileformat], 'Xfile', 'a') 318 quit 319 END 320 call RunVim(["set ffs=dos,unix,mac"], after, '') 321 call RunVim(["set ffs=mac,dos,unix"], after, '') 322 call RunVim(["set ffs=unix,mac,dos"], after, '') 323 call assert_equal(['dos', 'mac', 'unix'], readfile('Xfile')) 324 call delete('Xfile') 325endfunc 326 327" vim: shiftwidth=2 sts=2 expandtab 328