tests/ui: add test for popupmenu redrawing in various situations

Many of these are handled by the compositor. Check that it causes
no glitches.
This commit is contained in:
Björn Linse
2019-01-30 19:16:42 +01:00
parent 69bdc4f072
commit bfe2435459

View File

@@ -5,6 +5,7 @@ local source = helpers.source
local insert = helpers.insert
local meths = helpers.meths
local command = helpers.command
local funcs = helpers.funcs
describe('ui/ext_popupmenu', function()
local screen
@@ -368,7 +369,7 @@ describe('ui/ext_popupmenu', function()
end)
describe('popup placement', function()
describe('builtin popupmenu', function()
local screen
before_each(function()
clear()
@@ -385,7 +386,8 @@ describe('popup placement', function()
[2] = {bold = true},
[3] = {reverse = true},
[4] = {bold = true, reverse = true},
[5] = {bold = true, foreground = Screen.colors.SeaGreen}
[5] = {bold = true, foreground = Screen.colors.SeaGreen},
[6] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
})
end)
@@ -607,4 +609,574 @@ describe('popup placement', function()
{2:-- }{5:match 1 of 3} |
]])
end)
it('works with split and scroll', function()
screen:try_resize(60,14)
command("split")
command("set completeopt+=noinsert")
command("set mouse=a")
insert([[
Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est
laborum.
]])
screen:expect([[
reprehenderit in voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
occaecat cupidatat non proident, sunt in culpa |
qui officia deserunt mollit anim id est |
laborum. |
^ |
{4:[No Name] [+] }|
Lorem ipsum dolor sit amet, consectetur |
adipisicing elit, sed do eiusmod tempor |
incididunt ut labore et dolore magna aliqua. |
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{3:[No Name] [+] }|
|
]])
feed('ggOEst <c-x><c-p>')
screen:expect([[
Est ^ |
L{n: sunt }{s: }sit amet, consectetur |
a{n: in }{s: }sed do eiusmod tempor |
i{n: culpa }{s: }re et dolore magna aliqua. |
U{n: qui }{s: }eniam, quis nostrud |
e{n: officia }{s: }co laboris nisi ut aliquip ex |
{4:[No}{n: deserunt }{s: }{4: }|
L{n: mollit }{s: }sit amet, consectetur |
a{n: anim }{s: }sed do eiusmod tempor |
i{n: id }{s: }re et dolore magna aliqua. |
U{n: est }{s: }eniam, quis nostrud |
e{n: laborum }{c: }co laboris nisi ut aliquip ex |
{3:[No}{s: Est }{c: }{3: }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
meths.input_mouse('wheel', 'down', '', 0, 9, 40)
screen:expect([[
Est ^ |
L{n: sunt }{s: }sit amet, consectetur |
a{n: in }{s: }sed do eiusmod tempor |
i{n: culpa }{s: }re et dolore magna aliqua. |
U{n: qui }{s: }eniam, quis nostrud |
e{n: officia }{s: }co laboris nisi ut aliquip ex |
{4:[No}{n: deserunt }{s: }{4: }|
U{n: mollit }{s: }eniam, quis nostrud |
e{n: anim }{s: }co laboris nisi ut aliquip ex |
e{n: id }{s: }at. Duis aute irure dolor in |
r{n: est }{s: }oluptate velit esse cillum |
d{n: laborum }{c: }ulla pariatur. Excepteur sint |
{3:[No}{s: Est }{c: }{3: }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
feed('e')
screen:expect([[
Est e^ |
L{n: elit } sit amet, consectetur |
a{n: eiusmod } sed do eiusmod tempor |
i{n: et }ore et dolore magna aliqua. |
U{n: enim }veniam, quis nostrud |
e{n: exercitation }mco laboris nisi ut aliquip ex |
{4:[No}{n: ex }{4: }|
U{n: ea }veniam, quis nostrud |
e{n: esse }mco laboris nisi ut aliquip ex |
e{n: eu }uat. Duis aute irure dolor in |
r{s: est }voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
meths.input_mouse('wheel', 'up', '', 0, 9, 40)
screen:expect([[
Est e^ |
L{n: elit } sit amet, consectetur |
a{n: eiusmod } sed do eiusmod tempor |
i{n: et }ore et dolore magna aliqua. |
U{n: enim }veniam, quis nostrud |
e{n: exercitation }mco laboris nisi ut aliquip ex |
{4:[No}{n: ex }{4: }|
L{n: ea } sit amet, consectetur |
a{n: esse } sed do eiusmod tempor |
i{n: eu }ore et dolore magna aliqua. |
U{s: est }veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
feed('s')
screen:expect([[
Est es^ |
L{n: esse } sit amet, consectetur |
a{s: est } sed do eiusmod tempor |
incididunt ut labore et dolore magna aliqua. |
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{4:[No Name] [+] }|
Lorem ipsum dolor sit amet, consectetur |
adipisicing elit, sed do eiusmod tempor |
incididunt ut labore et dolore magna aliqua. |
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
meths.input_mouse('wheel', 'down', '', 0, 9, 40)
screen:expect([[
Est es^ |
L{n: esse } sit amet, consectetur |
a{s: est } sed do eiusmod tempor |
incididunt ut labore et dolore magna aliqua. |
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{4:[No Name] [+] }|
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
ea commodo consequat. Duis aute irure dolor in |
reprehenderit in voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
feed('<bs>')
screen:expect([[
Est e^ |
L{n: elit } sit amet, consectetur |
a{n: eiusmod } sed do eiusmod tempor |
i{n: et }ore et dolore magna aliqua. |
U{n: enim }veniam, quis nostrud |
e{n: exercitation }mco laboris nisi ut aliquip ex |
{4:[No}{n: ex }{4: }|
U{n: ea }veniam, quis nostrud |
e{n: esse }mco laboris nisi ut aliquip ex |
e{n: eu }uat. Duis aute irure dolor in |
r{s: est }voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 65} |
]])
feed('<c-p>')
screen:expect([[
Est eu^ |
L{n: elit } sit amet, consectetur |
a{n: eiusmod } sed do eiusmod tempor |
i{n: et }ore et dolore magna aliqua. |
U{n: enim }veniam, quis nostrud |
e{n: exercitation }mco laboris nisi ut aliquip ex |
{4:[No}{n: ex }{4: }|
U{n: ea }veniam, quis nostrud |
e{n: esse }mco laboris nisi ut aliquip ex |
e{s: eu }uat. Duis aute irure dolor in |
r{n: est }voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 22 of 65} |
]])
meths.input_mouse('wheel', 'down', '', 0, 9, 40)
screen:expect([[
Est eu^ |
L{n: elit } sit amet, consectetur |
a{n: eiusmod } sed do eiusmod tempor |
i{n: et }ore et dolore magna aliqua. |
U{n: enim }veniam, quis nostrud |
e{n: exercitation }mco laboris nisi ut aliquip ex |
{4:[No}{n: ex }{4: }|
r{n: ea }voluptate velit esse cillum |
d{n: esse }nulla pariatur. Excepteur sint |
o{s: eu }t non proident, sunt in culpa |
q{n: est }unt mollit anim id est |
laborum. |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 22 of 65} |
]])
funcs.complete(4, {'ea', 'eeeeeeeeeeeeeeeeee', 'ei', 'eo', 'eu', 'ey', '', '', ''})
screen:expect([[
Est eu^ |
{s: ea }t amet, consectetur |
{n: eeeeeeeeeeeeeeeeee }d do eiusmod tempor |
{n: ei } et dolore magna aliqua. |
{n: eo }iam, quis nostrud |
{n: eu } laboris nisi ut aliquip ex |
{4:[N}{n: ey }{4: }|
{n: eå }uptate velit esse cillum |
{n: eä }la pariatur. Excepteur sint |
{n: eö }on proident, sunt in culpa |
qui officia deserunt mollit anim id est |
laborum. |
{3:[No Name] [+] }|
{2:-- Keyword Local completion (^N^P) }{5:match 1 of 9} |
]])
funcs.complete(4, {'ea', 'eee', 'ei', 'eo', 'eu', 'ey', '', '', ''})
screen:expect([[
Est eu^ |
{s: ea }r sit amet, consectetur |
{n: eee }, sed do eiusmod tempor |
{n: ei }bore et dolore magna aliqua. |
{n: eo } veniam, quis nostrud |
{n: eu }amco laboris nisi ut aliquip ex |
{4:[N}{n: ey }{4: }|
{n: eå } voluptate velit esse cillum |
{n: eä } nulla pariatur. Excepteur sint |
{n: eö }at non proident, sunt in culpa |
qui officia deserunt mollit anim id est |
laborum. |
{3:[No Name] [+] }|
{2:-- INSERT --} |
]])
feed('<c-n>')
screen:expect([[
Esteee^ |
{n: ea }r sit amet, consectetur |
{s: eee }, sed do eiusmod tempor |
{n: ei }bore et dolore magna aliqua. |
{n: eo } veniam, quis nostrud |
{n: eu }amco laboris nisi ut aliquip ex |
{4:[N}{n: ey }{4: }|
{n: eå } voluptate velit esse cillum |
{n: eä } nulla pariatur. Excepteur sint |
{n: eö }at non proident, sunt in culpa |
qui officia deserunt mollit anim id est |
laborum. |
{3:[No Name] [+] }|
{2:-- INSERT --} |
]])
funcs.complete(6, {'foo', 'bar'})
screen:expect([[
Esteee^ |
Lo{s: foo }sit amet, consectetur |
ad{n: bar }sed do eiusmod tempor |
incididunt ut labore et dolore magna aliqua. |
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{4:[No Name] [+] }|
reprehenderit in voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
occaecat cupidatat non proident, sunt in culpa |
qui officia deserunt mollit anim id est |
laborum. |
{3:[No Name] [+] }|
{2:-- INSERT --} |
]])
feed('<c-y>')
screen:expect([[
Esteefoo^ |
Lorem ipsum dolor sit amet, consectetur |
adipisicing elit, sed do eiusmod tempor |
incididunt ut labore et dolore magna aliqua. |
Ut enim ad minim veniam, quis nostrud |
exercitation ullamco laboris nisi ut aliquip ex |
{4:[No Name] [+] }|
reprehenderit in voluptate velit esse cillum |
dolore eu fugiat nulla pariatur. Excepteur sint |
occaecat cupidatat non proident, sunt in culpa |
qui officia deserunt mollit anim id est |
laborum. |
{3:[No Name] [+] }|
{2:-- INSERT --} |
]])
end)
it('can be moved due to wrap or resize', function()
feed('isome long prefix before the ')
command("set completeopt+=noinsert,noselect")
command("set linebreak")
funcs.complete(29, {'word', 'choice', 'text', 'thing'})
screen:expect([[
some long prefix before the ^ |
{1:~ }{n: word }|
{1:~ }{n: choice}|
{1:~ }{n: text }|
{1:~ }{n: thing }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{2:-- INSERT --} |
]])
feed('<c-p>')
screen:expect([[
some long prefix before the |
thing^ |
{n:word }{1: }|
{n:choice }{1: }|
{n:text }{1: }|
{s:thing }{1: }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{2:-- INSERT --} |
]])
feed('<c-p>')
screen:expect([[
some long prefix before the text|
{1:^~ }{n: word }|
{1:~ }{n: choice}|
{1:~ }{s: text }|
{1:~ }{n: thing }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{2:-- INSERT --} |
]])
screen:try_resize(30,8)
screen:expect([[
some long prefix before the |
text^ |
{n:word }{1: }|
{n:choice }{1: }|
{s:text }{1: }|
{n:thing }{1: }|
{1:~ }|
{2:-- INSERT --} |
]])
screen:try_resize(50,8)
screen:expect([[
some long prefix before the text^ |
{1:~ }{n: word }{1: }|
{1:~ }{n: choice }{1: }|
{1:~ }{s: text }{1: }|
{1:~ }{n: thing }{1: }|
{1:~ }|
{1:~ }|
{2:-- INSERT --} |
]])
end)
it('can be moved due to wrap or resize', function()
command("set rl")
feed('isome rightleft ')
screen:expect([[
^ tfelthgir emos|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{2:-- INSERT --} |
]])
command("set completeopt+=noinsert,noselect")
funcs.complete(16, {'word', 'choice', 'text', 'thing'})
screen:expect([[
^ tfelthgir emos|
{1: }{n: drow}{1: ~}|
{1: }{n: eciohc}{1: ~}|
{1: }{n: txet}{1: ~}|
{1: }{n: gniht}{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{2:-- INSERT --} |
]])
feed('<c-n>')
screen:expect([[
^ drow tfelthgir emos|
{1: }{s: drow}{1: ~}|
{1: }{n: eciohc}{1: ~}|
{1: }{n: txet}{1: ~}|
{1: }{n: gniht}{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{2:-- INSERT --} |
]])
feed('<c-y>')
screen:expect([[
^ drow tfelthgir emos|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{1: ~}|
{2:-- INSERT --} |
]])
end)
it('works with multiline messages', function()
screen:try_resize(40,8)
feed('ixx<cr>')
command('imap <f2> <cmd>echoerr "very"\\|echoerr "much"\\|echoerr "error"<cr>')
funcs.complete(1, {'word', 'choice', 'text', 'thing'})
screen:expect([[
xx |
word^ |
{s:word }{1: }|
{n:choice }{1: }|
{n:text }{1: }|
{n:thing }{1: }|
{1:~ }|
{2:-- INSERT --} |
]])
feed('<f2>')
screen:expect([[
xx |
word |
{s:word }{1: }|
{4: }|
{6:very} |
{6:much} |
{6:error} |
{5:Press ENTER or type command to continue}^ |
]])
feed('<cr>')
screen:expect([[
xx |
word^ |
{s:word }{1: }|
{n:choice }{1: }|
{n:text }{1: }|
{n:thing }{1: }|
{1:~ }|
{2:-- INSERT --} |
]])
feed('<c-n>')
screen:expect([[
xx |
choice^ |
{n:word }{1: }|
{s:choice }{1: }|
{n:text }{1: }|
{n:thing }{1: }|
{1:~ }|
{2:-- INSERT --} |
]])
command("split")
screen:expect([[
xx |
choice^ |
{n:word }{1: }|
{s:choice }{4: }|
{n:text } |
{n:thing } |
{3:[No Name] [+] }|
{2:-- INSERT --} |
]])
meths.input_mouse('wheel', 'down', '', 0, 6, 15)
screen:expect([[
xx |
choice^ |
{n:word }{1: }|
{s:choice }{4: }|
{n:text } |
{n:thing }{1: }|
{3:[No Name] [+] }|
{2:-- INSERT --} |
]])
end)
end)