listlbr_spec.lua 10 KB

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