listchars_spec.lua (7943B)
1 -- Tests for 'listchars' display with 'list' and :list. 2 3 local n = require('test.functional.testnvim')() 4 local Screen = require('test.functional.ui.screen') 5 6 local feed, insert, exec = n.feed, n.insert, n.exec 7 local clear, feed_command, expect = n.clear, n.feed_command, n.expect 8 9 -- luacheck: ignore 621 (Indentation) 10 describe("'listchars'", function() 11 before_each(function() 12 clear() 13 feed_command('set listchars=eol:$') 14 end) 15 16 -- luacheck: ignore 613 (Trailing whitespace in a string) 17 it("works with 'list'", function() 18 exec([[ 19 function GetScreenCharsForLine(lnum) 20 return join(map(range(1, virtcol('$')), 'nr2char(screenchar(a:lnum, v:val))'), '') 21 endfunction 22 nnoremap <expr> GG ":call add(g:lines, GetScreenCharsForLine(".screenrow()."))\<CR>" 23 ]]) 24 25 insert([[ 26 start: 27 aa 28 bb 29 cccc 30 dd ee 31 ]]) 32 33 feed_command('let g:lines = []') 34 35 -- Set up 'listchars', switch on 'list', and use the "GG" mapping to record 36 -- what the buffer lines look like. 37 feed_command('set listchars+=tab:>-,space:.,trail:<') 38 feed_command('set list') 39 feed_command('/^start:/') 40 feed_command('normal! jzt') 41 feed('GG<cr>') 42 feed('GG<cr>') 43 feed('GG<cr>') 44 feed('GG<cr>') 45 feed('GGH') 46 47 -- Repeat without displaying "trail" spaces. 48 feed_command('set listchars-=trail:<') 49 feed('GG<cr>') 50 feed('GG<cr>') 51 feed('GG<cr>') 52 feed('GG<cr>') 53 feed('GG') 54 55 -- Delete the buffer contents and :put the collected lines. 56 feed_command('%d') 57 feed_command('put =g:lines', '1d') 58 59 -- Assert buffer contents. 60 expect([[ 61 >-------aa>-----$ 62 ..bb>---<<$ 63 ...cccc><$ 64 dd........ee<<>-$ 65 $ 66 >-------aa>-----$ 67 ..bb>---..$ 68 ...cccc>.$ 69 dd........ee..>-$ 70 $]]) 71 end) 72 73 it('works with :list', function() 74 insert([[ 75 start: 76 fff 77 gg 78 h 79 iii ]]) 80 81 -- Set up 'listchars', switch 'list' *off* (:list must show the 'listchars' 82 -- even when 'list' is off), then run :list and collect the output. 83 feed_command('set listchars+=tab:>-,space:.,trail:<') 84 feed_command('set nolist') 85 feed_command('/^start:/') 86 feed_command('redir! => g:lines') 87 feed_command('+1,$list') 88 feed_command('redir END') 89 90 -- Delete the buffer contents and :put the collected lines. 91 feed_command('%d') 92 feed_command('put =g:lines', '1d') 93 94 -- Assert buffer contents. 95 expect([[ 96 97 98 ..fff>--<<$ 99 >-------gg>-----$ 100 .....h>-$ 101 iii<<<<><<$]]) 102 end) 103 104 it('"exceeds" character does not appear in foldcolumn vim-patch:8.2.3121', function() 105 local screen = Screen.new(60, 10) 106 exec([[ 107 call setline(1, ['aaa', '', 'a', 'aaaaaa']) 108 vsplit 109 vsplit 110 windo set signcolumn=yes foldcolumn=1 winminwidth=0 nowrap list listchars=extends:>,precedes:< 111 ]]) 112 feed('13<C-W>>') 113 screen:expect([[ 114 {7: }aaa │{7: }a{1:>}│{7: }^aaa | 115 {7: } │{7: } │{7: } | 116 {7: }a │{7: }a │{7: }a | 117 {7: }aaaaaa │{7: }a{1:>}│{7: }aaaaaa | 118 {1:~ }│{1:~ }│{1:~ }|*4 119 {2:[No Name] [+] <[+] }{3:[No Name] [+] }| 120 | 121 ]]) 122 feed('<C-W>>') 123 screen:expect([[ 124 {7: }aaa │{7: }{1:>}│{7: }^aaa | 125 {7: } │{7: } │{7: } | 126 {7: }a │{7: }a│{7: }a | 127 {7: }aaaaaa │{7: }{1:>}│{7: }aaaaaa | 128 {1:~ }│{1:~ }│{1:~ }|*4 129 {2:[No Name] [+] <+] }{3:[No Name] [+] }| 130 | 131 ]]) 132 feed('<C-W>>') 133 screen:expect([[ 134 {7: }aaa │{7: }│{7: }^aaa | 135 {7: } │{7: }│{7: } | 136 {7: }a │{7: }│{7: }a | 137 {7: }aaaaaa │{7: }│{7: }aaaaaa | 138 {1:~ }│{1:~ }│{1:~ }|*4 139 {2:[No Name] [+] <] }{3:[No Name] [+] }| 140 | 141 ]]) 142 feed('<C-W>>') 143 screen:expect([[ 144 {7: }aaa │{7: }│{7: }^aaa | 145 {7: } │{7: }│{7: } | 146 {7: }a │{7: }│{7: }a | 147 {7: }aaaaaa │{7: }│{7: }aaaaaa | 148 {1:~ }│{1:~ }│{1:~ }|*4 149 {2:[No Name] [+] < }{3:[No Name] [+] }| 150 | 151 ]]) 152 feed('<C-W>>') 153 screen:expect([[ 154 {7: }aaa │{7: }│{7: }^aaa | 155 {7: } │{7: }│{7: } | 156 {7: }a │{7: }│{7: }a | 157 {7: }aaaaaa │{7: }│{7: }aaaaaa | 158 {1:~ }│{1:~}│{1:~ }|*4 159 {2:[No Name] [+] < }{3:[No Name] [+] }| 160 | 161 ]]) 162 feed('<C-W>h') 163 feed_command('set nowrap foldcolumn=4') 164 screen:expect([[ 165 {7: }aaa │{7: }^aaa │{7: }aaa | 166 {7: } │{7: } │{7: } | 167 {7: }a │{7: }a │{7: }a | 168 {7: }aaaaaa │{7: }aaaaaa │{7: }aaaaaa | 169 {1:~ }│{1:~ }│{1:~ }|*4 170 {2:[No Name] [+] }{3:[No Name] [+] }{2:[No Name] [+] }| 171 :set nowrap foldcolumn=4 | 172 ]]) 173 feed('15<C-W><lt>') 174 screen:expect([[ 175 {7: }aaa │{7: }│{7: }aaa | 176 {7: } │{7: }│{7: } | 177 {7: }a │{7: }│{7: }a | 178 {7: }aaaaaa │{7: ^ }│{7: }aaaaaa | 179 {1:~ }│{1:~ }│{1:~ }|*4 180 {2:[No Name] [+] }{3:<[+] }{2:[No Name] [+] }| 181 :set nowrap foldcolumn=4 | 182 ]]) 183 feed('4<C-W><lt>') 184 screen:expect([[ 185 {7: }aaa │{7: }│{7: }aaa | 186 {7: } │{7: }│{7: } | 187 {7: }a │{7: }│{7: }a | 188 {7: }aaaaaa │{7:^ }│{7: }aaaaaa | 189 {1:~ }│{1:~}│{1:~ }|*4 190 {2:[No Name] [+] }{3:< }{2:[No Name] [+] }| 191 :set nowrap foldcolumn=4 | 192 ]]) 193 end) 194 end)