diff src/testdir/test_listchars.vim @ 16211:5fb0f15fafea v8.1.1110

patch 8.1.1110: composing chars on space wrong when 'listchars' is set commit https://github.com/vim/vim/commit/e5e4e22c1c15c8c22b14935affe969569acc8df9 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 4 13:28:45 2019 +0200 patch 8.1.1110: composing chars on space wrong when 'listchars' is set Problem: Composing chars on space wrong when 'listchars' is set. Solution: Do not use "space" and "nbsp" entries of 'listchars' when there is a composing character. (Yee Cheng Chin, closes #4197)
author Bram Moolenaar <Bram@vim.org>
date Thu, 04 Apr 2019 13:30:05 +0200
parents 90b0f2227d73
children 80bb4ce2a281
line wrap: on
line diff
--- a/src/testdir/test_listchars.vim
+++ b/src/testdir/test_listchars.vim
@@ -114,6 +114,33 @@ func Test_listchars()
   set listchars& ff&
 endfunc
 
+" Test that unicode listchars characters get properly inserted
+func Test_listchars_unicode()
+  enew!
+  let oldencoding=&encoding
+  set encoding=utf-8
+  set ff=unix
+
+  set listchars=eol:⇔,space:␣,nbsp:≠,tab:←↔→
+  set list
+
+  let nbsp = nr2char(0xa0)
+  call append(0, [
+        \ "a\tb c".nbsp."d"
+        \ ])
+  let expected = [
+        \ 'a←↔↔↔↔↔→b␣c≠d⇔'
+        \ ]
+  redraw!
+  call cursor(1, 1)
+  call assert_equal(expected, ScreenLines(1, virtcol('$')))
+  let &encoding=oldencoding
+  enew!
+  set listchars& ff&
+endfunction
+
+" Tests that space characters following composing character won't get replaced
+" by listchars.
 func Test_listchars_composing()
   enew!
   let oldencoding=&encoding
@@ -121,18 +148,20 @@ func Test_listchars_composing()
   set ff=unix
   set list
 
-  set listchars=eol:$,space:_
+  set listchars=eol:$,space:_,nbsp:=
+  
+  let nbsp1 = nr2char(0xa0)
+  let nbsp2 = nr2char(0x202f)
   call append(0, [
-        \ "  \u3099	 \u309A"
+        \ "  \u3099\t \u309A".nbsp1.nbsp1."\u0302".nbsp2.nbsp2."\u0302",
         \ ])
   let expected = [
-        \ "_ \u3099^I \u309A$"
+        \ "_ \u3099^I \u309A=".nbsp1."\u0302=".nbsp2."\u0302$"
         \ ]
   redraw!
   call cursor(1, 1)
-  let got = ScreenLines(1, virtcol('$'))
-  bw!
-  call assert_equal(expected, got)
+  call assert_equal(expected, ScreenLines(1, virtcol('$')))
   let &encoding=oldencoding
+  enew!
   set listchars& ff&
 endfunction