1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 12:40:05 +08:00
SpaceVim/bundle/clever-f.vim/test/test.vimspec

1298 lines
31 KiB
Plaintext
Raw Normal View History

2020-06-13 14:06:35 +08:00
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
scriptencoding utf-8
function! AddLine(str)
put! =a:str
endfunction
function! CursorPos()
return [line('.'), col('.'), getline('.')[col('.')-1]]
endfunction
Describe default config
It should load plugin
Assert g:loaded_clever_f
End
It should override original mappings by default
for m in ['f', 'F', 't', 'T']
let mapped = mapcheck(m, 'nxo')
Assert True(stridx(mapped, 'clever-f') >= 0, m . ' -> ' . mapped)
endfor
End
It should provide variables to customize behavior
call clever_f#reset()
Assert Equals(g:clever_f_across_no_line, 0)
Assert Equals(g:clever_f_ignore_case, 0)
Assert Equals(g:clever_f_use_migemo, 0)
Assert Equals(g:clever_f_fix_key_direction, 0)
Assert Equals(g:clever_f_show_prompt, 0)
Assert Equals(g:clever_f_smart_case, 0)
Assert Equals(g:clever_f_chars_match_any_signs, '')
Assert Equals(g:clever_f_mark_cursor, 1)
Assert Equals(g:clever_f_hide_cursor_on_cmdline, 1)
Assert Equals(g:clever_f_timeout_ms, 0)
Assert Equals(g:clever_f_mark_char, 1)
Assert Equals(g:clever_f_repeat_last_char_inputs, ["\<CR>"])
Assert Equals(g:clever_f_clean_labels_eagerly, 1)
Assert Equals(g:clever_f_mark_direct, 0)
End
End
Describe f, F, t and T mappings
Before
new
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
End
After
close!
End
It should provide improved forward search like builtin f
normal! 0
let l = line('.')
Assert Equals(CursorPos(), [l,1,'p'])
normal fh
Assert Equals(CursorPos(), [l,6,'h'])
normal f
Assert Equals(CursorPos(), [l,11,'h'])
normal! e
Assert Equals(CursorPos(), [l,14,'o'])
normal fo
Assert Equals(CursorPos(), [l,17,'o'])
normal f
Assert Equals(CursorPos(), [l,19,'o'])
End
It should provide improved backward search like builtin F
normal! $
let l = line('.')
Assert Equals(CursorPos(), [l,19,'o'])
normal Fo
Assert Equals(CursorPos(), [l,17,'o'])
normal f
Assert Equals(CursorPos(), [l,14,'o'])
normal! h
normal Fh
Assert Equals(CursorPos(), [l,11,'h'])
normal f
Assert Equals(CursorPos(), [l,6,'h'])
End
It should provide t mapping like builtin t
normal! 0
let l = line('.')
Assert Equals(CursorPos(), [l,1,'p'])
normal th
Assert Equals(CursorPos(), [l,5,' '])
normal t
Assert Equals(CursorPos(), [l,10,' '])
normal! e
Assert Equals(CursorPos(), [l,14,'o'])
normal to
Assert Equals(CursorPos(), [l,16,'p'])
normal t
Assert Equals(CursorPos(), [l,18,'y'])
call AddLine('ab hbge huga')
normal! gg0
normal tb
Assert Equals(CursorPos(), [l,1,'a'])
normal t
Assert Equals(CursorPos(), [l,4,'h'])
End
It should provide T mapping like builtin T
normal! 0
let l = line('.')
Assert Equals(CursorPos(), [l,1,'p'])
normal th
Assert Equals(CursorPos(), [l,5,' '])
normal t
Assert Equals(CursorPos(), [l,10,' '])
normal! e
Assert Equals(CursorPos(), [l,14,'o'])
normal to
Assert Equals(CursorPos(), [l,16,'p'])
normal t
Assert Equals(CursorPos(), [l,18,'y'])
call AddLine('ab hbge huga')
normal! gg0
normal tb
Assert Equals(CursorPos(), [l,1,'a'])
normal t
Assert Equals(CursorPos(), [l,4,'h'])
End
It should provide improved forward search like builtin f in visual mode
normal! 0
let l = line('.')
Assert Equals(CursorPos(), [l,1,'p'])
normal! v
normal fh
Assert Equals(CursorPos(), [l,6,'h'])
normal f
Assert Equals(CursorPos(), [l,11,'h'])
normal! e
Assert Equals(CursorPos(), [l,14,'o'])
normal fo
Assert Equals(CursorPos(), [l,17,'o'])
normal f
Assert Equals(CursorPos(), [l,19,'o'])
End
It should provide improved backward search like builtin F
normal! $v
let l = line('.')
Assert Equals(CursorPos(), [l,19,'o'])
normal Fo
Assert Equals(CursorPos(), [l,17,'o'])
normal f
Assert Equals(CursorPos(), [l,14,'o'])
normal! h
normal Fh
Assert Equals(CursorPos(), [l,11,'h'])
normal f
Assert Equals(CursorPos(), [l,6,'h'])
End
It should provide t mapping like builtin t
normal! 0v
let l = line('.')
Assert Equals(CursorPos(), [l,1,'p'])
normal th
Assert Equals(CursorPos(), [l,5,' '])
normal t
Assert Equals(CursorPos(), [l,10,' '])
normal! e
Assert Equals(CursorPos(), [l,14,'o'])
normal to
Assert Equals(CursorPos(), [l,16,'p'])
normal t
Assert Equals(CursorPos(), [l,18,'y'])
call AddLine('ab hbge huga')
normal! gg0
normal tb
Assert Equals(CursorPos(), [l,1,'a'])
normal t
Assert Equals(CursorPos(), [l,4,'h'])
End
It should provide T mapping like builtin T
normal! $v
let l = line('.')
Assert Equals(CursorPos(), [l,19,'o'])
normal To
Assert Equals(CursorPos(), [l,18,'y'])
normal t
Assert Equals(CursorPos(), [l,15,' '])
normal! h
normal Th
Assert Equals(CursorPos(), [l,12,'i'])
normal t
Assert Equals(CursorPos(), [l,7,'u'])
call AddLine('ab hbge huga')
normal! gg$
normal Tg
Assert Equals(CursorPos(), [l,12,'a'])
normal t
Assert Equals(CursorPos(), [l,7,'e'])
End
It should work with Vim 8.1.0648
normal! 0
let l = line('.')
Assert Equals(CursorPos(), [l,1,'p'])
normal dth
Assert Equals(CursorPos(), [l,1,'h'])
End
It should have different context in normal mode and visual mode
let l = line('.')
Assert Equals(CursorPos(), [l, 1, 'p'])
normal fo
Assert Equals(CursorPos(), [l, 2, 'o'])
normal vfh
Assert Equals(CursorPos(), [l, 6, 'h'])
normal f
Assert Equals(CursorPos(), [l, 11, 'h'])
normal! d
Assert Equals(getline('.'), "piyo poyo")
Assert Equals(CursorPos(), [l, 2, 'i'])
normal! dfp
Assert Equals(getline('.'), "poyo")
Assert Equals(CursorPos(), [l, 2, 'o'])
End
It should open folding automatically
let l = getline(1)
call setline(1, ['{{{', l, '}}}'])
setl foldmethod=marker
" Move to closed folding
normal! ggjzM
normal fh
Assert Equals(foldclosed('.'), -1)
Assert Equals(CursorPos(), [2,6,'h'])
End
It does not reproduce #54
normal! 0
let l = line('.')
normal fh
Assert Equals(CursorPos(), [l,6,'h'])
" Back to the position after reset
normal! 0
" XXX: Hack! While running test, InsertEnter is not fired
" automatically. To test the event, we need to cause it manually.
doautocmd CursorMoved
normal! 5l
Assert Equals(CursorPos(), [l,6,'h'])
normal fo
Assert Equals(CursorPos(), [l,14,'o'])
End
End
Describe f and F mappings' contexts
Before
new
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
End
After
close!
End
It should be shared
normal! 0
let l = line('.')
normal fh
Assert Equals(CursorPos(), [l,6,'h'])
normal f
Assert Equals(CursorPos(), [l,11,'h'])
normal F
Assert Equals(CursorPos(), [l,6,'h'])
normal f
Assert Equals(CursorPos(), [l,11,'h'])
End
End
Describe g:clever_f_across_no_line
Before
new
let g:clever_f_across_no_line = 1
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
call AddLine('poge huga hiyo poyo')
End
After
let g:clever_f_across_no_line = 0
close!
End
It should not move cursor to next line
normal! gg0
let l = line('.')
normal fhf
Assert Equals(CursorPos(), [l,11,'h'])
normal f
Assert Equals(CursorPos(), [l,11,'h'])
normal! gg0
normal tht
Assert Equals(CursorPos(), [l,10,' '])
normal t
Assert Equals(CursorPos(), [l,10,' '])
End
It should not move cursor to previous line
normal! ggj$
let l = line('.')
normal Fpf
Assert Equals(CursorPos(), [l,1,'p'])
normal f
Assert Equals(CursorPos(), [l,1,'p'])
normal! ggj$
normal Tpt
Assert Equals(CursorPos(), [l,2,'o'])
normal t
Assert Equals(CursorPos(), [l,2,'o'])
End
End
Describe a non-existent char
Before
new
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
End
After
close!
End
It should do nothing
normal! 0
let origin = CursorPos()
normal fd
Assert Equals(CursorPos(), origin)
normal f1
Assert Equals(CursorPos(), origin)
normal f)
Assert Equals(CursorPos(), origin)
normal f^
Assert Equals(CursorPos(), origin)
normal fm
Assert Equals(CursorPos(), origin)
End
End
Context target is in other line
Before
new
call AddLine('foo bar baz')
call AddLine('poge huga hiyo poyo')
call clever_f#reset()
normal! gg
End
After
close!
End
It should move cursor forward across lines
normal! 0
let l = line('.')
Assert Equals(col('.'), 1)
normal fa
Assert Equals(CursorPos(), [l, 9, 'a'])
normal f
Assert Equals(CursorPos(), [l+1, 6, 'a'])
normal f
Assert Equals(CursorPos(), [l+1, 10, 'a'])
normal F
Assert Equals(CursorPos(), [l+1, 6, 'a'])
normal F
Assert Equals(CursorPos(), [l, 9, 'a'])
End
It should move cursor backward across lines
normal! Gk$
let l = line('.')
Assert Equals(col('.'), 11)
normal Fa
Assert Equals(CursorPos(), [l, 10, 'a'])
normal f
Assert Equals(CursorPos(), [l, 6, 'a'])
normal f
Assert Equals(CursorPos(), [l-1, 9, 'a'])
normal F
Assert Equals(CursorPos(), [l, 6, 'a'])
normal F
Assert Equals(CursorPos(), [l, 10, 'a'])
End
End
Context Multibyte characters
Before
new
call AddLine('ビムかわいいよzビムx')
call AddLine('foo bar baz')
call clever_f#reset()
normal! gg
End
After
close!
End
It should be supported
normal! gg0
let l = line('.')
normal fz
Assert Equals(CursorPos(), [l, 11, 'z'])
normal f
Assert Equals(CursorPos(), [l+1, 22, 'z'])
normal! h
normal fx
Assert Equals(CursorPos(), [l+1, 29, 'x'])
End
End
describe g:clever_f_ignore_case
Before
new
let g:clever_f_ignore_case = 1
call clever_f#reset()
call AddLine('poge Guga hiyo Go;yo;')
End
After
let g:clever_f_ignore_case = 0
close!
End
It should make f case insensitive
normal! gg0
let l = line('.')
normal fg
Assert Equals(CursorPos(), [l, 3, 'g'])
normal f
Assert Equals(CursorPos(), [l, 6, 'G'])
normal f
Assert Equals(CursorPos(), [l, 8, 'g'])
normal F
Assert Equals(CursorPos(), [l, 6, 'G'])
End
It should make no effect on searching signs
normal! 0
normal f;
Assert Equals(col('.'), 18)
normal f
Assert Equals(col('.'), 21)
let pos = getpos('.')
normal f
Assert Equals(pos, getpos('.'))
End
End
Describe clever_f#compat#strchars
It should return different value from strlen() when multibyte character strings given
for str in ['あいうえお', 'aiueoあ', '3ABC5']
Assert NotEquals(clever_f#compat#strchars(str), strlen(str))
endfor
End
It should return the same value as strlen() when given string contains no multibyte character
for str in ['aiueo', 'this_is_a_pen', "!#$%&'()'", '']
Assert Equals(clever_f#compat#strchars(str), strlen(str))
endfor
End
End
Describe clever_f#find_with()
It should raise an error when invalid map is given
Throws /Error: Invalid mapping/ clever_f#find_with('x')
End
End
Describe migemo support
Before
new
let g:clever_f_use_migemo = 1
let g:clever_f_across_no_line = 1
call AddLine('はー,ビムかわいいよビム')
call clever_f#reset()
normal! gg0
End
After
close!
let g:clever_f_across_no_line = 0
let g:clever_f_use_migemo = 0
End
It should make f and F mapping match multibyte characters
normal fb
Assert Equals(col('.'), 10)
normal f
Assert Equals(col('.'), 31)
normal F
Assert Equals(col('.'), 10)
normal $
normal Fb
Assert Equals(col('.'), 31)
normal f
Assert Equals(col('.'), 10)
normal F
Assert Equals(col('.'), 31)
End
It should make t and T mapping match multibyte characters
normal tb
Assert Equals(col('.'), 7)
normal t
Assert Equals(col('.'), 28)
normal T
Assert Equals(col('.'), 13)
normal $
normal Tb
Assert Equals(col('.'), 34)
normal t
Assert Equals(col('.'), 13)
normal T
Assert Equals(col('.'), 28)
normal t
Assert Equals(col('.'), 13)
End
It doesn't degrade issue #24
let save = g:clever_f_across_no_line
let g:clever_f_across_no_line = 0
call AddLine(' sOS')
call AddLine(' sOS')
call AddLine(' sOS')
normal! gg^
normal fS
Assert Equals(CursorPos(), [1, 17, 'S'])
normal f
Assert Equals(CursorPos(), [2, 17, 'S'])
normal f
Assert Equals(CursorPos(), [3, 17, 'S'])
let g:clever_f_across_no_line = save
End
End
Describe g:clever_f_fix_key_direction
Before
new
let g:clever_f_fix_key_direction = 1
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
normal! gg0
End
After
close!
let g:clever_f_fix_key_direction = 0
End
It should fix the direction of search for f and F
normal fofff
Assert Equals(col('.'), 19)
normal F
Assert Equals(col('.'), 17)
normal F
Assert Equals(col('.'), 14)
normal F
Assert Equals(col('.'), 2)
normal $
normal Fo
Assert Equals(col('.'), 17)
normal F
Assert Equals(col('.'), 14)
normal F
Assert Equals(col('.'), 2)
End
It should fix the direction of search for t and T
normal tottt
Assert Equals(col('.'), 18)
normal T
Assert Equals(col('.'), 15)
normal T
Assert Equals(col('.'), 3)
normal $
normal To
Assert Equals(col('.'), 18)
normal T
Assert Equals(col('.'), 15)
normal T
Assert Equals(col('.'), 3)
End
End
Describe Special characters
Before
new
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
normal! gg0
End
After
close!
End
It should not break clever-f.vim
let pos = getpos('.')
execute 'normal' "f\<F1>"
execute 'normal' "f\<Left>"
execute 'normal' "f\<BS>"
Assert Equals(pos, getpos('.'))
End
End
Describe <Esc>
Before
new
call clever_f#reset()
call AddLine("poge huga \<Esc> poyo")
normal! gg0
End
After
close!
End
It should reset the state on f
let pos = getpos('.')
execute 'normal' "f\<Esc>"
Assert Equals(getpos('.'), pos)
" Check that the state is reset
normal fe
Assert Equals(col('.'), 4)
End
It should reset the state on T
normal! $
let pos = getpos('.')
execute 'normal' "T\<Esc>"
Assert Equals(getpos('.'), pos)
" Check that the state is reset
normal Th
Assert Equals(col('.'), 7)
End
Context with g:clever_f_mark_direct
Before
let g:clever_f_mark_direct = 1
highlight link CleverFDirect CleverFDefaultLabel
End
After
let g:clever_f_mark_direct = 0
End
It should remove target highlights
normal! gg0
execute 'normal' "f\<Esc>"
Assert Equals(len(filter(getmatches(), 'v:val.group==#"CleverFDirect"')), 0)
End
End
End
Describe g:clever_f_smart_case
Before
new
call clever_f#reset()
call AddLine('poHe huga Hiyo hoyo: poyo();')
normal! gg0
let g:clever_f_smart_case = 1
End
After
close!
let g:clever_f_smart_case = 0
End
It should make f smart case
normal fh
Assert Equals(col('.'), 3)
normal f
Assert Equals(col('.'), 6)
normal f
Assert Equals(col('.'), 11)
normal f
Assert Equals(col('.'), 16)
normal F
Assert Equals(col('.'), 11)
normal 0
normal fH
Assert Equals(col('.'), 3)
normal f
Assert Equals(col('.'), 11)
normal f
Assert Equals(col('.'), 11)
normal F
Assert Equals(col('.'), 3)
End
It should make t smart case
normal! $
normal Th
Assert Equals(col('.'), 17)
normal t
Assert Equals(col('.'), 12)
normal t
Assert Equals(col('.'), 7)
normal t
Assert Equals(col('.'), 4)
normal T
Assert Equals(col('.'), 5)
normal! $
normal TH
Assert Equals(col('.'), 12)
normal t
Assert Equals(col('.'), 4)
normal T
Assert Equals(col('.'), 10)
End
It should not affect searching signs
normal! 0
normal f;
Assert Equals(col('.'), 28)
normal! 0
let pos = getpos('.')
normal f
Assert Equals(pos, getpos('.'))
End
End
Describe g:clever_f_chars_match_any_signs
Before
new
call AddLine(' !"#$%&''()=~|\-^\@`[]{};:+*<>,.?_/')
let g:clever_f_chars_match_any_signs = ';'
normal! gg0
End
After
close!
let g:clever_f_chars_match_any_signs = ''
End
It should specify characters which match to any signs
normal f;
Assert Equals(col('.'), 2)
for i in range(3, 34)
normal f
Assert Equals(col('.'), i)
endfor
let pos = getpos('.')
normal f
Assert Equals(pos, getpos('.'))
for i in reverse(range(2, 33))
normal F
Assert Equals(col('.'), i)
endfor
let pos = getpos('.')
normal F
Assert Equals(pos, getpos('.'))
End
End
Describe Cursor mark on user input
Before
new
let g:clever_f_mark_cursor = 1
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
End
After
close!
End
It 'ensures to remove highlight of cursor properly'
normal fh
Assert Equals(filter(getmatches(), 'v:val.group=="CleverFCursor"'), [])
normal fq
Assert Equals(filter(getmatches(), 'v:val.group=="CleverFCursor"'), [])
End
End
Describe Hiding cursor on command line
Before
new
let g:clever_f_mark_cursor = 1
let g:clever_f_hide_cursor_on_cmdline = 1
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
End
After
close!
End
it should ensure to restore highlight properly
let guicursor = &guicursor
let t_ve = &t_ve
normal fh
Assert Equals(guicursor, &guicursor)
Assert Equals(t_ve, &t_ve)
normal fq
Assert Equals(guicursor, &guicursor)
Assert Equals(t_ve, &t_ve)
End
End
Describe g:clever_f_timeout_ms
Before
new
let g:clever_f_timeout_ms = 100
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
normal! gg0
End
After
close!
let g:clever_f_timeout_ms = 0
End
It should reset the state if timed out
normal fhf
Assert Equals(col('.'), 11)
sleep 150m
normal fo
Assert Equals(col('.'), 14)
normal f
Assert Equals(col('.'), 17)
sleep 150m
normal Fo
Assert Equals(col('.'), 14)
End
End
Describe g:clever_f_mark_char
Before
new
let g:clever_f_mark_char = 1
call clever_f#reset()
call AddLine('poge huga hiyo poyo')
let old_across_no_line = g:clever_f_across_no_line
let g:clever_f_across_no_line = 0
End
After
close!
let g:clever_f_across_no_line = old_across_no_line
End
It should highlight the target characters automatically
normal! gg0
normal fh
Assert NotEquals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
normal f
Assert NotEquals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
End
It should update the highlight if the cursor moves to another line
call AddLine('oh huh')
normal! gg0
let l = line('.')
normal fhff
Assert NotEquals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
Assert NotEquals(stridx(getmatches()[0].pattern, l), -1)
Assert Equals(len(getmatches()), 1)
normal f
Assert NotEquals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
Assert NotEquals(stridx(getmatches()[0].pattern, l+1), -1)
Assert Equals(len(getmatches()), 1)
normal f
Assert NotEquals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
Assert NotEquals(stridx(getmatches()[0].pattern, l+1), -1)
Assert Equals(len(getmatches()), 1)
End
It should remove highlights when moving cursor to another place
call AddLine('oh huh')
call AddLine('oh huh')
normal! gg0
normal fhff
normal! j
" XXX: Hack! While running test, CursorMoved is not fired
" automatically. To test the event, we need to cause it manually.
doautocmd CursorMoved
Assert Equals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
End
It should remove highlights when entering insert mode
call AddLine('oh huh')
call AddLine('oh huh')
normal! gg0
normal fhff
" XXX: Hack! While running test, InsertEnter is not fired
" automatically. To test the event, we need to cause it manually.
doautocmd InsertEnter
Assert Equals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
End
Describe clever_f#reset()
It should remove target highlights
call AddLine('oh huh')
normal! gg0
let l = line('.')
normal fhff
Assert NotEquals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
call clever_f#reset()
Assert Equals(filter(getmatches(), 'v:val.group==#"CleverFChar"'), [])
End
End
End
Describe g:clever_f_repeat_last_char_inputs
Before
new
call clever_f#reset()
call AddLine('hoge huga hiyo hoyo')
normal! gg0
End
After
close!
End
It should repeat previous input again
normal fhl
Assert Equals(col('.'), 7)
execute 'normal' "f\<CR>"
Assert Equals(col('.'), 11)
normal lfyl
Assert Equals(col('.'), 14)
execute 'normal' "f\<CR>"
Assert Equals(col('.'), 18)
normal! $
execute 'normal' "F\<CR>"
Assert Equals(col('.'), 18)
End
It should do nothing when the specified characters are input at first
call clever_f#_reset_all()
let p = getpos('.')
execute 'normal' "f\<CR>"
Assert Equals(getpos('.'), p)
execute 'normal' "F\<CR>"
Assert Equals(getpos('.'), p)
execute 'normal' "t\<CR>"
Assert Equals(getpos('.'), p)
execute 'normal' "T\<CR>"
Assert Equals(getpos('.'), p)
End
End
Describe Backslash
Before
new
call clever_f#reset()
call AddLine('poge\huga\hiyo\poyo')
normal! gg0
End
After
close!
End
It should not cause any search errors (#35)
normal f\
Assert Equals(col('.'), 5)
normal! $
normal F\
Assert Equals(col('.'), 15)
normal! gg0
normal t\
Assert Equals(col('.'), 4)
normal! $
normal T\
Assert Equals(col('.'), 16)
End
End
Describe selection=exclusive
Before
new
call AddLine('poge huga hiyo poyo')
let s:selection = &selection
set selection=exclusive
call clever_f#reset()
normal! gg0
End
After
close!
let &selection = s:selection
End
It should not change `f` behavior when not in visual mode
normal fh
Assert Equals(col('.'), 6)
normal f
Assert Equals(col('.'), 11)
normal! 0
normal th
Assert Equals(col('.'), 5)
normal t
Assert Equals(col('.'), 10)
End
It should change selection of `f` or `t` in visual mode
normal vfh
Assert Equals(col('.'), 7)
normal f
Assert Equals(col('.'), 12)
execute 'normal!' "\<Esc>0"
normal vth
Assert Equals(col('.'), 6)
normal t
Assert Equals(col('.'), 11)
End
It should not change `T` and `F` behavior
normal! $
normal vFh
Assert Equals(col('.'), 11)
normal f
Assert Equals(col('.'), 6)
execute 'normal!' "\<Esc>$"
normal vTh
Assert Equals(col('.'), 12)
normal t
Assert Equals(col('.'), 7)
End
End
Describe clever_f#_mark_direct()
function! GetHighlightedPositions()
let cols = sort(map(getmatches(), 'v:val.pos1[1]'), 'n')
let chars = []
for c in range(1, 19)
if len(cols) > 0 && cols[0] == c
let ch = '_'
call remove(cols, 0)
else
let ch = ' '
endif
call add(chars, ch)
endfor
return join(chars, '')
endfunction
Before
new
call clever_f#reset()
highlight link CleverFDirect CleverFDefaultLabel
call AddLine('ビムかわいいよzビムx')
call AddLine('pOge huga Hiyo pOyo')
let old_across_no_line = g:clever_f_across_no_line
let g:clever_f_across_no_line = 0
End
After
close!
let g:clever_f_mark_direct = 0
let g:clever_f_across_no_line = old_across_no_line
End
It should highlight characters to which the cursor can be moved directly
normal! gg0
" #: cursor position, _: highlighted char
"
" #Oge huga Hiyo pOyo
let s = ' ______ _ ____ _ '
call clever_f#_mark_direct(1, 1)
Assert Equals(GetHighlightedPositions(), s)
End
It should highlight backward characters
normal! gg$
" pOge huga Hiyo pOy#
let s = ' _ ____ __ _____ '
call clever_f#_mark_direct(0, 1)
Assert Equals(GetHighlightedPositions(), s)
End
It should highlight characters to which the cursor can be moved by one hop
normal! gg0
" #Oge huga Hiyo pOyo
let s = ' _ _ ___'
call clever_f#_mark_direct(1, 2)
Assert Equals(GetHighlightedPositions(), s)
End
It should not highlight multibyte characters
normal! 2gg0
" ムかわいいよzビムx
" _ _
call clever_f#_mark_direct(1, 1)
let cols = [22, 29]
Assert Equals(sort(map(getmatches(), 'v:val.pos1[1]'), 'n'), cols)
End
Context with g:clever_f_smart_case
Before
let g:clever_f_smart_case = 1
End
After
let g:clever_f_smart_case = 0
End
It should highlight characters to which the cursor can be moved directly
normal! gg0
" #Oge huga Hiyo pOyo
let s = ' ______ _ ___ _ '
call clever_f#_mark_direct(1, 1)
Assert Equals(GetHighlightedPositions(), s)
End
It should highlight backward characters
normal! gg$
" pOge huga Hiyo pOy#
let s = ' _ ___ __ ____ '
call clever_f#_mark_direct(0, 1)
Assert Equals(GetHighlightedPositions(), s)
End
It should highlight characters to which the cursor can be moved by one hop
normal! gg0
" #Oge huga Hiyo pOyo
let s = ' _ __ _ __ '
call clever_f#_mark_direct(1, 2)
Assert Equals(GetHighlightedPositions(), s)
End
End
Context with g:clever_f_ignore_case
Before
let g:clever_f_ignore_case = 1
End
After
let g:clever_f_ignore_case = 0
End
It should highlight characters to which the cursor can be moved directly
normal! gg0
" #Oge huga Hiyo pOyo
let s = ' ______ _ __ _ '
call clever_f#_mark_direct(1, 1)
Assert Equals(GetHighlightedPositions(), s)
End
It should highlight backward characters
normal! gg$
" pOge huga Hiyo pOy#
let s = ' _ ___ __ ____ '
call clever_f#_mark_direct(0, 1)
Assert Equals(GetHighlightedPositions(), s)
End
It should highlight characters to which the cursor can be moved by one hop
normal! gg0
" #Oge huga Hiyo pOyo
let s = ' _ __ _ _ '
call clever_f#_mark_direct(1, 2)
Assert Equals(GetHighlightedPositions(), s)
End
End
End
Describe g:clever_f_mark_direct
Before
new
let g:clever_f_mark_direct = 1
call clever_f#reset()
highlight link CleverFDirect CleverFDefaultLabel
call AddLine('pOge huga Hiyo poyo')
let old_across_no_line = g:clever_f_across_no_line
let g:clever_f_across_no_line = 0
End
After
close!
let g:clever_f_mark_direct = 0
let g:clever_f_across_no_line = old_across_no_line
End
It should remove target highlights
normal! gg0
normal fh
Assert Equals(len(filter(getmatches(), 'v:val.group ==# "CleverFDirect"')), 0)
End
It should finish with no error
normal! gg$
normal fp
Assert Equals(len(filter(getmatches(), 'v:val.group ==# "CleverFDirect"')), 0)
End
End
" vim:foldmethod=marker