1b8060fe8SBram Moolenaar" Test for syntax and syntax iskeyword option 2b8060fe8SBram Moolenaar 3b8060fe8SBram Moolenaarif !has("syntax") 4b8060fe8SBram Moolenaar finish 5b8060fe8SBram Moolenaarendif 6b8060fe8SBram Moolenaar 74d785895SBram Moolenaarsource view_util.vim 8da65058aSBram Moolenaarsource screendump.vim 94d785895SBram Moolenaar 10b8060fe8SBram Moolenaarfunc GetSyntaxItem(pat) 11b8060fe8SBram Moolenaar let c = '' 12b8060fe8SBram Moolenaar let a = ['a', getreg('a'), getregtype('a')] 13b8060fe8SBram Moolenaar 0 14b8060fe8SBram Moolenaar redraw! 15b8060fe8SBram Moolenaar call search(a:pat, 'W') 16b8060fe8SBram Moolenaar let synid = synID(line('.'), col('.'), 1) 17b8060fe8SBram Moolenaar while synid == synID(line('.'), col('.'), 1) 18b8060fe8SBram Moolenaar norm! v"ay 19b8060fe8SBram Moolenaar " stop at whitespace 20b8060fe8SBram Moolenaar if @a =~# '\s' 21b8060fe8SBram Moolenaar break 22b8060fe8SBram Moolenaar endif 23b8060fe8SBram Moolenaar let c .= @a 24b8060fe8SBram Moolenaar norm! l 25b8060fe8SBram Moolenaar endw 26b8060fe8SBram Moolenaar call call('setreg', a) 27b8060fe8SBram Moolenaar 0 28b8060fe8SBram Moolenaar return c 29b8060fe8SBram Moolenaarendfunc 30b8060fe8SBram Moolenaar 31b8060fe8SBram Moolenaarfunc Test_syn_iskeyword() 32b8060fe8SBram Moolenaar new 33b8060fe8SBram Moolenaar call setline(1, [ 34b8060fe8SBram Moolenaar \ 'CREATE TABLE FOOBAR(', 35b8060fe8SBram Moolenaar \ ' DLTD_BY VARCHAR2(100)', 36b8060fe8SBram Moolenaar \ ');', 37b8060fe8SBram Moolenaar \ '']) 38b8060fe8SBram Moolenaar 39b8060fe8SBram Moolenaar syntax on 40b8060fe8SBram Moolenaar set ft=sql 41b8060fe8SBram Moolenaar syn match SYN /C\k\+\>/ 42b8060fe8SBram Moolenaar hi link SYN ErrorMsg 43b8060fe8SBram Moolenaar call assert_equal('DLTD_BY', GetSyntaxItem('DLTD')) 44b8060fe8SBram Moolenaar /\<D\k\+\>/:norm! ygn 45b8060fe8SBram Moolenaar call assert_equal('DLTD_BY', @0) 46b8060fe8SBram Moolenaar redir @c 47b8060fe8SBram Moolenaar syn iskeyword 48b8060fe8SBram Moolenaar redir END 49b8060fe8SBram Moolenaar call assert_equal("\nsyntax iskeyword not set", @c) 50b8060fe8SBram Moolenaar 51b8060fe8SBram Moolenaar syn iskeyword @,48-57,_,192-255 52b8060fe8SBram Moolenaar redir @c 53b8060fe8SBram Moolenaar syn iskeyword 54b8060fe8SBram Moolenaar redir END 55b8060fe8SBram Moolenaar call assert_equal("\nsyntax iskeyword @,48-57,_,192-255", @c) 56b8060fe8SBram Moolenaar 57b8060fe8SBram Moolenaar setlocal isk-=_ 58b8060fe8SBram Moolenaar call assert_equal('DLTD_BY', GetSyntaxItem('DLTD')) 59b8060fe8SBram Moolenaar /\<D\k\+\>/:norm! ygn 60b8060fe8SBram Moolenaar let b2 = @0 61b8060fe8SBram Moolenaar call assert_equal('DLTD', @0) 62b8060fe8SBram Moolenaar 63b8060fe8SBram Moolenaar syn iskeyword clear 64b8060fe8SBram Moolenaar redir @c 65b8060fe8SBram Moolenaar syn iskeyword 66b8060fe8SBram Moolenaar redir END 67b8060fe8SBram Moolenaar call assert_equal("\nsyntax iskeyword not set", @c) 68b8060fe8SBram Moolenaar 69b8060fe8SBram Moolenaar quit! 70b8060fe8SBram Moolenaarendfunc 71c3691332SBram Moolenaar 72c3691332SBram Moolenaarfunc Test_syntax_after_reload() 73c3691332SBram Moolenaar split Xsomefile 74c3691332SBram Moolenaar call setline(1, ['hello', 'there']) 75c3691332SBram Moolenaar w! 76c3691332SBram Moolenaar only! 77c3691332SBram Moolenaar setl filetype=hello 78c3691332SBram Moolenaar au FileType hello let g:gotit = 1 79c3691332SBram Moolenaar call assert_false(exists('g:gotit')) 80c3691332SBram Moolenaar edit other 81c3691332SBram Moolenaar buf Xsomefile 82c3691332SBram Moolenaar call assert_equal('hello', &filetype) 83c3691332SBram Moolenaar call assert_true(exists('g:gotit')) 84c3691332SBram Moolenaar call delete('Xsomefile') 8573b484c4SBram Moolenaarendfunc 8673b484c4SBram Moolenaar 8773b484c4SBram Moolenaarfunc Test_syntime() 8873b484c4SBram Moolenaar if !has('profile') 894c8980b7SBram Moolenaar return 9073b484c4SBram Moolenaar endif 9173b484c4SBram Moolenaar 9273b484c4SBram Moolenaar syntax on 9373b484c4SBram Moolenaar syntime on 9473b484c4SBram Moolenaar let a = execute('syntime report') 9573b484c4SBram Moolenaar call assert_equal("\nNo Syntax items defined for this buffer", a) 9673b484c4SBram Moolenaar 9773b484c4SBram Moolenaar view ../memfile_test.c 9873b484c4SBram Moolenaar setfiletype cpp 9973b484c4SBram Moolenaar redraw 10073b484c4SBram Moolenaar let a = execute('syntime report') 10173b484c4SBram Moolenaar call assert_match('^ TOTAL *COUNT *MATCH *SLOWEST *AVERAGE *NAME *PATTERN', a) 10273b484c4SBram Moolenaar call assert_match(' \d*\.\d* \+[^0]\d* .* cppRawString ', a) 10373b484c4SBram Moolenaar call assert_match(' \d*\.\d* \+[^0]\d* .* cppNumber ', a) 10473b484c4SBram Moolenaar 10573b484c4SBram Moolenaar syntime off 10673b484c4SBram Moolenaar syntime clear 10773b484c4SBram Moolenaar let a = execute('syntime report') 10873b484c4SBram Moolenaar call assert_match('^ TOTAL *COUNT *MATCH *SLOWEST *AVERAGE *NAME *PATTERN', a) 10973b484c4SBram Moolenaar call assert_notmatch('.* cppRawString *', a) 11073b484c4SBram Moolenaar call assert_notmatch('.* cppNumber*', a) 11173b484c4SBram Moolenaar call assert_notmatch('[1-9]', a) 11273b484c4SBram Moolenaar 11373b484c4SBram Moolenaar call assert_fails('syntime abc', 'E475') 11473b484c4SBram Moolenaar 11573b484c4SBram Moolenaar syntax clear 11673b484c4SBram Moolenaar let a = execute('syntime report') 11773b484c4SBram Moolenaar call assert_equal("\nNo Syntax items defined for this buffer", a) 11873b484c4SBram Moolenaar 11973b484c4SBram Moolenaar bd 12073b484c4SBram Moolenaarendfunc 12173b484c4SBram Moolenaar 12273b484c4SBram Moolenaarfunc Test_syntax_list() 12373b484c4SBram Moolenaar syntax on 12473b484c4SBram Moolenaar let a = execute('syntax list') 12573b484c4SBram Moolenaar call assert_equal("\nNo Syntax items defined for this buffer", a) 12673b484c4SBram Moolenaar 12773b484c4SBram Moolenaar view ../memfile_test.c 12873b484c4SBram Moolenaar setfiletype c 12973b484c4SBram Moolenaar 13073b484c4SBram Moolenaar let a = execute('syntax list') 13173b484c4SBram Moolenaar call assert_match('cInclude*', a) 13273b484c4SBram Moolenaar call assert_match('cDefine', a) 13373b484c4SBram Moolenaar 13473b484c4SBram Moolenaar let a = execute('syntax list cDefine') 13573b484c4SBram Moolenaar call assert_notmatch('cInclude*', a) 13673b484c4SBram Moolenaar call assert_match('cDefine', a) 13773b484c4SBram Moolenaar call assert_match(' links to Macro$', a) 13873b484c4SBram Moolenaar 13973b484c4SBram Moolenaar call assert_fails('syntax list ABCD', 'E28:') 14073b484c4SBram Moolenaar call assert_fails('syntax list @ABCD', 'E392:') 14173b484c4SBram Moolenaar 14273b484c4SBram Moolenaar syntax clear 14373b484c4SBram Moolenaar let a = execute('syntax list') 14473b484c4SBram Moolenaar call assert_equal("\nNo Syntax items defined for this buffer", a) 14573b484c4SBram Moolenaar 14673b484c4SBram Moolenaar bd 14773b484c4SBram Moolenaarendfunc 14873b484c4SBram Moolenaar 14973b484c4SBram Moolenaarfunc Test_syntax_completion() 15073b484c4SBram Moolenaar call feedkeys(":syn \<C-A>\<C-B>\"\<CR>", 'tx') 15173b484c4SBram Moolenaar call assert_equal('"syn case clear cluster conceal enable include iskeyword keyword list manual match off on region reset spell sync', @:) 15273b484c4SBram Moolenaar 15373b484c4SBram Moolenaar call feedkeys(":syn case \<C-A>\<C-B>\"\<CR>", 'tx') 15473b484c4SBram Moolenaar call assert_equal('"syn case ignore match', @:) 15573b484c4SBram Moolenaar 1562d028390SBram Moolenaar call feedkeys(":syn spell \<C-A>\<C-B>\"\<CR>", 'tx') 1572d028390SBram Moolenaar call assert_equal('"syn spell default notoplevel toplevel', @:) 1582d028390SBram Moolenaar 1592d028390SBram Moolenaar call feedkeys(":syn sync \<C-A>\<C-B>\"\<CR>", 'tx') 1602d028390SBram Moolenaar call assert_equal('"syn sync ccomment clear fromstart linebreaks= linecont lines= match maxlines= minlines= region', @:) 1612d028390SBram Moolenaar 162d61e8aaaSBram Moolenaar " Check that clearing "Aap" avoids it showing up before Boolean. 163d61e8aaaSBram Moolenaar hi Aap ctermfg=blue 164d61e8aaaSBram Moolenaar call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx') 165d61e8aaaSBram Moolenaar call assert_match('^"syn list Aap Boolean Character ', @:) 166d61e8aaaSBram Moolenaar hi clear Aap 167d61e8aaaSBram Moolenaar 16873b484c4SBram Moolenaar call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx') 16973b484c4SBram Moolenaar call assert_match('^"syn list Boolean Character ', @:) 17073b484c4SBram Moolenaar 17173b484c4SBram Moolenaar call feedkeys(":syn match \<C-A>\<C-B>\"\<CR>", 'tx') 17273b484c4SBram Moolenaar call assert_match('^"syn match Boolean Character ', @:) 173c3691332SBram Moolenaarendfunc 174de318c5cSBram Moolenaar 175de318c5cSBram Moolenaarfunc Test_syntax_arg_skipped() 176de318c5cSBram Moolenaar syn clear 177de318c5cSBram Moolenaar syntax case ignore 178de318c5cSBram Moolenaar if 0 179de318c5cSBram Moolenaar syntax case match 180de318c5cSBram Moolenaar endif 181de318c5cSBram Moolenaar call assert_match('case ignore', execute('syntax case')) 182de318c5cSBram Moolenaar 183de318c5cSBram Moolenaar syn keyword Foo foo 184de318c5cSBram Moolenaar call assert_match('Foo', execute('syntax')) 185de318c5cSBram Moolenaar syn clear 186de318c5cSBram Moolenaar call assert_match('case match', execute('syntax case')) 187de318c5cSBram Moolenaar call assert_notmatch('Foo', execute('syntax')) 188de318c5cSBram Moolenaar 189de318c5cSBram Moolenaar if has('conceal') 190de318c5cSBram Moolenaar syn clear 191de318c5cSBram Moolenaar syntax conceal on 192de318c5cSBram Moolenaar if 0 193de318c5cSBram Moolenaar syntax conceal off 194de318c5cSBram Moolenaar endif 195de318c5cSBram Moolenaar call assert_match('conceal on', execute('syntax conceal')) 196de318c5cSBram Moolenaar syn clear 197de318c5cSBram Moolenaar call assert_match('conceal off', execute('syntax conceal')) 19858f60ca2SBram Moolenaar 19958f60ca2SBram Moolenaar syntax conceal on 20058f60ca2SBram Moolenaar syntax conceal off 20158f60ca2SBram Moolenaar call assert_match('conceal off', execute('syntax conceal')) 202de318c5cSBram Moolenaar endif 203de318c5cSBram Moolenaar 204d61e8aaaSBram Moolenaar syntax region Bar start=/</ end=/>/ 205de318c5cSBram Moolenaar if 0 206de318c5cSBram Moolenaar syntax region NotTest start=/</ end=/>/ contains=@Spell 207de318c5cSBram Moolenaar endif 208d61e8aaaSBram Moolenaar call assert_match('Bar', execute('syntax')) 209de318c5cSBram Moolenaar call assert_notmatch('NotTest', execute('syntax')) 210de318c5cSBram Moolenaar call assert_notmatch('Spell', execute('syntax')) 211de318c5cSBram Moolenaar 212de318c5cSBram Moolenaar hi Foo ctermfg=blue 213de318c5cSBram Moolenaar let a = execute('hi Foo') 214de318c5cSBram Moolenaar if 0 215de318c5cSBram Moolenaar syntax rest 216de318c5cSBram Moolenaar endif 217de318c5cSBram Moolenaar call assert_equal(a, execute('hi Foo')) 218d61e8aaaSBram Moolenaar hi clear Bar 219d61e8aaaSBram Moolenaar hi clear Foo 220de318c5cSBram Moolenaar 221de318c5cSBram Moolenaar set ft=tags 222de318c5cSBram Moolenaar syn off 223de318c5cSBram Moolenaar if 0 224de318c5cSBram Moolenaar syntax enable 225de318c5cSBram Moolenaar endif 226de318c5cSBram Moolenaar call assert_match('No Syntax items defined', execute('syntax')) 227de318c5cSBram Moolenaar syntax enable 228de318c5cSBram Moolenaar call assert_match('tagComment', execute('syntax')) 229de318c5cSBram Moolenaar set ft= 230de318c5cSBram Moolenaar 231de318c5cSBram Moolenaar syn clear 232de318c5cSBram Moolenaar if 0 233de318c5cSBram Moolenaar syntax include @Spell nothing 234de318c5cSBram Moolenaar endif 235de318c5cSBram Moolenaar call assert_notmatch('Spell', execute('syntax')) 236de318c5cSBram Moolenaar 237de318c5cSBram Moolenaar syn clear 238de318c5cSBram Moolenaar syn iskeyword 48-57,$,_ 239de318c5cSBram Moolenaar call assert_match('48-57,$,_', execute('syntax iskeyword')) 240de318c5cSBram Moolenaar if 0 241de318c5cSBram Moolenaar syn clear 242de318c5cSBram Moolenaar syn iskeyword clear 243de318c5cSBram Moolenaar endif 244de318c5cSBram Moolenaar call assert_match('48-57,$,_', execute('syntax iskeyword')) 245de318c5cSBram Moolenaar syn iskeyword clear 246de318c5cSBram Moolenaar call assert_match('not set', execute('syntax iskeyword')) 247de318c5cSBram Moolenaar syn iskeyword 48-57,$,_ 248de318c5cSBram Moolenaar syn clear 249de318c5cSBram Moolenaar call assert_match('not set', execute('syntax iskeyword')) 250de318c5cSBram Moolenaar 251de318c5cSBram Moolenaar syn clear 252de318c5cSBram Moolenaar syn keyword Foo foo 253de318c5cSBram Moolenaar if 0 254de318c5cSBram Moolenaar syn keyword NotAdded bar 255de318c5cSBram Moolenaar endif 256de318c5cSBram Moolenaar call assert_match('Foo', execute('syntax')) 257de318c5cSBram Moolenaar call assert_notmatch('NotAdded', execute('highlight')) 258de318c5cSBram Moolenaar 259de318c5cSBram Moolenaar syn clear 260de318c5cSBram Moolenaar syn keyword Foo foo 261de318c5cSBram Moolenaar call assert_match('Foo', execute('syntax')) 262de318c5cSBram Moolenaar call assert_match('Foo', execute('syntax list')) 263de318c5cSBram Moolenaar call assert_notmatch('Foo', execute('if 0 | syntax | endif')) 264de318c5cSBram Moolenaar call assert_notmatch('Foo', execute('if 0 | syntax list | endif')) 265de318c5cSBram Moolenaar 266de318c5cSBram Moolenaar syn clear 267de318c5cSBram Moolenaar syn match Fopi /asdf/ 268de318c5cSBram Moolenaar if 0 269de318c5cSBram Moolenaar syn match Fopx /asdf/ 270de318c5cSBram Moolenaar endif 271de318c5cSBram Moolenaar call assert_match('Fopi', execute('syntax')) 272de318c5cSBram Moolenaar call assert_notmatch('Fopx', execute('syntax')) 273de318c5cSBram Moolenaar 274de318c5cSBram Moolenaar syn clear 275de318c5cSBram Moolenaar syn spell toplevel 276de318c5cSBram Moolenaar call assert_match('spell toplevel', execute('syntax spell')) 277de318c5cSBram Moolenaar if 0 278de318c5cSBram Moolenaar syn spell notoplevel 279de318c5cSBram Moolenaar endif 280de318c5cSBram Moolenaar call assert_match('spell toplevel', execute('syntax spell')) 281de318c5cSBram Moolenaar syn spell notoplevel 282de318c5cSBram Moolenaar call assert_match('spell notoplevel', execute('syntax spell')) 283de318c5cSBram Moolenaar syn spell default 284de318c5cSBram Moolenaar call assert_match('spell default', execute('syntax spell')) 285de318c5cSBram Moolenaar 286de318c5cSBram Moolenaar syn clear 287de318c5cSBram Moolenaar if 0 288de318c5cSBram Moolenaar syntax cluster Spell 289de318c5cSBram Moolenaar endif 290de318c5cSBram Moolenaar call assert_notmatch('Spell', execute('syntax')) 291de318c5cSBram Moolenaar 292de318c5cSBram Moolenaar syn clear 293de318c5cSBram Moolenaar syn keyword Foo foo 294de318c5cSBram Moolenaar syn sync ccomment 295de318c5cSBram Moolenaar syn sync maxlines=5 296de318c5cSBram Moolenaar if 0 297de318c5cSBram Moolenaar syn sync maxlines=11 298de318c5cSBram Moolenaar endif 299de318c5cSBram Moolenaar call assert_match('on C-style comments', execute('syntax sync')) 300de318c5cSBram Moolenaar call assert_match('maximal 5 lines', execute('syntax sync')) 30158f60ca2SBram Moolenaar syn sync clear 302de318c5cSBram Moolenaar if 0 303de318c5cSBram Moolenaar syn sync ccomment 304de318c5cSBram Moolenaar endif 305de318c5cSBram Moolenaar call assert_notmatch('on C-style comments', execute('syntax sync')) 306de318c5cSBram Moolenaar 307de318c5cSBram Moolenaar syn clear 308de318c5cSBram Moolenaarendfunc 309de318c5cSBram Moolenaar 310ea588154SBram Moolenaarfunc Test_syntax_invalid_arg() 31158f60ca2SBram Moolenaar call assert_fails('syntax case asdf', 'E390:') 312d61e8aaaSBram Moolenaar if has('conceal') 31358f60ca2SBram Moolenaar call assert_fails('syntax conceal asdf', 'E390:') 314d61e8aaaSBram Moolenaar endif 31558f60ca2SBram Moolenaar call assert_fails('syntax spell asdf', 'E390:') 316ea588154SBram Moolenaar call assert_fails('syntax clear @ABCD', 'E391:') 317ea588154SBram Moolenaar call assert_fails('syntax include @Xxx', 'E397:') 318ea588154SBram Moolenaar call assert_fails('syntax region X start="{"', 'E399:') 319ea588154SBram Moolenaar call assert_fails('syntax sync x', 'E404:') 320ea588154SBram Moolenaar call assert_fails('syntax keyword Abc a[', 'E789:') 321ea588154SBram Moolenaar call assert_fails('syntax keyword Abc a[bc]d', 'E890:') 32258f60ca2SBram Moolenaarendfunc 32358f60ca2SBram Moolenaar 32458f60ca2SBram Moolenaarfunc Test_syn_sync() 32558f60ca2SBram Moolenaar syntax region HereGroup start=/this/ end=/that/ 32658f60ca2SBram Moolenaar syntax sync match SyncHere grouphere HereGroup "pattern" 32758f60ca2SBram Moolenaar call assert_match('SyncHere', execute('syntax sync')) 32858f60ca2SBram Moolenaar syn sync clear 32958f60ca2SBram Moolenaar call assert_notmatch('SyncHere', execute('syntax sync')) 33058f60ca2SBram Moolenaar syn clear 33158f60ca2SBram Moolenaarendfunc 33258f60ca2SBram Moolenaar 33358f60ca2SBram Moolenaarfunc Test_syn_clear() 33458f60ca2SBram Moolenaar syntax keyword Foo foo 335d61e8aaaSBram Moolenaar syntax keyword Bar tar 33658f60ca2SBram Moolenaar call assert_match('Foo', execute('syntax')) 337d61e8aaaSBram Moolenaar call assert_match('Bar', execute('syntax')) 338c96272e3SBram Moolenaar call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) 33958f60ca2SBram Moolenaar syn clear Foo 34058f60ca2SBram Moolenaar call assert_notmatch('Foo', execute('syntax')) 341d61e8aaaSBram Moolenaar call assert_match('Bar', execute('syntax')) 342c96272e3SBram Moolenaar call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) 343d61e8aaaSBram Moolenaar syn clear Foo Bar 34458f60ca2SBram Moolenaar call assert_notmatch('Foo', execute('syntax')) 345d61e8aaaSBram Moolenaar call assert_notmatch('Bar', execute('syntax')) 346d61e8aaaSBram Moolenaar hi clear Foo 347c96272e3SBram Moolenaar call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) 348d61e8aaaSBram Moolenaar hi clear Bar 34958f60ca2SBram Moolenaarendfunc 3504007ed4aSBram Moolenaar 3514007ed4aSBram Moolenaarfunc Test_invalid_name() 3524007ed4aSBram Moolenaar syn clear 3534007ed4aSBram Moolenaar syn keyword Nop yes 3544007ed4aSBram Moolenaar call assert_fails("syntax keyword Wr\x17ong bar", 'E669:') 3554007ed4aSBram Moolenaar syntax keyword @Wrong bar 3564007ed4aSBram Moolenaar call assert_match('W18:', execute('1messages')) 3574007ed4aSBram Moolenaar syn clear 3584007ed4aSBram Moolenaar hi clear Nop 3594007ed4aSBram Moolenaar hi clear @Wrong 3604007ed4aSBram Moolenaarendfunc 361f8ec9986SBram Moolenaar 362f8ec9986SBram Moolenaarfunc Test_ownsyntax() 363f8ec9986SBram Moolenaar new Xfoo 364f8ec9986SBram Moolenaar call setline(1, '#define FOO') 365f8ec9986SBram Moolenaar syntax on 366f8ec9986SBram Moolenaar set filetype=c 367f8ec9986SBram Moolenaar ownsyntax perl 368f8ec9986SBram Moolenaar call assert_equal('perlComment', synIDattr(synID(line('.'), col('.'), 1), 'name')) 369f8ec9986SBram Moolenaar call assert_equal('c', b:current_syntax) 370f8ec9986SBram Moolenaar call assert_equal('perl', w:current_syntax) 371f8ec9986SBram Moolenaar 372f8ec9986SBram Moolenaar " A new split window should have the original syntax. 373f8ec9986SBram Moolenaar split 374f8ec9986SBram Moolenaar call assert_equal('cDefine', synIDattr(synID(line('.'), col('.'), 1), 'name')) 375f8ec9986SBram Moolenaar call assert_equal('c', b:current_syntax) 376f8ec9986SBram Moolenaar call assert_equal(0, exists('w:current_syntax')) 377f8ec9986SBram Moolenaar 378f8ec9986SBram Moolenaar wincmd x 379f8ec9986SBram Moolenaar call assert_equal('perlComment', synIDattr(synID(line("."), col("."), 1), "name")) 380f8ec9986SBram Moolenaar 381f8ec9986SBram Moolenaar syntax off 382f8ec9986SBram Moolenaar set filetype& 383f8ec9986SBram Moolenaar %bw! 384f8ec9986SBram Moolenaarendfunc 385f8ec9986SBram Moolenaar 386f8ec9986SBram Moolenaarfunc Test_ownsyntax_completion() 387f8ec9986SBram Moolenaar call feedkeys(":ownsyntax java\<C-A>\<C-B>\"\<CR>", 'tx') 388f8ec9986SBram Moolenaar call assert_equal('"ownsyntax java javacc javascript', @:) 389f8ec9986SBram Moolenaarendfunc 390ea588154SBram Moolenaar 391ea588154SBram Moolenaarfunc Test_highlight_invalid_arg() 392ea588154SBram Moolenaar if has('gui_running') 393ea588154SBram Moolenaar call assert_fails('hi XXX guifg=xxx', 'E254:') 394ea588154SBram Moolenaar endif 395ea588154SBram Moolenaar call assert_fails('hi DoesNotExist', 'E411:') 396ea588154SBram Moolenaar call assert_fails('hi link', 'E412:') 397ea588154SBram Moolenaar call assert_fails('hi link a', 'E412:') 398ea588154SBram Moolenaar call assert_fails('hi link a b c', 'E413:') 399ea588154SBram Moolenaar call assert_fails('hi XXX =', 'E415:') 400ea588154SBram Moolenaar call assert_fails('hi XXX cterm', 'E416:') 401ea588154SBram Moolenaar call assert_fails('hi XXX cterm=', 'E417:') 402ea588154SBram Moolenaar call assert_fails('hi XXX cterm=DoesNotExist', 'E418:') 403ea588154SBram Moolenaar call assert_fails('hi XXX ctermfg=DoesNotExist', 'E421:') 404ea588154SBram Moolenaar call assert_fails('hi XXX xxx=White', 'E423:') 405ea588154SBram Moolenaarendfunc 406ea588154SBram Moolenaar 4071615b36bSBram Moolenaarfunc Test_bg_detection() 4081615b36bSBram Moolenaar if has('gui_running') 4091615b36bSBram Moolenaar return 4101615b36bSBram Moolenaar endif 4111615b36bSBram Moolenaar " auto-detection of &bg, make sure sure it isn't set anywhere before 4121615b36bSBram Moolenaar " this test 4131615b36bSBram Moolenaar hi Normal ctermbg=0 4141615b36bSBram Moolenaar call assert_equal('dark', &bg) 4151615b36bSBram Moolenaar hi Normal ctermbg=4 4161615b36bSBram Moolenaar call assert_equal('dark', &bg) 4171615b36bSBram Moolenaar hi Normal ctermbg=12 4181615b36bSBram Moolenaar call assert_equal('light', &bg) 4191615b36bSBram Moolenaar hi Normal ctermbg=15 4201615b36bSBram Moolenaar call assert_equal('light', &bg) 4211615b36bSBram Moolenaar 4220b2eef24SBram Moolenaar " manually-set &bg takes precedence over auto-detection 4231615b36bSBram Moolenaar set bg=light 4241615b36bSBram Moolenaar hi Normal ctermbg=4 4251615b36bSBram Moolenaar call assert_equal('light', &bg) 4261615b36bSBram Moolenaar set bg=dark 4271615b36bSBram Moolenaar hi Normal ctermbg=12 4281615b36bSBram Moolenaar call assert_equal('dark', &bg) 4296acadda8SBram Moolenaar 4306acadda8SBram Moolenaar hi Normal ctermbg=NONE 4311615b36bSBram Moolenaarendfunc 43206f1ed2fSBram Moolenaar 43306f1ed2fSBram Moolenaarfunc Test_syntax_hangs() 43406f1ed2fSBram Moolenaar if !has('reltime') || !has('float') || !has('syntax') 43506f1ed2fSBram Moolenaar return 43606f1ed2fSBram Moolenaar endif 43706f1ed2fSBram Moolenaar 43806f1ed2fSBram Moolenaar " This pattern takes a long time to match, it should timeout. 43906f1ed2fSBram Moolenaar new 44006f1ed2fSBram Moolenaar call setline(1, ['aaa', repeat('abc ', 1000), 'ccc']) 44106f1ed2fSBram Moolenaar let start = reltime() 44206f1ed2fSBram Moolenaar set nolazyredraw redrawtime=101 44306f1ed2fSBram Moolenaar syn match Error /\%#=1a*.*X\@<=b*/ 44406f1ed2fSBram Moolenaar redraw 44506f1ed2fSBram Moolenaar let elapsed = reltimefloat(reltime(start)) 44606f1ed2fSBram Moolenaar call assert_true(elapsed > 0.1) 44706f1ed2fSBram Moolenaar call assert_true(elapsed < 1.0) 44806f1ed2fSBram Moolenaar 44906f1ed2fSBram Moolenaar " second time syntax HL is disabled 45006f1ed2fSBram Moolenaar let start = reltime() 45106f1ed2fSBram Moolenaar redraw 45206f1ed2fSBram Moolenaar let elapsed = reltimefloat(reltime(start)) 45306f1ed2fSBram Moolenaar call assert_true(elapsed < 0.1) 45406f1ed2fSBram Moolenaar 45506f1ed2fSBram Moolenaar " after CTRL-L the timeout flag is reset 45606f1ed2fSBram Moolenaar let start = reltime() 45706f1ed2fSBram Moolenaar exe "normal \<C-L>" 45806f1ed2fSBram Moolenaar redraw 45906f1ed2fSBram Moolenaar let elapsed = reltimefloat(reltime(start)) 46006f1ed2fSBram Moolenaar call assert_true(elapsed > 0.1) 46106f1ed2fSBram Moolenaar call assert_true(elapsed < 1.0) 46206f1ed2fSBram Moolenaar 46306f1ed2fSBram Moolenaar set redrawtime& 46406f1ed2fSBram Moolenaar bwipe! 46506f1ed2fSBram Moolenaarendfunc 4664d785895SBram Moolenaar 4674d785895SBram Moolenaarfunc Test_conceal() 4684d785895SBram Moolenaar if !has('conceal') 4694d785895SBram Moolenaar return 4704d785895SBram Moolenaar endif 4714d785895SBram Moolenaar 4724d785895SBram Moolenaar new 4734d785895SBram Moolenaar call setline(1, ['', '123456']) 4744d785895SBram Moolenaar syn match test23 "23" conceal cchar=X 4754d785895SBram Moolenaar syn match test45 "45" conceal 4764d785895SBram Moolenaar 4774d785895SBram Moolenaar set conceallevel=0 4784d785895SBram Moolenaar call assert_equal('123456 ', ScreenLines(2, 7)[0]) 479cc0750dcSBram Moolenaar call assert_equal([[0, '', 0], [0, '', 0], [0, '', 0], [0, '', 0], [0, '', 0], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) 4804d785895SBram Moolenaar 4814d785895SBram Moolenaar set conceallevel=1 4824d785895SBram Moolenaar call assert_equal('1X 6 ', ScreenLines(2, 7)[0]) 483cc0750dcSBram Moolenaar call assert_equal([[0, '', 0], [1, 'X', 1], [1, 'X', 1], [1, ' ', 2], [1, ' ', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) 4844d785895SBram Moolenaar 4854d785895SBram Moolenaar set conceallevel=1 4864d785895SBram Moolenaar set listchars=conceal:Y 487cc0750dcSBram Moolenaar call assert_equal([[0, '', 0], [1, 'X', 1], [1, 'X', 1], [1, 'Y', 2], [1, 'Y', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) 4884d785895SBram Moolenaar call assert_equal('1XY6 ', ScreenLines(2, 7)[0]) 4894d785895SBram Moolenaar 4904d785895SBram Moolenaar set conceallevel=2 4914d785895SBram Moolenaar call assert_match('1X6 ', ScreenLines(2, 7)[0]) 492cc0750dcSBram Moolenaar call assert_equal([[0, '', 0], [1, 'X', 1], [1, 'X', 1], [1, '', 2], [1, '', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) 4934d785895SBram Moolenaar 4944d785895SBram Moolenaar set conceallevel=3 4954d785895SBram Moolenaar call assert_match('16 ', ScreenLines(2, 7)[0]) 496cc0750dcSBram Moolenaar call assert_equal([[0, '', 0], [1, '', 1], [1, '', 1], [1, '', 2], [1, '', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) 4974d785895SBram Moolenaar 4984d785895SBram Moolenaar syn clear 4994d785895SBram Moolenaar set conceallevel& 5004d785895SBram Moolenaar bw! 5014d785895SBram Moolenaarendfunc 5020b2eef24SBram Moolenaar 503da65058aSBram Moolenaarfunc Test_synstack_synIDtrans() 5040b2eef24SBram Moolenaar new 5050b2eef24SBram Moolenaar setfiletype c 5060b2eef24SBram Moolenaar syntax on 5070b2eef24SBram Moolenaar call setline(1, ' /* A comment with a TODO */') 5080b2eef24SBram Moolenaar 5090b2eef24SBram Moolenaar call assert_equal([], synstack(1, 1)) 5100b2eef24SBram Moolenaar 5110b2eef24SBram Moolenaar norm f/ 5120b2eef24SBram Moolenaar call assert_equal(['cComment', 'cCommentStart'], map(synstack(line("."), col(".")), 'synIDattr(v:val, "name")')) 5130b2eef24SBram Moolenaar call assert_equal(['Comment', 'Comment'], map(synstack(line("."), col(".")), 'synIDattr(synIDtrans(v:val), "name")')) 5140b2eef24SBram Moolenaar 5150b2eef24SBram Moolenaar norm fA 5160b2eef24SBram Moolenaar call assert_equal(['cComment'], map(synstack(line("."), col(".")), 'synIDattr(v:val, "name")')) 5170b2eef24SBram Moolenaar call assert_equal(['Comment'], map(synstack(line("."), col(".")), 'synIDattr(synIDtrans(v:val), "name")')) 5180b2eef24SBram Moolenaar 5190b2eef24SBram Moolenaar norm fT 5200b2eef24SBram Moolenaar call assert_equal(['cComment', 'cTodo'], map(synstack(line("."), col(".")), 'synIDattr(v:val, "name")')) 5210b2eef24SBram Moolenaar call assert_equal(['Comment', 'Todo'], map(synstack(line("."), col(".")), 'synIDattr(synIDtrans(v:val), "name")')) 5220b2eef24SBram Moolenaar 5230b2eef24SBram Moolenaar syn clear 5240b2eef24SBram Moolenaar bw! 5250b2eef24SBram Moolenaarendfunc 526da65058aSBram Moolenaar 527da65058aSBram Moolenaar" Check highlighting for a small piece of C code with a screen dump. 528da65058aSBram Moolenaarfunc Test_syntax_c() 529*6bb2cdfeSBram Moolenaar if !CanRunVimInTerminal() 530da65058aSBram Moolenaar return 531da65058aSBram Moolenaar endif 532da65058aSBram Moolenaar call writefile([ 533da65058aSBram Moolenaar \ '/* comment line at the top */', 534da65058aSBram Moolenaar \ ' int', 535da65058aSBram Moolenaar \ 'main(int argc, char **argv)// another comment', 536da65058aSBram Moolenaar \ '{', 537da65058aSBram Moolenaar \ '#if 0', 538da65058aSBram Moolenaar \ ' int not_used;', 539da65058aSBram Moolenaar \ '#else', 540da65058aSBram Moolenaar \ ' int used;', 541da65058aSBram Moolenaar \ '#endif', 542da65058aSBram Moolenaar \ ' printf("Just an example piece of C code\n");', 543da65058aSBram Moolenaar \ ' return 0x0ff;', 544da65058aSBram Moolenaar \ '}', 545da65058aSBram Moolenaar \ ' static void', 546da65058aSBram Moolenaar \ 'myFunction(const double count, struct nothing, long there) {', 547da65058aSBram Moolenaar \ ' // 123: nothing to read here', 548da65058aSBram Moolenaar \ ' for (int i = 0; i < count; ++i) {', 549da65058aSBram Moolenaar \ ' break;', 550da65058aSBram Moolenaar \ ' }', 551da65058aSBram Moolenaar \ '}', 552da65058aSBram Moolenaar \ ], 'Xtest.c') 553b7ea7cb8SBram Moolenaar 554b7ea7cb8SBram Moolenaar " This makes the default for 'background' use "dark", check that the 555b7ea7cb8SBram Moolenaar " response to t_RB corrects it to "light". 556b7ea7cb8SBram Moolenaar let $COLORFGBG = '15;0' 557b7ea7cb8SBram Moolenaar 558da65058aSBram Moolenaar let buf = RunVimInTerminal('Xtest.c', {}) 559*6bb2cdfeSBram Moolenaar call VerifyScreenDump(buf, 'Test_syntax_c_01', {}) 560da65058aSBram Moolenaar call StopVimInTerminal(buf) 561da65058aSBram Moolenaar 562b7ea7cb8SBram Moolenaar let $COLORFGBG = '' 563da65058aSBram Moolenaar call delete('Xtest.c') 564da65058aSBram Moolenaarendfun 565