Created
January 29, 2016 11:12
-
-
Save watiko/061deeb85029ee09ea36 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Test for linebreak and list option in utf-8 mode | |
local helpers = require('test.functional.helpers') | |
local clear = helpers.clear | |
local dedent = helpers.dedent | |
local eq = helpers.eq | |
local expect = helpers.expect | |
local feed = helpers.feed | |
local nvim = helpers.meths | |
local source = helpers.source | |
local function expect_line(line) | |
local expected = dedent(line) | |
local actual = nvim.get_var('line') | |
eq(expected, actual) | |
end | |
describe('linebreak', function() | |
before_each(function() | |
clear() | |
source([[ | |
set wildchar=^E | |
10new | |
vsp | |
vert resize 20 | |
set ts=4 sw=4 sts=4 linebreak sbr=+ wrap | |
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! DoRecordScreen() | |
wincmd l | |
$put =printf(\"\n%s\", g:test) | |
$put =g:line | |
wincmd p | |
endfu | |
]]) | |
end) | |
it('Test 1: set linebreak + set list + fancy listchars', function() | |
source([[ | |
put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \" | |
norm! zt | |
set linebreak list listchars=nbsp:␣,tab:▕—,trail:ˑ,eol:¶ | |
redraw! | |
let line = ScreenChar(winwidth(0),4) | |
]]) | |
expect_line([[ | |
▕———abcdef | |
+hijklmn▕——— | |
+pqrstuvwxyz␣1060ABC | |
+DEFGHIJKLMNOPˑ¶ | |
]]) | |
end) | |
it('Test 2: set nolinebreak list', function() | |
source([[ | |
put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \" | |
norm! zt | |
set nolinebreak list listchars=nbsp:␣,tab:▕—,trail:ˑ,eol:¶ | |
redraw! | |
let line=ScreenChar(winwidth(0),4) | |
]]) | |
expect_line([[ | |
▕———abcdef hijklmn▕— | |
+pqrstuvwxyz␣1060ABC | |
+DEFGHIJKLMNOPˑ¶ | |
~ | |
]]) | |
end) | |
it('Test 3: set linebreak nolist', function() | |
source([[ | |
$put =\"\t*mask = nil;\" | |
$ | |
norm! zt | |
set nolist linebreak | |
redraw! | |
let line=ScreenChar(winwidth(0),4) | |
]]) | |
expect_line([[ | |
*mask = nil; | |
~ | |
~ | |
~ | |
]]) | |
end) | |
it('Test 4: set linebreak list listchars and concealing', function() | |
source([[ | |
let c_defines=[ | |
\ '#define ABCDE 1', | |
\ '#define ABCDEF 1', | |
\ '#define ABCDEFG 1', | |
\ '#define ABCDEFGH 1', | |
\ '#define MSG_MODE_FILE 1', | |
\ '#define MSG_MODE_CONSOLE 2', | |
\ '#define MSG_MODE_FILE_AND_CONSOLE 3', | |
\ '#define MSG_MODE_FILE_THEN_CONSOLE 4' | |
\ ] | |
call append('$', c_defines) | |
vert resize 40 | |
$-7 | |
norm! zt | |
set list linebreak listchars=tab:>- cole=1 | |
syn match Conceal conceal cchar=>'AB\|MSG_MODE' | |
redraw! | |
let line=ScreenChar(winwidth(0),7) | |
]]) | |
expect_line([[ | |
#define ABCDE>-->---1 | |
#define >CDEF>-->---1 | |
#define >CDEFG>->---1 | |
#define >CDEFGH>----1 | |
#define >_FILE>--------->--->---1 | |
#define >_CONSOLE>---------->---2 | |
#define >_FILE_AND_CONSOLE>---------3 | |
]]) | |
end) | |
it('Test 5: set linebreak list listchars and concealing part2', function() | |
source([[ | |
let c_defines=['bbeeeeee ; some text'] | |
call append('$', c_defines) | |
vert resize 40 | |
$ | |
norm! zt | |
set nowrap ts=2 list linebreak listchars=tab:>- cole=2 concealcursor=n | |
syn clear | |
syn match meaning /;\s*\zs.*/ | |
syn match hasword /^\x\{8}/ contains=word | |
syn match word /\<\x\{8}\>/ contains=beginword,endword contained | |
syn match beginword /\<\x\x/ contained conceal | |
syn match endword /\x\{6}\>/ contained | |
hi meaning guibg=blue | |
hi beginword guibg=green | |
hi endword guibg=red | |
redraw! | |
let line=ScreenChar(winwidth(0),1) | |
]]) | |
expect_line([[ | |
eeeeee>--->-;>some text | |
]]) | |
end) | |
it('Test 6: Screenattributes for comment', function() | |
source([[ | |
call append('$', ' /* and some more */') | |
set ft=c ts=7 linebreak list listchars=nbsp:␣,tab:▕—,trail:ˑ,eol:¶ | |
syntax on | |
hi SpecialKey term=underline ctermfg=red guifg=red | |
let attr=[] | |
nnoremap <expr> GG ":let attr += ['".screenattr(screenrow(),screencol())."']\n" | |
$ | |
norm! zt0 | |
]]) | |
feed('GGlGGlGGlGGlGGlGGlGGlGGlGGlGGl') | |
source([[ | |
if attr[0] != attr[1] && attr[1] != attr[3] && attr[3] != attr[5] | |
let line = "Attribut 0 and 1 and 3 and 5 are different!" | |
else | |
let line = "Not all attributes are different" | |
endif | |
]]) | |
expect_line("Attribut 0 and 1 and 3 and 5 are different!") | |
end) | |
it('Test 8: set linebreak with visual block mode and v_b_A and so on', function() | |
-- Test 8: set linebreak with visual block mode and v_b_A and | |
-- selection=exclusive and multibyte char | |
source([[ | |
set cpo&vi linebreak selection=exclusive | |
]]) | |
feed("Golong line: <Esc>40afoobar <Esc>aTARGETÃ' at end<Esc>") | |
source([[ | |
exe "norm! $3B\<C-v>eAx\<Esc>" | |
]]) | |
expect( | |
"\nlong line: ".. | |
"foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar ".. | |
"foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar ".. | |
"foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar ".. | |
"foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar ".. | |
"TARGETÃx' at end" | |
) | |
end) | |
it('Test 9: a multibyte sign and colorcolumn', function() | |
source([[ | |
nnoremap <expr> GG ":let attr += ['".screenattr(screenrow(),screencol())."']\n" | |
let attr=[] | |
let attr2=[] | |
$put ='' | |
$put ='a b c' | |
$put ='a b c' | |
set nolinebreak list listchars=eol:¶ cc=3 | |
sign define foo text=+ | |
sign place 1 name=foo line=3 buffer=2 | |
norm! 2kztj | |
let line1=line('.') | |
]]) | |
feed('0GGlGGlGGlGGl') | |
source([[ | |
let line2=line('.') | |
let attr2=attr | |
let attr=[] | |
]]) | |
feed('0GGlGGlGGlGGl') | |
source([[ | |
redraw! | |
let line=ScreenChar(winwidth(0),3) | |
" expected: attr[2] is different because of colorcolumn | |
if attr[0] != attr2[0] || attr[1] != attr2[1] || attr[2] != attr2[2] | |
let line.="Screen attributes are different!" | |
else | |
let line.="Screen attributes are the same!" | |
endif | |
]]) | |
expect_line([[ | |
¶ | |
+a b c¶ | |
a b c¶ | |
Screen attributes are the same!]]) | |
end) | |
end) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment