matchparen_spec.lua 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. local n = require('test.functional.testnvim')()
  2. local Screen = require('test.functional.ui.screen')
  3. local clear = n.clear
  4. local exec = n.exec
  5. local feed = n.feed
  6. describe('matchparen', function()
  7. before_each(clear)
  8. -- oldtest: Test_visual_block_scroll()
  9. it('redraws properly after scrolling with scrolloff=1', function()
  10. local screen = Screen.new(30, 7)
  11. exec([[
  12. source $VIMRUNTIME/plugin/matchparen.vim
  13. set scrolloff=1
  14. call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}'])
  15. call cursor(5, 1)
  16. ]])
  17. feed('V<c-d><c-d>')
  18. screen:expect([[
  19. {17:{} |
  20. {17:}} |
  21. {17:{} |
  22. {17:f} |
  23. ^g |
  24. } |
  25. {5:-- VISUAL LINE --} |
  26. ]])
  27. end)
  28. -- oldtest: Test_matchparen_clear_highlight()
  29. it('matchparen highlight is cleared when switching buffer', function()
  30. local screen = Screen.new(20, 5)
  31. screen:add_extra_attr_ids {
  32. [100] = { background = Screen.colors.Cyan1 },
  33. }
  34. local screen1 = [[
  35. {100:^()} |
  36. {1:~ }|*3
  37. |
  38. ]]
  39. local screen2 = [[
  40. ^aa |
  41. {1:~ }|*3
  42. |
  43. ]]
  44. exec([[
  45. source $VIMRUNTIME/plugin/matchparen.vim
  46. set hidden
  47. call setline(1, ['()'])
  48. normal 0
  49. func OtherBuffer()
  50. enew
  51. exe "normal iaa\<Esc>0"
  52. endfunc
  53. ]])
  54. screen:expect(screen1)
  55. exec('call OtherBuffer()')
  56. screen:expect(screen2)
  57. feed('<C-^>')
  58. screen:expect(screen1)
  59. feed('<C-^>')
  60. screen:expect(screen2)
  61. end)
  62. -- oldtest: Test_matchparen_win_execute()
  63. it('matchparen highlight when switching buffer in win_execute()', function()
  64. local screen = Screen.new(20, 5)
  65. screen:add_extra_attr_ids {
  66. [100] = { background = Screen.colors.Cyan1 },
  67. }
  68. exec([[
  69. source $VIMRUNTIME/plugin/matchparen.vim
  70. let s:win = win_getid()
  71. call setline(1, '{}')
  72. split
  73. func SwitchBuf()
  74. call win_execute(s:win, 'enew | buffer #')
  75. endfunc
  76. ]])
  77. screen:expect([[
  78. {100:^{}} |
  79. {3:[No Name] [+] }|
  80. {} |
  81. {2:[No Name] [+] }|
  82. |
  83. ]])
  84. -- Switching buffer away and back shouldn't change matchparen highlight.
  85. exec('call SwitchBuf()')
  86. screen:expect_unchanged()
  87. end)
  88. -- oldtest: Test_matchparen_pum_clear()
  89. it('is cleared when completion popup is shown', function()
  90. local screen = Screen.new(30, 9)
  91. exec([[
  92. source $VIMRUNTIME/plugin/matchparen.vim
  93. set completeopt=menuone
  94. call setline(1, ['aa', 'aaa', 'aaaa', '(a)'])
  95. call cursor(4, 3)
  96. ]])
  97. feed('i<C-X><C-N><C-N>')
  98. screen:expect([[
  99. aa |
  100. aaa |
  101. aaaa |
  102. (aaa^) |
  103. {4: aa }{1: }|
  104. {12: aaa }{1: }|
  105. {4: aaaa }{1: }|
  106. {1:~ }|
  107. {5:-- }{6:match 2 of 3} |
  108. ]])
  109. end)
  110. -- oldtest: Test_matchparen_mbyte()
  111. it("works with multibyte chars in 'matchpairs'", function()
  112. local screen = Screen.new(30, 10)
  113. screen:add_extra_attr_ids {
  114. [100] = { background = Screen.colors.Cyan1 },
  115. }
  116. exec([[
  117. source $VIMRUNTIME/plugin/matchparen.vim
  118. call setline(1, ['aaaaaaaa(', 'bbbb)cc'])
  119. set matchpairs+=(:)
  120. ]])
  121. screen:expect([[
  122. ^aaaaaaaa( |
  123. bbbb)cc |
  124. {1:~ }|*7
  125. |
  126. ]])
  127. feed('$')
  128. screen:expect([[
  129. aaaaaaaa{100:^(} |
  130. bbbb{100:)}cc |
  131. {1:~ }|*7
  132. |
  133. ]])
  134. feed('j')
  135. screen:expect([[
  136. aaaaaaaa( |
  137. bbbb)c^c |
  138. {1:~ }|*7
  139. |
  140. ]])
  141. feed('2h')
  142. screen:expect([[
  143. aaaaaaaa{100:(} |
  144. bbbb{100:^)}cc |
  145. {1:~ }|*7
  146. |
  147. ]])
  148. feed('0')
  149. screen:expect([[
  150. aaaaaaaa( |
  151. ^bbbb)cc |
  152. {1:~ }|*7
  153. |
  154. ]])
  155. feed('kA')
  156. screen:expect([[
  157. aaaaaaaa{100:(}^ |
  158. bbbb{100:)}cc |
  159. {1:~ }|*7
  160. {5:-- INSERT --} |
  161. ]])
  162. feed('<Down>')
  163. screen:expect([[
  164. aaaaaaaa( |
  165. bbbb)cc^ |
  166. {1:~ }|*7
  167. {5:-- INSERT --} |
  168. ]])
  169. feed('<C-W>')
  170. screen:expect([[
  171. aaaaaaaa{100:(} |
  172. bbbb{100:)}^ |
  173. {1:~ }|*7
  174. {5:-- INSERT --} |
  175. ]])
  176. end)
  177. end)