| " Test for syntax and syntax iskeyword option |
| |
| if !has("syntax") |
| finish |
| endif |
| |
| func GetSyntaxItem(pat) |
| let c = '' |
| let a = ['a', getreg('a'), getregtype('a')] |
| 0 |
| redraw! |
| call search(a:pat, 'W') |
| let synid = synID(line('.'), col('.'), 1) |
| while synid == synID(line('.'), col('.'), 1) |
| norm! v"ay |
| " stop at whitespace |
| if @a =~# '\s' |
| break |
| endif |
| let c .= @a |
| norm! l |
| endw |
| call call('setreg', a) |
| 0 |
| return c |
| endfunc |
| |
| func Test_syn_iskeyword() |
| new |
| call setline(1, [ |
| \ 'CREATE TABLE FOOBAR(', |
| \ ' DLTD_BY VARCHAR2(100)', |
| \ ');', |
| \ '']) |
| |
| syntax on |
| set ft=sql |
| syn match SYN /C\k\+\>/ |
| hi link SYN ErrorMsg |
| call assert_equal('DLTD_BY', GetSyntaxItem('DLTD')) |
| /\<D\k\+\>/:norm! ygn |
| call assert_equal('DLTD_BY', @0) |
| redir @c |
| syn iskeyword |
| redir END |
| call assert_equal("\nsyntax iskeyword not set", @c) |
| |
| syn iskeyword @,48-57,_,192-255 |
| redir @c |
| syn iskeyword |
| redir END |
| call assert_equal("\nsyntax iskeyword @,48-57,_,192-255", @c) |
| |
| setlocal isk-=_ |
| call assert_equal('DLTD_BY', GetSyntaxItem('DLTD')) |
| /\<D\k\+\>/:norm! ygn |
| let b2 = @0 |
| call assert_equal('DLTD', @0) |
| |
| syn iskeyword clear |
| redir @c |
| syn iskeyword |
| redir END |
| call assert_equal("\nsyntax iskeyword not set", @c) |
| |
| quit! |
| endfunc |
| |
| func Test_syntax_after_reload() |
| split Xsomefile |
| call setline(1, ['hello', 'there']) |
| w! |
| only! |
| setl filetype=hello |
| au FileType hello let g:gotit = 1 |
| call assert_false(exists('g:gotit')) |
| edit other |
| buf Xsomefile |
| call assert_equal('hello', &filetype) |
| call assert_true(exists('g:gotit')) |
| call delete('Xsomefile') |
| endfunc |
| |
| func Test_syntime() |
| if !has('profile') |
| return |
| endif |
| |
| syntax on |
| syntime on |
| let a = execute('syntime report') |
| call assert_equal("\nNo Syntax items defined for this buffer", a) |
| |
| view ../memfile_test.c |
| setfiletype cpp |
| redraw |
| let a = execute('syntime report') |
| call assert_match('^ TOTAL *COUNT *MATCH *SLOWEST *AVERAGE *NAME *PATTERN', a) |
| call assert_match(' \d*\.\d* \+[^0]\d* .* cppRawString ', a) |
| call assert_match(' \d*\.\d* \+[^0]\d* .* cppNumber ', a) |
| |
| syntime off |
| syntime clear |
| let a = execute('syntime report') |
| call assert_match('^ TOTAL *COUNT *MATCH *SLOWEST *AVERAGE *NAME *PATTERN', a) |
| call assert_notmatch('.* cppRawString *', a) |
| call assert_notmatch('.* cppNumber*', a) |
| call assert_notmatch('[1-9]', a) |
| |
| call assert_fails('syntime abc', 'E475') |
| |
| syntax clear |
| let a = execute('syntime report') |
| call assert_equal("\nNo Syntax items defined for this buffer", a) |
| |
| bd |
| endfunc |
| |
| func Test_syntax_list() |
| syntax on |
| let a = execute('syntax list') |
| call assert_equal("\nNo Syntax items defined for this buffer", a) |
| |
| view ../memfile_test.c |
| setfiletype c |
| |
| let a = execute('syntax list') |
| call assert_match('cInclude*', a) |
| call assert_match('cDefine', a) |
| |
| let a = execute('syntax list cDefine') |
| call assert_notmatch('cInclude*', a) |
| call assert_match('cDefine', a) |
| call assert_match(' links to Macro$', a) |
| |
| call assert_fails('syntax list ABCD', 'E28:') |
| call assert_fails('syntax list @ABCD', 'E392:') |
| |
| syntax clear |
| let a = execute('syntax list') |
| call assert_equal("\nNo Syntax items defined for this buffer", a) |
| |
| bd |
| endfunc |
| |
| func Test_syntax_completion() |
| call feedkeys(":syn \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_equal('"syn case clear cluster conceal enable include iskeyword keyword list manual match off on region reset spell sync', @:) |
| |
| call feedkeys(":syn case \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_equal('"syn case ignore match', @:) |
| |
| call feedkeys(":syn spell \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_equal('"syn spell default notoplevel toplevel', @:) |
| |
| call feedkeys(":syn sync \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_equal('"syn sync ccomment clear fromstart linebreaks= linecont lines= match maxlines= minlines= region', @:) |
| |
| " Check that clearing "Aap" avoids it showing up before Boolean. |
| hi Aap ctermfg=blue |
| call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_match('^"syn list Aap Boolean Character ', @:) |
| hi clear Aap |
| |
| call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_match('^"syn list Boolean Character ', @:) |
| |
| call feedkeys(":syn match \<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_match('^"syn match Boolean Character ', @:) |
| endfunc |
| |
| func Test_syntax_arg_skipped() |
| syn clear |
| syntax case ignore |
| if 0 |
| syntax case match |
| endif |
| call assert_match('case ignore', execute('syntax case')) |
| |
| syn keyword Foo foo |
| call assert_match('Foo', execute('syntax')) |
| syn clear |
| call assert_match('case match', execute('syntax case')) |
| call assert_notmatch('Foo', execute('syntax')) |
| |
| if has('conceal') |
| syn clear |
| syntax conceal on |
| if 0 |
| syntax conceal off |
| endif |
| call assert_match('conceal on', execute('syntax conceal')) |
| syn clear |
| call assert_match('conceal off', execute('syntax conceal')) |
| |
| syntax conceal on |
| syntax conceal off |
| call assert_match('conceal off', execute('syntax conceal')) |
| endif |
| |
| syntax region Bar start=/</ end=/>/ |
| if 0 |
| syntax region NotTest start=/</ end=/>/ contains=@Spell |
| endif |
| call assert_match('Bar', execute('syntax')) |
| call assert_notmatch('NotTest', execute('syntax')) |
| call assert_notmatch('Spell', execute('syntax')) |
| |
| hi Foo ctermfg=blue |
| let a = execute('hi Foo') |
| if 0 |
| syntax rest |
| endif |
| call assert_equal(a, execute('hi Foo')) |
| hi clear Bar |
| hi clear Foo |
| |
| set ft=tags |
| syn off |
| if 0 |
| syntax enable |
| endif |
| call assert_match('No Syntax items defined', execute('syntax')) |
| syntax enable |
| call assert_match('tagComment', execute('syntax')) |
| set ft= |
| |
| syn clear |
| if 0 |
| syntax include @Spell nothing |
| endif |
| call assert_notmatch('Spell', execute('syntax')) |
| |
| syn clear |
| syn iskeyword 48-57,$,_ |
| call assert_match('48-57,$,_', execute('syntax iskeyword')) |
| if 0 |
| syn clear |
| syn iskeyword clear |
| endif |
| call assert_match('48-57,$,_', execute('syntax iskeyword')) |
| syn iskeyword clear |
| call assert_match('not set', execute('syntax iskeyword')) |
| syn iskeyword 48-57,$,_ |
| syn clear |
| call assert_match('not set', execute('syntax iskeyword')) |
| |
| syn clear |
| syn keyword Foo foo |
| if 0 |
| syn keyword NotAdded bar |
| endif |
| call assert_match('Foo', execute('syntax')) |
| call assert_notmatch('NotAdded', execute('highlight')) |
| |
| syn clear |
| syn keyword Foo foo |
| call assert_match('Foo', execute('syntax')) |
| call assert_match('Foo', execute('syntax list')) |
| call assert_notmatch('Foo', execute('if 0 | syntax | endif')) |
| call assert_notmatch('Foo', execute('if 0 | syntax list | endif')) |
| |
| syn clear |
| syn match Fopi /asdf/ |
| if 0 |
| syn match Fopx /asdf/ |
| endif |
| call assert_match('Fopi', execute('syntax')) |
| call assert_notmatch('Fopx', execute('syntax')) |
| |
| syn clear |
| syn spell toplevel |
| call assert_match('spell toplevel', execute('syntax spell')) |
| if 0 |
| syn spell notoplevel |
| endif |
| call assert_match('spell toplevel', execute('syntax spell')) |
| syn spell notoplevel |
| call assert_match('spell notoplevel', execute('syntax spell')) |
| syn spell default |
| call assert_match('spell default', execute('syntax spell')) |
| |
| syn clear |
| if 0 |
| syntax cluster Spell |
| endif |
| call assert_notmatch('Spell', execute('syntax')) |
| |
| syn clear |
| syn keyword Foo foo |
| syn sync ccomment |
| syn sync maxlines=5 |
| if 0 |
| syn sync maxlines=11 |
| endif |
| call assert_match('on C-style comments', execute('syntax sync')) |
| call assert_match('maximal 5 lines', execute('syntax sync')) |
| syn sync clear |
| if 0 |
| syn sync ccomment |
| endif |
| call assert_notmatch('on C-style comments', execute('syntax sync')) |
| |
| syn clear |
| endfunc |
| |
| func Test_syntax_invalid_arg() |
| call assert_fails('syntax case asdf', 'E390:') |
| if has('conceal') |
| call assert_fails('syntax conceal asdf', 'E390:') |
| endif |
| call assert_fails('syntax spell asdf', 'E390:') |
| call assert_fails('syntax clear @ABCD', 'E391:') |
| call assert_fails('syntax include @Xxx', 'E397:') |
| call assert_fails('syntax region X start="{"', 'E399:') |
| call assert_fails('syntax sync x', 'E404:') |
| call assert_fails('syntax keyword Abc a[', 'E789:') |
| call assert_fails('syntax keyword Abc a[bc]d', 'E890:') |
| endfunc |
| |
| func Test_syn_sync() |
| syntax region HereGroup start=/this/ end=/that/ |
| syntax sync match SyncHere grouphere HereGroup "pattern" |
| call assert_match('SyncHere', execute('syntax sync')) |
| syn sync clear |
| call assert_notmatch('SyncHere', execute('syntax sync')) |
| syn clear |
| endfunc |
| |
| func Test_syn_clear() |
| syntax keyword Foo foo |
| syntax keyword Bar tar |
| call assert_match('Foo', execute('syntax')) |
| call assert_match('Bar', execute('syntax')) |
| call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) |
| syn clear Foo |
| call assert_notmatch('Foo', execute('syntax')) |
| call assert_match('Bar', execute('syntax')) |
| call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) |
| syn clear Foo Bar |
| call assert_notmatch('Foo', execute('syntax')) |
| call assert_notmatch('Bar', execute('syntax')) |
| hi clear Foo |
| call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) |
| hi clear Bar |
| endfunc |
| |
| func Test_invalid_name() |
| syn clear |
| syn keyword Nop yes |
| call assert_fails("syntax keyword Wr\x17ong bar", 'E669:') |
| syntax keyword @Wrong bar |
| call assert_match('W18:', execute('1messages')) |
| syn clear |
| hi clear Nop |
| hi clear @Wrong |
| endfunc |
| |
| func Test_ownsyntax() |
| new Xfoo |
| call setline(1, '#define FOO') |
| syntax on |
| set filetype=c |
| ownsyntax perl |
| call assert_equal('perlComment', synIDattr(synID(line('.'), col('.'), 1), 'name')) |
| call assert_equal('c', b:current_syntax) |
| call assert_equal('perl', w:current_syntax) |
| |
| " A new split window should have the original syntax. |
| split |
| call assert_equal('cDefine', synIDattr(synID(line('.'), col('.'), 1), 'name')) |
| call assert_equal('c', b:current_syntax) |
| call assert_equal(0, exists('w:current_syntax')) |
| |
| wincmd x |
| call assert_equal('perlComment', synIDattr(synID(line("."), col("."), 1), "name")) |
| |
| syntax off |
| set filetype& |
| %bw! |
| endfunc |
| |
| func Test_ownsyntax_completion() |
| call feedkeys(":ownsyntax java\<C-A>\<C-B>\"\<CR>", 'tx') |
| call assert_equal('"ownsyntax java javacc javascript', @:) |
| endfunc |
| |
| func Test_highlight_invalid_arg() |
| if has('gui_running') |
| call assert_fails('hi XXX guifg=xxx', 'E254:') |
| endif |
| call assert_fails('hi DoesNotExist', 'E411:') |
| call assert_fails('hi link', 'E412:') |
| call assert_fails('hi link a', 'E412:') |
| call assert_fails('hi link a b c', 'E413:') |
| call assert_fails('hi XXX =', 'E415:') |
| call assert_fails('hi XXX cterm', 'E416:') |
| call assert_fails('hi XXX cterm=', 'E417:') |
| call assert_fails('hi XXX cterm=DoesNotExist', 'E418:') |
| call assert_fails('hi XXX ctermfg=DoesNotExist', 'E421:') |
| call assert_fails('hi XXX xxx=White', 'E423:') |
| endfunc |
| |