Mercurial > vim
view src/testdir/test_spellfile.vim @ 21841:7a6ca887128d v8.2.1470
patch 8.2.1470: errors in spell file not tested
Commit: https://github.com/vim/vim/commit/c0f8823ee4ca629db5446ba0a935f68d4a4fb193
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Aug 16 21:51:49 2020 +0200
patch 8.2.1470: errors in spell file not tested
Problem: Errors in spell file not tested.
Solution: Add test for spell file errors. (Yegappan Lakshmanan,
closes #6721)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 16 Aug 2020 22:00:03 +0200 |
parents | 08940efa6b4e |
children | 776c76599617 |
line wrap: on
line source
" Test for commands that operate on the spellfile. source shared.vim source check.vim CheckFeature spell CheckFeature syntax func Test_spell_normal() new call append(0, ['1 good', '2 goood', '3 goood']) set spell spellfile=./Xspellfile.add spelllang=en let oldlang=v:lang lang C " Test for zg 1 norm! ]s call assert_equal('2 goood', getline('.')) norm! zg 1 let a=execute('unsilent :norm! ]s') call assert_equal('1 good', getline('.')) call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) let cnt=readfile('./Xspellfile.add') call assert_equal('goood', cnt[0]) " Test for zw 2 norm! $zw 1 norm! ]s call assert_equal('2 goood', getline('.')) let cnt=readfile('./Xspellfile.add') call assert_equal('#oood', cnt[0]) call assert_equal('goood/!', cnt[1]) " Test for :spellrare spellrare rare let cnt=readfile('./Xspellfile.add') call assert_equal(['#oood', 'goood/!', 'rare/?'], cnt) " Make sure :spellundo works for rare words. spellundo rare let cnt=readfile('./Xspellfile.add') call assert_equal(['#oood', 'goood/!', '#are/?'], cnt) " Test for zg in visual mode let a=execute('unsilent :norm! V$zg') call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 1 norm! ]s call assert_equal('3 goood', getline('.')) let cnt=readfile('./Xspellfile.add') call assert_equal('2 goood', cnt[3]) " Remove "2 good" from spellfile 2 let a=execute('unsilent norm! V$zw') call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) let cnt=readfile('./Xspellfile.add') call assert_equal('2 goood/!', cnt[4]) " Test for zG let a=execute('unsilent norm! V$zG') call assert_match("Word '2 goood' added to .*", a) let fname=matchstr(a, 'to\s\+\zs\f\+$') let cnt=readfile(fname) call assert_equal('2 goood', cnt[0]) " Test for zW let a=execute('unsilent norm! V$zW') call assert_match("Word '2 goood' added to .*", a) let cnt=readfile(fname) call assert_equal('# goood', cnt[0]) call assert_equal('2 goood/!', cnt[1]) " Test for zuW let a=execute('unsilent norm! V$zuW') call assert_match("Word '2 goood' removed from .*", a) let cnt=readfile(fname) call assert_equal('# goood', cnt[0]) call assert_equal('# goood/!', cnt[1]) " Test for zuG let a=execute('unsilent norm! $zG') call assert_match("Word 'goood' added to .*", a) let cnt=readfile(fname) call assert_equal('# goood', cnt[0]) call assert_equal('# goood/!', cnt[1]) call assert_equal('goood', cnt[2]) let a=execute('unsilent norm! $zuG') let cnt=readfile(fname) call assert_match("Word 'goood' removed from .*", a) call assert_equal('# goood', cnt[0]) call assert_equal('# goood/!', cnt[1]) call assert_equal('#oood', cnt[2]) " word not found in wordlist let a=execute('unsilent norm! V$zuG') let cnt=readfile(fname) call assert_match("", a) call assert_equal('# goood', cnt[0]) call assert_equal('# goood/!', cnt[1]) call assert_equal('#oood', cnt[2]) " Test for zug call delete('./Xspellfile.add') 2 let a=execute('unsilent norm! $zg') let cnt=readfile('./Xspellfile.add') call assert_equal('goood', cnt[0]) let a=execute('unsilent norm! $zug') call assert_match("Word 'goood' removed from \./Xspellfile.add", a) let cnt=readfile('./Xspellfile.add') call assert_equal('#oood', cnt[0]) " word not in wordlist let a=execute('unsilent norm! V$zug') call assert_match('', a) let cnt=readfile('./Xspellfile.add') call assert_equal('#oood', cnt[0]) " Test for zuw call delete('./Xspellfile.add') 2 let a=execute('unsilent norm! Vzw') let cnt=readfile('./Xspellfile.add') call assert_equal('2 goood/!', cnt[0]) let a=execute('unsilent norm! Vzuw') call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) let cnt=readfile('./Xspellfile.add') call assert_equal('# goood/!', cnt[0]) " word not in wordlist let a=execute('unsilent norm! $zug') call assert_match('', a) let cnt=readfile('./Xspellfile.add') call assert_equal('# goood/!', cnt[0]) " add second entry to spellfile setting set spellfile=./Xspellfile.add,./Xspellfile2.add call delete('./Xspellfile.add') 2 let a=execute('unsilent norm! $2zg') let cnt=readfile('./Xspellfile2.add') call assert_match("Word 'goood' added to ./Xspellfile2.add", a) call assert_equal('goood', cnt[0]) " Test for :spellgood! let temp = execute(':spe!0/0') call assert_match('Invalid region', temp) let spellfile = matchstr(temp, 'Invalid region nr in \zs.*\ze line \d: 0') call assert_equal(['# goood', '# goood/!', '#oood', '0/0'], readfile(spellfile)) " Test for :spellrare! :spellrare! raare call assert_equal(['# goood', '# goood/!', '#oood', '0/0', 'raare/?'], readfile(spellfile)) call delete(spellfile) " clean up exe "lang" oldlang call delete("./Xspellfile.add") call delete("./Xspellfile2.add") call delete("./Xspellfile.add.spl") call delete("./Xspellfile2.add.spl") " zux -> no-op 2 norm! $zux call assert_equal([], glob('Xspellfile.add',0,1)) call assert_equal([], glob('Xspellfile2.add',0,1)) set spellfile= spell& spelllang& bw! endfunc " Test for spell file format errors func Test_spellfile_format_error() let save_rtp = &rtp call mkdir('Xtest/spell', 'p') " empty spell file call writefile([], './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E757:') set nospell spelllang& " invalid file ID call writefile(['vim'], './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E757:') set nospell spelllang& " missing version number call writefile(['VIMspell'], './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E771:') set nospell spelllang& " invalid version number call writefile(['VIMspellz'], './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E772:') set nospell spelllang& " no sections call writefile(0z56494D7370656C6C32, './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " missing section length call writefile(['VIMspell200'], './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " unsupported required section call writefile(['VIMspell2z' .. nr2char(1) .. ' ' .. nr2char(4)], \ './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E770:') set nospell spelllang& " unsupported not-required section call writefile(['VIMspell2z' .. nr2char(0) .. ' ' .. nr2char(4)], \ './Xtest/spell/Xtest.utf-8.spl') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " SN_REGION: invalid number of region names call writefile(0z56494D7370656C6C320000000000FF, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E759:') set nospell spelllang& " SN_CHARFLAGS: missing <charflagslen> length call writefile(0z56494D7370656C6C32010000000004, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " SN_CHARFLAGS: invalid <charflagslen> length call writefile(0z56494D7370656C6C320100000000010201, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest set spell " FIXME: There are no error messages. How to check for the test result? set nospell spelllang& " SN_CHARFLAGS: charflagslen == 0 and folcharslen != 0 call writefile(0z56494D7370656C6C3201000000000400000101, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E759:') set nospell spelllang& " SN_CHARFLAGS: missing <folcharslen> length call writefile(0z56494D7370656C6C3201000000000100, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " SN_PREFCOND: invalid prefcondcnt call writefile(0z56494D7370656C6C3203000000000100, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E759:') set nospell spelllang& " SN_PREFCOND: invalid condlen call writefile(0z56494D7370656C6C320300000000020001, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E759:') set nospell spelllang& " SN_REP: invalid repcount call writefile(0z56494D7370656C6C3204000000000100, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " SN_REP: missing rep call writefile(0z56494D7370656C6C320400000000020004, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E758:') set nospell spelllang& " SN_REP: zero repfromlen call writefile(0z56494D7370656C6C32040000000003000100, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E759:') set nospell spelllang& " SN_REP: invalid reptolen call writefile(0z56494D7370656C6C320400000000050001014101, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest " FIXME: There are no error messages. How to check for the test result? set spell set nospell spelllang& " SN_REP: zero reptolen call writefile(0z56494D7370656C6C320400000000050001014100, \ './Xtest/spell/Xtest.utf-8.spl', 'b') set runtimepath=./Xtest set spelllang=Xtest call assert_fails('set spell', 'E759:') set nospell spelllang& let &rtp = save_rtp call delete('Xtest', 'rf') endfunc " vim: shiftwidth=2 sts=2 expandtab