summaryrefslogtreecommitdiff
path: root/mnv/src/testdir/test_plugin_matchparen.mnv
blob: 90e4485b01ba2d4346c96e275eecda5d9ad23ff6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
" Test for the matchparen plugin

if !has('gui_running') && has('unix')
  set term=ansi
endif

source util/screendump.mnv

" Test for scrolling that modifies buffer during visual block
func Test_visual_block_scroll()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    set scrolloff=1
    call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}'])
    call cursor(5, 1)
  END

  let filename = 'Xvisualblockmodifiedscroll'
  call writefile(lines, filename, 'D')

  let buf = RunMNVInTerminal('-S '.filename, #{rows: 7})
  call term_sendkeys(buf, "V\<C-D>\<C-D>")

  call VerifyScreenDump(buf, 'Test_display_visual_block_scroll', {})

  call StopMNVInTerminal(buf)
endfunc

" Test for clearing paren highlight when switching buffers
func Test_matchparen_clear_highlight()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    set hidden
    call setline(1, ['()'])
    normal 0

    func OtherBuffer()
       enew
       exe "normal iaa\<Esc>0"
    endfunc
  END
  call writefile(lines, 'XMatchparenClear', 'D')
  let buf = RunMNVInTerminal('-S XMatchparenClear', #{rows: 5})
  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {})

  call term_sendkeys(buf, ":call OtherBuffer()\<CR>:\<Esc>")
  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {})

  call term_sendkeys(buf, "\<C-^>:\<Esc>")
  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {})

  call term_sendkeys(buf, "\<C-^>:\<Esc>")
  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {})

  call StopMNVInTerminal(buf)
endfunc

" Test for matchparen highlight when switching buffer in win_execute()
func Test_matchparen_win_execute()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    let s:win = win_getid()
    call setline(1, '{}')
    split

    func SwitchBuf()
      call win_execute(s:win, 'enew | buffer #')
    endfunc
  END
  call writefile(lines, 'XMatchparenWinExecute', 'D')
  let buf = RunMNVInTerminal('-S XMatchparenWinExecute', #{rows: 5})
  call VerifyScreenDump(buf, 'Test_matchparen_win_execute_1', {})

  " Switching buffer away and back shouldn't change matchparen highlight.
  call term_sendkeys(buf, ":call SwitchBuf()\<CR>:\<Esc>")
  call VerifyScreenDump(buf, 'Test_matchparen_win_execute_1', {})

  call StopMNVInTerminal(buf)
endfunc

" Test for scrolling that modifies buffer during visual block
func Test_matchparen_pum_clear()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    set completeopt=menuone
    call setline(1, ['aa', 'aaa', 'aaaa', '(a)'])
    call cursor(4, 3)
  END

  let filename = 'Xmatchparen'
  call writefile(lines, filename, 'D')

  let buf = RunMNVInTerminal('-S '.filename, #{rows: 10})
  call term_sendkeys(buf, "i\<C-N>\<C-N>")

  call VerifyScreenDump(buf, 'Test_matchparen_pum_clear_1', {})

  call StopMNVInTerminal(buf)
endfunc

" Test that matchparen works with multibyte chars in 'matchpairs'
func Test_matchparen_mbyte()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    call setline(1, ['aaaaaaaa(', 'bbbb)cc'])
    set matchpairs+=(:)
  END

  call writefile(lines, 'XmatchparenMbyte', 'D')
  let buf = RunMNVInTerminal('-S XmatchparenMbyte', #{rows: 10})
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_1', {})
  call term_sendkeys(buf, "$")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_2', {})
  call term_sendkeys(buf, "j")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_3', {})
  call term_sendkeys(buf, "2h")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_4', {})
  call term_sendkeys(buf, "0")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_5', {})
  call term_sendkeys(buf, "kA")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_6', {})
  call term_sendkeys(buf, "\<Down>")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_7', {})
  call term_sendkeys(buf, "\<C-W>")
  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_8', {})

  call StopMNVInTerminal(buf)
endfunc

" Test for ignoring certain parenthesis
func Test_matchparen_ignore_sh_case()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    set ft=sh
    call setline(1, [
          \ '#!/bin/sh',
          \ 'SUSUWU_PRINT() (',
          \ '  case "${LEVEL}" in',
          \ '    "$SUSUWU_SH_NOTICE")',
          \ '    ${SUSUWU_S} && return 1',
          \ '  ;;',
          \ '    "$SUSUWU_SH_DEBUG")',
          \ '    (! ${SUSUWU_VERBOSE}) && return 1',
          \ '  ;;',
          \ '  esac',
          \ '  # snip',
          \ ')'
          \ ])
    call cursor(4, 26)
  END

  let filename = 'Xmatchparen_sh'
  call writefile(lines, filename, 'D')

  let buf = RunMNVInTerminal('-S '.filename, #{rows: 10})
  call VerifyScreenDump(buf, 'Test_matchparen_sh_case_1', {})
  " Send keys one by one so that CursorMoved is triggered.
  for c in 'A foobar'
    call term_sendkeys(buf, c)
    call term_wait(buf)
  endfor
  call VerifyScreenDump(buf, 'Test_matchparen_sh_case_2', {})
  call StopMNVInTerminal(buf)
endfunc

" Test for the WinScrolled event
func Test_scroll_winscrolled()
  CheckScreendump

  let lines =<< trim END
    source $MNVRUNTIME/plugin/matchparen.mnv
    set scrolloff=1
    call setline(1, ['foobar {', '', '', '', '}'])
    call cursor(5, 1)
  END

  let filename = 'Xmatchparen_winscrolled'
  call writefile(lines, filename, 'D')

  let buf = RunMNVInTerminal('-S '.filename, #{rows: 7})
  call VerifyScreenDump(buf, 'Test_matchparen_winscrolled1', {})
  call term_sendkeys(buf, "\<C-E>")
  call VerifyScreenDump(buf, 'Test_matchparen_winscrolled2', {})
  call term_sendkeys(buf, "\<C-Y>")
  call VerifyScreenDump(buf, 'Test_matchparen_winscrolled1', {})

  call StopMNVInTerminal(buf)
endfunc

" mnv: shiftwidth=2 sts=2 expandtab