blob: 29fa3001826790fd207d906a5923035c1b20a483 [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('.'))
Hans Ginzel3a621182025-02-01 16:15:11 +010043 " APPROACHES THE LIMIT
44 call Put_Dig(".=")
45 call assert_equal("", getline('.'))
Bram Moolenaar397eadb2016-07-20 22:01:12 +020046 " Not a digraph
47 call Put_Dig("a\<bs>")
48 call Put_Dig("\<bs>a")
49 call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
50 " Grave
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 " Acute accent
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('.')))
Dominique Pelle81b573d2022-03-22 21:14:55 +000060 " Circumflex
Bram Moolenaar397eadb2016-07-20 22:01:12 +020061 call Put_Dig("a>")
62 call Put_Dig(">e")
63 call Put_Dig("b>") " not defined
64 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
65 " Tilde
66 call Put_Dig("o~")
67 call Put_Dig("~u") " not defined
68 call Put_Dig("z~") " not defined
69 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
70 " Tilde
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 " Macron
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 " Breve
81 call Put_Dig("o(")
82 call Put_Dig("(u")
83 call Put_Dig("z(") " not defined
84 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
85 " Dot above
86 call Put_Dig("b.")
87 call Put_Dig(".e")
88 call Put_Dig("a.") " not defined
89 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +010090 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +020091 call Put_Dig("a:")
92 call Put_Dig(":u")
93 call Put_Dig("b:") " not defined
94 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
95 " Cedilla
96 call Put_Dig("',")
97 call Put_Dig(",C")
98 call Put_Dig("b,") " not defined
99 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
100 " Underline
101 call Put_Dig("B_")
102 call Put_Dig("_t")
103 call Put_Dig("a_") " not defined
104 call assert_equal(['', '', '_'], getline(line('.')-2,line('.')))
105 " Stroke
106 call Put_Dig("j/")
107 call Put_Dig("/l")
108 call Put_Dig("b/") " not defined
109 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
110 " Double acute
111 call Put_Dig('O"')
112 call Put_Dig('"y')
113 call Put_Dig('b"') " not defined
114 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
115 " Ogonek
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 " Caron
121 call Put_Dig('u<')
122 call Put_Dig('<E')
123 call Put_Dig('b<') " not defined
124 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
125 " Ring above
126 call Put_Dig('u0')
127 call Put_Dig('0E') " not defined
128 call Put_Dig('b0') " not defined
129 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
130 " Hook
131 call Put_Dig('u2')
132 call Put_Dig('2E')
133 call Put_Dig('b2') " not defined
134 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
135 " Horn
136 call Put_Dig('u9')
137 call Put_Dig('9E') " not defined
138 call Put_Dig('b9') " not defined
139 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
140 " Cyrillic
141 call Put_Dig('u=')
142 call Put_Dig('=b')
143 call Put_Dig('=_')
144 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
145 " Greek
146 call Put_Dig('u*')
147 call Put_Dig('*b')
148 call Put_Dig('*_')
149 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
150 " Greek/Cyrillic special
151 call Put_Dig('u%')
152 call Put_Dig('%b') " not defined
153 call Put_Dig('%_') " not defined
154 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
155 " Arabic
156 call Put_Dig('u+')
157 call Put_Dig('+b')
158 call Put_Dig('+_') " japanese industrial symbol
159 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
160 " Hebrew
161 call Put_Dig('Q+')
162 call Put_Dig('+B')
163 call Put_Dig('+X')
164 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
165 " Latin
166 call Put_Dig('a3')
167 call Put_Dig('A3')
168 call Put_Dig('3X')
169 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
170 " Bopomofo
171 call Put_Dig('a4')
172 call Put_Dig('A4')
173 call Put_Dig('4X')
174 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
175 " Hiragana
176 call Put_Dig('a5')
177 call Put_Dig('A5')
178 call Put_Dig('5X')
179 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
180 " Katakana
181 call Put_Dig('a6')
182 call Put_Dig('A6')
183 call Put_Dig('6X')
184 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
185 " Superscripts
186 call Put_Dig('1S')
187 call Put_Dig('2S')
188 call Put_Dig('3S')
189 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
190 " Subscripts
191 call Put_Dig('1s')
192 call Put_Dig('2s')
193 call Put_Dig('3s')
194 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
195 " Eszet (only lowercase)
196 call Put_Dig("ss")
197 call Put_Dig("SS") " start of string
198 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
199 " High bit set
200 call Put_Dig("a ")
201 call Put_Dig(" A")
202 call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
203 " Escape is not part of a digraph
204 call Put_Dig("a\<esc>")
205 call Put_Dig("\<esc>A")
206 call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
207 " define some custom digraphs
208 " old: 00
209 " old: el l
210 digraph 00 9216
211 digraph el 0252
212 call Put_Dig("00")
213 call Put_Dig("el")
214 " Reset digraphs
215 digraph 00 8734
216 digraph el 108
217 call Put_Dig("00")
218 call Put_Dig("el")
219 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200220 call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
221 call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
Bram Moolenaar067297e2020-04-13 19:55:50 +0200222 call assert_fails('digraph xy z', 'E39:')
mityu61065042021-07-19 20:07:21 +0200223 call assert_fails('digraph x', 'E1214:')
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200224 bw!
225endfunc
226
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100227func Test_digraphs_option()
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200228 " reset whichwrap option, so that testing <esc><bs>A works,
229 " without moving up a line
Bram Moolenaardfd63e32016-07-21 10:11:03 +0200230 set digraph ww=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200231 new
232 call Put_Dig_BS("0","0")
233 call assert_equal("∞", getline('.'))
234 " not a digraph
235 call Put_Dig_BS("e","l")
236 call assert_equal("l", getline('.'))
237 call Put_Dig_BS("h","t")
238 call assert_equal("þ", getline('.'))
239 " digraph "ab" is the same as "ba"
240 call Put_Dig_BS("a","b")
241 call Put_Dig_BS("b","a")
242 call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
243 " Euro sign
244 call Put_Dig_BS("e","=")
245 call Put_Dig_BS("=","e")
246 call Put_Dig_BS("E","u")
247 call Put_Dig_BS("u","E")
248 call assert_equal(['е']+repeat([""],3), getline(line('.')-3,line('.')))
249 " Rouble sign
250 call Put_Dig_BS("R","=")
251 call Put_Dig_BS("=","R")
252 call Put_Dig_BS("=","P")
253 call Put_Dig_BS("P","=")
254 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
255 " Not a digraph: this is different from <c-k>!
Luca Saccarola959ef612024-12-01 16:25:53 +0100256 let _bs = &bs
257 set bs=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200258 call Put_Dig_BS("a","\<bs>")
259 call Put_Dig_BS("\<bs>","a")
260 call assert_equal(['','a'], getline(line('.')-1,line('.')))
Luca Saccarola959ef612024-12-01 16:25:53 +0100261 let &bs = _bs
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200262 " Grave
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 " Acute accent
268 call Put_Dig_BS("a","'")
269 call Put_Dig_BS("'","e")
270 call Put_Dig_BS("b","'") " not defined
271 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
272 " Cicumflex
273 call Put_Dig_BS("a",">")
274 call Put_Dig_BS(">","e")
275 call Put_Dig_BS("b",">") " not defined
276 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
277 " Tilde
278 call Put_Dig_BS("o","~")
279 call Put_Dig_BS("~","u") " not defined
280 call Put_Dig_BS("z","~") " not defined
281 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
282 " Tilde
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 " Macron
288 call Put_Dig_BS("o","-")
289 call Put_Dig_BS("-","u")
290 call Put_Dig_BS("z","-") " not defined
291 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
292 " Breve
293 call Put_Dig_BS("o","(")
294 call Put_Dig_BS("(","u")
295 call Put_Dig_BS("z","(") " not defined
296 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
297 " Dot above
298 call Put_Dig_BS("b",".")
299 call Put_Dig_BS(".","e")
300 call Put_Dig_BS("a",".") " not defined
301 call assert_equal(['', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +0100302 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200303 call Put_Dig_BS("a",":")
304 call Put_Dig_BS(":","u")
305 call Put_Dig_BS("b",":") " not defined
306 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
307 " Cedilla
308 call Put_Dig_BS("'",",")
309 call Put_Dig_BS(",","C")
310 call Put_Dig_BS("b",",") " not defined
311 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
312 " Underline
313 call Put_Dig_BS("B","_")
314 call Put_Dig_BS("_","t")
315 call Put_Dig_BS("a","_") " not defined
316 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
317 " Stroke
318 call Put_Dig_BS("j","/")
319 call Put_Dig_BS("/","l")
320 call Put_Dig_BS("b","/") " not defined
321 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
322 " Double acute
323 call Put_Dig_BS('O','"')
324 call Put_Dig_BS('"','y')
325 call Put_Dig_BS('b','"') " not defined
326 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
327 " Ogonek
328 call Put_Dig_BS('u',';')
329 call Put_Dig_BS(';','E')
330 call Put_Dig_BS('b',';') " not defined
331 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
332 " Caron
333 call Put_Dig_BS('u','<')
334 call Put_Dig_BS('<','E')
335 call Put_Dig_BS('b','<') " not defined
336 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
337 " Ring above
338 call Put_Dig_BS('u','0')
339 call Put_Dig_BS('0','E') " not defined
340 call Put_Dig_BS('b','0') " not defined
341 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
342 " Hook
343 call Put_Dig_BS('u','2')
344 call Put_Dig_BS('2','E')
345 call Put_Dig_BS('b','2') " not defined
346 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
347 " Horn
348 call Put_Dig_BS('u','9')
349 call Put_Dig_BS('9','E') " not defined
350 call Put_Dig_BS('b','9') " not defined
351 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
352 " Cyrillic
353 call Put_Dig_BS('u','=')
354 call Put_Dig_BS('=','b')
355 call Put_Dig_BS('=','_')
356 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
357 " Greek
358 call Put_Dig_BS('u','*')
359 call Put_Dig_BS('*','b')
360 call Put_Dig_BS('*','_')
361 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
362 " Greek/Cyrillic special
363 call Put_Dig_BS('u','%')
364 call Put_Dig_BS('%','b') " not defined
365 call Put_Dig_BS('%','_') " not defined
366 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
367 " Arabic
368 call Put_Dig_BS('u','+')
369 call Put_Dig_BS('+','b')
370 call Put_Dig_BS('+','_') " japanese industrial symbol
371 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
372 " Hebrew
373 call Put_Dig_BS('Q','+')
374 call Put_Dig_BS('+','B')
375 call Put_Dig_BS('+','X')
376 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
377 " Latin
378 call Put_Dig_BS('a','3')
379 call Put_Dig_BS('A','3')
380 call Put_Dig_BS('3','X')
381 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
382 " Bopomofo
383 call Put_Dig_BS('a','4')
384 call Put_Dig_BS('A','4')
385 call Put_Dig_BS('4','X')
386 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
387 " Hiragana
388 call Put_Dig_BS('a','5')
389 call Put_Dig_BS('A','5')
390 call Put_Dig_BS('5','X')
391 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
392 " Katakana
393 call Put_Dig_BS('a','6')
394 call Put_Dig_BS('A','6')
395 call Put_Dig_BS('6','X')
396 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
397 " Superscripts
398 call Put_Dig_BS('1','S')
399 call Put_Dig_BS('2','S')
400 call Put_Dig_BS('3','S')
401 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
402 " Subscripts
403 call Put_Dig_BS('1','s')
404 call Put_Dig_BS('2','s')
405 call Put_Dig_BS('3','s')
406 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
407 " Eszet (only lowercase)
408 call Put_Dig_BS("s","s")
409 call Put_Dig_BS("S","S") " start of string
410 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
411 " High bit set (different from <c-k>)
412 call Put_Dig_BS("a"," ")
413 call Put_Dig_BS(" ","A")
414 call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
415 " Escape is not part of a digraph (different from <c-k>)
416 call Put_Dig_BS("a","\<esc>")
417 call Put_Dig_BS("\<esc>","A")
418 call assert_equal(['', ''], getline(line('.')-1,line('.')))
419 " define some custom digraphs
420 " old: 00 ∞
421 " old: el l
422 digraph 00 9216
423 digraph el 0252
424 call Put_Dig_BS("0","0")
425 call Put_Dig_BS("e","l")
426 " Reset digraphs
427 digraph 00 8734
428 digraph el 108
429 call Put_Dig_BS("0","0")
430 call Put_Dig_BS("e","l")
431 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200432 set nodigraph ww&vim
433 bw!
434endfunc
435
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100436func Test_digraphs_output()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200437 new
438 let out = execute(':digraph')
439 call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>'))
440 call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>'))
441 call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>'))
442 call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>'))
443 call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>'))
444 call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
445 call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>'))
446 call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>'))
447 call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>'))
448 call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>'))
Bram Moolenaare3242342020-04-13 19:46:43 +0200449 call assert_notmatch('Latin supplement', out)
450
451 let out_bang_without_custom = execute(':digraph!')
452 digraph lt 60
453 let out_bang_with_custom = execute(':digraph!')
454 call assert_notmatch('lt', out_bang_without_custom)
455 call assert_match("^\n"
456 \ .. "NU ^@ 10 .*\n"
457 \ .. "Latin supplement\n"
458 \ .. "!I ¡ 161 .*\n"
459 \ .. ".*\n"
460 \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200461 bw!
462endfunc
463
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100464func Test_loadkeymap()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200465 CheckFeature keymap
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200466 new
467 set keymap=czech
468 set iminsert=0
469 call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
470 call assert_equal("|'é+ěščřžýáíé'", getline('.'))
471 " reset keymap and encoding option
472 set keymap=
473 bw!
474endfunc
475
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100476func Test_digraph_cmndline()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200477 " Create digraph on commandline
Bram Moolenaar91ffc8a2020-03-02 20:54:22 +0100478 call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
479 call assert_equal('"€', @:)
480
481 " Canceling a CTRL-K on the cmdline
482 call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
483 call assert_equal('"ab', @:)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200484endfunc
485
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100486func Test_show_digraph()
487 new
488 call Put_Dig("e=")
489 call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
490 bwipe!
491endfunc
492
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200493func Test_show_digraph_cp1251()
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200494 new
495 set encoding=cp1251
496 call Put_Dig("='")
497 call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii'))
498 set encoding=utf-8
499 bwipe!
500endfunc
501
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200502" Test for error in a keymap file
503func Test_loadkeymap_error()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200504 CheckFeature keymap
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200505 call assert_fails('loadkeymap', 'E105:')
Bram Moolenaar59173412022-09-20 22:01:33 +0100506 call writefile(['loadkeymap', 'a'], 'Xkeymap', 'D')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200507 call assert_fails('source Xkeymap', 'E791:')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200508endfunc
509
Bram Moolenaar8c524f72020-06-21 13:23:45 +0200510" Test for the characters displayed on the screen when entering a digraph
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200511func Test_entering_digraph()
512 CheckRunVimInTerminal
513 let buf = RunVimInTerminal('', {'rows': 6})
514 call term_sendkeys(buf, "i\<C-K>")
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 term_sendkeys(buf, "1")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200518 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200519 call assert_equal('1', term_getline(buf, 1))
520 call term_sendkeys(buf, "2")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200521 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200522 call assert_equal('½', term_getline(buf, 1))
523 call StopVimInTerminal(buf)
524endfunc
525
h-east29b85712021-07-26 21:54:04 +0200526func Test_digraph_set_function()
mityu61065042021-07-19 20:07:21 +0200527 new
h-east29b85712021-07-26 21:54:04 +0200528 call digraph_set('aa', 'あ')
mityu61065042021-07-19 20:07:21 +0200529 call Put_Dig('aa')
530 call assert_equal('あ', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200531 call digraph_set(' i', 'い')
mityu61065042021-07-19 20:07:21 +0200532 call Put_Dig(' i')
533 call assert_equal('い', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200534 call digraph_set(' ', 'う')
mityu61065042021-07-19 20:07:21 +0200535 call Put_Dig(' ')
536 call assert_equal('う', getline('$'))
537
h-east29b85712021-07-26 21:54:04 +0200538 eval 'aa'->digraph_set('え')
mityu61065042021-07-19 20:07:21 +0200539 call Put_Dig('aa')
540 call assert_equal('え', getline('$'))
541
h-east29b85712021-07-26 21:54:04 +0200542 call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa')
543 call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b')
544 call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ')
545 call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ')
546 call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: か' .. nr2char(0x3099))
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200547 call assert_fails('call digraph_set(test_null_string(), "い")', 'E1214: Digraph must be just two characters')
548 call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200549 bwipe!
550endfunc
551
h-east29b85712021-07-26 21:54:04 +0200552func Test_digraph_get_function()
mityu61065042021-07-19 20:07:21 +0200553 " Built-in digraphs
h-east29b85712021-07-26 21:54:04 +0200554 call assert_equal('∞', digraph_get('00'))
mityu61065042021-07-19 20:07:21 +0200555
556 " User-defined digraphs
h-east29b85712021-07-26 21:54:04 +0200557 call digraph_set('aa', 'あ')
558 call digraph_set(' i', 'い')
559 call digraph_set(' ', 'う')
560 call assert_equal('あ', digraph_get('aa'))
561 call assert_equal('あ', 'aa'->digraph_get())
562 call assert_equal('い', digraph_get(' i'))
563 call assert_equal('う', digraph_get(' '))
564 call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa')
565 call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200566 call assert_fails('call digraph_get(test_null_string())', 'E1214: Digraph must be just two characters:')
567 call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200568endfunc
569
h-east29b85712021-07-26 21:54:04 +0200570func Test_digraph_get_function_encode()
mityu61065042021-07-19 20:07:21 +0200571 CheckFeature iconv
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200572
mityu61065042021-07-19 20:07:21 +0200573 let testcases = {
574 \'00': '',
575 \'aa': 'あ',
576 \}
577 for [key, ch] in items(testcases)
h-east29b85712021-07-26 21:54:04 +0200578 call digraph_set(key, ch)
mityu61065042021-07-19 20:07:21 +0200579 set encoding=japan
h-east29b85712021-07-26 21:54:04 +0200580 call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key))
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200581 set encoding=utf-8
mityu61065042021-07-19 20:07:21 +0200582 endfor
583endfunc
584
h-east29b85712021-07-26 21:54:04 +0200585func Test_digraph_setlist_function()
586 call digraph_setlist([['aa', 'き'], ['bb', 'く']])
587 call assert_equal('き', digraph_get('aa'))
588 call assert_equal('く', digraph_get('bb'))
mityu61065042021-07-19 20:07:21 +0200589
h-east29b85712021-07-26 21:54:04 +0200590 call assert_fails('call digraph_setlist([[]])', 'E1216:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200591 call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:')
h-east29b85712021-07-26 21:54:04 +0200592 call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200593 call assert_fails('call digraph_setlist([test_null_list()])', 'E1216:')
594 call assert_fails('call digraph_setlist({})', 'E1216:')
595 call assert_fails('call digraph_setlist([{}])', 'E1216:')
596 call assert_true(digraph_setlist(test_null_list()))
mityu61065042021-07-19 20:07:21 +0200597endfunc
598
h-east29b85712021-07-26 21:54:04 +0200599func Test_digraph_getlist_function()
mityu61065042021-07-19 20:07:21 +0200600 " Make sure user-defined digraphs are defined
h-east29b85712021-07-26 21:54:04 +0200601 call digraph_setlist([['aa', 'き'], ['bb', 'く']])
mityu61065042021-07-19 20:07:21 +0200602
h-east29b85712021-07-26 21:54:04 +0200603 for pair in digraph_getlist(1)
zeertzjq757f3212024-04-15 19:01:04 +0200604 call assert_equal(pair[1], digraph_get(pair[0]))
mityu61065042021-07-19 20:07:21 +0200605 endfor
606
607 " We don't know how many digraphs are registered before, so check the number
608 " of digraphs returned.
h-east29b85712021-07-26 21:54:04 +0200609 call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len())
zeertzjq757f3212024-04-15 19:01:04 +0200610 call assert_notequal(digraph_getlist()->len(), digraph_getlist(1)->len())
Yegappan Lakshmanan198ada32024-12-02 19:58:51 +0100611 call assert_equal(digraph_getlist()->len(), digraph_getlist(v:false)->len())
612 call assert_notequal(digraph_getlist()->len(), digraph_getlist(v:true)->len())
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200613
Yegappan Lakshmanan198ada32024-12-02 19:58:51 +0100614 call assert_fails('call digraph_getlist(0z12)', 'E1212: Bool required for argument 1')
mityu61065042021-07-19 20:07:21 +0200615endfunc
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200616
617
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200618" vim: shiftwidth=2 sts=2 expandtab