10c0590d9SBram Moolenaar" Tests for Unicode manipulations 20c0590d9SBram Moolenaar 32912abb3SBram Moolenaarsource view_util.vim 40c0590d9SBram Moolenaar 50c0590d9SBram Moolenaar" Visual block Insert adjusts for multi-byte char 60c0590d9SBram Moolenaarfunc Test_visual_block_insert() 70c0590d9SBram Moolenaar new 80c0590d9SBram Moolenaar call setline(1, ["aaa", "あああ", "bbb"]) 90c0590d9SBram Moolenaar exe ":norm! gg0l\<C-V>jjIx\<Esc>" 100c0590d9SBram Moolenaar call assert_equal(['axaa', 'xあああ', 'bxbb'], getline(1, '$')) 110c0590d9SBram Moolenaar bwipeout! 120c0590d9SBram Moolenaarendfunc 130c0590d9SBram Moolenaar 1470ce8a15SBram Moolenaar" Test for built-in functions strchars() and strcharlen() 150c0590d9SBram Moolenaarfunc Test_strchars() 160c0590d9SBram Moolenaar let inp = ["a", "あいa", "A\u20dd", "A\u20dd\u20dd", "\u20dd"] 170c0590d9SBram Moolenaar let exp = [[1, 1, 1], [3, 3, 3], [2, 2, 1], [3, 3, 1], [1, 1, 1]] 180c0590d9SBram Moolenaar for i in range(len(inp)) 190c0590d9SBram Moolenaar call assert_equal(exp[i][0], strchars(inp[i])) 20f6ed61e1SBram Moolenaar call assert_equal(exp[i][1], inp[i]->strchars(0)) 210c0590d9SBram Moolenaar call assert_equal(exp[i][2], strchars(inp[i], 1)) 220c0590d9SBram Moolenaar endfor 2370ce8a15SBram Moolenaar 2470ce8a15SBram Moolenaar let exp = [1, 3, 1, 1, 1] 2570ce8a15SBram Moolenaar for i in range(len(inp)) 2670ce8a15SBram Moolenaar call assert_equal(exp[i], inp[i]->strcharlen()) 2770ce8a15SBram Moolenaar call assert_equal(exp[i], strcharlen(inp[i])) 2870ce8a15SBram Moolenaar endfor 2970ce8a15SBram Moolenaar 309b7bf9e9SBram Moolenaar call assert_fails("let v=strchars('abc', [])", 'E745:') 31707be5f3SBram Moolenaar call assert_fails("let v=strchars('abc', 2)", 'E1023:') 320c0590d9SBram Moolenaarendfunc 330c0590d9SBram Moolenaar 340c0590d9SBram Moolenaar" Test for customlist completion 351e115360SBram Moolenaarfunc CustomComplete1(lead, line, pos) 360c0590d9SBram Moolenaar return ['あ', 'い'] 371e115360SBram Moolenaarendfunc 380c0590d9SBram Moolenaar 391e115360SBram Moolenaarfunc CustomComplete2(lead, line, pos) 400c0590d9SBram Moolenaar return ['あたし', 'あたま', 'あたりめ'] 411e115360SBram Moolenaarendfunc 420c0590d9SBram Moolenaar 431e115360SBram Moolenaarfunc CustomComplete3(lead, line, pos) 440c0590d9SBram Moolenaar return ['Nこ', 'Nん', 'Nぶ'] 451e115360SBram Moolenaarendfunc 460c0590d9SBram Moolenaar 470c0590d9SBram Moolenaarfunc Test_customlist_completion() 480c0590d9SBram Moolenaar command -nargs=1 -complete=customlist,CustomComplete1 Test1 echo 490c0590d9SBram Moolenaar call feedkeys(":Test1 \<C-L>\<C-B>\"\<CR>", 'itx') 500c0590d9SBram Moolenaar call assert_equal('"Test1 ', getreg(':')) 510c0590d9SBram Moolenaar 520c0590d9SBram Moolenaar command -nargs=1 -complete=customlist,CustomComplete2 Test2 echo 530c0590d9SBram Moolenaar call feedkeys(":Test2 \<C-L>\<C-B>\"\<CR>", 'itx') 540c0590d9SBram Moolenaar call assert_equal('"Test2 あた', getreg(':')) 550c0590d9SBram Moolenaar 560c0590d9SBram Moolenaar command -nargs=1 -complete=customlist,CustomComplete3 Test3 echo 570c0590d9SBram Moolenaar call feedkeys(":Test3 \<C-L>\<C-B>\"\<CR>", 'itx') 580c0590d9SBram Moolenaar call assert_equal('"Test3 N', getreg(':')) 590c0590d9SBram Moolenaar 600c0590d9SBram Moolenaar call garbagecollect(1) 610c0590d9SBram Moolenaarendfunc 620c0590d9SBram Moolenaar 630c0590d9SBram Moolenaar" Yank one 3 byte character and check the mark columns. 640c0590d9SBram Moolenaarfunc Test_getvcol() 650c0590d9SBram Moolenaar new 660c0590d9SBram Moolenaar call setline(1, "x\u2500x") 670c0590d9SBram Moolenaar normal 0lvy 680c0590d9SBram Moolenaar call assert_equal(2, col("'[")) 690c0590d9SBram Moolenaar call assert_equal(4, col("']")) 700c0590d9SBram Moolenaar call assert_equal(2, virtcol("'[")) 710c0590d9SBram Moolenaar call assert_equal(2, virtcol("']")) 720c0590d9SBram Moolenaarendfunc 732912abb3SBram Moolenaar 749d40128aSBram Moolenaarfunc Test_list2str_str2list_utf8() 759d40128aSBram Moolenaar " One Unicode codepoint 769d40128aSBram Moolenaar let s = "\u3042\u3044" 779d40128aSBram Moolenaar let l = [0x3042, 0x3044] 789d40128aSBram Moolenaar call assert_equal(l, str2list(s, 1)) 799d40128aSBram Moolenaar call assert_equal(s, list2str(l, 1)) 809d40128aSBram Moolenaar if &enc ==# 'utf-8' 819d40128aSBram Moolenaar call assert_equal(str2list(s), str2list(s, 1)) 829d40128aSBram Moolenaar call assert_equal(list2str(l), list2str(l, 1)) 839d40128aSBram Moolenaar endif 849d40128aSBram Moolenaar 859d40128aSBram Moolenaar " With composing characters 869d40128aSBram Moolenaar let s = "\u304b\u3099\u3044" 879d40128aSBram Moolenaar let l = [0x304b, 0x3099, 0x3044] 889d40128aSBram Moolenaar call assert_equal(l, str2list(s, 1)) 8902b31110SBram Moolenaar call assert_equal(s, l->list2str(1)) 909d40128aSBram Moolenaar if &enc ==# 'utf-8' 919d40128aSBram Moolenaar call assert_equal(str2list(s), str2list(s, 1)) 929d40128aSBram Moolenaar call assert_equal(list2str(l), list2str(l, 1)) 939d40128aSBram Moolenaar endif 949d40128aSBram Moolenaar 959d40128aSBram Moolenaar " Null list is the same as an empty list 969d40128aSBram Moolenaar call assert_equal('', list2str([])) 979d40128aSBram Moolenaar call assert_equal('', list2str(test_null_list())) 989d40128aSBram Moolenaarendfunc 999d40128aSBram Moolenaar 1009d40128aSBram Moolenaarfunc Test_list2str_str2list_latin1() 1019d40128aSBram Moolenaar " When 'encoding' is not multi-byte can still get utf-8 string. 1029d40128aSBram Moolenaar " But we need to create the utf-8 string while 'encoding' is utf-8. 1039d40128aSBram Moolenaar let s = "\u3042\u3044" 1049d40128aSBram Moolenaar let l = [0x3042, 0x3044] 1059d40128aSBram Moolenaar 1069d40128aSBram Moolenaar let save_encoding = &encoding 1079d40128aSBram Moolenaar set encoding=latin1 1089d40128aSBram Moolenaar 1099d40128aSBram Moolenaar let lres = str2list(s, 1) 1109d40128aSBram Moolenaar let sres = list2str(l, 1) 1110e05de46SBram Moolenaar call assert_equal([65, 66, 67], str2list("ABC")) 1129d40128aSBram Moolenaar 11308f4157cSBram Moolenaar " Try converting a list to a string in latin-1 encoding 11408f4157cSBram Moolenaar call assert_equal([1, 2, 3], str2list(list2str([1, 2, 3]))) 11508f4157cSBram Moolenaar 1169d40128aSBram Moolenaar let &encoding = save_encoding 1179d40128aSBram Moolenaar call assert_equal(l, lres) 1189d40128aSBram Moolenaar call assert_equal(s, sres) 1199d40128aSBram Moolenaarendfunc 1209d40128aSBram Moolenaar 1212912abb3SBram Moolenaarfunc Test_screenchar_utf8() 1222912abb3SBram Moolenaar new 1232912abb3SBram Moolenaar 1242912abb3SBram Moolenaar " 1-cell, with composing characters 1252912abb3SBram Moolenaar call setline(1, ["ABC\u0308"]) 1262912abb3SBram Moolenaar redraw 1272912abb3SBram Moolenaar call assert_equal([0x0041], screenchars(1, 1)) 128196b4664SBram Moolenaar call assert_equal([0x0042], 1->screenchars(2)) 1292912abb3SBram Moolenaar call assert_equal([0x0043, 0x0308], screenchars(1, 3)) 1302912abb3SBram Moolenaar call assert_equal("A", screenstring(1, 1)) 1312912abb3SBram Moolenaar call assert_equal("B", screenstring(1, 2)) 1322912abb3SBram Moolenaar call assert_equal("C\u0308", screenstring(1, 3)) 1332912abb3SBram Moolenaar 1342912abb3SBram Moolenaar " 2-cells, with composing characters 1352912abb3SBram Moolenaar let text = "\u3042\u3044\u3046\u3099" 1362912abb3SBram Moolenaar call setline(1, text) 1372912abb3SBram Moolenaar redraw 1382912abb3SBram Moolenaar call assert_equal([0x3042], screenchars(1, 1)) 1392912abb3SBram Moolenaar call assert_equal([0], screenchars(1, 2)) 1402912abb3SBram Moolenaar call assert_equal([0x3044], screenchars(1, 3)) 1412912abb3SBram Moolenaar call assert_equal([0], screenchars(1, 4)) 1422912abb3SBram Moolenaar call assert_equal([0x3046, 0x3099], screenchars(1, 5)) 1432912abb3SBram Moolenaar 1442912abb3SBram Moolenaar call assert_equal("\u3042", screenstring(1, 1)) 1452912abb3SBram Moolenaar call assert_equal("", screenstring(1, 2)) 1462912abb3SBram Moolenaar call assert_equal("\u3044", screenstring(1, 3)) 1472912abb3SBram Moolenaar call assert_equal("", screenstring(1, 4)) 1482912abb3SBram Moolenaar call assert_equal("\u3046\u3099", screenstring(1, 5)) 1492912abb3SBram Moolenaar 15048aed082SBram Moolenaar call assert_equal([text . ' '], ScreenLines(1, 8)) 1512912abb3SBram Moolenaar 1522912abb3SBram Moolenaar bwipe! 1532912abb3SBram Moolenaarendfunc 1540e05de46SBram Moolenaar 15508aac3c6SBram Moolenaarfunc Test_setcellwidths() 15608aac3c6SBram Moolenaar call setcellwidths([ 15708aac3c6SBram Moolenaar \ [0x1330, 0x1330, 2], 15808aac3c6SBram Moolenaar \ [9999, 10000, 1], 159b06a6d59SBram Moolenaar \ [0x1337, 0x1339, 2], 16008aac3c6SBram Moolenaar \]) 16108aac3c6SBram Moolenaar 16208aac3c6SBram Moolenaar call assert_equal(2, strwidth("\u1330")) 16308aac3c6SBram Moolenaar call assert_equal(1, strwidth("\u1336")) 16408aac3c6SBram Moolenaar call assert_equal(2, strwidth("\u1337")) 16508aac3c6SBram Moolenaar call assert_equal(2, strwidth("\u1339")) 16608aac3c6SBram Moolenaar call assert_equal(1, strwidth("\u133a")) 16708aac3c6SBram Moolenaar 16808aac3c6SBram Moolenaar call setcellwidths([]) 16908aac3c6SBram Moolenaar 17008aac3c6SBram Moolenaar call assert_fails('call setcellwidths(1)', 'E714:') 17108aac3c6SBram Moolenaar 17208aac3c6SBram Moolenaar call assert_fails('call setcellwidths([1, 2, 0])', 'E1109:') 17308aac3c6SBram Moolenaar 17408aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x101]])', 'E1110:') 17508aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x101, 0x102]])', 'E1110:') 17608aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x101, 0x102, 1, 4]])', 'E1110:') 17708aac3c6SBram Moolenaar call assert_fails('call setcellwidths([["a"]])', 'E1110:') 17808aac3c6SBram Moolenaar 17908aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x102, 0x101, 1]])', 'E1111:') 18008aac3c6SBram Moolenaar 18108aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x101, 0x102, 0]])', 'E1112:') 18208aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x101, 0x102, 3]])', 'E1112:') 18308aac3c6SBram Moolenaar 18408aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x111, 0x122, 1], [0x115, 0x116, 2]])', 'E1113:') 18508aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x111, 0x122, 1], [0x122, 0x123, 2]])', 'E1113:') 18608aac3c6SBram Moolenaar 18708aac3c6SBram Moolenaar call assert_fails('call setcellwidths([[0x33, 0x44, 2]])', 'E1114:') 188*94358a1eSzeertzjq 189*94358a1eSzeertzjq set listchars=tab:--\\u2192 190*94358a1eSzeertzjq call assert_fails('call setcellwidths([[0x2192, 0x2192, 2]])', 'E834:') 191*94358a1eSzeertzjq 192*94358a1eSzeertzjq set fillchars=stl:\\u2501 193*94358a1eSzeertzjq call assert_fails('call setcellwidths([[0x2501, 0x2501, 2]])', 'E835:') 194*94358a1eSzeertzjq 195*94358a1eSzeertzjq set listchars& 196*94358a1eSzeertzjq set fillchars& 197*94358a1eSzeertzjq call setcellwidths([]) 19808aac3c6SBram Moolenaarendfunc 19908aac3c6SBram Moolenaar 2001cbfc991SBram Moolenaarfunc Test_print_overlong() 2011cbfc991SBram Moolenaar " Text with more composing characters than MB_MAXBYTES. 2021cbfc991SBram Moolenaar new 2031cbfc991SBram Moolenaar call setline(1, 'axxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') 2041cbfc991SBram Moolenaar s/x/\=nr2char(1629)/g 2051cbfc991SBram Moolenaar print 2061cbfc991SBram Moolenaar bwipe! 2071cbfc991SBram Moolenaarendfunc 2081cbfc991SBram Moolenaar 2090e05de46SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 210