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