neovim

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

test_plugin_matchparen.vim (5950B)


      1 " Test for the matchparen plugin
      2 
      3 if !has('gui_running') && has('unix')
      4  " set term=ansi
      5 endif
      6 
      7 source view_util.vim
      8 source check.vim
      9 source screendump.vim
     10 
     11 " Test for scrolling that modifies buffer during visual block
     12 func Test_visual_block_scroll()
     13  CheckScreendump
     14 
     15  let lines =<< trim END
     16    source $VIMRUNTIME/plugin/matchparen.vim
     17    set scrolloff=1
     18    call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}'])
     19    call cursor(5, 1)
     20  END
     21 
     22  let filename = 'Xvisualblockmodifiedscroll'
     23  call writefile(lines, filename, 'D')
     24 
     25  let buf = RunVimInTerminal('-S '.filename, #{rows: 7})
     26  call term_sendkeys(buf, "V\<C-D>\<C-D>")
     27 
     28  call VerifyScreenDump(buf, 'Test_display_visual_block_scroll', {})
     29 
     30  call StopVimInTerminal(buf)
     31 endfunc
     32 
     33 " Test for clearing paren highlight when switching buffers
     34 func Test_matchparen_clear_highlight()
     35  CheckScreendump
     36 
     37  let lines =<< trim END
     38    source $VIMRUNTIME/plugin/matchparen.vim
     39    set hidden
     40    call setline(1, ['()'])
     41    normal 0
     42 
     43    func OtherBuffer()
     44       enew
     45       exe "normal iaa\<Esc>0"
     46    endfunc
     47  END
     48  call writefile(lines, 'XMatchparenClear', 'D')
     49  let buf = RunVimInTerminal('-S XMatchparenClear', #{rows: 5})
     50  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {})
     51 
     52  call term_sendkeys(buf, ":call OtherBuffer()\<CR>:\<Esc>")
     53  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {})
     54 
     55  call term_sendkeys(buf, "\<C-^>:\<Esc>")
     56  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {})
     57 
     58  call term_sendkeys(buf, "\<C-^>:\<Esc>")
     59  call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {})
     60 
     61  call StopVimInTerminal(buf)
     62 endfunc
     63 
     64 " Test for matchparen highlight when switching buffer in win_execute()
     65 func Test_matchparen_win_execute()
     66  CheckScreendump
     67 
     68  let lines =<< trim END
     69    source $VIMRUNTIME/plugin/matchparen.vim
     70    let s:win = win_getid()
     71    call setline(1, '{}')
     72    split
     73 
     74    func SwitchBuf()
     75      call win_execute(s:win, 'enew | buffer #')
     76    endfunc
     77  END
     78  call writefile(lines, 'XMatchparenWinExecute', 'D')
     79  let buf = RunVimInTerminal('-S XMatchparenWinExecute', #{rows: 5})
     80  call VerifyScreenDump(buf, 'Test_matchparen_win_execute_1', {})
     81 
     82  " Switching buffer away and back shouldn't change matchparen highlight.
     83  call term_sendkeys(buf, ":call SwitchBuf()\<CR>:\<Esc>")
     84  call VerifyScreenDump(buf, 'Test_matchparen_win_execute_1', {})
     85 
     86  call StopVimInTerminal(buf)
     87 endfunc
     88 
     89 " Test for scrolling that modifies buffer during visual block
     90 func Test_matchparen_pum_clear()
     91  CheckScreendump
     92 
     93  let lines =<< trim END
     94    source $VIMRUNTIME/plugin/matchparen.vim
     95    set completeopt=menuone
     96    call setline(1, ['aa', 'aaa', 'aaaa', '(a)'])
     97    call cursor(4, 3)
     98  END
     99 
    100  let filename = 'Xmatchparen'
    101  call writefile(lines, filename, 'D')
    102 
    103  let buf = RunVimInTerminal('-S '.filename, #{rows: 10})
    104  call term_sendkeys(buf, "i\<C-N>\<C-N>")
    105 
    106  call VerifyScreenDump(buf, 'Test_matchparen_pum_clear_1', {})
    107 
    108  call StopVimInTerminal(buf)
    109 endfunc
    110 
    111 " Test that matchparen works with multibyte chars in 'matchpairs'
    112 func Test_matchparen_mbyte()
    113  CheckScreendump
    114 
    115  let lines =<< trim END
    116    source $VIMRUNTIME/plugin/matchparen.vim
    117    call setline(1, ['aaaaaaaa(', 'bbbb)cc'])
    118    set matchpairs+=(:)
    119  END
    120 
    121  call writefile(lines, 'XmatchparenMbyte', 'D')
    122  let buf = RunVimInTerminal('-S XmatchparenMbyte', #{rows: 10})
    123  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_1', {})
    124  call term_sendkeys(buf, "$")
    125  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_2', {})
    126  call term_sendkeys(buf, "j")
    127  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_3', {})
    128  call term_sendkeys(buf, "2h")
    129  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_4', {})
    130  call term_sendkeys(buf, "0")
    131  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_5', {})
    132  call term_sendkeys(buf, "kA")
    133  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_6', {})
    134  call term_sendkeys(buf, "\<Down>")
    135  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_7', {})
    136  call term_sendkeys(buf, "\<C-W>")
    137  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_8', {})
    138 
    139  call StopVimInTerminal(buf)
    140 endfunc
    141 
    142 " Test for ignoring certain parenthesis
    143 func Test_matchparen_ignore_sh_case()
    144  CheckScreendump
    145 
    146  let lines =<< trim END
    147    source $VIMRUNTIME/plugin/matchparen.vim
    148    set ft=sh
    149    call setline(1, [
    150          \ '#!/bin/sh',
    151          \ 'SUSUWU_PRINT() (',
    152          \ '  case "${LEVEL}" in',
    153          \ '    "$SUSUWU_SH_NOTICE")',
    154          \ '    ${SUSUWU_S} && return 1',
    155          \ '  ;;',
    156          \ '    "$SUSUWU_SH_DEBUG")',
    157          \ '    (! ${SUSUWU_VERBOSE}) && return 1',
    158          \ '  ;;',
    159          \ '  esac',
    160          \ '  # snip',
    161          \ ')'
    162          \ ])
    163    call cursor(4, 26)
    164  END
    165 
    166  let filename = 'Xmatchparen_sh'
    167  call writefile(lines, filename, 'D')
    168 
    169  let buf = RunVimInTerminal('-S '.filename, #{rows: 10})
    170  call VerifyScreenDump(buf, 'Test_matchparen_sh_case_1', {})
    171  " Send keys one by one so that CursorMoved is triggered.
    172  for c in 'A foobar'
    173    call term_sendkeys(buf, c)
    174    call term_wait(buf)
    175  endfor
    176  call VerifyScreenDump(buf, 'Test_matchparen_sh_case_2', {})
    177  call StopVimInTerminal(buf)
    178 endfunc
    179 
    180 " Test for the WinScrolled event
    181 func Test_scroll_winscrolled()
    182  CheckScreendump
    183 
    184  let lines =<< trim END
    185    source $VIMRUNTIME/plugin/matchparen.vim
    186    set scrolloff=1
    187    call setline(1, ['foobar {', '', '', '', '}'])
    188    call cursor(5, 1)
    189  END
    190 
    191  let filename = 'Xmatchparen_winscrolled'
    192  call writefile(lines, filename, 'D')
    193 
    194  let buf = RunVimInTerminal('-S '.filename, #{rows: 7})
    195  call VerifyScreenDump(buf, 'Test_matchparen_winscrolled1', {})
    196  call term_sendkeys(buf, "\<C-E>")
    197  call VerifyScreenDump(buf, 'Test_matchparen_winscrolled2', {})
    198  call term_sendkeys(buf, "\<C-Y>")
    199  call VerifyScreenDump(buf, 'Test_matchparen_winscrolled1', {})
    200 
    201  call StopVimInTerminal(buf)
    202 endfunc
    203 
    204 " vim: shiftwidth=2 sts=2 expandtab