mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 02:20:03 +08:00
cd6ea298f2
* Add incsearch.vim into bundle dir * Fix java neoformat config close #3573 * Use echom instead in pull.vim
163 lines
5.2 KiB
VimL
163 lines
5.2 KiB
VimL
let s:suite = themis#suite('visual_emulation')
|
|
let s:assert = themis#helper('assert')
|
|
|
|
" Helper:
|
|
function! s:add_line(str)
|
|
put! =a:str
|
|
endfunction
|
|
function! s:add_lines(lines)
|
|
for line in reverse(a:lines)
|
|
put! =line
|
|
endfor
|
|
endfunction
|
|
function! s:get_pos_char()
|
|
return getline('.')[col('.')-1]
|
|
endfunction
|
|
|
|
function! s:reset_buffer()
|
|
normal! ggdG
|
|
call s:add_lines(['1pattern_a', '2pattern_b', '3pattern_c', '4pattern_d', '5pattern_e'])
|
|
normal! G
|
|
call s:add_lines(range(100))
|
|
normal! Gddgg0zt
|
|
endfunction
|
|
|
|
function! s:suite.before_each()
|
|
call s:reset_buffer()
|
|
endfunction
|
|
|
|
function! s:assert.equal_matches(pattern, ...)
|
|
" :h getmatches()
|
|
let m = getmatches()[0]
|
|
call s:assert.equals(m.pattern, a:pattern)
|
|
endfunction
|
|
|
|
function! s:assert.equal_view(view)
|
|
for key in keys(a:view)
|
|
call s:assert.equals(winsaveview()[key], a:view[key])
|
|
endfor
|
|
endfunction
|
|
|
|
function! s:assert.equal_line(line)
|
|
call s:assert.equals(getline('.'), a:line)
|
|
endfunction
|
|
|
|
function! s:assert.equal_pos_char(char)
|
|
call s:assert.equals(s:get_pos_char(), a:char)
|
|
endfunction
|
|
|
|
function! s:suite.emulate_v()
|
|
normal! v3jy
|
|
call s:assert.equals(visualmode(), "v")
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
call s:assert.equal_matches('\v%1l%1c\_.{-}%4l|%4l\_.*%4l%1c')
|
|
call incsearch#highlight#emulate_visual_highlight('v')
|
|
call s:assert.equal_matches('\v%1l%1c\_.{-}%4l|%4l\_.*%4l%1c')
|
|
endfunction
|
|
|
|
function! s:suite.emulate_V()
|
|
normal! V3jy
|
|
call s:assert.equals(visualmode(), "V")
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
call s:assert.equal_matches('\v%1l\_.*%4l')
|
|
call incsearch#highlight#emulate_visual_highlight('V')
|
|
call s:assert.equal_matches('\v%1l\_.*%4l')
|
|
endfunction
|
|
|
|
function! s:suite.emulate_ctrl_v()
|
|
exec "normal! \<C-v>2j2ly"
|
|
call s:assert.equals(visualmode(), "\<C-v>")
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
call s:assert.equal_matches('\v%1l%1c.*%4c|%2l%1c.*%4c|%3l%1c.*%4c')
|
|
call incsearch#highlight#emulate_visual_highlight("\<C-v>")
|
|
call s:assert.equal_matches('\v%1l%1c.*%4c|%2l%1c.*%4c|%3l%1c.*%4c')
|
|
endfunction
|
|
|
|
function! s:suite.emulate_v_End()
|
|
normal! v3j$y
|
|
call s:assert.equals(visualmode(), 'v')
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
call s:assert.equal_matches('\v%1l%1c\_.{-}%4l|%4l\_.*%4l%11c')
|
|
call incsearch#highlight#emulate_visual_highlight('v')
|
|
call s:assert.equal_matches('\v%1l%1c\_.{-}%4l|%4l\_.*%4l%11c')
|
|
endfunction
|
|
|
|
function! s:suite.emulate_V_End()
|
|
normal! V3j$y
|
|
call s:assert.equals(visualmode(), 'V')
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
call s:assert.equal_matches('\v%1l\_.*%4l')
|
|
call incsearch#highlight#emulate_visual_highlight('V')
|
|
call s:assert.equal_matches('\v%1l\_.*%4l')
|
|
endfunction
|
|
|
|
function! s:suite.emulate_ctrl_v_End()
|
|
exec "normal! \<C-v>3j$y"
|
|
call s:assert.equals(visualmode(), "\<C-v>")
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
call s:assert.equal_matches('\v%1l%1c.*%11c|%2l%1c.*%11c|%3l%1c.*%11c|%4l%1c.*%11c')
|
|
call incsearch#highlight#emulate_visual_highlight("\<C-v>")
|
|
call s:assert.equal_matches('\v%1l%1c.*%11c|%2l%1c.*%11c|%3l%1c.*%11c|%4l%1c.*%11c')
|
|
endfunction
|
|
|
|
function! s:suite.custom_highlight()
|
|
normal! v3jy
|
|
call s:assert.equals(visualmode(), 'v')
|
|
call incsearch#highlight#emulate_visual_highlight()
|
|
let visual_hl = incsearch#highlight#capture('Visual')
|
|
call s:assert.equals(getmatches()[0].group, '_IncSearchVisual')
|
|
let h = incsearch#highlight#capture('_IncSearchVisual')
|
|
call s:assert.equals(h.highlight, visual_hl.highlight)
|
|
|
|
let error_hl = incsearch#highlight#capture('ErrorMsg')
|
|
call incsearch#highlight#emulate_visual_highlight('v', error_hl)
|
|
let h = incsearch#highlight#capture('_IncSearchVisual')
|
|
call s:assert.equals(h.highlight, error_hl.highlight)
|
|
endfunction
|
|
|
|
function! s:suite.get_pattern_v()
|
|
let r = incsearch#highlight#get_visual_pattern('v', [5,2], [2,4])
|
|
call s:assert.equals(r, '\v%2l%4c\_.{-}%5l|%5l\_.*%5l%2c')
|
|
endfunction
|
|
|
|
function! s:suite.get_pattern_V()
|
|
let r = incsearch#highlight#get_visual_pattern('V', [5,2], [2,4])
|
|
call s:assert.equals(r, '\v%2l\_.*%5l')
|
|
endfunction
|
|
|
|
function! s:suite.get_pattern_ctrl_v()
|
|
let r = incsearch#highlight#get_visual_pattern("\<C-v>", [5,2], [2,4])
|
|
call s:assert.equals(r, '\v%2l%2c.*%5c|%3l%2c.*%5c|%4l%2c.*%5c|%5l%2c.*%5c')
|
|
endfunction
|
|
|
|
function! s:suite.over_win_height()
|
|
normal! 100ggzz
|
|
let r = incsearch#highlight#get_visual_pattern('V', [1,1], [100,100])
|
|
let e = incsearch#highlight#get_visual_pattern('V', [line('w0'),1], [100,100])
|
|
call s:assert.equals(r, e)
|
|
normal! ggzt
|
|
let r2 = incsearch#highlight#get_visual_pattern('V', [1,1], [100,100])
|
|
let e2 = '\v%1l\_.*%' . line('w$') . 'l'
|
|
call s:assert.equals(r2, e2)
|
|
endfunction
|
|
|
|
function! s:suite.unexpected_mode()
|
|
let throwed = 0
|
|
try
|
|
let r = incsearch#highlight#get_visual_pattern('a', [1,1], [100,100])
|
|
catch /incsearch.vim:/
|
|
let throwed = 1
|
|
call s:assert.equals(v:exception, 'incsearch.vim: unexpected mode a')
|
|
endtry
|
|
call s:assert.equals(throwed, 1)
|
|
endfunction
|
|
|
|
function! s:suite.update_highlight_on_colorscheme()
|
|
colorscheme default
|
|
let old_hl = incsearch#highlight#get_visual_hlobj()
|
|
colorscheme desert
|
|
let new_hl = incsearch#highlight#get_visual_hlobj()
|
|
call s:assert.not_equals(old_hl, new_hl)
|
|
endfunction
|
|
|