blob: 3312faf31f62d5bf45a00f45204f5f6ddb4c0403 [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 Moolenaar845e0ee2020-06-20 16:05:32 +02005source term_util.vim
Bram Moolenaar397eadb2016-07-20 22:01:12 +02006
Bram Moolenaar5f73ef82018-02-27 21:09:30 +01007func Put_Dig(chars)
Bram Moolenaar397eadb2016-07-20 22:01:12 +02008 exe "norm! o\<c-k>".a:chars
9endfu
10
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010011func Put_Dig_BS(char1, char2)
Bram Moolenaar397eadb2016-07-20 22:01:12 +020012 exe "norm! o".a:char1."\<bs>".a:char2
13endfu
14
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010015func Test_digraphs()
Bram Moolenaar397eadb2016-07-20 22:01:12 +020016 new
17 call Put_Dig("00")
18 call assert_equal("", getline('.'))
19 " not a digraph
20 call Put_Dig("el")
21 call assert_equal("l", getline('.'))
22 call Put_Dig("ht")
23 call assert_equal("þ", getline('.'))
24 " digraph "ab" is the same as "ba"
25 call Put_Dig("ab")
26 call Put_Dig("ba")
27 call assert_equal(["",""], getline(line('.')-1,line('.')))
28 " Euro sign
29 call Put_Dig("e=")
30 call Put_Dig("=e")
31 call Put_Dig("Eu")
32 call Put_Dig("uE")
33 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
34 " Rouble sign
35 call Put_Dig("R=")
36 call Put_Dig("=R")
37 call Put_Dig("=P")
38 call Put_Dig("P=")
39 call assert_equal(['Р']+repeat([""],2)+['П'], getline(line('.')-3,line('.')))
Jonathan Wright47416d12023-10-20 12:08:09 +020040 " Quadruple prime
41 call Put_Dig("'4")
42 call assert_equal("⁗", getline('.'))
Bram Moolenaar397eadb2016-07-20 22:01:12 +020043 " 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('.')))
Dominique Pelle81b573d2022-03-22 21:14:55 +000057 " Circumflex
Bram Moolenaar397eadb2016-07-20 22:01:12 +020058 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('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +010087 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +020088 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('.')))
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200217 call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
218 call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
Bram Moolenaar067297e2020-04-13 19:55:50 +0200219 call assert_fails('digraph xy z', 'E39:')
mityu61065042021-07-19 20:07:21 +0200220 call assert_fails('digraph x', 'E1214:')
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200221 bw!
222endfunc
223
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100224func Test_digraphs_option()
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200225 " reset whichwrap option, so that testing <esc><bs>A works,
226 " without moving up a line
Bram Moolenaardfd63e32016-07-21 10:11:03 +0200227 set digraph ww=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200228 new
229 call Put_Dig_BS("0","0")
230 call assert_equal("", getline('.'))
231 " not a digraph
232 call Put_Dig_BS("e","l")
233 call assert_equal("l", getline('.'))
234 call Put_Dig_BS("h","t")
235 call assert_equal("þ", getline('.'))
236 " digraph "ab" is the same as "ba"
237 call Put_Dig_BS("a","b")
238 call Put_Dig_BS("b","a")
239 call assert_equal(["",""], getline(line('.')-1,line('.')))
240 " Euro sign
241 call Put_Dig_BS("e","=")
242 call Put_Dig_BS("=","e")
243 call Put_Dig_BS("E","u")
244 call Put_Dig_BS("u","E")
245 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
246 " Rouble sign
247 call Put_Dig_BS("R","=")
248 call Put_Dig_BS("=","R")
249 call Put_Dig_BS("=","P")
250 call Put_Dig_BS("P","=")
251 call assert_equal(['Р']+repeat([""],2)+['П'], getline(line('.')-3,line('.')))
252 " Not a digraph: this is different from <c-k>!
253 call Put_Dig_BS("a","\<bs>")
254 call Put_Dig_BS("\<bs>","a")
255 call assert_equal(['','a'], getline(line('.')-1,line('.')))
256 " Grave
257 call Put_Dig_BS("a","!")
258 call Put_Dig_BS("!","e")
259 call Put_Dig_BS("b","!") " not defined
260 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
261 " Acute accent
262 call Put_Dig_BS("a","'")
263 call Put_Dig_BS("'","e")
264 call Put_Dig_BS("b","'") " not defined
265 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
266 " Cicumflex
267 call Put_Dig_BS("a",">")
268 call Put_Dig_BS(">","e")
269 call Put_Dig_BS("b",">") " not defined
270 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
271 " Tilde
272 call Put_Dig_BS("o","~")
273 call Put_Dig_BS("~","u") " not defined
274 call Put_Dig_BS("z","~") " not defined
275 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
276 " Tilde
277 call Put_Dig_BS("o","?")
278 call Put_Dig_BS("?","u")
279 call Put_Dig_BS("z","?") " not defined
280 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
281 " Macron
282 call Put_Dig_BS("o","-")
283 call Put_Dig_BS("-","u")
284 call Put_Dig_BS("z","-") " not defined
285 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
286 " Breve
287 call Put_Dig_BS("o","(")
288 call Put_Dig_BS("(","u")
289 call Put_Dig_BS("z","(") " not defined
290 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
291 " Dot above
292 call Put_Dig_BS("b",".")
293 call Put_Dig_BS(".","e")
294 call Put_Dig_BS("a",".") " not defined
295 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +0100296 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200297 call Put_Dig_BS("a",":")
298 call Put_Dig_BS(":","u")
299 call Put_Dig_BS("b",":") " not defined
300 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
301 " Cedilla
302 call Put_Dig_BS("'",",")
303 call Put_Dig_BS(",","C")
304 call Put_Dig_BS("b",",") " not defined
305 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
306 " Underline
307 call Put_Dig_BS("B","_")
308 call Put_Dig_BS("_","t")
309 call Put_Dig_BS("a","_") " not defined
310 call assert_equal(['', '', '_'], getline(line('.')-2,line('.')))
311 " Stroke
312 call Put_Dig_BS("j","/")
313 call Put_Dig_BS("/","l")
314 call Put_Dig_BS("b","/") " not defined
315 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
316 " Double acute
317 call Put_Dig_BS('O','"')
318 call Put_Dig_BS('"','y')
319 call Put_Dig_BS('b','"') " not defined
320 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
321 " Ogonek
322 call Put_Dig_BS('u',';')
323 call Put_Dig_BS(';','E')
324 call Put_Dig_BS('b',';') " not defined
325 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
326 " Caron
327 call Put_Dig_BS('u','<')
328 call Put_Dig_BS('<','E')
329 call Put_Dig_BS('b','<') " not defined
330 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
331 " Ring above
332 call Put_Dig_BS('u','0')
333 call Put_Dig_BS('0','E') " not defined
334 call Put_Dig_BS('b','0') " not defined
335 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
336 " Hook
337 call Put_Dig_BS('u','2')
338 call Put_Dig_BS('2','E')
339 call Put_Dig_BS('b','2') " not defined
340 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
341 " Horn
342 call Put_Dig_BS('u','9')
343 call Put_Dig_BS('9','E') " not defined
344 call Put_Dig_BS('b','9') " not defined
345 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
346 " Cyrillic
347 call Put_Dig_BS('u','=')
348 call Put_Dig_BS('=','b')
349 call Put_Dig_BS('=','_')
350 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
351 " Greek
352 call Put_Dig_BS('u','*')
353 call Put_Dig_BS('*','b')
354 call Put_Dig_BS('*','_')
355 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
356 " Greek/Cyrillic special
357 call Put_Dig_BS('u','%')
358 call Put_Dig_BS('%','b') " not defined
359 call Put_Dig_BS('%','_') " not defined
360 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
361 " Arabic
362 call Put_Dig_BS('u','+')
363 call Put_Dig_BS('+','b')
364 call Put_Dig_BS('+','_') " japanese industrial symbol
365 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
366 " Hebrew
367 call Put_Dig_BS('Q','+')
368 call Put_Dig_BS('+','B')
369 call Put_Dig_BS('+','X')
370 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
371 " Latin
372 call Put_Dig_BS('a','3')
373 call Put_Dig_BS('A','3')
374 call Put_Dig_BS('3','X')
375 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
376 " Bopomofo
377 call Put_Dig_BS('a','4')
378 call Put_Dig_BS('A','4')
379 call Put_Dig_BS('4','X')
380 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
381 " Hiragana
382 call Put_Dig_BS('a','5')
383 call Put_Dig_BS('A','5')
384 call Put_Dig_BS('5','X')
385 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
386 " Katakana
387 call Put_Dig_BS('a','6')
388 call Put_Dig_BS('A','6')
389 call Put_Dig_BS('6','X')
390 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
391 " Superscripts
392 call Put_Dig_BS('1','S')
393 call Put_Dig_BS('2','S')
394 call Put_Dig_BS('3','S')
395 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
396 " Subscripts
397 call Put_Dig_BS('1','s')
398 call Put_Dig_BS('2','s')
399 call Put_Dig_BS('3','s')
400 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
401 " Eszet (only lowercase)
402 call Put_Dig_BS("s","s")
403 call Put_Dig_BS("S","S") " start of string
404 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
405 " High bit set (different from <c-k>)
406 call Put_Dig_BS("a"," ")
407 call Put_Dig_BS(" ","A")
408 call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
409 " Escape is not part of a digraph (different from <c-k>)
410 call Put_Dig_BS("a","\<esc>")
411 call Put_Dig_BS("\<esc>","A")
412 call assert_equal(['', ''], getline(line('.')-1,line('.')))
413 " define some custom digraphs
414 " old: 00
415 " old: el l
416 digraph 00 9216
417 digraph el 0252
418 call Put_Dig_BS("0","0")
419 call Put_Dig_BS("e","l")
420 " Reset digraphs
421 digraph 00 8734
422 digraph el 108
423 call Put_Dig_BS("0","0")
424 call Put_Dig_BS("e","l")
425 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200426 set nodigraph ww&vim
427 bw!
428endfunc
429
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100430func Test_digraphs_output()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200431 new
432 let out = execute(':digraph')
433 call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>'))
434 call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>'))
435 call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>'))
436 call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>'))
437 call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>'))
438 call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
439 call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>'))
440 call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>'))
441 call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>'))
442 call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>'))
Bram Moolenaare3242342020-04-13 19:46:43 +0200443 call assert_notmatch('Latin supplement', out)
444
445 let out_bang_without_custom = execute(':digraph!')
446 digraph lt 60
447 let out_bang_with_custom = execute(':digraph!')
448 call assert_notmatch('lt', out_bang_without_custom)
449 call assert_match("^\n"
450 \ .. "NU ^@ 10 .*\n"
451 \ .. "Latin supplement\n"
452 \ .. "!I ¡ 161 .*\n"
453 \ .. ".*\n"
454 \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200455 bw!
456endfunc
457
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100458func Test_loadkeymap()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200459 CheckFeature keymap
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200460 new
461 set keymap=czech
462 set iminsert=0
463 call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
464 call assert_equal("|'é+ěščřžýáíé'", getline('.'))
465 " reset keymap and encoding option
466 set keymap=
467 bw!
468endfunc
469
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100470func Test_digraph_cmndline()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200471 " Create digraph on commandline
Bram Moolenaar91ffc8a2020-03-02 20:54:22 +0100472 call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
473 call assert_equal('"€', @:)
474
475 " Canceling a CTRL-K on the cmdline
476 call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
477 call assert_equal('"ab', @:)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200478endfunc
479
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100480func Test_show_digraph()
481 new
482 call Put_Dig("e=")
483 call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
484 bwipe!
485endfunc
486
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200487func Test_show_digraph_cp1251()
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200488 new
489 set encoding=cp1251
490 call Put_Dig("='")
491 call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii'))
492 set encoding=utf-8
493 bwipe!
494endfunc
495
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200496" Test for error in a keymap file
497func Test_loadkeymap_error()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200498 CheckFeature keymap
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200499 call assert_fails('loadkeymap', 'E105:')
Bram Moolenaar59173412022-09-20 22:01:33 +0100500 call writefile(['loadkeymap', 'a'], 'Xkeymap', 'D')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200501 call assert_fails('source Xkeymap', 'E791:')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200502endfunc
503
Bram Moolenaar8c524f72020-06-21 13:23:45 +0200504" Test for the characters displayed on the screen when entering a digraph
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200505func Test_entering_digraph()
506 CheckRunVimInTerminal
507 let buf = RunVimInTerminal('', {'rows': 6})
508 call term_sendkeys(buf, "i\<C-K>")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200509 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200510 call assert_equal('?', term_getline(buf, 1))
511 call term_sendkeys(buf, "1")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200512 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200513 call assert_equal('1', term_getline(buf, 1))
514 call term_sendkeys(buf, "2")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200515 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200516 call assert_equal('½', term_getline(buf, 1))
517 call StopVimInTerminal(buf)
518endfunc
519
h-east29b85712021-07-26 21:54:04 +0200520func Test_digraph_set_function()
mityu61065042021-07-19 20:07:21 +0200521 new
h-east29b85712021-07-26 21:54:04 +0200522 call digraph_set('aa', '')
mityu61065042021-07-19 20:07:21 +0200523 call Put_Dig('aa')
524 call assert_equal('', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200525 call digraph_set(' i', '')
mityu61065042021-07-19 20:07:21 +0200526 call Put_Dig(' i')
527 call assert_equal('', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200528 call digraph_set(' ', '')
mityu61065042021-07-19 20:07:21 +0200529 call Put_Dig(' ')
530 call assert_equal('', getline('$'))
531
h-east29b85712021-07-26 21:54:04 +0200532 eval 'aa'->digraph_set('')
mityu61065042021-07-19 20:07:21 +0200533 call Put_Dig('aa')
534 call assert_equal('', getline('$'))
535
h-east29b85712021-07-26 21:54:04 +0200536 call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa')
537 call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b')
538 call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: ')
539 call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ')
540 call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: ' .. nr2char(0x3099))
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200541 call assert_fails('call digraph_set(test_null_string(), "い")', 'E1214: Digraph must be just two characters')
542 call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200543 bwipe!
544endfunc
545
h-east29b85712021-07-26 21:54:04 +0200546func Test_digraph_get_function()
mityu61065042021-07-19 20:07:21 +0200547 " Built-in digraphs
h-east29b85712021-07-26 21:54:04 +0200548 call assert_equal('', digraph_get('00'))
mityu61065042021-07-19 20:07:21 +0200549
550 " User-defined digraphs
h-east29b85712021-07-26 21:54:04 +0200551 call digraph_set('aa', '')
552 call digraph_set(' i', '')
553 call digraph_set(' ', '')
554 call assert_equal('', digraph_get('aa'))
555 call assert_equal('', 'aa'->digraph_get())
556 call assert_equal('', digraph_get(' i'))
557 call assert_equal('', digraph_get(' '))
558 call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa')
559 call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200560 call assert_fails('call digraph_get(test_null_string())', 'E1214: Digraph must be just two characters:')
561 call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200562endfunc
563
h-east29b85712021-07-26 21:54:04 +0200564func Test_digraph_get_function_encode()
mityu61065042021-07-19 20:07:21 +0200565 CheckFeature iconv
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200566
mityu61065042021-07-19 20:07:21 +0200567 let testcases = {
568 \'00': '∞',
569 \'aa': '',
570 \}
571 for [key, ch] in items(testcases)
h-east29b85712021-07-26 21:54:04 +0200572 call digraph_set(key, ch)
mityu61065042021-07-19 20:07:21 +0200573 set encoding=japan
h-east29b85712021-07-26 21:54:04 +0200574 call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key))
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200575 set encoding=utf-8
mityu61065042021-07-19 20:07:21 +0200576 endfor
577endfunc
578
h-east29b85712021-07-26 21:54:04 +0200579func Test_digraph_setlist_function()
580 call digraph_setlist([['aa', ''], ['bb', '']])
581 call assert_equal('', digraph_get('aa'))
582 call assert_equal('', digraph_get('bb'))
mityu61065042021-07-19 20:07:21 +0200583
h-east29b85712021-07-26 21:54:04 +0200584 call assert_fails('call digraph_setlist([[]])', 'E1216:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200585 call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:')
h-east29b85712021-07-26 21:54:04 +0200586 call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: ')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200587 call assert_fails('call digraph_setlist([test_null_list()])', 'E1216:')
588 call assert_fails('call digraph_setlist({})', 'E1216:')
589 call assert_fails('call digraph_setlist([{}])', 'E1216:')
590 call assert_true(digraph_setlist(test_null_list()))
mityu61065042021-07-19 20:07:21 +0200591endfunc
592
h-east29b85712021-07-26 21:54:04 +0200593func Test_digraph_getlist_function()
mityu61065042021-07-19 20:07:21 +0200594 " Make sure user-defined digraphs are defined
h-east29b85712021-07-26 21:54:04 +0200595 call digraph_setlist([['aa', ''], ['bb', '']])
mityu61065042021-07-19 20:07:21 +0200596
h-east29b85712021-07-26 21:54:04 +0200597 for pair in digraph_getlist(1)
zeertzjq757f3212024-04-15 19:01:04 +0200598 call assert_equal(pair[1], digraph_get(pair[0]))
mityu61065042021-07-19 20:07:21 +0200599 endfor
600
601 " We don't know how many digraphs are registered before, so check the number
602 " of digraphs returned.
h-east29b85712021-07-26 21:54:04 +0200603 call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len())
zeertzjq757f3212024-04-15 19:01:04 +0200604 call assert_notequal(digraph_getlist()->len(), digraph_getlist(1)->len())
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200605
606 call assert_fails('call digraph_getlist(0z12)', 'E974: Using a Blob as a Number')
mityu61065042021-07-19 20:07:21 +0200607endfunc
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200608
609
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200610" vim: shiftwidth=2 sts=2 expandtab