xref: /vim-8.2.3635/src/testdir/test_tagfunc.vim (revision f90c855c)
145e18cbdSBram Moolenaar" Test 'tagfunc'
245e18cbdSBram Moolenaar
345e18cbdSBram Moolenaarfunc TagFunc(pat, flag, info)
445e18cbdSBram Moolenaar  let g:tagfunc_args = [a:pat, a:flag, a:info]
545e18cbdSBram Moolenaar  let tags = []
645e18cbdSBram Moolenaar  for num in range(1,10)
745e18cbdSBram Moolenaar    let tags += [{
845e18cbdSBram Moolenaar          \ 'cmd': '2', 'name': 'nothing'.num, 'kind': 'm',
945e18cbdSBram Moolenaar          \ 'filename': 'Xfile1', 'user_data': 'somedata'.num,
1045e18cbdSBram Moolenaar          \}]
1145e18cbdSBram Moolenaar  endfor
1245e18cbdSBram Moolenaar  return tags
1345e18cbdSBram Moolenaarendfunc
1445e18cbdSBram Moolenaar
1545e18cbdSBram Moolenaarfunc Test_tagfunc()
1645e18cbdSBram Moolenaar  set tagfunc=TagFunc
1745e18cbdSBram Moolenaar  new Xfile1
1845e18cbdSBram Moolenaar  call setline(1, ['empty', 'one()', 'empty'])
1945e18cbdSBram Moolenaar  write
2045e18cbdSBram Moolenaar
2145e18cbdSBram Moolenaar  call assert_equal({'cmd': '2', 'static': 0,
2245e18cbdSBram Moolenaar        \ 'name': 'nothing2', 'user_data': 'somedata2',
2345e18cbdSBram Moolenaar        \ 'kind': 'm', 'filename': 'Xfile1'}, taglist('.')[1])
2445e18cbdSBram Moolenaar
2545e18cbdSBram Moolenaar  call settagstack(win_getid(), {'items': []})
2645e18cbdSBram Moolenaar
2745e18cbdSBram Moolenaar  tag arbitrary
2845e18cbdSBram Moolenaar  call assert_equal('arbitrary', g:tagfunc_args[0])
2945e18cbdSBram Moolenaar  call assert_equal('', g:tagfunc_args[1])
3045e18cbdSBram Moolenaar  call assert_equal('somedata1', gettagstack().items[0].user_data)
3145e18cbdSBram Moolenaar  5tag arbitrary
3245e18cbdSBram Moolenaar  call assert_equal('arbitrary', g:tagfunc_args[0])
3345e18cbdSBram Moolenaar  call assert_equal('', g:tagfunc_args[1])
3445e18cbdSBram Moolenaar  call assert_equal('somedata5', gettagstack().items[1].user_data)
3545e18cbdSBram Moolenaar  pop
3645e18cbdSBram Moolenaar  tag
3745e18cbdSBram Moolenaar  call assert_equal('arbitrary', g:tagfunc_args[0])
3845e18cbdSBram Moolenaar  call assert_equal('', g:tagfunc_args[1])
3945e18cbdSBram Moolenaar  call assert_equal('somedata5', gettagstack().items[1].user_data)
4045e18cbdSBram Moolenaar
4145e18cbdSBram Moolenaar  let g:tagfunc_args=[]
4245e18cbdSBram Moolenaar  execute "normal! \<c-]>"
4345e18cbdSBram Moolenaar  call assert_equal('one', g:tagfunc_args[0])
4445e18cbdSBram Moolenaar  call assert_equal('c', g:tagfunc_args[1])
4545e18cbdSBram Moolenaar
46*f90c855cSBram Moolenaar  let g:tagfunc_args=[]
47*f90c855cSBram Moolenaar  execute "tag /foo$"
48*f90c855cSBram Moolenaar  call assert_equal('foo$', g:tagfunc_args[0])
49*f90c855cSBram Moolenaar  call assert_equal('r', g:tagfunc_args[1])
50*f90c855cSBram Moolenaar
5145e18cbdSBram Moolenaar  set cpt=t
5245e18cbdSBram Moolenaar  let g:tagfunc_args=[]
5345e18cbdSBram Moolenaar  execute "normal! i\<c-n>\<c-y>"
54*f90c855cSBram Moolenaar  call assert_equal('\<\k\k', g:tagfunc_args[0])
55*f90c855cSBram Moolenaar  call assert_equal('cir', g:tagfunc_args[1])
5645e18cbdSBram Moolenaar  call assert_equal('nothing1', getline('.')[0:7])
5745e18cbdSBram Moolenaar
58*f90c855cSBram Moolenaar  let g:tagfunc_args=[]
59*f90c855cSBram Moolenaar  execute "normal! ono\<c-n>\<c-n>\<c-y>"
60*f90c855cSBram Moolenaar  call assert_equal('\<no', g:tagfunc_args[0])
61*f90c855cSBram Moolenaar  call assert_equal('cir', g:tagfunc_args[1])
62*f90c855cSBram Moolenaar  call assert_equal('nothing2', getline('.')[0:7])
63*f90c855cSBram Moolenaar
6445e18cbdSBram Moolenaar  func BadTagFunc1(...)
6545e18cbdSBram Moolenaar    return 0
6645e18cbdSBram Moolenaar  endfunc
6745e18cbdSBram Moolenaar  func BadTagFunc2(...)
6845e18cbdSBram Moolenaar    return [1]
6945e18cbdSBram Moolenaar  endfunc
7045e18cbdSBram Moolenaar  func BadTagFunc3(...)
7145e18cbdSBram Moolenaar    return [{'name': 'foo'}]
7245e18cbdSBram Moolenaar  endfunc
7345e18cbdSBram Moolenaar
7445e18cbdSBram Moolenaar  for &tagfunc in ['BadTagFunc1', 'BadTagFunc2', 'BadTagFunc3']
7545e18cbdSBram Moolenaar    try
7645e18cbdSBram Moolenaar      tag nothing
7745e18cbdSBram Moolenaar      call assert_false(1, 'tag command should have failed')
7845e18cbdSBram Moolenaar    catch
7945e18cbdSBram Moolenaar      call assert_exception('E987:')
8045e18cbdSBram Moolenaar    endtry
8145e18cbdSBram Moolenaar    exe 'delf' &tagfunc
8245e18cbdSBram Moolenaar  endfor
8345e18cbdSBram Moolenaar
8445e18cbdSBram Moolenaar  func NullTagFunc(...)
8545e18cbdSBram Moolenaar    return v:null
8645e18cbdSBram Moolenaar  endfunc
8745e18cbdSBram Moolenaar  set tags= tfu=NullTagFunc
88e2e4075fSBram Moolenaar  call assert_fails('tag nothing', 'E433:')
8945e18cbdSBram Moolenaar  delf NullTagFunc
9045e18cbdSBram Moolenaar
9145e18cbdSBram Moolenaar  bwipe!
9245e18cbdSBram Moolenaar  set tags& tfu& cpt&
9345e18cbdSBram Moolenaar  call delete('Xfile1')
9445e18cbdSBram Moolenaarendfunc
9545e18cbdSBram Moolenaar
96830c1afcSBram Moolenaar" Test for modifying the tag stack from a tag function and jumping to a tag
97830c1afcSBram Moolenaar" from a tag function
98830c1afcSBram Moolenaarfunc Test_tagfunc_settagstack()
99830c1afcSBram Moolenaar  func Mytagfunc1(pat, flags, info)
100830c1afcSBram Moolenaar    call settagstack(1, {'tagname' : 'mytag', 'from' : [0, 10, 1, 0]})
101830c1afcSBram Moolenaar    return [{'name' : 'mytag', 'filename' : 'Xtest', 'cmd' : '1'}]
102830c1afcSBram Moolenaar  endfunc
103830c1afcSBram Moolenaar  set tagfunc=Mytagfunc1
104830c1afcSBram Moolenaar  call writefile([''], 'Xtest')
105830c1afcSBram Moolenaar  call assert_fails('tag xyz', 'E986:')
106830c1afcSBram Moolenaar
107830c1afcSBram Moolenaar  func Mytagfunc2(pat, flags, info)
108830c1afcSBram Moolenaar    tag test_tag
109830c1afcSBram Moolenaar    return [{'name' : 'mytag', 'filename' : 'Xtest', 'cmd' : '1'}]
110830c1afcSBram Moolenaar  endfunc
111830c1afcSBram Moolenaar  set tagfunc=Mytagfunc2
112830c1afcSBram Moolenaar  call assert_fails('tag xyz', 'E986:')
113830c1afcSBram Moolenaar
114830c1afcSBram Moolenaar  call delete('Xtest')
115830c1afcSBram Moolenaar  set tagfunc&
116830c1afcSBram Moolenaar  delfunc Mytagfunc1
117830c1afcSBram Moolenaar  delfunc Mytagfunc2
118830c1afcSBram Moolenaarendfunc
119830c1afcSBram Moolenaar
12045e18cbdSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
121