xref: /vim-8.2.3635/src/testdir/test_digraph.vim (revision 8ea05de6)
1" Tests for digraphs
2
3source check.vim
4CheckFeature digraphs
5source term_util.vim
6
7func Put_Dig(chars)
8  exe "norm! o\<c-k>".a:chars
9endfu
10
11func Put_Dig_BS(char1, char2)
12  exe "norm! o".a:char1."\<bs>".a:char2
13endfu
14
15func Test_digraphs()
16  new
17  call Put_Dig("00")
18  call assert_equal("∞", getline('.'))
19  " not a digraph
20  call Put_Dig("el")
21  call assert_equal("l", getline('.'))
22  call Put_Dig("ht")
23  call assert_equal("þ", getline('.'))
24  " digraph "ab" is the same as "ba"
25  call Put_Dig("ab")
26  call Put_Dig("ba")
27  call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
28  " Euro sign
29  call Put_Dig("e=")
30  call Put_Dig("=e")
31  call Put_Dig("Eu")
32  call Put_Dig("uE")
33  call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
34  " Rouble sign
35  call Put_Dig("R=")
36  call Put_Dig("=R")
37  call Put_Dig("=P")
38  call Put_Dig("P=")
39  call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
40  " Not a digraph
41  call Put_Dig("a\<bs>")
42  call Put_Dig("\<bs>a")
43  call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
44  " Grave
45  call Put_Dig("a!")
46  call Put_Dig("!e")
47  call Put_Dig("b!") " not defined
48  call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
49  " Acute accent
50  call Put_Dig("a'")
51  call Put_Dig("'e")
52  call Put_Dig("b'") " not defined
53  call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
54  " Cicumflex
55  call Put_Dig("a>")
56  call Put_Dig(">e")
57  call Put_Dig("b>") " not defined
58  call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
59  " Tilde
60  call Put_Dig("o~")
61  call Put_Dig("~u") " not defined
62  call Put_Dig("z~") " not defined
63  call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
64  " Tilde
65  call Put_Dig("o?")
66  call Put_Dig("?u")
67  call Put_Dig("z?") " not defined
68  call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
69  " Macron
70  call Put_Dig("o-")
71  call Put_Dig("-u")
72  call Put_Dig("z-") " not defined
73  call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
74  " Breve
75  call Put_Dig("o(")
76  call Put_Dig("(u")
77  call Put_Dig("z(") " not defined
78  call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
79  " Dot above
80  call Put_Dig("b.")
81  call Put_Dig(".e")
82  call Put_Dig("a.") " not defined
83  call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
84  " Diaeresis
85  call Put_Dig("a:")
86  call Put_Dig(":u")
87  call Put_Dig("b:") " not defined
88  call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
89  " Cedilla
90  call Put_Dig("',")
91  call Put_Dig(",C")
92  call Put_Dig("b,") " not defined
93  call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
94  " Underline
95  call Put_Dig("B_")
96  call Put_Dig("_t")
97  call Put_Dig("a_") " not defined
98  call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
99  " Stroke
100  call Put_Dig("j/")
101  call Put_Dig("/l")
102  call Put_Dig("b/") " not defined
103  call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
104  " Double acute
105  call Put_Dig('O"')
106  call Put_Dig('"y')
107  call Put_Dig('b"') " not defined
108  call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
109  " Ogonek
110  call Put_Dig('u;')
111  call Put_Dig(';E')
112  call Put_Dig('b;') " not defined
113  call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
114  " Caron
115  call Put_Dig('u<')
116  call Put_Dig('<E')
117  call Put_Dig('b<') " not defined
118  call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
119  " Ring above
120  call Put_Dig('u0')
121  call Put_Dig('0E') " not defined
122  call Put_Dig('b0') " not defined
123  call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
124  " Hook
125  call Put_Dig('u2')
126  call Put_Dig('2E')
127  call Put_Dig('b2') " not defined
128  call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
129  " Horn
130  call Put_Dig('u9')
131  call Put_Dig('9E') " not defined
132  call Put_Dig('b9') " not defined
133  call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
134  " Cyrillic
135  call Put_Dig('u=')
136  call Put_Dig('=b')
137  call Put_Dig('=_')
138  call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
139  " Greek
140  call Put_Dig('u*')
141  call Put_Dig('*b')
142  call Put_Dig('*_')
143  call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
144  " Greek/Cyrillic special
145  call Put_Dig('u%')
146  call Put_Dig('%b') " not defined
147  call Put_Dig('%_') " not defined
148  call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
149  " Arabic
150  call Put_Dig('u+')
151  call Put_Dig('+b')
152  call Put_Dig('+_') " japanese industrial symbol
153  call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
154  " Hebrew
155  call Put_Dig('Q+')
156  call Put_Dig('+B')
157  call Put_Dig('+X')
158  call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
159  " Latin
160  call Put_Dig('a3')
161  call Put_Dig('A3')
162  call Put_Dig('3X')
163  call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
164  " Bopomofo
165  call Put_Dig('a4')
166  call Put_Dig('A4')
167  call Put_Dig('4X')
168  call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
169  " Hiragana
170  call Put_Dig('a5')
171  call Put_Dig('A5')
172  call Put_Dig('5X')
173  call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
174  " Katakana
175  call Put_Dig('a6')
176  call Put_Dig('A6')
177  call Put_Dig('6X')
178  call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
179  " Superscripts
180  call Put_Dig('1S')
181  call Put_Dig('2S')
182  call Put_Dig('3S')
183  call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
184  " Subscripts
185  call Put_Dig('1s')
186  call Put_Dig('2s')
187  call Put_Dig('3s')
188  call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
189  " Eszet (only lowercase)
190  call Put_Dig("ss")
191  call Put_Dig("SS") " start of string
192  call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
193  " High bit set
194  call Put_Dig("a ")
195  call Put_Dig(" A")
196  call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
197  " Escape is not part of a digraph
198  call Put_Dig("a\<esc>")
199  call Put_Dig("\<esc>A")
200  call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
201  " define some custom digraphs
202  " old: 00 ∞
203  " old: el l
204  digraph 00 9216
205  digraph el 0252
206  call Put_Dig("00")
207  call Put_Dig("el")
208  " Reset digraphs
209  digraph 00 8734
210  digraph el 108
211  call Put_Dig("00")
212  call Put_Dig("el")
213  call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
214  call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
215  call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
216  call assert_fails('digraph xy z', 'E39:')
217  call assert_fails('digraph x', 'E474:')
218  bw!
219endfunc
220
221func Test_digraphs_option()
222  " reset whichwrap option, so that testing <esc><bs>A works,
223  " without moving up a line
224  set digraph ww=
225  new
226  call Put_Dig_BS("0","0")
227  call assert_equal("∞", getline('.'))
228  " not a digraph
229  call Put_Dig_BS("e","l")
230  call assert_equal("l", getline('.'))
231  call Put_Dig_BS("h","t")
232  call assert_equal("þ", getline('.'))
233  " digraph "ab" is the same as "ba"
234  call Put_Dig_BS("a","b")
235  call Put_Dig_BS("b","a")
236  call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
237  " Euro sign
238  call Put_Dig_BS("e","=")
239  call Put_Dig_BS("=","e")
240  call Put_Dig_BS("E","u")
241  call Put_Dig_BS("u","E")
242  call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
243  " Rouble sign
244  call Put_Dig_BS("R","=")
245  call Put_Dig_BS("=","R")
246  call Put_Dig_BS("=","P")
247  call Put_Dig_BS("P","=")
248  call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
249  " Not a digraph: this is different from <c-k>!
250  call Put_Dig_BS("a","\<bs>")
251  call Put_Dig_BS("\<bs>","a")
252  call assert_equal(['','a'], getline(line('.')-1,line('.')))
253  " Grave
254  call Put_Dig_BS("a","!")
255  call Put_Dig_BS("!","e")
256  call Put_Dig_BS("b","!") " not defined
257  call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
258  " Acute accent
259  call Put_Dig_BS("a","'")
260  call Put_Dig_BS("'","e")
261  call Put_Dig_BS("b","'") " not defined
262  call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
263  " Cicumflex
264  call Put_Dig_BS("a",">")
265  call Put_Dig_BS(">","e")
266  call Put_Dig_BS("b",">") " not defined
267  call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
268  " Tilde
269  call Put_Dig_BS("o","~")
270  call Put_Dig_BS("~","u") " not defined
271  call Put_Dig_BS("z","~") " not defined
272  call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
273  " Tilde
274  call Put_Dig_BS("o","?")
275  call Put_Dig_BS("?","u")
276  call Put_Dig_BS("z","?") " not defined
277  call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
278  " Macron
279  call Put_Dig_BS("o","-")
280  call Put_Dig_BS("-","u")
281  call Put_Dig_BS("z","-") " not defined
282  call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
283  " Breve
284  call Put_Dig_BS("o","(")
285  call Put_Dig_BS("(","u")
286  call Put_Dig_BS("z","(") " not defined
287  call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
288  " Dot above
289  call Put_Dig_BS("b",".")
290  call Put_Dig_BS(".","e")
291  call Put_Dig_BS("a",".") " not defined
292  call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
293  " Diaeresis
294  call Put_Dig_BS("a",":")
295  call Put_Dig_BS(":","u")
296  call Put_Dig_BS("b",":") " not defined
297  call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
298  " Cedilla
299  call Put_Dig_BS("'",",")
300  call Put_Dig_BS(",","C")
301  call Put_Dig_BS("b",",") " not defined
302  call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
303  " Underline
304  call Put_Dig_BS("B","_")
305  call Put_Dig_BS("_","t")
306  call Put_Dig_BS("a","_") " not defined
307  call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
308  " Stroke
309  call Put_Dig_BS("j","/")
310  call Put_Dig_BS("/","l")
311  call Put_Dig_BS("b","/") " not defined
312  call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
313  " Double acute
314  call Put_Dig_BS('O','"')
315  call Put_Dig_BS('"','y')
316  call Put_Dig_BS('b','"') " not defined
317  call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
318  " Ogonek
319  call Put_Dig_BS('u',';')
320  call Put_Dig_BS(';','E')
321  call Put_Dig_BS('b',';') " not defined
322  call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
323  " Caron
324  call Put_Dig_BS('u','<')
325  call Put_Dig_BS('<','E')
326  call Put_Dig_BS('b','<') " not defined
327  call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
328  " Ring above
329  call Put_Dig_BS('u','0')
330  call Put_Dig_BS('0','E') " not defined
331  call Put_Dig_BS('b','0') " not defined
332  call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
333  " Hook
334  call Put_Dig_BS('u','2')
335  call Put_Dig_BS('2','E')
336  call Put_Dig_BS('b','2') " not defined
337  call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
338  " Horn
339  call Put_Dig_BS('u','9')
340  call Put_Dig_BS('9','E') " not defined
341  call Put_Dig_BS('b','9') " not defined
342  call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
343  " Cyrillic
344  call Put_Dig_BS('u','=')
345  call Put_Dig_BS('=','b')
346  call Put_Dig_BS('=','_')
347  call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
348  " Greek
349  call Put_Dig_BS('u','*')
350  call Put_Dig_BS('*','b')
351  call Put_Dig_BS('*','_')
352  call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
353  " Greek/Cyrillic special
354  call Put_Dig_BS('u','%')
355  call Put_Dig_BS('%','b') " not defined
356  call Put_Dig_BS('%','_') " not defined
357  call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
358  " Arabic
359  call Put_Dig_BS('u','+')
360  call Put_Dig_BS('+','b')
361  call Put_Dig_BS('+','_') " japanese industrial symbol
362  call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
363  " Hebrew
364  call Put_Dig_BS('Q','+')
365  call Put_Dig_BS('+','B')
366  call Put_Dig_BS('+','X')
367  call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
368  " Latin
369  call Put_Dig_BS('a','3')
370  call Put_Dig_BS('A','3')
371  call Put_Dig_BS('3','X')
372  call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
373  " Bopomofo
374  call Put_Dig_BS('a','4')
375  call Put_Dig_BS('A','4')
376  call Put_Dig_BS('4','X')
377  call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
378  " Hiragana
379  call Put_Dig_BS('a','5')
380  call Put_Dig_BS('A','5')
381  call Put_Dig_BS('5','X')
382  call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
383  " Katakana
384  call Put_Dig_BS('a','6')
385  call Put_Dig_BS('A','6')
386  call Put_Dig_BS('6','X')
387  call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
388  " Superscripts
389  call Put_Dig_BS('1','S')
390  call Put_Dig_BS('2','S')
391  call Put_Dig_BS('3','S')
392  call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
393  " Subscripts
394  call Put_Dig_BS('1','s')
395  call Put_Dig_BS('2','s')
396  call Put_Dig_BS('3','s')
397  call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
398  " Eszet (only lowercase)
399  call Put_Dig_BS("s","s")
400  call Put_Dig_BS("S","S") " start of string
401  call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
402  " High bit set (different from <c-k>)
403  call Put_Dig_BS("a"," ")
404  call Put_Dig_BS(" ","A")
405  call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
406  " Escape is not part of a digraph (different from <c-k>)
407  call Put_Dig_BS("a","\<esc>")
408  call Put_Dig_BS("\<esc>","A")
409  call assert_equal(['', ''], getline(line('.')-1,line('.')))
410  " define some custom digraphs
411  " old: 00 ∞
412  " old: el l
413  digraph 00 9216
414  digraph el 0252
415  call Put_Dig_BS("0","0")
416  call Put_Dig_BS("e","l")
417  " Reset digraphs
418  digraph 00 8734
419  digraph el 108
420  call Put_Dig_BS("0","0")
421  call Put_Dig_BS("e","l")
422  call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
423  set nodigraph ww&vim
424  bw!
425endfunc
426
427func Test_digraphs_output()
428  new
429  let out = execute(':digraph')
430  call assert_equal('Eu €  8364',  matchstr(out, '\C\<Eu\D*8364\>'))
431  call assert_equal('=e €  8364',  matchstr(out, '\C=e\D*8364\>'))
432  call assert_equal('=R ₽  8381',  matchstr(out, '\C=R\D*8381\>'))
433  call assert_equal('=P ₽  8381',  matchstr(out, '\C=P\D*8381\>'))
434  call assert_equal('o: ö  246',   matchstr(out, '\C\<o:\D*246\>'))
435  call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
436  call assert_equal("'0 ˚  730",   matchstr(out, '\C''0\D*730\>'))
437  call assert_equal('Z% Ж  1046',  matchstr(out, '\C\<Z%\D*1046\>'))
438  call assert_equal('u- ū  363',   matchstr(out, '\C\<u-\D*363\>'))
439  call assert_equal('SH ^A   1',   matchstr(out, '\C\<SH\D*1\>'))
440  call assert_notmatch('Latin supplement', out)
441
442  let out_bang_without_custom = execute(':digraph!')
443  digraph lt 60
444  let out_bang_with_custom = execute(':digraph!')
445  call assert_notmatch('lt', out_bang_without_custom)
446  call assert_match("^\n"
447        \        .. "NU ^@  10 .*\n"
448        \        .. "Latin supplement\n"
449        \        .. "!I ¡  161 .*\n"
450        \        .. ".*\n"
451        \        .. 'Custom\n.*\<lt <   60\>', out_bang_with_custom)
452  bw!
453endfunc
454
455func Test_loadkeymap()
456  CheckFeature keymap
457  new
458  set keymap=czech
459  set iminsert=0
460  call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
461  call assert_equal("|'é+ěščřžýáíé'", getline('.'))
462  " reset keymap and encoding option
463  set keymap=
464  bw!
465endfunc
466
467func Test_digraph_cmndline()
468  " Create digraph on commandline
469  call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
470  call assert_equal('"€', @:)
471
472  " Canceling a CTRL-K on the cmdline
473  call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
474  call assert_equal('"ab', @:)
475endfunc
476
477func Test_show_digraph()
478  new
479  call Put_Dig("e=")
480  call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
481  bwipe!
482endfunc
483
484func Test_show_digraph_cp1251()
485  new
486  set encoding=cp1251
487  call Put_Dig("='")
488  call assert_equal("\n<\xfa>  <|z>  <M-z>  250,  Hex fa,  Oct 372, Digr ='", execute('ascii'))
489  set encoding=utf-8
490  bwipe!
491endfunc
492
493" Test for error in a keymap file
494func Test_loadkeymap_error()
495  CheckFeature keymap
496  call assert_fails('loadkeymap', 'E105:')
497  call writefile(['loadkeymap', 'a'], 'Xkeymap')
498  call assert_fails('source Xkeymap', 'E791:')
499  call delete('Xkeymap')
500endfunc
501
502" Test for the characters displayed on the screen when entering a digraph
503func Test_entering_digraph()
504  CheckRunVimInTerminal
505  let buf = RunVimInTerminal('', {'rows': 6})
506  call term_sendkeys(buf, "i\<C-K>")
507  call TermWait(buf)
508  call assert_equal('?', term_getline(buf, 1))
509  call term_sendkeys(buf, "1")
510  call TermWait(buf)
511  call assert_equal('1', term_getline(buf, 1))
512  call term_sendkeys(buf, "2")
513  call TermWait(buf)
514  call assert_equal('½', term_getline(buf, 1))
515  call StopVimInTerminal(buf)
516endfunc
517
518" vim: shiftwidth=2 sts=2 expandtab
519