18d8aa0a3SBram Moolenaar" Tests for tagjump (tags and special searches) 28d8aa0a3SBram Moolenaar 3e8070987SBram Moolenaarsource check.vim 4e8070987SBram Moolenaarsource screendump.vim 5e8070987SBram Moolenaar 68d8aa0a3SBram Moolenaar" SEGV occurs in older versions. (At least 7.4.1748 or older) 78d8aa0a3SBram Moolenaarfunc Test_ptag_with_notagstack() 85a4c3082SBram Moolenaar CheckFeature quickfix 95a4c3082SBram Moolenaar 108d8aa0a3SBram Moolenaar set notagstack 11e2e4075fSBram Moolenaar call assert_fails('ptag does_not_exist_tag_name', 'E433:') 128d8aa0a3SBram Moolenaar set tagstack&vim 138d8aa0a3SBram Moolenaarendfunc 14fd89d7eaSBram Moolenaar 155d3c9f8cSBram Moolenaarfunc Test_ptjump() 165d3c9f8cSBram Moolenaar CheckFeature quickfix 175d3c9f8cSBram Moolenaar 185d3c9f8cSBram Moolenaar set tags=Xtags 195d3c9f8cSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 205d3c9f8cSBram Moolenaar \ "one\tXfile\t1", 215d3c9f8cSBram Moolenaar \ "three\tXfile\t3", 225d3c9f8cSBram Moolenaar \ "two\tXfile\t2"], 235d3c9f8cSBram Moolenaar \ 'Xtags') 245d3c9f8cSBram Moolenaar call writefile(['one', 'two', 'three'], 'Xfile') 255d3c9f8cSBram Moolenaar 265d3c9f8cSBram Moolenaar %bw! 275d3c9f8cSBram Moolenaar ptjump two 285d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 295d3c9f8cSBram Moolenaar wincmd p 305d3c9f8cSBram Moolenaar call assert_equal(1, &previewwindow) 315d3c9f8cSBram Moolenaar call assert_equal('Xfile', expand("%:p:t")) 325d3c9f8cSBram Moolenaar call assert_equal(2, line('.')) 335d3c9f8cSBram Moolenaar call assert_equal(2, winnr('$')) 345d3c9f8cSBram Moolenaar call assert_equal(1, winnr()) 355d3c9f8cSBram Moolenaar close 365d3c9f8cSBram Moolenaar call setline(1, ['one', 'two', 'three']) 375d3c9f8cSBram Moolenaar exe "normal 3G\<C-W>g}" 385d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 395d3c9f8cSBram Moolenaar wincmd p 405d3c9f8cSBram Moolenaar call assert_equal(1, &previewwindow) 415d3c9f8cSBram Moolenaar call assert_equal('Xfile', expand("%:p:t")) 425d3c9f8cSBram Moolenaar call assert_equal(3, line('.')) 435d3c9f8cSBram Moolenaar call assert_equal(2, winnr('$')) 445d3c9f8cSBram Moolenaar call assert_equal(1, winnr()) 455d3c9f8cSBram Moolenaar close 465d3c9f8cSBram Moolenaar exe "normal 3G5\<C-W>\<C-G>}" 475d3c9f8cSBram Moolenaar wincmd p 485d3c9f8cSBram Moolenaar call assert_equal(5, winheight(0)) 495d3c9f8cSBram Moolenaar close 505d3c9f8cSBram Moolenaar 515d3c9f8cSBram Moolenaar call delete('Xtags') 525d3c9f8cSBram Moolenaar call delete('Xfile') 535d3c9f8cSBram Moolenaar set tags& 545d3c9f8cSBram Moolenaarendfunc 555d3c9f8cSBram Moolenaar 56358308ddSBram Moolenaarfunc Test_cancel_ptjump() 575a4c3082SBram Moolenaar CheckFeature quickfix 585a4c3082SBram Moolenaar 59358308ddSBram Moolenaar set tags=Xtags 60358308ddSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 61358308ddSBram Moolenaar \ "word\tfile1\tcmd1", 62358308ddSBram Moolenaar \ "word\tfile2\tcmd2"], 63358308ddSBram Moolenaar \ 'Xtags') 64358308ddSBram Moolenaar 65358308ddSBram Moolenaar only! 66358308ddSBram Moolenaar call feedkeys(":ptjump word\<CR>\<CR>", "xt") 67358308ddSBram Moolenaar help 68358308ddSBram Moolenaar call assert_equal(2, winnr('$')) 69358308ddSBram Moolenaar 70358308ddSBram Moolenaar call delete('Xtags') 710331faf7SBram Moolenaar set tags& 72358308ddSBram Moolenaar quit 73358308ddSBram Moolenaarendfunc 74358308ddSBram Moolenaar 75a9d23c20SBram Moolenaarfunc Test_static_tagjump() 76a9d23c20SBram Moolenaar set tags=Xtags 77a9d23c20SBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 78a9d23c20SBram Moolenaar \ "one\tXfile1\t/^one/;\"\tf\tfile:\tsignature:(void)", 79a9d23c20SBram Moolenaar \ "word\tXfile2\tcmd2"], 80a9d23c20SBram Moolenaar \ 'Xtags') 81a9d23c20SBram Moolenaar new Xfile1 82a9d23c20SBram Moolenaar call setline(1, ['empty', 'one()', 'empty']) 83a9d23c20SBram Moolenaar write 84a9d23c20SBram Moolenaar tag one 85a9d23c20SBram Moolenaar call assert_equal(2, line('.')) 86a9d23c20SBram Moolenaar 8798e83b29SBram Moolenaar bwipe! 88a9d23c20SBram Moolenaar set tags& 89a9d23c20SBram Moolenaar call delete('Xtags') 90a9d23c20SBram Moolenaar call delete('Xfile1') 9198e83b29SBram Moolenaarendfunc 9298e83b29SBram Moolenaar 9398e83b29SBram Moolenaarfunc Test_duplicate_tagjump() 9498e83b29SBram Moolenaar set tags=Xtags 9598e83b29SBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 9698e83b29SBram Moolenaar \ "thesame\tXfile1\t1;\"\td\tfile:", 9798e83b29SBram Moolenaar \ "thesame\tXfile1\t2;\"\td\tfile:", 9898e83b29SBram Moolenaar \ "thesame\tXfile1\t3;\"\td\tfile:", 9998e83b29SBram Moolenaar \ ], 10098e83b29SBram Moolenaar \ 'Xtags') 10198e83b29SBram Moolenaar new Xfile1 10298e83b29SBram Moolenaar call setline(1, ['thesame one', 'thesame two', 'thesame three']) 10398e83b29SBram Moolenaar write 10498e83b29SBram Moolenaar tag thesame 10598e83b29SBram Moolenaar call assert_equal(1, line('.')) 10698e83b29SBram Moolenaar tnext 10798e83b29SBram Moolenaar call assert_equal(2, line('.')) 10898e83b29SBram Moolenaar tnext 10998e83b29SBram Moolenaar call assert_equal(3, line('.')) 11098e83b29SBram Moolenaar 111a9d23c20SBram Moolenaar bwipe! 11298e83b29SBram Moolenaar set tags& 11398e83b29SBram Moolenaar call delete('Xtags') 11498e83b29SBram Moolenaar call delete('Xfile1') 115a9d23c20SBram Moolenaarendfunc 116a9d23c20SBram Moolenaar 1178ad80deaSBram Moolenaarfunc Test_tagjump_switchbuf() 1185a4c3082SBram Moolenaar CheckFeature quickfix 1195a4c3082SBram Moolenaar 1208ad80deaSBram Moolenaar set tags=Xtags 1218ad80deaSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 1228ad80deaSBram Moolenaar \ "second\tXfile1\t2", 1238ad80deaSBram Moolenaar \ "third\tXfile1\t3",], 1248ad80deaSBram Moolenaar \ 'Xtags') 1258ad80deaSBram Moolenaar call writefile(['first', 'second', 'third'], 'Xfile1') 1268ad80deaSBram Moolenaar 1278ad80deaSBram Moolenaar enew | only 1288ad80deaSBram Moolenaar set switchbuf= 1298ad80deaSBram Moolenaar stag second 1308ad80deaSBram Moolenaar call assert_equal(2, winnr('$')) 1318ad80deaSBram Moolenaar call assert_equal(2, line('.')) 1328ad80deaSBram Moolenaar stag third 1338ad80deaSBram Moolenaar call assert_equal(3, winnr('$')) 1348ad80deaSBram Moolenaar call assert_equal(3, line('.')) 1358ad80deaSBram Moolenaar 1368ad80deaSBram Moolenaar enew | only 1378ad80deaSBram Moolenaar set switchbuf=useopen 1388ad80deaSBram Moolenaar stag second 1398ad80deaSBram Moolenaar call assert_equal(2, winnr('$')) 1408ad80deaSBram Moolenaar call assert_equal(2, line('.')) 1418ad80deaSBram Moolenaar stag third 1428ad80deaSBram Moolenaar call assert_equal(2, winnr('$')) 1438ad80deaSBram Moolenaar call assert_equal(3, line('.')) 1448ad80deaSBram Moolenaar 1458ad80deaSBram Moolenaar enew | only 1468ad80deaSBram Moolenaar set switchbuf=usetab 1478ad80deaSBram Moolenaar tab stag second 1488ad80deaSBram Moolenaar call assert_equal(2, tabpagenr('$')) 1498ad80deaSBram Moolenaar call assert_equal(2, line('.')) 1508ad80deaSBram Moolenaar 1tabnext | stag third 1518ad80deaSBram Moolenaar call assert_equal(2, tabpagenr('$')) 1528ad80deaSBram Moolenaar call assert_equal(3, line('.')) 1538ad80deaSBram Moolenaar 1548ad80deaSBram Moolenaar tabclose! 1558ad80deaSBram Moolenaar enew | only 1568ad80deaSBram Moolenaar call delete('Xfile1') 1578ad80deaSBram Moolenaar call delete('Xtags') 1580331faf7SBram Moolenaar set tags& 1598ad80deaSBram Moolenaar set switchbuf&vim 1608ad80deaSBram Moolenaarendfunc 1618ad80deaSBram Moolenaar 16253f1673cSBram Moolenaar" Tests for [ CTRL-I and CTRL-W CTRL-I commands 16353f1673cSBram Moolenaarfunction Test_keyword_jump() 16453f1673cSBram Moolenaar call writefile(["#include Xinclude", "", 16553f1673cSBram Moolenaar \ "", 16653f1673cSBram Moolenaar \ "/* test text test tex start here", 16753f1673cSBram Moolenaar \ " some text", 16853f1673cSBram Moolenaar \ " test text", 16953f1673cSBram Moolenaar \ " start OK if found this line", 17053f1673cSBram Moolenaar \ " start found wrong line", 17153f1673cSBram Moolenaar \ "test text"], 'Xtestfile') 17253f1673cSBram Moolenaar call writefile(["/* test text test tex start here", 17353f1673cSBram Moolenaar \ " some text", 17453f1673cSBram Moolenaar \ " test text", 17553f1673cSBram Moolenaar \ " start OK if found this line", 17653f1673cSBram Moolenaar \ " start found wrong line", 17753f1673cSBram Moolenaar \ "test text"], 'Xinclude') 17853f1673cSBram Moolenaar new Xtestfile 17953f1673cSBram Moolenaar call cursor(1,1) 18053f1673cSBram Moolenaar call search("start") 18153f1673cSBram Moolenaar exe "normal! 5[\<C-I>" 18253f1673cSBram Moolenaar call assert_equal(" start OK if found this line", getline('.')) 18353f1673cSBram Moolenaar call cursor(1,1) 18453f1673cSBram Moolenaar call search("start") 18553f1673cSBram Moolenaar exe "normal! 5\<C-W>\<C-I>" 18653f1673cSBram Moolenaar call assert_equal(" start OK if found this line", getline('.')) 187531be47aSBram Moolenaar 188531be47aSBram Moolenaar " invalid tag search pattern 189531be47aSBram Moolenaar call assert_fails('tag /\%(/', 'E426:') 190531be47aSBram Moolenaar 19153f1673cSBram Moolenaar enew! | only 19253f1673cSBram Moolenaar call delete('Xtestfile') 19353f1673cSBram Moolenaar call delete('Xinclude') 19453f1673cSBram Moolenaarendfunction 19553f1673cSBram Moolenaar 19615993ce9SBram Moolenaar" Test for jumping to a tag with 'hidden' set, with symbolic link in path of 19715993ce9SBram Moolenaar" tag. This only works for Unix, because of the symbolic link. 19815993ce9SBram Moolenaarfunc Test_tag_symbolic() 1996d91bcb4SBram Moolenaar CheckUnix 2006d91bcb4SBram Moolenaar 20115993ce9SBram Moolenaar set hidden 20215993ce9SBram Moolenaar call delete("Xtest.dir", "rf") 20315993ce9SBram Moolenaar call system("ln -s . Xtest.dir") 20415993ce9SBram Moolenaar " Create a tags file with the current directory name inserted. 20515993ce9SBram Moolenaar call writefile([ 20615993ce9SBram Moolenaar \ "SECTION_OFF " . getcwd() . "/Xtest.dir/Xtest.c /^#define SECTION_OFF 3$/", 20715993ce9SBram Moolenaar \ '', 20815993ce9SBram Moolenaar \ ], 'Xtags') 20915993ce9SBram Moolenaar call writefile(['#define SECTION_OFF 3', 21015993ce9SBram Moolenaar \ '#define NUM_SECTIONS 3'], 'Xtest.c') 21115993ce9SBram Moolenaar 21215993ce9SBram Moolenaar " Try jumping to a tag, but with a path that contains a symbolic link. When 21315993ce9SBram Moolenaar " wrong, this will give the ATTENTION message. The next space will then be 21415993ce9SBram Moolenaar " eaten by hit-return, instead of moving the cursor to 'd'. 21515993ce9SBram Moolenaar set tags=Xtags 21615993ce9SBram Moolenaar enew! 21715993ce9SBram Moolenaar call append(0, 'SECTION_OFF') 21815993ce9SBram Moolenaar call cursor(1,1) 21915993ce9SBram Moolenaar exe "normal \<C-]> " 22015993ce9SBram Moolenaar call assert_equal('Xtest.c', expand('%:t')) 22115993ce9SBram Moolenaar call assert_equal(2, col('.')) 22215993ce9SBram Moolenaar 22315993ce9SBram Moolenaar set hidden& 22415993ce9SBram Moolenaar set tags& 22515993ce9SBram Moolenaar enew! 22615993ce9SBram Moolenaar call delete('Xtags') 22715993ce9SBram Moolenaar call delete('Xtest.c') 22815993ce9SBram Moolenaar call delete("Xtest.dir", "rf") 22915993ce9SBram Moolenaar %bwipe! 23015993ce9SBram Moolenaarendfunc 23115993ce9SBram Moolenaar 232430dc5d3SBram Moolenaar" Tests for tag search with !_TAG_FILE_ENCODING. 233430dc5d3SBram Moolenaar" Depends on the test83-tags2 and test83-tags3 files. 234430dc5d3SBram Moolenaarfunc Test_tag_file_encoding() 235430dc5d3SBram Moolenaar if has('vms') 2366d91bcb4SBram Moolenaar throw 'Skipped: does not work on VMS' 237430dc5d3SBram Moolenaar endif 238430dc5d3SBram Moolenaar 239430dc5d3SBram Moolenaar if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21" 2406d91bcb4SBram Moolenaar throw 'Skipped: iconv does not work' 241430dc5d3SBram Moolenaar endif 242430dc5d3SBram Moolenaar 243430dc5d3SBram Moolenaar let save_enc = &encoding 244430dc5d3SBram Moolenaar set encoding=utf8 245430dc5d3SBram Moolenaar 246430dc5d3SBram Moolenaar let content = ['text for tags1', 'abcdefghijklmnopqrs'] 247430dc5d3SBram Moolenaar call writefile(content, 'Xtags1.txt') 248430dc5d3SBram Moolenaar let content = ['text for tags2', 'ABC'] 249430dc5d3SBram Moolenaar call writefile(content, 'Xtags2.txt') 250430dc5d3SBram Moolenaar let content = ['text for tags3', 'ABC'] 251430dc5d3SBram Moolenaar call writefile(content, 'Xtags3.txt') 252430dc5d3SBram Moolenaar let content = ['!_TAG_FILE_ENCODING utf-8 //', 'abcdefghijklmnopqrs Xtags1.txt /abcdefghijklmnopqrs'] 253430dc5d3SBram Moolenaar call writefile(content, 'Xtags1') 254430dc5d3SBram Moolenaar 255430dc5d3SBram Moolenaar " case1: 256430dc5d3SBram Moolenaar new 257430dc5d3SBram Moolenaar set tags=Xtags1 258430dc5d3SBram Moolenaar tag abcdefghijklmnopqrs 259430dc5d3SBram Moolenaar call assert_equal('Xtags1.txt', expand('%:t')) 260430dc5d3SBram Moolenaar call assert_equal('abcdefghijklmnopqrs', getline('.')) 261430dc5d3SBram Moolenaar close 262430dc5d3SBram Moolenaar 263430dc5d3SBram Moolenaar " case2: 264430dc5d3SBram Moolenaar new 265430dc5d3SBram Moolenaar set tags=test83-tags2 266430dc5d3SBram Moolenaar tag /.BC 267430dc5d3SBram Moolenaar call assert_equal('Xtags2.txt', expand('%:t')) 268430dc5d3SBram Moolenaar call assert_equal('ABC', getline('.')) 269430dc5d3SBram Moolenaar close 270430dc5d3SBram Moolenaar 271430dc5d3SBram Moolenaar " case3: 272430dc5d3SBram Moolenaar new 273430dc5d3SBram Moolenaar set tags=test83-tags3 274430dc5d3SBram Moolenaar tag abc50 275430dc5d3SBram Moolenaar call assert_equal('Xtags3.txt', expand('%:t')) 276430dc5d3SBram Moolenaar call assert_equal('ABC', getline('.')) 277430dc5d3SBram Moolenaar close 278430dc5d3SBram Moolenaar 279430dc5d3SBram Moolenaar set tags& 280430dc5d3SBram Moolenaar let &encoding = save_enc 281430dc5d3SBram Moolenaar call delete('Xtags1.txt') 282430dc5d3SBram Moolenaar call delete('Xtags2.txt') 283430dc5d3SBram Moolenaar call delete('Xtags3.txt') 284430dc5d3SBram Moolenaar call delete('Xtags1') 285430dc5d3SBram Moolenaarendfunc 286430dc5d3SBram Moolenaar 287845e0ee5SBram Moolenaar" Test for emacs-style tags file (TAGS) 2880d207377SBram Moolenaarfunc Test_tagjump_etags() 2896d91bcb4SBram Moolenaar CheckFeature emacs_tags 2906d91bcb4SBram Moolenaar 2910d207377SBram Moolenaar call writefile([ 2920d207377SBram Moolenaar \ "void foo() {}", 2930d207377SBram Moolenaar \ "int main(int argc, char **argv)", 2940d207377SBram Moolenaar \ "{", 2950d207377SBram Moolenaar \ "\tfoo();", 2960d207377SBram Moolenaar \ "\treturn 0;", 2970d207377SBram Moolenaar \ "}", 2980d207377SBram Moolenaar \ ], 'Xmain.c') 2990d207377SBram Moolenaar 3000d207377SBram Moolenaar call writefile([ 3010d207377SBram Moolenaar \ "\x0c", 3020d207377SBram Moolenaar \ "Xmain.c,64", 3030d207377SBram Moolenaar \ "void foo() {}\x7ffoo\x011,0", 3040d207377SBram Moolenaar \ "int main(int argc, char **argv)\x7fmain\x012,14", 3050d207377SBram Moolenaar \ ], 'Xtags') 3060d207377SBram Moolenaar set tags=Xtags 3070d207377SBram Moolenaar ta foo 3080d207377SBram Moolenaar call assert_equal('void foo() {}', getline('.')) 3090d207377SBram Moolenaar 3103d9207adSBram Moolenaar " Test for including another tags file 3113d9207adSBram Moolenaar call writefile([ 3123d9207adSBram Moolenaar \ "\x0c", 3133d9207adSBram Moolenaar \ "Xmain.c,64", 3143d9207adSBram Moolenaar \ "void foo() {}\x7ffoo\x011,0", 3153d9207adSBram Moolenaar \ "\x0c", 3163d9207adSBram Moolenaar \ "Xnonexisting,include", 3173d9207adSBram Moolenaar \ "\x0c", 3183d9207adSBram Moolenaar \ "Xtags2,include" 3193d9207adSBram Moolenaar \ ], 'Xtags') 3203d9207adSBram Moolenaar call writefile([ 3213d9207adSBram Moolenaar \ "\x0c", 3223d9207adSBram Moolenaar \ "Xmain.c,64", 3233d9207adSBram Moolenaar \ "int main(int argc, char **argv)\x7fmain\x012,14", 3243d9207adSBram Moolenaar \ ], 'Xtags2') 3253d9207adSBram Moolenaar tag main 3263d9207adSBram Moolenaar call assert_equal(2, line('.')) 3273d9207adSBram Moolenaar 3283d9207adSBram Moolenaar " corrupted tag line 3293d9207adSBram Moolenaar call writefile([ 3303d9207adSBram Moolenaar \ "\x0c", 3313d9207adSBram Moolenaar \ "Xmain.c,8", 3323d9207adSBram Moolenaar \ "int main" 3333d9207adSBram Moolenaar \ ], 'Xtags', 'b') 3343d9207adSBram Moolenaar call assert_fails('tag foo', 'E426:') 3353d9207adSBram Moolenaar 3363d9207adSBram Moolenaar " invalid line number 3373d9207adSBram Moolenaar call writefile([ 3383d9207adSBram Moolenaar \ "\x0c", 3393d9207adSBram Moolenaar \ "Xmain.c,64", 3403d9207adSBram Moolenaar \ "void foo() {}\x7ffoo\x0abc,0", 3413d9207adSBram Moolenaar \ ], 'Xtags') 3423d9207adSBram Moolenaar call assert_fails('tag foo', 'E426:') 3433d9207adSBram Moolenaar 3443d9207adSBram Moolenaar " invalid tag name 3453d9207adSBram Moolenaar call writefile([ 3463d9207adSBram Moolenaar \ "\x0c", 3473d9207adSBram Moolenaar \ "Xmain.c,64", 3483d9207adSBram Moolenaar \ ";;;;\x7f1,0", 3493d9207adSBram Moolenaar \ ], 'Xtags') 3509b7bf9e9SBram Moolenaar call assert_fails('tag foo', 'E431:') 3513d9207adSBram Moolenaar 3520d207377SBram Moolenaar call delete('Xtags') 3533d9207adSBram Moolenaar call delete('Xtags2') 3540d207377SBram Moolenaar call delete('Xmain.c') 3553d9207adSBram Moolenaar set tags& 3560d207377SBram Moolenaar bwipe! 3570d207377SBram Moolenaarendfunc 3580d207377SBram Moolenaar 359f49cc60aSBram Moolenaar" Test for getting and modifying the tag stack 360f49cc60aSBram Moolenaarfunc Test_getsettagstack() 361f49cc60aSBram Moolenaar call writefile(['line1', 'line2', 'line3'], 'Xfile1') 362f49cc60aSBram Moolenaar call writefile(['line1', 'line2', 'line3'], 'Xfile2') 363f49cc60aSBram Moolenaar call writefile(['line1', 'line2', 'line3'], 'Xfile3') 364f49cc60aSBram Moolenaar 365f49cc60aSBram Moolenaar enew | only 366f49cc60aSBram Moolenaar call settagstack(1, {'items' : []}) 367f49cc60aSBram Moolenaar call assert_equal(0, gettagstack(1).length) 3685d69fdb7SBram Moolenaar call assert_equal([], 1->gettagstack().items) 369f49cc60aSBram Moolenaar " Error cases 370f49cc60aSBram Moolenaar call assert_equal({}, gettagstack(100)) 371f49cc60aSBram Moolenaar call assert_equal(-1, settagstack(100, {'items' : []})) 372e2e4075fSBram Moolenaar call assert_fails('call settagstack(1, [1, 10])', 'E715:') 373e2e4075fSBram Moolenaar call assert_fails("call settagstack(1, {'items' : 10})", 'E714:') 374e2e4075fSBram Moolenaar call assert_fails("call settagstack(1, {'items' : []}, 10)", 'E928:') 375e2e4075fSBram Moolenaar call assert_fails("call settagstack(1, {'items' : []}, 'b')", 'E962:') 376ad48e6c1SBram Moolenaar call assert_equal(-1, settagstack(0, test_null_dict())) 377f49cc60aSBram Moolenaar 378f49cc60aSBram Moolenaar set tags=Xtags 379f49cc60aSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 380f49cc60aSBram Moolenaar \ "one\tXfile1\t1", 381f49cc60aSBram Moolenaar \ "three\tXfile3\t3", 382f49cc60aSBram Moolenaar \ "two\tXfile2\t2"], 383f49cc60aSBram Moolenaar \ 'Xtags') 384f49cc60aSBram Moolenaar 385f49cc60aSBram Moolenaar let stk = [] 386f49cc60aSBram Moolenaar call add(stk, {'bufnr' : bufnr('%'), 'tagname' : 'one', 387f49cc60aSBram Moolenaar \ 'from' : [bufnr('%'), line('.'), col('.'), 0], 'matchnr' : 1}) 388f49cc60aSBram Moolenaar tag one 389f49cc60aSBram Moolenaar call add(stk, {'bufnr' : bufnr('%'), 'tagname' : 'two', 390f49cc60aSBram Moolenaar \ 'from' : [bufnr('%'), line('.'), col('.'), 0], 'matchnr' : 1}) 391f49cc60aSBram Moolenaar tag two 392f49cc60aSBram Moolenaar call add(stk, {'bufnr' : bufnr('%'), 'tagname' : 'three', 393f49cc60aSBram Moolenaar \ 'from' : [bufnr('%'), line('.'), col('.'), 0], 'matchnr' : 1}) 394f49cc60aSBram Moolenaar tag three 395f49cc60aSBram Moolenaar call assert_equal(3, gettagstack(1).length) 396f49cc60aSBram Moolenaar call assert_equal(stk, gettagstack(1).items) 397f49cc60aSBram Moolenaar " Check for default - current window 398f49cc60aSBram Moolenaar call assert_equal(3, gettagstack().length) 399f49cc60aSBram Moolenaar call assert_equal(stk, gettagstack().items) 400f49cc60aSBram Moolenaar 401f49cc60aSBram Moolenaar " Try to set current index to invalid values 402f49cc60aSBram Moolenaar call settagstack(1, {'curidx' : -1}) 403f49cc60aSBram Moolenaar call assert_equal(1, gettagstack().curidx) 404aad222c9SBram Moolenaar eval {'curidx' : 50}->settagstack(1) 405f49cc60aSBram Moolenaar call assert_equal(4, gettagstack().curidx) 406f49cc60aSBram Moolenaar 407f49cc60aSBram Moolenaar " Try pushing invalid items onto the stack 408f49cc60aSBram Moolenaar call settagstack(1, {'items' : []}) 409f49cc60aSBram Moolenaar call settagstack(1, {'items' : ["plate"]}, 'a') 410f49cc60aSBram Moolenaar call assert_equal(0, gettagstack().length) 411f49cc60aSBram Moolenaar call assert_equal([], gettagstack().items) 412f49cc60aSBram Moolenaar call settagstack(1, {'items' : [{"tagname" : "abc"}]}, 'a') 413f49cc60aSBram Moolenaar call assert_equal(0, gettagstack().length) 414f49cc60aSBram Moolenaar call assert_equal([], gettagstack().items) 415f49cc60aSBram Moolenaar call settagstack(1, {'items' : [{"from" : 100}]}, 'a') 416f49cc60aSBram Moolenaar call assert_equal(0, gettagstack().length) 417f49cc60aSBram Moolenaar call assert_equal([], gettagstack().items) 418f49cc60aSBram Moolenaar call settagstack(1, {'items' : [{"from" : [2, 1, 0, 0]}]}, 'a') 419f49cc60aSBram Moolenaar call assert_equal(0, gettagstack().length) 420f49cc60aSBram Moolenaar call assert_equal([], gettagstack().items) 421f49cc60aSBram Moolenaar 422f49cc60aSBram Moolenaar " Push one item at a time to the stack 423f49cc60aSBram Moolenaar call settagstack(1, {'items' : []}) 424f49cc60aSBram Moolenaar call settagstack(1, {'items' : [stk[0]]}, 'a') 425f49cc60aSBram Moolenaar call settagstack(1, {'items' : [stk[1]]}, 'a') 426f49cc60aSBram Moolenaar call settagstack(1, {'items' : [stk[2]]}, 'a') 427f49cc60aSBram Moolenaar call settagstack(1, {'curidx' : 4}) 428f49cc60aSBram Moolenaar call assert_equal({'length' : 3, 'curidx' : 4, 'items' : stk}, 429f49cc60aSBram Moolenaar \ gettagstack(1)) 430f49cc60aSBram Moolenaar 431f49cc60aSBram Moolenaar " Try pushing items onto a full stack 432f49cc60aSBram Moolenaar for i in range(7) 433f49cc60aSBram Moolenaar call settagstack(1, {'items' : stk}, 'a') 434f49cc60aSBram Moolenaar endfor 435f49cc60aSBram Moolenaar call assert_equal(20, gettagstack().length) 436f49cc60aSBram Moolenaar call settagstack(1, 437f49cc60aSBram Moolenaar \ {'items' : [{'tagname' : 'abc', 'from' : [1, 10, 1, 0]}]}, 'a') 438f49cc60aSBram Moolenaar call assert_equal('abc', gettagstack().items[19].tagname) 439f49cc60aSBram Moolenaar 440271fa08aSBram Moolenaar " truncate the tag stack 441271fa08aSBram Moolenaar call settagstack(1, 442271fa08aSBram Moolenaar \ {'curidx' : 9, 443271fa08aSBram Moolenaar \ 'items' : [{'tagname' : 'abc', 'from' : [1, 10, 1, 0]}]}, 't') 444271fa08aSBram Moolenaar let t = gettagstack() 445271fa08aSBram Moolenaar call assert_equal(9, t.length) 446271fa08aSBram Moolenaar call assert_equal(10, t.curidx) 447271fa08aSBram Moolenaar 448271fa08aSBram Moolenaar " truncate the tag stack without pushing any new items 449271fa08aSBram Moolenaar call settagstack(1, {'curidx' : 5}, 't') 450271fa08aSBram Moolenaar let t = gettagstack() 451271fa08aSBram Moolenaar call assert_equal(4, t.length) 452271fa08aSBram Moolenaar call assert_equal(5, t.curidx) 453271fa08aSBram Moolenaar 454271fa08aSBram Moolenaar " truncate an empty tag stack and push new items 455271fa08aSBram Moolenaar call settagstack(1, {'items' : []}) 456271fa08aSBram Moolenaar call settagstack(1, 457271fa08aSBram Moolenaar \ {'items' : [{'tagname' : 'abc', 'from' : [1, 10, 1, 0]}]}, 't') 458271fa08aSBram Moolenaar let t = gettagstack() 459271fa08aSBram Moolenaar call assert_equal(1, t.length) 460271fa08aSBram Moolenaar call assert_equal(2, t.curidx) 461271fa08aSBram Moolenaar 462f49cc60aSBram Moolenaar " Tag with multiple matches 463f49cc60aSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 464f49cc60aSBram Moolenaar \ "two\tXfile1\t1", 465f49cc60aSBram Moolenaar \ "two\tXfile2\t3", 466f49cc60aSBram Moolenaar \ "two\tXfile3\t2"], 467f49cc60aSBram Moolenaar \ 'Xtags') 468f49cc60aSBram Moolenaar call settagstack(1, {'items' : []}) 469f49cc60aSBram Moolenaar tag two 470f49cc60aSBram Moolenaar tnext 471f49cc60aSBram Moolenaar tnext 472f49cc60aSBram Moolenaar call assert_equal(1, gettagstack().length) 473f49cc60aSBram Moolenaar call assert_equal(3, gettagstack().items[0].matchnr) 474f49cc60aSBram Moolenaar 475f49cc60aSBram Moolenaar " Memory allocation failures 476f49cc60aSBram Moolenaar call test_alloc_fail(GetAllocId('tagstack_items'), 0, 0) 477f49cc60aSBram Moolenaar call assert_fails('call gettagstack()', 'E342:') 478f49cc60aSBram Moolenaar call test_alloc_fail(GetAllocId('tagstack_from'), 0, 0) 479f49cc60aSBram Moolenaar call assert_fails('call gettagstack()', 'E342:') 480f49cc60aSBram Moolenaar call test_alloc_fail(GetAllocId('tagstack_details'), 0, 0) 481f49cc60aSBram Moolenaar call assert_fails('call gettagstack()', 'E342:') 482f49cc60aSBram Moolenaar 483f49cc60aSBram Moolenaar call settagstack(1, {'items' : []}) 484f49cc60aSBram Moolenaar call delete('Xfile1') 485f49cc60aSBram Moolenaar call delete('Xfile2') 486f49cc60aSBram Moolenaar call delete('Xfile3') 487f49cc60aSBram Moolenaar call delete('Xtags') 488f49cc60aSBram Moolenaar set tags& 489f49cc60aSBram Moolenaarendfunc 490f49cc60aSBram Moolenaar 4917559dcefSBram Moolenaarfunc Test_tag_with_count() 4927559dcefSBram Moolenaar call writefile([ 4937559dcefSBram Moolenaar \ 'test Xtest.h /^void test();$/;" p typeref:typename:void signature:()', 4947559dcefSBram Moolenaar \ ], 'Xtags') 4957559dcefSBram Moolenaar call writefile([ 4967559dcefSBram Moolenaar \ 'main Xtest.c /^int main()$/;" f typeref:typename:int signature:()', 4977559dcefSBram Moolenaar \ 'test Xtest.c /^void test()$/;" f typeref:typename:void signature:()', 4987559dcefSBram Moolenaar \ ], 'Ytags') 4997559dcefSBram Moolenaar cal writefile([ 5007559dcefSBram Moolenaar \ 'int main()', 5017559dcefSBram Moolenaar \ 'void test()', 5027559dcefSBram Moolenaar \ ], 'Xtest.c') 5037559dcefSBram Moolenaar cal writefile([ 5047559dcefSBram Moolenaar \ 'void test();', 5057559dcefSBram Moolenaar \ ], 'Xtest.h') 5067559dcefSBram Moolenaar set tags=Xtags,Ytags 5077559dcefSBram Moolenaar 5087559dcefSBram Moolenaar new Xtest.c 5097559dcefSBram Moolenaar let tl = taglist('test', 'Xtest.c') 5107559dcefSBram Moolenaar call assert_equal(tl[0].filename, 'Xtest.c') 5117559dcefSBram Moolenaar call assert_equal(tl[1].filename, 'Xtest.h') 5127559dcefSBram Moolenaar 5137559dcefSBram Moolenaar tag test 5147559dcefSBram Moolenaar call assert_equal(bufname('%'), 'Xtest.c') 5157559dcefSBram Moolenaar 1tag test 5167559dcefSBram Moolenaar call assert_equal(bufname('%'), 'Xtest.c') 5177559dcefSBram Moolenaar 2tag test 5187559dcefSBram Moolenaar call assert_equal(bufname('%'), 'Xtest.h') 5197559dcefSBram Moolenaar 5207559dcefSBram Moolenaar set tags& 5217559dcefSBram Moolenaar call delete('Xtags') 5227559dcefSBram Moolenaar call delete('Ytags') 5237559dcefSBram Moolenaar bwipe Xtest.h 5247559dcefSBram Moolenaar bwipe Xtest.c 5257559dcefSBram Moolenaar call delete('Xtest.h') 5267559dcefSBram Moolenaar call delete('Xtest.c') 5277559dcefSBram Moolenaarendfunc 5287559dcefSBram Moolenaar 5297559dcefSBram Moolenaarfunc Test_tagnr_recall() 5307559dcefSBram Moolenaar call writefile([ 5317559dcefSBram Moolenaar \ 'test Xtest.h /^void test();$/;" p', 5327559dcefSBram Moolenaar \ 'main Xtest.c /^int main()$/;" f', 5337559dcefSBram Moolenaar \ 'test Xtest.c /^void test()$/;" f', 5347559dcefSBram Moolenaar \ ], 'Xtags') 5357559dcefSBram Moolenaar cal writefile([ 5367559dcefSBram Moolenaar \ 'int main()', 5377559dcefSBram Moolenaar \ 'void test()', 5387559dcefSBram Moolenaar \ ], 'Xtest.c') 5397559dcefSBram Moolenaar cal writefile([ 5407559dcefSBram Moolenaar \ 'void test();', 5417559dcefSBram Moolenaar \ ], 'Xtest.h') 5427559dcefSBram Moolenaar set tags=Xtags 5437559dcefSBram Moolenaar 5447559dcefSBram Moolenaar new Xtest.c 5457559dcefSBram Moolenaar let tl = taglist('test', 'Xtest.c') 5467559dcefSBram Moolenaar call assert_equal(tl[0].filename, 'Xtest.c') 5477559dcefSBram Moolenaar call assert_equal(tl[1].filename, 'Xtest.h') 5487559dcefSBram Moolenaar 5497559dcefSBram Moolenaar 2tag test 5507559dcefSBram Moolenaar call assert_equal(bufname('%'), 'Xtest.h') 5517559dcefSBram Moolenaar pop 5527559dcefSBram Moolenaar call assert_equal(bufname('%'), 'Xtest.c') 5537559dcefSBram Moolenaar tag 5547559dcefSBram Moolenaar call assert_equal(bufname('%'), 'Xtest.h') 5557559dcefSBram Moolenaar 5560331faf7SBram Moolenaar set tags& 5577559dcefSBram Moolenaar call delete('Xtags') 5587559dcefSBram Moolenaar bwipe Xtest.h 5597559dcefSBram Moolenaar bwipe Xtest.c 5607559dcefSBram Moolenaar call delete('Xtest.h') 5617559dcefSBram Moolenaar call delete('Xtest.c') 5627559dcefSBram Moolenaarendfunc 5637559dcefSBram Moolenaar 5645209334cSBram Moolenaarfunc Test_tag_line_toolong() 5655209334cSBram Moolenaar call writefile([ 5665209334cSBram Moolenaar \ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 django/contrib/admin/templates/admin/edit_inline/stacked.html 16;" j line:16 language:HTML' 5675209334cSBram Moolenaar \ ], 'Xtags') 5685209334cSBram Moolenaar set tags=Xtags 5695209334cSBram Moolenaar let old_vbs = &verbose 5705209334cSBram Moolenaar set verbose=5 5715209334cSBram Moolenaar " ":tjump" should give "tag not found" not "Format error in tags file" 572e2e4075fSBram Moolenaar call assert_fails('tj /foo', 'E426:') 5735209334cSBram Moolenaar try 5745209334cSBram Moolenaar tj /foo 5755209334cSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E431/ 5765209334cSBram Moolenaar call assert_report(v:exception) 5775209334cSBram Moolenaar catch /.*/ 5785209334cSBram Moolenaar endtry 579dc9ef268SBram Moolenaar call assert_equal('Searching tags file Xtags', split(execute('messages'), '\n')[-1]) 580dc9ef268SBram Moolenaar 5815209334cSBram Moolenaar call writefile([ 5825209334cSBram Moolenaar \ '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 django/contrib/admin/templates/admin/edit_inline/stacked.html 16;" j line:16 language:HTML' 5835209334cSBram Moolenaar \ ], 'Xtags') 584e2e4075fSBram Moolenaar call assert_fails('tj /foo', 'E426:') 5855209334cSBram Moolenaar try 5865209334cSBram Moolenaar tj /foo 5875209334cSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E431/ 5885209334cSBram Moolenaar call assert_report(v:exception) 5895209334cSBram Moolenaar catch /.*/ 5905209334cSBram Moolenaar endtry 591dc9ef268SBram Moolenaar call assert_equal('Searching tags file Xtags', split(execute('messages'), '\n')[-1]) 592dc9ef268SBram Moolenaar 593dc9ef268SBram Moolenaar " binary search works in file with long line 594dc9ef268SBram Moolenaar call writefile([ 595dc9ef268SBram Moolenaar \ 'asdfasfd nowhere 16', 596dc9ef268SBram Moolenaar \ 'foobar Xsomewhere 3; " 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567', 597dc9ef268SBram Moolenaar \ 'zasdfasfd nowhere 16', 598dc9ef268SBram Moolenaar \ ], 'Xtags') 599dc9ef268SBram Moolenaar call writefile([ 600dc9ef268SBram Moolenaar \ 'one', 601dc9ef268SBram Moolenaar \ 'two', 602dc9ef268SBram Moolenaar \ 'trhee', 603dc9ef268SBram Moolenaar \ 'four', 604dc9ef268SBram Moolenaar \ ], 'Xsomewhere') 605dc9ef268SBram Moolenaar tag foobar 606dc9ef268SBram Moolenaar call assert_equal('Xsomewhere', expand('%')) 607dc9ef268SBram Moolenaar call assert_equal(3, getcurpos()[1]) 608dc9ef268SBram Moolenaar 609*489d6099SGregory Anders " expansion on command line works with long lines when &wildoptions contains 610*489d6099SGregory Anders " 'tagfile' 611*489d6099SGregory Anders set wildoptions=tagfile 612*489d6099SGregory Anders call writefile([ 613*489d6099SGregory Anders \ 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa file /^pattern$/;" f' 614*489d6099SGregory Anders \ ], 'Xtags') 615*489d6099SGregory Anders call feedkeys(":tag \<Tab>", 'tx') 616*489d6099SGregory Anders " Should not crash 617*489d6099SGregory Anders call assert_true(v:true) 618*489d6099SGregory Anders 6195209334cSBram Moolenaar call delete('Xtags') 620dc9ef268SBram Moolenaar call delete('Xsomewhere') 6210331faf7SBram Moolenaar set tags& 6225209334cSBram Moolenaar let &verbose = old_vbs 6235209334cSBram Moolenaarendfunc 6245209334cSBram Moolenaar 625e8070987SBram Moolenaar" Check that using :tselect does not run into the hit-enter prompt. 626e8070987SBram Moolenaar" Requires a terminal to trigger that prompt. 627e8070987SBram Moolenaarfunc Test_tselect() 628e8070987SBram Moolenaar CheckScreendump 629e8070987SBram Moolenaar 630e8070987SBram Moolenaar call writefile([ 631e8070987SBram Moolenaar \ 'main Xtest.h /^void test();$/;" f', 632e8070987SBram Moolenaar \ 'main Xtest.c /^int main()$/;" f', 633e8070987SBram Moolenaar \ 'main Xtest.x /^void test()$/;" f', 634e8070987SBram Moolenaar \ ], 'Xtags') 635e8070987SBram Moolenaar cal writefile([ 636e8070987SBram Moolenaar \ 'int main()', 637e8070987SBram Moolenaar \ 'void test()', 638e8070987SBram Moolenaar \ ], 'Xtest.c') 639e8070987SBram Moolenaar 640e8070987SBram Moolenaar let lines =<< trim [SCRIPT] 641e8070987SBram Moolenaar set tags=Xtags 642e8070987SBram Moolenaar [SCRIPT] 643e8070987SBram Moolenaar call writefile(lines, 'XTest_tselect') 644e8070987SBram Moolenaar let buf = RunVimInTerminal('-S XTest_tselect', {'rows': 10, 'cols': 50}) 645e8070987SBram Moolenaar 6466a2c5a7dSBram Moolenaar call TermWait(buf, 50) 647e8070987SBram Moolenaar call term_sendkeys(buf, ":tselect main\<CR>2\<CR>") 648e8070987SBram Moolenaar call VerifyScreenDump(buf, 'Test_tselect_1', {}) 649e8070987SBram Moolenaar 6504facea31SBram Moolenaar call StopVimInTerminal(buf) 651e8070987SBram Moolenaar call delete('Xtags') 652e8070987SBram Moolenaar call delete('Xtest.c') 653e8070987SBram Moolenaar call delete('XTest_tselect') 654e8070987SBram Moolenaarendfunc 655e8070987SBram Moolenaar 656077b9dd3SBram Moolenaarfunc Test_tagline() 657077b9dd3SBram Moolenaar call writefile([ 658077b9dd3SBram Moolenaar \ 'provision Xtest.py /^ def provision(self, **kwargs):$/;" m line:1 language:Python class:Foo', 659077b9dd3SBram Moolenaar \ 'provision Xtest.py /^ def provision(self, **kwargs):$/;" m line:3 language:Python class:Bar', 660077b9dd3SBram Moolenaar \], 'Xtags') 661077b9dd3SBram Moolenaar call writefile([ 662077b9dd3SBram Moolenaar \ ' def provision(self, **kwargs):', 663077b9dd3SBram Moolenaar \ ' pass', 664077b9dd3SBram Moolenaar \ ' def provision(self, **kwargs):', 665077b9dd3SBram Moolenaar \ ' pass', 666077b9dd3SBram Moolenaar \], 'Xtest.py') 667077b9dd3SBram Moolenaar 668077b9dd3SBram Moolenaar set tags=Xtags 669077b9dd3SBram Moolenaar 670077b9dd3SBram Moolenaar 1tag provision 671077b9dd3SBram Moolenaar call assert_equal(line('.'), 1) 672077b9dd3SBram Moolenaar 2tag provision 673077b9dd3SBram Moolenaar call assert_equal(line('.'), 3) 674077b9dd3SBram Moolenaar 675077b9dd3SBram Moolenaar call delete('Xtags') 676077b9dd3SBram Moolenaar call delete('Xtest.py') 677077b9dd3SBram Moolenaar set tags& 678077b9dd3SBram Moolenaarendfunc 679077b9dd3SBram Moolenaar 680830c1afcSBram Moolenaar" Test for expanding environment variable in a tag file name 681830c1afcSBram Moolenaarfunc Test_tag_envvar() 682830c1afcSBram Moolenaar call writefile(["Func1\t$FOO\t/^Func1/"], 'Xtags') 683830c1afcSBram Moolenaar set tags=Xtags 684830c1afcSBram Moolenaar 685830c1afcSBram Moolenaar let $FOO='TagTestEnv' 686830c1afcSBram Moolenaar 687830c1afcSBram Moolenaar let caught_exception = v:false 688830c1afcSBram Moolenaar try 689830c1afcSBram Moolenaar tag Func1 690830c1afcSBram Moolenaar catch /E429:/ 691830c1afcSBram Moolenaar call assert_match('E429:.*"TagTestEnv".*', v:exception) 692830c1afcSBram Moolenaar let caught_exception = v:true 693830c1afcSBram Moolenaar endtry 694830c1afcSBram Moolenaar call assert_true(caught_exception) 695830c1afcSBram Moolenaar 696830c1afcSBram Moolenaar set tags& 697830c1afcSBram Moolenaar call delete('Xtags') 698830c1afcSBram Moolenaar unlet $FOO 699830c1afcSBram Moolenaarendfunc 700830c1afcSBram Moolenaar 701830c1afcSBram Moolenaar" Test for :ptag 702a1353b53SBram Moolenaarfunc Test_tag_preview() 703830c1afcSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 704830c1afcSBram Moolenaar \ "second\tXfile1\t2", 705830c1afcSBram Moolenaar \ "third\tXfile1\t3",], 706830c1afcSBram Moolenaar \ 'Xtags') 707830c1afcSBram Moolenaar set tags=Xtags 708830c1afcSBram Moolenaar call writefile(['first', 'second', 'third'], 'Xfile1') 709830c1afcSBram Moolenaar 710830c1afcSBram Moolenaar enew | only 711830c1afcSBram Moolenaar ptag third 712830c1afcSBram Moolenaar call assert_equal(2, winnr()) 713830c1afcSBram Moolenaar call assert_equal(2, winnr('$')) 714830c1afcSBram Moolenaar call assert_equal(1, getwinvar(1, '&previewwindow')) 715830c1afcSBram Moolenaar call assert_equal(0, getwinvar(2, '&previewwindow')) 716a1353b53SBram Moolenaar wincmd P 717830c1afcSBram Moolenaar call assert_equal(3, line('.')) 718830c1afcSBram Moolenaar 719830c1afcSBram Moolenaar " jump to the tag again 720a1353b53SBram Moolenaar wincmd w 721830c1afcSBram Moolenaar ptag third 722a1353b53SBram Moolenaar wincmd P 723a1353b53SBram Moolenaar call assert_equal(3, line('.')) 724a1353b53SBram Moolenaar 725a1353b53SBram Moolenaar " jump to the newer tag 726a1353b53SBram Moolenaar wincmd w 727a1353b53SBram Moolenaar ptag 728a1353b53SBram Moolenaar wincmd P 729830c1afcSBram Moolenaar call assert_equal(3, line('.')) 730830c1afcSBram Moolenaar 731830c1afcSBram Moolenaar " close the preview window 732830c1afcSBram Moolenaar pclose 733830c1afcSBram Moolenaar call assert_equal(1, winnr('$')) 734830c1afcSBram Moolenaar 735830c1afcSBram Moolenaar call delete('Xfile1') 736830c1afcSBram Moolenaar call delete('Xtags') 737830c1afcSBram Moolenaar set tags& 738830c1afcSBram Moolenaarendfunc 739830c1afcSBram Moolenaar 740830c1afcSBram Moolenaar" Tests for guessing the tag location 741830c1afcSBram Moolenaarfunc Test_tag_guess() 742830c1afcSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 743830c1afcSBram Moolenaar \ "func1\tXfoo\t/^int func1(int x)/", 744830c1afcSBram Moolenaar \ "func2\tXfoo\t/^int func2(int y)/", 745830c1afcSBram Moolenaar \ "func3\tXfoo\t/^func3/", 746830c1afcSBram Moolenaar \ "func4\tXfoo\t/^func4/"], 747830c1afcSBram Moolenaar \ 'Xtags') 748830c1afcSBram Moolenaar set tags=Xtags 749830c1afcSBram Moolenaar let code =<< trim [CODE] 750830c1afcSBram Moolenaar 751830c1afcSBram Moolenaar int FUNC1 (int x) { } 752830c1afcSBram Moolenaar int 753830c1afcSBram Moolenaar func2 (int y) { } 754830c1afcSBram Moolenaar int * func3 () { } 755830c1afcSBram Moolenaar 756830c1afcSBram Moolenaar [CODE] 757830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 758830c1afcSBram Moolenaar 759830c1afcSBram Moolenaar let v:statusmsg = '' 760830c1afcSBram Moolenaar ta func1 761830c1afcSBram Moolenaar call assert_match('E435:', v:statusmsg) 762830c1afcSBram Moolenaar call assert_equal(2, line('.')) 763830c1afcSBram Moolenaar let v:statusmsg = '' 764830c1afcSBram Moolenaar ta func2 765830c1afcSBram Moolenaar call assert_match('E435:', v:statusmsg) 766830c1afcSBram Moolenaar call assert_equal(4, line('.')) 767830c1afcSBram Moolenaar let v:statusmsg = '' 768830c1afcSBram Moolenaar ta func3 769830c1afcSBram Moolenaar call assert_match('E435:', v:statusmsg) 770830c1afcSBram Moolenaar call assert_equal(5, line('.')) 771830c1afcSBram Moolenaar call assert_fails('ta func4', 'E434:') 772830c1afcSBram Moolenaar 773830c1afcSBram Moolenaar call delete('Xtags') 774830c1afcSBram Moolenaar call delete('Xfoo') 775830c1afcSBram Moolenaar set tags& 776830c1afcSBram Moolenaarendfunc 777830c1afcSBram Moolenaar 778830c1afcSBram Moolenaar" Test for an unsorted tags file 779830c1afcSBram Moolenaarfunc Test_tag_sort() 780830c1afcSBram Moolenaar call writefile([ 781830c1afcSBram Moolenaar \ "first\tXfoo\t1", 782830c1afcSBram Moolenaar \ "ten\tXfoo\t3", 783830c1afcSBram Moolenaar \ "six\tXfoo\t2"], 784830c1afcSBram Moolenaar \ 'Xtags') 785830c1afcSBram Moolenaar set tags=Xtags 786830c1afcSBram Moolenaar let code =<< trim [CODE] 787830c1afcSBram Moolenaar int first() {} 788830c1afcSBram Moolenaar int six() {} 789830c1afcSBram Moolenaar int ten() {} 790830c1afcSBram Moolenaar [CODE] 791830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 792830c1afcSBram Moolenaar 793830c1afcSBram Moolenaar call assert_fails('tag first', 'E432:') 794830c1afcSBram Moolenaar 795830c1afcSBram Moolenaar call delete('Xtags') 796830c1afcSBram Moolenaar call delete('Xfoo') 797830c1afcSBram Moolenaar set tags& 798830c1afcSBram Moolenaar %bwipe 799830c1afcSBram Moolenaarendfunc 800830c1afcSBram Moolenaar 801830c1afcSBram Moolenaar" Test for an unsorted tags file 802830c1afcSBram Moolenaarfunc Test_tag_fold() 803830c1afcSBram Moolenaar call writefile([ 804830c1afcSBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 805830c1afcSBram Moolenaar \ "!_TAG_FILE_SORTED\t2\t/0=unsorted, 1=sorted, 2=foldcase/", 806830c1afcSBram Moolenaar \ "first\tXfoo\t1", 807830c1afcSBram Moolenaar \ "second\tXfoo\t2", 808830c1afcSBram Moolenaar \ "third\tXfoo\t3"], 809830c1afcSBram Moolenaar \ 'Xtags') 810830c1afcSBram Moolenaar set tags=Xtags 811830c1afcSBram Moolenaar let code =<< trim [CODE] 812830c1afcSBram Moolenaar int first() {} 813830c1afcSBram Moolenaar int second() {} 814830c1afcSBram Moolenaar int third() {} 815830c1afcSBram Moolenaar [CODE] 816830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 817830c1afcSBram Moolenaar 818830c1afcSBram Moolenaar enew 819830c1afcSBram Moolenaar tag second 820830c1afcSBram Moolenaar call assert_equal('Xfoo', bufname('')) 821830c1afcSBram Moolenaar call assert_equal(2, line('.')) 822830c1afcSBram Moolenaar 823830c1afcSBram Moolenaar call delete('Xtags') 824830c1afcSBram Moolenaar call delete('Xfoo') 825830c1afcSBram Moolenaar set tags& 826830c1afcSBram Moolenaar %bwipe 827830c1afcSBram Moolenaarendfunc 828830c1afcSBram Moolenaar 829830c1afcSBram Moolenaar" Test for the :ltag command 830830c1afcSBram Moolenaarfunc Test_ltag() 831830c1afcSBram Moolenaar call writefile([ 832830c1afcSBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 833830c1afcSBram Moolenaar \ "first\tXfoo\t1", 834830c1afcSBram Moolenaar \ "second\tXfoo\t/^int second() {}$/", 835830c1afcSBram Moolenaar \ "third\tXfoo\t3"], 836830c1afcSBram Moolenaar \ 'Xtags') 837830c1afcSBram Moolenaar set tags=Xtags 838830c1afcSBram Moolenaar let code =<< trim [CODE] 839830c1afcSBram Moolenaar int first() {} 840830c1afcSBram Moolenaar int second() {} 841830c1afcSBram Moolenaar int third() {} 842830c1afcSBram Moolenaar [CODE] 843830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 844830c1afcSBram Moolenaar 845830c1afcSBram Moolenaar enew 846830c1afcSBram Moolenaar call setloclist(0, [], 'f') 847830c1afcSBram Moolenaar ltag third 848830c1afcSBram Moolenaar call assert_equal('Xfoo', bufname('')) 849830c1afcSBram Moolenaar call assert_equal(3, line('.')) 8506864efa5Sthinca call assert_equal([{'lnum': 3, 'end_lnum': 0, 'bufnr': bufnr('Xfoo'), 8516864efa5Sthinca \ 'col': 0, 'end_col': 0, 'pattern': '', 'valid': 1, 'vcol': 0, 8526864efa5Sthinca \ 'nr': 0, 'type': '', 'module': '', 'text': 'third'}], getloclist(0)) 853830c1afcSBram Moolenaar 854830c1afcSBram Moolenaar ltag second 855830c1afcSBram Moolenaar call assert_equal(2, line('.')) 8566864efa5Sthinca call assert_equal([{'lnum': 0, 'end_lnum': 0, 'bufnr': bufnr('Xfoo'), 8576864efa5Sthinca \ 'col': 0, 'end_col': 0, 'pattern': '^\Vint second() {}\$', 8586864efa5Sthinca \ 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'module': '', 8596864efa5Sthinca \ 'text': 'second'}], getloclist(0)) 860830c1afcSBram Moolenaar 861830c1afcSBram Moolenaar call delete('Xtags') 862830c1afcSBram Moolenaar call delete('Xfoo') 863830c1afcSBram Moolenaar set tags& 864830c1afcSBram Moolenaar %bwipe 865830c1afcSBram Moolenaarendfunc 866830c1afcSBram Moolenaar 867830c1afcSBram Moolenaar" Test for setting the last search pattern to the tag search pattern 868830c1afcSBram Moolenaar" when cpoptions has 't' 869830c1afcSBram Moolenaarfunc Test_tag_last_search_pat() 870830c1afcSBram Moolenaar call writefile([ 871830c1afcSBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 872830c1afcSBram Moolenaar \ "first\tXfoo\t/^int first() {}/", 873830c1afcSBram Moolenaar \ "second\tXfoo\t/^int second() {}/", 874830c1afcSBram Moolenaar \ "third\tXfoo\t/^int third() {}/"], 875830c1afcSBram Moolenaar \ 'Xtags') 876830c1afcSBram Moolenaar set tags=Xtags 877830c1afcSBram Moolenaar let code =<< trim [CODE] 878830c1afcSBram Moolenaar int first() {} 879830c1afcSBram Moolenaar int second() {} 880830c1afcSBram Moolenaar int third() {} 881830c1afcSBram Moolenaar [CODE] 882830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 883830c1afcSBram Moolenaar 884830c1afcSBram Moolenaar enew 885830c1afcSBram Moolenaar let save_cpo = &cpo 886830c1afcSBram Moolenaar set cpo+=t 887830c1afcSBram Moolenaar let @/ = '' 888830c1afcSBram Moolenaar tag second 889830c1afcSBram Moolenaar call assert_equal('^int second() {}', @/) 890830c1afcSBram Moolenaar let &cpo = save_cpo 891830c1afcSBram Moolenaar 892830c1afcSBram Moolenaar call delete('Xtags') 893830c1afcSBram Moolenaar call delete('Xfoo') 894830c1afcSBram Moolenaar set tags& 895830c1afcSBram Moolenaar %bwipe 896830c1afcSBram Moolenaarendfunc 897830c1afcSBram Moolenaar 898a1353b53SBram Moolenaar" Tag stack tests 899a1353b53SBram Moolenaarfunc Test_tag_stack() 900830c1afcSBram Moolenaar let l = [] 901830c1afcSBram Moolenaar for i in range(10, 31) 902830c1afcSBram Moolenaar let l += ["var" .. i .. "\tXfoo\t/^int var" .. i .. ";$/"] 903830c1afcSBram Moolenaar endfor 904830c1afcSBram Moolenaar call writefile(l, 'Xtags') 905830c1afcSBram Moolenaar set tags=Xtags 906830c1afcSBram Moolenaar 907830c1afcSBram Moolenaar let l = [] 908830c1afcSBram Moolenaar for i in range(10, 31) 909830c1afcSBram Moolenaar let l += ["int var" .. i .. ";"] 910830c1afcSBram Moolenaar endfor 911830c1afcSBram Moolenaar call writefile(l, 'Xfoo') 912830c1afcSBram Moolenaar 913a1353b53SBram Moolenaar " Jump to a tag when the tag stack is full. Oldest entry should be removed. 914830c1afcSBram Moolenaar enew 915830c1afcSBram Moolenaar for i in range(10, 30) 916830c1afcSBram Moolenaar exe "tag var" .. i 917830c1afcSBram Moolenaar endfor 918830c1afcSBram Moolenaar let l = gettagstack() 919830c1afcSBram Moolenaar call assert_equal(20, l.length) 920830c1afcSBram Moolenaar call assert_equal('var11', l.items[0].tagname) 921830c1afcSBram Moolenaar tag var31 922830c1afcSBram Moolenaar let l = gettagstack() 923830c1afcSBram Moolenaar call assert_equal('var12', l.items[0].tagname) 924830c1afcSBram Moolenaar call assert_equal('var31', l.items[19].tagname) 925830c1afcSBram Moolenaar 926a1353b53SBram Moolenaar " Use tnext with a single match 927a1353b53SBram Moolenaar call assert_fails('tnext', 'E427:') 928a1353b53SBram Moolenaar 929a1353b53SBram Moolenaar " Jump to newest entry from the top of the stack 930830c1afcSBram Moolenaar call assert_fails('tag', 'E556:') 931830c1afcSBram Moolenaar 932a1353b53SBram Moolenaar " Pop with zero count from the top of the stack 933a1353b53SBram Moolenaar call assert_fails('0pop', 'E556:') 934a1353b53SBram Moolenaar 935830c1afcSBram Moolenaar " Pop from an unsaved buffer 936830c1afcSBram Moolenaar enew! 937830c1afcSBram Moolenaar call append(1, "sample text") 938830c1afcSBram Moolenaar call assert_fails('pop', 'E37:') 939830c1afcSBram Moolenaar call assert_equal(21, gettagstack().curidx) 940830c1afcSBram Moolenaar enew! 941830c1afcSBram Moolenaar 942830c1afcSBram Moolenaar " Pop all the entries in the tag stack 943830c1afcSBram Moolenaar call assert_fails('30pop', 'E555:') 944830c1afcSBram Moolenaar 945a1353b53SBram Moolenaar " Pop with a count when already at the bottom of the stack 946a1353b53SBram Moolenaar call assert_fails('exe "normal 4\<C-T>"', 'E555:') 947a1353b53SBram Moolenaar call assert_equal(1, gettagstack().curidx) 948a1353b53SBram Moolenaar 949a1353b53SBram Moolenaar " Jump to newest entry from the bottom of the stack with zero count 950a1353b53SBram Moolenaar call assert_fails('0tag', 'E555:') 951a1353b53SBram Moolenaar 952830c1afcSBram Moolenaar " Pop the tag stack when it is empty 953830c1afcSBram Moolenaar call settagstack(1, {'items' : []}) 954830c1afcSBram Moolenaar call assert_fails('pop', 'E73:') 955830c1afcSBram Moolenaar 956830c1afcSBram Moolenaar call delete('Xtags') 957830c1afcSBram Moolenaar call delete('Xfoo') 958830c1afcSBram Moolenaar set tags& 959830c1afcSBram Moolenaar %bwipe 960830c1afcSBram Moolenaarendfunc 961830c1afcSBram Moolenaar 962830c1afcSBram Moolenaar" Test for browsing multiple matching tags 963830c1afcSBram Moolenaarfunc Test_tag_multimatch() 964830c1afcSBram Moolenaar call writefile([ 965830c1afcSBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 966830c1afcSBram Moolenaar \ "first\tXfoo\t1", 967830c1afcSBram Moolenaar \ "first\tXfoo\t2", 968830c1afcSBram Moolenaar \ "first\tXfoo\t3"], 969830c1afcSBram Moolenaar \ 'Xtags') 970830c1afcSBram Moolenaar set tags=Xtags 971830c1afcSBram Moolenaar let code =<< trim [CODE] 972830c1afcSBram Moolenaar int first() {} 973830c1afcSBram Moolenaar int first() {} 974830c1afcSBram Moolenaar int first() {} 975830c1afcSBram Moolenaar [CODE] 976830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 977830c1afcSBram Moolenaar 978a1353b53SBram Moolenaar call settagstack(1, {'items' : []}) 979830c1afcSBram Moolenaar tag first 980830c1afcSBram Moolenaar tlast 981830c1afcSBram Moolenaar call assert_equal(3, line('.')) 982830c1afcSBram Moolenaar call assert_fails('tnext', 'E428:') 983830c1afcSBram Moolenaar tfirst 984830c1afcSBram Moolenaar call assert_equal(1, line('.')) 985830c1afcSBram Moolenaar call assert_fails('tprev', 'E425:') 986830c1afcSBram Moolenaar 987a1353b53SBram Moolenaar tlast 988a1353b53SBram Moolenaar call feedkeys("5\<CR>", 't') 989a1353b53SBram Moolenaar tselect first 990a1353b53SBram Moolenaar call assert_equal(2, gettagstack().curidx) 991a1353b53SBram Moolenaar 992a1353b53SBram Moolenaar set ignorecase 993a1353b53SBram Moolenaar tag FIRST 994a1353b53SBram Moolenaar tnext 995a1353b53SBram Moolenaar call assert_equal(2, line('.')) 996bc2b71d4SBram Moolenaar tlast 997bc2b71d4SBram Moolenaar tprev 998bc2b71d4SBram Moolenaar call assert_equal(2, line('.')) 999bc2b71d4SBram Moolenaar tNext 1000bc2b71d4SBram Moolenaar call assert_equal(1, line('.')) 1001a1353b53SBram Moolenaar set ignorecase& 1002a1353b53SBram Moolenaar 1003a1353b53SBram Moolenaar call delete('Xtags') 1004a1353b53SBram Moolenaar call delete('Xfoo') 1005a1353b53SBram Moolenaar set tags& 1006a1353b53SBram Moolenaar %bwipe 1007a1353b53SBram Moolenaarendfunc 1008a1353b53SBram Moolenaar 1009a1353b53SBram Moolenaar" Test for previewing multiple matching tags 1010a1353b53SBram Moolenaarfunc Test_preview_tag_multimatch() 1011a1353b53SBram Moolenaar call writefile([ 1012a1353b53SBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 1013a1353b53SBram Moolenaar \ "first\tXfoo\t1", 1014a1353b53SBram Moolenaar \ "first\tXfoo\t2", 1015a1353b53SBram Moolenaar \ "first\tXfoo\t3"], 1016a1353b53SBram Moolenaar \ 'Xtags') 1017a1353b53SBram Moolenaar set tags=Xtags 1018a1353b53SBram Moolenaar let code =<< trim [CODE] 1019a1353b53SBram Moolenaar int first() {} 1020a1353b53SBram Moolenaar int first() {} 1021a1353b53SBram Moolenaar int first() {} 1022a1353b53SBram Moolenaar [CODE] 1023a1353b53SBram Moolenaar call writefile(code, 'Xfoo') 1024a1353b53SBram Moolenaar 1025a1353b53SBram Moolenaar enew | only 1026a1353b53SBram Moolenaar ptag first 1027a1353b53SBram Moolenaar ptlast 1028a1353b53SBram Moolenaar wincmd P 1029a1353b53SBram Moolenaar call assert_equal(3, line('.')) 1030a1353b53SBram Moolenaar wincmd w 1031a1353b53SBram Moolenaar call assert_fails('ptnext', 'E428:') 1032a1353b53SBram Moolenaar ptprev 1033a1353b53SBram Moolenaar wincmd P 1034a1353b53SBram Moolenaar call assert_equal(2, line('.')) 1035a1353b53SBram Moolenaar wincmd w 1036a1353b53SBram Moolenaar ptfirst 1037a1353b53SBram Moolenaar wincmd P 1038a1353b53SBram Moolenaar call assert_equal(1, line('.')) 1039a1353b53SBram Moolenaar wincmd w 1040a1353b53SBram Moolenaar call assert_fails('ptprev', 'E425:') 1041a1353b53SBram Moolenaar ptnext 1042a1353b53SBram Moolenaar wincmd P 1043a1353b53SBram Moolenaar call assert_equal(2, line('.')) 1044a1353b53SBram Moolenaar wincmd w 1045a1353b53SBram Moolenaar ptlast 1046a1353b53SBram Moolenaar call feedkeys("5\<CR>", 't') 1047a1353b53SBram Moolenaar ptselect first 1048a1353b53SBram Moolenaar wincmd P 1049a1353b53SBram Moolenaar call assert_equal(3, line('.')) 1050a1353b53SBram Moolenaar 1051a1353b53SBram Moolenaar pclose 1052a1353b53SBram Moolenaar 1053a1353b53SBram Moolenaar call delete('Xtags') 1054a1353b53SBram Moolenaar call delete('Xfoo') 1055a1353b53SBram Moolenaar set tags& 1056a1353b53SBram Moolenaar %bwipe 1057a1353b53SBram Moolenaarendfunc 1058a1353b53SBram Moolenaar 1059a1353b53SBram Moolenaar" Test for jumping to multiple matching tags across multiple :tags commands 1060a1353b53SBram Moolenaarfunc Test_tnext_multimatch() 1061a1353b53SBram Moolenaar call writefile([ 1062a1353b53SBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 1063a1353b53SBram Moolenaar \ "first\tXfoo1\t1", 1064a1353b53SBram Moolenaar \ "first\tXfoo2\t1", 1065a1353b53SBram Moolenaar \ "first\tXfoo3\t1"], 1066a1353b53SBram Moolenaar \ 'Xtags') 1067a1353b53SBram Moolenaar set tags=Xtags 1068a1353b53SBram Moolenaar let code =<< trim [CODE] 1069a1353b53SBram Moolenaar int first() {} 1070a1353b53SBram Moolenaar [CODE] 1071a1353b53SBram Moolenaar call writefile(code, 'Xfoo1') 1072a1353b53SBram Moolenaar call writefile(code, 'Xfoo2') 1073a1353b53SBram Moolenaar call writefile(code, 'Xfoo3') 1074a1353b53SBram Moolenaar 1075a1353b53SBram Moolenaar tag first 1076a1353b53SBram Moolenaar tag first 1077a1353b53SBram Moolenaar pop 1078a1353b53SBram Moolenaar tnext 1079a1353b53SBram Moolenaar tnext 1080a1353b53SBram Moolenaar call assert_fails('tnext', 'E428:') 1081a1353b53SBram Moolenaar 1082a1353b53SBram Moolenaar call delete('Xtags') 1083a1353b53SBram Moolenaar call delete('Xfoo1') 1084a1353b53SBram Moolenaar call delete('Xfoo2') 1085a1353b53SBram Moolenaar call delete('Xfoo3') 1086a1353b53SBram Moolenaar set tags& 1087a1353b53SBram Moolenaar %bwipe 1088a1353b53SBram Moolenaarendfunc 1089a1353b53SBram Moolenaar 1090a1353b53SBram Moolenaar" Test for jumping to multiple matching tags in non-existing files 1091a1353b53SBram Moolenaarfunc Test_multimatch_non_existing_files() 1092a1353b53SBram Moolenaar call writefile([ 1093a1353b53SBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 1094a1353b53SBram Moolenaar \ "first\tXfoo1\t1", 1095a1353b53SBram Moolenaar \ "first\tXfoo2\t1", 1096a1353b53SBram Moolenaar \ "first\tXfoo3\t1"], 1097a1353b53SBram Moolenaar \ 'Xtags') 1098a1353b53SBram Moolenaar set tags=Xtags 1099a1353b53SBram Moolenaar 1100a1353b53SBram Moolenaar call settagstack(1, {'items' : []}) 1101a1353b53SBram Moolenaar call assert_fails('tag first', 'E429:') 1102a1353b53SBram Moolenaar call assert_equal(3, gettagstack().items[0].matchnr) 1103a1353b53SBram Moolenaar 1104a1353b53SBram Moolenaar call delete('Xtags') 1105a1353b53SBram Moolenaar set tags& 1106a1353b53SBram Moolenaar %bwipe 1107a1353b53SBram Moolenaarendfunc 1108a1353b53SBram Moolenaar 1109a1353b53SBram Moolenaarfunc Test_tselect_listing() 1110a1353b53SBram Moolenaar call writefile([ 1111a1353b53SBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 1112a1353b53SBram Moolenaar \ "first\tXfoo\t1" .. ';"' .. "\tv\ttyperef:typename:int\tfile:", 1113845e0ee5SBram Moolenaar \ "first\tXfoo\t2" .. ';"' .. "\tkind:v\ttyperef:typename:char\tfile:"], 1114a1353b53SBram Moolenaar \ 'Xtags') 1115a1353b53SBram Moolenaar set tags=Xtags 1116a1353b53SBram Moolenaar 1117a1353b53SBram Moolenaar let code =<< trim [CODE] 1118a1353b53SBram Moolenaar static int first; 1119a1353b53SBram Moolenaar static char first; 1120a1353b53SBram Moolenaar [CODE] 1121a1353b53SBram Moolenaar call writefile(code, 'Xfoo') 1122a1353b53SBram Moolenaar 1123a1353b53SBram Moolenaar call feedkeys("\<CR>", "t") 1124a1353b53SBram Moolenaar let l = split(execute("tselect first"), "\n") 1125a1353b53SBram Moolenaar let expected =<< [DATA] 1126a1353b53SBram Moolenaar # pri kind tag file 1127a1353b53SBram Moolenaar 1 FS v first Xfoo 1128a1353b53SBram Moolenaar typeref:typename:int 1129a1353b53SBram Moolenaar 1 1130a1353b53SBram Moolenaar 2 FS v first Xfoo 1131a1353b53SBram Moolenaar typeref:typename:char 1132a1353b53SBram Moolenaar 2 113313b8205bSBram MoolenaarType number and <Enter> (q or empty cancels): 1134a1353b53SBram Moolenaar[DATA] 1135a1353b53SBram Moolenaar call assert_equal(expected, l) 1136a1353b53SBram Moolenaar 1137830c1afcSBram Moolenaar call delete('Xtags') 1138830c1afcSBram Moolenaar call delete('Xfoo') 1139830c1afcSBram Moolenaar set tags& 1140830c1afcSBram Moolenaar %bwipe 1141830c1afcSBram Moolenaarendfunc 1142830c1afcSBram Moolenaar 1143bc2b71d4SBram Moolenaar" Test for :isearch, :ilist, :ijump and :isplit commands 1144bc2b71d4SBram Moolenaar" Test for [i, ]i, [I, ]I, [ CTRL-I, ] CTRL-I and CTRL-W i commands 1145bc2b71d4SBram Moolenaarfunc Test_inc_search() 1146bc2b71d4SBram Moolenaar new 11478a9bc95eSBram Moolenaar call setline(1, ['1:foo', '2:foo', 'foo', '3:foo', '4:foo', '===']) 1148bc2b71d4SBram Moolenaar call cursor(3, 1) 1149bc2b71d4SBram Moolenaar 1150bc2b71d4SBram Moolenaar " Test for [i and ]i 1151bc2b71d4SBram Moolenaar call assert_equal('1:foo', execute('normal [i')) 1152bc2b71d4SBram Moolenaar call assert_equal('2:foo', execute('normal 2[i')) 1153bc2b71d4SBram Moolenaar call assert_fails('normal 3[i', 'E387:') 1154bc2b71d4SBram Moolenaar call assert_equal('3:foo', execute('normal ]i')) 1155bc2b71d4SBram Moolenaar call assert_equal('4:foo', execute('normal 2]i')) 1156bc2b71d4SBram Moolenaar call assert_fails('normal 3]i', 'E389:') 11578a9bc95eSBram Moolenaar call assert_fails('normal G]i', 'E349:') 11588a9bc95eSBram Moolenaar call assert_fails('normal [i', 'E349:') 11598a9bc95eSBram Moolenaar call cursor(3, 1) 1160bc2b71d4SBram Moolenaar 1161bc2b71d4SBram Moolenaar " Test for :isearch 1162bc2b71d4SBram Moolenaar call assert_equal('1:foo', execute('isearch foo')) 1163bc2b71d4SBram Moolenaar call assert_equal('3:foo', execute('isearch 4 /foo/')) 1164bc2b71d4SBram Moolenaar call assert_fails('isearch 3 foo', 'E387:') 1165bc2b71d4SBram Moolenaar call assert_equal('3:foo', execute('+1,$isearch foo')) 1166bc2b71d4SBram Moolenaar call assert_fails('1,.-1isearch 3 foo', 'E389:') 1167bc2b71d4SBram Moolenaar call assert_fails('isearch bar', 'E389:') 1168bc2b71d4SBram Moolenaar call assert_fails('isearch /foo/3', 'E488:') 1169bc2b71d4SBram Moolenaar 1170bc2b71d4SBram Moolenaar " Test for [I and ]I 1171bc2b71d4SBram Moolenaar call assert_equal([ 1172bc2b71d4SBram Moolenaar \ ' 1: 1 1:foo', 1173bc2b71d4SBram Moolenaar \ ' 2: 2 2:foo', 1174bc2b71d4SBram Moolenaar \ ' 3: 3 foo', 1175bc2b71d4SBram Moolenaar \ ' 4: 4 3:foo', 1176bc2b71d4SBram Moolenaar \ ' 5: 5 4:foo'], split(execute('normal [I'), "\n")) 1177bc2b71d4SBram Moolenaar call assert_equal([ 1178bc2b71d4SBram Moolenaar \ ' 1: 4 3:foo', 1179bc2b71d4SBram Moolenaar \ ' 2: 5 4:foo'], split(execute('normal ]I'), "\n")) 11808a9bc95eSBram Moolenaar call assert_fails('normal G]I', 'E349:') 11818a9bc95eSBram Moolenaar call assert_fails('normal [I', 'E349:') 11828a9bc95eSBram Moolenaar call cursor(3, 1) 1183bc2b71d4SBram Moolenaar 1184bc2b71d4SBram Moolenaar " Test for :ilist 1185bc2b71d4SBram Moolenaar call assert_equal([ 1186bc2b71d4SBram Moolenaar \ ' 1: 1 1:foo', 1187bc2b71d4SBram Moolenaar \ ' 2: 2 2:foo', 1188bc2b71d4SBram Moolenaar \ ' 3: 3 foo', 1189bc2b71d4SBram Moolenaar \ ' 4: 4 3:foo', 1190bc2b71d4SBram Moolenaar \ ' 5: 5 4:foo'], split(execute('ilist foo'), "\n")) 1191bc2b71d4SBram Moolenaar call assert_equal([ 1192bc2b71d4SBram Moolenaar \ ' 1: 4 3:foo', 1193bc2b71d4SBram Moolenaar \ ' 2: 5 4:foo'], split(execute('+1,$ilist /foo/'), "\n")) 1194bc2b71d4SBram Moolenaar call assert_fails('ilist bar', 'E389:') 1195bc2b71d4SBram Moolenaar 1196bc2b71d4SBram Moolenaar " Test for [ CTRL-I and ] CTRL-I 1197bc2b71d4SBram Moolenaar exe "normal [\t" 1198bc2b71d4SBram Moolenaar call assert_equal([1, 3], [line('.'), col('.')]) 1199bc2b71d4SBram Moolenaar exe "normal 2j4[\t" 1200bc2b71d4SBram Moolenaar call assert_equal([4, 3], [line('.'), col('.')]) 1201bc2b71d4SBram Moolenaar call assert_fails("normal k3[\t", 'E387:') 1202bc2b71d4SBram Moolenaar call assert_fails("normal 6[\t", 'E389:') 1203bc2b71d4SBram Moolenaar exe "normal ]\t" 1204bc2b71d4SBram Moolenaar call assert_equal([4, 3], [line('.'), col('.')]) 1205bc2b71d4SBram Moolenaar exe "normal k2]\t" 1206bc2b71d4SBram Moolenaar call assert_equal([5, 3], [line('.'), col('.')]) 1207bc2b71d4SBram Moolenaar call assert_fails("normal 2k3]\t", 'E389:') 12088a9bc95eSBram Moolenaar call assert_fails("normal G[\t", 'E349:') 12098a9bc95eSBram Moolenaar call assert_fails("normal ]\t", 'E349:') 12108a9bc95eSBram Moolenaar call cursor(3, 1) 1211bc2b71d4SBram Moolenaar 1212bc2b71d4SBram Moolenaar " Test for :ijump 1213bc2b71d4SBram Moolenaar call cursor(3, 1) 1214bc2b71d4SBram Moolenaar ijump foo 1215bc2b71d4SBram Moolenaar call assert_equal([1, 3], [line('.'), col('.')]) 1216bc2b71d4SBram Moolenaar call cursor(3, 1) 1217bc2b71d4SBram Moolenaar ijump 4 /foo/ 1218bc2b71d4SBram Moolenaar call assert_equal([4, 3], [line('.'), col('.')]) 1219bc2b71d4SBram Moolenaar call cursor(3, 1) 1220bc2b71d4SBram Moolenaar call assert_fails('ijump 3 foo', 'E387:') 1221bc2b71d4SBram Moolenaar +,$ijump 2 foo 1222bc2b71d4SBram Moolenaar call assert_equal([5, 3], [line('.'), col('.')]) 1223bc2b71d4SBram Moolenaar call assert_fails('ijump bar', 'E389:') 1224bc2b71d4SBram Moolenaar 1225bc2b71d4SBram Moolenaar " Test for CTRL-W i 1226bc2b71d4SBram Moolenaar call cursor(3, 1) 1227bc2b71d4SBram Moolenaar wincmd i 1228bc2b71d4SBram Moolenaar call assert_equal([1, 3, 3], [line('.'), col('.'), winnr('$')]) 1229bc2b71d4SBram Moolenaar close 1230bc2b71d4SBram Moolenaar 5wincmd i 1231bc2b71d4SBram Moolenaar call assert_equal([5, 3, 3], [line('.'), col('.'), winnr('$')]) 1232bc2b71d4SBram Moolenaar close 1233bc2b71d4SBram Moolenaar call assert_fails('3wincmd i', 'E387:') 1234bc2b71d4SBram Moolenaar call assert_fails('6wincmd i', 'E389:') 12358a9bc95eSBram Moolenaar call assert_fails("normal G\<C-W>i", 'E349:') 12368a9bc95eSBram Moolenaar call cursor(3, 1) 1237bc2b71d4SBram Moolenaar 1238bc2b71d4SBram Moolenaar " Test for :isplit 1239bc2b71d4SBram Moolenaar isplit foo 1240bc2b71d4SBram Moolenaar call assert_equal([1, 3, 3], [line('.'), col('.'), winnr('$')]) 1241bc2b71d4SBram Moolenaar close 1242bc2b71d4SBram Moolenaar isplit 5 /foo/ 1243bc2b71d4SBram Moolenaar call assert_equal([5, 3, 3], [line('.'), col('.'), winnr('$')]) 1244bc2b71d4SBram Moolenaar close 1245bc2b71d4SBram Moolenaar call assert_fails('isplit 3 foo', 'E387:') 1246bc2b71d4SBram Moolenaar call assert_fails('isplit 6 foo', 'E389:') 1247bc2b71d4SBram Moolenaar call assert_fails('isplit bar', 'E389:') 1248bc2b71d4SBram Moolenaar 1249bc2b71d4SBram Moolenaar close! 1250bc2b71d4SBram Moolenaarendfunc 1251bc2b71d4SBram Moolenaar 1252bc2b71d4SBram Moolenaar" Test for :dsearch, :dlist, :djump and :dsplit commands 1253bc2b71d4SBram Moolenaar" Test for [d, ]d, [D, ]D, [ CTRL-D, ] CTRL-D and CTRL-W d commands 12541671f448SBram Moolenaarfunc Test_macro_search() 1255bc2b71d4SBram Moolenaar new 1256bc2b71d4SBram Moolenaar call setline(1, ['#define FOO 1', '#define FOO 2', '#define FOO 3', 1257bc2b71d4SBram Moolenaar \ '#define FOO 4', '#define FOO 5']) 1258bc2b71d4SBram Moolenaar call cursor(3, 9) 1259bc2b71d4SBram Moolenaar 1260bc2b71d4SBram Moolenaar " Test for [d and ]d 1261bc2b71d4SBram Moolenaar call assert_equal('#define FOO 1', execute('normal [d')) 1262bc2b71d4SBram Moolenaar call assert_equal('#define FOO 2', execute('normal 2[d')) 1263bc2b71d4SBram Moolenaar call assert_fails('normal 3[d', 'E387:') 1264bc2b71d4SBram Moolenaar call assert_equal('#define FOO 4', execute('normal ]d')) 1265bc2b71d4SBram Moolenaar call assert_equal('#define FOO 5', execute('normal 2]d')) 1266bc2b71d4SBram Moolenaar call assert_fails('normal 3]d', 'E388:') 1267bc2b71d4SBram Moolenaar 1268bc2b71d4SBram Moolenaar " Test for :dsearch 1269bc2b71d4SBram Moolenaar call assert_equal('#define FOO 1', execute('dsearch FOO')) 1270bc2b71d4SBram Moolenaar call assert_equal('#define FOO 5', execute('dsearch 5 /FOO/')) 1271bc2b71d4SBram Moolenaar call assert_fails('dsearch 3 FOO', 'E387:') 1272bc2b71d4SBram Moolenaar call assert_equal('#define FOO 4', execute('+1,$dsearch FOO')) 1273bc2b71d4SBram Moolenaar call assert_fails('1,.-1dsearch 3 FOO', 'E388:') 1274bc2b71d4SBram Moolenaar call assert_fails('dsearch BAR', 'E388:') 1275bc2b71d4SBram Moolenaar 1276bc2b71d4SBram Moolenaar " Test for [D and ]D 1277bc2b71d4SBram Moolenaar call assert_equal([ 1278bc2b71d4SBram Moolenaar \ ' 1: 1 #define FOO 1', 1279bc2b71d4SBram Moolenaar \ ' 2: 2 #define FOO 2', 1280bc2b71d4SBram Moolenaar \ ' 3: 3 #define FOO 3', 1281bc2b71d4SBram Moolenaar \ ' 4: 4 #define FOO 4', 1282bc2b71d4SBram Moolenaar \ ' 5: 5 #define FOO 5'], split(execute('normal [D'), "\n")) 1283bc2b71d4SBram Moolenaar call assert_equal([ 1284bc2b71d4SBram Moolenaar \ ' 1: 4 #define FOO 4', 1285bc2b71d4SBram Moolenaar \ ' 2: 5 #define FOO 5'], split(execute('normal ]D'), "\n")) 1286bc2b71d4SBram Moolenaar 1287bc2b71d4SBram Moolenaar " Test for :dlist 1288bc2b71d4SBram Moolenaar call assert_equal([ 1289bc2b71d4SBram Moolenaar \ ' 1: 1 #define FOO 1', 1290bc2b71d4SBram Moolenaar \ ' 2: 2 #define FOO 2', 1291bc2b71d4SBram Moolenaar \ ' 3: 3 #define FOO 3', 1292bc2b71d4SBram Moolenaar \ ' 4: 4 #define FOO 4', 1293bc2b71d4SBram Moolenaar \ ' 5: 5 #define FOO 5'], split(execute('dlist FOO'), "\n")) 1294bc2b71d4SBram Moolenaar call assert_equal([ 1295bc2b71d4SBram Moolenaar \ ' 1: 4 #define FOO 4', 1296bc2b71d4SBram Moolenaar \ ' 2: 5 #define FOO 5'], split(execute('+1,$dlist /FOO/'), "\n")) 1297bc2b71d4SBram Moolenaar call assert_fails('dlist BAR', 'E388:') 1298bc2b71d4SBram Moolenaar 1299bc2b71d4SBram Moolenaar " Test for [ CTRL-D and ] CTRL-D 1300bc2b71d4SBram Moolenaar exe "normal [\<C-D>" 1301bc2b71d4SBram Moolenaar call assert_equal([1, 9], [line('.'), col('.')]) 1302bc2b71d4SBram Moolenaar exe "normal 2j4[\<C-D>" 1303bc2b71d4SBram Moolenaar call assert_equal([4, 9], [line('.'), col('.')]) 1304bc2b71d4SBram Moolenaar call assert_fails("normal k3[\<C-D>", 'E387:') 1305bc2b71d4SBram Moolenaar call assert_fails("normal 6[\<C-D>", 'E388:') 1306bc2b71d4SBram Moolenaar exe "normal ]\<C-D>" 1307bc2b71d4SBram Moolenaar call assert_equal([4, 9], [line('.'), col('.')]) 1308bc2b71d4SBram Moolenaar exe "normal k2]\<C-D>" 1309bc2b71d4SBram Moolenaar call assert_equal([5, 9], [line('.'), col('.')]) 1310bc2b71d4SBram Moolenaar call assert_fails("normal 2k3]\<C-D>", 'E388:') 1311bc2b71d4SBram Moolenaar 1312bc2b71d4SBram Moolenaar " Test for :djump 1313bc2b71d4SBram Moolenaar call cursor(3, 9) 1314bc2b71d4SBram Moolenaar djump FOO 1315bc2b71d4SBram Moolenaar call assert_equal([1, 9], [line('.'), col('.')]) 1316bc2b71d4SBram Moolenaar call cursor(3, 9) 1317bc2b71d4SBram Moolenaar djump 4 /FOO/ 1318bc2b71d4SBram Moolenaar call assert_equal([4, 9], [line('.'), col('.')]) 1319bc2b71d4SBram Moolenaar call cursor(3, 9) 1320bc2b71d4SBram Moolenaar call assert_fails('djump 3 FOO', 'E387:') 1321bc2b71d4SBram Moolenaar +,$djump 2 FOO 1322bc2b71d4SBram Moolenaar call assert_equal([5, 9], [line('.'), col('.')]) 1323bc2b71d4SBram Moolenaar call assert_fails('djump BAR', 'E388:') 1324bc2b71d4SBram Moolenaar 1325bc2b71d4SBram Moolenaar " Test for CTRL-W d 1326bc2b71d4SBram Moolenaar call cursor(3, 9) 1327bc2b71d4SBram Moolenaar wincmd d 1328bc2b71d4SBram Moolenaar call assert_equal([1, 9, 3], [line('.'), col('.'), winnr('$')]) 1329bc2b71d4SBram Moolenaar close 1330bc2b71d4SBram Moolenaar 5wincmd d 1331bc2b71d4SBram Moolenaar call assert_equal([5, 9, 3], [line('.'), col('.'), winnr('$')]) 1332bc2b71d4SBram Moolenaar close 1333bc2b71d4SBram Moolenaar call assert_fails('3wincmd d', 'E387:') 1334bc2b71d4SBram Moolenaar call assert_fails('6wincmd d', 'E388:') 13355d3c9f8cSBram Moolenaar new 13365d3c9f8cSBram Moolenaar call assert_fails("normal \<C-W>d", 'E349:') 13375d3c9f8cSBram Moolenaar call assert_fails("normal \<C-W>\<C-D>", 'E349:') 13385d3c9f8cSBram Moolenaar close 1339bc2b71d4SBram Moolenaar 1340bc2b71d4SBram Moolenaar " Test for :dsplit 1341bc2b71d4SBram Moolenaar dsplit FOO 1342bc2b71d4SBram Moolenaar call assert_equal([1, 9, 3], [line('.'), col('.'), winnr('$')]) 1343bc2b71d4SBram Moolenaar close 1344bc2b71d4SBram Moolenaar dsplit 5 /FOO/ 1345bc2b71d4SBram Moolenaar call assert_equal([5, 9, 3], [line('.'), col('.'), winnr('$')]) 1346bc2b71d4SBram Moolenaar close 1347bc2b71d4SBram Moolenaar call assert_fails('dsplit 3 FOO', 'E387:') 1348bc2b71d4SBram Moolenaar call assert_fails('dsplit 6 FOO', 'E388:') 1349bc2b71d4SBram Moolenaar call assert_fails('dsplit BAR', 'E388:') 1350bc2b71d4SBram Moolenaar 1351bc2b71d4SBram Moolenaar close! 1352bc2b71d4SBram Moolenaarendfunc 1353bc2b71d4SBram Moolenaar 13541671f448SBram Moolenaar" Test for [*, [/, ]* and ]/ 13551671f448SBram Moolenaarfunc Test_comment_search() 13561671f448SBram Moolenaar new 13571671f448SBram Moolenaar call setline(1, ['', '/*', ' *', ' *', ' */']) 13581671f448SBram Moolenaar normal! 4gg[/ 13591671f448SBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 13601671f448SBram Moolenaar normal! 3gg[* 13611671f448SBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 13621671f448SBram Moolenaar normal! 3gg]/ 13631671f448SBram Moolenaar call assert_equal([5, 3], [line('.'), col('.')]) 13641671f448SBram Moolenaar normal! 3gg]* 13651671f448SBram Moolenaar call assert_equal([5, 3], [line('.'), col('.')]) 13661671f448SBram Moolenaar %d 13671671f448SBram Moolenaar call setline(1, ['', '/*', ' *', ' *']) 13681671f448SBram Moolenaar call assert_beeps('normal! 3gg]/') 13691671f448SBram Moolenaar %d 13701671f448SBram Moolenaar call setline(1, ['', ' *', ' *', ' */']) 13711671f448SBram Moolenaar call assert_beeps('normal! 4gg[/') 13721671f448SBram Moolenaar %d 13731671f448SBram Moolenaar call setline(1, ' /* comment */') 13741671f448SBram Moolenaar normal! 15|[/ 13751671f448SBram Moolenaar call assert_equal(9, col('.')) 13761671f448SBram Moolenaar normal! 15|]/ 13771671f448SBram Moolenaar call assert_equal(21, col('.')) 13781671f448SBram Moolenaar call setline(1, ' comment */') 13791671f448SBram Moolenaar call assert_beeps('normal! 15|[/') 13801671f448SBram Moolenaar call setline(1, ' /* comment') 13811671f448SBram Moolenaar call assert_beeps('normal! 15|]/') 13821671f448SBram Moolenaar close! 13831671f448SBram Moolenaarendfunc 13841671f448SBram Moolenaar 13853d9207adSBram Moolenaar" Test for the 'taglength' option 13863d9207adSBram Moolenaarfunc Test_tag_length() 13873d9207adSBram Moolenaar set tags=Xtags 13883d9207adSBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 13893d9207adSBram Moolenaar \ "tame\tXfile1\t1;", 13903d9207adSBram Moolenaar \ "tape\tXfile2\t1;"], 'Xtags') 13913d9207adSBram Moolenaar call writefile(['tame'], 'Xfile1') 13923d9207adSBram Moolenaar call writefile(['tape'], 'Xfile2') 13933d9207adSBram Moolenaar 13943d9207adSBram Moolenaar " Jumping to the tag 'tape', should instead jump to 'tame' 13953d9207adSBram Moolenaar new 13963d9207adSBram Moolenaar set taglength=2 13973d9207adSBram Moolenaar tag tape 13983d9207adSBram Moolenaar call assert_equal('Xfile1', @%) 13993d9207adSBram Moolenaar " Tag search should jump to the right tag 14003d9207adSBram Moolenaar enew 14013d9207adSBram Moolenaar tag /^tape$ 14023d9207adSBram Moolenaar call assert_equal('Xfile2', @%) 14033d9207adSBram Moolenaar 14043d9207adSBram Moolenaar call delete('Xtags') 14053d9207adSBram Moolenaar call delete('Xfile1') 14063d9207adSBram Moolenaar call delete('Xfile2') 14073d9207adSBram Moolenaar set tags& taglength& 14083d9207adSBram Moolenaarendfunc 14093d9207adSBram Moolenaar 1410845e0ee5SBram Moolenaar" Tests for errors in a tags file 1411845e0ee5SBram Moolenaarfunc Test_tagfile_errors() 1412845e0ee5SBram Moolenaar set tags=Xtags 1413845e0ee5SBram Moolenaar 1414845e0ee5SBram Moolenaar " missing search pattern or line number for a tag 1415845e0ee5SBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 1416845e0ee5SBram Moolenaar \ "foo\tXfile\t"], 'Xtags', 'b') 1417845e0ee5SBram Moolenaar call writefile(['foo'], 'Xfile') 1418845e0ee5SBram Moolenaar 1419845e0ee5SBram Moolenaar enew 1420845e0ee5SBram Moolenaar tag foo 1421845e0ee5SBram Moolenaar call assert_equal('', @%) 1422845e0ee5SBram Moolenaar let caught_431 = v:false 1423845e0ee5SBram Moolenaar try 1424845e0ee5SBram Moolenaar eval taglist('.*') 1425845e0ee5SBram Moolenaar catch /:E431:/ 1426845e0ee5SBram Moolenaar let caught_431 = v:true 1427845e0ee5SBram Moolenaar endtry 1428845e0ee5SBram Moolenaar call assert_equal(v:true, caught_431) 1429845e0ee5SBram Moolenaar 1430845e0ee5SBram Moolenaar call delete('Xtags') 1431845e0ee5SBram Moolenaar call delete('Xfile') 1432845e0ee5SBram Moolenaar set tags& 1433845e0ee5SBram Moolenaarendfunc 1434845e0ee5SBram Moolenaar 1435845e0ee5SBram Moolenaar" When :stag fails to open the file, should close the new window 1436845e0ee5SBram Moolenaarfunc Test_stag_close_window_on_error() 1437845e0ee5SBram Moolenaar new | only 1438845e0ee5SBram Moolenaar set tags=Xtags 1439845e0ee5SBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 1440845e0ee5SBram Moolenaar \ "foo\tXfile\t1"], 'Xtags') 1441845e0ee5SBram Moolenaar call writefile(['foo'], 'Xfile') 1442845e0ee5SBram Moolenaar call writefile([], '.Xfile.swp') 1443845e0ee5SBram Moolenaar " Remove the catch-all that runtest.vim adds 1444845e0ee5SBram Moolenaar au! SwapExists 1445845e0ee5SBram Moolenaar augroup StagTest 1446845e0ee5SBram Moolenaar au! 1447845e0ee5SBram Moolenaar autocmd SwapExists Xfile let v:swapchoice='q' 1448845e0ee5SBram Moolenaar augroup END 1449845e0ee5SBram Moolenaar 1450845e0ee5SBram Moolenaar stag foo 1451845e0ee5SBram Moolenaar call assert_equal(1, winnr('$')) 1452845e0ee5SBram Moolenaar call assert_equal('', @%) 1453845e0ee5SBram Moolenaar 1454845e0ee5SBram Moolenaar augroup StagTest 1455845e0ee5SBram Moolenaar au! 1456845e0ee5SBram Moolenaar augroup END 1457845e0ee5SBram Moolenaar call delete('Xfile') 1458845e0ee5SBram Moolenaar call delete('.Xfile.swp') 1459845e0ee5SBram Moolenaar set tags& 1460845e0ee5SBram Moolenaarendfunc 1461845e0ee5SBram Moolenaar 14629e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1463