mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 13:45:15 -07:00
84646b80f3
Problem: Folding code not sufficiently tested.
Solution: Add a few more test cases. (Yegappan Lakshmanan, closes vim/vim#8064)
68ffe8cade
336 lines
10 KiB
Lua
336 lines
10 KiB
Lua
-- Tests for folding.
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local helpers = require('test.functional.helpers')(after_each)
|
|
local feed, insert, feed_command, expect_any =
|
|
helpers.feed, helpers.insert, helpers.feed_command, helpers.expect_any
|
|
local command = helpers.command
|
|
local exec = helpers.exec
|
|
|
|
describe('folding', function()
|
|
local screen
|
|
|
|
before_each(function()
|
|
helpers.clear()
|
|
|
|
screen = Screen.new(45, 8)
|
|
screen:set_default_attr_ids({
|
|
[1] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
|
|
[2] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey}, -- Folded
|
|
[3] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Grey}, -- FoldColumn
|
|
[4] = {foreground = Screen.colors.Brown}, -- LineNr
|
|
})
|
|
screen:attach()
|
|
end)
|
|
|
|
it('creation, opening, moving (to the end) and closing', function()
|
|
insert([[
|
|
1 aa
|
|
2 bb
|
|
3 cc
|
|
last
|
|
]])
|
|
|
|
-- Basic test if a fold can be created, opened, moving to the end and
|
|
-- closed.
|
|
feed_command('1')
|
|
feed('zf2j')
|
|
feed_command('call append("$", "manual " . getline(foldclosed(".")))')
|
|
feed('zo')
|
|
feed_command('call append("$", foldclosed("."))')
|
|
feed(']z')
|
|
feed_command('call append("$", getline("."))')
|
|
feed('zc')
|
|
feed_command('call append("$", getline(foldclosed(".")))')
|
|
|
|
expect_any([[
|
|
manual 1 aa
|
|
-1
|
|
3 cc
|
|
1 aa]])
|
|
end)
|
|
|
|
it("foldmethod=marker", function()
|
|
screen:try_resize(20, 10)
|
|
insert([[
|
|
dd {{{
|
|
ee {{{ }}}
|
|
ff }}}
|
|
]])
|
|
feed_command('set fdm=marker fdl=1')
|
|
feed_command('2')
|
|
feed_command('call append("$", "line 2 foldlevel=" . foldlevel("."))')
|
|
feed('[z')
|
|
feed_command('call append("$", foldlevel("."))')
|
|
feed('jo{{ <esc>r{jj') -- writes '{{{' and moves 2 lines bot
|
|
feed_command('call append("$", foldlevel("."))')
|
|
feed('kYpj')
|
|
feed_command('call append("$", foldlevel("."))')
|
|
|
|
helpers.poke_eventloop()
|
|
screen:expect([[
|
|
dd {{{ |
|
|
ee {{{ }}} |
|
|
{{{ |
|
|
ff }}} |
|
|
ff }}} |
|
|
^ |
|
|
line 2 foldlevel=2 |
|
|
1 |
|
|
1 |
|
|
|
|
|
]])
|
|
|
|
end)
|
|
|
|
it("foldmethod=indent", function()
|
|
screen:try_resize(20, 8)
|
|
feed_command('set fdm=indent sw=2')
|
|
insert([[
|
|
aa
|
|
bb
|
|
cc
|
|
last
|
|
]])
|
|
feed_command('call append("$", "foldlevel line3=" . foldlevel(3))')
|
|
feed_command('call append("$", foldlevel(2))')
|
|
feed('zR')
|
|
|
|
helpers.poke_eventloop()
|
|
screen:expect([[
|
|
aa |
|
|
bb |
|
|
cc |
|
|
last |
|
|
^ |
|
|
foldlevel line3=2 |
|
|
1 |
|
|
|
|
|
]])
|
|
end)
|
|
|
|
it("foldmethod=syntax", function()
|
|
screen:try_resize(35, 15)
|
|
insert([[
|
|
1 aa
|
|
2 bb
|
|
3 cc
|
|
4 dd {{{
|
|
5 ee {{{ }}}
|
|
6 ff }}}
|
|
7 gg
|
|
8 hh
|
|
9 ii
|
|
a jj
|
|
b kk
|
|
last]])
|
|
feed_command('set fdm=syntax fdl=0')
|
|
feed_command('syn region Hup start="dd" end="ii" fold contains=Fd1,Fd2,Fd3')
|
|
feed_command('syn region Fd1 start="ee" end="ff" fold contained')
|
|
feed_command('syn region Fd2 start="gg" end="hh" fold contained')
|
|
feed_command('syn region Fd3 start="commentstart" end="commentend" fold contained')
|
|
feed('Gzk')
|
|
feed_command('call append("$", "folding " . getline("."))')
|
|
feed('k')
|
|
feed_command('call append("$", getline("."))')
|
|
feed('jAcommentstart <esc>Acommentend<esc>')
|
|
feed_command('set fdl=1')
|
|
feed('3j')
|
|
feed_command('call append("$", getline("."))')
|
|
feed_command('set fdl=0')
|
|
feed('zO<C-L>j') -- <C-L> redraws screen
|
|
feed_command('call append("$", getline("."))')
|
|
feed_command('set fdl=0')
|
|
expect_any([[
|
|
folding 9 ii
|
|
3 cc
|
|
9 ii
|
|
a jj]])
|
|
end)
|
|
|
|
it("foldmethod=expression", function()
|
|
insert([[
|
|
1 aa
|
|
2 bb
|
|
3 cc
|
|
4 dd {{{
|
|
5 ee {{{ }}}
|
|
6 ff }}}
|
|
7 gg
|
|
8 hh
|
|
9 ii
|
|
a jj
|
|
b kk
|
|
last ]])
|
|
|
|
feed_command([[
|
|
fun Flvl()
|
|
let l = getline(v:lnum)
|
|
if l =~ "bb$"
|
|
return 2
|
|
elseif l =~ "gg$"
|
|
return "s1"
|
|
elseif l =~ "ii$"
|
|
return ">2"
|
|
elseif l =~ "kk$"
|
|
return "0"
|
|
endif
|
|
return "="
|
|
endfun
|
|
]])
|
|
feed_command('set fdm=expr fde=Flvl()')
|
|
feed_command('/bb$')
|
|
feed_command('call append("$", "expr " . foldlevel("."))')
|
|
feed_command('/hh$')
|
|
feed_command('call append("$", foldlevel("."))')
|
|
feed_command('/ii$')
|
|
feed_command('call append("$", foldlevel("."))')
|
|
feed_command('/kk$')
|
|
feed_command('call append("$", foldlevel("."))')
|
|
|
|
expect_any([[
|
|
expr 2
|
|
1
|
|
2
|
|
0]])
|
|
end)
|
|
|
|
it('can be opened after :move', function()
|
|
-- luacheck: ignore
|
|
screen:try_resize(35, 8)
|
|
insert([[
|
|
Test fdm=indent and :move bug END
|
|
line2
|
|
Test fdm=indent START
|
|
line3
|
|
line4]])
|
|
feed_command('set noai nosta ')
|
|
feed_command('set fdm=indent')
|
|
feed_command('1m1')
|
|
feed('2jzc')
|
|
feed_command('m0')
|
|
feed('zR')
|
|
|
|
expect_any([[
|
|
Test fdm=indent START
|
|
line3
|
|
line4
|
|
Test fdm=indent and :move bug END
|
|
line2]])
|
|
end)
|
|
|
|
-- oldtest: Test_folds_with_rnu()
|
|
it('with relative line numbers', function()
|
|
command('set fdm=marker rnu foldcolumn=2')
|
|
command('call setline(1, ["{{{1", "nline 1", "{{{1", "line 2"])')
|
|
|
|
screen:expect([[
|
|
{3:+ }{4: 0 }{2:^+-- 2 lines: ·························}|
|
|
{3:+ }{4: 1 }{2:+-- 2 lines: ·························}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed("j")
|
|
screen:expect([[
|
|
{3:+ }{4: 1 }{2:+-- 2 lines: ·························}|
|
|
{3:+ }{4: 0 }{2:^+-- 2 lines: ·························}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
end)
|
|
|
|
-- oldtest: Test_foldclose_opt()
|
|
it('foldclose=all', function()
|
|
exec([[
|
|
set foldmethod=manual foldclose=all foldopen=all
|
|
call setline(1, ['one', 'two', 'three', 'four'])
|
|
2,3fold
|
|
]])
|
|
|
|
screen:expect([[
|
|
^one |
|
|
{2:+-- 2 lines: two····························}|
|
|
four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed('2G')
|
|
screen:expect([[
|
|
one |
|
|
^two |
|
|
three |
|
|
four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed('4G')
|
|
screen:expect([[
|
|
one |
|
|
{2:+-- 2 lines: two····························}|
|
|
^four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed('3G')
|
|
screen:expect([[
|
|
one |
|
|
two |
|
|
^three |
|
|
four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed('1G')
|
|
screen:expect([[
|
|
^one |
|
|
{2:+-- 2 lines: two····························}|
|
|
four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed('2G')
|
|
screen:expect([[
|
|
one |
|
|
^two |
|
|
three |
|
|
four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
feed('k')
|
|
screen:expect([[
|
|
^one |
|
|
{2:+-- 2 lines: two····························}|
|
|
four |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
end)
|
|
end)
|