blob: 9b7c9a0a09ea16aaf068d7599e1f020b8ca98980 [file] [log] [blame]
Bram Moolenaar1671f442020-03-10 07:48:13 +01001" Test for character search commands - t, T, f, F, ; and ,
Bram Moolenaarcd055da2016-09-02 19:50:48 +02002
Bram Moolenaar1e115362019-01-09 23:01:02 +01003func Test_charsearch()
Bram Moolenaarcd055da2016-09-02 19:50:48 +02004 enew!
5 call append(0, ['Xabcdefghijkemnopqretuvwxyz',
Bram Moolenaar53f16732016-09-07 20:46:39 +02006 \ 'Yabcdefghijkemnopqretuvwxyz',
7 \ 'Zabcdefghijkemnokqretkvwxyz'])
Bram Moolenaarcd055da2016-09-02 19:50:48 +02008 " check that "fe" and ";" work
9 1
10 normal! ylfep;;p,,p
11 call assert_equal('XabcdeXfghijkeXmnopqreXtuvwxyz', getline(1))
12 " check that save/restore works
13 2
14 normal! ylfep
15 let csave = getcharsearch()
16 normal! fip
17 call setcharsearch(csave)
18 normal! ;p;p
19 call assert_equal('YabcdeYfghiYjkeYmnopqreYtuvwxyz', getline(2))
20
21 " check that setcharsearch() changes the settings.
22 3
23 normal! ylfep
Bram Moolenaar196b4662019-09-06 21:34:30 +020024 eval {'char': 'k'}->setcharsearch()
Bram Moolenaarcd055da2016-09-02 19:50:48 +020025 normal! ;p
26 call setcharsearch({'forward': 0})
27 normal! $;p
28 call setcharsearch({'until': 1})
29 set cpo-=;
30 normal! ;;p
31 call assert_equal('ZabcdeZfghijkZZemnokqretkZvwxyz', getline(3))
Bram Moolenaar0e05de42020-03-25 22:23:46 +010032
Bram Moolenaar224a5f12020-04-28 20:29:07 +020033 " check that repeating a search before and after a line fails
34 normal 3Gfv
35 call assert_beeps('normal ;')
36 call assert_beeps('normal ,')
37
38 " clear the character search
39 call setcharsearch({'char' : ''})
40 call assert_equal('', getcharsearch().char)
zeertzjqe5d91ba2023-05-14 17:39:18 +010041 call assert_beeps('normal ;')
42 call assert_beeps('normal ,')
Bram Moolenaar224a5f12020-04-28 20:29:07 +020043
Yegappan Lakshmanan04c4c572022-08-30 19:48:24 +010044 call assert_fails("call setcharsearch([])", 'E1206:')
Bram Moolenaarcd055da2016-09-02 19:50:48 +020045 enew!
Bram Moolenaar1e115362019-01-09 23:01:02 +010046endfunc
Bram Moolenaarcd055da2016-09-02 19:50:48 +020047
Bram Moolenaar1671f442020-03-10 07:48:13 +010048" Test for character search in virtual edit mode with <Tab>
49func Test_csearch_virtualedit()
50 new
51 set virtualedit=all
52 call setline(1, "a\tb")
53 normal! tb
54 call assert_equal([0, 1, 2, 6], getpos('.'))
55 set virtualedit&
Bram Moolenaard7e5e942020-10-07 16:54:52 +020056 bw!
Bram Moolenaar1671f442020-03-10 07:48:13 +010057endfunc
58
Bram Moolenaar224a5f12020-04-28 20:29:07 +020059" Test for character search failure in latin1 encoding
60func Test_charsearch_latin1()
61 new
62 let save_enc = &encoding
63 set encoding=latin1
64 call setline(1, 'abcdefghijk')
65 call assert_beeps('normal fz')
66 call assert_beeps('normal tx')
67 call assert_beeps('normal $Fz')
68 call assert_beeps('normal $Tx')
69 let &encoding = save_enc
Bram Moolenaard7e5e942020-10-07 16:54:52 +020070 bw!
71endfunc
72
73" Test for using character search to find a multibyte character with composing
74" characters.
75func Test_charsearch_composing_char()
76 new
77 call setline(1, "one two thq\u0328\u0301r\u0328\u0301ree")
78 call feedkeys("fr\u0328\u0301", 'xt')
79 call assert_equal([0, 1, 16, 0, 12], getcurpos())
80
81 " use character search with a multi-byte character followed by a
82 " non-composing character
83 call setline(1, "abc deȉf ghi")
84 call feedkeys("ggcf\u0209\u0210", 'xt')
85 call assert_equal("\u0210f ghi", getline(1))
86 bw!
87endfunc
88
89" Test for character search with 'hkmap'
90func Test_charsearch_hkmap()
91 new
92 set hkmap
93 call setline(1, "ùðáâ÷ëòéïçìêöî")
94 call feedkeys("fë", 'xt')
95 call assert_equal([0, 1, 11, 0, 6], getcurpos())
96 set hkmap&
97 bw!
Bram Moolenaar224a5f12020-04-28 20:29:07 +020098endfunc
99
Bram Moolenaar1671f442020-03-10 07:48:13 +0100100" vim: shiftwidth=2 sts=2 expandtab