neovim

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

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)