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