mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.0.0311
Problem: Linebreak tests are old style.
Solution: Turn the tests into new style. Share utility functions. (Ozaki
Kiichi, closes vim/vim#1444)
544d3bc9f0
This commit is contained in:
parent
b7320471de
commit
c747b53f84
@ -2,171 +2,209 @@
|
||||
"
|
||||
" Note: if you get strange failures when adding new tests, it might be that
|
||||
" while the test is run, the breakindent cacheing gets in its way.
|
||||
" It helps to change the tabastop setting and force a redraw (e.g. see
|
||||
" It helps to change the tabstop setting and force a redraw (e.g. see
|
||||
" Test_breakindent08())
|
||||
if !exists('+breakindent')
|
||||
finish
|
||||
endif
|
||||
|
||||
source view_util.vim
|
||||
|
||||
let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP"
|
||||
|
||||
function s:screenline(lnum, width) abort
|
||||
" always get 4 screen lines
|
||||
redraw!
|
||||
let line = []
|
||||
for j in range(3)
|
||||
for c in range(1, a:width)
|
||||
call add(line, nr2char(screenchar(a:lnum+j, c)))
|
||||
endfor
|
||||
call add(line, "\n")
|
||||
endfor
|
||||
return join(line, '')
|
||||
function s:screen_lines(lnum, width) abort
|
||||
return ScreenLines([a:lnum, a:lnum + 2], a:width)
|
||||
endfunction
|
||||
|
||||
function s:testwindows(...)
|
||||
10new
|
||||
vsp
|
||||
vert resize 20
|
||||
setl ts=4 sw=4 sts=4 breakindent
|
||||
function! s:compare_lines(expect, actual)
|
||||
call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
|
||||
endfunction
|
||||
|
||||
function s:test_windows(...)
|
||||
call NewWindow(10, 20)
|
||||
setl ts=4 sw=4 sts=4 breakindent
|
||||
put =s:input
|
||||
if a:0
|
||||
exe a:1
|
||||
endif
|
||||
exe get(a:000, 0, '')
|
||||
endfunction
|
||||
|
||||
function s:close_windows(...)
|
||||
bw!
|
||||
if a:0
|
||||
exe a:1
|
||||
endif
|
||||
unlet! g:line g:expect
|
||||
call CloseWindow()
|
||||
exe get(a:000, 0, '')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent01()
|
||||
" simple breakindent test
|
||||
call s:testwindows('setl briopt=min:0')
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect=" abcd\n qrst\n GHIJ\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=min:0')
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ " abcd",
|
||||
\ " qrst",
|
||||
\ " GHIJ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunction
|
||||
|
||||
function Test_breakindent02()
|
||||
" simple breakindent test with showbreak set
|
||||
call s:testwindows('setl briopt=min:0 sbr=>>')
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect=" abcd\n >>qr\n >>EF\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=min:0 sbr=>>')
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ " abcd",
|
||||
\ " >>qr",
|
||||
\ " >>EF",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('set sbr=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent03()
|
||||
" simple breakindent test with showbreak set and briopt including sbr
|
||||
call s:testwindows('setl briopt=sbr,min:0 sbr=++')
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect=" abcd\n++ qrst\n++ GHIJ\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=sbr,min:0 sbr=++')
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ " abcd",
|
||||
\ "++ qrst",
|
||||
\ "++ GHIJ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
" clean up
|
||||
call s:close_windows('set sbr=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent04()
|
||||
" breakindent set with min width 18
|
||||
call s:testwindows('setl sbr= briopt=min:18')
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect=" abcd\n qrstuv\n IJKLMN\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl sbr= briopt=min:18')
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ " abcd",
|
||||
\ " qrstuv",
|
||||
\ " IJKLMN",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
" clean up
|
||||
call s:close_windows('set sbr=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent05()
|
||||
" breakindent set and shift by 2
|
||||
call s:testwindows('setl briopt=shift:2,min:0')
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect=" abcd\n qr\n EF\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=shift:2,min:0')
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ " abcd",
|
||||
\ " qr",
|
||||
\ " EF",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunction
|
||||
|
||||
function Test_breakindent06()
|
||||
" breakindent set and shift by -1
|
||||
call s:testwindows('setl briopt=shift:-1,min:0')
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect=" abcd\n qrstu\n HIJKL\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=shift:-1,min:0')
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ " abcd",
|
||||
\ " qrstu",
|
||||
\ " HIJKL",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunction
|
||||
|
||||
function Test_breakindent07()
|
||||
" breakindent set and shift by 1, Number set sbr=? and briopt:sbr
|
||||
call s:testwindows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n')
|
||||
let g:line=s:screenline(line('.'),10)
|
||||
let g:expect=" 2 ab\n? m\n? x\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n')
|
||||
let lines=s:screen_lines(line('.'),10)
|
||||
let expect=[
|
||||
\ " 2 ab",
|
||||
\ "? m",
|
||||
\ "? x",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
" clean up
|
||||
call s:close_windows('set sbr= cpo-=n')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent07a()
|
||||
" breakindent set and shift by 1, Number set sbr=? and briopt:sbr
|
||||
call s:testwindows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
|
||||
let g:line=s:screenline(line('.'),10)
|
||||
let g:expect=" 2 ab\n ? m\n ? x\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
|
||||
let lines=s:screen_lines(line('.'),10)
|
||||
let expect=[
|
||||
\ " 2 ab",
|
||||
\ " ? m",
|
||||
\ " ? x",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
" clean up
|
||||
call s:close_windows('set sbr=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent08()
|
||||
" breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
|
||||
call s:testwindows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4')
|
||||
call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4')
|
||||
" make sure, cache is invalidated!
|
||||
set ts=8
|
||||
redraw!
|
||||
set ts=4
|
||||
redraw!
|
||||
let g:line=s:screenline(line('.'),10)
|
||||
let g:expect=" 2 ^Iabcd\n# opq\n# BCD\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
let lines=s:screen_lines(line('.'),10)
|
||||
let expect=[
|
||||
\ " 2 ^Iabcd",
|
||||
\ "# opq",
|
||||
\ "# BCD",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('set sbr= cpo-=n')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent08a()
|
||||
" breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
|
||||
call s:testwindows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list')
|
||||
let g:line=s:screenline(line('.'),10)
|
||||
let g:expect=" 2 ^Iabcd\n # opq\n # BCD\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list')
|
||||
let lines=s:screen_lines(line('.'),10)
|
||||
let expect=[
|
||||
\ " 2 ^Iabcd",
|
||||
\ " # opq",
|
||||
\ " # BCD",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('set sbr=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent09()
|
||||
" breakindent set and shift by 1, Number and list set sbr=#
|
||||
call s:testwindows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list')
|
||||
let g:line=s:screenline(line('.'),10)
|
||||
let g:expect=" 2 ^Iabcd\n #op\n #AB\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list')
|
||||
let lines=s:screen_lines(line('.'),10)
|
||||
let expect=[
|
||||
\ " 2 ^Iabcd",
|
||||
\ " #op",
|
||||
\ " #AB",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('set sbr=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent10()
|
||||
" breakindent set, Number set sbr=~
|
||||
call s:testwindows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0')
|
||||
call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0')
|
||||
" make sure, cache is invalidated!
|
||||
set ts=8
|
||||
redraw!
|
||||
set ts=4
|
||||
redraw!
|
||||
let g:line=s:screenline(line('.'),10)
|
||||
let g:expect=" 2 ab\n~ mn\n~ yz\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
let lines=s:screen_lines(line('.'),10)
|
||||
let expect=[
|
||||
\ " 2 ab",
|
||||
\ "~ mn",
|
||||
\ "~ yz",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('set sbr= cpo-=n')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent11()
|
||||
" test strdisplaywidth()
|
||||
call s:testwindows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
|
||||
call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
|
||||
let text=getline(2)
|
||||
let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times
|
||||
call assert_equal(width, strdisplaywidth(text))
|
||||
@ -176,16 +214,20 @@ endfunction
|
||||
function Test_breakindent12()
|
||||
" test breakindent with long indent
|
||||
let s:input="\t\t\t\t\t{"
|
||||
call s:testwindows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-')
|
||||
let g:line=s:screenline(2,16)
|
||||
let g:expect=" 2 >--->--->--->\n ---{ \n~ \n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-')
|
||||
let lines=s:screen_lines(2,16)
|
||||
let expect=[
|
||||
\ " 2 >--->--->--->",
|
||||
\ " ---{ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('set nuw=4 listchars=')
|
||||
endfunction
|
||||
|
||||
function Test_breakindent13()
|
||||
let s:input=""
|
||||
call s:testwindows('setl breakindent briopt=min:10 ts=8')
|
||||
call s:test_windows('setl breakindent briopt=min:10 ts=8')
|
||||
vert resize 20
|
||||
call setline(1, [" a\tb\tc\td\te", " z y x w v"])
|
||||
1
|
||||
@ -199,26 +241,34 @@ endfunction
|
||||
|
||||
function Test_breakindent14()
|
||||
let s:input=""
|
||||
call s:testwindows('setl breakindent briopt= ts=8')
|
||||
call s:test_windows('setl breakindent briopt= ts=8')
|
||||
vert resize 30
|
||||
norm! 3a1234567890
|
||||
norm! a abcde
|
||||
exec "norm! 0\<C-V>tex"
|
||||
let g:line=s:screenline(line('.'),8)
|
||||
let g:expect="e \n~ \n~ \n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
let lines=s:screen_lines(line('.'),8)
|
||||
let expect=[
|
||||
\ "e ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunction
|
||||
|
||||
function Test_breakindent15()
|
||||
let s:input=""
|
||||
call s:testwindows('setl breakindent briopt= ts=8 sw=8')
|
||||
call s:test_windows('setl breakindent briopt= ts=8 sw=8')
|
||||
vert resize 30
|
||||
norm! 4a1234567890
|
||||
exe "normal! >>\<C-V>3f0x"
|
||||
let g:line=s:screenline(line('.'),20)
|
||||
let g:expect=" 1234567890 \n~ \n~ \n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
let lines=s:screen_lines(line('.'),20)
|
||||
let expect=[
|
||||
\ " 1234567890 ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunction
|
||||
|
||||
@ -226,16 +276,24 @@ function Test_breakindent16()
|
||||
" Check that overlong lines are indented correctly.
|
||||
" TODO: currently it does not fail even when the bug is not fixed.
|
||||
let s:input=""
|
||||
call s:testwindows('setl breakindent briopt=min:0 ts=4')
|
||||
call s:test_windows('setl breakindent briopt=min:0 ts=4')
|
||||
call setline(1, "\t".repeat("1234567890", 10))
|
||||
resize 6
|
||||
norm! 1gg$
|
||||
redraw!
|
||||
let g:line=s:screenline(1,10)
|
||||
let g:expect=" 123456\n 789012\n 345678\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
let g:line=s:screenline(4,10)
|
||||
let g:expect=" 901234\n 567890\n 123456\n"
|
||||
call assert_equal(g:expect, g:line)
|
||||
let lines=s:screen_lines(1,10)
|
||||
let expect=[
|
||||
\ " 123456",
|
||||
\ " 789012",
|
||||
\ " 345678",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
let lines=s:screen_lines(4,10)
|
||||
let expect=[
|
||||
\ " 901234",
|
||||
\ " 567890",
|
||||
\ " 123456",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunction
|
||||
|
219
src/nvim/testdir/test_listlbr.vim
Normal file
219
src/nvim/testdir/test_listlbr.vim
Normal file
@ -0,0 +1,219 @@
|
||||
" Test for linebreak and list option (non-utf8)
|
||||
|
||||
set encoding=latin1
|
||||
scriptencoding latin1
|
||||
|
||||
if !exists("+linebreak") || !has("conceal")
|
||||
finish
|
||||
endif
|
||||
|
||||
source view_util.vim
|
||||
|
||||
function s:screen_lines(lnum, width) abort
|
||||
return ScreenLines(a:lnum, a:width)
|
||||
endfunction
|
||||
|
||||
function! s:compare_lines(expect, actual)
|
||||
call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
|
||||
endfunction
|
||||
|
||||
function s:test_windows(...)
|
||||
call NewWindow(10, 20)
|
||||
setl ts=8 sw=4 sts=4 linebreak sbr= wrap
|
||||
exe get(a:000, 0, '')
|
||||
endfunction
|
||||
|
||||
function s:close_windows(...)
|
||||
call CloseWindow()
|
||||
exe get(a:000, 0, '')
|
||||
endfunction
|
||||
|
||||
func Test_set_linebreak()
|
||||
call s:test_windows('setl ts=4 sbr=+')
|
||||
call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ " abcdef ",
|
||||
\ "+hijklmn ",
|
||||
\ "+pqrstuvwxyz_1060ABC",
|
||||
\ "+DEFGHIJKLMNOP ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_linebreak_with_list()
|
||||
call s:test_windows('setl ts=4 sbr=+ list listchars=')
|
||||
call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "^Iabcdef hijklmn^I ",
|
||||
\ "+pqrstuvwxyz_1060ABC",
|
||||
\ "+DEFGHIJKLMNOP ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_linebreak_with_nolist()
|
||||
call s:test_windows('setl ts=4 sbr=+ nolist')
|
||||
call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ " abcdef ",
|
||||
\ "+hijklmn ",
|
||||
\ "+pqrstuvwxyz_1060ABC",
|
||||
\ "+DEFGHIJKLMNOP ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_should_break()
|
||||
call s:test_windows('setl sbr=+ nolist')
|
||||
call setline(1, "1\t" . repeat('a', winwidth(0)-2))
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "1 ",
|
||||
\ "+aaaaaaaaaaaaaaaaaa ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_linebreak_with_conceal()
|
||||
call s:test_windows('setl cpo&vim sbr=+ list conceallevel=2 concealcursor=nv listchars=tab:ab')
|
||||
call setline(1, "_S_\t bla")
|
||||
syn match ConcealVar contained /_/ conceal
|
||||
syn match All /.*/ contains=ConcealVar
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "Sabbbbbb bla ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_virtual_block()
|
||||
call s:test_windows('setl sbr=+')
|
||||
call setline(1, [
|
||||
\ "REMOVE: this not",
|
||||
\ "REMOVE: aaaaaaaaaaaaa",
|
||||
\ ])
|
||||
exe "norm! 1/^REMOVE:"
|
||||
exe "norm! 0\<C-V>jf x"
|
||||
$put
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "this not ",
|
||||
\ "aaaaaaaaaaaaa ",
|
||||
\ "REMOVE: ",
|
||||
\ "REMOVE: ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_virtual_block_and_vbA()
|
||||
call s:test_windows()
|
||||
call setline(1, "long line: " . repeat("foobar ", 40) . "TARGET at end")
|
||||
exe "norm! $3B\<C-v>eAx\<Esc>"
|
||||
let lines = s:screen_lines([1, 10], winwidth(0))
|
||||
let expect = [
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar foobar ",
|
||||
\ "foobar TARGETx at ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_virtual_char_and_block()
|
||||
call s:test_windows()
|
||||
call setline(1, "1111-1111-1111-11-1111-1111-1111")
|
||||
exe "norm! 0f-lv3lc2222\<Esc>bgj."
|
||||
let lines = s:screen_lines([1, 2], winwidth(0))
|
||||
let expect = [
|
||||
\ "1111-2222-1111-11- ",
|
||||
\ "1111-2222-1111 ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_undo_after_block_visual()
|
||||
call s:test_windows()
|
||||
call setline(1, ["aaa", "aaa", "a"])
|
||||
exe "norm! gg\<C-V>2j~e."
|
||||
let lines = s:screen_lines([1, 3], winwidth(0))
|
||||
let expect = [
|
||||
\ "AaA ",
|
||||
\ "AaA ",
|
||||
\ "A ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_norm_after_block_visual()
|
||||
call s:test_windows()
|
||||
call setline(1, ["abcd{ef", "ghijklm", "no}pgrs"])
|
||||
exe "norm! ggf{\<C-V>\<C-V>c%"
|
||||
let lines = s:screen_lines([1, 3], winwidth(0))
|
||||
let expect = [
|
||||
\ "abcdpgrs ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_block_replace_after_wrapping()
|
||||
call s:test_windows()
|
||||
call setline(1, repeat("a", 150))
|
||||
exe "norm! 0yypk147|\<C-V>jr0"
|
||||
call assert_equal(repeat("a", 146) . "0aaa", getline(1))
|
||||
call assert_equal(repeat("a", 146) . "0aaa", getline(2))
|
||||
let lines = s:screen_lines([1, 10], winwidth(0))
|
||||
let expect = [
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aaaaaa0aaa ",
|
||||
\ "@ ",
|
||||
\ "@ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_list_with_listchars()
|
||||
call s:test_windows('setl list listchars=space:_,trail:-,tab:>-,eol:$')
|
||||
call setline(1, "a aaaaaaaaaaaaaaaaaaaaaa\ta ")
|
||||
let lines = s:screen_lines([1, 3], winwidth(0))
|
||||
let expect = [
|
||||
\ "a_ ",
|
||||
\ "aaaaaaaaaaaaaaaaaaaa",
|
||||
\ "aa>-----a-$ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
195
src/nvim/testdir/test_listlbr_utf8.vim
Normal file
195
src/nvim/testdir/test_listlbr_utf8.vim
Normal file
@ -0,0 +1,195 @@
|
||||
" Test for linebreak and list option in utf-8 mode
|
||||
|
||||
set encoding=utf-8
|
||||
scriptencoding utf-8
|
||||
|
||||
if !exists("+linebreak") || !has("conceal") || !has("signs")
|
||||
finish
|
||||
endif
|
||||
|
||||
source view_util.vim
|
||||
|
||||
function s:screen_lines(lnum, width) abort
|
||||
return ScreenLines(a:lnum, a:width)
|
||||
endfunction
|
||||
|
||||
function! s:compare_lines(expect, actual)
|
||||
call assert_equal(a:expect, a:actual)
|
||||
endfunction
|
||||
|
||||
function s:screen_attr(lnum, chars, ...) abort
|
||||
let line = getline(a:lnum)
|
||||
let attr = []
|
||||
let prefix = get(a:000, 0, 0)
|
||||
for i in range(a:chars[0], a:chars[1])
|
||||
let scol = strdisplaywidth(strcharpart(line, 0, i-1)) + 1
|
||||
let attr += [screenattr(a:lnum, scol + prefix)]
|
||||
endfor
|
||||
return attr
|
||||
endfunction
|
||||
|
||||
function s:test_windows(...)
|
||||
call NewWindow(10, 20)
|
||||
setl ts=4 sw=4 sts=4 linebreak sbr=+ wrap
|
||||
exe get(a:000, 0, '')
|
||||
endfunction
|
||||
|
||||
function s:close_windows(...)
|
||||
call CloseWindow()
|
||||
exe get(a:000, 0, '')
|
||||
endfunction
|
||||
|
||||
func Test_linebreak_with_fancy_listchars()
|
||||
call s:test_windows("setl list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
|
||||
call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP ")
|
||||
redraw!
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "▕———abcdef ",
|
||||
\ "+hijklmn▕——— ",
|
||||
\ "+pqrstuvwxyz␣1060ABC",
|
||||
\ "+DEFGHIJKLMNOPˑ¶ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_nolinebreak_with_list()
|
||||
call s:test_windows("setl nolinebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
|
||||
call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP ")
|
||||
redraw!
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "▕———abcdef hijklmn▕—",
|
||||
\ "+pqrstuvwxyz␣1060ABC",
|
||||
\ "+DEFGHIJKLMNOPˑ¶ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_linebreak_with_nolist()
|
||||
call s:test_windows('setl nolist')
|
||||
call setline(1, "\t*mask = nil;")
|
||||
redraw!
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ " *mask = nil; ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ "~ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_list_and_concealing1()
|
||||
call s:test_windows('setl list listchars=tab:>- cole=1')
|
||||
call setline(1, [
|
||||
\ "#define ABCDE\t\t1",
|
||||
\ "#define ABCDEF\t\t1",
|
||||
\ "#define ABCDEFG\t\t1",
|
||||
\ "#define ABCDEFGH\t1",
|
||||
\ "#define MSG_MODE_FILE\t\t\t1",
|
||||
\ "#define MSG_MODE_CONSOLE\t\t2",
|
||||
\ "#define MSG_MODE_FILE_AND_CONSOLE\t3",
|
||||
\ "#define MSG_MODE_FILE_THEN_CONSOLE\t4",
|
||||
\ ])
|
||||
vert resize 40
|
||||
syn match Conceal conceal cchar=>'AB\|MSG_MODE'
|
||||
redraw!
|
||||
let lines = s:screen_lines([1, 7], winwidth(0))
|
||||
let expect = [
|
||||
\ "#define ABCDE>-->---1 ",
|
||||
\ "#define >CDEF>-->---1 ",
|
||||
\ "#define >CDEFG>->---1 ",
|
||||
\ "#define >CDEFGH>----1 ",
|
||||
\ "#define >_FILE>--------->--->---1 ",
|
||||
\ "#define >_CONSOLE>---------->---2 ",
|
||||
\ "#define >_FILE_AND_CONSOLE>---------3 ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_list_and_concealing2()
|
||||
call s:test_windows('setl nowrap ts=2 list listchars=tab:>- cole=2 concealcursor=n')
|
||||
call setline(1, "bbeeeeee\t\t;\tsome text")
|
||||
vert resize 40
|
||||
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 lines = s:screen_lines([1, 1], winwidth(0))
|
||||
let expect = [
|
||||
\ "eeeeee>--->-;>some text ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_screenattr_for_comment()
|
||||
call s:test_windows("setl ft=c ts=7 list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
|
||||
call setline(1, " /*\t\t and some more */")
|
||||
norm! gg0
|
||||
syntax on
|
||||
hi SpecialKey term=underline ctermfg=red guifg=red
|
||||
redraw!
|
||||
let line = getline(1)
|
||||
let attr = s:screen_attr(1, [1, 6])
|
||||
call assert_notequal(attr[0], attr[1])
|
||||
call assert_notequal(attr[1], attr[3])
|
||||
call assert_notequal(attr[3], attr[5])
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_visual_block_and_selection_exclusive()
|
||||
call s:test_windows('setl selection=exclusive')
|
||||
call setline(1, "long line: " . repeat("foobar ", 40) . "TARGETÃ' at end")
|
||||
exe "norm! $3B\<C-v>eAx\<Esc>"
|
||||
let lines = s:screen_lines([1, 10], winwidth(0))
|
||||
let expect = [
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar foobar ",
|
||||
\ "+foobar TARGETÃx' ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_multibyte_sign_and_colorcolumn()
|
||||
call s:test_windows("setl nolinebreak cc=3 list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
|
||||
call setline(1, ["", "a b c", "a b c"])
|
||||
exe "sign define foo text=\uff0b"
|
||||
exe "sign place 1 name=foo line=2 buffer=" . bufnr('%')
|
||||
redraw!
|
||||
norm! ggj0
|
||||
let signwidth = strdisplaywidth("\uff0b")
|
||||
let attr1 = s:screen_attr(2, [1, 3], signwidth)
|
||||
let attr2 = s:screen_attr(3, [1, 3], signwidth)
|
||||
call assert_equal(attr1[0], attr2[0])
|
||||
call assert_equal(attr1[1], attr2[1])
|
||||
call assert_equal(attr1[2], attr2[2])
|
||||
let lines = s:screen_lines([1, 3], winwidth(0))
|
||||
let expect = [
|
||||
\ " ¶ ",
|
||||
\ "+a b c¶ ",
|
||||
\ " a b c¶ ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
30
src/nvim/testdir/view_util.vim
Normal file
30
src/nvim/testdir/view_util.vim
Normal file
@ -0,0 +1,30 @@
|
||||
" Functions about view shared by several tests
|
||||
|
||||
" ScreenLines(lnum, width) or
|
||||
" ScreenLines([start, end], width)
|
||||
function! ScreenLines(lnum, width) abort
|
||||
redraw!
|
||||
if type(a:lnum) == v:t_list
|
||||
let start = a:lnum[0]
|
||||
let end = a:lnum[1]
|
||||
else
|
||||
let start = a:lnum
|
||||
let end = a:lnum
|
||||
endif
|
||||
let lines = []
|
||||
for l in range(start, end)
|
||||
let lines += [join(map(range(1, a:width), 'nr2char(screenchar(l, v:val))'), '')]
|
||||
endfor
|
||||
return lines
|
||||
endfunction
|
||||
|
||||
function! NewWindow(height, width) abort
|
||||
exe a:height . 'new'
|
||||
exe a:width . 'vsp'
|
||||
redraw!
|
||||
endfunction
|
||||
|
||||
function! CloseWindow() abort
|
||||
bw!
|
||||
redraw!
|
||||
endfunction
|
@ -641,7 +641,7 @@ static const int included_patches[] = {
|
||||
// 314,
|
||||
// 313,
|
||||
// 312,
|
||||
// 311,
|
||||
311,
|
||||
// 310,
|
||||
// 309,
|
||||
// 308,
|
||||
|
Loading…
Reference in New Issue
Block a user