listchars_spec.lua 7.8 KB

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