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=
171  bw!
172endfunc
173