summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_charsearch.vim
blob: 9b7c9a0a09ea16aaf068d7599e1f020b8ca98980 (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
" Test for character search commands - t, T, f, F, ; and ,

func Test_charsearch()
  enew!
  call append(0, ['Xabcdefghijkemnopqretuvwxyz',
	      \ 'Yabcdefghijkemnopqretuvwxyz',
	      \ 'Zabcdefghijkemnokqretkvwxyz'])
  " check that "fe" and ";" work
  1
  normal! ylfep;;p,,p
  call assert_equal('XabcdeXfghijkeXmnopqreXtuvwxyz', getline(1))
  " check that save/restore works
  2
  normal! ylfep
  let csave = getcharsearch()
  normal! fip
  call setcharsearch(csave)
  normal! ;p;p
  call assert_equal('YabcdeYfghiYjkeYmnopqreYtuvwxyz', getline(2))

  " check that setcharsearch() changes the settings.
  3
  normal! ylfep
  eval {'char': 'k'}->setcharsearch()
  normal! ;p
  call setcharsearch({'forward': 0})
  normal! $;p
  call setcharsearch({'until': 1})
  set cpo-=;
  normal! ;;p
  call assert_equal('ZabcdeZfghijkZZemnokqretkZvwxyz', getline(3))

  " check that repeating a search before and after a line fails
  normal 3Gfv
  call assert_beeps('normal ;')
  call assert_beeps('normal ,')

  " clear the character search
  call setcharsearch({'char' : ''})
  call assert_equal('', getcharsearch().char)
  call assert_beeps('normal ;')
  call assert_beeps('normal ,')

  call assert_fails("call setcharsearch([])", 'E1206:')
  enew!
endfunc

" Test for character search in virtual edit mode with <Tab>
func Test_csearch_virtualedit()
  new
  set virtualedit=all
  call setline(1, "a\tb")
  normal! tb
  call assert_equal([0, 1, 2, 6], getpos('.'))
  set virtualedit&
  bw!
endfunc

" Test for character search failure in latin1 encoding
func Test_charsearch_latin1()
  new
  let save_enc = &encoding
  set encoding=latin1
  call setline(1, 'abcdefghijk')
  call assert_beeps('normal fz')
  call assert_beeps('normal tx')
  call assert_beeps('normal $Fz')
  call assert_beeps('normal $Tx')
  let &encoding = save_enc
  bw!
endfunc

" Test for using character search to find a multibyte character with composing
" characters.
func Test_charsearch_composing_char()
  new
  call setline(1, "one two thq\u0328\u0301r\u0328\u0301ree")
  call feedkeys("fr\u0328\u0301", 'xt')
  call assert_equal([0, 1, 16, 0, 12], getcurpos())

  " use character search with a multi-byte character followed by a
  " non-composing character
  call setline(1, "abc deȉf ghi")
  call feedkeys("ggcf\u0209\u0210", 'xt')
  call assert_equal("\u0210f ghi", getline(1))
  bw!
endfunc

" Test for character search with 'hkmap'
func Test_charsearch_hkmap()
  new
  set hkmap
  call setline(1, "ùðáâ÷ëòéïçìêöî")
  call feedkeys("fë", 'xt')
  call assert_equal([0, 1, 11, 0, 6], getcurpos())
  set hkmap&
  bw!
endfunc

" vim: shiftwidth=2 sts=2 expandtab