16d20e175SBram Moolenaar" Test for cscope commands. 26d20e175SBram Moolenaar 3edf634e0SBram Moolenaarif !has('cscope') || !executable('cscope') || !has('quickfix') 46d20e175SBram Moolenaar finish 56d20e175SBram Moolenaarendif 66d20e175SBram Moolenaar 7812ad4f3SBram Moolenaarfunc CscopeSetupOrClean(setup) 8812ad4f3SBram Moolenaar if a:setup 9812ad4f3SBram Moolenaar noa sp ../memfile_test.c 10812ad4f3SBram Moolenaar saveas! Xmemfile_test.c 11812ad4f3SBram Moolenaar call system('cscope -bk -fXcscope.out Xmemfile_test.c') 12812ad4f3SBram Moolenaar call system('cscope -bk -fXcscope2.out Xmemfile_test.c') 13812ad4f3SBram Moolenaar cscope add Xcscope.out 14812ad4f3SBram Moolenaar set cscopequickfix=s-,g-,d-,c-,t-,e-,f-,i-,a- 15812ad4f3SBram Moolenaar else 16812ad4f3SBram Moolenaar cscope kill -1 17812ad4f3SBram Moolenaar for file in ['Xcscope.out', 'Xcscope2.out', 'Xmemfile_test.c'] 18812ad4f3SBram Moolenaar call delete(file) 19812ad4f3SBram Moolenaar endfo 20812ad4f3SBram Moolenaar endif 21812ad4f3SBram Moolenaarendfunc 22812ad4f3SBram Moolenaar 23812ad4f3SBram Moolenaarfunc Test_cscopeWithCscopeConnections() 24812ad4f3SBram Moolenaar call CscopeSetupOrClean(1) 25812ad4f3SBram Moolenaar " Test 0: E568: duplicate cscope database not added 26812ad4f3SBram Moolenaar try 27812ad4f3SBram Moolenaar set nocscopeverbose 28812ad4f3SBram Moolenaar cscope add Xcscope.out 29812ad4f3SBram Moolenaar set cscopeverbose 30812ad4f3SBram Moolenaar catch 31812ad4f3SBram Moolenaar call assert_true(0) 32812ad4f3SBram Moolenaar endtry 33812ad4f3SBram Moolenaar call assert_fails('cscope add', 'E560') 34812ad4f3SBram Moolenaar call assert_fails('cscope add Xcscope.out', 'E568') 35812ad4f3SBram Moolenaar call assert_fails('cscope add doesnotexist.out', 'E563') 36812ad4f3SBram Moolenaar 37812ad4f3SBram Moolenaar " Test 1: Find this C-Symbol 38812ad4f3SBram Moolenaar for cmd in ['cs find s main', 'cs find 0 main'] 39812ad4f3SBram Moolenaar let a=execute(cmd) 40812ad4f3SBram Moolenaar " Test 1.1 test where it moves the cursor 41812ad4f3SBram Moolenaar call assert_equal('main(void)', getline('.')) 42812ad4f3SBram Moolenaar " Test 1.2 test the output of the :cs command 43812ad4f3SBram Moolenaar call assert_match('\n(1 of 1): <<main>> main(void )', a) 44812ad4f3SBram Moolenaar endfor 45812ad4f3SBram Moolenaar 46812ad4f3SBram Moolenaar " Test 2: Find this definition 47812ad4f3SBram Moolenaar for cmd in ['cs find g test_mf_hash', 'cs find 1 test_mf_hash'] 48812ad4f3SBram Moolenaar exe cmd 49812ad4f3SBram Moolenaar call assert_equal(['', '/*', ' * Test mf_hash_*() functions.', ' */', ' static void', 'test_mf_hash(void)', '{'], getline(line('.')-5, line('.')+1)) 50812ad4f3SBram Moolenaar endfor 51812ad4f3SBram Moolenaar 52812ad4f3SBram Moolenaar " Test 3: Find functions called by this function 53812ad4f3SBram Moolenaar for cmd in ['cs find d test_mf_hash', 'cs find 2 test_mf_hash'] 54812ad4f3SBram Moolenaar let a=execute(cmd) 55812ad4f3SBram Moolenaar call assert_match('\n(1 of 42): <<mf_hash_init>> mf_hash_init(&ht);', a) 56812ad4f3SBram Moolenaar call assert_equal(' mf_hash_init(&ht);', getline('.')) 57812ad4f3SBram Moolenaar endfor 58812ad4f3SBram Moolenaar 59812ad4f3SBram Moolenaar " Test 4: Find functions calling this function 60812ad4f3SBram Moolenaar for cmd in ['cs find c test_mf_hash', 'cs find 3 test_mf_hash'] 61812ad4f3SBram Moolenaar let a=execute(cmd) 62812ad4f3SBram Moolenaar call assert_match('\n(1 of 1): <<main>> test_mf_hash();', a) 63812ad4f3SBram Moolenaar call assert_equal(' test_mf_hash();', getline('.')) 64812ad4f3SBram Moolenaar endfor 65812ad4f3SBram Moolenaar 66812ad4f3SBram Moolenaar " Test 5: Find this text string 67812ad4f3SBram Moolenaar for cmd in ['cs find t Bram', 'cs find 4 Bram'] 68812ad4f3SBram Moolenaar let a=execute(cmd) 69812ad4f3SBram Moolenaar call assert_match('(1 of 1): <<<unknown>>> \* VIM - Vi IMproved^Iby Bram Moolenaar', a) 70812ad4f3SBram Moolenaar call assert_equal(' * VIM - Vi IMproved by Bram Moolenaar', getline('.')) 71812ad4f3SBram Moolenaar endfor 72812ad4f3SBram Moolenaar 73812ad4f3SBram Moolenaar " Test 6: Find this egrep pattern 74812ad4f3SBram Moolenaar " test all matches returned by cscope 75812ad4f3SBram Moolenaar for cmd in ['cs find e ^\#includ.', 'cs find 6 ^\#includ.'] 76812ad4f3SBram Moolenaar let a=execute(cmd) 77812ad4f3SBram Moolenaar call assert_match('\n(1 of 3): <<<unknown>>> #include <assert.h>', a) 78812ad4f3SBram Moolenaar call assert_equal('#include <assert.h>', getline('.')) 79812ad4f3SBram Moolenaar cnext 80812ad4f3SBram Moolenaar call assert_equal('#include "main.c"', getline('.')) 81812ad4f3SBram Moolenaar cnext 82812ad4f3SBram Moolenaar call assert_equal('#include "memfile.c"', getline('.')) 83812ad4f3SBram Moolenaar call assert_fails('cnext', 'E553:') 84812ad4f3SBram Moolenaar endfor 85812ad4f3SBram Moolenaar 86812ad4f3SBram Moolenaar " Test 7: Find the same egrep pattern using lcscope this time. 87812ad4f3SBram Moolenaar let a=execute('lcs find e ^\#includ.') 88812ad4f3SBram Moolenaar call assert_match('\n(1 of 3): <<<unknown>>> #include <assert.h>', a) 89812ad4f3SBram Moolenaar call assert_equal('#include <assert.h>', getline('.')) 90812ad4f3SBram Moolenaar lnext 91812ad4f3SBram Moolenaar call assert_equal('#include "main.c"', getline('.')) 92812ad4f3SBram Moolenaar lnext 93812ad4f3SBram Moolenaar call assert_equal('#include "memfile.c"', getline('.')) 94812ad4f3SBram Moolenaar call assert_fails('lnext', 'E553:') 95812ad4f3SBram Moolenaar 96812ad4f3SBram Moolenaar " Test 8: Find this file 97812ad4f3SBram Moolenaar for cmd in ['cs find f Xmemfile_test.c', 'cs find 7 Xmemfile_test.c'] 98812ad4f3SBram Moolenaar enew 99812ad4f3SBram Moolenaar let a=execute(cmd) 100*4792255eSBram Moolenaar call assert_true(a =~ '"Xmemfile_test.c" \d\+L, \d\+C') 101812ad4f3SBram Moolenaar call assert_equal('Xmemfile_test.c', @%) 102812ad4f3SBram Moolenaar endfor 103812ad4f3SBram Moolenaar 104812ad4f3SBram Moolenaar " Test 9: Find files #including this file 105812ad4f3SBram Moolenaar for cmd in ['cs find i assert.h', 'cs find 8 assert.h'] 106812ad4f3SBram Moolenaar enew 107812ad4f3SBram Moolenaar let a=execute(cmd) 108*4792255eSBram Moolenaar let alines = split(a, '\n', 1) 109*4792255eSBram Moolenaar call assert_equal('', alines[0]) 110*4792255eSBram Moolenaar call assert_true(alines[1] =~ '"Xmemfile_test.c" \d\+L, \d\+C') 111*4792255eSBram Moolenaar call assert_equal('(1 of 1): <<global>> #include <assert.h>', alines[2]) 112812ad4f3SBram Moolenaar call assert_equal('#include <assert.h>', getline('.')) 113812ad4f3SBram Moolenaar endfor 114812ad4f3SBram Moolenaar 115812ad4f3SBram Moolenaar " Test 10: Invalid find command 116812ad4f3SBram Moolenaar call assert_fails('cs find x', 'E560:') 117812ad4f3SBram Moolenaar 118812ad4f3SBram Moolenaar " Test 11: Find places where this symbol is assigned a value 119812ad4f3SBram Moolenaar " this needs a cscope >= 15.8 120812ad4f3SBram Moolenaar " unfortunately, Travis has cscope version 15.7 121812ad4f3SBram Moolenaar let cscope_version=systemlist('cscope --version')[0] 122812ad4f3SBram Moolenaar let cs_version=str2float(matchstr(cscope_version, '\d\+\(\.\d\+\)\?')) 123812ad4f3SBram Moolenaar if cs_version >= 15.8 124812ad4f3SBram Moolenaar for cmd in ['cs find a item', 'cs find 9 item'] 125812ad4f3SBram Moolenaar let a=execute(cmd) 126812ad4f3SBram Moolenaar call assert_equal(['', '(1 of 4): <<test_mf_hash>> item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);'], split(a, '\n', 1)) 127812ad4f3SBram Moolenaar call assert_equal(' item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);', getline('.')) 128812ad4f3SBram Moolenaar cnext 129812ad4f3SBram Moolenaar call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) 130812ad4f3SBram Moolenaar cnext 131812ad4f3SBram Moolenaar call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) 132812ad4f3SBram Moolenaar cnext 133812ad4f3SBram Moolenaar call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) 134812ad4f3SBram Moolenaar endfor 135812ad4f3SBram Moolenaar endif 136812ad4f3SBram Moolenaar 137812ad4f3SBram Moolenaar " Test 12: leading whitespace is not removed for cscope find text 138812ad4f3SBram Moolenaar let a=execute('cscope find t test_mf_hash') 139812ad4f3SBram Moolenaar call assert_equal(['', '(1 of 1): <<<unknown>>> test_mf_hash();'], split(a, '\n', 1)) 140812ad4f3SBram Moolenaar call assert_equal(' test_mf_hash();', getline('.')) 141812ad4f3SBram Moolenaar 142812ad4f3SBram Moolenaar " Test 13: test with scscope 143812ad4f3SBram Moolenaar let a=execute('scs find t Bram') 144812ad4f3SBram Moolenaar call assert_match('(1 of 1): <<<unknown>>> \* VIM - Vi IMproved^Iby Bram Moolenaar', a) 145812ad4f3SBram Moolenaar call assert_equal(' * VIM - Vi IMproved by Bram Moolenaar', getline('.')) 146812ad4f3SBram Moolenaar 147812ad4f3SBram Moolenaar " Test 14: cscope help 148812ad4f3SBram Moolenaar for cmd in ['cs', 'cs help', 'cs xxx'] 149812ad4f3SBram Moolenaar let a=execute(cmd) 150812ad4f3SBram Moolenaar call assert_match('^cscope commands:\n', a) 151812ad4f3SBram Moolenaar call assert_match('\nadd :', a) 152812ad4f3SBram Moolenaar call assert_match('\nfind :', a) 153812ad4f3SBram Moolenaar call assert_match('\nhelp : Show this message', a) 154812ad4f3SBram Moolenaar call assert_match('\nkill : Kill a connection', a) 155812ad4f3SBram Moolenaar call assert_match('\nreset: Reinit all connections', a) 156812ad4f3SBram Moolenaar call assert_match('\nshow : Show connections', a) 157812ad4f3SBram Moolenaar endfor 158812ad4f3SBram Moolenaar let a=execute('scscope help') 159812ad4f3SBram Moolenaar call assert_match('This cscope command does not support splitting the window\.', a) 160812ad4f3SBram Moolenaar 161812ad4f3SBram Moolenaar " Test 15: reset connections 162812ad4f3SBram Moolenaar let a=execute('cscope reset') 163812ad4f3SBram Moolenaar call assert_match('\nAdded cscope database.*Xcscope.out (#0)', a) 164812ad4f3SBram Moolenaar call assert_match('\nAll cscope databases reset', a) 165812ad4f3SBram Moolenaar 166812ad4f3SBram Moolenaar " Test 16: cscope show 167812ad4f3SBram Moolenaar let a=execute('cscope show') 168812ad4f3SBram Moolenaar call assert_match('\n 0 \d\+.*Xcscope.out\s*<none>', a) 169812ad4f3SBram Moolenaar 170812ad4f3SBram Moolenaar " Test 17: cstag and 'csto' option 171812ad4f3SBram Moolenaar set csto=0 172812ad4f3SBram Moolenaar let a=execute('cstag TEST_COUNT') 173812ad4f3SBram Moolenaar call assert_match('(1 of 1): <<TEST_COUNT>> #define TEST_COUNT 50000', a) 174812ad4f3SBram Moolenaar call assert_equal('#define TEST_COUNT 50000', getline('.')) 175812ad4f3SBram Moolenaar set csto=1 176812ad4f3SBram Moolenaar let a=execute('cstag index_to_key') 177812ad4f3SBram Moolenaar call assert_match('(1 of 1): <<index_to_key>> #define index_to_key(i) ((i) ^ 15167)', a) 178812ad4f3SBram Moolenaar call assert_equal('#define index_to_key(i) ((i) ^ 15167)', getline('.')) 179812ad4f3SBram Moolenaar call assert_fails('cstag xxx', 'E257:') 180812ad4f3SBram Moolenaar call assert_fails('cstag', 'E562:') 181812ad4f3SBram Moolenaar 182812ad4f3SBram Moolenaar " Test 18: 'cst' option 183812ad4f3SBram Moolenaar set nocst 184812ad4f3SBram Moolenaar call assert_fails('tag TEST_COUNT', 'E426:') 185812ad4f3SBram Moolenaar set cst 186812ad4f3SBram Moolenaar let a=execute('tag TEST_COUNT') 187812ad4f3SBram Moolenaar call assert_match('(1 of 1): <<TEST_COUNT>> #define TEST_COUNT 50000', a) 188812ad4f3SBram Moolenaar call assert_equal('#define TEST_COUNT 50000', getline('.')) 189812ad4f3SBram Moolenaar let a=execute('tags') 190812ad4f3SBram Moolenaar call assert_match('1 1 TEST_COUNT\s\+\d\+\s\+#define index_to_key', a) 191812ad4f3SBram Moolenaar 192812ad4f3SBram Moolenaar " Test 19: this should trigger call to cs_print_tags() 193812ad4f3SBram Moolenaar " Unclear how to check result though, we just exercise the code. 194812ad4f3SBram Moolenaar set cst cscopequickfix=s0 195812ad4f3SBram Moolenaar call feedkeys(":cs find s main\<CR>", 't') 196812ad4f3SBram Moolenaar 197812ad4f3SBram Moolenaar " Test 20: cscope kill 198812ad4f3SBram Moolenaar call assert_fails('cscope kill 2', 'E261:') 199812ad4f3SBram Moolenaar call assert_fails('cscope kill xxx', 'E261:') 200812ad4f3SBram Moolenaar 201812ad4f3SBram Moolenaar let a=execute('cscope kill 0') 202812ad4f3SBram Moolenaar call assert_match('cscope connection 0 closed', a) 203812ad4f3SBram Moolenaar 204812ad4f3SBram Moolenaar cscope add Xcscope.out 205812ad4f3SBram Moolenaar let a=execute('cscope kill Xcscope.out') 206812ad4f3SBram Moolenaar call assert_match('cscope connection Xcscope.out closed', a) 207812ad4f3SBram Moolenaar 208812ad4f3SBram Moolenaar cscope add Xcscope.out . 209812ad4f3SBram Moolenaar let a=execute('cscope kill -1') 210812ad4f3SBram Moolenaar call assert_match('cscope connection .*Xcscope.out closed', a) 211812ad4f3SBram Moolenaar let a=execute('cscope kill -1') 212812ad4f3SBram Moolenaar call assert_equal('', a) 213812ad4f3SBram Moolenaar 214812ad4f3SBram Moolenaar " Test 21: 'csprg' option 215812ad4f3SBram Moolenaar call assert_equal('cscope', &csprg) 216812ad4f3SBram Moolenaar set csprg=doesnotexist 217812ad4f3SBram Moolenaar call assert_fails('cscope add Xcscope2.out', 'E609:') 218812ad4f3SBram Moolenaar set csprg=cscope 219812ad4f3SBram Moolenaar 220812ad4f3SBram Moolenaar " Test 22: multiple cscope connections 221812ad4f3SBram Moolenaar cscope add Xcscope.out 222812ad4f3SBram Moolenaar cscope add Xcscope2.out . -C 223812ad4f3SBram Moolenaar let a=execute('cscope show') 224812ad4f3SBram Moolenaar call assert_match('\n 0 \d\+.*Xcscope.out\s*<none>', a) 225812ad4f3SBram Moolenaar call assert_match('\n 1 \d\+.*Xcscope2.out\s*\.', a) 226812ad4f3SBram Moolenaar 227812ad4f3SBram Moolenaar " Test 23: test Ex command line completion 228812ad4f3SBram Moolenaar call feedkeys(":cs \<C-A>\<C-B>\"\<CR>", 'tx') 229812ad4f3SBram Moolenaar call assert_equal('"cs add find help kill reset show', @:) 230812ad4f3SBram Moolenaar 231812ad4f3SBram Moolenaar call feedkeys(":scs \<C-A>\<C-B>\"\<CR>", 'tx') 232812ad4f3SBram Moolenaar call assert_equal('"scs find', @:) 233812ad4f3SBram Moolenaar 234812ad4f3SBram Moolenaar call feedkeys(":cs find \<C-A>\<C-B>\"\<CR>", 'tx') 235812ad4f3SBram Moolenaar call assert_equal('"cs find a c d e f g i s t', @:) 236812ad4f3SBram Moolenaar 237812ad4f3SBram Moolenaar call feedkeys(":cs kill \<C-A>\<C-B>\"\<CR>", 'tx') 238812ad4f3SBram Moolenaar call assert_equal('"cs kill -1 0 1', @:) 239812ad4f3SBram Moolenaar 240812ad4f3SBram Moolenaar call feedkeys(":cs add Xcscope\<C-A>\<C-B>\"\<CR>", 'tx') 241812ad4f3SBram Moolenaar call assert_equal('"cs add Xcscope.out Xcscope2.out', @:) 242812ad4f3SBram Moolenaar 243812ad4f3SBram Moolenaar " Test 24: cscope_connection() 244812ad4f3SBram Moolenaar call assert_equal(cscope_connection(), 1) 245812ad4f3SBram Moolenaar call assert_equal(cscope_connection(0, 'out'), 1) 246812ad4f3SBram Moolenaar call assert_equal(cscope_connection(0, 'xxx'), 1) 247812ad4f3SBram Moolenaar call assert_equal(cscope_connection(1, 'out'), 1) 248812ad4f3SBram Moolenaar call assert_equal(cscope_connection(1, 'xxx'), 0) 249812ad4f3SBram Moolenaar call assert_equal(cscope_connection(2, 'out'), 0) 250812ad4f3SBram Moolenaar call assert_equal(cscope_connection(3, 'xxx', '..'), 0) 251812ad4f3SBram Moolenaar call assert_equal(cscope_connection(3, 'out', 'xxx'), 0) 252812ad4f3SBram Moolenaar call assert_equal(cscope_connection(3, 'out', '.'), 1) 253812ad4f3SBram Moolenaar call assert_equal(cscope_connection(4, 'out', '.'), 0) 254812ad4f3SBram Moolenaar 255812ad4f3SBram Moolenaar " CleanUp 256812ad4f3SBram Moolenaar call CscopeSetupOrClean(0) 257812ad4f3SBram Moolenaar 258812ad4f3SBram Moolenaarendfunc 259812ad4f3SBram Moolenaar 2606d20e175SBram Moolenaarfunc Test_cscopequickfix() 2616d20e175SBram Moolenaar set cscopequickfix=s-,g-,d+,c-,t+,e-,f0,i-,a- 2626d20e175SBram Moolenaar call assert_equal('s-,g-,d+,c-,t+,e-,f0,i-,a-', &cscopequickfix) 2636d20e175SBram Moolenaar 2646d20e175SBram Moolenaar call assert_fails('set cscopequickfix=x-', 'E474:') 2656d20e175SBram Moolenaar call assert_fails('set cscopequickfix=s', 'E474:') 2666d20e175SBram Moolenaar call assert_fails('set cscopequickfix=s7', 'E474:') 2676d20e175SBram Moolenaar call assert_fails('set cscopequickfix=s-a', 'E474:') 2686d20e175SBram Moolenaarendfunc 269edf634e0SBram Moolenaar 270812ad4f3SBram Moolenaarfunc Test_withoutCscopeConnection() 271812ad4f3SBram Moolenaar call assert_equal(cscope_connection(), 0) 272edf634e0SBram Moolenaar 273812ad4f3SBram Moolenaar call assert_fails('cscope find s main', 'E567:') 274edf634e0SBram Moolenaar let a=execute('cscope show') 275812ad4f3SBram Moolenaar call assert_match('no cscope connections', a) 276edf634e0SBram Moolenaarendfunc 277edf634e0SBram Moolenaar 278812ad4f3SBram Moolenaar 279edf634e0SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 280