blob: 30dc9a468337bd9f2f87982cc128cc8738ea666b [file] [log] [blame]
Bram Moolenaar397eadb2016-07-20 22:01:12 +02001" Tests for digraphs
2
3if !has("digraphs") || !has("multi_byte")
4 finish
5endif
Bram Moolenaarc3c766e2017-03-08 22:55:19 +01006set belloff=all
Bram Moolenaar397eadb2016-07-20 22:01:12 +02007
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()
Bram Moolenaar397eadb2016-07-20 22:01:12 +020017 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('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200215 bw!
216endfunc
217
218func! Test_digraphs_option()
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200219 " reset whichwrap option, so that testing <esc><bs>A works,
220 " without moving up a line
Bram Moolenaardfd63e32016-07-21 10:11:03 +0200221 set digraph ww=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200222 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('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200420 set nodigraph ww&vim
421 bw!
422endfunc
423
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200424func! 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()
Bram Moolenaarf3621352016-07-21 22:03:02 +0200441 if !has('keymap')
442 return
443 endif
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200444 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
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200462" vim: shiftwidth=2 sts=2 expandtab