diff src/testdir/test_spellfile.vim @ 17682:3dbff5d37520 v8.1.1838

patch 8.1.1838: there is :spellwrong and :spellgood but not :spellrare commit https://github.com/vim/vim/commit/08cc374dabd2a02785129fa1c0100f7745c244ad Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 11 22:51:14 2019 +0200 patch 8.1.1838: there is :spellwrong and :spellgood but not :spellrare Problem: There is :spellwrong and :spellgood but not :spellrare. Solution: Add :spellrare. (Martin Tournoij, closes https://github.com/vim/vim/issues/4291)
author Bram Moolenaar <Bram@vim.org>
date Sun, 11 Aug 2019 23:00:07 +0200
parents
children 08940efa6b4e
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_spellfile.vim
@@ -0,0 +1,172 @@
+" 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=
+  bw!
+endfunc