123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- --
- -- Tests for default autocmds, mappings, commands, and menus.
- --
- -- See options/defaults_spec.lua for default options and environment decisions.
- --
- local t = require('test.testutil')
- local n = require('test.functional.testnvim')()
- local Screen = require('test.functional.ui.screen')
- describe('default', function()
- describe('autocommands', function()
- it('nvim_terminal.TermClose closes terminal with default shell on success', function()
- n.clear()
- n.api.nvim_set_option_value('shell', n.testprg('shell-test'), {})
- n.command('set shellcmdflag=EXIT shellredir= shellpipe= shellquote= shellxquote=')
- -- Should not block other events
- n.command('let g:n=0')
- n.command('au BufEnter * let g:n = g:n + 1')
- n.command('terminal')
- t.eq(1, n.eval('get(g:, "n", 0)'))
- t.retry(nil, 1000, function()
- t.neq('terminal', n.api.nvim_get_option_value('buftype', { buf = 0 }))
- t.eq(2, n.eval('get(g:, "n", 0)'))
- end)
- end)
- end)
- describe('popupmenu', function()
- it('can be disabled by user', function()
- n.clear {
- args = { '+autocmd! nvim.popupmenu', '+aunmenu PopUp' },
- }
- local screen = Screen.new(40, 8)
- n.insert([[
- 1 line 1
- 2 https://example.com
- 3 line 3
- 4 line 4]])
- n.api.nvim_input_mouse('right', 'press', '', 0, 1, 4)
- screen:expect({
- grid = [[
- 1 line 1 |
- 2 ht^tps://example.com |
- 3 line 3 |
- 4 line 4 |
- {1:~ }|*3
- |
- ]],
- })
- end)
- it('right-click on URL shows "Open in web browser"', function()
- n.clear()
- local screen = Screen.new(40, 8)
- n.insert([[
- 1 line 1
- 2 https://example.com
- 3 line 3
- 4 line 4]])
- n.api.nvim_input_mouse('right', 'press', '', 0, 3, 4)
- screen:expect({
- grid = [[
- 1 line 1 |
- 2 https://example.com |
- 3 line 3 |
- 4 li^ne 4 |
- {1:~ }{4: Inspect }{1: }|
- {1:~ }{4: }{1: }|
- {1:~ }{4: Paste }{1: }|
- {4: Select All } |
- ]],
- })
- n.api.nvim_input_mouse('right', 'press', '', 0, 1, 4)
- screen:expect({
- grid = [[
- 1 line 1 |
- 2 ht^tps://example.com |
- 3 l{4: Open in web browser } |
- 4 l{4: Inspect } |
- {1:~ }{4: }{1: }|
- {1:~ }{4: Paste }{1: }|
- {1:~ }{4: Select All }{1: }|
- {4: } |
- ]],
- })
- end)
- end)
- describe('key mappings', function()
- describe('Visual mode search mappings', function()
- it('handle various chars properly', function()
- n.clear({ args_rm = { '--cmd' } })
- local screen = Screen.new(60, 8)
- screen:set_default_attr_ids({
- [1] = { foreground = Screen.colors.NvimDarkGray4 },
- [2] = {
- foreground = Screen.colors.NvimDarkGray3,
- background = Screen.colors.NvimLightGray3,
- },
- [3] = {
- foreground = Screen.colors.NvimLightGrey1,
- background = Screen.colors.NvimDarkYellow,
- },
- [4] = {
- foreground = Screen.colors.NvimDarkGrey1,
- background = Screen.colors.NvimLightYellow,
- },
- })
- n.api.nvim_buf_set_lines(0, 0, -1, true, {
- [[testing <CR> /?\!1]],
- [[testing <CR> /?\!2]],
- [[testing <CR> /?\!3]],
- [[testing <CR> /?\!4]],
- })
- n.feed('gg0vf!o*')
- screen:expect([[
- {3:testing <CR> /?\!}1 |
- {4:^testing <CR> /?\!}2 |
- {3:testing <CR> /?\!}3 |
- {3:testing <CR> /?\!}4 |
- {1:~ }|*2
- {2:[No Name] [+] 2,1 All}|
- /\Vtesting <CR> \/?\\! [2/4] |
- ]])
- n.feed('n')
- screen:expect([[
- {3:testing <CR> /?\!}1 |
- {3:testing <CR> /?\!}2 |
- {4:^testing <CR> /?\!}3 |
- {3:testing <CR> /?\!}4 |
- {1:~ }|*2
- {2:[No Name] [+] 3,1 All}|
- /\Vtesting <CR> \/?\\! [3/4] |
- ]])
- n.feed('G0vf!o#')
- screen:expect([[
- {3:testing <CR> /?\!}1 |
- {3:testing <CR> /?\!}2 |
- {4:^testing <CR> /?\!}3 |
- {3:testing <CR> /?\!}4 |
- {1:~ }|*2
- {2:[No Name] [+] 3,1 All}|
- ?\Vtesting <CR> /?\\! [3/4] |
- ]])
- n.feed('n')
- screen:expect([[
- {3:testing <CR> /?\!}1 |
- {4:^testing <CR> /?\!}2 |
- {3:testing <CR> /?\!}3 |
- {3:testing <CR> /?\!}4 |
- {1:~ }|*2
- {2:[No Name] [+] 2,1 All}|
- ?\Vtesting <CR> /?\\! [2/4] |
- ]])
- end)
- end)
- describe('unimpaired-style mappings', function()
- it('show the command ouptut when successful', function()
- n.clear({ args_rm = { '--cmd' } })
- local screen = Screen.new(40, 8)
- n.fn.setqflist({
- { filename = 'file1', text = 'item1' },
- { filename = 'file2', text = 'item2' },
- })
- n.feed(']q')
- screen:set_default_attr_ids({
- [1] = { foreground = Screen.colors.NvimDarkGrey4 },
- [2] = {
- background = Screen.colors.NvimLightGray3,
- foreground = Screen.colors.NvimDarkGrey3,
- },
- })
- screen:expect({
- grid = [[
- ^ |
- {1:~ }|*5
- {2:file2 0,0-1 All}|
- (2 of 2): item2 |
- ]],
- })
- end)
- it('do not show a full stack trace when unsuccessful #30625', function()
- n.clear({ args_rm = { '--cmd' } })
- local screen = Screen.new(40, 8)
- screen:set_default_attr_ids({
- [1] = { foreground = Screen.colors.NvimDarkGray4 },
- [2] = {
- background = Screen.colors.NvimLightGrey3,
- foreground = Screen.colors.NvimDarkGray3,
- },
- [3] = { foreground = Screen.colors.NvimLightRed },
- [4] = { foreground = Screen.colors.NvimLightCyan },
- })
- n.feed('[a')
- screen:expect({
- grid = [[
- |
- {1:~ }|*4
- {2: }|
- {3:E163: There is only one file to edit} |
- {4:Press ENTER or type command to continue}^ |
- ]],
- })
- n.feed('[q')
- screen:expect({
- grid = [[
- ^ |
- {1:~ }|*5
- {2:[No Name] 0,0-1 All}|
- {3:E42: No Errors} |
- ]],
- })
- n.feed('[l')
- screen:expect({
- grid = [[
- ^ |
- {1:~ }|*5
- {2:[No Name] 0,0-1 All}|
- {3:E776: No location list} |
- ]],
- })
- n.feed('[t')
- screen:expect({
- grid = [[
- ^ |
- {1:~ }|*5
- {2:[No Name] 0,0-1 All}|
- {3:E73: Tag stack empty} |
- ]],
- })
- end)
- describe('[<Space>', function()
- it('adds an empty line above the current line', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed('[<Space>')
- n.expect([[
- first line]])
- end)
- it('works with a count', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed('5[<Space>')
- n.expect([[
- first line]])
- end)
- it('supports dot repetition', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed('[<Space>')
- n.feed('.')
- n.expect([[
- first line]])
- end)
- it('supports dot repetition and a count', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed('[<Space>')
- n.feed('3.')
- n.expect([[
- first line]])
- end)
- end)
- describe(']<Space>', function()
- it('adds an empty line below the current line', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed(']<Space>')
- n.expect([[
- first line
- ]])
- end)
- it('works with a count', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed('5]<Space>')
- n.expect([[
- first line
- ]])
- end)
- it('supports dot repetition', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed(']<Space>')
- n.feed('.')
- n.expect([[
- first line
- ]])
- end)
- it('supports dot repetition and a count', function()
- n.clear({ args_rm = { '--cmd' } })
- n.insert([[first line]])
- n.feed(']<Space>')
- n.feed('2.')
- n.expect([[
- first line
- ]])
- end)
- end)
- end)
- end)
- end)
|