100b24be4SBram Moolenaar" Test for textobjects
200b24be4SBram Moolenaar
300b24be4SBram Moolenaarif !has('textobjects')
400b24be4SBram Moolenaar  finish
500b24be4SBram Moolenaarendif
600b24be4SBram Moolenaar
7c3c766eaSBram Moolenaarset belloff=all
8c5e2b040SBram Moolenaarfunc CpoM(line, useM, expected)
900b24be4SBram Moolenaar  new
1000b24be4SBram Moolenaar
1100b24be4SBram Moolenaar  if a:useM
1200b24be4SBram Moolenaar    set cpoptions+=M
1300b24be4SBram Moolenaar  else
1400b24be4SBram Moolenaar    set cpoptions-=M
1500b24be4SBram Moolenaar  endif
1600b24be4SBram Moolenaar
1700b24be4SBram Moolenaar  call setline(1, a:line)
1800b24be4SBram Moolenaar
1900b24be4SBram Moolenaar  call setreg('"', '')
2000b24be4SBram Moolenaar  normal! ggfrmavi)y
2100b24be4SBram Moolenaar  call assert_equal(getreg('"'), a:expected[0])
2200b24be4SBram Moolenaar
2300b24be4SBram Moolenaar  call setreg('"', '')
2400b24be4SBram Moolenaar  normal! `afbmavi)y
2500b24be4SBram Moolenaar  call assert_equal(getreg('"'), a:expected[1])
2600b24be4SBram Moolenaar
2700b24be4SBram Moolenaar  call setreg('"', '')
2800b24be4SBram Moolenaar  normal! `afgmavi)y
2900b24be4SBram Moolenaar  call assert_equal(getreg('"'), a:expected[2])
3000b24be4SBram Moolenaar
3100b24be4SBram Moolenaar  q!
32c5e2b040SBram Moolenaarendfunc
3300b24be4SBram Moolenaar
34c5e2b040SBram Moolenaarfunc Test_inner_block_without_cpo_M()
3500b24be4SBram Moolenaar  call CpoM('(red \(blue) green)', 0, ['red \(blue', 'red \(blue', ''])
36c5e2b040SBram Moolenaarendfunc
3700b24be4SBram Moolenaar
38c5e2b040SBram Moolenaarfunc Test_inner_block_with_cpo_M_left_backslash()
3900b24be4SBram Moolenaar  call CpoM('(red \(blue) green)', 1, ['red \(blue) green', 'blue', 'red \(blue) green'])
40c5e2b040SBram Moolenaarendfunc
4100b24be4SBram Moolenaar
42c5e2b040SBram Moolenaarfunc Test_inner_block_with_cpo_M_right_backslash()
4300b24be4SBram Moolenaar  call CpoM('(red (blue\) green)', 1, ['red (blue\) green', 'blue\', 'red (blue\) green'])
44c5e2b040SBram Moolenaarendfunc
45c5e2b040SBram Moolenaar
46c5e2b040SBram Moolenaarfunc Test_quote_selection_selection_exclusive()
47c5e2b040SBram Moolenaar  new
48c5e2b040SBram Moolenaar  call setline(1, "a 'bcde' f")
49c5e2b040SBram Moolenaar  set selection=exclusive
50c5e2b040SBram Moolenaar  exe "norm! fdvhi'y"
51c5e2b040SBram Moolenaar  call assert_equal('bcde', @")
52c5e2b040SBram Moolenaar  set selection&vim
53c5e2b040SBram Moolenaar  bw!
54c5e2b040SBram Moolenaarendfunc
55*db510071SBram Moolenaar
56*db510071SBram Moolenaar" Tests for string and html text objects
57*db510071SBram Moolenaarfunc Test_string_html_objects()
58*db510071SBram Moolenaar  enew!
59*db510071SBram Moolenaar
60*db510071SBram Moolenaar  let t = '"wo\"rd\\" foo'
61*db510071SBram Moolenaar  put =t
62*db510071SBram Moolenaar  normal! da"
63*db510071SBram Moolenaar  call assert_equal('foo', getline('.'))
64*db510071SBram Moolenaar
65*db510071SBram Moolenaar  let t = "'foo' 'bar' 'piep'"
66*db510071SBram Moolenaar  put =t
67*db510071SBram Moolenaar  normal! 0va'a'rx
68*db510071SBram Moolenaar  call assert_equal("xxxxxxxxxxxx'piep'", getline('.'))
69*db510071SBram Moolenaar
70*db510071SBram Moolenaar  let t = "bla bla `quote` blah"
71*db510071SBram Moolenaar  put =t
72*db510071SBram Moolenaar  normal! 02f`da`
73*db510071SBram Moolenaar  call assert_equal("bla bla blah", getline('.'))
74*db510071SBram Moolenaar
75*db510071SBram Moolenaar  let t = 'out " in "noXno"'
76*db510071SBram Moolenaar  put =t
77*db510071SBram Moolenaar  normal! 0fXdi"
78*db510071SBram Moolenaar  call assert_equal('out " in ""', getline('.'))
79*db510071SBram Moolenaar
80*db510071SBram Moolenaar  let t = "\"'\" 'blah' rep 'buh'"
81*db510071SBram Moolenaar  put =t
82*db510071SBram Moolenaar  normal! 03f'vi'ry
83*db510071SBram Moolenaar  call assert_equal("\"'\" 'blah'yyyyy'buh'", getline('.'))
84*db510071SBram Moolenaar
85*db510071SBram Moolenaar  set quoteescape=+*-
86*db510071SBram Moolenaar  let t = "bla `s*`d-`+++`l**` b`la"
87*db510071SBram Moolenaar  put =t
88*db510071SBram Moolenaar  normal! di`
89*db510071SBram Moolenaar  call assert_equal("bla `` b`la", getline('.'))
90*db510071SBram Moolenaar
91*db510071SBram Moolenaar  let t = 'voo "nah" sdf " asdf" sdf " sdf" sd'
92*db510071SBram Moolenaar  put =t
93*db510071SBram Moolenaar  normal! $F"va"oha"i"rz
94*db510071SBram Moolenaar  call assert_equal('voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd', getline('.'))
95*db510071SBram Moolenaar
96*db510071SBram Moolenaar  let t = "-<b>asdf<i>Xasdf</i>asdf</b>-"
97*db510071SBram Moolenaar  put =t
98*db510071SBram Moolenaar  normal! fXdit
99*db510071SBram Moolenaar  call assert_equal('-<b>asdf<i></i>asdf</b>-', getline('.'))
100*db510071SBram Moolenaar
101*db510071SBram Moolenaar  let t = "-<b>asdX<i>a<i />sdf</i>asdf</b>-"
102*db510071SBram Moolenaar  put =t
103*db510071SBram Moolenaar  normal! 0fXdit
104*db510071SBram Moolenaar  call assert_equal('-<b></b>-', getline('.'))
105*db510071SBram Moolenaar
106*db510071SBram Moolenaar  let t = "-<b>asdf<i>Xasdf</i>asdf</b>-"
107*db510071SBram Moolenaar  put =t
108*db510071SBram Moolenaar  normal! fXdat
109*db510071SBram Moolenaar  call assert_equal('-<b>asdfasdf</b>-', getline('.'))
110*db510071SBram Moolenaar
111*db510071SBram Moolenaar  let t = "-<b>asdX<i>as<b />df</i>asdf</b>-"
112*db510071SBram Moolenaar  put =t
113*db510071SBram Moolenaar  normal! 0fXdat
114*db510071SBram Moolenaar  call assert_equal('--', getline('.'))
115*db510071SBram Moolenaar
116*db510071SBram Moolenaar  let t = "-<b>\ninnertext object\n</b>"
117*db510071SBram Moolenaar  put =t
118*db510071SBram Moolenaar  normal! dit
119*db510071SBram Moolenaar  call assert_equal('-<b></b>', getline('.'))
120*db510071SBram Moolenaar
121*db510071SBram Moolenaar  set quoteescape&
122*db510071SBram Moolenaar  enew!
123*db510071SBram Moolenaarendfunc
124*db510071SBram Moolenaar
125*db510071SBram Moolenaar" Tests for match() and matchstr()
126*db510071SBram Moolenaarfunc Test_match()
127*db510071SBram Moolenaar  call assert_equal("b", matchstr("abcd", ".", 0, 2))
128*db510071SBram Moolenaar  call assert_equal("bc", matchstr("abcd", "..", 0, 2))
129*db510071SBram Moolenaar  call assert_equal("c", matchstr("abcd", ".", 2, 0))
130*db510071SBram Moolenaar  call assert_equal("a", matchstr("abcd", ".", 0, -1))
131*db510071SBram Moolenaar  call assert_equal(-1, match("abcd", ".", 0, 5))
132*db510071SBram Moolenaar  call assert_equal(0 , match("abcd", ".", 0, -1))
133*db510071SBram Moolenaar  call assert_equal(0 , match('abc', '.', 0, 1))
134*db510071SBram Moolenaar  call assert_equal(1 , match('abc', '.', 0, 2))
135*db510071SBram Moolenaar  call assert_equal(2 , match('abc', '.', 0, 3))
136*db510071SBram Moolenaar  call assert_equal(-1, match('abc', '.', 0, 4))
137*db510071SBram Moolenaar  call assert_equal(1 , match('abc', '.', 1, 1))
138*db510071SBram Moolenaar  call assert_equal(2 , match('abc', '.', 2, 1))
139*db510071SBram Moolenaar  call assert_equal(-1, match('abc', '.', 3, 1))
140*db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 0, 1))
141*db510071SBram Moolenaar  call assert_equal(-1, match('abc', '$', 0, 2))
142*db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 1, 1))
143*db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 2, 1))
144*db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 3, 1))
145*db510071SBram Moolenaar  call assert_equal(-1, match('abc', '$', 4, 1))
146*db510071SBram Moolenaar  call assert_equal(0 , match('abc', '\zs', 0, 1))
147*db510071SBram Moolenaar  call assert_equal(1 , match('abc', '\zs', 0, 2))
148*db510071SBram Moolenaar  call assert_equal(2 , match('abc', '\zs', 0, 3))
149*db510071SBram Moolenaar  call assert_equal(3 , match('abc', '\zs', 0, 4))
150*db510071SBram Moolenaar  call assert_equal(-1, match('abc', '\zs', 0, 5))
151*db510071SBram Moolenaar  call assert_equal(1 , match('abc', '\zs', 1, 1))
152*db510071SBram Moolenaar  call assert_equal(2 , match('abc', '\zs', 2, 1))
153*db510071SBram Moolenaar  call assert_equal(3 , match('abc', '\zs', 3, 1))
154*db510071SBram Moolenaar  call assert_equal(-1, match('abc', '\zs', 4, 1))
155*db510071SBram Moolenaarendfunc
156