123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- " Test for linebreak and list option (non-utf8)
- scriptencoding latin1
- source check.vim
- CheckOption linebreak
- CheckFeature conceal
- source view_util.vim
- source screendump.vim
- function s:screen_lines(lnum, width) abort
- return ScreenLines(a:lnum, a:width)
- endfunction
- func s:compare_lines(expect, actual)
- call assert_equal(a:expect, a:actual)
- endfunc
- 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()
- throw 'skipped: Nvim does not support enc=latin1'
- set listchars=
- 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()
- set listchars&vim
- 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_linebreak_with_list_and_number()
- call s:test_windows('setl list listchars+=tab:>-')
- call setline(1, ["abcdefg\thijklmnopqrstu", "v"])
- let lines = s:screen_lines([1, 4], winwidth(0))
- let expect_nonumber = [
- \ "abcdefg>------------",
- \ "hijklmnopqrstu$ ",
- \ "v$ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect_nonumber, lines)
- setl number
- let lines = s:screen_lines([1, 4], winwidth(0))
- let expect_number = [
- \ " 1 abcdefg>--------",
- \ " hijklmnopqrstu$ ",
- \ " 2 v$ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect_number, 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_linebreak_with_visual_operations()
- call s:test_windows()
- let line = '1234567890 2234567890 3234567890'
- call setline(1, line)
- " yank
- exec "norm! ^w\<C-V>ey"
- call assert_equal('2234567890', @@)
- exec "norm! w\<C-V>ey"
- call assert_equal('3234567890', @@)
- " increment / decrement
- exec "norm! ^w\<C-V>\<C-A>w\<C-V>\<C-X>"
- call assert_equal('1234567890 3234567890 2234567890', getline(1))
- " replace
- exec "norm! ^w\<C-V>3lraw\<C-V>3lrb"
- call assert_equal('1234567890 aaaa567890 bbbb567890', getline(1))
- " tilde
- exec "norm! ^w\<C-V>2l~w\<C-V>2l~"
- call assert_equal('1234567890 AAAa567890 BBBb567890', getline(1))
- " delete and insert
- exec "norm! ^w\<C-V>3lc2345\<Esc>w\<C-V>3lc3456\<Esc>"
- call assert_equal('1234567890 2345567890 3456567890', getline(1))
- call assert_equal('BBBb', @@)
- call s:close_windows()
- endfunc
- " Test that cursor is drawn at correct position after an operator when
- " 'linebreak' is enabled.
- func Test_linebreak_reset_restore()
- CheckScreendump
- " f_wincol() calls validate_cursor()
- let lines =<< trim END
- set linebreak showcmd noshowmode formatexpr=wincol()-wincol()
- call setline(1, repeat('a', &columns - 10) .. ' bbbbbbbbbb c')
- END
- call writefile(lines, 'XlbrResetRestore', 'D')
- let buf = RunVimInTerminal('-S XlbrResetRestore', {'rows': 8})
- call term_sendkeys(buf, '$v$')
- call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])})
- call term_sendkeys(buf, 'zo')
- call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])})
- call term_sendkeys(buf, '$v$')
- call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])})
- call term_sendkeys(buf, 'gq')
- call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])})
- call term_sendkeys(buf, "$\<C-V>$")
- call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])})
- call term_sendkeys(buf, 'I')
- call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])})
- call term_sendkeys(buf, "\<Esc>$v$")
- call WaitForAssert({-> assert_equal(13, term_getcursor(buf)[1])})
- call term_sendkeys(buf, 's')
- call WaitForAssert({-> assert_equal(12, term_getcursor(buf)[1])})
- call VerifyScreenDump(buf, 'Test_linebreak_reset_restore_1', {})
- " clean up
- call term_sendkeys(buf, "\<Esc>")
- call StopVimInTerminal(buf)
- 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 = [
- \ "<<<bar 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()
- throw 'skipped: Nvim does not support enc=latin1'
- 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
- func Test_list_with_tab_and_skipping_first_chars()
- call s:test_windows('setl list listchars=tab:>- ts=70 nowrap')
- call setline(1, ["iiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa"])
- call cursor(4,64)
- norm! 2zl
- let lines = s:screen_lines([1, 4], winwidth(0))
- let expect = [
- \ "---------------aaaaa",
- \ "---------------aaaaa",
- \ "---------------aaaaa",
- \ "iiiiiiiii>-----aaaaa",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_ctrl_char_on_wrap_column()
- call s:test_windows("setl nolbr wrap sbr=")
- call setline(1, 'aaa' .. repeat("\<C-A>", 150) .. 'bbb')
- call cursor(1,1)
- norm! $
- redraw!
- let expect=[
- \ '<<<^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^A^A^A^A^A^A^A^A^A^',
- \ 'A^Abbb ']
- let lines = s:screen_lines([1, 10], winwidth(0))
- call s:compare_lines(expect, lines)
- call assert_equal(len(expect), winline())
- call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
- setl sbr=!!
- redraw!
- let expect=[
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^A^A^A^',
- \ '!!A^A^A^A^A^A^Abbb ']
- let lines = s:screen_lines([1, 10], winwidth(0))
- call s:compare_lines(expect, lines)
- call assert_equal(len(expect), winline())
- call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
- call s:close_windows()
- endfunc
- func Test_linebreak_no_break_after_whitespace_only()
- call s:test_windows('setl ts=4 linebreak wrap')
- call setline(1, "\t abcdefghijklmnopqrstuvwxyz" ..
- \ "abcdefghijklmnopqrstuvwxyz")
- let lines = s:screen_lines([1, 4], winwidth(0))
- let expect = [
- \ " abcdefghijklmn",
- \ "opqrstuvwxyzabcdefgh",
- \ "ijklmnopqrstuvwxyz ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- " vim: shiftwidth=2 sts=2 expandtab
|