blob: 01180b6c2546369ae9e2a3f03ae61c4063b35968 [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
7func! Put_Dig(chars)
8 exe "norm! o\<c-k>".a:chars
9endfu
10
11func! Put_Dig_BS(char1, char2)
12 exe "norm! o".a:char1."\<bs>".a:char2
13endfu
14
15func! Test_digraphs()
16 let _enc=&enc
17 set nocp enc=utf8
18 new
19 call Put_Dig("00")
20 call assert_equal("", getline('.'))
21 " not a digraph
22 call Put_Dig("el")
23 call assert_equal("l", getline('.'))
24 call Put_Dig("ht")
25 call assert_equal("þ", getline('.'))
26 " digraph "ab" is the same as "ba"
27 call Put_Dig("ab")
28 call Put_Dig("ba")
29 call assert_equal(["",""], getline(line('.')-1,line('.')))
30 " Euro sign
31 call Put_Dig("e=")
32 call Put_Dig("=e")
33 call Put_Dig("Eu")
34 call Put_Dig("uE")
35 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
36 " Rouble sign
37 call Put_Dig("R=")
38 call Put_Dig("=R")
39 call Put_Dig("=P")
40 call Put_Dig("P=")
41 call assert_equal(['Р']+repeat([""],2)+['П'], getline(line('.')-3,line('.')))
42 " Not a digraph
43 call Put_Dig("a\<bs>")
44 call Put_Dig("\<bs>a")
45 call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
46 " Grave
47 call Put_Dig("a!")
48 call Put_Dig("!e")
49 call Put_Dig("b!") " not defined
50 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
51 " Acute accent
52 call Put_Dig("a'")
53 call Put_Dig("'e")
54 call Put_Dig("b'") " not defined
55 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
56 " Cicumflex
57 call Put_Dig("a>")
58 call Put_Dig(">e")
59 call Put_Dig("b>") " not defined
60 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
61 " Tilde
62 call Put_Dig("o~")
63 call Put_Dig("~u") " not defined
64 call Put_Dig("z~") " not defined
65 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
66 " Tilde
67 call Put_Dig("o?")
68 call Put_Dig("?u")
69 call Put_Dig("z?") " not defined
70 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
71 " Macron
72 call Put_Dig("o-")
73 call Put_Dig("-u")
74 call Put_Dig("z-") " not defined
75 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
76 " Breve
77 call Put_Dig("o(")
78 call Put_Dig("(u")
79 call Put_Dig("z(") " not defined
80 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
81 " Dot above
82 call Put_Dig("b.")
83 call Put_Dig(".e")
84 call Put_Dig("a.") " not defined
85 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
86 " Diaresis
87 call Put_Dig("a:")
88 call Put_Dig(":u")
89 call Put_Dig("b:") " not defined
90 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
91 " Cedilla
92 call Put_Dig("',")
93 call Put_Dig(",C")
94 call Put_Dig("b,") " not defined
95 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
96 " Underline
97 call Put_Dig("B_")
98 call Put_Dig("_t")
99 call Put_Dig("a_") " not defined
100 call assert_equal(['', '', '_'], getline(line('.')-2,line('.')))
101 " Stroke
102 call Put_Dig("j/")
103 call Put_Dig("/l")
104 call Put_Dig("b/") " not defined
105 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
106 " Double acute
107 call Put_Dig('O"')
108 call Put_Dig('"y')
109 call Put_Dig('b"') " not defined
110 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
111 " Ogonek
112 call Put_Dig('u;')
113 call Put_Dig(';E')
114 call Put_Dig('b;') " not defined
115 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
116 " Caron
117 call Put_Dig('u<')
118 call Put_Dig('<E')
119 call Put_Dig('b<') " not defined
120 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
121 " Ring above
122 call Put_Dig('u0')
123 call Put_Dig('0E') " not defined
124 call Put_Dig('b0') " not defined
125 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
126 " Hook
127 call Put_Dig('u2')
128 call Put_Dig('2E')
129 call Put_Dig('b2') " not defined
130 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
131 " Horn
132 call Put_Dig('u9')
133 call Put_Dig('9E') " not defined
134 call Put_Dig('b9') " not defined
135 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
136 " Cyrillic
137 call Put_Dig('u=')
138 call Put_Dig('=b')
139 call Put_Dig('=_')
140 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
141 " Greek
142 call Put_Dig('u*')
143 call Put_Dig('*b')
144 call Put_Dig('*_')
145 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
146 " Greek/Cyrillic special
147 call Put_Dig('u%')
148 call Put_Dig('%b') " not defined
149 call Put_Dig('%_') " not defined
150 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
151 " Arabic
152 call Put_Dig('u+')
153 call Put_Dig('+b')
154 call Put_Dig('+_') " japanese industrial symbol
155 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
156 " Hebrew
157 call Put_Dig('Q+')
158 call Put_Dig('+B')
159 call Put_Dig('+X')
160 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
161 " Latin
162 call Put_Dig('a3')
163 call Put_Dig('A3')
164 call Put_Dig('3X')
165 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
166 " Bopomofo
167 call Put_Dig('a4')
168 call Put_Dig('A4')
169 call Put_Dig('4X')
170 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
171 " Hiragana
172 call Put_Dig('a5')
173 call Put_Dig('A5')
174 call Put_Dig('5X')
175 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
176 " Katakana
177 call Put_Dig('a6')
178 call Put_Dig('A6')
179 call Put_Dig('6X')
180 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
181 " Superscripts
182 call Put_Dig('1S')
183 call Put_Dig('2S')
184 call Put_Dig('3S')
185 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
186 " Subscripts
187 call Put_Dig('1s')
188 call Put_Dig('2s')
189 call Put_Dig('3s')
190 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
191 " Eszet (only lowercase)
192 call Put_Dig("ss")
193 call Put_Dig("SS") " start of string
194 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
195 " High bit set
196 call Put_Dig("a ")
197 call Put_Dig(" A")
198 call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
199 " Escape is not part of a digraph
200 call Put_Dig("a\<esc>")
201 call Put_Dig("\<esc>A")
202 call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
203 " define some custom digraphs
204 " old: 00
205 " old: el l
206 digraph 00 9216
207 digraph el 0252
208 call Put_Dig("00")
209 call Put_Dig("el")
210 " Reset digraphs
211 digraph 00 8734
212 digraph el 108
213 call Put_Dig("00")
214 call Put_Dig("el")
215 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
216 " reset encoding option
217 let &enc=_enc
218 bw!
219endfunc
220
221func! Test_digraphs_option()
222 let _enc=&enc
223 " reset whichwrap option, so that testing <esc><bs>A works,
224 " without moving up a line
225 set nocp enc=utf8 digraph ww=
226 new
227 call Put_Dig_BS("0","0")
228 call assert_equal("", getline('.'))
229 " not a digraph
230 call Put_Dig_BS("e","l")
231 call assert_equal("l", getline('.'))
232 call Put_Dig_BS("h","t")
233 call assert_equal("þ", getline('.'))
234 " digraph "ab" is the same as "ba"
235 call Put_Dig_BS("a","b")
236 call Put_Dig_BS("b","a")
237 call assert_equal(["",""], getline(line('.')-1,line('.')))
238 " Euro sign
239 call Put_Dig_BS("e","=")
240 call Put_Dig_BS("=","e")
241 call Put_Dig_BS("E","u")
242 call Put_Dig_BS("u","E")
243 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
244 " Rouble sign
245 call Put_Dig_BS("R","=")
246 call Put_Dig_BS("=","R")
247 call Put_Dig_BS("=","P")
248 call Put_Dig_BS("P","=")
249 call assert_equal(['Р']+repeat([""],2)+['П'], getline(line('.')-3,line('.')))
250 " Not a digraph: this is different from <c-k>!
251 call Put_Dig_BS("a","\<bs>")
252 call Put_Dig_BS("\<bs>","a")
253 call assert_equal(['','a'], getline(line('.')-1,line('.')))
254 " Grave
255 call Put_Dig_BS("a","!")
256 call Put_Dig_BS("!","e")
257 call Put_Dig_BS("b","!") " not defined
258 call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
259 " Acute accent
260 call Put_Dig_BS("a","'")
261 call Put_Dig_BS("'","e")
262 call Put_Dig_BS("b","'") " not defined
263 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
264 " Cicumflex
265 call Put_Dig_BS("a",">")
266 call Put_Dig_BS(">","e")
267 call Put_Dig_BS("b",">") " not defined
268 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
269 " Tilde
270 call Put_Dig_BS("o","~")
271 call Put_Dig_BS("~","u") " not defined
272 call Put_Dig_BS("z","~") " not defined
273 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
274 " Tilde
275 call Put_Dig_BS("o","?")
276 call Put_Dig_BS("?","u")
277 call Put_Dig_BS("z","?") " not defined
278 call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
279 " Macron
280 call Put_Dig_BS("o","-")
281 call Put_Dig_BS("-","u")
282 call Put_Dig_BS("z","-") " not defined
283 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
284 " Breve
285 call Put_Dig_BS("o","(")
286 call Put_Dig_BS("(","u")
287 call Put_Dig_BS("z","(") " not defined
288 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
289 " Dot above
290 call Put_Dig_BS("b",".")
291 call Put_Dig_BS(".","e")
292 call Put_Dig_BS("a",".") " not defined
293 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
294 " Diaresis
295 call Put_Dig_BS("a",":")
296 call Put_Dig_BS(":","u")
297 call Put_Dig_BS("b",":") " not defined
298 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
299 " Cedilla
300 call Put_Dig_BS("'",",")
301 call Put_Dig_BS(",","C")
302 call Put_Dig_BS("b",",") " not defined
303 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
304 " Underline
305 call Put_Dig_BS("B","_")
306 call Put_Dig_BS("_","t")
307 call Put_Dig_BS("a","_") " not defined
308 call assert_equal(['', '', '_'], getline(line('.')-2,line('.')))
309 " Stroke
310 call Put_Dig_BS("j","/")
311 call Put_Dig_BS("/","l")
312 call Put_Dig_BS("b","/") " not defined
313 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
314 " Double acute
315 call Put_Dig_BS('O','"')
316 call Put_Dig_BS('"','y')
317 call Put_Dig_BS('b','"') " not defined
318 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
319 " Ogonek
320 call Put_Dig_BS('u',';')
321 call Put_Dig_BS(';','E')
322 call Put_Dig_BS('b',';') " not defined
323 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
324 " Caron
325 call Put_Dig_BS('u','<')
326 call Put_Dig_BS('<','E')
327 call Put_Dig_BS('b','<') " not defined
328 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
329 " Ring above
330 call Put_Dig_BS('u','0')
331 call Put_Dig_BS('0','E') " not defined
332 call Put_Dig_BS('b','0') " not defined
333 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
334 " Hook
335 call Put_Dig_BS('u','2')
336 call Put_Dig_BS('2','E')
337 call Put_Dig_BS('b','2') " not defined
338 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
339 " Horn
340 call Put_Dig_BS('u','9')
341 call Put_Dig_BS('9','E') " not defined
342 call Put_Dig_BS('b','9') " not defined
343 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
344 " Cyrillic
345 call Put_Dig_BS('u','=')
346 call Put_Dig_BS('=','b')
347 call Put_Dig_BS('=','_')
348 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
349 " Greek
350 call Put_Dig_BS('u','*')
351 call Put_Dig_BS('*','b')
352 call Put_Dig_BS('*','_')
353 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
354 " Greek/Cyrillic special
355 call Put_Dig_BS('u','%')
356 call Put_Dig_BS('%','b') " not defined
357 call Put_Dig_BS('%','_') " not defined
358 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
359 " Arabic
360 call Put_Dig_BS('u','+')
361 call Put_Dig_BS('+','b')
362 call Put_Dig_BS('+','_') " japanese industrial symbol
363 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
364 " Hebrew
365 call Put_Dig_BS('Q','+')
366 call Put_Dig_BS('+','B')
367 call Put_Dig_BS('+','X')
368 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
369 " Latin
370 call Put_Dig_BS('a','3')
371 call Put_Dig_BS('A','3')
372 call Put_Dig_BS('3','X')
373 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
374 " Bopomofo
375 call Put_Dig_BS('a','4')
376 call Put_Dig_BS('A','4')
377 call Put_Dig_BS('4','X')
378 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
379 " Hiragana
380 call Put_Dig_BS('a','5')
381 call Put_Dig_BS('A','5')
382 call Put_Dig_BS('5','X')
383 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
384 " Katakana
385 call Put_Dig_BS('a','6')
386 call Put_Dig_BS('A','6')
387 call Put_Dig_BS('6','X')
388 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
389 " Superscripts
390 call Put_Dig_BS('1','S')
391 call Put_Dig_BS('2','S')
392 call Put_Dig_BS('3','S')
393 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
394 " Subscripts
395 call Put_Dig_BS('1','s')
396 call Put_Dig_BS('2','s')
397 call Put_Dig_BS('3','s')
398 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
399 " Eszet (only lowercase)
400 call Put_Dig_BS("s","s")
401 call Put_Dig_BS("S","S") " start of string
402 call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
403 " High bit set (different from <c-k>)
404 call Put_Dig_BS("a"," ")
405 call Put_Dig_BS(" ","A")
406 call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
407 " Escape is not part of a digraph (different from <c-k>)
408 call Put_Dig_BS("a","\<esc>")
409 call Put_Dig_BS("\<esc>","A")
410 call assert_equal(['', ''], getline(line('.')-1,line('.')))
411 " define some custom digraphs
412 " old: 00
413 " old: el l
414 digraph 00 9216
415 digraph el 0252
416 call Put_Dig_BS("0","0")
417 call Put_Dig_BS("e","l")
418 " Reset digraphs
419 digraph 00 8734
420 digraph el 108
421 call Put_Dig_BS("0","0")
422 call Put_Dig_BS("e","l")
423 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
424 " reset encoding option
425 let &enc=_enc
426 set nodigraph ww&vim
427 bw!
428endfunc
429
430" vim: tabstop=2 shiftwidth=0 sts=-1 expandtab