blob: c53b1bcc014f134f71431a772821052dbc917275 [file] [log] [blame]
Bram Moolenaar397eadb2016-07-20 22:01:12 +02001" Tests for digraphs
2
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02003CheckFeature digraphs
Bram Moolenaar397eadb2016-07-20 22:01:12 +02004
Bram Moolenaar5f73ef82018-02-27 21:09:30 +01005func Put_Dig(chars)
Bram Moolenaar397eadb2016-07-20 22:01:12 +02006 exe "norm! o\<c-k>".a:chars
7endfu
8
Bram Moolenaar5f73ef82018-02-27 21:09:30 +01009func Put_Dig_BS(char1, char2)
Bram Moolenaar397eadb2016-07-20 22:01:12 +020010 exe "norm! o".a:char1."\<bs>".a:char2
11endfu
12
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010013func Test_digraphs()
Bram Moolenaar397eadb2016-07-20 22:01:12 +020014 new
15 call Put_Dig("00")
16 call assert_equal("", getline('.'))
17 " not a digraph
18 call Put_Dig("el")
19 call assert_equal("l", getline('.'))
20 call Put_Dig("ht")
21 call assert_equal("þ", getline('.'))
22 " digraph "ab" is the same as "ba"
23 call Put_Dig("ab")
24 call Put_Dig("ba")
25 call assert_equal(["",""], getline(line('.')-1,line('.')))
26 " Euro sign
27 call Put_Dig("e=")
28 call Put_Dig("=e")
29 call Put_Dig("Eu")
30 call Put_Dig("uE")
31 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
32 " Rouble sign
33 call Put_Dig("R=")
34 call Put_Dig("=R")
35 call Put_Dig("=P")
36 call Put_Dig("P=")
37 call assert_equal(['Р']+repeat([""],2)+['П'], getline(line('.')-3,line('.')))
Jonathan Wright47416d12023-10-20 12:08:09 +020038 " Quadruple prime
39 call Put_Dig("'4")
40 call assert_equal("⁗", getline('.'))
Hans Ginzel3a621182025-02-01 16:15:11 +010041 " APPROACHES THE LIMIT
42 call Put_Dig(".=")
43 call assert_equal("", getline('.'))
Bram Moolenaar397eadb2016-07-20 22:01:12 +020044 " Not a digraph
45 call Put_Dig("a\<bs>")
46 call Put_Dig("\<bs>a")
47 call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
48 " Grave
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 " Acute accent
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('.')))
Dominique Pelle81b573d2022-03-22 21:14:55 +000058 " Circumflex
Bram Moolenaar397eadb2016-07-20 22:01:12 +020059 call Put_Dig("a>")
60 call Put_Dig(">e")
61 call Put_Dig("b>") " not defined
62 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
63 " Tilde
64 call Put_Dig("o~")
65 call Put_Dig("~u") " not defined
66 call Put_Dig("z~") " not defined
67 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
68 " Tilde
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 " Macron
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 " Breve
79 call Put_Dig("o(")
80 call Put_Dig("(u")
81 call Put_Dig("z(") " not defined
82 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
83 " Dot above
84 call Put_Dig("b.")
85 call Put_Dig(".e")
86 call Put_Dig("a.") " not defined
87 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +010088 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +020089 call Put_Dig("a:")
90 call Put_Dig(":u")
91 call Put_Dig("b:") " not defined
92 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
93 " Cedilla
94 call Put_Dig("',")
95 call Put_Dig(",C")
96 call Put_Dig("b,") " not defined
97 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
98 " Underline
99 call Put_Dig("B_")
100 call Put_Dig("_t")
101 call Put_Dig("a_") " not defined
102 call assert_equal(['', '', '_'], getline(line('.')-2,line('.')))
103 " Stroke
104 call Put_Dig("j/")
105 call Put_Dig("/l")
106 call Put_Dig("b/") " not defined
107 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
108 " Double acute
109 call Put_Dig('O"')
110 call Put_Dig('"y')
111 call Put_Dig('b"') " not defined
112 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
113 " Ogonek
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 " Caron
119 call Put_Dig('u<')
120 call Put_Dig('<E')
121 call Put_Dig('b<') " not defined
122 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
123 " Ring above
124 call Put_Dig('u0')
125 call Put_Dig('0E') " not defined
126 call Put_Dig('b0') " not defined
127 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
128 " Hook
129 call Put_Dig('u2')
130 call Put_Dig('2E')
131 call Put_Dig('b2') " not defined
132 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
133 " Horn
134 call Put_Dig('u9')
135 call Put_Dig('9E') " not defined
136 call Put_Dig('b9') " not defined
137 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
138 " Cyrillic
139 call Put_Dig('u=')
140 call Put_Dig('=b')
141 call Put_Dig('=_')
142 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
143 " Greek
144 call Put_Dig('u*')
145 call Put_Dig('*b')
146 call Put_Dig('*_')
147 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
148 " Greek/Cyrillic special
149 call Put_Dig('u%')
150 call Put_Dig('%b') " not defined
151 call Put_Dig('%_') " not defined
152 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
153 " Arabic
154 call Put_Dig('u+')
155 call Put_Dig('+b')
156 call Put_Dig('+_') " japanese industrial symbol
157 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
158 " Hebrew
159 call Put_Dig('Q+')
160 call Put_Dig('+B')
161 call Put_Dig('+X')
162 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
163 " Latin
164 call Put_Dig('a3')
165 call Put_Dig('A3')
166 call Put_Dig('3X')
167 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
168 " Bopomofo
169 call Put_Dig('a4')
170 call Put_Dig('A4')
171 call Put_Dig('4X')
172 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
173 " Hiragana
174 call Put_Dig('a5')
175 call Put_Dig('A5')
176 call Put_Dig('5X')
177 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
178 " Katakana
179 call Put_Dig('a6')
180 call Put_Dig('A6')
181 call Put_Dig('6X')
182 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
183 " Superscripts
184 call Put_Dig('1S')
185 call Put_Dig('2S')
186 call Put_Dig('3S')
187 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
188 " Subscripts
189 call Put_Dig('1s')
190 call Put_Dig('2s')
191 call Put_Dig('3s')
192 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
193 " Eszet (only lowercase)
194 call Put_Dig("ss")
195 call Put_Dig("SS") " start of string
196 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
197 " High bit set
198 call Put_Dig("a ")
199 call Put_Dig(" A")
200 call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
201 " Escape is not part of a digraph
202 call Put_Dig("a\<esc>")
203 call Put_Dig("\<esc>A")
204 call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
205 " define some custom digraphs
206 " old: 00
207 " old: el l
208 digraph 00 9216
209 digraph el 0252
210 call Put_Dig("00")
211 call Put_Dig("el")
212 " Reset digraphs
213 digraph 00 8734
214 digraph el 108
215 call Put_Dig("00")
216 call Put_Dig("el")
217 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200218 call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
219 call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
Bram Moolenaar067297e2020-04-13 19:55:50 +0200220 call assert_fails('digraph xy z', 'E39:')
mityu61065042021-07-19 20:07:21 +0200221 call assert_fails('digraph x', 'E1214:')
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200222 bw!
223endfunc
224
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100225func Test_digraphs_option()
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200226 " reset whichwrap option, so that testing <esc><bs>A works,
227 " without moving up a line
Bram Moolenaardfd63e32016-07-21 10:11:03 +0200228 set digraph ww=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200229 new
230 call Put_Dig_BS("0","0")
231 call assert_equal("∞", getline('.'))
232 " not a digraph
233 call Put_Dig_BS("e","l")
234 call assert_equal("l", getline('.'))
235 call Put_Dig_BS("h","t")
236 call assert_equal("þ", getline('.'))
237 " digraph "ab" is the same as "ba"
238 call Put_Dig_BS("a","b")
239 call Put_Dig_BS("b","a")
240 call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
241 " Euro sign
242 call Put_Dig_BS("e","=")
243 call Put_Dig_BS("=","e")
244 call Put_Dig_BS("E","u")
245 call Put_Dig_BS("u","E")
246 call assert_equal(['е']+repeat([""],3), getline(line('.')-3,line('.')))
247 " Rouble sign
248 call Put_Dig_BS("R","=")
249 call Put_Dig_BS("=","R")
250 call Put_Dig_BS("=","P")
251 call Put_Dig_BS("P","=")
252 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
253 " Not a digraph: this is different from <c-k>!
Luca Saccarola959ef612024-12-01 16:25:53 +0100254 let _bs = &bs
255 set bs=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200256 call Put_Dig_BS("a","\<bs>")
257 call Put_Dig_BS("\<bs>","a")
258 call assert_equal(['','a'], getline(line('.')-1,line('.')))
Luca Saccarola959ef612024-12-01 16:25:53 +0100259 let &bs = _bs
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200260 " Grave
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 " Acute accent
266 call Put_Dig_BS("a","'")
267 call Put_Dig_BS("'","e")
268 call Put_Dig_BS("b","'") " not defined
269 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
270 " Cicumflex
271 call Put_Dig_BS("a",">")
272 call Put_Dig_BS(">","e")
273 call Put_Dig_BS("b",">") " not defined
274 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
275 " Tilde
276 call Put_Dig_BS("o","~")
277 call Put_Dig_BS("~","u") " not defined
278 call Put_Dig_BS("z","~") " not defined
279 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
280 " Tilde
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 " Macron
286 call Put_Dig_BS("o","-")
287 call Put_Dig_BS("-","u")
288 call Put_Dig_BS("z","-") " not defined
289 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
290 " Breve
291 call Put_Dig_BS("o","(")
292 call Put_Dig_BS("(","u")
293 call Put_Dig_BS("z","(") " not defined
294 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
295 " Dot above
296 call Put_Dig_BS("b",".")
297 call Put_Dig_BS(".","e")
298 call Put_Dig_BS("a",".") " not defined
299 call assert_equal(['', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +0100300 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200301 call Put_Dig_BS("a",":")
302 call Put_Dig_BS(":","u")
303 call Put_Dig_BS("b",":") " not defined
304 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
305 " Cedilla
306 call Put_Dig_BS("'",",")
307 call Put_Dig_BS(",","C")
308 call Put_Dig_BS("b",",") " not defined
309 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
310 " Underline
311 call Put_Dig_BS("B","_")
312 call Put_Dig_BS("_","t")
313 call Put_Dig_BS("a","_") " not defined
314 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
315 " Stroke
316 call Put_Dig_BS("j","/")
317 call Put_Dig_BS("/","l")
318 call Put_Dig_BS("b","/") " not defined
319 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
320 " Double acute
321 call Put_Dig_BS('O','"')
322 call Put_Dig_BS('"','y')
323 call Put_Dig_BS('b','"') " not defined
324 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
325 " Ogonek
326 call Put_Dig_BS('u',';')
327 call Put_Dig_BS(';','E')
328 call Put_Dig_BS('b',';') " not defined
329 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
330 " Caron
331 call Put_Dig_BS('u','<')
332 call Put_Dig_BS('<','E')
333 call Put_Dig_BS('b','<') " not defined
334 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
335 " Ring above
336 call Put_Dig_BS('u','0')
337 call Put_Dig_BS('0','E') " not defined
338 call Put_Dig_BS('b','0') " not defined
339 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
340 " Hook
341 call Put_Dig_BS('u','2')
342 call Put_Dig_BS('2','E')
343 call Put_Dig_BS('b','2') " not defined
344 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
345 " Horn
346 call Put_Dig_BS('u','9')
347 call Put_Dig_BS('9','E') " not defined
348 call Put_Dig_BS('b','9') " not defined
349 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
350 " Cyrillic
351 call Put_Dig_BS('u','=')
352 call Put_Dig_BS('=','b')
353 call Put_Dig_BS('=','_')
354 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
355 " Greek
356 call Put_Dig_BS('u','*')
357 call Put_Dig_BS('*','b')
358 call Put_Dig_BS('*','_')
359 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
360 " Greek/Cyrillic special
361 call Put_Dig_BS('u','%')
362 call Put_Dig_BS('%','b') " not defined
363 call Put_Dig_BS('%','_') " not defined
364 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
365 " Arabic
366 call Put_Dig_BS('u','+')
367 call Put_Dig_BS('+','b')
368 call Put_Dig_BS('+','_') " japanese industrial symbol
369 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
370 " Hebrew
371 call Put_Dig_BS('Q','+')
372 call Put_Dig_BS('+','B')
373 call Put_Dig_BS('+','X')
374 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
375 " Latin
376 call Put_Dig_BS('a','3')
377 call Put_Dig_BS('A','3')
378 call Put_Dig_BS('3','X')
379 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
380 " Bopomofo
381 call Put_Dig_BS('a','4')
382 call Put_Dig_BS('A','4')
383 call Put_Dig_BS('4','X')
384 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
385 " Hiragana
386 call Put_Dig_BS('a','5')
387 call Put_Dig_BS('A','5')
388 call Put_Dig_BS('5','X')
389 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
390 " Katakana
391 call Put_Dig_BS('a','6')
392 call Put_Dig_BS('A','6')
393 call Put_Dig_BS('6','X')
394 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
395 " Superscripts
396 call Put_Dig_BS('1','S')
397 call Put_Dig_BS('2','S')
398 call Put_Dig_BS('3','S')
399 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
400 " Subscripts
401 call Put_Dig_BS('1','s')
402 call Put_Dig_BS('2','s')
403 call Put_Dig_BS('3','s')
404 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
405 " Eszet (only lowercase)
406 call Put_Dig_BS("s","s")
407 call Put_Dig_BS("S","S") " start of string
408 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
409 " High bit set (different from <c-k>)
410 call Put_Dig_BS("a"," ")
411 call Put_Dig_BS(" ","A")
412 call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
413 " Escape is not part of a digraph (different from <c-k>)
414 call Put_Dig_BS("a","\<esc>")
415 call Put_Dig_BS("\<esc>","A")
416 call assert_equal(['', ''], getline(line('.')-1,line('.')))
417 " define some custom digraphs
418 " old: 00 ∞
419 " old: el l
420 digraph 00 9216
421 digraph el 0252
422 call Put_Dig_BS("0","0")
423 call Put_Dig_BS("e","l")
424 " Reset digraphs
425 digraph 00 8734
426 digraph el 108
427 call Put_Dig_BS("0","0")
428 call Put_Dig_BS("e","l")
429 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200430 set nodigraph ww&vim
431 bw!
432endfunc
433
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100434func Test_digraphs_output()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200435 new
436 let out = execute(':digraph')
437 call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>'))
438 call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>'))
439 call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>'))
440 call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>'))
441 call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>'))
442 call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
443 call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>'))
444 call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>'))
445 call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>'))
446 call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>'))
Bram Moolenaare3242342020-04-13 19:46:43 +0200447 call assert_notmatch('Latin supplement', out)
448
449 let out_bang_without_custom = execute(':digraph!')
450 digraph lt 60
451 let out_bang_with_custom = execute(':digraph!')
452 call assert_notmatch('lt', out_bang_without_custom)
453 call assert_match("^\n"
454 \ .. "NU ^@ 10 .*\n"
455 \ .. "Latin supplement\n"
456 \ .. "!I ¡ 161 .*\n"
457 \ .. ".*\n"
458 \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200459 bw!
460endfunc
461
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100462func Test_loadkeymap()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200463 CheckFeature keymap
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200464 new
465 set keymap=czech
466 set iminsert=0
467 call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
468 call assert_equal("|'é+ěščřžýáíé'", getline('.'))
469 " reset keymap and encoding option
470 set keymap=
471 bw!
472endfunc
473
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100474func Test_digraph_cmndline()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200475 " Create digraph on commandline
Bram Moolenaar91ffc8a2020-03-02 20:54:22 +0100476 call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
477 call assert_equal('"€', @:)
478
479 " Canceling a CTRL-K on the cmdline
480 call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
481 call assert_equal('"ab', @:)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200482endfunc
483
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100484func Test_show_digraph()
485 new
486 call Put_Dig("e=")
487 call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
488 bwipe!
489endfunc
490
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200491func Test_show_digraph_cp1251()
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200492 new
493 set encoding=cp1251
494 call Put_Dig("='")
495 call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii'))
496 set encoding=utf-8
497 bwipe!
498endfunc
499
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200500" Test for error in a keymap file
501func Test_loadkeymap_error()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200502 CheckFeature keymap
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200503 call assert_fails('loadkeymap', 'E105:')
Bram Moolenaar59173412022-09-20 22:01:33 +0100504 call writefile(['loadkeymap', 'a'], 'Xkeymap', 'D')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200505 call assert_fails('source Xkeymap', 'E791:')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200506endfunc
507
Bram Moolenaar8c524f72020-06-21 13:23:45 +0200508" Test for the characters displayed on the screen when entering a digraph
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200509func Test_entering_digraph()
510 CheckRunVimInTerminal
511 let buf = RunVimInTerminal('', {'rows': 6})
512 call term_sendkeys(buf, "i\<C-K>")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200513 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200514 call assert_equal('?', term_getline(buf, 1))
515 call term_sendkeys(buf, "1")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200516 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200517 call assert_equal('1', term_getline(buf, 1))
518 call term_sendkeys(buf, "2")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200519 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200520 call assert_equal('½', term_getline(buf, 1))
521 call StopVimInTerminal(buf)
522endfunc
523
h-east29b85712021-07-26 21:54:04 +0200524func Test_digraph_set_function()
mityu61065042021-07-19 20:07:21 +0200525 new
h-east29b85712021-07-26 21:54:04 +0200526 call digraph_set('aa', 'あ')
mityu61065042021-07-19 20:07:21 +0200527 call Put_Dig('aa')
528 call assert_equal('あ', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200529 call digraph_set(' i', 'い')
mityu61065042021-07-19 20:07:21 +0200530 call Put_Dig(' i')
531 call assert_equal('い', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200532 call digraph_set(' ', 'う')
mityu61065042021-07-19 20:07:21 +0200533 call Put_Dig(' ')
534 call assert_equal('う', getline('$'))
535
h-east29b85712021-07-26 21:54:04 +0200536 eval 'aa'->digraph_set('え')
mityu61065042021-07-19 20:07:21 +0200537 call Put_Dig('aa')
538 call assert_equal('え', getline('$'))
539
h-east29b85712021-07-26 21:54:04 +0200540 call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa')
541 call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b')
542 call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ')
543 call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ')
544 call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: か' .. nr2char(0x3099))
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200545 call assert_fails('call digraph_set(test_null_string(), "い")', 'E1214: Digraph must be just two characters')
546 call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200547 bwipe!
548endfunc
549
h-east29b85712021-07-26 21:54:04 +0200550func Test_digraph_get_function()
mityu61065042021-07-19 20:07:21 +0200551 " Built-in digraphs
h-east29b85712021-07-26 21:54:04 +0200552 call assert_equal('∞', digraph_get('00'))
mityu61065042021-07-19 20:07:21 +0200553
554 " User-defined digraphs
h-east29b85712021-07-26 21:54:04 +0200555 call digraph_set('aa', 'あ')
556 call digraph_set(' i', 'い')
557 call digraph_set(' ', 'う')
558 call assert_equal('あ', digraph_get('aa'))
559 call assert_equal('あ', 'aa'->digraph_get())
560 call assert_equal('い', digraph_get(' i'))
561 call assert_equal('う', digraph_get(' '))
562 call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa')
563 call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200564 call assert_fails('call digraph_get(test_null_string())', 'E1214: Digraph must be just two characters:')
565 call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200566endfunc
567
h-east29b85712021-07-26 21:54:04 +0200568func Test_digraph_get_function_encode()
mityu61065042021-07-19 20:07:21 +0200569 CheckFeature iconv
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200570
mityu61065042021-07-19 20:07:21 +0200571 let testcases = {
572 \'00': '',
573 \'aa': 'あ',
574 \}
575 for [key, ch] in items(testcases)
h-east29b85712021-07-26 21:54:04 +0200576 call digraph_set(key, ch)
mityu61065042021-07-19 20:07:21 +0200577 set encoding=japan
h-east29b85712021-07-26 21:54:04 +0200578 call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key))
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200579 set encoding=utf-8
mityu61065042021-07-19 20:07:21 +0200580 endfor
581endfunc
582
h-east29b85712021-07-26 21:54:04 +0200583func Test_digraph_setlist_function()
584 call digraph_setlist([['aa', 'き'], ['bb', 'く']])
585 call assert_equal('き', digraph_get('aa'))
586 call assert_equal('く', digraph_get('bb'))
mityu61065042021-07-19 20:07:21 +0200587
h-east29b85712021-07-26 21:54:04 +0200588 call assert_fails('call digraph_setlist([[]])', 'E1216:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200589 call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:')
h-east29b85712021-07-26 21:54:04 +0200590 call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200591 call assert_fails('call digraph_setlist([test_null_list()])', 'E1216:')
592 call assert_fails('call digraph_setlist({})', 'E1216:')
593 call assert_fails('call digraph_setlist([{}])', 'E1216:')
594 call assert_true(digraph_setlist(test_null_list()))
mityu61065042021-07-19 20:07:21 +0200595endfunc
596
h-east29b85712021-07-26 21:54:04 +0200597func Test_digraph_getlist_function()
mityu61065042021-07-19 20:07:21 +0200598 " Make sure user-defined digraphs are defined
h-east29b85712021-07-26 21:54:04 +0200599 call digraph_setlist([['aa', 'き'], ['bb', 'く']])
mityu61065042021-07-19 20:07:21 +0200600
h-east29b85712021-07-26 21:54:04 +0200601 for pair in digraph_getlist(1)
zeertzjq757f3212024-04-15 19:01:04 +0200602 call assert_equal(pair[1], digraph_get(pair[0]))
mityu61065042021-07-19 20:07:21 +0200603 endfor
604
605 " We don't know how many digraphs are registered before, so check the number
606 " of digraphs returned.
h-east29b85712021-07-26 21:54:04 +0200607 call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len())
zeertzjq757f3212024-04-15 19:01:04 +0200608 call assert_notequal(digraph_getlist()->len(), digraph_getlist(1)->len())
Yegappan Lakshmanan198ada32024-12-02 19:58:51 +0100609 call assert_equal(digraph_getlist()->len(), digraph_getlist(v:false)->len())
610 call assert_notequal(digraph_getlist()->len(), digraph_getlist(v:true)->len())
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200611
Yegappan Lakshmanan198ada32024-12-02 19:58:51 +0100612 call assert_fails('call digraph_getlist(0z12)', 'E1212: Bool required for argument 1')
mityu61065042021-07-19 20:07:21 +0200613endfunc
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200614
615
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200616" vim: shiftwidth=2 sts=2 expandtab