1" Test for linebreak and list option (non-utf8) 2 3set encoding=latin1 4scriptencoding latin1 5 6if !exists("+linebreak") || !has("conceal") 7 finish 8endif 9 10source view_util.vim 11 12function s:screen_lines(lnum, width) abort 13 return ScreenLines(a:lnum, a:width) 14endfunction 15 16func s:compare_lines(expect, actual) 17 call assert_equal(join(a:expect, "\n"), join(a:actual, "\n")) 18endfunc 19 20function s:test_windows(...) 21 call NewWindow(10, 20) 22 setl ts=8 sw=4 sts=4 linebreak sbr= wrap 23 exe get(a:000, 0, '') 24endfunction 25 26function s:close_windows(...) 27 call CloseWindow() 28 exe get(a:000, 0, '') 29endfunction 30 31func Test_set_linebreak() 32 call s:test_windows('setl ts=4 sbr=+') 33 call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ") 34 let lines = s:screen_lines([1, 4], winwidth(0)) 35 let expect = [ 36\ " abcdef ", 37\ "+hijklmn ", 38\ "+pqrstuvwxyz_1060ABC", 39\ "+DEFGHIJKLMNOP ", 40\ ] 41 call s:compare_lines(expect, lines) 42 call s:close_windows() 43endfunc 44 45func Test_linebreak_with_list() 46 call s:test_windows('setl ts=4 sbr=+ list listchars=') 47 call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ") 48 let lines = s:screen_lines([1, 4], winwidth(0)) 49 let expect = [ 50\ "^Iabcdef hijklmn^I ", 51\ "+pqrstuvwxyz_1060ABC", 52\ "+DEFGHIJKLMNOP ", 53\ "~ ", 54\ ] 55 call s:compare_lines(expect, lines) 56 call s:close_windows() 57endfunc 58 59func Test_linebreak_with_nolist() 60 call s:test_windows('setl ts=4 sbr=+ nolist') 61 call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ") 62 let lines = s:screen_lines([1, 4], winwidth(0)) 63 let expect = [ 64\ " abcdef ", 65\ "+hijklmn ", 66\ "+pqrstuvwxyz_1060ABC", 67\ "+DEFGHIJKLMNOP ", 68\ ] 69 call s:compare_lines(expect, lines) 70 call s:close_windows() 71endfunc 72 73func Test_should_break() 74 call s:test_windows('setl sbr=+ nolist') 75 call setline(1, "1\t" . repeat('a', winwidth(0)-2)) 76 let lines = s:screen_lines([1, 4], winwidth(0)) 77 let expect = [ 78\ "1 ", 79\ "+aaaaaaaaaaaaaaaaaa ", 80\ "~ ", 81\ "~ ", 82\ ] 83 call s:compare_lines(expect, lines) 84 call s:close_windows() 85endfunc 86 87func Test_linebreak_with_conceal() 88 call s:test_windows('setl cpo&vim sbr=+ list conceallevel=2 concealcursor=nv listchars=tab:ab') 89 call setline(1, "_S_\t bla") 90 syn match ConcealVar contained /_/ conceal 91 syn match All /.*/ contains=ConcealVar 92 let lines = s:screen_lines([1, 4], winwidth(0)) 93 let expect = [ 94\ "Sabbbbbb bla ", 95\ "~ ", 96\ "~ ", 97\ "~ ", 98\ ] 99 call s:compare_lines(expect, lines) 100 call s:close_windows() 101endfunc 102 103func Test_virtual_block() 104 call s:test_windows('setl sbr=+') 105 call setline(1, [ 106\ "REMOVE: this not", 107\ "REMOVE: aaaaaaaaaaaaa", 108\ ]) 109 exe "norm! 1/^REMOVE:" 110 exe "norm! 0\<C-V>jf x" 111 $put 112 let lines = s:screen_lines([1, 4], winwidth(0)) 113 let expect = [ 114\ "this not ", 115\ "aaaaaaaaaaaaa ", 116\ "REMOVE: ", 117\ "REMOVE: ", 118\ ] 119 call s:compare_lines(expect, lines) 120 call s:close_windows() 121endfunc 122 123func Test_virtual_block_and_vbA() 124 call s:test_windows() 125 call setline(1, "long line: " . repeat("foobar ", 40) . "TARGET at end") 126 exe "norm! $3B\<C-v>eAx\<Esc>" 127 let lines = s:screen_lines([1, 10], winwidth(0)) 128 let expect = [ 129\ "foobar foobar ", 130\ "foobar foobar ", 131\ "foobar foobar ", 132\ "foobar foobar ", 133\ "foobar foobar ", 134\ "foobar foobar ", 135\ "foobar foobar ", 136\ "foobar foobar ", 137\ "foobar foobar ", 138\ "foobar TARGETx at ", 139\ ] 140 call s:compare_lines(expect, lines) 141 call s:close_windows() 142endfunc 143 144func Test_virtual_char_and_block() 145 call s:test_windows() 146 call setline(1, "1111-1111-1111-11-1111-1111-1111") 147 exe "norm! 0f-lv3lc2222\<Esc>bgj." 148 let lines = s:screen_lines([1, 2], winwidth(0)) 149 let expect = [ 150\ "1111-2222-1111-11- ", 151\ "1111-2222-1111 ", 152\ ] 153 call s:compare_lines(expect, lines) 154 call s:close_windows() 155endfunc 156 157func Test_undo_after_block_visual() 158 call s:test_windows() 159 call setline(1, ["aaa", "aaa", "a"]) 160 exe "norm! gg\<C-V>2j~e." 161 let lines = s:screen_lines([1, 3], winwidth(0)) 162 let expect = [ 163\ "AaA ", 164\ "AaA ", 165\ "A ", 166\ ] 167 call s:compare_lines(expect, lines) 168 call s:close_windows() 169endfunc 170 171func Test_norm_after_block_visual() 172 call s:test_windows() 173 call setline(1, ["abcd{ef", "ghijklm", "no}pgrs"]) 174 exe "norm! ggf{\<C-V>\<C-V>c%" 175 let lines = s:screen_lines([1, 3], winwidth(0)) 176 let expect = [ 177\ "abcdpgrs ", 178\ "~ ", 179\ "~ ", 180\ ] 181 call s:compare_lines(expect, lines) 182 call s:close_windows() 183endfunc 184 185func Test_block_replace_after_wrapping() 186 call s:test_windows() 187 call setline(1, repeat("a", 150)) 188 exe "norm! 0yypk147|\<C-V>jr0" 189 call assert_equal(repeat("a", 146) . "0aaa", getline(1)) 190 call assert_equal(repeat("a", 146) . "0aaa", getline(2)) 191 let lines = s:screen_lines([1, 10], winwidth(0)) 192 let expect = [ 193\ "aaaaaaaaaaaaaaaaaaaa", 194\ "aaaaaaaaaaaaaaaaaaaa", 195\ "aaaaaaaaaaaaaaaaaaaa", 196\ "aaaaaaaaaaaaaaaaaaaa", 197\ "aaaaaaaaaaaaaaaaaaaa", 198\ "aaaaaaaaaaaaaaaaaaaa", 199\ "aaaaaaaaaaaaaaaaaaaa", 200\ "aaaaaa0aaa ", 201\ "@ ", 202\ "@ ", 203\ ] 204 call s:compare_lines(expect, lines) 205 call s:close_windows() 206endfunc 207 208func Test_list_with_listchars() 209 call s:test_windows('setl list listchars=space:_,trail:-,tab:>-,eol:$') 210 call setline(1, "a aaaaaaaaaaaaaaaaaaaaaa\ta ") 211 let lines = s:screen_lines([1, 3], winwidth(0)) 212 let expect = [ 213\ "a_ ", 214\ "aaaaaaaaaaaaaaaaaaaa", 215\ "aa>-----a-$ ", 216\ ] 217 call s:compare_lines(expect, lines) 218 call s:close_windows() 219endfunc 220 221func Test_list_with_tab_and_skipping_first_chars() 222 call s:test_windows('setl list listchars=tab:>- ts=70 nowrap') 223 call setline(1, ["iiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa"]) 224 call cursor(4,64) 225 norm! 2zl 226 let lines = s:screen_lines([1, 4], winwidth(0)) 227 let expect = [ 228\ "---------------aaaaa", 229\ "---------------aaaaa", 230\ "---------------aaaaa", 231\ "iiiiiiiii>-----aaaaa", 232\ ] 233 call s:compare_lines(expect, lines) 234 call s:close_windows() 235endfu 236