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