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