diff src/testdir/test_breakindent.vim @ 10843:678edb254216 v8.0.0311

patch 8.0.0311: linebreak tests are old style commit https://github.com/vim/vim/commit/544d3bc9f0e494cb712a33b61558b8e8e12b1e0b Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 5 21:14:50 2017 +0100 patch 8.0.0311: linebreak tests are old style Problem: Linebreak tests are old style. Solution: Turn the tests into new style. Share utility functions. (Ozaki Kiichi, closes #1444)
author Christian Brabandt <cb@256bit.org>
date Sun, 05 Feb 2017 21:15:04 +0100
parents 957a1d560bda
children c004e17fa36b
line wrap: on
line diff
--- a/src/testdir/test_breakindent.vim
+++ b/src/testdir/test_breakindent.vim
@@ -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