1aa970abdSBram Moolenaar" Test for spell checking with 'encoding' set to utf-8
2aa970abdSBram Moolenaar
3aa970abdSBram Moolenaarsource check.vim
4aa970abdSBram MoolenaarCheckFeature spell
5aa970abdSBram Moolenaar
6aa970abdSBram Moolenaarscriptencoding utf-8
7aa970abdSBram Moolenaar
8aa970abdSBram Moolenaarfunc TearDown()
9aa970abdSBram Moolenaar  set nospell
10aa970abdSBram Moolenaar  call delete('Xtest.aff')
11aa970abdSBram Moolenaar  call delete('Xtest.dic')
12aa970abdSBram Moolenaar  call delete('Xtest.utf-8.add')
13aa970abdSBram Moolenaar  call delete('Xtest.utf-8.add.spl')
14aa970abdSBram Moolenaar  call delete('Xtest.utf-8.spl')
15aa970abdSBram Moolenaar  call delete('Xtest.utf-8.sug')
16aa970abdSBram Moolenaarendfunc
17aa970abdSBram Moolenaar
18aa970abdSBram Moolenaarlet g:test_data_aff1 = [
19aa970abdSBram Moolenaar      \"SET ISO8859-1",
20aa970abdSBram Moolenaar      \"TRY esianrtolcdugmphbyfvkwjkqxz-ëéèêïîäàâöüû'ESIANRTOLCDUGMPHBYFVKWJKQXZ",
21aa970abdSBram Moolenaar      \"",
22aa970abdSBram Moolenaar      \"FOL  àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ",
23aa970abdSBram Moolenaar      \"LOW  àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ",
24aa970abdSBram Moolenaar      \"UPP  ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßÿ",
25aa970abdSBram Moolenaar      \"",
26aa970abdSBram Moolenaar      \"SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xBF",
27aa970abdSBram Moolenaar      \"SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?",
28aa970abdSBram Moolenaar      \"",
29aa970abdSBram Moolenaar      \"MIDWORD\t'-",
30aa970abdSBram Moolenaar      \"",
31aa970abdSBram Moolenaar      \"KEP =",
32aa970abdSBram Moolenaar      \"RAR ?",
33aa970abdSBram Moolenaar      \"BAD !",
34aa970abdSBram Moolenaar      \"",
35aa970abdSBram Moolenaar      \"PFX I N 1",
36aa970abdSBram Moolenaar      \"PFX I 0 in .",
37aa970abdSBram Moolenaar      \"",
38aa970abdSBram Moolenaar      \"PFX O Y 1",
39aa970abdSBram Moolenaar      \"PFX O 0 out .",
40aa970abdSBram Moolenaar      \"",
41aa970abdSBram Moolenaar      \"SFX S Y 2",
42aa970abdSBram Moolenaar      \"SFX S 0 s [^s]",
43aa970abdSBram Moolenaar      \"SFX S 0 es s",
44aa970abdSBram Moolenaar      \"",
45aa970abdSBram Moolenaar      \"SFX N N 3",
46aa970abdSBram Moolenaar      \"SFX N 0 en [^n]",
47aa970abdSBram Moolenaar      \"SFX N 0 nen n",
48aa970abdSBram Moolenaar      \"SFX N 0 n .",
49aa970abdSBram Moolenaar      \"",
50aa970abdSBram Moolenaar      \"REP 3",
51aa970abdSBram Moolenaar      \"REP g ch",
52aa970abdSBram Moolenaar      \"REP ch g",
53aa970abdSBram Moolenaar      \"REP svp s.v.p.",
54aa970abdSBram Moolenaar      \"",
55aa970abdSBram Moolenaar      \"MAP 9",
56aa970abdSBram Moolenaar      \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5",
57aa970abdSBram Moolenaar      \"MAP e\xE8\xE9\xEA\xEB",
58aa970abdSBram Moolenaar      \"MAP i\xEC\xED\xEE\xEF",
59aa970abdSBram Moolenaar      \"MAP o\xF2\xF3\xF4\xF5\xF6",
60aa970abdSBram Moolenaar      \"MAP u\xF9\xFA\xFB\xFC",
61aa970abdSBram Moolenaar      \"MAP n\xF1",
62aa970abdSBram Moolenaar      \"MAP c\xE7",
63aa970abdSBram Moolenaar      \"MAP y\xFF\xFD",
64aa970abdSBram Moolenaar      \"MAP s\xDF"
65aa970abdSBram Moolenaar      \ ]
66aa970abdSBram Moolenaarlet g:test_data_dic1 = [
67aa970abdSBram Moolenaar      \"123456",
68aa970abdSBram Moolenaar      \"test/NO",
69aa970abdSBram Moolenaar      \"# comment",
70aa970abdSBram Moolenaar      \"wrong",
71aa970abdSBram Moolenaar      \"Comment",
72aa970abdSBram Moolenaar      \"OK",
73aa970abdSBram Moolenaar      \"uk",
74aa970abdSBram Moolenaar      \"put/ISO",
75aa970abdSBram Moolenaar      \"the end",
76aa970abdSBram Moolenaar      \"deol",
77aa970abdSBram Moolenaar      \"d\xE9\xF4r",
78aa970abdSBram Moolenaar      \ ]
79aa970abdSBram Moolenaarlet g:test_data_aff2 = [
80aa970abdSBram Moolenaar      \"SET ISO8859-1",
81aa970abdSBram Moolenaar      \"",
82aa970abdSBram Moolenaar      \"FOL  \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF",
83aa970abdSBram Moolenaar      \"LOW  \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF",
84aa970abdSBram Moolenaar      \"UPP  \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF",
85aa970abdSBram Moolenaar      \"",
86aa970abdSBram Moolenaar      \"PFXPOSTPONE",
87aa970abdSBram Moolenaar      \"",
88aa970abdSBram Moolenaar      \"MIDWORD\t'-",
89aa970abdSBram Moolenaar      \"",
90aa970abdSBram Moolenaar      \"KEP =",
91aa970abdSBram Moolenaar      \"RAR ?",
92aa970abdSBram Moolenaar      \"BAD !",
93aa970abdSBram Moolenaar      \"",
94aa970abdSBram Moolenaar      \"PFX I N 1",
95aa970abdSBram Moolenaar      \"PFX I 0 in .",
96aa970abdSBram Moolenaar      \"",
97aa970abdSBram Moolenaar      \"PFX O Y 1",
98aa970abdSBram Moolenaar      \"PFX O 0 out [a-z]",
99aa970abdSBram Moolenaar      \"",
100aa970abdSBram Moolenaar      \"SFX S Y 2",
101aa970abdSBram Moolenaar      \"SFX S 0 s [^s]",
102aa970abdSBram Moolenaar      \"SFX S 0 es s",
103aa970abdSBram Moolenaar      \"",
104aa970abdSBram Moolenaar      \"SFX N N 3",
105aa970abdSBram Moolenaar      \"SFX N 0 en [^n]",
106aa970abdSBram Moolenaar      \"SFX N 0 nen n",
107aa970abdSBram Moolenaar      \"SFX N 0 n .",
108aa970abdSBram Moolenaar      \"",
109aa970abdSBram Moolenaar      \"REP 3",
110aa970abdSBram Moolenaar      \"REP g ch",
111aa970abdSBram Moolenaar      \"REP ch g",
112aa970abdSBram Moolenaar      \"REP svp s.v.p.",
113aa970abdSBram Moolenaar      \"",
114aa970abdSBram Moolenaar      \"MAP 9",
115aa970abdSBram Moolenaar      \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5",
116aa970abdSBram Moolenaar      \"MAP e\xE8\xE9\xEA\xEB",
117aa970abdSBram Moolenaar      \"MAP i\xEC\xED\xEE\xEF",
118aa970abdSBram Moolenaar      \"MAP o\xF2\xF3\xF4\xF5\xF6",
119aa970abdSBram Moolenaar      \"MAP u\xF9\xFA\xFB\xFC",
120aa970abdSBram Moolenaar      \"MAP n\xF1",
121aa970abdSBram Moolenaar      \"MAP c\xE7",
122aa970abdSBram Moolenaar      \"MAP y\xFF\xFD",
123aa970abdSBram Moolenaar      \"MAP s\xDF",
124aa970abdSBram Moolenaar      \ ]
125aa970abdSBram Moolenaarlet g:test_data_aff3 = [
126aa970abdSBram Moolenaar      \"SET ISO8859-1",
127aa970abdSBram Moolenaar      \"",
128aa970abdSBram Moolenaar      \"COMPOUNDMIN 3",
129aa970abdSBram Moolenaar      \"COMPOUNDRULE m*",
130aa970abdSBram Moolenaar      \"NEEDCOMPOUND x",
131aa970abdSBram Moolenaar      \ ]
132aa970abdSBram Moolenaarlet g:test_data_dic3 = [
133aa970abdSBram Moolenaar      \"1234",
134aa970abdSBram Moolenaar      \"foo/m",
135aa970abdSBram Moolenaar      \"bar/mx",
136aa970abdSBram Moolenaar      \"m\xEF/m",
137aa970abdSBram Moolenaar      \"la/mx",
138aa970abdSBram Moolenaar      \ ]
139aa970abdSBram Moolenaarlet g:test_data_aff4 = [
140aa970abdSBram Moolenaar      \"SET ISO8859-1",
141aa970abdSBram Moolenaar      \"",
142aa970abdSBram Moolenaar      \"FOL  \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF",
143aa970abdSBram Moolenaar      \"LOW  \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF",
144aa970abdSBram Moolenaar      \"UPP  \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF",
145aa970abdSBram Moolenaar      \"",
146aa970abdSBram Moolenaar      \"COMPOUNDRULE m+",
147aa970abdSBram Moolenaar      \"COMPOUNDRULE sm*e",
148aa970abdSBram Moolenaar      \"COMPOUNDRULE sm+",
149aa970abdSBram Moolenaar      \"COMPOUNDMIN 3",
150aa970abdSBram Moolenaar      \"COMPOUNDWORDMAX 3",
151aa970abdSBram Moolenaar      \"COMPOUNDFORBIDFLAG t",
152aa970abdSBram Moolenaar      \"",
153aa970abdSBram Moolenaar      \"COMPOUNDSYLMAX 5",
154aa970abdSBram Moolenaar      \"SYLLABLE a\xE1e\xE9i\xEDo\xF3\xF6\xF5u\xFA\xFC\xFBy/aa/au/ea/ee/ei/ie/oa/oe/oo/ou/uu/ui",
155aa970abdSBram Moolenaar      \"",
156aa970abdSBram Moolenaar      \"MAP 9",
157aa970abdSBram Moolenaar      \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5",
158aa970abdSBram Moolenaar      \"MAP e\xE8\xE9\xEA\xEB",
159aa970abdSBram Moolenaar      \"MAP i\xEC\xED\xEE\xEF",
160aa970abdSBram Moolenaar      \"MAP o\xF2\xF3\xF4\xF5\xF6",
161aa970abdSBram Moolenaar      \"MAP u\xF9\xFA\xFB\xFC",
162aa970abdSBram Moolenaar      \"MAP n\xF1",
163aa970abdSBram Moolenaar      \"MAP c\xE7",
164aa970abdSBram Moolenaar      \"MAP y\xFF\xFD",
165aa970abdSBram Moolenaar      \"MAP s\xDF",
166aa970abdSBram Moolenaar      \"",
167aa970abdSBram Moolenaar      \"NEEDAFFIX x",
168aa970abdSBram Moolenaar      \"",
169aa970abdSBram Moolenaar      \"PFXPOSTPONE",
170aa970abdSBram Moolenaar      \"",
171aa970abdSBram Moolenaar      \"MIDWORD '-",
172aa970abdSBram Moolenaar      \"",
173aa970abdSBram Moolenaar      \"SFX q N 1",
174aa970abdSBram Moolenaar      \"SFX q   0    -ok .",
175aa970abdSBram Moolenaar      \"",
176aa970abdSBram Moolenaar      \"SFX a Y 2",
177aa970abdSBram Moolenaar      \"SFX a 0 s .",
178aa970abdSBram Moolenaar      \"SFX a 0 ize/t .",
179aa970abdSBram Moolenaar      \"",
180aa970abdSBram Moolenaar      \"PFX p N 1",
181aa970abdSBram Moolenaar      \"PFX p 0 pre .",
182aa970abdSBram Moolenaar      \"",
183aa970abdSBram Moolenaar      \"PFX P N 1",
184aa970abdSBram Moolenaar      \"PFX P 0 nou .",
185aa970abdSBram Moolenaar      \ ]
186aa970abdSBram Moolenaarlet g:test_data_dic4 = [
187aa970abdSBram Moolenaar      \"1234",
188aa970abdSBram Moolenaar      \"word/mP",
189aa970abdSBram Moolenaar      \"util/am",
190aa970abdSBram Moolenaar      \"pro/xq",
191aa970abdSBram Moolenaar      \"tomato/m",
192aa970abdSBram Moolenaar      \"bork/mp",
193aa970abdSBram Moolenaar      \"start/s",
194aa970abdSBram Moolenaar      \"end/e",
195aa970abdSBram Moolenaar      \ ]
196aa970abdSBram Moolenaarlet g:test_data_aff5 = [
197aa970abdSBram Moolenaar      \"SET ISO8859-1",
198aa970abdSBram Moolenaar      \"",
199aa970abdSBram Moolenaar      \"FLAG long",
200aa970abdSBram Moolenaar      \"",
201aa970abdSBram Moolenaar      \"NEEDAFFIX !!",
202aa970abdSBram Moolenaar      \"",
203aa970abdSBram Moolenaar      \"COMPOUNDRULE ssmm*ee",
204aa970abdSBram Moolenaar      \"",
205aa970abdSBram Moolenaar      \"NEEDCOMPOUND xx",
206aa970abdSBram Moolenaar      \"COMPOUNDPERMITFLAG pp",
207aa970abdSBram Moolenaar      \"",
208aa970abdSBram Moolenaar      \"SFX 13 Y 1",
209aa970abdSBram Moolenaar      \"SFX 13 0 bork .",
210aa970abdSBram Moolenaar      \"",
211aa970abdSBram Moolenaar      \"SFX a1 Y 1",
212aa970abdSBram Moolenaar      \"SFX a1 0 a1 .",
213aa970abdSBram Moolenaar      \"",
214aa970abdSBram Moolenaar      \"SFX a\xE9 Y 1",
215aa970abdSBram Moolenaar      \"SFX a\xE9 0 a\xE9 .",
216aa970abdSBram Moolenaar      \"",
217aa970abdSBram Moolenaar      \"PFX zz Y 1",
218aa970abdSBram Moolenaar      \"PFX zz 0 pre/pp .",
219aa970abdSBram Moolenaar      \"",
220aa970abdSBram Moolenaar      \"PFX yy Y 1",
221aa970abdSBram Moolenaar      \"PFX yy 0 nou .",
222aa970abdSBram Moolenaar      \ ]
223aa970abdSBram Moolenaarlet g:test_data_dic5 = [
224aa970abdSBram Moolenaar      \"1234",
225aa970abdSBram Moolenaar      \"foo/a1a\xE9!!",
226aa970abdSBram Moolenaar      \"bar/zz13ee",
227aa970abdSBram Moolenaar      \"start/ss",
228aa970abdSBram Moolenaar      \"end/eeyy",
229aa970abdSBram Moolenaar      \"middle/mmxx",
230aa970abdSBram Moolenaar      \ ]
231aa970abdSBram Moolenaarlet g:test_data_aff6 = [
232aa970abdSBram Moolenaar      \"SET ISO8859-1",
233aa970abdSBram Moolenaar      \"",
234aa970abdSBram Moolenaar      \"FLAG caplong",
235aa970abdSBram Moolenaar      \"",
236aa970abdSBram Moolenaar      \"NEEDAFFIX A!",
237aa970abdSBram Moolenaar      \"",
238aa970abdSBram Moolenaar      \"COMPOUNDRULE sMm*Ee",
239aa970abdSBram Moolenaar      \"",
240aa970abdSBram Moolenaar      \"NEEDCOMPOUND Xx",
241aa970abdSBram Moolenaar      \"",
242aa970abdSBram Moolenaar      \"COMPOUNDPERMITFLAG p",
243aa970abdSBram Moolenaar      \"",
244aa970abdSBram Moolenaar      \"SFX N3 Y 1",
245aa970abdSBram Moolenaar      \"SFX N3 0 bork .",
246aa970abdSBram Moolenaar      \"",
247aa970abdSBram Moolenaar      \"SFX A1 Y 1",
248aa970abdSBram Moolenaar      \"SFX A1 0 a1 .",
249aa970abdSBram Moolenaar      \"",
250aa970abdSBram Moolenaar      \"SFX A\xE9 Y 1",
251aa970abdSBram Moolenaar      \"SFX A\xE9 0 a\xE9 .",
252aa970abdSBram Moolenaar      \"",
253aa970abdSBram Moolenaar      \"PFX Zz Y 1",
254aa970abdSBram Moolenaar      \"PFX Zz 0 pre/p .",
255aa970abdSBram Moolenaar      \ ]
256aa970abdSBram Moolenaarlet g:test_data_dic6 = [
257aa970abdSBram Moolenaar      \"1234",
258aa970abdSBram Moolenaar      \"mee/A1A\xE9A!",
259aa970abdSBram Moolenaar      \"bar/ZzN3Ee",
260aa970abdSBram Moolenaar      \"lead/s",
261aa970abdSBram Moolenaar      \"end/Ee",
262aa970abdSBram Moolenaar      \"middle/MmXx",
263aa970abdSBram Moolenaar      \ ]
264aa970abdSBram Moolenaarlet g:test_data_aff7 = [
265aa970abdSBram Moolenaar      \"SET ISO8859-1",
266aa970abdSBram Moolenaar      \"",
267aa970abdSBram Moolenaar      \"FLAG num",
268aa970abdSBram Moolenaar      \"",
269aa970abdSBram Moolenaar      \"NEEDAFFIX 9999",
270aa970abdSBram Moolenaar      \"",
271aa970abdSBram Moolenaar      \"COMPOUNDRULE 2,77*123",
272aa970abdSBram Moolenaar      \"",
273aa970abdSBram Moolenaar      \"NEEDCOMPOUND 1",
274aa970abdSBram Moolenaar      \"COMPOUNDPERMITFLAG 432",
275aa970abdSBram Moolenaar      \"",
276aa970abdSBram Moolenaar      \"SFX 61003 Y 1",
277aa970abdSBram Moolenaar      \"SFX 61003 0 meat .",
278aa970abdSBram Moolenaar      \"",
279aa970abdSBram Moolenaar      \"SFX 0 Y 1",
280aa970abdSBram Moolenaar      \"SFX 0 0 zero .",
281aa970abdSBram Moolenaar      \"",
282aa970abdSBram Moolenaar      \"SFX 391 Y 1",
283aa970abdSBram Moolenaar      \"SFX 391 0 a1 .",
284aa970abdSBram Moolenaar      \"",
285aa970abdSBram Moolenaar      \"SFX 111 Y 1",
286aa970abdSBram Moolenaar      \"SFX 111 0 a\xE9 .",
287aa970abdSBram Moolenaar      \"",
288aa970abdSBram Moolenaar      \"PFX 17 Y 1",
289aa970abdSBram Moolenaar      \"PFX 17 0 pre/432 .",
290aa970abdSBram Moolenaar      \ ]
291aa970abdSBram Moolenaarlet g:test_data_dic7 = [
292aa970abdSBram Moolenaar      \"1234",
293aa970abdSBram Moolenaar      \"mee/0,391,111,9999",
294aa970abdSBram Moolenaar      \"bar/17,61003,123",
295aa970abdSBram Moolenaar      \"lead/2",
296aa970abdSBram Moolenaar      \"tail/123",
297aa970abdSBram Moolenaar      \"middle/77,1",
298aa970abdSBram Moolenaar      \ ]
299aa970abdSBram Moolenaarlet g:test_data_aff8 = [
300aa970abdSBram Moolenaar      \"SET ISO8859-1",
301aa970abdSBram Moolenaar      \"",
302aa970abdSBram Moolenaar      \"NOSPLITSUGS",
303aa970abdSBram Moolenaar      \ ]
304aa970abdSBram Moolenaarlet g:test_data_dic8 = [
305aa970abdSBram Moolenaar      \"1234",
306aa970abdSBram Moolenaar      \"foo",
307aa970abdSBram Moolenaar      \"bar",
308aa970abdSBram Moolenaar      \"faabar",
309aa970abdSBram Moolenaar      \ ]
310aa970abdSBram Moolenaarlet g:test_data_aff9 = [
311aa970abdSBram Moolenaar      \ ]
312aa970abdSBram Moolenaarlet g:test_data_dic9 = [
313aa970abdSBram Moolenaar      \"1234",
314aa970abdSBram Moolenaar      \"foo",
315aa970abdSBram Moolenaar      \"bar",
316aa970abdSBram Moolenaar      \ ]
317aa970abdSBram Moolenaarlet g:test_data_aff10 = [
318aa970abdSBram Moolenaar      \"COMPOUNDRULE se",
319aa970abdSBram Moolenaar      \"COMPOUNDPERMITFLAG p",
320aa970abdSBram Moolenaar      \"",
321aa970abdSBram Moolenaar      \"SFX A Y 1",
322aa970abdSBram Moolenaar      \"SFX A 0 able/Mp .",
323aa970abdSBram Moolenaar      \"",
324aa970abdSBram Moolenaar      \"SFX M Y 1",
325aa970abdSBram Moolenaar      \"SFX M 0 s .",
326aa970abdSBram Moolenaar      \ ]
327aa970abdSBram Moolenaarlet g:test_data_dic10 = [
328aa970abdSBram Moolenaar      \"1234",
329aa970abdSBram Moolenaar      \"drink/As",
330aa970abdSBram Moolenaar      \"table/e",
331aa970abdSBram Moolenaar      \ ]
332aa970abdSBram Moolenaarlet g:test_data_aff_sal = [
333aa970abdSBram Moolenaar      \"SET ISO8859-1",
334aa970abdSBram Moolenaar      \"TRY esianrtolcdugmphbyfvkwjkqxz-\xEB\xE9\xE8\xEA\xEF\xEE\xE4\xE0\xE2\xF6\xFC\xFB'ESIANRTOLCDUGMPHBYFVKWJKQXZ",
335aa970abdSBram Moolenaar      \"",
336aa970abdSBram Moolenaar      \"FOL  \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF",
337aa970abdSBram Moolenaar      \"LOW  \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF",
338aa970abdSBram Moolenaar      \"UPP  \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF",
339aa970abdSBram Moolenaar      \"",
340aa970abdSBram Moolenaar      \"MIDWORD\t'-",
341aa970abdSBram Moolenaar      \"",
342aa970abdSBram Moolenaar      \"KEP =",
343aa970abdSBram Moolenaar      \"RAR ?",
344aa970abdSBram Moolenaar      \"BAD !",
345aa970abdSBram Moolenaar      \"",
346aa970abdSBram Moolenaar      \"PFX I N 1",
347aa970abdSBram Moolenaar      \"PFX I 0 in .",
348aa970abdSBram Moolenaar      \"",
349aa970abdSBram Moolenaar      \"PFX O Y 1",
350aa970abdSBram Moolenaar      \"PFX O 0 out .",
351aa970abdSBram Moolenaar      \"",
352aa970abdSBram Moolenaar      \"SFX S Y 2",
353aa970abdSBram Moolenaar      \"SFX S 0 s [^s]",
354aa970abdSBram Moolenaar      \"SFX S 0 es s",
355aa970abdSBram Moolenaar      \"",
356aa970abdSBram Moolenaar      \"SFX N N 3",
357aa970abdSBram Moolenaar      \"SFX N 0 en [^n]",
358aa970abdSBram Moolenaar      \"SFX N 0 nen n",
359aa970abdSBram Moolenaar      \"SFX N 0 n .",
360aa970abdSBram Moolenaar      \"",
361aa970abdSBram Moolenaar      \"REP 3",
362aa970abdSBram Moolenaar      \"REP g ch",
363aa970abdSBram Moolenaar      \"REP ch g",
364aa970abdSBram Moolenaar      \"REP svp s.v.p.",
365aa970abdSBram Moolenaar      \"",
366aa970abdSBram Moolenaar      \"MAP 9",
367aa970abdSBram Moolenaar      \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5",
368aa970abdSBram Moolenaar      \"MAP e\xE8\xE9\xEA\xEB",
369aa970abdSBram Moolenaar      \"MAP i\xEC\xED\xEE\xEF",
370aa970abdSBram Moolenaar      \"MAP o\xF2\xF3\xF4\xF5\xF6",
371aa970abdSBram Moolenaar      \"MAP u\xF9\xFA\xFB\xFC",
372aa970abdSBram Moolenaar      \"MAP n\xF1",
373aa970abdSBram Moolenaar      \"MAP c\xE7",
374aa970abdSBram Moolenaar      \"MAP y\xFF\xFD",
375aa970abdSBram Moolenaar      \"MAP s\xDF",
376aa970abdSBram Moolenaar      \"",
377aa970abdSBram Moolenaar      \"SAL AH(AEIOUY)-^         *H",
378aa970abdSBram Moolenaar      \"SAL AR(AEIOUY)-^         *R",
379aa970abdSBram Moolenaar      \"SAL A(HR)^               *",
380aa970abdSBram Moolenaar      \"SAL A^                   *",
381aa970abdSBram Moolenaar      \"SAL AH(AEIOUY)-          H",
382aa970abdSBram Moolenaar      \"SAL AR(AEIOUY)-          R",
383aa970abdSBram Moolenaar      \"SAL A(HR)                _",
384aa970abdSBram Moolenaar      \"SAL \xC0^                   *",
385aa970abdSBram Moolenaar      \"SAL \xC5^                   *",
386aa970abdSBram Moolenaar      \"SAL BB-                  _",
387aa970abdSBram Moolenaar      \"SAL B                    B",
388aa970abdSBram Moolenaar      \"SAL CQ-                  _",
389aa970abdSBram Moolenaar      \"SAL CIA                  X",
390aa970abdSBram Moolenaar      \"SAL CH                   X",
391aa970abdSBram Moolenaar      \"SAL C(EIY)-              S",
392aa970abdSBram Moolenaar      \"SAL CK                   K",
393aa970abdSBram Moolenaar      \"SAL COUGH^               KF",
394aa970abdSBram Moolenaar      \"SAL CC<                  C",
395aa970abdSBram Moolenaar      \"SAL C                    K",
396aa970abdSBram Moolenaar      \"SAL DG(EIY)              K",
397aa970abdSBram Moolenaar      \"SAL DD-                  _",
398aa970abdSBram Moolenaar      \"SAL D                    T",
399aa970abdSBram Moolenaar      \"SAL \xC9<                   E",
400aa970abdSBram Moolenaar      \"SAL EH(AEIOUY)-^         *H",
401aa970abdSBram Moolenaar      \"SAL ER(AEIOUY)-^         *R",
402aa970abdSBram Moolenaar      \"SAL E(HR)^               *",
403aa970abdSBram Moolenaar      \"SAL ENOUGH^$             *NF",
404aa970abdSBram Moolenaar      \"SAL E^                   *",
405aa970abdSBram Moolenaar      \"SAL EH(AEIOUY)-          H",
406aa970abdSBram Moolenaar      \"SAL ER(AEIOUY)-          R",
407aa970abdSBram Moolenaar      \"SAL E(HR)                _",
408aa970abdSBram Moolenaar      \"SAL FF-                  _",
409aa970abdSBram Moolenaar      \"SAL F                    F",
410aa970abdSBram Moolenaar      \"SAL GN^                  N",
411aa970abdSBram Moolenaar      \"SAL GN$                  N",
412aa970abdSBram Moolenaar      \"SAL GNS$                 NS",
413aa970abdSBram Moolenaar      \"SAL GNED$                N",
414aa970abdSBram Moolenaar      \"SAL GH(AEIOUY)-          K",
415aa970abdSBram Moolenaar      \"SAL GH                   _",
416aa970abdSBram Moolenaar      \"SAL GG9                  K",
417aa970abdSBram Moolenaar      \"SAL G                    K",
418aa970abdSBram Moolenaar      \"SAL H                    H",
419aa970abdSBram Moolenaar      \"SAL IH(AEIOUY)-^         *H",
420aa970abdSBram Moolenaar      \"SAL IR(AEIOUY)-^         *R",
421aa970abdSBram Moolenaar      \"SAL I(HR)^               *",
422aa970abdSBram Moolenaar      \"SAL I^                   *",
423aa970abdSBram Moolenaar      \"SAL ING6                 N",
424aa970abdSBram Moolenaar      \"SAL IH(AEIOUY)-          H",
425aa970abdSBram Moolenaar      \"SAL IR(AEIOUY)-          R",
426aa970abdSBram Moolenaar      \"SAL I(HR)                _",
427aa970abdSBram Moolenaar      \"SAL J                    K",
428aa970abdSBram Moolenaar      \"SAL KN^                  N",
429aa970abdSBram Moolenaar      \"SAL KK-                  _",
430aa970abdSBram Moolenaar      \"SAL K                    K",
431aa970abdSBram Moolenaar      \"SAL LAUGH^               LF",
432aa970abdSBram Moolenaar      \"SAL LL-                  _",
433aa970abdSBram Moolenaar      \"SAL L                    L",
434aa970abdSBram Moolenaar      \"SAL MB$                  M",
435aa970abdSBram Moolenaar      \"SAL MM                   M",
436aa970abdSBram Moolenaar      \"SAL M                    M",
437aa970abdSBram Moolenaar      \"SAL NN-                  _",
438aa970abdSBram Moolenaar      \"SAL N                    N",
439aa970abdSBram Moolenaar      \"SAL OH(AEIOUY)-^         *H",
440aa970abdSBram Moolenaar      \"SAL OR(AEIOUY)-^         *R",
441aa970abdSBram Moolenaar      \"SAL O(HR)^               *",
442aa970abdSBram Moolenaar      \"SAL O^                   *",
443aa970abdSBram Moolenaar      \"SAL OH(AEIOUY)-          H",
444aa970abdSBram Moolenaar      \"SAL OR(AEIOUY)-          R",
445aa970abdSBram Moolenaar      \"SAL O(HR)                _",
446aa970abdSBram Moolenaar      \"SAL PH                   F",
447aa970abdSBram Moolenaar      \"SAL PN^                  N",
448aa970abdSBram Moolenaar      \"SAL PP-                  _",
449aa970abdSBram Moolenaar      \"SAL P                    P",
450aa970abdSBram Moolenaar      \"SAL Q                    K",
451aa970abdSBram Moolenaar      \"SAL RH^                  R",
452aa970abdSBram Moolenaar      \"SAL ROUGH^               RF",
453aa970abdSBram Moolenaar      \"SAL RR-                  _",
454aa970abdSBram Moolenaar      \"SAL R                    R",
455aa970abdSBram Moolenaar      \"SAL SCH(EOU)-            SK",
456aa970abdSBram Moolenaar      \"SAL SC(IEY)-             S",
457aa970abdSBram Moolenaar      \"SAL SH                   X",
458aa970abdSBram Moolenaar      \"SAL SI(AO)-              X",
459aa970abdSBram Moolenaar      \"SAL SS-                  _",
460aa970abdSBram Moolenaar      \"SAL S                    S",
461aa970abdSBram Moolenaar      \"SAL TI(AO)-              X",
462aa970abdSBram Moolenaar      \"SAL TH                   @",
463aa970abdSBram Moolenaar      \"SAL TCH--                _",
464aa970abdSBram Moolenaar      \"SAL TOUGH^               TF",
465aa970abdSBram Moolenaar      \"SAL TT-                  _",
466aa970abdSBram Moolenaar      \"SAL T                    T",
467aa970abdSBram Moolenaar      \"SAL UH(AEIOUY)-^         *H",
468aa970abdSBram Moolenaar      \"SAL UR(AEIOUY)-^         *R",
469aa970abdSBram Moolenaar      \"SAL U(HR)^               *",
470aa970abdSBram Moolenaar      \"SAL U^                   *",
471aa970abdSBram Moolenaar      \"SAL UH(AEIOUY)-          H",
472aa970abdSBram Moolenaar      \"SAL UR(AEIOUY)-          R",
473aa970abdSBram Moolenaar      \"SAL U(HR)                _",
474aa970abdSBram Moolenaar      \"SAL V^                   W",
475aa970abdSBram Moolenaar      \"SAL V                    F",
476aa970abdSBram Moolenaar      \"SAL WR^                  R",
477aa970abdSBram Moolenaar      \"SAL WH^                  W",
478aa970abdSBram Moolenaar      \"SAL W(AEIOU)-            W",
479aa970abdSBram Moolenaar      \"SAL X^                   S",
480aa970abdSBram Moolenaar      \"SAL X                    KS",
481aa970abdSBram Moolenaar      \"SAL Y(AEIOU)-            Y",
482aa970abdSBram Moolenaar      \"SAL ZZ-                  _",
483aa970abdSBram Moolenaar      \"SAL Z                    S",
484aa970abdSBram Moolenaar      \ ]
485aa970abdSBram Moolenaar
486aa970abdSBram Moolenaarfunc LoadAffAndDic(aff_contents, dic_contents)
487aa970abdSBram Moolenaar  set enc=utf-8
488aa970abdSBram Moolenaar  set spellfile=
489aa970abdSBram Moolenaar  call writefile(a:aff_contents, "Xtest.aff")
490aa970abdSBram Moolenaar  call writefile(a:dic_contents, "Xtest.dic")
491aa970abdSBram Moolenaar  " Generate a .spl file from a .dic and .aff file.
492aa970abdSBram Moolenaar  mkspell! Xtest Xtest
493aa970abdSBram Moolenaar  " use that spell file
494aa970abdSBram Moolenaar  set spl=Xtest.utf-8.spl spell
495aa970abdSBram Moolenaarendfunc
496aa970abdSBram Moolenaar
497aa970abdSBram Moolenaarfunc ListWords()
498aa970abdSBram Moolenaar  spelldump
499aa970abdSBram Moolenaar  %yank
500aa970abdSBram Moolenaar  quit
501aa970abdSBram Moolenaar  return split(@", "\n")
502aa970abdSBram Moolenaarendfunc
503aa970abdSBram Moolenaar
504aa970abdSBram Moolenaarfunc TestGoodBadBase()
505aa970abdSBram Moolenaar  exe '1;/^good:'
506aa970abdSBram Moolenaar  normal 0f:]s
507aa970abdSBram Moolenaar  let prevbad = ''
508aa970abdSBram Moolenaar  let result = []
509aa970abdSBram Moolenaar  while 1
510aa970abdSBram Moolenaar    let [bad, a] = spellbadword()
511aa970abdSBram Moolenaar    if bad == '' || bad == prevbad || bad == 'badend'
512aa970abdSBram Moolenaar      break
513aa970abdSBram Moolenaar    endif
514aa970abdSBram Moolenaar    let prevbad = bad
515aa970abdSBram Moolenaar    let lst = bad->spellsuggest(3)
516aa970abdSBram Moolenaar    normal mm
517aa970abdSBram Moolenaar
518aa970abdSBram Moolenaar    call add(result, [bad, lst])
519aa970abdSBram Moolenaar    normal `m]s
520aa970abdSBram Moolenaar  endwhile
521aa970abdSBram Moolenaar  return result
522aa970abdSBram Moolenaarendfunc
523aa970abdSBram Moolenaar
524aa970abdSBram Moolenaarfunc RunGoodBad(good, bad, expected_words, expected_bad_words)
525aa970abdSBram Moolenaar  %bwipe!
526aa970abdSBram Moolenaar  call setline(1, ['', "good: ", a:good,  a:bad, " badend "])
527aa970abdSBram Moolenaar  let words = ListWords()
528aa970abdSBram Moolenaar  call assert_equal(a:expected_words, words[1:-1])
529aa970abdSBram Moolenaar  let bad_words = TestGoodBadBase()
530aa970abdSBram Moolenaar  call assert_equal(a:expected_bad_words, bad_words)
531aa970abdSBram Moolenaar  %bwipe!
532aa970abdSBram Moolenaarendfunc
533aa970abdSBram Moolenaar
534aa970abdSBram Moolenaarfunc Test_spell_basic()
535aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff1, g:test_data_dic1)
536aa970abdSBram Moolenaar  call RunGoodBad("wrong OK puts. Test the end",
537aa970abdSBram Moolenaar        \ "bad: inputs comment ok Ok. test d\u00E9\u00F4l end the",
538aa970abdSBram Moolenaar        \["Comment", "deol", "d\u00E9\u00F4r", "input", "OK", "output", "outputs", "outtest", "put", "puts",
539aa970abdSBram Moolenaar        \  "test", "testen", "testn", "the end", "uk", "wrong"],
540aa970abdSBram Moolenaar        \[
541aa970abdSBram Moolenaar        \   ["bad", ["put", "uk", "OK"]],
542aa970abdSBram Moolenaar        \   ["inputs", ["input", "puts", "outputs"]],
543aa970abdSBram Moolenaar        \   ["comment", ["Comment", "outtest", "the end"]],
544aa970abdSBram Moolenaar        \   ["ok", ["OK", "uk", "put"]],
545aa970abdSBram Moolenaar        \   ["Ok", ["OK", "Uk", "Put"]],
546aa970abdSBram Moolenaar        \   ["test", ["Test", "testn", "testen"]],
547aa970abdSBram Moolenaar        \   ["d\u00E9\u00F4l", ["deol", "d\u00E9\u00F4r", "test"]],
548aa970abdSBram Moolenaar        \   ["end", ["put", "uk", "test"]],
549aa970abdSBram Moolenaar        \   ["the", ["put", "uk", "test"]],
550aa970abdSBram Moolenaar        \ ]
551aa970abdSBram Moolenaar        \ )
552aa970abdSBram Moolenaar
553aa970abdSBram Moolenaar  call assert_equal("gebletegek", soundfold('goobledygoook'))
554aa970abdSBram Moolenaar  call assert_equal("kepereneven", 'kóopërÿnôven'->soundfold())
555aa970abdSBram Moolenaar  call assert_equal("everles gesvets etele", soundfold('oeverloos gezwets edale'))
556aa970abdSBram Moolenaarendfunc
557aa970abdSBram Moolenaar
558aa970abdSBram Moolenaar" Postponed prefixes
559aa970abdSBram Moolenaarfunc Test_spell_prefixes()
560aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff2, g:test_data_dic1)
561aa970abdSBram Moolenaar  call RunGoodBad("puts",
562aa970abdSBram Moolenaar        \ "bad: inputs comment ok Ok end the. test d\u00E9\u00F4l",
563aa970abdSBram Moolenaar        \ ["Comment", "deol", "d\u00E9\u00F4r", "OK", "put", "input", "output", "puts", "outputs", "test", "outtest", "testen", "testn", "the end", "uk", "wrong"],
564aa970abdSBram Moolenaar        \ [
565aa970abdSBram Moolenaar        \   ["bad", ["put", "uk", "OK"]],
566aa970abdSBram Moolenaar        \   ["inputs", ["input", "puts", "outputs"]],
567aa970abdSBram Moolenaar        \   ["comment", ["Comment"]],
568aa970abdSBram Moolenaar        \   ["ok", ["OK", "uk", "put"]],
569aa970abdSBram Moolenaar        \   ["Ok", ["OK", "Uk", "Put"]],
570aa970abdSBram Moolenaar        \   ["end", ["put", "uk", "deol"]],
571aa970abdSBram Moolenaar        \   ["the", ["put", "uk", "test"]],
572aa970abdSBram Moolenaar        \   ["test", ["Test", "testn", "testen"]],
573aa970abdSBram Moolenaar        \   ["d\u00E9\u00F4l", ["deol", "d\u00E9\u00F4r", "test"]],
574aa970abdSBram Moolenaar        \ ])
575aa970abdSBram Moolenaarendfunc
576aa970abdSBram Moolenaar
577aa970abdSBram Moolenaar"Compound words
578aa970abdSBram Moolenaarfunc Test_spell_compound()
579aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff3, g:test_data_dic3)
580aa970abdSBram Moolenaar  call RunGoodBad("foo m\u00EF foobar foofoobar barfoo barbarfoo",
581aa970abdSBram Moolenaar        \ "bad: bar la foom\u00EF barm\u00EF m\u00EFfoo m\u00EFbar m\u00EFm\u00EF lala m\u00EFla lam\u00EF foola labar",
582aa970abdSBram Moolenaar        \ ["foo", "m\u00EF"],
583aa970abdSBram Moolenaar        \ [
584aa970abdSBram Moolenaar        \   ["bad", ["foo", "m\u00EF"]],
585aa970abdSBram Moolenaar        \   ["bar", ["barfoo", "foobar", "foo"]],
586aa970abdSBram Moolenaar        \   ["la", ["m\u00EF", "foo"]],
587aa970abdSBram Moolenaar        \   ["foom\u00EF", ["foo m\u00EF", "foo", "foofoo"]],
588aa970abdSBram Moolenaar        \   ["barm\u00EF", ["barfoo", "m\u00EF", "barbar"]],
589aa970abdSBram Moolenaar        \   ["m\u00EFfoo", ["m\u00EF foo", "foo", "foofoo"]],
590aa970abdSBram Moolenaar        \   ["m\u00EFbar", ["foobar", "barbar", "m\u00EF"]],
591aa970abdSBram Moolenaar        \   ["m\u00EFm\u00EF", ["m\u00EF m\u00EF", "m\u00EF"]],
592aa970abdSBram Moolenaar        \   ["lala", []],
593aa970abdSBram Moolenaar        \   ["m\u00EFla", ["m\u00EF", "m\u00EF m\u00EF"]],
594aa970abdSBram Moolenaar        \   ["lam\u00EF", ["m\u00EF", "m\u00EF m\u00EF"]],
595aa970abdSBram Moolenaar        \   ["foola", ["foo", "foobar", "foofoo"]],
596aa970abdSBram Moolenaar        \   ["labar", ["barbar", "foobar"]],
597aa970abdSBram Moolenaar        \ ])
598aa970abdSBram Moolenaar
599aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff4, g:test_data_dic4)
600aa970abdSBram Moolenaar  call RunGoodBad("word util bork prebork start end wordutil wordutils pro-ok bork borkbork borkborkbork borkborkborkbork borkborkborkborkbork tomato tomatotomato startend startword startwordword startwordend startwordwordend startwordwordwordend prebork preborkbork preborkborkbork nouword",
601aa970abdSBram Moolenaar        \ "bad: wordutilize pro borkborkborkborkborkbork tomatotomatotomato endstart endend startstart wordend wordstart preborkprebork  preborkpreborkbork startwordwordwordwordend borkpreborkpreborkbork utilsbork  startnouword",
602aa970abdSBram Moolenaar        \ ["bork", "prebork", "end", "pro-ok", "start", "tomato", "util", "utilize", "utils", "word", "nouword"],
603aa970abdSBram Moolenaar        \ [
604aa970abdSBram Moolenaar        \   ["bad", ["end", "bork", "word"]],
605aa970abdSBram Moolenaar        \   ["wordutilize", ["word utilize", "wordutils", "wordutil"]],
606aa970abdSBram Moolenaar        \   ["pro", ["bork", "word", "end"]],
607aa970abdSBram Moolenaar        \   ["borkborkborkborkborkbork", ["bork borkborkborkborkbork", "borkbork borkborkborkbork", "borkborkbork borkborkbork"]],
608aa970abdSBram Moolenaar        \   ["tomatotomatotomato", ["tomato tomatotomato", "tomatotomato tomato", "tomato tomato tomato"]],
609aa970abdSBram Moolenaar        \   ["endstart", ["end start", "start"]],
610aa970abdSBram Moolenaar        \   ["endend", ["end end", "end"]],
611aa970abdSBram Moolenaar        \   ["startstart", ["start start"]],
612aa970abdSBram Moolenaar        \   ["wordend", ["word end", "word", "wordword"]],
613aa970abdSBram Moolenaar        \   ["wordstart", ["word start", "bork start"]],
614aa970abdSBram Moolenaar        \   ["preborkprebork", ["prebork prebork", "preborkbork", "preborkborkbork"]],
615aa970abdSBram Moolenaar        \   ["preborkpreborkbork", ["prebork preborkbork", "preborkborkbork", "preborkborkborkbork"]],
616aa970abdSBram Moolenaar        \   ["startwordwordwordwordend", ["startwordwordwordword end", "startwordwordwordword", "start wordwordwordword end"]],
617aa970abdSBram Moolenaar        \   ["borkpreborkpreborkbork", ["bork preborkpreborkbork", "bork prebork preborkbork", "bork preborkprebork bork"]],
618aa970abdSBram Moolenaar        \   ["utilsbork", ["utilbork", "utils bork", "util bork"]],
619aa970abdSBram Moolenaar        \   ["startnouword", ["start nouword", "startword", "startborkword"]],
620aa970abdSBram Moolenaar        \ ])
621aa970abdSBram Moolenaar
622aa970abdSBram Moolenaarendfunc
623aa970abdSBram Moolenaar
624aa970abdSBram Moolenaar" Test affix flags with two characters
625aa970abdSBram Moolenaarfunc Test_spell_affix()
626aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff5, g:test_data_dic5)
627aa970abdSBram Moolenaar  call RunGoodBad("fooa1 fooa\u00E9 bar prebar barbork prebarbork  startprebar start end startend  startmiddleend nouend",
628aa970abdSBram Moolenaar        \ "bad: foo fooa2 prabar probarbirk middle startmiddle middleend endstart startprobar startnouend",
629aa970abdSBram Moolenaar        \ ["bar", "barbork", "end", "fooa1", "fooa\u00E9", "nouend", "prebar", "prebarbork", "start"],
630aa970abdSBram Moolenaar        \ [
631aa970abdSBram Moolenaar        \   ["bad", ["bar", "end", "fooa1"]],
632aa970abdSBram Moolenaar        \   ["foo", ["fooa1", "fooa\u00E9", "bar"]],
633aa970abdSBram Moolenaar        \   ["fooa2", ["fooa1", "fooa\u00E9", "bar"]],
634aa970abdSBram Moolenaar        \   ["prabar", ["prebar", "bar", "bar bar"]],
635aa970abdSBram Moolenaar        \   ["probarbirk", ["prebarbork"]],
636aa970abdSBram Moolenaar        \   ["middle", []],
637aa970abdSBram Moolenaar        \   ["startmiddle", ["startmiddleend", "startmiddlebar"]],
638aa970abdSBram Moolenaar        \   ["middleend", []],
639aa970abdSBram Moolenaar        \   ["endstart", ["end start", "start"]],
640aa970abdSBram Moolenaar        \   ["startprobar", ["startprebar", "start prebar", "startbar"]],
641aa970abdSBram Moolenaar        \   ["startnouend", ["start nouend", "startend"]],
642aa970abdSBram Moolenaar        \ ])
643aa970abdSBram Moolenaar
644aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff6, g:test_data_dic6)
645aa970abdSBram Moolenaar  call RunGoodBad("meea1 meea\u00E9 bar prebar barbork prebarbork  leadprebar lead end leadend  leadmiddleend",
646aa970abdSBram Moolenaar        \  "bad: mee meea2 prabar probarbirk middle leadmiddle middleend endlead leadprobar",
647aa970abdSBram Moolenaar        \ ["bar", "barbork", "end", "lead", "meea1", "meea\u00E9", "prebar", "prebarbork"],
648aa970abdSBram Moolenaar        \ [
649aa970abdSBram Moolenaar        \   ["bad", ["bar", "end", "lead"]],
650aa970abdSBram Moolenaar        \   ["mee", ["meea1", "meea\u00E9", "bar"]],
651aa970abdSBram Moolenaar        \   ["meea2", ["meea1", "meea\u00E9", "lead"]],
652aa970abdSBram Moolenaar        \   ["prabar", ["prebar", "bar", "leadbar"]],
653aa970abdSBram Moolenaar        \   ["probarbirk", ["prebarbork"]],
654aa970abdSBram Moolenaar        \   ["middle", []],
655aa970abdSBram Moolenaar        \   ["leadmiddle", ["leadmiddleend", "leadmiddlebar"]],
656aa970abdSBram Moolenaar        \   ["middleend", []],
657aa970abdSBram Moolenaar        \   ["endlead", ["end lead", "lead", "end end"]],
658aa970abdSBram Moolenaar        \   ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]],
659aa970abdSBram Moolenaar        \ ])
660aa970abdSBram Moolenaar
661aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff7, g:test_data_dic7)
662aa970abdSBram Moolenaar  call RunGoodBad("meea1 meezero meea\u00E9 bar prebar barmeat prebarmeat  leadprebar lead tail leadtail  leadmiddletail",
663aa970abdSBram Moolenaar        \ "bad: mee meea2 prabar probarmaat middle leadmiddle middletail taillead leadprobar",
664aa970abdSBram Moolenaar        \ ["bar", "barmeat", "lead", "meea1", "meea\u00E9", "meezero", "prebar", "prebarmeat", "tail"],
665aa970abdSBram Moolenaar        \ [
666aa970abdSBram Moolenaar        \   ["bad", ["bar", "lead", "tail"]],
667aa970abdSBram Moolenaar        \   ["mee", ["meea1", "meea\u00E9", "bar"]],
668aa970abdSBram Moolenaar        \   ["meea2", ["meea1", "meea\u00E9", "lead"]],
669aa970abdSBram Moolenaar        \   ["prabar", ["prebar", "bar", "leadbar"]],
670aa970abdSBram Moolenaar        \   ["probarmaat", ["prebarmeat"]],
671aa970abdSBram Moolenaar        \   ["middle", []],
672aa970abdSBram Moolenaar        \   ["leadmiddle", ["leadmiddlebar"]],
673aa970abdSBram Moolenaar        \   ["middletail", []],
674aa970abdSBram Moolenaar        \   ["taillead", ["tail lead", "tail"]],
675aa970abdSBram Moolenaar        \   ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]],
676aa970abdSBram Moolenaar        \ ])
677aa970abdSBram Moolenaarendfunc
678aa970abdSBram Moolenaar
679aa970abdSBram Moolenaarfunc Test_spell_NOSLITSUGS()
680aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff8, g:test_data_dic8)
681aa970abdSBram Moolenaar  call RunGoodBad("foo bar faabar", "bad: foobar barfoo",
682aa970abdSBram Moolenaar        \ ["bar", "faabar", "foo"],
683aa970abdSBram Moolenaar        \ [
684aa970abdSBram Moolenaar        \   ["bad", ["bar", "foo"]],
685aa970abdSBram Moolenaar        \   ["foobar", ["faabar", "foo bar", "bar"]],
686aa970abdSBram Moolenaar        \   ["barfoo", ["bar foo", "bar", "foo"]],
687aa970abdSBram Moolenaar        \ ])
688aa970abdSBram Moolenaarendfunc
689aa970abdSBram Moolenaar
690aa970abdSBram Moolenaar" Numbers
691aa970abdSBram Moolenaarfunc Test_spell_Numbers()
692aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff9, g:test_data_dic9)
693aa970abdSBram Moolenaar  call RunGoodBad("0b1011 0777 1234 0x01ff", "",
694aa970abdSBram Moolenaar        \ ["bar", "foo"],
695aa970abdSBram Moolenaar        \ [
696aa970abdSBram Moolenaar        \ ])
697aa970abdSBram Moolenaarendfunc
698aa970abdSBram Moolenaar
699aa970abdSBram Moolenaar" Affix flags
700aa970abdSBram Moolenaarfunc Test_spell_affix_flags()
701aa970abdSBram Moolenaar  call LoadAffAndDic(g:test_data_aff10, g:test_data_dic10)
702aa970abdSBram Moolenaar  call RunGoodBad("drink drinkable drinkables drinktable drinkabletable",
703aa970abdSBram Moolenaar	\ "bad: drinks drinkstable drinkablestable",
704aa970abdSBram Moolenaar        \ ["drink", "drinkable", "drinkables", "table"],
705aa970abdSBram Moolenaar        \ [['bad', []],
706aa970abdSBram Moolenaar	\ ['drinks', ['drink']],
707aa970abdSBram Moolenaar	\ ['drinkstable', ['drinktable', 'drinkable', 'drink table']],
708aa970abdSBram Moolenaar        \ ['drinkablestable', ['drinkabletable', 'drinkables table', 'drinkable table']],
709aa970abdSBram Moolenaar	\ ])
710aa970abdSBram Moolenaarendfunc
711aa970abdSBram Moolenaar
712aa970abdSBram Moolenaarfunction FirstSpellWord()
713aa970abdSBram Moolenaar  call feedkeys("/^start:\n", 'tx')
714aa970abdSBram Moolenaar  normal ]smm
715aa970abdSBram Moolenaar  let [str, a] = spellbadword()
716aa970abdSBram Moolenaar  return str
717aa970abdSBram Moolenaarendfunc
718aa970abdSBram Moolenaar
719aa970abdSBram Moolenaarfunction SecondSpellWord()
720aa970abdSBram Moolenaar  normal `m]s
721aa970abdSBram Moolenaar  let [str, a] = spellbadword()
722aa970abdSBram Moolenaar  return str
723aa970abdSBram Moolenaarendfunc
724aa970abdSBram Moolenaar
725aa970abdSBram Moolenaar" Test with SAL instead of SOFO items; test automatic reloading
726aa970abdSBram Moolenaarfunc Test_spell_sal_and_addition()
727aa970abdSBram Moolenaar  set spellfile=
728aa970abdSBram Moolenaar  call writefile(g:test_data_dic1, "Xtest.dic")
729aa970abdSBram Moolenaar  call writefile(g:test_data_aff_sal, "Xtest.aff")
730aa970abdSBram Moolenaar  mkspell! Xtest Xtest
731aa970abdSBram Moolenaar  set spl=Xtest.utf-8.spl spell
732aa970abdSBram Moolenaar  call assert_equal('kbltykk', soundfold('goobledygoook'))
733aa970abdSBram Moolenaar  call assert_equal('kprnfn', soundfold('kóopërÿnôven'))
734aa970abdSBram Moolenaar  call assert_equal('*fls kswts tl', soundfold('oeverloos gezwets edale'))
735aa970abdSBram Moolenaar
736aa970abdSBram Moolenaar  "also use an addition file
737aa970abdSBram Moolenaar  call writefile(["/regions=usgbnz", "elequint/2", "elekwint/3"], "Xtest.utf-8.add")
738aa970abdSBram Moolenaar  mkspell! Xtest.utf-8.add.spl Xtest.utf-8.add
739aa970abdSBram Moolenaar
740aa970abdSBram Moolenaar  bwipe!
741aa970abdSBram Moolenaar  call setline(1, ["start: elequint test elekwint test elekwent asdf"])
742aa970abdSBram Moolenaar
743aa970abdSBram Moolenaar  set spellfile=Xtest.utf-8.add
744aa970abdSBram Moolenaar  call assert_equal("elekwent", FirstSpellWord())
745aa970abdSBram Moolenaar
746aa970abdSBram Moolenaar  set spl=Xtest_us.utf-8.spl
747aa970abdSBram Moolenaar  call assert_equal("elequint", FirstSpellWord())
748aa970abdSBram Moolenaar  call assert_equal("elekwint", SecondSpellWord())
749aa970abdSBram Moolenaar
750aa970abdSBram Moolenaar  set spl=Xtest_gb.utf-8.spl
751aa970abdSBram Moolenaar  call assert_equal("elekwint", FirstSpellWord())
752aa970abdSBram Moolenaar  call assert_equal("elekwent", SecondSpellWord())
753aa970abdSBram Moolenaar
754aa970abdSBram Moolenaar  set spl=Xtest_nz.utf-8.spl
755aa970abdSBram Moolenaar  call assert_equal("elequint", FirstSpellWord())
756aa970abdSBram Moolenaar  call assert_equal("elekwent", SecondSpellWord())
757aa970abdSBram Moolenaar
758aa970abdSBram Moolenaar  set spl=Xtest_ca.utf-8.spl
759aa970abdSBram Moolenaar  call assert_equal("elequint", FirstSpellWord())
760aa970abdSBram Moolenaar  call assert_equal("elekwint", SecondSpellWord())
761aa970abdSBram Moolenaarendfunc
762aa970abdSBram Moolenaar
763aa970abdSBram Moolenaarfunc Test_spellfile_value()
764aa970abdSBram Moolenaar  set spellfile=Xdir/Xtest.utf-8.add
765aa970abdSBram Moolenaar  set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add
766aa970abdSBram Moolenaarendfunc
767aa970abdSBram Moolenaar
768*e275ba4fSBram Moolenaarfunc Test_no_crash_with_weird_text()
769*e275ba4fSBram Moolenaar  new
770*e275ba4fSBram Moolenaar  let lines =<< trim END
771*e275ba4fSBram Moolenaar      r<sfile>
772*e275ba4fSBram Moolenaar773*e275ba4fSBram Moolenaar
774*e275ba4fSBram Moolenaar
775*e275ba4fSBram Moolenaar776*e275ba4fSBram Moolenaar  END
777*e275ba4fSBram Moolenaar  call setline(1, lines)
778*e275ba4fSBram Moolenaar  exe "%norm \<C-v>ez=>\<C-v>wzG"
779*e275ba4fSBram Moolenaar
780*e275ba4fSBram Moolenaar  bwipe!
781*e275ba4fSBram Moolenaarendfunc
782*e275ba4fSBram Moolenaar
783*e275ba4fSBram Moolenaar
784aa970abdSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
785