| Test for matchadd() and conceal feature |
| |
| STARTTEST |
| :so small.vim |
| :if !has("conceal") | e! test.ok | w! test.out | qa! | endif |
| :set term=ansi |
| :so mbyte.vim |
| :if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif |
| :10new|:vsp|:vert resize 20 |
| :put =\"\#\ This\ is\ a\ Test\" |
| :norm! mazt |
| :fu! ScreenChar(width, lines) |
| : let c='' |
| : for j in range(1,a:lines) |
| : for i in range(1,a:width) |
| : let c.=nr2char(screenchar(j, i)) |
| : endfor |
| : let c.="\n" |
| : endfor |
| : return c |
| :endfu |
| :fu! ScreenAttr(line, pos, eval) |
| : let g:attr=[] |
| : for col in a:pos |
| : call add(g:attr, screenattr(a:line,col)) |
| : endfor |
| : " In case all values are zero, probably the terminal |
| : " isn't set correctly, so catch that case |
| : let null = (eval(join(g:attr, '+')) == 0) |
| : let str=substitute(a:eval, '\d\+', 'g:attr[&]', 'g') |
| : if null || eval(str) |
| : :let g:attr_test="OK: ". str |
| : else |
| : :let g:attr_test="FAILED: ".str |
| : :let g:attr_test.="\n". join(g:attr, ' ') |
| : :let g:attr_test.="\n TERM: ". &term |
| : endif |
| :endfu |
| :fu! DoRecordScreen() |
| : wincmd l |
| : $put =printf(\"\n%s\", g:test) |
| : $put =g:line |
| : $put =g:attr_test |
| : wincmd p |
| :endfu |
| :let g:test ="Test 1: simple addmatch()" |
| :call matchadd('Conceal', '\%2l ') |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| : |
| :let g:test ="Test 2: simple addmatch() and conceal (should be: #XThisXisXaXTest)" |
| :norm! 'azt |
| :call clearmatches() |
| :syntax on |
| :set concealcursor=n conceallevel=1 |
| :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| : |
| :let g:test ="Test 3: addmatch() and conceallevel=3 (should be: #ThisisaTest)" |
| :norm! 'azt |
| :set conceallevel=3 |
| :call clearmatches() |
| :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0==1 && 1==2 && 1==3 && 1==4 && 0!=5") |
| :call DoRecordScreen() |
| : |
| :let g:test ="Test 4: more match() (should be: #Thisisa Test)" |
| :norm! 'azt |
| :call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'}) |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0==1 && 1==2 && 0!=3 && 3==4 && 0!=5 && 3!=5") |
| :call DoRecordScreen() |
| : |
| :let g:test ="Test 5/1: default conceal char (should be: # This is a Test)" |
| :norm! 'azt |
| :call clearmatches() |
| :set conceallevel=1 |
| :call matchadd('Conceal', '\%2l ', 10, -1, {}) |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| :let g:test ="Test 5/2: default conceal char (should be: #+This+is+a+Test)" |
| :norm! 'azt |
| :set listchars=conceal:+ |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| :set listchars&vim |
| : |
| :let g:test ="Test 6/1: syn and match conceal (should be: #ZThisZisZaZTest)" |
| :norm! 'azt |
| :call clearmatches() |
| :set conceallevel=1 |
| :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'}) |
| :syn match MyConceal /\%2l / conceal containedin=ALL cchar=* |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| :let g:test ="Test 6/2: syn and match conceal (should be: #*This*is*a*Test)" |
| :norm! 'azt |
| :call clearmatches() |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| : |
| :let g:test ="Test 7/1: clear matches" |
| :norm! 'azt |
| :syn on |
| :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'}) |
| :let a=getmatches() |
| :call clearmatches() |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0==1 && 0==2 && 0==3 && 0==4 && 0==5") |
| :call DoRecordScreen() |
| :$put =a |
| :call setmatches(a) |
| :norm! 'azt |
| :let g:test ="Test 7/2: reset match using setmatches()" |
| :norm! 'azt |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| : |
| :let g:test ="Test 8: using matchaddpos() (should be #Pis a Test" |
| :norm! 'azt |
| :call clearmatches() |
| :call matchaddpos('Conceal', [[2,2,6]], 10, -1, {'conceal': 'P'}) |
| :let a=getmatches() |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1!=2 && 0==2 && 0==3 && 0!=4 && 0!=5 && 4==5") |
| :call DoRecordScreen() |
| :$put =a |
| : |
| :let g:test ="Test 9: match using multibyte conceal char (should be: #ˑThisˑisˑaˑTest)" |
| :norm! 'azt |
| :call clearmatches() |
| :call matchadd('Conceal', '\%2l ', 20, -1, {'conceal': "\u02d1"}) |
| :redraw! |
| :let line=ScreenChar(winwidth(0),1) |
| :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") |
| :call DoRecordScreen() |
| : |
| :"sleep 10 |
| :%w! test.out |
| :qa! |
| ENDTEST |
| dummy text |