diff options
author | ckelsel <ckelsel@hotmail.com> | 2018-01-15 17:32:54 +0800 |
---|---|---|
committer | ckelsel <ckelsel@hotmail.com> | 2018-01-15 17:33:13 +0800 |
commit | fc97e9fbdf372e52370ca8640422327d8a0c8cb5 (patch) | |
tree | ec1a38d4f164c0ebc1f06a31addb62c31994582f | |
parent | fe4ba6995895f95f461d40eda356cc7e1dbb1abf (diff) | |
download | rneovim-fc97e9fbdf372e52370ca8640422327d8a0c8cb5.tar.gz rneovim-fc97e9fbdf372e52370ca8640422327d8a0c8cb5.tar.bz2 rneovim-fc97e9fbdf372e52370ca8640422327d8a0c8cb5.zip |
vim-patch:8.0.0389: test for arabic does not check what is displayed
Problem: Test for arabic does not check what is displayed.
Solution: Improve what is asserted. (Dominique Pelle, closes vim/vim#1523)
Add a first shaping test.
https://github.com/vim/vim/commit/5342f00ff95ed0256b8183063a83d72112f1243c
-rw-r--r-- | src/nvim/testdir/test_arabic.vim | 89 |
1 files changed, 65 insertions, 24 deletions
diff --git a/src/nvim/testdir/test_arabic.vim b/src/nvim/testdir/test_arabic.vim index b9e033462e..9e648a9617 100644 --- a/src/nvim/testdir/test_arabic.vim +++ b/src/nvim/testdir/test_arabic.vim @@ -1,21 +1,23 @@ " Simplistic testing of Arabic mode. -if !has('arabic') +if !has('arabic') || !has('multi_byte') finish endif -set encoding=utf-8 -scriptencoding utf-8 +source view_util.vim -" Return list of utf8 sequences of each character at line lnum. +" Return list of Unicode characters at line lnum. " Combining characters are treated as a single item. -func GetCharsUtf8(lnum) +func s:get_chars(lnum) call cursor(a:lnum, 1) let chars = [] let numchars = strchars(getline('.'), 1) for i in range(1, numchars) exe 'norm ' i . '|' - call add(chars, execute('norm g8')) + let c=execute('ascii') + let c=substitute(c, '\n\?<.\{-}Hex\s*', 'U+', 'g') + let c=substitute(c, ',\s*Octal\s*\d*', '', 'g') + call add(chars, c) endfor return chars endfunc @@ -43,25 +45,28 @@ func Test_arabic_input() new set arabic " Typing sghl in Arabic insert mode should show the - " Arabic word 'Salaam' i.e. 'peace'. - call feedkeys('isghl', 'tx') - redraw + " Arabic word 'Salaam' i.e. 'peace', spelled: + " SEEN, LAM, ALEF, MEEM. + " See: https://www.mediawiki.org/wiki/VisualEditor/Typing/Right-to-left + call feedkeys('isghl!', 'tx') + call assert_match("^ *!\uFEE1\uFEFC\uFEB3$", ScreenLines(1, &columns)[0]) call assert_equal([ - \ "\nd8 b3 ", - \ "\nd9 84 + d8 a7 ", - \ "\nd9 85 "], GetCharsUtf8(1)) + \ 'U+0633', + \ 'U+0644 U+0627', + \ 'U+0645', + \ 'U+21'], s:get_chars(1)) " Without shaping, it should give individual Arabic letters. set noarabicshape - redraw + call assert_match("^ *!\u0645\u0627\u0644\u0633$", ScreenLines(1, &columns)[0]) call assert_equal([ - \ "\nd8 b3 ", - \ "\nd9 84 ", - \ "\nd8 a7 ", - \ "\nd9 85 "], GetCharsUtf8(1)) + \ 'U+0633', + \ 'U+0644', + \ 'U+0627', + \ 'U+0645', + \ 'U+21'], s:get_chars(1)) - set arabicshape& - set arabic& + set arabic& arabicshape& bwipe! endfunc @@ -69,7 +74,7 @@ func Test_arabic_toggle_keymap() new set arabic call feedkeys("i12\<C-^>12\<C-^>12", 'tx') - redraw + call assert_match("^ *٢١21٢١$", ScreenLines(1, &columns)[0]) call assert_equal('١٢12١٢', getline('.')) set arabic& bwipe! @@ -79,14 +84,50 @@ func Test_delcombine() new set arabic call feedkeys("isghl\<BS>\<BS>", 'tx') - redraw - call assert_equal(["\nd8 b3 ", "\nd9 84 "], GetCharsUtf8(1)) + call assert_match("^ *\uFEDE\uFEB3$", ScreenLines(1, &columns)[0]) + call assert_equal(['U+0633', 'U+0644'], s:get_chars(1)) - " Now the same with nodelcombine + " Now the same with 'nodelcombine' set nodelcombine %d call feedkeys("isghl\<BS>\<BS>", 'tx') - call assert_equal(["\nd8 b3 "], GetCharsUtf8(1)) + call assert_match("^ *\uFEB1$", ScreenLines(1, &columns)[0]) + call assert_equal(['U+0633'], s:get_chars(1)) set arabic& bwipe! endfunc + +let s:a_YEH_HAMZA = "\u0626" +let s:a_i_YEH_HAMZA = "\ufe8b" + +let s:a_HAMZA = "\u0621" +let s:a_s_HAMZA = "\ufe80" + +let s:a_ALEF_MADDA = "\u0622" +let s:a_s_ALEF_MADDA = "\ufe81" + +let s:a_ALEF_HAMZA_ABOVE = "\u0623" +let s:a_s_ALEF_HAMZA_ABOVE = "\ufe83" + +let s:a_GHAIN = "\u063a" +let s:a_f_GHAIN = "\ufece" +let s:a_s_GHAIN = "\ufecd" + +func Test_shape_initial() + new + set arabicshape + + " Shaping arabic {testchar} non-arabic Uses chg_c_a2i(). + " pair[0] = testchar, pair[1] = next-result, pair[2] = current-result + for pair in [[s:a_YEH_HAMZA, s:a_f_GHAIN, s:a_i_YEH_HAMZA], + \ [s:a_HAMZA, s:a_s_GHAIN, s:a_s_HAMZA], + \ [s:a_ALEF_MADDA, s:a_s_GHAIN, s:a_s_ALEF_MADDA], + \ [s:a_ALEF_HAMZA_ABOVE, s:a_s_GHAIN, s:a_s_ALEF_HAMZA_ABOVE], + \ ] + call setline(1, s:a_GHAIN . pair[0] . ' ') + call assert_equal([pair[1] . pair[2] . ' '], ScreenLines(1, 3)) + endfor + + set arabicshape& + bwipe! +endfunc |