Skip to content

Instantly share code, notes, and snippets.

@watiko
Created January 29, 2016 11:12
Show Gist options
  • Save watiko/061deeb85029ee09ea36 to your computer and use it in GitHub Desktop.
Save watiko/061deeb85029ee09ea36 to your computer and use it in GitHub Desktop.
-- 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