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