listlbr_spec.lua (10416B)
1 -- Test for linebreak and list option (non-utf8) 2 3 local n = require('test.functional.testnvim')() 4 local Screen = require('test.functional.ui.screen') 5 6 local feed, insert, source = n.feed, n.insert, n.source 7 local clear, feed_command, expect = n.clear, n.feed_command, n.expect 8 9 describe('listlbr', function() 10 before_each(clear) 11 12 -- luacheck: ignore 621 (Indentation) 13 -- luacheck: ignore 611 (Line contains only whitespaces) 14 -- luacheck: ignore 613 (Trailing whitespaces in a string) 15 it('is working', function() 16 insert([[ 17 dummy text]]) 18 19 feed_command('set wildchar=^E') 20 feed_command('10new') 21 feed_command('vsp') 22 feed_command('vert resize 20') 23 feed_command([[put =\"\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP \"]]) 24 feed_command('norm! zt') 25 feed_command('set ts=4 sw=4 sts=4 linebreak sbr=+ wrap') 26 source([[ 27 fu! ScreenChar(width) 28 let c='' 29 for j in range(1,4) 30 for i in range(1,a:width) 31 let c.=nr2char(screenchar(j, i)) 32 endfor 33 let c.="\n" 34 endfor 35 return c 36 endfu 37 fu! DoRecordScreen() 38 wincmd l 39 $put =printf(\"\n%s\", g:test) 40 $put =g:line 41 wincmd p 42 endfu 43 ]]) 44 feed_command('let g:test="Test 1: set linebreak"') 45 feed_command('redraw!') 46 feed_command('let line=ScreenChar(winwidth(0))') 47 feed_command('call DoRecordScreen()') 48 49 feed_command('let g:test="Test 2: set linebreak + set list"') 50 feed_command('set linebreak list listchars=') 51 feed_command('redraw!') 52 feed_command('let line=ScreenChar(winwidth(0))') 53 feed_command('call DoRecordScreen()') 54 55 feed_command('let g:test ="Test 3: set linebreak nolist"') 56 feed_command('set nolist linebreak') 57 feed_command('redraw!') 58 feed_command('let line=ScreenChar(winwidth(0))') 59 feed_command('call DoRecordScreen()') 60 61 feed_command( 62 'let g:test ="Test 4: set linebreak with tab and 1 line as long as screen: should break!"' 63 ) 64 feed_command('set nolist linebreak ts=8') 65 feed_command([[let line="1\t".repeat('a', winwidth(0)-2)]]) 66 feed_command('$put =line') 67 feed_command('$') 68 feed_command('norm! zt') 69 feed_command('redraw!') 70 feed_command('let line=ScreenChar(winwidth(0))') 71 feed_command('call DoRecordScreen()') 72 feed_command([[let line="_S_\t bla"]]) 73 feed_command('$put =line') 74 feed_command('$') 75 feed_command('norm! zt') 76 77 feed_command( 78 'let g:test ="Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)"' 79 ) 80 feed_command('set cpo&vim list linebreak conceallevel=2 concealcursor=nv listchars=tab:ab') 81 feed_command('syn match ConcealVar contained /_/ conceal') 82 feed_command('syn match All /.*/ contains=ConcealVar') 83 feed_command('let line=ScreenChar(winwidth(0))') 84 feed_command('call DoRecordScreen()') 85 feed_command('set cpo&vim linebreak') 86 87 feed_command('let g:test ="Test 6: set linebreak with visual block mode"') 88 feed_command('let line="REMOVE: this not"') 89 feed_command('$put =g:test') 90 feed_command('$put =line') 91 feed_command('let line="REMOVE: aaaaaaaaaaaaa"') 92 feed_command('$put =line') 93 feed_command('1/^REMOVE:') 94 feed('0<C-V>jf x') 95 feed_command('$put') 96 feed_command('set cpo&vim linebreak') 97 98 feed_command('let g:test ="Test 7: set linebreak with visual block mode and v_b_A"') 99 feed_command('$put =g:test') 100 feed('Golong line: <esc>40afoobar <esc>aTARGET at end<esc>') 101 feed_command([[exe "norm! $3B\<C-v>eAx\<Esc>"]]) 102 feed_command('set cpo&vim linebreak sbr=') 103 104 feed_command('let g:test ="Test 8: set linebreak with visual char mode and changing block"') 105 feed_command('$put =g:test') 106 feed('Go1111-1111-1111-11-1111-1111-1111<esc>0f-lv3lc2222<esc>bgj.') 107 108 feed_command('let g:test ="Test 9: using redo after block visual mode"') 109 feed_command('$put =g:test') 110 feed('Go<CR>') 111 feed('aaa<CR>') 112 feed('aaa<CR>') 113 feed('a<ESC>2k<C-V>2j~e.<CR>') 114 115 feed_command('let g:test ="Test 10: using normal commands after block-visual"') 116 feed_command('$put =g:test') 117 feed_command('set linebreak') 118 feed('Go<cr>') 119 feed('abcd{ef<cr>') 120 feed('ghijklm<cr>') 121 feed('no}pqrs<esc>2k0f{<C-V><C-V>c%<esc>') 122 123 feed_command('let g:test ="Test 11: using block replace mode after wrapping"') 124 feed_command('$put =g:test') 125 feed_command('set linebreak wrap') 126 feed('Go<esc>150aa<esc>yypk147|<C-V>jr0<cr>') 127 128 feed_command('let g:test ="Test 12: set linebreak list listchars=space:_,tab:>-,tail:-,eol:$"') 129 feed_command('set list listchars=space:_,trail:-,tab:>-,eol:$') 130 feed_command('$put =g:test') 131 feed_command([[let line="a aaaaaaaaaaaaaaaaaaaaaa\ta "]]) 132 feed_command('$put =line') 133 feed_command('$') 134 feed_command('norm! zt') 135 feed_command('redraw!') 136 feed_command('let line=ScreenChar(winwidth(0))') 137 feed_command('call DoRecordScreen()') 138 139 -- Assert buffer contents. 140 expect([[ 141 142 abcdef hijklmn pqrstuvwxyz_1060ABCDEFGHIJKLMNOP 143 144 Test 1: set linebreak 145 abcdef 146 +hijklmn 147 +pqrstuvwxyz_1060ABC 148 +DEFGHIJKLMNOP 149 150 Test 2: set linebreak + set list 151 ^Iabcdef hijklmn^I 152 +pqrstuvwxyz_1060ABC 153 +DEFGHIJKLMNOP 154 155 156 Test 3: set linebreak nolist 157 abcdef 158 +hijklmn 159 +pqrstuvwxyz_1060ABC 160 +DEFGHIJKLMNOP 161 1 aaaaaaaaaaaaaaaaaa 162 163 Test 4: set linebreak with tab and 1 line as long as screen: should break! 164 1 165 +aaaaaaaaaaaaaaaaaa 166 ~ 167 ~ 168 _S_ bla 169 170 Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated) 171 Sabbbbbb bla 172 ~ 173 ~ 174 ~ 175 Test 6: set linebreak with visual block mode 176 this not 177 aaaaaaaaaaaaa 178 REMOVE: 179 REMOVE: 180 Test 7: set linebreak with visual block mode and v_b_A 181 long line: foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar TARGETx at end 182 Test 8: set linebreak with visual char mode and changing block 183 1111-2222-1111-11-1111-2222-1111 184 Test 9: using redo after block visual mode 185 186 AaA 187 AaA 188 A 189 Test 10: using normal commands after block-visual 190 191 abcdpqrs 192 Test 11: using block replace mode after wrapping 193 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0aaa 194 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0aaa 195 Test 12: set linebreak list listchars=space:_,tab:>-,tail:-,eol:$ 196 a aaaaaaaaaaaaaaaaaaaaaa a 197 198 Test 12: set linebreak list listchars=space:_,tab:>-,tail:-,eol:$ 199 a_ 200 aaaaaaaaaaaaaaaaaaaa 201 aa>-----a-$ 202 ~ ]]) 203 end) 204 205 -- oldtest: Test_linebreak_reset_restore() 206 it('cursor position is drawn correctly after operator', function() 207 local screen = Screen.new(60, 6) 208 209 -- f_wincol() calls validate_cursor() 210 source([[ 211 set linebreak showcmd noshowmode formatexpr=wincol()-wincol() 212 call setline(1, repeat('a', &columns - 10) .. ' bbbbbbbbbb c') 213 ]]) 214 215 feed('$v$') 216 screen:expect([[ 217 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 218 bbbbbbbbbb {17:c}^ | 219 {1:~ }|*3 220 2 | 221 ]]) 222 feed('zo') 223 screen:expect([[ 224 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 225 bbbbbbbbbb ^c | 226 {1:~ }|*3 227 {9:E490: No fold found} | 228 ]]) 229 230 feed('$v$') 231 screen:expect([[ 232 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 233 bbbbbbbbbb {17:c}^ | 234 {1:~ }|*3 235 {9:E490: No fold found} 2 | 236 ]]) 237 feed('gq') 238 screen:expect([[ 239 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 240 bbbbbbbbbb ^c | 241 {1:~ }|*3 242 {9:E490: No fold found} | 243 ]]) 244 245 feed('$<C-V>$') 246 screen:expect([[ 247 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 248 bbbbbbbbbb {17:c}^ | 249 {1:~ }|*3 250 {9:E490: No fold found} 1x2 | 251 ]]) 252 feed('I') 253 screen:expect([[ 254 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 255 bbbbbbbbbb ^c | 256 {1:~ }|*3 257 {9:E490: No fold found} | 258 ]]) 259 260 feed('<Esc>$v$') 261 screen:expect([[ 262 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 263 bbbbbbbbbb {17:c}^ | 264 {1:~ }|*3 265 {9:E490: No fold found} 2 | 266 ]]) 267 feed('s') 268 screen:expect([[ 269 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 270 bbbbbbbbbb ^ | 271 {1:~ }|*3 272 {9:E490: No fold found} | 273 ]]) 274 end) 275 end)