11671f448SBram Moolenaar" Test for character search commands - t, T, f, F, ; and ,
2cd055da3SBram Moolenaar
31e115360SBram Moolenaarfunc Test_charsearch()
4cd055da3SBram Moolenaar  enew!
5cd055da3SBram Moolenaar  call append(0, ['Xabcdefghijkemnopqretuvwxyz',
6cd055da3SBram Moolenaar	      \ 'Yabcdefghijkemnopqretuvwxyz',
7cd055da3SBram Moolenaar	      \ 'Zabcdefghijkemnokqretkvwxyz'])
8cd055da3SBram Moolenaar  " check that "fe" and ";" work
9cd055da3SBram Moolenaar  1
10cd055da3SBram Moolenaar  normal! ylfep;;p,,p
11cd055da3SBram Moolenaar  call assert_equal('XabcdeXfghijkeXmnopqreXtuvwxyz', getline(1))
12cd055da3SBram Moolenaar  " check that save/restore works
13cd055da3SBram Moolenaar  2
14cd055da3SBram Moolenaar  normal! ylfep
15cd055da3SBram Moolenaar  let csave = getcharsearch()
16cd055da3SBram Moolenaar  normal! fip
17cd055da3SBram Moolenaar  call setcharsearch(csave)
18cd055da3SBram Moolenaar  normal! ;p;p
19cd055da3SBram Moolenaar  call assert_equal('YabcdeYfghiYjkeYmnopqreYtuvwxyz', getline(2))
20cd055da3SBram Moolenaar
21cd055da3SBram Moolenaar  " check that setcharsearch() changes the settings.
22cd055da3SBram Moolenaar  3
23cd055da3SBram Moolenaar  normal! ylfep
24196b4664SBram Moolenaar  eval {'char': 'k'}->setcharsearch()
25cd055da3SBram Moolenaar  normal! ;p
26cd055da3SBram Moolenaar  call setcharsearch({'forward': 0})
27cd055da3SBram Moolenaar  normal! $;p
28cd055da3SBram Moolenaar  call setcharsearch({'until': 1})
29cd055da3SBram Moolenaar  set cpo-=;
30cd055da3SBram Moolenaar  normal! ;;p
31cd055da3SBram Moolenaar  call assert_equal('ZabcdeZfghijkZZemnokqretkZvwxyz', getline(3))
320e05de46SBram Moolenaar
33224a5f17SBram Moolenaar  " check that repeating a search before and after a line fails
34224a5f17SBram Moolenaar  normal 3Gfv
35224a5f17SBram Moolenaar  call assert_beeps('normal ;')
36224a5f17SBram Moolenaar  call assert_beeps('normal ,')
37224a5f17SBram Moolenaar
38224a5f17SBram Moolenaar  " clear the character search
39224a5f17SBram Moolenaar  call setcharsearch({'char' : ''})
40224a5f17SBram Moolenaar  call assert_equal('', getcharsearch().char)
41224a5f17SBram Moolenaar
420e05de46SBram Moolenaar  call assert_fails("call setcharsearch([])", 'E715:')
43cd055da3SBram Moolenaar  enew!
441e115360SBram Moolenaarendfunc
45cd055da3SBram Moolenaar
461671f448SBram Moolenaar" Test for character search in virtual edit mode with <Tab>
471671f448SBram Moolenaarfunc Test_csearch_virtualedit()
481671f448SBram Moolenaar  new
491671f448SBram Moolenaar  set virtualedit=all
501671f448SBram Moolenaar  call setline(1, "a\tb")
511671f448SBram Moolenaar  normal! tb
521671f448SBram Moolenaar  call assert_equal([0, 1, 2, 6], getpos('.'))
531671f448SBram Moolenaar  set virtualedit&
54*d7e5e943SBram Moolenaar  bw!
551671f448SBram Moolenaarendfunc
561671f448SBram Moolenaar
57224a5f17SBram Moolenaar" Test for character search failure in latin1 encoding
58224a5f17SBram Moolenaarfunc Test_charsearch_latin1()
59224a5f17SBram Moolenaar  new
60224a5f17SBram Moolenaar  let save_enc = &encoding
61224a5f17SBram Moolenaar  set encoding=latin1
62224a5f17SBram Moolenaar  call setline(1, 'abcdefghijk')
63224a5f17SBram Moolenaar  call assert_beeps('normal fz')
64224a5f17SBram Moolenaar  call assert_beeps('normal tx')
65224a5f17SBram Moolenaar  call assert_beeps('normal $Fz')
66224a5f17SBram Moolenaar  call assert_beeps('normal $Tx')
67224a5f17SBram Moolenaar  let &encoding = save_enc
68*d7e5e943SBram Moolenaar  bw!
69*d7e5e943SBram Moolenaarendfunc
70*d7e5e943SBram Moolenaar
71*d7e5e943SBram Moolenaar" Test for using character search to find a multibyte character with composing
72*d7e5e943SBram Moolenaar" characters.
73*d7e5e943SBram Moolenaarfunc Test_charsearch_composing_char()
74*d7e5e943SBram Moolenaar  new
75*d7e5e943SBram Moolenaar  call setline(1, "one two thq\u0328\u0301r\u0328\u0301ree")
76*d7e5e943SBram Moolenaar  call feedkeys("fr\u0328\u0301", 'xt')
77*d7e5e943SBram Moolenaar  call assert_equal([0, 1, 16, 0, 12], getcurpos())
78*d7e5e943SBram Moolenaar
79*d7e5e943SBram Moolenaar  " use character search with a multi-byte character followed by a
80*d7e5e943SBram Moolenaar  " non-composing character
81*d7e5e943SBram Moolenaar  call setline(1, "abc deȉf ghi")
82*d7e5e943SBram Moolenaar  call feedkeys("ggcf\u0209\u0210", 'xt')
83*d7e5e943SBram Moolenaar  call assert_equal("\u0210f ghi", getline(1))
84*d7e5e943SBram Moolenaar  bw!
85*d7e5e943SBram Moolenaarendfunc
86*d7e5e943SBram Moolenaar
87*d7e5e943SBram Moolenaar" Test for character search with 'hkmap'
88*d7e5e943SBram Moolenaarfunc Test_charsearch_hkmap()
89*d7e5e943SBram Moolenaar  new
90*d7e5e943SBram Moolenaar  set hkmap
91*d7e5e943SBram Moolenaar  call setline(1, "ùðáâ÷ëòéïçìêöî")
92*d7e5e943SBram Moolenaar  call feedkeys("fë", 'xt')
93*d7e5e943SBram Moolenaar  call assert_equal([0, 1, 11, 0, 6], getcurpos())
94*d7e5e943SBram Moolenaar  set hkmap&
95*d7e5e943SBram Moolenaar  bw!
96224a5f17SBram Moolenaarendfunc
97224a5f17SBram Moolenaar
981671f448SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
99