blob: 9cb946c45f463a852d71a29041cc25a9fec1b93b [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('.')))
40 " Not a digraph
41 call Put_Dig("a\<bs>")
42 call Put_Dig("\<bs>a")
43 call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
44 " Grave
45 call Put_Dig("a!")
46 call Put_Dig("!e")
47 call Put_Dig("b!") " not defined
48 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
49 " Acute accent
50 call Put_Dig("a'")
51 call Put_Dig("'e")
52 call Put_Dig("b'") " not defined
53 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
54 " Cicumflex
55 call Put_Dig("a>")
56 call Put_Dig(">e")
57 call Put_Dig("b>") " not defined
58 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
59 " Tilde
60 call Put_Dig("o~")
61 call Put_Dig("~u") " not defined
62 call Put_Dig("z~") " not defined
63 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
64 " Tilde
65 call Put_Dig("o?")
66 call Put_Dig("?u")
67 call Put_Dig("z?") " not defined
68 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
69 " Macron
70 call Put_Dig("o-")
71 call Put_Dig("-u")
72 call Put_Dig("z-") " not defined
73 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
74 " Breve
75 call Put_Dig("o(")
76 call Put_Dig("(u")
77 call Put_Dig("z(") " not defined
78 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
79 " Dot above
80 call Put_Dig("b.")
81 call Put_Dig(".e")
82 call Put_Dig("a.") " not defined
83 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +010084 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +020085 call Put_Dig("a:")
86 call Put_Dig(":u")
87 call Put_Dig("b:") " not defined
88 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
89 " Cedilla
90 call Put_Dig("',")
91 call Put_Dig(",C")
92 call Put_Dig("b,") " not defined
93 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
94 " Underline
95 call Put_Dig("B_")
96 call Put_Dig("_t")
97 call Put_Dig("a_") " not defined
98 call assert_equal(['', '', '_'], getline(line('.')-2,line('.')))
99 " Stroke
100 call Put_Dig("j/")
101 call Put_Dig("/l")
102 call Put_Dig("b/") " not defined
103 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
104 " Double acute
105 call Put_Dig('O"')
106 call Put_Dig('"y')
107 call Put_Dig('b"') " not defined
108 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
109 " Ogonek
110 call Put_Dig('u;')
111 call Put_Dig(';E')
112 call Put_Dig('b;') " not defined
113 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
114 " Caron
115 call Put_Dig('u<')
116 call Put_Dig('<E')
117 call Put_Dig('b<') " not defined
118 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
119 " Ring above
120 call Put_Dig('u0')
121 call Put_Dig('0E') " not defined
122 call Put_Dig('b0') " not defined
123 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
124 " Hook
125 call Put_Dig('u2')
126 call Put_Dig('2E')
127 call Put_Dig('b2') " not defined
128 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
129 " Horn
130 call Put_Dig('u9')
131 call Put_Dig('9E') " not defined
132 call Put_Dig('b9') " not defined
133 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
134 " Cyrillic
135 call Put_Dig('u=')
136 call Put_Dig('=b')
137 call Put_Dig('=_')
138 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
139 " Greek
140 call Put_Dig('u*')
141 call Put_Dig('*b')
142 call Put_Dig('*_')
143 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
144 " Greek/Cyrillic special
145 call Put_Dig('u%')
146 call Put_Dig('%b') " not defined
147 call Put_Dig('%_') " not defined
148 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
149 " Arabic
150 call Put_Dig('u+')
151 call Put_Dig('+b')
152 call Put_Dig('+_') " japanese industrial symbol
153 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
154 " Hebrew
155 call Put_Dig('Q+')
156 call Put_Dig('+B')
157 call Put_Dig('+X')
158 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
159 " Latin
160 call Put_Dig('a3')
161 call Put_Dig('A3')
162 call Put_Dig('3X')
163 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
164 " Bopomofo
165 call Put_Dig('a4')
166 call Put_Dig('A4')
167 call Put_Dig('4X')
168 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
169 " Hiragana
170 call Put_Dig('a5')
171 call Put_Dig('A5')
172 call Put_Dig('5X')
173 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
174 " Katakana
175 call Put_Dig('a6')
176 call Put_Dig('A6')
177 call Put_Dig('6X')
178 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
179 " Superscripts
180 call Put_Dig('1S')
181 call Put_Dig('2S')
182 call Put_Dig('3S')
183 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
184 " Subscripts
185 call Put_Dig('1s')
186 call Put_Dig('2s')
187 call Put_Dig('3s')
188 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
189 " Eszet (only lowercase)
190 call Put_Dig("ss")
191 call Put_Dig("SS") " start of string
192 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
193 " High bit set
194 call Put_Dig("a ")
195 call Put_Dig(" A")
196 call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
197 " Escape is not part of a digraph
198 call Put_Dig("a\<esc>")
199 call Put_Dig("\<esc>A")
200 call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
201 " define some custom digraphs
202 " old: 00
203 " old: el l
204 digraph 00 9216
205 digraph el 0252
206 call Put_Dig("00")
207 call Put_Dig("el")
208 " Reset digraphs
209 digraph 00 8734
210 digraph el 108
211 call Put_Dig("00")
212 call Put_Dig("el")
213 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200214 call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
215 call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
Bram Moolenaar067297e2020-04-13 19:55:50 +0200216 call assert_fails('digraph xy z', 'E39:')
mityu61065042021-07-19 20:07:21 +0200217 call assert_fails('digraph x', 'E1214:')
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200218 bw!
219endfunc
220
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100221func Test_digraphs_option()
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200222 " reset whichwrap option, so that testing <esc><bs>A works,
223 " without moving up a line
Bram Moolenaardfd63e32016-07-21 10:11:03 +0200224 set digraph ww=
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200225 new
226 call Put_Dig_BS("0","0")
227 call assert_equal("∞", getline('.'))
228 " not a digraph
229 call Put_Dig_BS("e","l")
230 call assert_equal("l", getline('.'))
231 call Put_Dig_BS("h","t")
232 call assert_equal("þ", getline('.'))
233 " digraph "ab" is the same as "ba"
234 call Put_Dig_BS("a","b")
235 call Put_Dig_BS("b","a")
236 call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
237 " Euro sign
238 call Put_Dig_BS("e","=")
239 call Put_Dig_BS("=","e")
240 call Put_Dig_BS("E","u")
241 call Put_Dig_BS("u","E")
242 call assert_equal(['е']+repeat([""],3), getline(line('.')-3,line('.')))
243 " Rouble sign
244 call Put_Dig_BS("R","=")
245 call Put_Dig_BS("=","R")
246 call Put_Dig_BS("=","P")
247 call Put_Dig_BS("P","=")
248 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
249 " Not a digraph: this is different from <c-k>!
250 call Put_Dig_BS("a","\<bs>")
251 call Put_Dig_BS("\<bs>","a")
252 call assert_equal(['','a'], getline(line('.')-1,line('.')))
253 " Grave
254 call Put_Dig_BS("a","!")
255 call Put_Dig_BS("!","e")
256 call Put_Dig_BS("b","!") " not defined
257 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
258 " Acute accent
259 call Put_Dig_BS("a","'")
260 call Put_Dig_BS("'","e")
261 call Put_Dig_BS("b","'") " not defined
262 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
263 " Cicumflex
264 call Put_Dig_BS("a",">")
265 call Put_Dig_BS(">","e")
266 call Put_Dig_BS("b",">") " not defined
267 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
268 " Tilde
269 call Put_Dig_BS("o","~")
270 call Put_Dig_BS("~","u") " not defined
271 call Put_Dig_BS("z","~") " not defined
272 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
273 " Tilde
274 call Put_Dig_BS("o","?")
275 call Put_Dig_BS("?","u")
276 call Put_Dig_BS("z","?") " not defined
277 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
278 " Macron
279 call Put_Dig_BS("o","-")
280 call Put_Dig_BS("-","u")
281 call Put_Dig_BS("z","-") " not defined
282 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
283 " Breve
284 call Put_Dig_BS("o","(")
285 call Put_Dig_BS("(","u")
286 call Put_Dig_BS("z","(") " not defined
287 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
288 " Dot above
289 call Put_Dig_BS("b",".")
290 call Put_Dig_BS(".","e")
291 call Put_Dig_BS("a",".") " not defined
292 call assert_equal(['', 'ė', '.'], getline(line('.')-2,line('.')))
Bram Moolenaar4b96df52020-01-26 22:00:26 +0100293 " Diaeresis
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200294 call Put_Dig_BS("a",":")
295 call Put_Dig_BS(":","u")
296 call Put_Dig_BS("b",":") " not defined
297 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
298 " Cedilla
299 call Put_Dig_BS("'",",")
300 call Put_Dig_BS(",","C")
301 call Put_Dig_BS("b",",") " not defined
302 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
303 " Underline
304 call Put_Dig_BS("B","_")
305 call Put_Dig_BS("_","t")
306 call Put_Dig_BS("a","_") " not defined
307 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
308 " Stroke
309 call Put_Dig_BS("j","/")
310 call Put_Dig_BS("/","l")
311 call Put_Dig_BS("b","/") " not defined
312 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
313 " Double acute
314 call Put_Dig_BS('O','"')
315 call Put_Dig_BS('"','y')
316 call Put_Dig_BS('b','"') " not defined
317 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
318 " Ogonek
319 call Put_Dig_BS('u',';')
320 call Put_Dig_BS(';','E')
321 call Put_Dig_BS('b',';') " not defined
322 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
323 " Caron
324 call Put_Dig_BS('u','<')
325 call Put_Dig_BS('<','E')
326 call Put_Dig_BS('b','<') " not defined
327 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
328 " Ring above
329 call Put_Dig_BS('u','0')
330 call Put_Dig_BS('0','E') " not defined
331 call Put_Dig_BS('b','0') " not defined
332 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
333 " Hook
334 call Put_Dig_BS('u','2')
335 call Put_Dig_BS('2','E')
336 call Put_Dig_BS('b','2') " not defined
337 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
338 " Horn
339 call Put_Dig_BS('u','9')
340 call Put_Dig_BS('9','E') " not defined
341 call Put_Dig_BS('b','9') " not defined
342 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
343 " Cyrillic
344 call Put_Dig_BS('u','=')
345 call Put_Dig_BS('=','b')
346 call Put_Dig_BS('=','_')
347 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
348 " Greek
349 call Put_Dig_BS('u','*')
350 call Put_Dig_BS('*','b')
351 call Put_Dig_BS('*','_')
352 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
353 " Greek/Cyrillic special
354 call Put_Dig_BS('u','%')
355 call Put_Dig_BS('%','b') " not defined
356 call Put_Dig_BS('%','_') " not defined
357 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
358 " Arabic
359 call Put_Dig_BS('u','+')
360 call Put_Dig_BS('+','b')
361 call Put_Dig_BS('+','_') " japanese industrial symbol
362 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
363 " Hebrew
364 call Put_Dig_BS('Q','+')
365 call Put_Dig_BS('+','B')
366 call Put_Dig_BS('+','X')
367 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
368 " Latin
369 call Put_Dig_BS('a','3')
370 call Put_Dig_BS('A','3')
371 call Put_Dig_BS('3','X')
372 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
373 " Bopomofo
374 call Put_Dig_BS('a','4')
375 call Put_Dig_BS('A','4')
376 call Put_Dig_BS('4','X')
377 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
378 " Hiragana
379 call Put_Dig_BS('a','5')
380 call Put_Dig_BS('A','5')
381 call Put_Dig_BS('5','X')
382 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
383 " Katakana
384 call Put_Dig_BS('a','6')
385 call Put_Dig_BS('A','6')
386 call Put_Dig_BS('6','X')
387 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
388 " Superscripts
389 call Put_Dig_BS('1','S')
390 call Put_Dig_BS('2','S')
391 call Put_Dig_BS('3','S')
392 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
393 " Subscripts
394 call Put_Dig_BS('1','s')
395 call Put_Dig_BS('2','s')
396 call Put_Dig_BS('3','s')
397 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
398 " Eszet (only lowercase)
399 call Put_Dig_BS("s","s")
400 call Put_Dig_BS("S","S") " start of string
401 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
402 " High bit set (different from <c-k>)
403 call Put_Dig_BS("a"," ")
404 call Put_Dig_BS(" ","A")
405 call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
406 " Escape is not part of a digraph (different from <c-k>)
407 call Put_Dig_BS("a","\<esc>")
408 call Put_Dig_BS("\<esc>","A")
409 call assert_equal(['', ''], getline(line('.')-1,line('.')))
410 " define some custom digraphs
411 " old: 00 ∞
412 " old: el l
413 digraph 00 9216
414 digraph el 0252
415 call Put_Dig_BS("0","0")
416 call Put_Dig_BS("e","l")
417 " Reset digraphs
418 digraph 00 8734
419 digraph el 108
420 call Put_Dig_BS("0","0")
421 call Put_Dig_BS("e","l")
422 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200423 set nodigraph ww&vim
424 bw!
425endfunc
426
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100427func Test_digraphs_output()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200428 new
429 let out = execute(':digraph')
430 call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>'))
431 call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>'))
432 call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>'))
433 call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>'))
434 call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>'))
435 call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
436 call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>'))
437 call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>'))
438 call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>'))
439 call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>'))
Bram Moolenaare3242342020-04-13 19:46:43 +0200440 call assert_notmatch('Latin supplement', out)
441
442 let out_bang_without_custom = execute(':digraph!')
443 digraph lt 60
444 let out_bang_with_custom = execute(':digraph!')
445 call assert_notmatch('lt', out_bang_without_custom)
446 call assert_match("^\n"
447 \ .. "NU ^@ 10 .*\n"
448 \ .. "Latin supplement\n"
449 \ .. "!I ¡ 161 .*\n"
450 \ .. ".*\n"
451 \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200452 bw!
453endfunc
454
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100455func Test_loadkeymap()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200456 CheckFeature keymap
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200457 new
458 set keymap=czech
459 set iminsert=0
460 call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
461 call assert_equal("|'é+ěščřžýáíé'", getline('.'))
462 " reset keymap and encoding option
463 set keymap=
464 bw!
465endfunc
466
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100467func Test_digraph_cmndline()
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200468 " Create digraph on commandline
Bram Moolenaar91ffc8a2020-03-02 20:54:22 +0100469 call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
470 call assert_equal('"€', @:)
471
472 " Canceling a CTRL-K on the cmdline
473 call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
474 call assert_equal('"ab', @:)
Bram Moolenaare25bc5a2016-07-21 21:23:38 +0200475endfunc
476
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100477func Test_show_digraph()
478 new
479 call Put_Dig("e=")
480 call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
481 bwipe!
482endfunc
483
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200484func Test_show_digraph_cp1251()
Bram Moolenaarbc5020a2018-06-16 17:25:22 +0200485 new
486 set encoding=cp1251
487 call Put_Dig("='")
488 call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii'))
489 set encoding=utf-8
490 bwipe!
491endfunc
492
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200493" Test for error in a keymap file
494func Test_loadkeymap_error()
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200495 CheckFeature keymap
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200496 call assert_fails('loadkeymap', 'E105:')
497 call writefile(['loadkeymap', 'a'], 'Xkeymap')
498 call assert_fails('source Xkeymap', 'E791:')
499 call delete('Xkeymap')
500endfunc
501
Bram Moolenaar8c524f72020-06-21 13:23:45 +0200502" Test for the characters displayed on the screen when entering a digraph
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200503func Test_entering_digraph()
504 CheckRunVimInTerminal
505 let buf = RunVimInTerminal('', {'rows': 6})
506 call term_sendkeys(buf, "i\<C-K>")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200507 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200508 call assert_equal('?', term_getline(buf, 1))
509 call term_sendkeys(buf, "1")
Bram Moolenaar733d2592020-08-20 18:59:06 +0200510 call TermWait(buf)
Bram Moolenaar845e0ee2020-06-20 16:05:32 +0200511 call assert_equal('1', term_getline(buf, 1))
512 call term_sendkeys(buf, "2")
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 StopVimInTerminal(buf)
516endfunc
517
h-east29b85712021-07-26 21:54:04 +0200518func Test_digraph_set_function()
mityu61065042021-07-19 20:07:21 +0200519 new
h-east29b85712021-07-26 21:54:04 +0200520 call digraph_set('aa', 'あ')
mityu61065042021-07-19 20:07:21 +0200521 call Put_Dig('aa')
522 call assert_equal('あ', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200523 call digraph_set(' i', 'い')
mityu61065042021-07-19 20:07:21 +0200524 call Put_Dig(' i')
525 call assert_equal('い', getline('$'))
h-east29b85712021-07-26 21:54:04 +0200526 call digraph_set(' ', 'う')
mityu61065042021-07-19 20:07:21 +0200527 call Put_Dig(' ')
528 call assert_equal('う', getline('$'))
529
h-east29b85712021-07-26 21:54:04 +0200530 eval 'aa'->digraph_set('え')
mityu61065042021-07-19 20:07:21 +0200531 call Put_Dig('aa')
532 call assert_equal('え', getline('$'))
533
h-east29b85712021-07-26 21:54:04 +0200534 call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa')
535 call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b')
536 call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ')
537 call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ')
538 call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: か' .. nr2char(0x3099))
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200539 call assert_fails('call digraph_set(test_null_string(), "い")', 'E1214: Digraph must be just two characters')
540 call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200541 bwipe!
542endfunc
543
h-east29b85712021-07-26 21:54:04 +0200544func Test_digraph_get_function()
mityu61065042021-07-19 20:07:21 +0200545 " Built-in digraphs
h-east29b85712021-07-26 21:54:04 +0200546 call assert_equal('∞', digraph_get('00'))
mityu61065042021-07-19 20:07:21 +0200547
548 " User-defined digraphs
h-east29b85712021-07-26 21:54:04 +0200549 call digraph_set('aa', 'あ')
550 call digraph_set(' i', 'い')
551 call digraph_set(' ', 'う')
552 call assert_equal('あ', digraph_get('aa'))
553 call assert_equal('あ', 'aa'->digraph_get())
554 call assert_equal('い', digraph_get(' i'))
555 call assert_equal('う', digraph_get(' '))
556 call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa')
557 call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200558 call assert_fails('call digraph_get(test_null_string())', 'E1214: Digraph must be just two characters:')
559 call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String')
mityu61065042021-07-19 20:07:21 +0200560endfunc
561
h-east29b85712021-07-26 21:54:04 +0200562func Test_digraph_get_function_encode()
mityu61065042021-07-19 20:07:21 +0200563 CheckFeature iconv
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200564
mityu61065042021-07-19 20:07:21 +0200565 let testcases = {
566 \'00': '',
567 \'aa': 'あ',
568 \}
569 for [key, ch] in items(testcases)
h-east29b85712021-07-26 21:54:04 +0200570 call digraph_set(key, ch)
mityu61065042021-07-19 20:07:21 +0200571 set encoding=japan
h-east29b85712021-07-26 21:54:04 +0200572 call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key))
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200573 set encoding=utf-8
mityu61065042021-07-19 20:07:21 +0200574 endfor
575endfunc
576
h-east29b85712021-07-26 21:54:04 +0200577func Test_digraph_setlist_function()
578 call digraph_setlist([['aa', 'き'], ['bb', 'く']])
579 call assert_equal('き', digraph_get('aa'))
580 call assert_equal('く', digraph_get('bb'))
mityu61065042021-07-19 20:07:21 +0200581
h-east29b85712021-07-26 21:54:04 +0200582 call assert_fails('call digraph_setlist([[]])', 'E1216:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200583 call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:')
h-east29b85712021-07-26 21:54:04 +0200584 call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200585 call assert_fails('call digraph_setlist([test_null_list()])', 'E1216:')
586 call assert_fails('call digraph_setlist({})', 'E1216:')
587 call assert_fails('call digraph_setlist([{}])', 'E1216:')
588 call assert_true(digraph_setlist(test_null_list()))
mityu61065042021-07-19 20:07:21 +0200589endfunc
590
h-east29b85712021-07-26 21:54:04 +0200591func Test_digraph_getlist_function()
mityu61065042021-07-19 20:07:21 +0200592 " Make sure user-defined digraphs are defined
h-east29b85712021-07-26 21:54:04 +0200593 call digraph_setlist([['aa', 'き'], ['bb', 'く']])
mityu61065042021-07-19 20:07:21 +0200594
h-east29b85712021-07-26 21:54:04 +0200595 for pair in digraph_getlist(1)
596 call assert_equal(digraph_get(pair[0]), pair[1])
mityu61065042021-07-19 20:07:21 +0200597 endfor
598
599 " We don't know how many digraphs are registered before, so check the number
600 " of digraphs returned.
h-east29b85712021-07-26 21:54:04 +0200601 call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len())
602 call assert_notequal((digraph_getlist()->len()), digraph_getlist(1)->len())
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200603
604 call assert_fails('call digraph_getlist(0z12)', 'E974: Using a Blob as a Number')
mityu61065042021-07-19 20:07:21 +0200605endfunc
Bram Moolenaar52eb3722021-08-10 21:39:20 +0200606
607
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200608" vim: shiftwidth=2 sts=2 expandtab