1" Test for syntax and syntax iskeyword option 2 3if !has("syntax") 4 finish 5endif 6 7func GetSyntaxItem(pat) 8 let c = '' 9 let a = ['a', getreg('a'), getregtype('a')] 10 0 11 redraw! 12 call search(a:pat, 'W') 13 let synid = synID(line('.'), col('.'), 1) 14 while synid == synID(line('.'), col('.'), 1) 15 norm! v"ay 16 " stop at whitespace 17 if @a =~# '\s' 18 break 19 endif 20 let c .= @a 21 norm! l 22 endw 23 call call('setreg', a) 24 0 25 return c 26endfunc 27 28func Test_syn_iskeyword() 29 new 30 call setline(1, [ 31 \ 'CREATE TABLE FOOBAR(', 32 \ ' DLTD_BY VARCHAR2(100)', 33 \ ');', 34 \ '']) 35 36 syntax on 37 set ft=sql 38 syn match SYN /C\k\+\>/ 39 hi link SYN ErrorMsg 40 call assert_equal('DLTD_BY', GetSyntaxItem('DLTD')) 41 /\<D\k\+\>/:norm! ygn 42 call assert_equal('DLTD_BY', @0) 43 redir @c 44 syn iskeyword 45 redir END 46 call assert_equal("\nsyntax iskeyword not set", @c) 47 48 syn iskeyword @,48-57,_,192-255 49 redir @c 50 syn iskeyword 51 redir END 52 call assert_equal("\nsyntax iskeyword @,48-57,_,192-255", @c) 53 54 setlocal isk-=_ 55 call assert_equal('DLTD_BY', GetSyntaxItem('DLTD')) 56 /\<D\k\+\>/:norm! ygn 57 let b2 = @0 58 call assert_equal('DLTD', @0) 59 60 syn iskeyword clear 61 redir @c 62 syn iskeyword 63 redir END 64 call assert_equal("\nsyntax iskeyword not set", @c) 65 66 quit! 67endfunc 68 69func Test_syntax_after_reload() 70 split Xsomefile 71 call setline(1, ['hello', 'there']) 72 w! 73 only! 74 setl filetype=hello 75 au FileType hello let g:gotit = 1 76 call assert_false(exists('g:gotit')) 77 edit other 78 buf Xsomefile 79 call assert_equal('hello', &filetype) 80 call assert_true(exists('g:gotit')) 81 call delete('Xsomefile') 82endfunc 83 84func Test_syntime() 85 if !has('profile') 86 return 87 endif 88 89 syntax on 90 syntime on 91 let a = execute('syntime report') 92 call assert_equal("\nNo Syntax items defined for this buffer", a) 93 94 view ../memfile_test.c 95 setfiletype cpp 96 redraw 97 let a = execute('syntime report') 98 call assert_match('^ TOTAL *COUNT *MATCH *SLOWEST *AVERAGE *NAME *PATTERN', a) 99 call assert_match(' \d*\.\d* \+[^0]\d* .* cppRawString ', a) 100 call assert_match(' \d*\.\d* \+[^0]\d* .* cppNumber ', a) 101 102 syntime off 103 syntime clear 104 let a = execute('syntime report') 105 call assert_match('^ TOTAL *COUNT *MATCH *SLOWEST *AVERAGE *NAME *PATTERN', a) 106 call assert_notmatch('.* cppRawString *', a) 107 call assert_notmatch('.* cppNumber*', a) 108 call assert_notmatch('[1-9]', a) 109 110 call assert_fails('syntime abc', 'E475') 111 112 syntax clear 113 let a = execute('syntime report') 114 call assert_equal("\nNo Syntax items defined for this buffer", a) 115 116 bd 117endfunc 118 119func Test_syntax_list() 120 syntax on 121 let a = execute('syntax list') 122 call assert_equal("\nNo Syntax items defined for this buffer", a) 123 124 view ../memfile_test.c 125 setfiletype c 126 127 let a = execute('syntax list') 128 call assert_match('cInclude*', a) 129 call assert_match('cDefine', a) 130 131 let a = execute('syntax list cDefine') 132 call assert_notmatch('cInclude*', a) 133 call assert_match('cDefine', a) 134 call assert_match(' links to Macro$', a) 135 136 call assert_fails('syntax list ABCD', 'E28:') 137 call assert_fails('syntax list @ABCD', 'E392:') 138 139 syntax clear 140 let a = execute('syntax list') 141 call assert_equal("\nNo Syntax items defined for this buffer", a) 142 143 bd 144endfunc 145 146func Test_syntax_completion() 147 call feedkeys(":syn \<C-A>\<C-B>\"\<CR>", 'tx') 148 call assert_equal('"syn case clear cluster conceal enable include iskeyword keyword list manual match off on region reset spell sync', @:) 149 150 call feedkeys(":syn case \<C-A>\<C-B>\"\<CR>", 'tx') 151 call assert_equal('"syn case ignore match', @:) 152 153 call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx') 154 call assert_match('^"syn list Boolean Character ', @:) 155 156 call feedkeys(":syn match \<C-A>\<C-B>\"\<CR>", 'tx') 157 call assert_match('^"syn match Boolean Character ', @:) 158endfunc 159