Mercurial > vim
view src/testdir/test_arabic.vim @ 11002:35d4975a5bb5 v8.0.0390
patch 8.0.0390: when the window scrolls the popup menu may be garbled
commit https://github.com/vim/vim/commit/cb03642399ae4f3c47a006f608a6b912f9d98b5f
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Mar 1 12:29:10 2017 +0100
patch 8.0.0390: when the window scrolls the popup menu may be garbled
Problem: When the window scrolls horizontally when the popup menu is
displayed part of it may not be cleared. (Neovim issue https://github.com/vim/vim/issues/6184)
Solution: Remove the menu when the windows scrolled. (closes #1524)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 01 Mar 2017 12:30:03 +0100 |
parents | 307f9ae2a7fb |
children | f91d4c95b696 |
line wrap: on
line source
" Simplistic testing of Arabic mode. if !has('arabic') || !has('multi_byte') finish endif source view_util.vim " Return list of Unicode characters at line lnum. " Combining characters are treated as a single item. 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 . '|' 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 func Test_arabic_toggle() set arabic call assert_equal(1, &rightleft) call assert_equal(1, &arabicshape) call assert_equal('arabic', &keymap) call assert_equal(1, &delcombine) set iminsert=1 imsearch=1 set arabic& call assert_equal(0, &rightleft) call assert_equal(1, &arabicshape) call assert_equal('arabic', &keymap) call assert_equal(1, &delcombine) call assert_equal(0, &iminsert) call assert_equal(-1, &imsearch) set arabicshape& keymap= delcombine& endfunc func Test_arabic_input() new set arabic " Typing sghl in Arabic insert mode should show the " 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([ \ 'U+0633', \ 'U+0644 U+0627', \ 'U+0645', \ 'U+21'], s:get_chars(1)) " Without shaping, it should give individual Arabic letters. set noarabicshape call assert_match("^ *!\u0645\u0627\u0644\u0633$", ScreenLines(1, &columns)[0]) call assert_equal([ \ 'U+0633', \ 'U+0644', \ 'U+0627', \ 'U+0645', \ 'U+21'], s:get_chars(1)) set arabic& arabicshape& bwipe! endfunc func Test_arabic_toggle_keymap() new set arabic call feedkeys("i12\<C-^>12\<C-^>12", 'tx') call assert_match("^ *٢١21٢١$", ScreenLines(1, &columns)[0]) call assert_equal('١٢12١٢', getline('.')) set arabic& bwipe! endfunc func Test_delcombine() new set arabic call feedkeys("isghl\<BS>\<BS>", 'tx') 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' set nodelcombine %d call feedkeys("isghl\<BS>\<BS>", 'tx') 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