blob: b12e19fa7cc0ac5e45c2359fa4cc4a15d9994d98 [file] [log] [blame]
Bram Moolenaar397eadb2016-07-20 22:01:12 +02001" Tests for digraphs
2
3if !has("digraphs") || !has("multi_byte")
4 finish
5endif
6
Bram Moolenaar60084332016-07-20 22:23:49 +02007scriptencoding utf-8
8
Bram Moolenaar397eadb2016-07-20 22:01:12 +02009func! Put_Dig(chars)
10 exe "norm! o\<c-k>".a:chars
11endfu
12
13func! Put_Dig_BS(char1, char2)
14 exe "norm! o".a:char1."\<bs>".a:char2
15endfu
16
17func! Test_digraphs()
Bram Moolenaar60084332016-07-20 22:23:49 +020018 let _enc = &enc
19 set enc=utf8
Bram Moolenaar397eadb2016-07-20 22:01:12 +020020 new
21 call Put_Dig("00")
22 call assert_equal("", getline('.'))
23 " not a digraph
24 call Put_Dig("el")
25 call assert_equal("l", getline('.'))
26 call Put_Dig("ht")
27 call assert_equal("þ", getline('.'))
28 " digraph "ab" is the same as "ba"
29 call Put_Dig("ab")
30 call Put_Dig("ba")
31 call assert_equal(["",""], getline(line('.')-1,line('.')))
32 " Euro sign
33 call Put_Dig("e=")
34 call Put_Dig("=e")
35 call Put_Dig("Eu")
36 call Put_Dig("uE")
37 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
38 " Rouble sign
39 call Put_Dig("R=")
40 call Put_Dig("=R")
41 call Put_Dig("=P")
42 call Put_Dig("P=")
43 call assert_equal(['Р']+repeat([""],2)+['П'], getline(line('.')-3,line('.')))
44 " 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('.')))
58 " Cicumflex
59 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('.')))
88 " Diaresis
89 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('.')))
218 " reset encoding option
Bram Moolenaar60084332016-07-20 22:23:49 +0200219 let &enc = _enc
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200220 bw!
221endfunc
222
223func! Test_digraphs_option()
224 let _enc=&enc
225 " reset whichwrap option, so that testing <esc><bs>A works,
226 " without moving up a line
Bram Moolenaar60084332016-07-20 22:23:49 +0200227 set enc=utf8 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('.')))
296 " Diaresis
297 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('.')))
426 " reset encoding option
Bram Moolenaar60084332016-07-20 22:23:49 +0200427 let &enc = _enc
Bram Moolenaar397eadb2016-07-20 22:01:12 +0200428 set nodigraph ww&vim
429 bw!
430endfunc
431
432" vim: tabstop=2 shiftwidth=0 sts=-1 expandtab