Skip to content

Instantly share code, notes, and snippets.

@ichizok
Last active February 3, 2017 06:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ichizok/4d177e3bf8cc9d47d47243577c8d847b to your computer and use it in GitHub Desktop.
Save ichizok/4d177e3bf8cc9d47d47243577c8d847b to your computer and use it in GitHub Desktop.
diff --git a/src/Makefile b/src/Makefile
index 65c7881e5..6f815b948 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2162,6 +2162,7 @@ test_arglist \
test_nested_function \
test_netbeans \
test_normal \
+ test_number \
test_options \
test_packadd \
test_partial \
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index c42aae63b..60ee6131f 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -173,6 +173,7 @@ NEW_TESTS = test_arglist.res \
test_nested_function.res \
test_netbeans.res \
test_normal.res \
+ test_number.res \
test_packadd.res \
test_paste.res \
test_perl.res \
diff --git a/src/testdir/test_breakindent.vim b/src/testdir/test_breakindent.vim
index bf363dcf8..be1f2464f 100644
--- a/src/testdir/test_breakindent.vim
+++ b/src/testdir/test_breakindent.vim
@@ -8,165 +8,203 @@ 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, '')
-endfunction
-
-function s:testwindows(...)
- 10new
- vsp
- vert resize 20
- setl ts=4 sw=4 sts=4 breakindent
+function s:screen_lines(lnum, width) abort
+ return ScreenLines([a:lnum, a:lnum + 2], 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=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
diff --git a/src/testdir/test_number.vim b/src/testdir/test_number.vim
new file mode 100644
index 000000000..298041a47
--- /dev/null
+++ b/src/testdir/test_number.vim
@@ -0,0 +1,197 @@
+" Test for number and relativenumber
+"
+
+source view_util.vim
+
+let s:input = ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]
+
+function! s:screen_lines(start, end) abort
+ return ScreenLines([a:start, a:end], 8)
+endfunction
+
+function! s:compare_lines(expect, actual)
+ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
+endfunction
+
+function! s:test_windows(h, w) abort
+ call NewWindow(a:h, a:w)
+endfunction
+
+function! s:close_windows() abort
+ call CloseWindow()
+endfunction
+
+function! s:validate_cursor() abort
+ " update skipcol.
+ " wincol():
+ " f_wincol
+ " -> validate_cursor
+ " -> curs_columns
+ call wincol()
+endfunction
+
+func Test_set_number()
+ call s:test_windows(10, 20)
+ call setline(1, s:input)
+ setl number
+ let lines = s:screen_lines(1, 4)
+ let expect = [
+ \ " 1 abcd",
+ \ " 2 klmn",
+ \ " 3 uvwx",
+ \ " 4 EFGH",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunc
+
+func Test_set_relativenumber()
+ call s:test_windows(10, 20)
+ call setline(1, s:input)
+ 3
+ setl relativenumber
+ let lines = s:screen_lines(1, 6)
+ let expect = [
+ \ " 2 abcd",
+ \ " 1 klmn",
+ \ " 0 uvwx",
+ \ " 1 EFGH",
+ \ " 2 OPQR",
+ \ " 3 YZ ",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunc
+
+func Test_number_with_relativenumber()
+ call s:test_windows(10, 20)
+ call setline(1, s:input)
+ 4
+ setl number relativenumber
+ let lines = s:screen_lines(1, 6)
+ let expect = [
+ \ " 3 abcd",
+ \ " 2 klmn",
+ \ " 1 uvwx",
+ \ "4 EFGH",
+ \ " 1 OPQR",
+ \ " 2 YZ ",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunc
+
+func Test_number_with_linewrap01()
+ call s:test_windows(3, 20)
+ normal! 61ia
+ setl number wrap
+ call s:validate_cursor()
+ let lines = s:screen_lines(1, 3)
+ let expect = [
+ \ "--1 aaaa",
+ \ " aaaa",
+ \ " aaaa",
+ \ ]
+ call s:compare_lines(expect, lines)
+ 0
+ call s:validate_cursor()
+ let lines = s:screen_lines(1, 3)
+ let expect = [
+ \ " 1 aaaa",
+ \ " aaaa",
+ \ " aaaa",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunc
+
+func Test_number_with_linewrap02()
+ call s:test_windows(4, 20)
+ normal! 81ia
+ setl number wrap
+ call s:validate_cursor()
+ setl nonumber
+ call s:validate_cursor()
+ let lines = s:screen_lines(1, 4)
+ let expect = [
+ \ "aaaaaaaa",
+ \ "aaaaaaaa",
+ \ "aaaaaaaa",
+ \ "a ",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunc
+
+func Test_number_with_numberwidth()
+ call s:test_windows(10, 20)
+ call setline(1, repeat(['aaaa'], 10))
+ setl number numberwidth=6
+ let lines = s:screen_lines(1, 3)
+ let expect = [
+ \ " 1 aa",
+ \ " 2 aa",
+ \ " 3 aa",
+ \ ]
+ call s:compare_lines(expect, lines)
+
+ set relativenumber
+ let lines = s:screen_lines(1, 3)
+ let expect = [
+ \ "1 aa",
+ \ " 1 aa",
+ \ " 2 aa",
+ \ ]
+ call s:compare_lines(expect, lines)
+
+ set nonumber
+ let lines = s:screen_lines(1, 3)
+ let expect = [
+ \ " 0 aa",
+ \ " 1 aa",
+ \ " 2 aa",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunction
+
+func Test_number_with_numberwidth_adjusted()
+ call s:test_windows(10, 20)
+ call setline(1, repeat(['aaaa'], 10000))
+ setl number numberwidth=4
+ let lines = s:screen_lines(1, 3)
+ let expect = [
+ \ " 1 aa",
+ \ " 2 aa",
+ \ " 3 aa",
+ \ ]
+ call s:compare_lines(expect, lines)
+
+ normal! G
+ let lines = s:screen_lines(8, 10)
+ let expect = [
+ \ " 9998 aa",
+ \ " 9999 aa",
+ \ "10000 aa",
+ \ ]
+ call s:compare_lines(expect, lines)
+
+ setl relativenumber
+ let lines = s:screen_lines(8, 10)
+ let expect = [
+ \ " 2 aa",
+ \ " 1 aa",
+ \ "10000 aa",
+ \ ]
+ call s:compare_lines(expect, lines)
+
+ setl nonumber
+ let lines = s:screen_lines(8, 10)
+ let expect = [
+ \ " 2 aaaa",
+ \ " 1 aaaa",
+ \ " 0 aaaa",
+ \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+endfunc
diff --git a/src/testdir/view_util.vim b/src/testdir/view_util.vim
new file mode 100644
index 000000000..eb9263076
--- /dev/null
+++ b/src/testdir/view_util.vim
@@ -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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment