xref: /vim-8.2.3635/src/testdir/test_conceal.vim (revision 644b49fa)
1429ab176SBram Moolenaar" Tests for 'conceal'.
2429ab176SBram Moolenaar
38c5a278fSBram Moolenaarsource check.vim
48c5a278fSBram MoolenaarCheckFeature conceal
5429ab176SBram Moolenaar
6429ab176SBram Moolenaarsource screendump.vim
78c5a278fSBram MoolenaarCheckScreendump
8429ab176SBram Moolenaar
9429ab176SBram Moolenaarfunc Test_conceal_two_windows()
10c79745a8SBram Moolenaar  let code =<< trim [CODE]
11c79745a8SBram Moolenaar    let lines = ["one one one one one", "two |hidden| here", "three |hidden| three"]
12c79745a8SBram Moolenaar    call setline(1, lines)
13c79745a8SBram Moolenaar    syntax match test /|hidden|/ conceal
14c79745a8SBram Moolenaar    set conceallevel=2
15c79745a8SBram Moolenaar    set concealcursor=
16c79745a8SBram Moolenaar    exe "normal /here\r"
17c79745a8SBram Moolenaar    new
18c79745a8SBram Moolenaar    call setline(1, lines)
19c79745a8SBram Moolenaar    call setline(4, "Second window")
20c79745a8SBram Moolenaar    syntax match test /|hidden|/ conceal
21c79745a8SBram Moolenaar    set conceallevel=2
22c79745a8SBram Moolenaar    set concealcursor=nc
23c79745a8SBram Moolenaar    exe "normal /here\r"
24c79745a8SBram Moolenaar  [CODE]
25c79745a8SBram Moolenaar
26c79745a8SBram Moolenaar  call writefile(code, 'XTest_conceal')
27429ab176SBram Moolenaar  " Check that cursor line is concealed
28429ab176SBram Moolenaar  let buf = RunVimInTerminal('-S XTest_conceal', {})
29429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_01', {})
30429ab176SBram Moolenaar
31429ab176SBram Moolenaar  " Check that with concealed text vertical cursor movement is correct.
32429ab176SBram Moolenaar  call term_sendkeys(buf, "k")
33429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_02', {})
34429ab176SBram Moolenaar
35429ab176SBram Moolenaar  " Check that with cursor line is not concealed
36429ab176SBram Moolenaar  call term_sendkeys(buf, "j")
37429ab176SBram Moolenaar  call term_sendkeys(buf, ":set concealcursor=\r")
38429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_03', {})
39429ab176SBram Moolenaar
40429ab176SBram Moolenaar  " Check that with cursor line is not concealed when moving cursor down
41429ab176SBram Moolenaar  call term_sendkeys(buf, "j")
42429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_04', {})
43429ab176SBram Moolenaar
44429ab176SBram Moolenaar  " Check that with cursor line is not concealed when switching windows
45429ab176SBram Moolenaar  call term_sendkeys(buf, "\<C-W>\<C-W>")
46429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_05', {})
47429ab176SBram Moolenaar
48429ab176SBram Moolenaar  " Check that with cursor line is only concealed in Normal mode
49429ab176SBram Moolenaar  call term_sendkeys(buf, ":set concealcursor=n\r")
50429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_06n', {})
51429ab176SBram Moolenaar  call term_sendkeys(buf, "a")
52429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_06i', {})
53429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>/e")
54429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_06c', {})
55429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>v")
56429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_06v', {})
57429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
58429ab176SBram Moolenaar
59429ab176SBram Moolenaar  " Check that with cursor line is only concealed in Insert mode
60429ab176SBram Moolenaar  call term_sendkeys(buf, ":set concealcursor=i\r")
61429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_07n', {})
62*644b49faSBram Moolenaar  call term_sendkeys(buf, "14|a")
63429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_07i', {})
64*644b49faSBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
65*644b49faSBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_07in', {})
66*644b49faSBram Moolenaar  call term_sendkeys(buf, "/e")
67429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_07c', {})
68429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>v")
69429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_07v', {})
70429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
71429ab176SBram Moolenaar
72429ab176SBram Moolenaar  " Check that with cursor line is only concealed in Command mode
73429ab176SBram Moolenaar  call term_sendkeys(buf, ":set concealcursor=c\r")
74429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_08n', {})
75429ab176SBram Moolenaar  call term_sendkeys(buf, "a")
76429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_08i', {})
77429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>/e")
78429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_08c', {})
79429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>v")
80429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_08v', {})
81429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
82429ab176SBram Moolenaar
83429ab176SBram Moolenaar  " Check that with cursor line is only concealed in Visual mode
84429ab176SBram Moolenaar  call term_sendkeys(buf, ":set concealcursor=v\r")
85429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_09n', {})
86429ab176SBram Moolenaar  call term_sendkeys(buf, "a")
87429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_09i', {})
88429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>/e")
89429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_09c', {})
90429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>v")
91429ab176SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_09v', {})
92429ab176SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
93429ab176SBram Moolenaar
94465e8b59SBram Moolenaar  " Check moving the cursor while in insert mode.
95465e8b59SBram Moolenaar  call term_sendkeys(buf, ":set concealcursor=\r")
96465e8b59SBram Moolenaar  call term_sendkeys(buf, "a")
97465e8b59SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_10', {})
98465e8b59SBram Moolenaar  call term_sendkeys(buf, "\<Down>")
99465e8b59SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_11', {})
100465e8b59SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
101465e8b59SBram Moolenaar
102465e8b59SBram Moolenaar  " Check the "o" command
103465e8b59SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_12', {})
104465e8b59SBram Moolenaar  call term_sendkeys(buf, "o")
105465e8b59SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_two_windows_13', {})
106465e8b59SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
107465e8b59SBram Moolenaar
108429ab176SBram Moolenaar  " clean up
109429ab176SBram Moolenaar  call StopVimInTerminal(buf)
110429ab176SBram Moolenaar  call delete('XTest_conceal')
111429ab176SBram Moolenaarendfunc
112bbee8d51SBram Moolenaar
113bbee8d51SBram Moolenaarfunc Test_conceal_with_cursorline()
114bbee8d51SBram Moolenaar  " Opens a help window, where 'conceal' is set, switches to the other window
115bbee8d51SBram Moolenaar  " where 'cursorline' needs to be updated when the cursor moves.
116c79745a8SBram Moolenaar  let code =<< trim [CODE]
117c79745a8SBram Moolenaar    set cursorline
118c79745a8SBram Moolenaar    normal othis is a test
119c79745a8SBram Moolenaar    new
120c79745a8SBram Moolenaar    call setline(1, ["one", "two", "three", "four", "five"])
121c79745a8SBram Moolenaar    set ft=help
122c79745a8SBram Moolenaar    normal M
123c79745a8SBram Moolenaar  [CODE]
124c79745a8SBram Moolenaar
125c79745a8SBram Moolenaar  call writefile(code, 'XTest_conceal_cul')
126bbee8d51SBram Moolenaar  let buf = RunVimInTerminal('-S XTest_conceal_cul', {})
127bbee8d51SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_cul_01', {})
128bbee8d51SBram Moolenaar
129bbee8d51SBram Moolenaar  call term_sendkeys(buf, ":wincmd w\r")
130bbee8d51SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_cul_02', {})
131bbee8d51SBram Moolenaar
132bbee8d51SBram Moolenaar  call term_sendkeys(buf, "k")
133bbee8d51SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_cul_03', {})
134bbee8d51SBram Moolenaar
135bbee8d51SBram Moolenaar  " clean up
136bbee8d51SBram Moolenaar  call StopVimInTerminal(buf)
137bbee8d51SBram Moolenaar  call delete('XTest_conceal_cul')
138bbee8d51SBram Moolenaarendfunc
1395babc6e8SBram Moolenaar
1405babc6e8SBram Moolenaarfunc Test_conceal_resize_term()
1415babc6e8SBram Moolenaar  let code =<< trim [CODE]
1425babc6e8SBram Moolenaar    call setline(1, '`one` `two` `three` `four` `five`, the backticks should be concealed')
1435babc6e8SBram Moolenaar    setl cocu=n cole=3
1445babc6e8SBram Moolenaar    syn region CommentCodeSpan matchgroup=Comment start=/`/ end=/`/ concealends
1455babc6e8SBram Moolenaar    normal fb
1465babc6e8SBram Moolenaar  [CODE]
1475babc6e8SBram Moolenaar  call writefile(code, 'XTest_conceal_resize')
1485babc6e8SBram Moolenaar  let buf = RunVimInTerminal('-S XTest_conceal_resize', {'rows': 6})
1495babc6e8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_resize_01', {})
1505babc6e8SBram Moolenaar
1515babc6e8SBram Moolenaar  call win_execute(buf->win_findbuf()[0], 'wincmd +')
1526a2c5a7dSBram Moolenaar  call TermWait(buf)
1535babc6e8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_conceal_resize_02', {})
1545babc6e8SBram Moolenaar
1555babc6e8SBram Moolenaar  " clean up
1565babc6e8SBram Moolenaar  call StopVimInTerminal(buf)
1575babc6e8SBram Moolenaar  call delete('XTest_conceal_resize')
1585babc6e8SBram Moolenaarendfunc
159213ed008SBram Moolenaar
160213ed008SBram Moolenaar" Tests for correct display (cursor column position) with +conceal and
161213ed008SBram Moolenaar" tabulators.  Need to run this test in a separate Vim instance. Otherwise the
162213ed008SBram Moolenaar" screen is not updated (lazy redraw) and the cursor position is wrong.
163213ed008SBram Moolenaarfunc Test_conceal_cursor_pos()
164213ed008SBram Moolenaar  let code =<< trim [CODE]
165213ed008SBram Moolenaar    :let l = ['start:', '.concealed.     text', "|concealed|\ttext"]
166213ed008SBram Moolenaar    :let l += ['', "\t.concealed.\ttext", "\t|concealed|\ttext", '']
167213ed008SBram Moolenaar    :let l += [".a.\t.b.\t.c.\t.d.", "|a|\t|b|\t|c|\t|d|"]
168213ed008SBram Moolenaar    :call append(0, l)
169213ed008SBram Moolenaar    :call cursor(1, 1)
170213ed008SBram Moolenaar    :" Conceal settings.
171213ed008SBram Moolenaar    :set conceallevel=2
172213ed008SBram Moolenaar    :set concealcursor=nc
173213ed008SBram Moolenaar    :syntax match test /|/ conceal
174213ed008SBram Moolenaar    :" Save current cursor position. Only works in <expr> mode, can't be used
175213ed008SBram Moolenaar    :" with :normal because it moves the cursor to the command line. Thanks
176213ed008SBram Moolenaar    :" to ZyX <[email protected]> for the idea to use an <expr> mapping.
177213ed008SBram Moolenaar    :let curpos = []
178213ed008SBram Moolenaar    :nnoremap <expr> GG ":let curpos += ['".screenrow().":".screencol()."']\n"
179213ed008SBram Moolenaar    :normal ztj
180213ed008SBram Moolenaar    GGk
181213ed008SBram Moolenaar    :" We should end up in the same column when running these commands on the
182213ed008SBram Moolenaar    :" two lines.
183213ed008SBram Moolenaar    :normal ft
184213ed008SBram Moolenaar    GGk
185213ed008SBram Moolenaar    :normal $
186213ed008SBram Moolenaar    GGk
187213ed008SBram Moolenaar    :normal 0j
188213ed008SBram Moolenaar    GGk
189213ed008SBram Moolenaar    :normal ft
190213ed008SBram Moolenaar    GGk
191213ed008SBram Moolenaar    :normal $
192213ed008SBram Moolenaar    GGk
193213ed008SBram Moolenaar    :normal 0j0j
194213ed008SBram Moolenaar    GGk
195213ed008SBram Moolenaar    :" Same for next test block.
196213ed008SBram Moolenaar    :normal ft
197213ed008SBram Moolenaar    GGk
198213ed008SBram Moolenaar    :normal $
199213ed008SBram Moolenaar    GGk
200213ed008SBram Moolenaar    :normal 0j
201213ed008SBram Moolenaar    GGk
202213ed008SBram Moolenaar    :normal ft
203213ed008SBram Moolenaar    GGk
204213ed008SBram Moolenaar    :normal $
205213ed008SBram Moolenaar    GGk
206213ed008SBram Moolenaar    :normal 0j0j
207213ed008SBram Moolenaar    GGk
208213ed008SBram Moolenaar    :" And check W with multiple tabs and conceals in a line.
209213ed008SBram Moolenaar    :normal W
210213ed008SBram Moolenaar    GGk
211213ed008SBram Moolenaar    :normal W
212213ed008SBram Moolenaar    GGk
213213ed008SBram Moolenaar    :normal W
214213ed008SBram Moolenaar    GGk
215213ed008SBram Moolenaar    :normal $
216213ed008SBram Moolenaar    GGk
217213ed008SBram Moolenaar    :normal 0j
218213ed008SBram Moolenaar    GGk
219213ed008SBram Moolenaar    :normal W
220213ed008SBram Moolenaar    GGk
221213ed008SBram Moolenaar    :normal W
222213ed008SBram Moolenaar    GGk
223213ed008SBram Moolenaar    :normal W
224213ed008SBram Moolenaar    GGk
225213ed008SBram Moolenaar    :normal $
226213ed008SBram Moolenaar    GGk
227213ed008SBram Moolenaar    :set lbr
228213ed008SBram Moolenaar    :normal $
229213ed008SBram Moolenaar    GGk
230213ed008SBram Moolenaar    :set list listchars=tab:>-
231213ed008SBram Moolenaar    :normal 0
232213ed008SBram Moolenaar    GGk
233213ed008SBram Moolenaar    :normal W
234213ed008SBram Moolenaar    GGk
235213ed008SBram Moolenaar    :normal W
236213ed008SBram Moolenaar    GGk
237213ed008SBram Moolenaar    :normal W
238213ed008SBram Moolenaar    GGk
239213ed008SBram Moolenaar    :normal $
240213ed008SBram Moolenaar    GGk
241213ed008SBram Moolenaar    :call writefile(curpos, 'Xconceal_curpos.out')
242213ed008SBram Moolenaar    :q!
243213ed008SBram Moolenaar
244213ed008SBram Moolenaar  [CODE]
245213ed008SBram Moolenaar  call writefile(code, 'XTest_conceal_curpos')
246213ed008SBram Moolenaar
247213ed008SBram Moolenaar  if RunVim([], [], '-s XTest_conceal_curpos')
248213ed008SBram Moolenaar    call assert_equal([
249213ed008SBram Moolenaar          \ '2:1', '2:17', '2:20', '3:1', '3:17', '3:20', '5:8', '5:25',
250213ed008SBram Moolenaar          \ '5:28', '6:8', '6:25', '6:28', '8:1', '8:9', '8:17', '8:25',
251213ed008SBram Moolenaar          \ '8:27', '9:1', '9:9', '9:17', '9:25', '9:26', '9:26', '9:1',
252213ed008SBram Moolenaar          \ '9:9', '9:17', '9:25', '9:26'], readfile('Xconceal_curpos.out'))
253213ed008SBram Moolenaar  endif
254213ed008SBram Moolenaar
255213ed008SBram Moolenaar  call delete('Xconceal_curpos.out')
256213ed008SBram Moolenaar  call delete('XTest_conceal_curpos')
257213ed008SBram Moolenaarendfunc
258213ed008SBram Moolenaar
259fc838d6cSBram Moolenaarfunc Test_conceal_eol()
260fc838d6cSBram Moolenaar  new!
261fc838d6cSBram Moolenaar  setlocal concealcursor=n conceallevel=1
262fc838d6cSBram Moolenaar  call setline(1, ["x", ""])
263fc838d6cSBram Moolenaar  call matchaddpos('Conceal', [[2, 1, 1]], 2, -1, {'conceal': 1})
264fc838d6cSBram Moolenaar  redraw!
265fc838d6cSBram Moolenaar
266fc838d6cSBram Moolenaar  call assert_notequal(screenchar(1, 1), screenchar(2, 2))
267fc838d6cSBram Moolenaar  call assert_equal(screenattr(1, 1), screenattr(1, 2))
268fc838d6cSBram Moolenaar  call assert_equal(screenattr(1, 2), screenattr(2, 2))
269fc838d6cSBram Moolenaar  call assert_equal(screenattr(2, 1), screenattr(2, 2))
270fc838d6cSBram Moolenaar
271fc838d6cSBram Moolenaar  set list
272fc838d6cSBram Moolenaar  redraw!
273fc838d6cSBram Moolenaar
274fc838d6cSBram Moolenaar  call assert_equal(screenattr(1, 1), screenattr(2, 2))
275fc838d6cSBram Moolenaar  call assert_notequal(screenattr(1, 1), screenattr(1, 2))
276fc838d6cSBram Moolenaar  call assert_notequal(screenattr(1, 2), screenattr(2, 1))
277fc838d6cSBram Moolenaar
278fc838d6cSBram Moolenaar  set nolist
279fc838d6cSBram Moolenaarendfunc
280fc838d6cSBram Moolenaar
281213ed008SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
282