test_digraph.vim (21373B)
1 " Tests for digraphs 2 3 source check.vim 4 CheckFeature digraphs 5 source term_util.vim 6 7 func Put_Dig(chars) 8 exe "norm! o\<c-k>".a:chars 9 endfu 10 11 func Put_Dig_BS(char1, char2) 12 exe "norm! o".a:char1."\<bs>".a:char2 13 endfu 14 15 func Test_digraphs() 16 new 17 call Put_Dig("00") 18 call assert_equal("∞", getline('.')) 19 " not a digraph 20 call Put_Dig("el") 21 call assert_equal("l", getline('.')) 22 call Put_Dig("ht") 23 call assert_equal("þ", getline('.')) 24 " digraph "ab" is the same as "ba" 25 call Put_Dig("ab") 26 call Put_Dig("ba") 27 call assert_equal(["ば","ば"], getline(line('.')-1,line('.'))) 28 " Euro sign 29 call Put_Dig("e=") 30 call Put_Dig("=e") 31 call Put_Dig("Eu") 32 call Put_Dig("uE") 33 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.'))) 34 " Rouble sign 35 call Put_Dig("R=") 36 call Put_Dig("=R") 37 call Put_Dig("=P") 38 call Put_Dig("P=") 39 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.'))) 40 " Quadruple prime 41 call Put_Dig("'4") 42 call assert_equal("⁗", getline('.')) 43 " APPROACHES THE LIMIT 44 call Put_Dig(".=") 45 call assert_equal("≐", getline('.')) 46 " Not a digraph 47 call Put_Dig("a\<bs>") 48 call Put_Dig("\<bs>a") 49 call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.'))) 50 " Grave 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 " Acute accent 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 " Circumflex 61 call Put_Dig("a>") 62 call Put_Dig(">e") 63 call Put_Dig("b>") " not defined 64 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.'))) 65 " Tilde 66 call Put_Dig("o~") 67 call Put_Dig("~u") " not defined 68 call Put_Dig("z~") " not defined 69 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.'))) 70 " Tilde 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 " Macron 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 " Breve 81 call Put_Dig("o(") 82 call Put_Dig("(u") 83 call Put_Dig("z(") " not defined 84 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.'))) 85 " Dot above 86 call Put_Dig("b.") 87 call Put_Dig(".e") 88 call Put_Dig("a.") " not defined 89 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.'))) 90 " Diaeresis 91 call Put_Dig("a:") 92 call Put_Dig(":u") 93 call Put_Dig("b:") " not defined 94 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.'))) 95 " Cedilla 96 call Put_Dig("',") 97 call Put_Dig(",C") 98 call Put_Dig("b,") " not defined 99 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.'))) 100 " Underline 101 call Put_Dig("B_") 102 call Put_Dig("_t") 103 call Put_Dig("a_") " not defined 104 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.'))) 105 " Stroke 106 call Put_Dig("j/") 107 call Put_Dig("/l") 108 call Put_Dig("b/") " not defined 109 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.'))) 110 " Double acute 111 call Put_Dig('O"') 112 call Put_Dig('"y') 113 call Put_Dig('b"') " not defined 114 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.'))) 115 " Ogonek 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 " Caron 121 call Put_Dig('u<') 122 call Put_Dig('<E') 123 call Put_Dig('b<') " not defined 124 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.'))) 125 " Ring above 126 call Put_Dig('u0') 127 call Put_Dig('0E') " not defined 128 call Put_Dig('b0') " not defined 129 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.'))) 130 " Hook 131 call Put_Dig('u2') 132 call Put_Dig('2E') 133 call Put_Dig('b2') " not defined 134 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.'))) 135 " Horn 136 call Put_Dig('u9') 137 call Put_Dig('9E') " not defined 138 call Put_Dig('b9') " not defined 139 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.'))) 140 " Cyrillic 141 call Put_Dig('u=') 142 call Put_Dig('=b') 143 call Put_Dig('=_') 144 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.'))) 145 " Greek 146 call Put_Dig('u*') 147 call Put_Dig('*b') 148 call Put_Dig('*_') 149 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.'))) 150 " Greek/Cyrillic special 151 call Put_Dig('u%') 152 call Put_Dig('%b') " not defined 153 call Put_Dig('%_') " not defined 154 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.'))) 155 " Arabic 156 call Put_Dig('u+') 157 call Put_Dig('+b') 158 call Put_Dig('+_') " japanese industrial symbol 159 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.'))) 160 " Hebrew 161 call Put_Dig('Q+') 162 call Put_Dig('+B') 163 call Put_Dig('+X') 164 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.'))) 165 " Latin 166 call Put_Dig('a3') 167 call Put_Dig('A3') 168 call Put_Dig('3X') 169 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.'))) 170 " Bopomofo 171 call Put_Dig('a4') 172 call Put_Dig('A4') 173 call Put_Dig('4X') 174 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.'))) 175 " Hiragana 176 call Put_Dig('a5') 177 call Put_Dig('A5') 178 call Put_Dig('5X') 179 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.'))) 180 " Katakana 181 call Put_Dig('a6') 182 call Put_Dig('A6') 183 call Put_Dig('6X') 184 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.'))) 185 " Superscripts 186 call Put_Dig('1S') 187 call Put_Dig('2S') 188 call Put_Dig('3S') 189 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.'))) 190 " Subscripts 191 call Put_Dig('1s') 192 call Put_Dig('2s') 193 call Put_Dig('3s') 194 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.'))) 195 " Eszet (only lowercase) 196 call Put_Dig("ss") 197 call Put_Dig("SS") " start of string 198 call assert_equal(["ß", ""], getline(line('.')-1,line('.'))) 199 " High bit set 200 call Put_Dig("a ") 201 call Put_Dig(" A") 202 call assert_equal(['á', 'Á'], getline(line('.')-1,line('.'))) 203 " Escape is not part of a digraph 204 call Put_Dig("a\<esc>") 205 call Put_Dig("\<esc>A") 206 call assert_equal(['', 'A'], getline(line('.')-1,line('.'))) 207 " define some custom digraphs 208 " old: 00 ∞ 209 " old: el l 210 digraph 00 9216 211 digraph el 0252 212 call Put_Dig("00") 213 call Put_Dig("el") 214 " Reset digraphs 215 digraph 00 8734 216 digraph el 108 217 call Put_Dig("00") 218 call Put_Dig("el") 219 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.'))) 220 call assert_fails('exe "digraph a\<Esc> 100"', 'E104:') 221 call assert_fails('exe "digraph \<Esc>a 100"', 'E104:') 222 call assert_fails('digraph xy z', 'E39:') 223 call assert_fails('digraph x', 'E1214:') 224 bw! 225 endfunc 226 227 func Test_digraphs_option() 228 " reset whichwrap option, so that testing <esc><bs>A works, 229 " without moving up a line 230 set digraph ww= 231 new 232 call Put_Dig_BS("0","0") 233 call assert_equal("∞", getline('.')) 234 " not a digraph 235 call Put_Dig_BS("e","l") 236 call assert_equal("l", getline('.')) 237 call Put_Dig_BS("h","t") 238 call assert_equal("þ", getline('.')) 239 " digraph "ab" is the same as "ba" 240 call Put_Dig_BS("a","b") 241 call Put_Dig_BS("b","a") 242 call assert_equal(["ば","ば"], getline(line('.')-1,line('.'))) 243 " Euro sign 244 call Put_Dig_BS("e","=") 245 call Put_Dig_BS("=","e") 246 call Put_Dig_BS("E","u") 247 call Put_Dig_BS("u","E") 248 call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.'))) 249 " Rouble sign 250 call Put_Dig_BS("R","=") 251 call Put_Dig_BS("=","R") 252 call Put_Dig_BS("=","P") 253 call Put_Dig_BS("P","=") 254 call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.'))) 255 " Not a digraph: this is different from <c-k>! 256 let _bs = &bs 257 set bs= 258 call Put_Dig_BS("a","\<bs>") 259 call Put_Dig_BS("\<bs>","a") 260 call assert_equal(['','a'], getline(line('.')-1,line('.'))) 261 let &bs = _bs 262 " Grave 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 " Acute accent 268 call Put_Dig_BS("a","'") 269 call Put_Dig_BS("'","e") 270 call Put_Dig_BS("b","'") " not defined 271 call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.'))) 272 " Cicumflex 273 call Put_Dig_BS("a",">") 274 call Put_Dig_BS(">","e") 275 call Put_Dig_BS("b",">") " not defined 276 call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.'))) 277 " Tilde 278 call Put_Dig_BS("o","~") 279 call Put_Dig_BS("~","u") " not defined 280 call Put_Dig_BS("z","~") " not defined 281 call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.'))) 282 " Tilde 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 " Macron 288 call Put_Dig_BS("o","-") 289 call Put_Dig_BS("-","u") 290 call Put_Dig_BS("z","-") " not defined 291 call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.'))) 292 " Breve 293 call Put_Dig_BS("o","(") 294 call Put_Dig_BS("(","u") 295 call Put_Dig_BS("z","(") " not defined 296 call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.'))) 297 " Dot above 298 call Put_Dig_BS("b",".") 299 call Put_Dig_BS(".","e") 300 call Put_Dig_BS("a",".") " not defined 301 call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.'))) 302 " Diaeresis 303 call Put_Dig_BS("a",":") 304 call Put_Dig_BS(":","u") 305 call Put_Dig_BS("b",":") " not defined 306 call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.'))) 307 " Cedilla 308 call Put_Dig_BS("'",",") 309 call Put_Dig_BS(",","C") 310 call Put_Dig_BS("b",",") " not defined 311 call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.'))) 312 " Underline 313 call Put_Dig_BS("B","_") 314 call Put_Dig_BS("_","t") 315 call Put_Dig_BS("a","_") " not defined 316 call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.'))) 317 " Stroke 318 call Put_Dig_BS("j","/") 319 call Put_Dig_BS("/","l") 320 call Put_Dig_BS("b","/") " not defined 321 call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.'))) 322 " Double acute 323 call Put_Dig_BS('O','"') 324 call Put_Dig_BS('"','y') 325 call Put_Dig_BS('b','"') " not defined 326 call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.'))) 327 " Ogonek 328 call Put_Dig_BS('u',';') 329 call Put_Dig_BS(';','E') 330 call Put_Dig_BS('b',';') " not defined 331 call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.'))) 332 " Caron 333 call Put_Dig_BS('u','<') 334 call Put_Dig_BS('<','E') 335 call Put_Dig_BS('b','<') " not defined 336 call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.'))) 337 " Ring above 338 call Put_Dig_BS('u','0') 339 call Put_Dig_BS('0','E') " not defined 340 call Put_Dig_BS('b','0') " not defined 341 call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.'))) 342 " Hook 343 call Put_Dig_BS('u','2') 344 call Put_Dig_BS('2','E') 345 call Put_Dig_BS('b','2') " not defined 346 call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.'))) 347 " Horn 348 call Put_Dig_BS('u','9') 349 call Put_Dig_BS('9','E') " not defined 350 call Put_Dig_BS('b','9') " not defined 351 call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.'))) 352 " Cyrillic 353 call Put_Dig_BS('u','=') 354 call Put_Dig_BS('=','b') 355 call Put_Dig_BS('=','_') 356 call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.'))) 357 " Greek 358 call Put_Dig_BS('u','*') 359 call Put_Dig_BS('*','b') 360 call Put_Dig_BS('*','_') 361 call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.'))) 362 " Greek/Cyrillic special 363 call Put_Dig_BS('u','%') 364 call Put_Dig_BS('%','b') " not defined 365 call Put_Dig_BS('%','_') " not defined 366 call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.'))) 367 " Arabic 368 call Put_Dig_BS('u','+') 369 call Put_Dig_BS('+','b') 370 call Put_Dig_BS('+','_') " japanese industrial symbol 371 call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.'))) 372 " Hebrew 373 call Put_Dig_BS('Q','+') 374 call Put_Dig_BS('+','B') 375 call Put_Dig_BS('+','X') 376 call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.'))) 377 " Latin 378 call Put_Dig_BS('a','3') 379 call Put_Dig_BS('A','3') 380 call Put_Dig_BS('3','X') 381 call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.'))) 382 " Bopomofo 383 call Put_Dig_BS('a','4') 384 call Put_Dig_BS('A','4') 385 call Put_Dig_BS('4','X') 386 call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.'))) 387 " Hiragana 388 call Put_Dig_BS('a','5') 389 call Put_Dig_BS('A','5') 390 call Put_Dig_BS('5','X') 391 call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.'))) 392 " Katakana 393 call Put_Dig_BS('a','6') 394 call Put_Dig_BS('A','6') 395 call Put_Dig_BS('6','X') 396 call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.'))) 397 " Superscripts 398 call Put_Dig_BS('1','S') 399 call Put_Dig_BS('2','S') 400 call Put_Dig_BS('3','S') 401 call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.'))) 402 " Subscripts 403 call Put_Dig_BS('1','s') 404 call Put_Dig_BS('2','s') 405 call Put_Dig_BS('3','s') 406 call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.'))) 407 " Eszet (only lowercase) 408 call Put_Dig_BS("s","s") 409 call Put_Dig_BS("S","S") " start of string 410 call assert_equal(["ß", ""], getline(line('.')-1,line('.'))) 411 " High bit set (different from <c-k>) 412 call Put_Dig_BS("a"," ") 413 call Put_Dig_BS(" ","A") 414 call assert_equal([' ', 'A'], getline(line('.')-1,line('.'))) 415 " Escape is not part of a digraph (different from <c-k>) 416 call Put_Dig_BS("a","\<esc>") 417 call Put_Dig_BS("\<esc>","A") 418 call assert_equal(['', ''], getline(line('.')-1,line('.'))) 419 " define some custom digraphs 420 " old: 00 ∞ 421 " old: el l 422 digraph 00 9216 423 digraph el 0252 424 call Put_Dig_BS("0","0") 425 call Put_Dig_BS("e","l") 426 " Reset digraphs 427 digraph 00 8734 428 digraph el 108 429 call Put_Dig_BS("0","0") 430 call Put_Dig_BS("e","l") 431 call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.'))) 432 set nodigraph ww&vim 433 bw! 434 endfunc 435 436 func Test_digraphs_output() 437 new 438 let out = execute(':digraph') 439 call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>')) 440 call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>')) 441 call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>')) 442 call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>')) 443 call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>')) 444 call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>')) 445 call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>')) 446 call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>')) 447 call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>')) 448 call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>')) 449 call assert_notmatch('Latin supplement', out) 450 451 let out_bang_without_custom = execute(':digraph!') 452 digraph lt 60 453 let out_bang_with_custom = execute(':digraph!') 454 call assert_notmatch('lt', out_bang_without_custom) 455 call assert_match("^\n" 456 \ .. "NU ^@ 10 .*\n" 457 \ .. "Latin supplement\n" 458 \ .. "!I ¡ 161 .*\n" 459 \ .. ".*\n" 460 \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom) 461 bw! 462 endfunc 463 464 func Test_loadkeymap() 465 CheckFeature keymap 466 new 467 set keymap=czech 468 set iminsert=0 469 call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx') 470 call assert_equal("|'é+ěščřžýáíé'", getline('.')) 471 " reset keymap and encoding option 472 set keymap= 473 bw! 474 endfunc 475 476 func Test_digraph_cmndline() 477 " Create digraph on commandline 478 call feedkeys(":\"\<c-k>Eu\<cr>", 'xt') 479 call assert_equal('"€', @:) 480 481 " Canceling a CTRL-K on the cmdline 482 call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt') 483 call assert_equal('"ab', @:) 484 endfunc 485 486 func Test_show_digraph() 487 new 488 call Put_Dig("e=") 489 call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii')) 490 bwipe! 491 endfunc 492 493 func Test_show_digraph_cp1251() 494 throw 'skipped: Nvim supports ''utf8'' encoding only' 495 new 496 set encoding=cp1251 497 call Put_Dig("='") 498 call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii')) 499 set encoding=utf-8 500 bwipe! 501 endfunc 502 503 " Test for error in a keymap file 504 func Test_loadkeymap_error() 505 CheckFeature keymap 506 call assert_fails('loadkeymap', 'E105:') 507 call writefile(['loadkeymap', 'a'], 'Xkeymap', 'D') 508 call assert_fails('source Xkeymap', 'E791:') 509 endfunc 510 511 " Test for the characters displayed on the screen when entering a digraph 512 func Test_entering_digraph() 513 CheckRunVimInTerminal 514 let buf = RunVimInTerminal('', {'rows': 6}) 515 call term_sendkeys(buf, "i\<C-K>") 516 call term_wait(buf) 517 call assert_equal('?', term_getline(buf, 1)) 518 call term_sendkeys(buf, "1") 519 call term_wait(buf) 520 call assert_equal('1', term_getline(buf, 1)) 521 call term_sendkeys(buf, "2") 522 call term_wait(buf) 523 call assert_equal('½', term_getline(buf, 1)) 524 call StopVimInTerminal(buf) 525 endfunc 526 527 func Test_digraph_set_function() 528 new 529 call digraph_set('aa', 'あ') 530 call Put_Dig('aa') 531 call assert_equal('あ', getline('$')) 532 call digraph_set(' i', 'い') 533 call Put_Dig(' i') 534 call assert_equal('い', getline('$')) 535 call digraph_set(' ', 'う') 536 call Put_Dig(' ') 537 call assert_equal('う', getline('$')) 538 539 eval 'aa'->digraph_set('え') 540 call Put_Dig('aa') 541 call assert_equal('え', getline('$')) 542 543 call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa') 544 call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b') 545 call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ') 546 call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ') 547 call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: か' .. nr2char(0x3099)) 548 call assert_fails('call digraph_set(v:_null_string, "い")', 'E1214: Digraph must be just two characters') 549 call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String') 550 bwipe! 551 endfunc 552 553 func Test_digraph_get_function() 554 " Built-in digraphs 555 call assert_equal('∞', digraph_get('00')) 556 557 " User-defined digraphs 558 call digraph_set('aa', 'あ') 559 call digraph_set(' i', 'い') 560 call digraph_set(' ', 'う') 561 call assert_equal('あ', digraph_get('aa')) 562 call assert_equal('あ', 'aa'->digraph_get()) 563 call assert_equal('い', digraph_get(' i')) 564 call assert_equal('う', digraph_get(' ')) 565 call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa') 566 call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b') 567 call assert_fails('call digraph_get(v:_null_string)', 'E1214: Digraph must be just two characters:') 568 call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String') 569 endfunc 570 571 func Test_digraph_get_function_encode() 572 throw 'Skipped: Nvim does not support setting encoding=japan' 573 CheckFeature iconv 574 575 let testcases = { 576 \'00': '∞', 577 \'aa': 'あ', 578 \} 579 for [key, ch] in items(testcases) 580 call digraph_set(key, ch) 581 set encoding=japan 582 call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key)) 583 set encoding=utf-8 584 endfor 585 endfunc 586 587 func Test_digraph_setlist_function() 588 call digraph_setlist([['aa', 'き'], ['bb', 'く']]) 589 call assert_equal('き', digraph_get('aa')) 590 call assert_equal('く', digraph_get('bb')) 591 592 call assert_fails('call digraph_setlist([[]])', 'E1216:') 593 call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:') 594 call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ') 595 call assert_fails('call digraph_setlist([v:_null_list])', 'E1216:') 596 call assert_fails('call digraph_setlist({})', 'E1216:') 597 call assert_fails('call digraph_setlist([{}])', 'E1216:') 598 call assert_true(digraph_setlist(v:_null_list)) 599 endfunc 600 601 func Test_digraph_getlist_function() 602 " Make sure user-defined digraphs are defined 603 call digraph_setlist([['aa', 'き'], ['bb', 'く']]) 604 605 for pair in digraph_getlist(1) 606 call assert_equal(pair[1], digraph_get(pair[0])) 607 endfor 608 609 " We don't know how many digraphs are registered before, so check the number 610 " of digraphs returned. 611 call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len()) 612 call assert_notequal(digraph_getlist()->len(), digraph_getlist(1)->len()) 613 call assert_equal(digraph_getlist()->len(), digraph_getlist(v:false)->len()) 614 call assert_notequal(digraph_getlist()->len(), digraph_getlist(v:true)->len()) 615 616 call assert_fails('call digraph_getlist(0z12)', 'E1212: Bool required for argument 1') 617 endfunc 618 619 func Test_digraph_angle_bracket_patch() 620 " Ensure that the deprecated angle brackets 2329/232A ('</','/>') are not used 621 call assert_notequal('〈', digraph_get('</')) 622 call assert_notequal('〉', digraph_get('/>')) 623 " Ensure that the CJK angle brackets 3008/3009 ('</','/>') are used 624 call assert_equal('〈', digraph_get('</')) 625 call assert_equal('〉', digraph_get('/>')) 626 " Ensure that the mathematical angle brackets 27E8/27E9 ('<[',']>') are defined 627 call assert_equal('⟨', digraph_get('<[')) 628 call assert_equal('⟩', digraph_get(']>')) 629 endfunc 630 631 " vim: shiftwidth=2 sts=2 expandtab