annotate src/testdir/test_listlbr_utf8.vim @ 33811:06219b3bdaf3 v9.0.2121

patch 9.0.2121: [security]: use-after-free in ex_substitute Commit: https://github.com/vim/vim/commit/26c11c56888d01e298cd8044caf860f3c26f57bb Author: Christian Brabandt <cb@256bit.org> Date: Wed Nov 22 21:26:41 2023 +0100 patch 9.0.2121: [security]: use-after-free in ex_substitute Problem: [security]: use-after-free in ex_substitute Solution: always allocate memory closes: #13552 A recursive :substitute command could cause a heap-use-after free in Vim (CVE-2023-48706). The whole reproducible test is a bit tricky, I can only reproduce this reliably when no previous substitution command has been used yet (which is the reason, the test needs to run as first one in the test_substitute.vim file) and as a combination of the `:~` command together with a :s command that contains the special substitution atom `~\=` which will make use of a sub-replace special atom and calls a vim script function. There was a comment in the existing :s code, that already makes the `sub` variable allocate memory so that a recursive :s call won't be able to cause any issues here, so this was known as a potential problem already. But for the current test-case that one does not work, because the substitution does not start with `\=` but with `~\=` (and since there does not yet exist a previous substitution atom, Vim will simply increment the `sub` pointer (which then was not allocated dynamically) and later one happily use a sub-replace special expression (which could then free the `sub` var). The following commit fixes this, by making the sub var always using allocated memory, which also means we need to free the pointer whenever we leave the function. Since sub is now always an allocated variable, we also do no longer need the sub_copy variable anymore, since this one was used to indicated when sub pointed to allocated memory (and had therefore to be freed on exit) and when not. Github Security Advisory: https://github.com/vim/vim/security/advisories/GHSA-c8qm-x72m-q53q Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Wed, 22 Nov 2023 22:15:05 +0100
parents ccfca4f03a2b
children 5525b635ed4a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 " Test for linebreak and list option in utf-8 mode
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3 set encoding=utf-8
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4 scriptencoding utf-8
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5
17089
8e9e9124c7a2 patch 8.1.1544: some balloon tests don't run when they can
Bram Moolenaar <Bram@vim.org>
parents: 17049
diff changeset
6 source check.vim
8e9e9124c7a2 patch 8.1.1544: some balloon tests don't run when they can
Bram Moolenaar <Bram@vim.org>
parents: 17049
diff changeset
7 CheckOption linebreak
8e9e9124c7a2 patch 8.1.1544: some balloon tests don't run when they can
Bram Moolenaar <Bram@vim.org>
parents: 17049
diff changeset
8 CheckFeature conceal
8e9e9124c7a2 patch 8.1.1544: some balloon tests don't run when they can
Bram Moolenaar <Bram@vim.org>
parents: 17049
diff changeset
9 CheckFeature signs
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 source view_util.vim
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
13 func s:screen_lines(lnum, width) abort
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 return ScreenLines(a:lnum, a:width)
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
15 endfunc
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
17 func s:compare_lines(expect, actual)
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 call assert_equal(a:expect, a:actual)
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
19 endfunc
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
21 func s:screen_attr(lnum, chars, ...) abort
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
22 let line = getline(a:lnum)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23 let attr = []
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24 let prefix = get(a:000, 0, 0)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25 for i in range(a:chars[0], a:chars[1])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
26 let scol = strdisplaywidth(strcharpart(line, 0, i-1)) + 1
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
27 let attr += [screenattr(a:lnum, scol + prefix)]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
28 endfor
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
29 return attr
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
30 endfunc
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
31
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
32 func s:test_windows(...)
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
33 call NewWindow(10, 20)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34 setl ts=4 sw=4 sts=4 linebreak sbr=+ wrap
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35 exe get(a:000, 0, '')
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
36 endfunc
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
38 func s:close_windows(...)
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
39 call CloseWindow()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 exe get(a:000, 0, '')
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 11585
diff changeset
41 endfunc
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
42
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
43 func Test_linebreak_with_fancy_listchars()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
44 call s:test_windows("setl list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
45 call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP ")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
46 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 let lines = s:screen_lines([1, 4], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 let expect = [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
49 \ "▕———abcdef ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
50 \ "+hijklmn▕——— ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
51 \ "+pqrstuvwxyz␣1060ABC",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
52 \ "+DEFGHIJKLMNOPˑ¶ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
53 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
54 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
55 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
56 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
57
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
58 func Test_nolinebreak_with_list()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
59 call s:test_windows("setl nolinebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
60 call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP ")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
61 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
62 let lines = s:screen_lines([1, 4], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
63 let expect = [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
64 \ "▕———abcdef hijklmn▕—",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
65 \ "+pqrstuvwxyz␣1060ABC",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
66 \ "+DEFGHIJKLMNOPˑ¶ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
67 \ "~ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
68 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
69 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
70 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
71 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
72
25749
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
73 " this was causing a crash
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
74 func Test_linebreak_with_list_and_tabs()
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
75 set linebreak list listchars=tab:⇤\ ⇥ tabstop=100
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
76 new
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
77 call setline(1, "\t\t\ttext")
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
78 redraw
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
79 bwipe!
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
80 set nolinebreak nolist listchars&vim tabstop=8
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
81 endfunc
24b80aa4dd2e patch 8.2.3410: crash with linebreak, listchars and large tabstop
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
82
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
83 func Test_linebreak_with_nolist()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
84 call s:test_windows('setl nolist')
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
85 call setline(1, "\t*mask = nil;")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
86 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
87 let lines = s:screen_lines([1, 4], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
88 let expect = [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
89 \ " *mask = nil; ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
90 \ "~ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
91 \ "~ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
92 \ "~ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
93 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
94 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
95 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
96 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
97
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
98 func Test_list_and_concealing1()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
99 call s:test_windows('setl list listchars=tab:>- cole=1')
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
100 call setline(1, [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
101 \ "#define ABCDE\t\t1",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
102 \ "#define ABCDEF\t\t1",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
103 \ "#define ABCDEFG\t\t1",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
104 \ "#define ABCDEFGH\t1",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
105 \ "#define MSG_MODE_FILE\t\t\t1",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
106 \ "#define MSG_MODE_CONSOLE\t\t2",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
107 \ "#define MSG_MODE_FILE_AND_CONSOLE\t3",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
108 \ "#define MSG_MODE_FILE_THEN_CONSOLE\t4",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
109 \ ])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
110 vert resize 40
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
111 syn match Conceal conceal cchar=>'AB\|MSG_MODE'
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
112 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
113 let lines = s:screen_lines([1, 7], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
114 let expect = [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
115 \ "#define ABCDE>-->---1 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
116 \ "#define >CDEF>-->---1 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
117 \ "#define >CDEFG>->---1 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
118 \ "#define >CDEFGH>----1 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
119 \ "#define >_FILE>--------->--->---1 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
120 \ "#define >_CONSOLE>---------->---2 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
121 \ "#define >_FILE_AND_CONSOLE>---------3 ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
122 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
123 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
124 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
125 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
126
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
127 func Test_list_and_concealing2()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
128 call s:test_windows('setl nowrap ts=2 list listchars=tab:>- cole=2 concealcursor=n')
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
129 call setline(1, "bbeeeeee\t\t;\tsome text")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
130 vert resize 40
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
131 syn clear
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
132 syn match meaning /;\s*\zs.*/
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
133 syn match hasword /^\x\{8}/ contains=word
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
134 syn match word /\<\x\{8}\>/ contains=beginword,endword contained
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
135 syn match beginword /\<\x\x/ contained conceal
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
136 syn match endword /\x\{6}\>/ contained
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
137 hi meaning guibg=blue
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
138 hi beginword guibg=green
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
139 hi endword guibg=red
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
140 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
141 let lines = s:screen_lines([1, 1], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
142 let expect = [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
143 \ "eeeeee>--->-;>some text ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
144 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
145 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
146 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
147 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
148
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
149 func Test_screenattr_for_comment()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
150 call s:test_windows("setl ft=c ts=7 list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
151 call setline(1, " /*\t\t and some more */")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
152 norm! gg0
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
153 syntax on
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
154 hi SpecialKey term=underline ctermfg=red guifg=red
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
155 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
156 let line = getline(1)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
157 let attr = s:screen_attr(1, [1, 6])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
158 call assert_notequal(attr[0], attr[1])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
159 call assert_notequal(attr[1], attr[3])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
160 call assert_notequal(attr[3], attr[5])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
161 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
162 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
163
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
164 func Test_visual_block_and_selection_exclusive()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
165 call s:test_windows('setl selection=exclusive')
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
166 call setline(1, "long line: " . repeat("foobar ", 40) . "TARGETÃ' at end")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
167 exe "norm! $3B\<C-v>eAx\<Esc>"
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
168 let lines = s:screen_lines([1, 10], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
169 let expect = [
30693
a59a8ce13129 patch 9.0.0681: "<<<" shows for 'smoothscroll' even when 'showbreak is set
Bram Moolenaar <Bram@vim.org>
parents: 30630
diff changeset
170 \ "+foobar foobar ",
10843
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
171 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
172 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
173 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
174 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
175 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
176 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
177 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
178 \ "+foobar foobar ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
179 \ "+foobar TARGETÃx' ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
180 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
181 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
182 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
183 endfunc
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
184
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
185 func Test_multibyte_sign_and_colorcolumn()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
186 call s:test_windows("setl nolinebreak cc=3 list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
187 call setline(1, ["", "a b c", "a b c"])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
188 exe "sign define foo text=\uff0b"
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
189 exe "sign place 1 name=foo line=2 buffer=" . bufnr('%')
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
190 redraw!
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
191 norm! ggj0
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
192 let signwidth = strdisplaywidth("\uff0b")
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
193 let attr1 = s:screen_attr(2, [1, 3], signwidth)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
194 let attr2 = s:screen_attr(3, [1, 3], signwidth)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
195 call assert_equal(attr1[0], attr2[0])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
196 call assert_equal(attr1[1], attr2[1])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
197 call assert_equal(attr1[2], attr2[2])
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
198 let lines = s:screen_lines([1, 3], winwidth(0))
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
199 let expect = [
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
200 \ " ¶ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
201 \ "+a b c¶ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
202 \ " a b c¶ ",
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
203 \ ]
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
204 call s:compare_lines(expect, lines)
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
205 call s:close_windows()
678edb254216 patch 8.0.0311: linebreak tests are old style
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
206 endfunc
10982
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
207
11585
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
208 func Test_colorcolumn_priority()
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
209 call s:test_windows('setl cc=4 cuc hls')
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
210 call setline(1, ["xxyy", ""])
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
211 norm! gg
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
212 exe "normal! /xxyy\<CR>"
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
213 norm! G
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
214 redraw!
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
215 let line_attr = s:screen_attr(1, [1, &cc])
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
216 " Search wins over CursorColumn
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
217 call assert_equal(line_attr[1], line_attr[0])
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
218 " Search wins over Colorcolumn
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
219 call assert_equal(line_attr[2], line_attr[3])
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
220 call s:close_windows('setl hls&vim')
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
221 endfunc
18373179040e patch 8.0.0675: 'colorcolumn' has a higher priority than 'hlsearch'
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
222
10982
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
223 func Test_illegal_byte_and_breakat()
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
224 call s:test_windows("setl sbr= brk+=<")
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
225 vert resize 18
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
226 call setline(1, repeat("\x80", 6))
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
227 redraw!
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
228 let lines = s:screen_lines([1, 2], winwidth(0))
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
229 let expect = [
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
230 \ "<80><80><80><80><8",
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
231 \ "0><80> ",
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
232 \ ]
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
233 call s:compare_lines(expect, lines)
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
234 call s:close_windows('setl brk&vim')
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
235 endfunc
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
236
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
237 func Test_multibyte_wrap_and_breakat()
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
238 call s:test_windows("setl sbr= brk+=>")
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
239 call setline(1, repeat('a', 17) . repeat('あ', 2))
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
240 redraw!
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
241 let lines = s:screen_lines([1, 2], winwidth(0))
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
242 let expect = [
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
243 \ "aaaaaaaaaaaaaaaaaあ>",
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
244 \ "あ ",
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
245 \ ]
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
246 call s:compare_lines(expect, lines)
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
247 call s:close_windows('setl brk&vim')
5e20c9f96cd5 patch 8.0.0380: with 'linebreak' double wide char wraps badly
Christian Brabandt <cb@256bit.org>
parents: 10843
diff changeset
248 endfunc
11010
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
249
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
250 func Test_chinese_char_on_wrap_column()
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
251 call s:test_windows("setl nolbr wrap sbr=")
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
252 call setline(1, [
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
253 \ 'aaaaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
254 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
255 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
256 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
257 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
258 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
259 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
260 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
261 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
262 \ 'aaaaaaaaaaaaaaaaa中'.
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
263 \ 'hello'])
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
264 call cursor(1,1)
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
265 norm! $
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
266 redraw!
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
267 let expect=[
30630
218363931f5d patch 9.0.0650: some tests are failing
Bram Moolenaar <Bram@vim.org>
parents: 25749
diff changeset
268 \ '<<<aaaaaaaaaaaaaaaa>',
11010
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
269 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
270 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
271 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
272 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
273 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
274 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
275 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
276 \ '中aaaaaaaaaaaaaaaaa>',
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
277 \ '中hello ']
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
278 let lines = s:screen_lines([1, 10], winwidth(0))
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
279 call s:compare_lines(expect, lines)
32971
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
280 call assert_equal(len(expect), winline())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
281 call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
282 call s:close_windows()
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
283 endfunc
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
284
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
285 func Test_chinese_char_on_wrap_column_sbr()
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
286 call s:test_windows("setl nolbr wrap sbr=!!!")
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
287 call setline(1, [
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
288 \ 'aaaaaaaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
289 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
290 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
291 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
292 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
293 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
294 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
295 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
296 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
297 \ 'aaaaaaaaaaaaaa中'.
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
298 \ 'hello'])
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
299 call cursor(1,1)
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
300 norm! $
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
301 redraw!
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
302 let expect=[
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
303 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
304 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
305 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
306 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
307 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
308 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
309 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
310 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
311 \ '!!!中aaaaaaaaaaaaaa>',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
312 \ '!!!中hello ']
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
313 let lines = s:screen_lines([1, 10], winwidth(0))
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
314 call s:compare_lines(expect, lines)
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
315 call assert_equal(len(expect), winline())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
316 call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
317 call s:close_windows()
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
318 endfunc
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
319
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
320 func Test_unprintable_char_on_wrap_column()
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
321 call s:test_windows("setl nolbr wrap sbr=")
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
322 call setline(1, 'aaa' .. repeat("\uFEFF", 50) .. 'bbb')
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
323 call cursor(1,1)
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
324 norm! $
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
325 redraw!
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
326 let expect=[
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
327 \ '<<<<feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
328 \ '><feff><feff><feff><',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
329 \ 'feff><feff><feff><fe',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
330 \ 'ff><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
331 \ '><feff><feff><feff><',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
332 \ 'feff><feff><feff><fe',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
333 \ 'ff><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
334 \ '><feff><feff><feff><',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
335 \ 'feff><feff><feff><fe',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
336 \ 'ff>bbb ']
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
337 let lines = s:screen_lines([1, 10], winwidth(0))
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
338 call s:compare_lines(expect, lines)
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
339 call assert_equal(len(expect), winline())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
340 call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
341 setl sbr=!!
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
342 redraw!
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
343 let expect=[
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
344 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
345 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
346 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
347 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
348 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
349 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
350 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
351 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
352 \ '!!><feff><feff><feff',
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
353 \ '!!><feff><feff>bbb ']
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
354 let lines = s:screen_lines([1, 10], winwidth(0))
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
355 call s:compare_lines(expect, lines)
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
356 call assert_equal(len(expect), winline())
ccfca4f03a2b Some more missing changes :(
Christian Brabandt <cb@256bit.org>
parents: 30693
diff changeset
357 call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
11010
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10982
diff changeset
358 call s:close_windows()
21765
08940efa6b4e patch 8.2.1432: various inconsistencies in test files
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
359 endfunc
08940efa6b4e patch 8.2.1432: various inconsistencies in test files
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
360
08940efa6b4e patch 8.2.1432: various inconsistencies in test files
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
361 " vim: shiftwidth=2 sts=2 expandtab