neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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