1" Test for commands that operate on the spellfile. 2 3source shared.vim 4source check.vim 5 6CheckFeature spell 7CheckFeature syntax 8 9func Test_spell_normal() 10 new 11 call append(0, ['1 good', '2 goood', '3 goood']) 12 set spell spellfile=./Xspellfile.add spelllang=en 13 let oldlang=v:lang 14 lang C 15 16 " Test for zg 17 1 18 norm! ]s 19 call assert_equal('2 goood', getline('.')) 20 norm! zg 21 1 22 let a=execute('unsilent :norm! ]s') 23 call assert_equal('1 good', getline('.')) 24 call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) 25 let cnt=readfile('./Xspellfile.add') 26 call assert_equal('goood', cnt[0]) 27 28 " Test for zw 29 2 30 norm! $zw 31 1 32 norm! ]s 33 call assert_equal('2 goood', getline('.')) 34 let cnt=readfile('./Xspellfile.add') 35 call assert_equal('#oood', cnt[0]) 36 call assert_equal('goood/!', cnt[1]) 37 38 " Test for :spellrare 39 spellrare rare 40 let cnt=readfile('./Xspellfile.add') 41 call assert_equal(['#oood', 'goood/!', 'rare/?'], cnt) 42 43 " Make sure :spellundo works for rare words. 44 spellundo rare 45 let cnt=readfile('./Xspellfile.add') 46 call assert_equal(['#oood', 'goood/!', '#are/?'], cnt) 47 48 " Test for zg in visual mode 49 let a=execute('unsilent :norm! V$zg') 50 call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 51 1 52 norm! ]s 53 call assert_equal('3 goood', getline('.')) 54 let cnt=readfile('./Xspellfile.add') 55 call assert_equal('2 goood', cnt[3]) 56 " Remove "2 good" from spellfile 57 2 58 let a=execute('unsilent norm! V$zw') 59 call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 60 let cnt=readfile('./Xspellfile.add') 61 call assert_equal('2 goood/!', cnt[4]) 62 63 " Test for zG 64 let a=execute('unsilent norm! V$zG') 65 call assert_match("Word '2 goood' added to .*", a) 66 let fname=matchstr(a, 'to\s\+\zs\f\+$') 67 let cnt=readfile(fname) 68 call assert_equal('2 goood', cnt[0]) 69 70 " Test for zW 71 let a=execute('unsilent norm! V$zW') 72 call assert_match("Word '2 goood' added to .*", a) 73 let cnt=readfile(fname) 74 call assert_equal('# goood', cnt[0]) 75 call assert_equal('2 goood/!', cnt[1]) 76 77 " Test for zuW 78 let a=execute('unsilent norm! V$zuW') 79 call assert_match("Word '2 goood' removed from .*", a) 80 let cnt=readfile(fname) 81 call assert_equal('# goood', cnt[0]) 82 call assert_equal('# goood/!', cnt[1]) 83 84 " Test for zuG 85 let a=execute('unsilent norm! $zG') 86 call assert_match("Word 'goood' added to .*", a) 87 let cnt=readfile(fname) 88 call assert_equal('# goood', cnt[0]) 89 call assert_equal('# goood/!', cnt[1]) 90 call assert_equal('goood', cnt[2]) 91 let a=execute('unsilent norm! $zuG') 92 let cnt=readfile(fname) 93 call assert_match("Word 'goood' removed from .*", a) 94 call assert_equal('# goood', cnt[0]) 95 call assert_equal('# goood/!', cnt[1]) 96 call assert_equal('#oood', cnt[2]) 97 " word not found in wordlist 98 let a=execute('unsilent norm! V$zuG') 99 let cnt=readfile(fname) 100 call assert_match("", a) 101 call assert_equal('# goood', cnt[0]) 102 call assert_equal('# goood/!', cnt[1]) 103 call assert_equal('#oood', cnt[2]) 104 105 " Test for zug 106 call delete('./Xspellfile.add') 107 2 108 let a=execute('unsilent norm! $zg') 109 let cnt=readfile('./Xspellfile.add') 110 call assert_equal('goood', cnt[0]) 111 let a=execute('unsilent norm! $zug') 112 call assert_match("Word 'goood' removed from \./Xspellfile.add", a) 113 let cnt=readfile('./Xspellfile.add') 114 call assert_equal('#oood', cnt[0]) 115 " word not in wordlist 116 let a=execute('unsilent norm! V$zug') 117 call assert_match('', a) 118 let cnt=readfile('./Xspellfile.add') 119 call assert_equal('#oood', cnt[0]) 120 121 " Test for zuw 122 call delete('./Xspellfile.add') 123 2 124 let a=execute('unsilent norm! Vzw') 125 let cnt=readfile('./Xspellfile.add') 126 call assert_equal('2 goood/!', cnt[0]) 127 let a=execute('unsilent norm! Vzuw') 128 call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) 129 let cnt=readfile('./Xspellfile.add') 130 call assert_equal('# goood/!', cnt[0]) 131 " word not in wordlist 132 let a=execute('unsilent norm! $zug') 133 call assert_match('', a) 134 let cnt=readfile('./Xspellfile.add') 135 call assert_equal('# goood/!', cnt[0]) 136 137 " add second entry to spellfile setting 138 set spellfile=./Xspellfile.add,./Xspellfile2.add 139 call delete('./Xspellfile.add') 140 2 141 let a=execute('unsilent norm! $2zg') 142 let cnt=readfile('./Xspellfile2.add') 143 call assert_match("Word 'goood' added to ./Xspellfile2.add", a) 144 call assert_equal('goood', cnt[0]) 145 146 " Test for :spellgood! 147 let temp = execute(':spe!0/0') 148 call assert_match('Invalid region', temp) 149 let spellfile = matchstr(temp, 'Invalid region nr in \zs.*\ze line \d: 0') 150 call assert_equal(['# goood', '# goood/!', '#oood', '0/0'], readfile(spellfile)) 151 152 " Test for :spellrare! 153 :spellrare! raare 154 call assert_equal(['# goood', '# goood/!', '#oood', '0/0', 'raare/?'], readfile(spellfile)) 155 call delete(spellfile) 156 157 " clean up 158 exe "lang" oldlang 159 call delete("./Xspellfile.add") 160 call delete("./Xspellfile2.add") 161 call delete("./Xspellfile.add.spl") 162 call delete("./Xspellfile2.add.spl") 163 164 " zux -> no-op 165 2 166 norm! $zux 167 call assert_equal([], glob('Xspellfile.add',0,1)) 168 call assert_equal([], glob('Xspellfile2.add',0,1)) 169 170 set spellfile= spell& spelllang& 171 bw! 172endfunc 173 174" Test for spell file format errors 175func Test_spellfile_format_error() 176 let save_rtp = &rtp 177 call mkdir('Xtest/spell', 'p') 178 179 " empty spell file 180 call writefile([], './Xtest/spell/Xtest.utf-8.spl') 181 set runtimepath=./Xtest 182 set spelllang=Xtest 183 call assert_fails('set spell', 'E757:') 184 set nospell spelllang& 185 186 " invalid file ID 187 call writefile(['vim'], './Xtest/spell/Xtest.utf-8.spl') 188 set runtimepath=./Xtest 189 set spelllang=Xtest 190 call assert_fails('set spell', 'E757:') 191 set nospell spelllang& 192 193 " missing version number 194 call writefile(['VIMspell'], './Xtest/spell/Xtest.utf-8.spl') 195 set runtimepath=./Xtest 196 set spelllang=Xtest 197 call assert_fails('set spell', 'E771:') 198 set nospell spelllang& 199 200 " invalid version number 201 call writefile(['VIMspellz'], './Xtest/spell/Xtest.utf-8.spl') 202 set runtimepath=./Xtest 203 set spelllang=Xtest 204 call assert_fails('set spell', 'E772:') 205 set nospell spelllang& 206 207 " no sections 208 call writefile(0z56494D7370656C6C32, './Xtest/spell/Xtest.utf-8.spl', 'b') 209 set runtimepath=./Xtest 210 set spelllang=Xtest 211 call assert_fails('set spell', 'E758:') 212 set nospell spelllang& 213 214 " missing section length 215 call writefile(['VIMspell200'], './Xtest/spell/Xtest.utf-8.spl') 216 set runtimepath=./Xtest 217 set spelllang=Xtest 218 call assert_fails('set spell', 'E758:') 219 set nospell spelllang& 220 221 " unsupported required section 222 call writefile(['VIMspell2z' .. nr2char(1) .. ' ' .. nr2char(4)], 223 \ './Xtest/spell/Xtest.utf-8.spl') 224 set runtimepath=./Xtest 225 set spelllang=Xtest 226 call assert_fails('set spell', 'E770:') 227 set nospell spelllang& 228 229 " unsupported not-required section 230 call writefile(['VIMspell2z' .. nr2char(0) .. ' ' .. nr2char(4)], 231 \ './Xtest/spell/Xtest.utf-8.spl') 232 set runtimepath=./Xtest 233 set spelllang=Xtest 234 call assert_fails('set spell', 'E758:') 235 set nospell spelllang& 236 237 " SN_REGION: invalid number of region names 238 call writefile(0z56494D7370656C6C320000000000FF, 239 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 240 set runtimepath=./Xtest 241 set spelllang=Xtest 242 call assert_fails('set spell', 'E759:') 243 set nospell spelllang& 244 245 " SN_CHARFLAGS: missing <charflagslen> length 246 call writefile(0z56494D7370656C6C32010000000004, 247 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 248 set runtimepath=./Xtest 249 set spelllang=Xtest 250 call assert_fails('set spell', 'E758:') 251 set nospell spelllang& 252 253 " SN_CHARFLAGS: invalid <charflagslen> length 254 call writefile(0z56494D7370656C6C320100000000010201, 255 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 256 set runtimepath=./Xtest 257 set spelllang=Xtest 258 set spell 259 " FIXME: There are no error messages. How to check for the test result? 260 set nospell spelllang& 261 262 " SN_CHARFLAGS: charflagslen == 0 and folcharslen != 0 263 call writefile(0z56494D7370656C6C3201000000000400000101, 264 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 265 set runtimepath=./Xtest 266 set spelllang=Xtest 267 call assert_fails('set spell', 'E759:') 268 set nospell spelllang& 269 270 " SN_CHARFLAGS: missing <folcharslen> length 271 call writefile(0z56494D7370656C6C3201000000000100, 272 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 273 set runtimepath=./Xtest 274 set spelllang=Xtest 275 call assert_fails('set spell', 'E758:') 276 set nospell spelllang& 277 278 " SN_PREFCOND: invalid prefcondcnt 279 call writefile(0z56494D7370656C6C3203000000000100, 280 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 281 set runtimepath=./Xtest 282 set spelllang=Xtest 283 call assert_fails('set spell', 'E759:') 284 set nospell spelllang& 285 286 " SN_PREFCOND: invalid condlen 287 call writefile(0z56494D7370656C6C320300000000020001, 288 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 289 set runtimepath=./Xtest 290 set spelllang=Xtest 291 call assert_fails('set spell', 'E759:') 292 set nospell spelllang& 293 294 " SN_REP: invalid repcount 295 call writefile(0z56494D7370656C6C3204000000000100, 296 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 297 set runtimepath=./Xtest 298 set spelllang=Xtest 299 call assert_fails('set spell', 'E758:') 300 set nospell spelllang& 301 302 " SN_REP: missing rep 303 call writefile(0z56494D7370656C6C320400000000020004, 304 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 305 set runtimepath=./Xtest 306 set spelllang=Xtest 307 call assert_fails('set spell', 'E758:') 308 set nospell spelllang& 309 310 " SN_REP: zero repfromlen 311 call writefile(0z56494D7370656C6C32040000000003000100, 312 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 313 set runtimepath=./Xtest 314 set spelllang=Xtest 315 call assert_fails('set spell', 'E759:') 316 set nospell spelllang& 317 318 " SN_REP: invalid reptolen 319 call writefile(0z56494D7370656C6C320400000000050001014101, 320 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 321 set runtimepath=./Xtest 322 set spelllang=Xtest 323 " FIXME: There are no error messages. How to check for the test result? 324 set spell 325 set nospell spelllang& 326 327 " SN_REP: zero reptolen 328 call writefile(0z56494D7370656C6C320400000000050001014100, 329 \ './Xtest/spell/Xtest.utf-8.spl', 'b') 330 set runtimepath=./Xtest 331 set spelllang=Xtest 332 call assert_fails('set spell', 'E759:') 333 set nospell spelllang& 334 335 let &rtp = save_rtp 336 call delete('Xtest', 'rf') 337endfunc 338 339" vim: shiftwidth=2 sts=2 expandtab 340