neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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)