diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-01-30 19:16:42 +0100 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-02-02 16:31:49 +0100 |
commit | bfe24354595d02c3e537199d34fb07739150e516 (patch) | |
tree | b3c930e7039ce42dd35f02a6aa86f9bace7c40f0 | |
parent | 69bdc4f0726ae0f3a2610dadbaf4156acfe74f49 (diff) | |
download | rneovim-bfe24354595d02c3e537199d34fb07739150e516.tar.gz rneovim-bfe24354595d02c3e537199d34fb07739150e516.tar.bz2 rneovim-bfe24354595d02c3e537199d34fb07739150e516.zip |
tests/ui: add test for popupmenu redrawing in various situations
Many of these are handled by the compositor. Check that it causes
no glitches.
-rw-r--r-- | test/functional/ui/popupmenu_spec.lua | 576 |
1 files changed, 574 insertions, 2 deletions
diff --git a/test/functional/ui/popupmenu_spec.lua b/test/functional/ui/popupmenu_spec.lua index 9424931de4..9e6a61f4d0 100644 --- a/test/functional/ui/popupmenu_spec.lua +++ b/test/functional/ui/popupmenu_spec.lua @@ -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', 'eå', 'eä', 'eö'}) + 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', 'eå', 'eä', 'eö'}) + 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) |