blob: 8b92ba15d9b37d459deae65506bb5cfab0fb140f [file] [log] [blame]
Bram Moolenaar00b24be2016-07-23 22:04:47 +02001" Test for textobjects
2
3if !has('textobjects')
4 finish
5endif
6
Bram Moolenaarc3c766e2017-03-08 22:55:19 +01007set belloff=all
Bram Moolenaarc5e2b042017-06-05 16:37:07 +02008func CpoM(line, useM, expected)
Bram Moolenaar00b24be2016-07-23 22:04:47 +02009 new
10
11 if a:useM
12 set cpoptions+=M
13 else
14 set cpoptions-=M
15 endif
16
17 call setline(1, a:line)
18
19 call setreg('"', '')
20 normal! ggfrmavi)y
21 call assert_equal(getreg('"'), a:expected[0])
22
23 call setreg('"', '')
24 normal! `afbmavi)y
25 call assert_equal(getreg('"'), a:expected[1])
26
27 call setreg('"', '')
28 normal! `afgmavi)y
29 call assert_equal(getreg('"'), a:expected[2])
30
31 q!
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020032endfunc
Bram Moolenaar00b24be2016-07-23 22:04:47 +020033
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020034func Test_inner_block_without_cpo_M()
Bram Moolenaar00b24be2016-07-23 22:04:47 +020035 call CpoM('(red \(blue) green)', 0, ['red \(blue', 'red \(blue', ''])
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020036endfunc
Bram Moolenaar00b24be2016-07-23 22:04:47 +020037
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020038func Test_inner_block_with_cpo_M_left_backslash()
Bram Moolenaar00b24be2016-07-23 22:04:47 +020039 call CpoM('(red \(blue) green)', 1, ['red \(blue) green', 'blue', 'red \(blue) green'])
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020040endfunc
Bram Moolenaar00b24be2016-07-23 22:04:47 +020041
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020042func Test_inner_block_with_cpo_M_right_backslash()
Bram Moolenaar00b24be2016-07-23 22:04:47 +020043 call CpoM('(red (blue\) green)', 1, ['red (blue\) green', 'blue\', 'red (blue\) green'])
Bram Moolenaarc5e2b042017-06-05 16:37:07 +020044endfunc
45
46func Test_quote_selection_selection_exclusive()
47 new
48 call setline(1, "a 'bcde' f")
49 set selection=exclusive
50 exe "norm! fdvhi'y"
51 call assert_equal('bcde', @")
52 set selection&vim
53 bw!
54endfunc
Bram Moolenaardb510072017-09-28 21:52:17 +020055
56" Tests for string and html text objects
57func Test_string_html_objects()
58 enew!
59
60 let t = '"wo\"rd\\" foo'
61 put =t
62 normal! da"
63 call assert_equal('foo', getline('.'))
64
65 let t = "'foo' 'bar' 'piep'"
66 put =t
67 normal! 0va'a'rx
68 call assert_equal("xxxxxxxxxxxx'piep'", getline('.'))
69
70 let t = "bla bla `quote` blah"
71 put =t
72 normal! 02f`da`
73 call assert_equal("bla bla blah", getline('.'))
74
75 let t = 'out " in "noXno"'
76 put =t
77 normal! 0fXdi"
78 call assert_equal('out " in ""', getline('.'))
79
80 let t = "\"'\" 'blah' rep 'buh'"
81 put =t
82 normal! 03f'vi'ry
83 call assert_equal("\"'\" 'blah'yyyyy'buh'", getline('.'))
84
85 set quoteescape=+*-
86 let t = "bla `s*`d-`+++`l**` b`la"
87 put =t
88 normal! di`
89 call assert_equal("bla `` b`la", getline('.'))
90
91 let t = 'voo "nah" sdf " asdf" sdf " sdf" sd'
92 put =t
93 normal! $F"va"oha"i"rz
94 call assert_equal('voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd', getline('.'))
95
96 let t = "-<b>asdf<i>Xasdf</i>asdf</b>-"
97 put =t
98 normal! fXdit
99 call assert_equal('-<b>asdf<i></i>asdf</b>-', getline('.'))
100
101 let t = "-<b>asdX<i>a<i />sdf</i>asdf</b>-"
102 put =t
103 normal! 0fXdit
104 call assert_equal('-<b></b>-', getline('.'))
105
106 let t = "-<b>asdf<i>Xasdf</i>asdf</b>-"
107 put =t
108 normal! fXdat
109 call assert_equal('-<b>asdfasdf</b>-', getline('.'))
110
111 let t = "-<b>asdX<i>as<b />df</i>asdf</b>-"
112 put =t
113 normal! 0fXdat
114 call assert_equal('--', getline('.'))
115
116 let t = "-<b>\ninnertext object\n</b>"
117 put =t
118 normal! dit
119 call assert_equal('-<b></b>', getline('.'))
120
121 set quoteescape&
122 enew!
123endfunc
124
125" Tests for match() and matchstr()
126func Test_match()
127 call assert_equal("b", matchstr("abcd", ".", 0, 2))
128 call assert_equal("bc", matchstr("abcd", "..", 0, 2))
129 call assert_equal("c", matchstr("abcd", ".", 2, 0))
130 call assert_equal("a", matchstr("abcd", ".", 0, -1))
131 call assert_equal(-1, match("abcd", ".", 0, 5))
132 call assert_equal(0 , match("abcd", ".", 0, -1))
133 call assert_equal(0 , match('abc', '.', 0, 1))
134 call assert_equal(1 , match('abc', '.', 0, 2))
135 call assert_equal(2 , match('abc', '.', 0, 3))
136 call assert_equal(-1, match('abc', '.', 0, 4))
137 call assert_equal(1 , match('abc', '.', 1, 1))
138 call assert_equal(2 , match('abc', '.', 2, 1))
139 call assert_equal(-1, match('abc', '.', 3, 1))
140 call assert_equal(3 , match('abc', '$', 0, 1))
141 call assert_equal(-1, match('abc', '$', 0, 2))
142 call assert_equal(3 , match('abc', '$', 1, 1))
143 call assert_equal(3 , match('abc', '$', 2, 1))
144 call assert_equal(3 , match('abc', '$', 3, 1))
145 call assert_equal(-1, match('abc', '$', 4, 1))
146 call assert_equal(0 , match('abc', '\zs', 0, 1))
147 call assert_equal(1 , match('abc', '\zs', 0, 2))
148 call assert_equal(2 , match('abc', '\zs', 0, 3))
149 call assert_equal(3 , match('abc', '\zs', 0, 4))
150 call assert_equal(-1, match('abc', '\zs', 0, 5))
151 call assert_equal(1 , match('abc', '\zs', 1, 1))
152 call assert_equal(2 , match('abc', '\zs', 2, 1))
153 call assert_equal(3 , match('abc', '\zs', 3, 1))
154 call assert_equal(-1, match('abc', '\zs', 4, 1))
155endfunc