blob: 6435c86fa4927ba1c065db0634db5eef7efa7608 [file] [log] [blame]
Bram Moolenaar397eadb2016-07-20 22:01:12 +02001" Tests for digraphs
2
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02003source check.vim
4CheckFeature digraphs
Bram Moolenaar397eadb2016-07-20 22:01:12 +02005
Bram Moolenaar5f73ef82018-02-27 21:09:30 +01006func Put_Dig(chars)
Bram Moolenaar397eadb2016-07-20 22:01:12 +02007 exe "norm! o\<c-k>".a:chars
8endfu
9
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010010func Put_Dig_BS(char1, char2)
Bram Moolenaar397eadb2016-07-20 22:01:12 +020011 exe "norm! o".a:char1."\<bs>".a:char2
12endfu
13
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010014func Test_digraphs()
Bram Moolenaar397eadb2016-07-20 22:01:12 +020015 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 " Diaresis
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('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200213 bw!
214endfunc
215
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100216func Test_digraphs_option()
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200217 " reset whichwrap option, so that testing <esc><bs>A works,
218 " without moving up a line
Bram Moolenaardfd63e32016-07-21 10:11:03 +0200219 set digraph ww=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200220 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 " Diaresis
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('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200418 set nodigraph ww&vim
419 bw!
420endfunc
421
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100422func Test_digraphs_output()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200423 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
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100438func Test_loadkeymap()
Bram Moolenaarf3621352016-07-21 22:03:02 +0200439 if !has('keymap')
440 return
441 endif
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200442 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
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100452func Test_digraph_cmndline()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200453 " 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
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100460func 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
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200467func Test_show_digraph_cp1251()
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200468 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
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200476" vim: shiftwidth=2 sts=2 expandtab