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