1397eadbeSBram Moolenaar" Tests for digraphs 2397eadbeSBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature digraphs 5845e0ee5SBram Moolenaarsource term_util.vim 6397eadbeSBram Moolenaar 75f73ef8dSBram Moolenaarfunc Put_Dig(chars) 8397eadbeSBram Moolenaar exe "norm! o\<c-k>".a:chars 9397eadbeSBram Moolenaarendfu 10397eadbeSBram Moolenaar 115f73ef8dSBram Moolenaarfunc Put_Dig_BS(char1, char2) 12397eadbeSBram Moolenaar exe "norm! o".a:char1."\<bs>".a:char2 13397eadbeSBram Moolenaarendfu 14397eadbeSBram Moolenaar 155f73ef8dSBram Moolenaarfunc Test_digraphs() 16397eadbeSBram Moolenaar new 17397eadbeSBram Moolenaar call Put_Dig("00") 18397eadbeSBram Moolenaar call assert_equal("∞", getline('.')) 19397eadbeSBram Moolenaar " not a digraph 20397eadbeSBram Moolenaar call Put_Dig("el") 21397eadbeSBram Moolenaar call assert_equal("l", getline('.')) 22397eadbeSBram Moolenaar call Put_Dig("ht") 23397eadbeSBram Moolenaar call assert_equal("þ", getline('.')) 24397eadbeSBram Moolenaar " digraph "ab" is the same as "ba" 25397eadbeSBram Moolenaar call Put_Dig("ab") 26397eadbeSBram Moolenaar call Put_Dig("ba") 27397eadbeSBram Moolenaar call assert_equal(["ば","ば"], getline(line('.')-1,line('.'))) 28397eadbeSBram Moolenaar " Euro sign 29397eadbeSBram Moolenaar call Put_Dig("e=") 30397eadbeSBram Moolenaar call Put_Dig("=e") 31397eadbeSBram Moolenaar call Put_Dig("Eu") 32397eadbeSBram Moolenaar call Put_Dig("uE") 33397eadbeSBram Moolenaar call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.'))) 34397eadbeSBram Moolenaar " Rouble sign 35397eadbeSBram Moolenaar call Put_Dig("R=") 36397eadbeSBram Moolenaar call Put_Dig("=R") 37397eadbeSBram Moolenaar call Put_Dig("=P") 38397eadbeSBram Moolenaar call Put_Dig("P=") 39397eadbeSBram Moolenaar call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.'))) 40397eadbeSBram Moolenaar " Not a digraph 41397eadbeSBram Moolenaar call Put_Dig("a\<bs>") 42397eadbeSBram Moolenaar call Put_Dig("\<bs>a") 43397eadbeSBram Moolenaar call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.'))) 44397eadbeSBram Moolenaar " Grave 45397eadbeSBram Moolenaar call Put_Dig("a!") 46397eadbeSBram Moolenaar call Put_Dig("!e") 47397eadbeSBram Moolenaar call Put_Dig("b!") " not defined 48397eadbeSBram Moolenaar call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.'))) 49397eadbeSBram Moolenaar " Acute accent 50397eadbeSBram Moolenaar call Put_Dig("a'") 51397eadbeSBram Moolenaar call Put_Dig("'e") 52397eadbeSBram Moolenaar call Put_Dig("b'") " not defined 53397eadbeSBram Moolenaar call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.'))) 54397eadbeSBram Moolenaar " Cicumflex 55397eadbeSBram Moolenaar call Put_Dig("a>") 56397eadbeSBram Moolenaar call Put_Dig(">e") 57397eadbeSBram Moolenaar call Put_Dig("b>") " not defined 58397eadbeSBram Moolenaar call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.'))) 59397eadbeSBram Moolenaar " Tilde 60397eadbeSBram Moolenaar call Put_Dig("o~") 61397eadbeSBram Moolenaar call Put_Dig("~u") " not defined 62397eadbeSBram Moolenaar call Put_Dig("z~") " not defined 63397eadbeSBram Moolenaar call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.'))) 64397eadbeSBram Moolenaar " Tilde 65397eadbeSBram Moolenaar call Put_Dig("o?") 66397eadbeSBram Moolenaar call Put_Dig("?u") 67397eadbeSBram Moolenaar call Put_Dig("z?") " not defined 68397eadbeSBram Moolenaar call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.'))) 69397eadbeSBram Moolenaar " Macron 70397eadbeSBram Moolenaar call Put_Dig("o-") 71397eadbeSBram Moolenaar call Put_Dig("-u") 72397eadbeSBram Moolenaar call Put_Dig("z-") " not defined 73397eadbeSBram Moolenaar call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.'))) 74397eadbeSBram Moolenaar " Breve 75397eadbeSBram Moolenaar call Put_Dig("o(") 76397eadbeSBram Moolenaar call Put_Dig("(u") 77397eadbeSBram Moolenaar call Put_Dig("z(") " not defined 78397eadbeSBram Moolenaar call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.'))) 79397eadbeSBram Moolenaar " Dot above 80397eadbeSBram Moolenaar call Put_Dig("b.") 81397eadbeSBram Moolenaar call Put_Dig(".e") 82397eadbeSBram Moolenaar call Put_Dig("a.") " not defined 83397eadbeSBram Moolenaar call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.'))) 844b96df5aSBram Moolenaar " Diaeresis 85397eadbeSBram Moolenaar call Put_Dig("a:") 86397eadbeSBram Moolenaar call Put_Dig(":u") 87397eadbeSBram Moolenaar call Put_Dig("b:") " not defined 88397eadbeSBram Moolenaar call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.'))) 89397eadbeSBram Moolenaar " Cedilla 90397eadbeSBram Moolenaar call Put_Dig("',") 91397eadbeSBram Moolenaar call Put_Dig(",C") 92397eadbeSBram Moolenaar call Put_Dig("b,") " not defined 93397eadbeSBram Moolenaar call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.'))) 94397eadbeSBram Moolenaar " Underline 95397eadbeSBram Moolenaar call Put_Dig("B_") 96397eadbeSBram Moolenaar call Put_Dig("_t") 97397eadbeSBram Moolenaar call Put_Dig("a_") " not defined 98397eadbeSBram Moolenaar call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.'))) 99397eadbeSBram Moolenaar " Stroke 100397eadbeSBram Moolenaar call Put_Dig("j/") 101397eadbeSBram Moolenaar call Put_Dig("/l") 102397eadbeSBram Moolenaar call Put_Dig("b/") " not defined 103397eadbeSBram Moolenaar call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.'))) 104397eadbeSBram Moolenaar " Double acute 105397eadbeSBram Moolenaar call Put_Dig('O"') 106397eadbeSBram Moolenaar call Put_Dig('"y') 107397eadbeSBram Moolenaar call Put_Dig('b"') " not defined 108397eadbeSBram Moolenaar call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.'))) 109397eadbeSBram Moolenaar " Ogonek 110397eadbeSBram Moolenaar call Put_Dig('u;') 111397eadbeSBram Moolenaar call Put_Dig(';E') 112397eadbeSBram Moolenaar call Put_Dig('b;') " not defined 113397eadbeSBram Moolenaar call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.'))) 114397eadbeSBram Moolenaar " Caron 115397eadbeSBram Moolenaar call Put_Dig('u<') 116397eadbeSBram Moolenaar call Put_Dig('<E') 117397eadbeSBram Moolenaar call Put_Dig('b<') " not defined 118397eadbeSBram Moolenaar call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.'))) 119397eadbeSBram Moolenaar " Ring above 120397eadbeSBram Moolenaar call Put_Dig('u0') 121397eadbeSBram Moolenaar call Put_Dig('0E') " not defined 122397eadbeSBram Moolenaar call Put_Dig('b0') " not defined 123397eadbeSBram Moolenaar call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.'))) 124397eadbeSBram Moolenaar " Hook 125397eadbeSBram Moolenaar call Put_Dig('u2') 126397eadbeSBram Moolenaar call Put_Dig('2E') 127397eadbeSBram Moolenaar call Put_Dig('b2') " not defined 128397eadbeSBram Moolenaar call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.'))) 129397eadbeSBram Moolenaar " Horn 130397eadbeSBram Moolenaar call Put_Dig('u9') 131397eadbeSBram Moolenaar call Put_Dig('9E') " not defined 132397eadbeSBram Moolenaar call Put_Dig('b9') " not defined 133397eadbeSBram Moolenaar call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.'))) 134397eadbeSBram Moolenaar " Cyrillic 135397eadbeSBram Moolenaar call Put_Dig('u=') 136397eadbeSBram Moolenaar call Put_Dig('=b') 137397eadbeSBram Moolenaar call Put_Dig('=_') 138397eadbeSBram Moolenaar call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.'))) 139397eadbeSBram Moolenaar " Greek 140397eadbeSBram Moolenaar call Put_Dig('u*') 141397eadbeSBram Moolenaar call Put_Dig('*b') 142397eadbeSBram Moolenaar call Put_Dig('*_') 143397eadbeSBram Moolenaar call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.'))) 144397eadbeSBram Moolenaar " Greek/Cyrillic special 145397eadbeSBram Moolenaar call Put_Dig('u%') 146397eadbeSBram Moolenaar call Put_Dig('%b') " not defined 147397eadbeSBram Moolenaar call Put_Dig('%_') " not defined 148397eadbeSBram Moolenaar call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.'))) 149397eadbeSBram Moolenaar " Arabic 150397eadbeSBram Moolenaar call Put_Dig('u+') 151397eadbeSBram Moolenaar call Put_Dig('+b') 152397eadbeSBram Moolenaar call Put_Dig('+_') " japanese industrial symbol 153397eadbeSBram Moolenaar call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.'))) 154397eadbeSBram Moolenaar " Hebrew 155397eadbeSBram Moolenaar call Put_Dig('Q+') 156397eadbeSBram Moolenaar call Put_Dig('+B') 157397eadbeSBram Moolenaar call Put_Dig('+X') 158397eadbeSBram Moolenaar call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.'))) 159397eadbeSBram Moolenaar " Latin 160397eadbeSBram Moolenaar call Put_Dig('a3') 161397eadbeSBram Moolenaar call Put_Dig('A3') 162397eadbeSBram Moolenaar call Put_Dig('3X') 163397eadbeSBram Moolenaar call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.'))) 164397eadbeSBram Moolenaar " Bopomofo 165397eadbeSBram Moolenaar call Put_Dig('a4') 166397eadbeSBram Moolenaar call Put_Dig('A4') 167397eadbeSBram Moolenaar call Put_Dig('4X') 168397eadbeSBram Moolenaar call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.'))) 169397eadbeSBram Moolenaar " Hiragana 170397eadbeSBram Moolenaar call Put_Dig('a5') 171397eadbeSBram Moolenaar call Put_Dig('A5') 172397eadbeSBram Moolenaar call Put_Dig('5X') 173397eadbeSBram Moolenaar call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.'))) 174397eadbeSBram Moolenaar " Katakana 175397eadbeSBram Moolenaar call Put_Dig('a6') 176397eadbeSBram Moolenaar call Put_Dig('A6') 177397eadbeSBram Moolenaar call Put_Dig('6X') 178397eadbeSBram Moolenaar call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.'))) 179397eadbeSBram Moolenaar " Superscripts 180397eadbeSBram Moolenaar call Put_Dig('1S') 181397eadbeSBram Moolenaar call Put_Dig('2S') 182397eadbeSBram Moolenaar call Put_Dig('3S') 183397eadbeSBram Moolenaar call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.'))) 184397eadbeSBram Moolenaar " Subscripts 185397eadbeSBram Moolenaar call Put_Dig('1s') 186397eadbeSBram Moolenaar call Put_Dig('2s') 187397eadbeSBram Moolenaar call Put_Dig('3s') 188397eadbeSBram Moolenaar call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.'))) 189397eadbeSBram Moolenaar " Eszet (only lowercase) 190397eadbeSBram Moolenaar call Put_Dig("ss") 191397eadbeSBram Moolenaar call Put_Dig("SS") " start of string 192397eadbeSBram Moolenaar call assert_equal(["ß", ""], getline(line('.')-1,line('.'))) 193397eadbeSBram Moolenaar " High bit set 194397eadbeSBram Moolenaar call Put_Dig("a ") 195397eadbeSBram Moolenaar call Put_Dig(" A") 196397eadbeSBram Moolenaar call assert_equal(['á', 'Á'], getline(line('.')-1,line('.'))) 197397eadbeSBram Moolenaar " Escape is not part of a digraph 198397eadbeSBram Moolenaar call Put_Dig("a\<esc>") 199397eadbeSBram Moolenaar call Put_Dig("\<esc>A") 200397eadbeSBram Moolenaar call assert_equal(['', 'A'], getline(line('.')-1,line('.'))) 201397eadbeSBram Moolenaar " define some custom digraphs 202397eadbeSBram Moolenaar " old: 00 ∞ 203397eadbeSBram Moolenaar " old: el l 204397eadbeSBram Moolenaar digraph 00 9216 205397eadbeSBram Moolenaar digraph el 0252 206397eadbeSBram Moolenaar call Put_Dig("00") 207397eadbeSBram Moolenaar call Put_Dig("el") 208397eadbeSBram Moolenaar " Reset digraphs 209397eadbeSBram Moolenaar digraph 00 8734 210397eadbeSBram Moolenaar digraph el 108 211397eadbeSBram Moolenaar call Put_Dig("00") 212397eadbeSBram Moolenaar call Put_Dig("el") 213397eadbeSBram Moolenaar call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.'))) 214ee4e0c1eSBram Moolenaar call assert_fails('exe "digraph a\<Esc> 100"', 'E104:') 215ee4e0c1eSBram Moolenaar call assert_fails('exe "digraph \<Esc>a 100"', 'E104:') 216067297e1SBram Moolenaar call assert_fails('digraph xy z', 'E39:') 2176106504eSmityu call assert_fails('digraph x', 'E1214:') 218397eadbeSBram Moolenaar bw! 219397eadbeSBram Moolenaarendfunc 220397eadbeSBram Moolenaar 2215f73ef8dSBram Moolenaarfunc Test_digraphs_option() 222397eadbeSBram Moolenaar " reset whichwrap option, so that testing <esc><bs>A works, 223397eadbeSBram Moolenaar " without moving up a line 224dfd63e30SBram Moolenaar set digraph ww= 225397eadbeSBram Moolenaar new 226397eadbeSBram Moolenaar call Put_Dig_BS("0","0") 227397eadbeSBram Moolenaar call assert_equal("∞", getline('.')) 228397eadbeSBram Moolenaar " not a digraph 229397eadbeSBram Moolenaar call Put_Dig_BS("e","l") 230397eadbeSBram Moolenaar call assert_equal("l", getline('.')) 231397eadbeSBram Moolenaar call Put_Dig_BS("h","t") 232397eadbeSBram Moolenaar call assert_equal("þ", getline('.')) 233397eadbeSBram Moolenaar " digraph "ab" is the same as "ba" 234397eadbeSBram Moolenaar call Put_Dig_BS("a","b") 235397eadbeSBram Moolenaar call Put_Dig_BS("b","a") 236397eadbeSBram Moolenaar call assert_equal(["ば","ば"], getline(line('.')-1,line('.'))) 237397eadbeSBram Moolenaar " Euro sign 238397eadbeSBram Moolenaar call Put_Dig_BS("e","=") 239397eadbeSBram Moolenaar call Put_Dig_BS("=","e") 240397eadbeSBram Moolenaar call Put_Dig_BS("E","u") 241397eadbeSBram Moolenaar call Put_Dig_BS("u","E") 242397eadbeSBram Moolenaar call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.'))) 243397eadbeSBram Moolenaar " Rouble sign 244397eadbeSBram Moolenaar call Put_Dig_BS("R","=") 245397eadbeSBram Moolenaar call Put_Dig_BS("=","R") 246397eadbeSBram Moolenaar call Put_Dig_BS("=","P") 247397eadbeSBram Moolenaar call Put_Dig_BS("P","=") 248397eadbeSBram Moolenaar call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.'))) 249397eadbeSBram Moolenaar " Not a digraph: this is different from <c-k>! 250397eadbeSBram Moolenaar call Put_Dig_BS("a","\<bs>") 251397eadbeSBram Moolenaar call Put_Dig_BS("\<bs>","a") 252397eadbeSBram Moolenaar call assert_equal(['','a'], getline(line('.')-1,line('.'))) 253397eadbeSBram Moolenaar " Grave 254397eadbeSBram Moolenaar call Put_Dig_BS("a","!") 255397eadbeSBram Moolenaar call Put_Dig_BS("!","e") 256397eadbeSBram Moolenaar call Put_Dig_BS("b","!") " not defined 257397eadbeSBram Moolenaar call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.'))) 258397eadbeSBram Moolenaar " Acute accent 259397eadbeSBram Moolenaar call Put_Dig_BS("a","'") 260397eadbeSBram Moolenaar call Put_Dig_BS("'","e") 261397eadbeSBram Moolenaar call Put_Dig_BS("b","'") " not defined 262397eadbeSBram Moolenaar call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.'))) 263397eadbeSBram Moolenaar " Cicumflex 264397eadbeSBram Moolenaar call Put_Dig_BS("a",">") 265397eadbeSBram Moolenaar call Put_Dig_BS(">","e") 266397eadbeSBram Moolenaar call Put_Dig_BS("b",">") " not defined 267397eadbeSBram Moolenaar call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.'))) 268397eadbeSBram Moolenaar " Tilde 269397eadbeSBram Moolenaar call Put_Dig_BS("o","~") 270397eadbeSBram Moolenaar call Put_Dig_BS("~","u") " not defined 271397eadbeSBram Moolenaar call Put_Dig_BS("z","~") " not defined 272397eadbeSBram Moolenaar call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.'))) 273397eadbeSBram Moolenaar " Tilde 274397eadbeSBram Moolenaar call Put_Dig_BS("o","?") 275397eadbeSBram Moolenaar call Put_Dig_BS("?","u") 276397eadbeSBram Moolenaar call Put_Dig_BS("z","?") " not defined 277397eadbeSBram Moolenaar call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.'))) 278397eadbeSBram Moolenaar " Macron 279397eadbeSBram Moolenaar call Put_Dig_BS("o","-") 280397eadbeSBram Moolenaar call Put_Dig_BS("-","u") 281397eadbeSBram Moolenaar call Put_Dig_BS("z","-") " not defined 282397eadbeSBram Moolenaar call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.'))) 283397eadbeSBram Moolenaar " Breve 284397eadbeSBram Moolenaar call Put_Dig_BS("o","(") 285397eadbeSBram Moolenaar call Put_Dig_BS("(","u") 286397eadbeSBram Moolenaar call Put_Dig_BS("z","(") " not defined 287397eadbeSBram Moolenaar call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.'))) 288397eadbeSBram Moolenaar " Dot above 289397eadbeSBram Moolenaar call Put_Dig_BS("b",".") 290397eadbeSBram Moolenaar call Put_Dig_BS(".","e") 291397eadbeSBram Moolenaar call Put_Dig_BS("a",".") " not defined 292397eadbeSBram Moolenaar call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.'))) 2934b96df5aSBram Moolenaar " Diaeresis 294397eadbeSBram Moolenaar call Put_Dig_BS("a",":") 295397eadbeSBram Moolenaar call Put_Dig_BS(":","u") 296397eadbeSBram Moolenaar call Put_Dig_BS("b",":") " not defined 297397eadbeSBram Moolenaar call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.'))) 298397eadbeSBram Moolenaar " Cedilla 299397eadbeSBram Moolenaar call Put_Dig_BS("'",",") 300397eadbeSBram Moolenaar call Put_Dig_BS(",","C") 301397eadbeSBram Moolenaar call Put_Dig_BS("b",",") " not defined 302397eadbeSBram Moolenaar call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.'))) 303397eadbeSBram Moolenaar " Underline 304397eadbeSBram Moolenaar call Put_Dig_BS("B","_") 305397eadbeSBram Moolenaar call Put_Dig_BS("_","t") 306397eadbeSBram Moolenaar call Put_Dig_BS("a","_") " not defined 307397eadbeSBram Moolenaar call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.'))) 308397eadbeSBram Moolenaar " Stroke 309397eadbeSBram Moolenaar call Put_Dig_BS("j","/") 310397eadbeSBram Moolenaar call Put_Dig_BS("/","l") 311397eadbeSBram Moolenaar call Put_Dig_BS("b","/") " not defined 312397eadbeSBram Moolenaar call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.'))) 313397eadbeSBram Moolenaar " Double acute 314397eadbeSBram Moolenaar call Put_Dig_BS('O','"') 315397eadbeSBram Moolenaar call Put_Dig_BS('"','y') 316397eadbeSBram Moolenaar call Put_Dig_BS('b','"') " not defined 317397eadbeSBram Moolenaar call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.'))) 318397eadbeSBram Moolenaar " Ogonek 319397eadbeSBram Moolenaar call Put_Dig_BS('u',';') 320397eadbeSBram Moolenaar call Put_Dig_BS(';','E') 321397eadbeSBram Moolenaar call Put_Dig_BS('b',';') " not defined 322397eadbeSBram Moolenaar call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.'))) 323397eadbeSBram Moolenaar " Caron 324397eadbeSBram Moolenaar call Put_Dig_BS('u','<') 325397eadbeSBram Moolenaar call Put_Dig_BS('<','E') 326397eadbeSBram Moolenaar call Put_Dig_BS('b','<') " not defined 327397eadbeSBram Moolenaar call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.'))) 328397eadbeSBram Moolenaar " Ring above 329397eadbeSBram Moolenaar call Put_Dig_BS('u','0') 330397eadbeSBram Moolenaar call Put_Dig_BS('0','E') " not defined 331397eadbeSBram Moolenaar call Put_Dig_BS('b','0') " not defined 332397eadbeSBram Moolenaar call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.'))) 333397eadbeSBram Moolenaar " Hook 334397eadbeSBram Moolenaar call Put_Dig_BS('u','2') 335397eadbeSBram Moolenaar call Put_Dig_BS('2','E') 336397eadbeSBram Moolenaar call Put_Dig_BS('b','2') " not defined 337397eadbeSBram Moolenaar call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.'))) 338397eadbeSBram Moolenaar " Horn 339397eadbeSBram Moolenaar call Put_Dig_BS('u','9') 340397eadbeSBram Moolenaar call Put_Dig_BS('9','E') " not defined 341397eadbeSBram Moolenaar call Put_Dig_BS('b','9') " not defined 342397eadbeSBram Moolenaar call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.'))) 343397eadbeSBram Moolenaar " Cyrillic 344397eadbeSBram Moolenaar call Put_Dig_BS('u','=') 345397eadbeSBram Moolenaar call Put_Dig_BS('=','b') 346397eadbeSBram Moolenaar call Put_Dig_BS('=','_') 347397eadbeSBram Moolenaar call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.'))) 348397eadbeSBram Moolenaar " Greek 349397eadbeSBram Moolenaar call Put_Dig_BS('u','*') 350397eadbeSBram Moolenaar call Put_Dig_BS('*','b') 351397eadbeSBram Moolenaar call Put_Dig_BS('*','_') 352397eadbeSBram Moolenaar call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.'))) 353397eadbeSBram Moolenaar " Greek/Cyrillic special 354397eadbeSBram Moolenaar call Put_Dig_BS('u','%') 355397eadbeSBram Moolenaar call Put_Dig_BS('%','b') " not defined 356397eadbeSBram Moolenaar call Put_Dig_BS('%','_') " not defined 357397eadbeSBram Moolenaar call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.'))) 358397eadbeSBram Moolenaar " Arabic 359397eadbeSBram Moolenaar call Put_Dig_BS('u','+') 360397eadbeSBram Moolenaar call Put_Dig_BS('+','b') 361397eadbeSBram Moolenaar call Put_Dig_BS('+','_') " japanese industrial symbol 362397eadbeSBram Moolenaar call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.'))) 363397eadbeSBram Moolenaar " Hebrew 364397eadbeSBram Moolenaar call Put_Dig_BS('Q','+') 365397eadbeSBram Moolenaar call Put_Dig_BS('+','B') 366397eadbeSBram Moolenaar call Put_Dig_BS('+','X') 367397eadbeSBram Moolenaar call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.'))) 368397eadbeSBram Moolenaar " Latin 369397eadbeSBram Moolenaar call Put_Dig_BS('a','3') 370397eadbeSBram Moolenaar call Put_Dig_BS('A','3') 371397eadbeSBram Moolenaar call Put_Dig_BS('3','X') 372397eadbeSBram Moolenaar call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.'))) 373397eadbeSBram Moolenaar " Bopomofo 374397eadbeSBram Moolenaar call Put_Dig_BS('a','4') 375397eadbeSBram Moolenaar call Put_Dig_BS('A','4') 376397eadbeSBram Moolenaar call Put_Dig_BS('4','X') 377397eadbeSBram Moolenaar call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.'))) 378397eadbeSBram Moolenaar " Hiragana 379397eadbeSBram Moolenaar call Put_Dig_BS('a','5') 380397eadbeSBram Moolenaar call Put_Dig_BS('A','5') 381397eadbeSBram Moolenaar call Put_Dig_BS('5','X') 382397eadbeSBram Moolenaar call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.'))) 383397eadbeSBram Moolenaar " Katakana 384397eadbeSBram Moolenaar call Put_Dig_BS('a','6') 385397eadbeSBram Moolenaar call Put_Dig_BS('A','6') 386397eadbeSBram Moolenaar call Put_Dig_BS('6','X') 387397eadbeSBram Moolenaar call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.'))) 388397eadbeSBram Moolenaar " Superscripts 389397eadbeSBram Moolenaar call Put_Dig_BS('1','S') 390397eadbeSBram Moolenaar call Put_Dig_BS('2','S') 391397eadbeSBram Moolenaar call Put_Dig_BS('3','S') 392397eadbeSBram Moolenaar call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.'))) 393397eadbeSBram Moolenaar " Subscripts 394397eadbeSBram Moolenaar call Put_Dig_BS('1','s') 395397eadbeSBram Moolenaar call Put_Dig_BS('2','s') 396397eadbeSBram Moolenaar call Put_Dig_BS('3','s') 397397eadbeSBram Moolenaar call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.'))) 398397eadbeSBram Moolenaar " Eszet (only lowercase) 399397eadbeSBram Moolenaar call Put_Dig_BS("s","s") 400397eadbeSBram Moolenaar call Put_Dig_BS("S","S") " start of string 401397eadbeSBram Moolenaar call assert_equal(["ß", ""], getline(line('.')-1,line('.'))) 402397eadbeSBram Moolenaar " High bit set (different from <c-k>) 403397eadbeSBram Moolenaar call Put_Dig_BS("a"," ") 404397eadbeSBram Moolenaar call Put_Dig_BS(" ","A") 405397eadbeSBram Moolenaar call assert_equal([' ', 'A'], getline(line('.')-1,line('.'))) 406397eadbeSBram Moolenaar " Escape is not part of a digraph (different from <c-k>) 407397eadbeSBram Moolenaar call Put_Dig_BS("a","\<esc>") 408397eadbeSBram Moolenaar call Put_Dig_BS("\<esc>","A") 409397eadbeSBram Moolenaar call assert_equal(['', ''], getline(line('.')-1,line('.'))) 410397eadbeSBram Moolenaar " define some custom digraphs 411397eadbeSBram Moolenaar " old: 00 ∞ 412397eadbeSBram Moolenaar " old: el l 413397eadbeSBram Moolenaar digraph 00 9216 414397eadbeSBram Moolenaar digraph el 0252 415397eadbeSBram Moolenaar call Put_Dig_BS("0","0") 416397eadbeSBram Moolenaar call Put_Dig_BS("e","l") 417397eadbeSBram Moolenaar " Reset digraphs 418397eadbeSBram Moolenaar digraph 00 8734 419397eadbeSBram Moolenaar digraph el 108 420397eadbeSBram Moolenaar call Put_Dig_BS("0","0") 421397eadbeSBram Moolenaar call Put_Dig_BS("e","l") 422397eadbeSBram Moolenaar call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.'))) 423397eadbeSBram Moolenaar set nodigraph ww&vim 424397eadbeSBram Moolenaar bw! 425397eadbeSBram Moolenaarendfunc 426397eadbeSBram Moolenaar 4275f73ef8dSBram Moolenaarfunc Test_digraphs_output() 428e25bc5abSBram Moolenaar new 429e25bc5abSBram Moolenaar let out = execute(':digraph') 430e25bc5abSBram Moolenaar call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>')) 431e25bc5abSBram Moolenaar call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>')) 432e25bc5abSBram Moolenaar call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>')) 433e25bc5abSBram Moolenaar call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>')) 434e25bc5abSBram Moolenaar call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>')) 435e25bc5abSBram Moolenaar call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>')) 436e25bc5abSBram Moolenaar call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>')) 437e25bc5abSBram Moolenaar call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>')) 438e25bc5abSBram Moolenaar call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>')) 439e25bc5abSBram Moolenaar call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>')) 440e3242346SBram Moolenaar call assert_notmatch('Latin supplement', out) 441e3242346SBram Moolenaar 442e3242346SBram Moolenaar let out_bang_without_custom = execute(':digraph!') 443e3242346SBram Moolenaar digraph lt 60 444e3242346SBram Moolenaar let out_bang_with_custom = execute(':digraph!') 445e3242346SBram Moolenaar call assert_notmatch('lt', out_bang_without_custom) 446e3242346SBram Moolenaar call assert_match("^\n" 447e3242346SBram Moolenaar \ .. "NU ^@ 10 .*\n" 448e3242346SBram Moolenaar \ .. "Latin supplement\n" 449e3242346SBram Moolenaar \ .. "!I ¡ 161 .*\n" 450e3242346SBram Moolenaar \ .. ".*\n" 451e3242346SBram Moolenaar \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom) 452e25bc5abSBram Moolenaar bw! 453e25bc5abSBram Moolenaarendfunc 454e25bc5abSBram Moolenaar 4555f73ef8dSBram Moolenaarfunc Test_loadkeymap() 4566d91bcb4SBram Moolenaar CheckFeature keymap 457e25bc5abSBram Moolenaar new 458e25bc5abSBram Moolenaar set keymap=czech 459e25bc5abSBram Moolenaar set iminsert=0 460e25bc5abSBram Moolenaar call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx') 461e25bc5abSBram Moolenaar call assert_equal("|'é+ěščřžýáíé'", getline('.')) 462e25bc5abSBram Moolenaar " reset keymap and encoding option 463e25bc5abSBram Moolenaar set keymap= 464e25bc5abSBram Moolenaar bw! 465e25bc5abSBram Moolenaarendfunc 466e25bc5abSBram Moolenaar 4675f73ef8dSBram Moolenaarfunc Test_digraph_cmndline() 468e25bc5abSBram Moolenaar " Create digraph on commandline 46991ffc8a5SBram Moolenaar call feedkeys(":\"\<c-k>Eu\<cr>", 'xt') 47091ffc8a5SBram Moolenaar call assert_equal('"€', @:) 47191ffc8a5SBram Moolenaar 47291ffc8a5SBram Moolenaar " Canceling a CTRL-K on the cmdline 47391ffc8a5SBram Moolenaar call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt') 47491ffc8a5SBram Moolenaar call assert_equal('"ab', @:) 475e25bc5abSBram Moolenaarendfunc 476e25bc5abSBram Moolenaar 4775f73ef8dSBram Moolenaarfunc Test_show_digraph() 4785f73ef8dSBram Moolenaar new 4795f73ef8dSBram Moolenaar call Put_Dig("e=") 4805f73ef8dSBram Moolenaar call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii')) 4815f73ef8dSBram Moolenaar bwipe! 4825f73ef8dSBram Moolenaarendfunc 4835f73ef8dSBram Moolenaar 484bc5020aaSBram Moolenaarfunc Test_show_digraph_cp1251() 485bc5020aaSBram Moolenaar new 486bc5020aaSBram Moolenaar set encoding=cp1251 487bc5020aaSBram Moolenaar call Put_Dig("='") 488bc5020aaSBram Moolenaar call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii')) 489bc5020aaSBram Moolenaar set encoding=utf-8 490bc5020aaSBram Moolenaar bwipe! 491bc5020aaSBram Moolenaarendfunc 492bc5020aaSBram Moolenaar 493ee4e0c1eSBram Moolenaar" Test for error in a keymap file 494ee4e0c1eSBram Moolenaarfunc Test_loadkeymap_error() 4956d91bcb4SBram Moolenaar CheckFeature keymap 496ee4e0c1eSBram Moolenaar call assert_fails('loadkeymap', 'E105:') 497ee4e0c1eSBram Moolenaar call writefile(['loadkeymap', 'a'], 'Xkeymap') 498ee4e0c1eSBram Moolenaar call assert_fails('source Xkeymap', 'E791:') 499ee4e0c1eSBram Moolenaar call delete('Xkeymap') 500ee4e0c1eSBram Moolenaarendfunc 501ee4e0c1eSBram Moolenaar 5028c524f76SBram Moolenaar" Test for the characters displayed on the screen when entering a digraph 503845e0ee5SBram Moolenaarfunc Test_entering_digraph() 504845e0ee5SBram Moolenaar CheckRunVimInTerminal 505845e0ee5SBram Moolenaar let buf = RunVimInTerminal('', {'rows': 6}) 506845e0ee5SBram Moolenaar call term_sendkeys(buf, "i\<C-K>") 507733d259aSBram Moolenaar call TermWait(buf) 508845e0ee5SBram Moolenaar call assert_equal('?', term_getline(buf, 1)) 509845e0ee5SBram Moolenaar call term_sendkeys(buf, "1") 510733d259aSBram Moolenaar call TermWait(buf) 511845e0ee5SBram Moolenaar call assert_equal('1', term_getline(buf, 1)) 512845e0ee5SBram Moolenaar call term_sendkeys(buf, "2") 513733d259aSBram Moolenaar call TermWait(buf) 514845e0ee5SBram Moolenaar call assert_equal('½', term_getline(buf, 1)) 515845e0ee5SBram Moolenaar call StopVimInTerminal(buf) 516845e0ee5SBram Moolenaarendfunc 517845e0ee5SBram Moolenaar 51829b85715Sh-eastfunc Test_digraph_set_function() 5196106504eSmityu new 52029b85715Sh-east call digraph_set('aa', 'あ') 5216106504eSmityu call Put_Dig('aa') 5226106504eSmityu call assert_equal('あ', getline('$')) 52329b85715Sh-east call digraph_set(' i', 'い') 5246106504eSmityu call Put_Dig(' i') 5256106504eSmityu call assert_equal('い', getline('$')) 52629b85715Sh-east call digraph_set(' ', 'う') 5276106504eSmityu call Put_Dig(' ') 5286106504eSmityu call assert_equal('う', getline('$')) 5296106504eSmityu 53029b85715Sh-east eval 'aa'->digraph_set('え') 5316106504eSmityu call Put_Dig('aa') 5326106504eSmityu call assert_equal('え', getline('$')) 5336106504eSmityu 53429b85715Sh-east call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa') 53529b85715Sh-east call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b') 53629b85715Sh-east call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ') 53729b85715Sh-east call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ') 53829b85715Sh-east call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: か' .. nr2char(0x3099)) 539*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_set(test_null_string(), "い")', 'E1214: Digraph must be just two characters') 540*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String') 5416106504eSmityu bwipe! 5426106504eSmityuendfunc 5436106504eSmityu 54429b85715Sh-eastfunc Test_digraph_get_function() 5456106504eSmityu " Built-in digraphs 54629b85715Sh-east call assert_equal('∞', digraph_get('00')) 5476106504eSmityu 5486106504eSmityu " User-defined digraphs 54929b85715Sh-east call digraph_set('aa', 'あ') 55029b85715Sh-east call digraph_set(' i', 'い') 55129b85715Sh-east call digraph_set(' ', 'う') 55229b85715Sh-east call assert_equal('あ', digraph_get('aa')) 55329b85715Sh-east call assert_equal('あ', 'aa'->digraph_get()) 55429b85715Sh-east call assert_equal('い', digraph_get(' i')) 55529b85715Sh-east call assert_equal('う', digraph_get(' ')) 55629b85715Sh-east call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa') 55729b85715Sh-east call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b') 558*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_get(test_null_string())', 'E1214: Digraph must be just two characters:') 559*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String') 5606106504eSmityuendfunc 5616106504eSmityu 56229b85715Sh-eastfunc Test_digraph_get_function_encode() 5636106504eSmityu CheckFeature iconv 56452eb372aSBram Moolenaar 5656106504eSmityu let testcases = { 5666106504eSmityu \'00': '∞', 5676106504eSmityu \'aa': 'あ', 5686106504eSmityu \} 5696106504eSmityu for [key, ch] in items(testcases) 57029b85715Sh-east call digraph_set(key, ch) 5716106504eSmityu set encoding=japan 57229b85715Sh-east call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key)) 57352eb372aSBram Moolenaar set encoding=utf-8 5746106504eSmityu endfor 5756106504eSmityuendfunc 5766106504eSmityu 57729b85715Sh-eastfunc Test_digraph_setlist_function() 57829b85715Sh-east call digraph_setlist([['aa', 'き'], ['bb', 'く']]) 57929b85715Sh-east call assert_equal('き', digraph_get('aa')) 58029b85715Sh-east call assert_equal('く', digraph_get('bb')) 5816106504eSmityu 58229b85715Sh-east call assert_fails('call digraph_setlist([[]])', 'E1216:') 583*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:') 58429b85715Sh-east call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ') 585*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_setlist([test_null_list()])', 'E1216:') 586*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_setlist({})', 'E1216:') 587*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_setlist([{}])', 'E1216:') 588*fc3b7750SYegappan Lakshmanan call assert_true(digraph_setlist(test_null_list())) 5896106504eSmityuendfunc 5906106504eSmityu 59129b85715Sh-eastfunc Test_digraph_getlist_function() 5926106504eSmityu " Make sure user-defined digraphs are defined 59329b85715Sh-east call digraph_setlist([['aa', 'き'], ['bb', 'く']]) 5946106504eSmityu 59529b85715Sh-east for pair in digraph_getlist(1) 59629b85715Sh-east call assert_equal(digraph_get(pair[0]), pair[1]) 5976106504eSmityu endfor 5986106504eSmityu 5996106504eSmityu " We don't know how many digraphs are registered before, so check the number 6006106504eSmityu " of digraphs returned. 60129b85715Sh-east call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len()) 60229b85715Sh-east call assert_notequal((digraph_getlist()->len()), digraph_getlist(1)->len()) 603*fc3b7750SYegappan Lakshmanan 604*fc3b7750SYegappan Lakshmanan call assert_fails('call digraph_getlist(0z12)', 'E974: Using a Blob as a Number') 6056106504eSmityuendfunc 60652eb372aSBram Moolenaar 60752eb372aSBram Moolenaar 6089e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 609