123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- local t = require('test.testutil')
- local n = require('test.functional.testnvim')()
- local clear, command = n.clear, n.command
- local expect, feed = n.expect, n.feed
- local eq, eval = t.eq, n.eval
- local fn = n.fn
- describe(':emenu', function()
- before_each(function()
- clear()
- command('nnoremenu Test.Test inormal<ESC>')
- command('inoremenu Test.Test insert')
- command('vnoremenu Test.Test x')
- command('cnoremenu Test.Test cmdmode')
- command('nnoremenu Edit.Paste p')
- command('cnoremenu Edit.Paste <C-R>"')
- end)
- it('executes correct bindings in normal mode without using API', function()
- command('emenu Test.Test')
- expect('normal')
- end)
- it('executes correct bindings in normal mode', function()
- command('emenu Test.Test')
- expect('normal')
- end)
- it('executes correct bindings in insert mode', function()
- feed('i')
- command('emenu Test.Test')
- expect('insert')
- end)
- it('executes correct bindings in visual mode', function()
- feed('iabcde<ESC>0lvll')
- command('emenu Test.Test')
- expect('ae')
- end)
- it('executes correct bindings in command mode', function()
- feed('ithis is a sentence<esc>^yiwo<esc>')
- -- Invoke "Edit.Paste" in normal-mode.
- command('emenu Edit.Paste')
- -- Invoke "Edit.Paste" and "Test.Test" in command-mode.
- feed(':')
- command('emenu Edit.Paste')
- command('emenu Test.Test')
- expect([[
- this is a sentence
- this]])
- -- Assert that Edit.Paste pasted @" into the commandline.
- eq('thiscmdmode', eval('getcmdline()'))
- end)
- end)
- describe('menu_get', function()
- before_each(function()
- clear()
- command([=[
- aunmenu *
- nnoremenu &Test.Test inormal<ESC>
- inoremenu Test.Test insert
- vnoremenu Test.Test x
- cnoremenu Test.Test cmdmode
- menu Test.Nested.test level1
- menu Test.Nested.Nested2 level2
- nnoremenu <script> Export.Script p
- tmenu Export.Script This is the tooltip
- menu ]Export.hidden thisoneshouldbehidden
- nnoremenu Edit.Paste p
- cnoremenu Edit.Paste <C-R>"
- ]=])
- end)
- it("path='', modes='a'", function()
- local m = fn.menu_get('', 'a')
- -- HINT: To print the expected table and regenerate the tests:
- -- print(require('vim.inspect')(m))
- local expected = {
- {
- shortcut = 'T',
- hidden = 0,
- submenus = {
- {
- mappings = {
- i = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'insert',
- silent = 0,
- },
- s = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'x',
- silent = 0,
- },
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'inormal<Esc>',
- silent = 0,
- },
- v = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'x',
- silent = 0,
- },
- c = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'cmdmode',
- silent = 0,
- },
- },
- priority = 500,
- name = 'Test',
- hidden = 0,
- },
- {
- priority = 500,
- name = 'Nested',
- submenus = {
- {
- mappings = {
- o = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level1',
- silent = 0,
- },
- v = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level1',
- silent = 0,
- },
- s = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level1',
- silent = 0,
- },
- n = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level1',
- silent = 0,
- },
- },
- priority = 500,
- name = 'test',
- hidden = 0,
- },
- {
- mappings = {
- o = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level2',
- silent = 0,
- },
- v = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level2',
- silent = 0,
- },
- s = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level2',
- silent = 0,
- },
- n = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'level2',
- silent = 0,
- },
- },
- priority = 500,
- name = 'Nested2',
- hidden = 0,
- },
- },
- hidden = 0,
- },
- },
- priority = 500,
- name = 'Test',
- },
- {
- priority = 500,
- name = 'Export',
- submenus = {
- {
- tooltip = 'This is the tooltip',
- hidden = 0,
- name = 'Script',
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'p',
- silent = 0,
- },
- },
- },
- },
- hidden = 0,
- },
- {
- priority = 500,
- name = 'Edit',
- submenus = {
- {
- mappings = {
- c = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '<C-R>"',
- silent = 0,
- },
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'p',
- silent = 0,
- },
- },
- priority = 500,
- name = 'Paste',
- hidden = 0,
- },
- },
- hidden = 0,
- },
- {
- priority = 500,
- name = ']Export',
- submenus = {
- {
- mappings = {
- o = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'thisoneshouldbehidden',
- silent = 0,
- },
- v = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'thisoneshouldbehidden',
- silent = 0,
- },
- s = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'thisoneshouldbehidden',
- silent = 0,
- },
- n = {
- sid = 0,
- noremap = 0,
- enabled = 1,
- rhs = 'thisoneshouldbehidden',
- silent = 0,
- },
- },
- priority = 500,
- name = 'hidden',
- hidden = 0,
- },
- },
- hidden = 1,
- },
- }
- eq(expected, m)
- end)
- it('matching path, all modes', function()
- local m = fn.menu_get('Export', 'a')
- local expected = {
- {
- hidden = 0,
- name = 'Export',
- priority = 500,
- submenus = {
- {
- tooltip = 'This is the tooltip',
- hidden = 0,
- name = 'Script',
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'p',
- silent = 0,
- },
- },
- },
- },
- },
- }
- eq(expected, m)
- end)
- it('no path, matching modes', function()
- local m = fn.menu_get('', 'i')
- local expected = {
- {
- shortcut = 'T',
- hidden = 0,
- submenus = {
- {
- mappings = {
- i = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'insert',
- silent = 0,
- },
- },
- priority = 500,
- name = 'Test',
- hidden = 0,
- },
- },
- priority = 500,
- name = 'Test',
- },
- }
- eq(expected, m)
- end)
- it('matching path and modes', function()
- local m = fn.menu_get('Test', 'i')
- local expected = {
- {
- shortcut = 'T',
- submenus = {
- {
- mappings = {
- i = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'insert',
- silent = 0,
- },
- },
- priority = 500,
- name = 'Test',
- hidden = 0,
- },
- },
- priority = 500,
- name = 'Test',
- hidden = 0,
- },
- }
- eq(expected, m)
- end)
- end)
- describe('menu_get', function()
- before_each(function()
- clear()
- command('aunmenu *')
- end)
- it('returns <keycode> representation of special keys', function()
- command('nnoremenu &Test.Test inormal<ESC>')
- command('inoremenu &Test.Test2 <Tab><Esc>')
- command('vnoremenu &Test.Test3 yA<C-R>0<Tab>xyz<Esc>')
- command('inoremenu &Test.Test4 <c-r>*')
- command('inoremenu &Test.Test5 <c-R>+')
- command('nnoremenu &Test.Test6 <Nop>')
- command('nnoremenu &Test.Test7 <NOP>')
- command('nnoremenu &Test.Test8 <NoP>')
- command('nnoremenu &Test.Test9 ""')
- local m = fn.menu_get('')
- local expected = {
- {
- shortcut = 'T',
- hidden = 0,
- submenus = {
- {
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'inormal<Esc>',
- silent = 0,
- },
- },
- name = 'Test',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- i = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '<Tab><Esc>',
- silent = 0,
- },
- },
- name = 'Test2',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- s = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'yA<C-R>0<Tab>xyz<Esc>',
- silent = 0,
- },
- v = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'yA<C-R>0<Tab>xyz<Esc>',
- silent = 0,
- },
- },
- name = 'Test3',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- i = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '<C-R>*',
- silent = 0,
- },
- },
- name = 'Test4',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- i = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '<C-R>+',
- silent = 0,
- },
- },
- name = 'Test5',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '',
- silent = 0,
- },
- },
- name = 'Test6',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '',
- silent = 0,
- },
- },
- name = 'Test7',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '',
- silent = 0,
- },
- },
- name = 'Test8',
- hidden = 0,
- },
- {
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = '""',
- silent = 0,
- },
- },
- name = 'Test9',
- hidden = 0,
- },
- },
- priority = 500,
- name = 'Test',
- },
- }
- eq(m, expected)
- end)
- it('works with right-aligned text and spaces', function()
- command('nnoremenu &Test<Tab>Y.Test<Tab>X\\ x inormal<Alt-j>')
- command('nnoremenu &Test\\ 1.Test\\ 2 Wargl')
- command('nnoremenu &Test4.Test<Tab>3 i space<Esc>')
- local m = fn.menu_get('')
- local expected = {
- {
- shortcut = 'T',
- hidden = 0,
- actext = 'Y',
- submenus = {
- {
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'inormal<Alt-j>',
- silent = 0,
- },
- },
- hidden = 0,
- actext = 'X x',
- priority = 500,
- name = 'Test',
- },
- },
- priority = 500,
- name = 'Test',
- },
- {
- shortcut = 'T',
- hidden = 0,
- submenus = {
- {
- priority = 500,
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'Wargl',
- silent = 0,
- },
- },
- name = 'Test 2',
- hidden = 0,
- },
- },
- priority = 500,
- name = 'Test 1',
- },
- {
- shortcut = 'T',
- hidden = 0,
- submenus = {
- {
- mappings = {
- n = {
- sid = 1,
- noremap = 1,
- enabled = 1,
- rhs = 'i space<Esc>',
- silent = 0,
- },
- },
- hidden = 0,
- actext = '3',
- priority = 500,
- name = 'Test',
- },
- },
- priority = 500,
- name = 'Test4',
- },
- }
- eq(m, expected)
- end)
- end)
|