mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	test(core/startup_spec): add a test for #13720
(cherry picked from commit 3cd69055de)
			
			
This commit is contained in:
		
				
					committed by
					
						
						github-actions[bot]
					
				
			
			
				
	
			
			
			
						parent
						
							8dd4a2bdd1
						
					
				
				
					commit
					cba4362d85
				
			@@ -29,11 +29,6 @@ local alter_slashes = helpers.alter_slashes
 | 
			
		||||
local is_os = helpers.is_os
 | 
			
		||||
local dedent = helpers.dedent
 | 
			
		||||
 | 
			
		||||
local testfile = 'Xtest_startuptime'
 | 
			
		||||
after_each(function()
 | 
			
		||||
  os.remove(testfile)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
describe('startup', function()
 | 
			
		||||
  it('--clean', function()
 | 
			
		||||
    clear()
 | 
			
		||||
@@ -43,6 +38,10 @@ describe('startup', function()
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('--startuptime', function()
 | 
			
		||||
    local testfile = 'Xtest_startuptime'
 | 
			
		||||
    finally(function()
 | 
			
		||||
      os.remove(testfile)
 | 
			
		||||
    end)
 | 
			
		||||
    clear({ args = {'--startuptime', testfile}})
 | 
			
		||||
    assert_log('sourcing', testfile, 100)
 | 
			
		||||
    assert_log("require%('vim%._editor'%)", testfile, 100)
 | 
			
		||||
@@ -78,13 +77,7 @@ describe('startup', function()
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
describe('startup', function()
 | 
			
		||||
  before_each(function()
 | 
			
		||||
    clear()
 | 
			
		||||
    os.remove('Xtest_startup_ttyout')
 | 
			
		||||
  end)
 | 
			
		||||
  after_each(function()
 | 
			
		||||
    os.remove('Xtest_startup_ttyout')
 | 
			
		||||
  end)
 | 
			
		||||
  before_each(clear)
 | 
			
		||||
 | 
			
		||||
  describe('-l Lua', function()
 | 
			
		||||
    local function assert_l_out(expected, nvim_args, lua_args, script, input)
 | 
			
		||||
@@ -267,6 +260,10 @@ describe('startup', function()
 | 
			
		||||
    if is_os('win') then
 | 
			
		||||
      command([[set shellcmdflag=/s\ /c shellxquote=\"]])
 | 
			
		||||
    end
 | 
			
		||||
    os.remove('Xtest_startup_ttyout')
 | 
			
		||||
    finally(function()
 | 
			
		||||
      os.remove('Xtest_startup_ttyout')
 | 
			
		||||
    end)
 | 
			
		||||
    -- Running in :terminal
 | 
			
		||||
    command([[exe printf("terminal %s -u NONE -i NONE --cmd \"]]
 | 
			
		||||
            ..nvim_set..[[\"]]
 | 
			
		||||
@@ -284,6 +281,10 @@ describe('startup', function()
 | 
			
		||||
    if is_os('win') then
 | 
			
		||||
      command([[set shellcmdflag=/s\ /c shellxquote=\"]])
 | 
			
		||||
    end
 | 
			
		||||
    os.remove('Xtest_startup_ttyout')
 | 
			
		||||
    finally(function()
 | 
			
		||||
      os.remove('Xtest_startup_ttyout')
 | 
			
		||||
    end)
 | 
			
		||||
    -- Running in :terminal
 | 
			
		||||
    command([[exe printf("terminal echo foo | ]]  -- Input from a pipe.
 | 
			
		||||
            ..[[%s -u NONE -i NONE --cmd \"]]
 | 
			
		||||
@@ -343,28 +344,6 @@ describe('startup', function()
 | 
			
		||||
                    { '' }))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('-e/-E interactive #7679', function()
 | 
			
		||||
    clear('-e')
 | 
			
		||||
    local screen = Screen.new(25, 3)
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    feed("put ='from -e'<CR>")
 | 
			
		||||
    screen:expect([[
 | 
			
		||||
      :put ='from -e'          |
 | 
			
		||||
      from -e                  |
 | 
			
		||||
      :^                        |
 | 
			
		||||
    ]])
 | 
			
		||||
 | 
			
		||||
    clear('-E')
 | 
			
		||||
    screen = Screen.new(25, 3)
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    feed("put ='from -E'<CR>")
 | 
			
		||||
    screen:expect([[
 | 
			
		||||
      :put ='from -E'          |
 | 
			
		||||
      from -E                  |
 | 
			
		||||
      :^                        |
 | 
			
		||||
    ]])
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('stdin with -es/-Es #7679', function()
 | 
			
		||||
    local input = { 'append', 'line1', 'line2', '.', '%print', '' }
 | 
			
		||||
    local inputstr = table.concat(input, '\n')
 | 
			
		||||
@@ -420,23 +399,6 @@ describe('startup', function()
 | 
			
		||||
    end
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('-e sets ex mode', function()
 | 
			
		||||
    local screen = Screen.new(25, 3)
 | 
			
		||||
    clear('-e')
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    -- Verify we set the proper mode both before and after :vi.
 | 
			
		||||
    feed("put =mode(1)<CR>vi<CR>:put =mode(1)<CR>")
 | 
			
		||||
    screen:expect([[
 | 
			
		||||
      cv                       |
 | 
			
		||||
      ^n                        |
 | 
			
		||||
      :put =mode(1)            |
 | 
			
		||||
    ]])
 | 
			
		||||
 | 
			
		||||
    eq('cv\n',
 | 
			
		||||
       funcs.system({nvim_prog, '-n', '-es' },
 | 
			
		||||
                    { 'put =mode(1)', 'print', '' }))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('fails on --embed with -es/-Es/-l', function()
 | 
			
		||||
    matches('nvim[.exe]*: %-%-embed conflicts with %-es/%-Es/%-l',
 | 
			
		||||
      funcs.system({nvim_prog, '--embed', '-es' }))
 | 
			
		||||
@@ -446,17 +408,6 @@ describe('startup', function()
 | 
			
		||||
      funcs.system({nvim_prog, '--embed', '-l', 'foo.lua' }))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('does not crash if --embed is given twice', function()
 | 
			
		||||
    clear{args={'--embed'}}
 | 
			
		||||
    assert_alive()
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('does not crash when expanding cdpath during early_init', function()
 | 
			
		||||
    clear{env={CDPATH='~doesnotexist'}}
 | 
			
		||||
    assert_alive()
 | 
			
		||||
    eq(',~doesnotexist', eval('&cdpath'))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('ENTER dismisses early message #7967', function()
 | 
			
		||||
    local screen
 | 
			
		||||
    screen = Screen.new(60, 6)
 | 
			
		||||
@@ -482,24 +433,6 @@ describe('startup', function()
 | 
			
		||||
    ]])
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it("sets 'shortmess' when loading other tabs", function()
 | 
			
		||||
    clear({args={'-p', 'a', 'b', 'c'}})
 | 
			
		||||
    local screen = Screen.new(25, 4)
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    screen:expect({grid=[[
 | 
			
		||||
        {1: a }{2: b  c }{3:               }{2:X}|
 | 
			
		||||
        ^                         |
 | 
			
		||||
        {4:~                        }|
 | 
			
		||||
                                 |
 | 
			
		||||
          ]],
 | 
			
		||||
      attr_ids={
 | 
			
		||||
        [1] = {bold = true},
 | 
			
		||||
        [2] = {background = Screen.colors.LightGrey, underline = true},
 | 
			
		||||
        [3] = {reverse = true},
 | 
			
		||||
        [4] = {bold = true, foreground = Screen.colors.Blue1},
 | 
			
		||||
    }})
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('fixed hang issue with --headless (#11386)', function()
 | 
			
		||||
    local expected = ''
 | 
			
		||||
    local period = 100
 | 
			
		||||
@@ -525,7 +458,102 @@ describe('startup', function()
 | 
			
		||||
                               '+q' })
 | 
			
		||||
    eq('[\'+q\'] 1', out)
 | 
			
		||||
  end)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
describe('startup', function()
 | 
			
		||||
  it('-e/-E interactive #7679', function()
 | 
			
		||||
    clear('-e')
 | 
			
		||||
    local screen = Screen.new(25, 3)
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    feed("put ='from -e'<CR>")
 | 
			
		||||
    screen:expect([[
 | 
			
		||||
      :put ='from -e'          |
 | 
			
		||||
      from -e                  |
 | 
			
		||||
      :^                        |
 | 
			
		||||
    ]])
 | 
			
		||||
 | 
			
		||||
    clear('-E')
 | 
			
		||||
    screen = Screen.new(25, 3)
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    feed("put ='from -E'<CR>")
 | 
			
		||||
    screen:expect([[
 | 
			
		||||
      :put ='from -E'          |
 | 
			
		||||
      from -E                  |
 | 
			
		||||
      :^                        |
 | 
			
		||||
    ]])
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('-e sets ex mode', function()
 | 
			
		||||
    local screen = Screen.new(25, 3)
 | 
			
		||||
    clear('-e')
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    -- Verify we set the proper mode both before and after :vi.
 | 
			
		||||
    feed("put =mode(1)<CR>vi<CR>:put =mode(1)<CR>")
 | 
			
		||||
    screen:expect([[
 | 
			
		||||
      cv                       |
 | 
			
		||||
      ^n                        |
 | 
			
		||||
      :put =mode(1)            |
 | 
			
		||||
    ]])
 | 
			
		||||
 | 
			
		||||
    eq('cv\n',
 | 
			
		||||
       funcs.system({nvim_prog, '-n', '-es' },
 | 
			
		||||
                    { 'put =mode(1)', 'print', '' }))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('-d does not diff non-arglist windows #13720 #21289', function()
 | 
			
		||||
    write_file('Xdiff.vim', [[
 | 
			
		||||
      let bufnr = nvim_create_buf(0, 1)
 | 
			
		||||
      let config = {
 | 
			
		||||
            \   'relative': 'editor',
 | 
			
		||||
            \   'focusable': v:false,
 | 
			
		||||
            \   'width': 1,
 | 
			
		||||
            \   'height': 1,
 | 
			
		||||
            \   'row': 3,
 | 
			
		||||
            \   'col': 3
 | 
			
		||||
            \ }
 | 
			
		||||
      autocmd WinEnter * call nvim_open_win(bufnr, v:false, config)]])
 | 
			
		||||
    finally(function()
 | 
			
		||||
      os.remove('Xdiff.vim')
 | 
			
		||||
    end)
 | 
			
		||||
    clear{args={'-u', 'Xdiff.vim', '-d', 'Xdiff.vim', 'Xdiff.vim'}}
 | 
			
		||||
    eq(true, meths.get_option_value('diff', {win = funcs.win_getid(1)}))
 | 
			
		||||
    eq(true, meths.get_option_value('diff', {win = funcs.win_getid(2)}))
 | 
			
		||||
    local float_win = funcs.win_getid(3)
 | 
			
		||||
    eq('editor', meths.win_get_config(float_win).relative)
 | 
			
		||||
    eq(false, meths.get_option_value('diff', {win = float_win}))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('does not crash if --embed is given twice', function()
 | 
			
		||||
    clear{args={'--embed'}}
 | 
			
		||||
    assert_alive()
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('does not crash when expanding cdpath during early_init', function()
 | 
			
		||||
    clear{env={CDPATH='~doesnotexist'}}
 | 
			
		||||
    assert_alive()
 | 
			
		||||
    eq(',~doesnotexist', eval('&cdpath'))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it("sets 'shortmess' when loading other tabs", function()
 | 
			
		||||
    clear({args={'-p', 'a', 'b', 'c'}})
 | 
			
		||||
    local screen = Screen.new(25, 4)
 | 
			
		||||
    screen:attach()
 | 
			
		||||
    screen:expect({grid=[[
 | 
			
		||||
        {1: a }{2: b  c }{3:               }{2:X}|
 | 
			
		||||
        ^                         |
 | 
			
		||||
        {4:~                        }|
 | 
			
		||||
                                 |
 | 
			
		||||
          ]],
 | 
			
		||||
      attr_ids={
 | 
			
		||||
        [1] = {bold = true},
 | 
			
		||||
        [2] = {background = Screen.colors.LightGrey, underline = true},
 | 
			
		||||
        [3] = {reverse = true},
 | 
			
		||||
        [4] = {bold = true, foreground = Screen.colors.Blue1},
 | 
			
		||||
    }})
 | 
			
		||||
  end)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
describe('startup', function()
 | 
			
		||||
  local function pack_clear(cmd)
 | 
			
		||||
    -- add packages after config dir in rtp but before config/after
 | 
			
		||||
    clear{args={'--cmd', 'set packpath=test/functional/fixtures', '--cmd', 'let paths=split(&rtp, ",")', '--cmd', 'let &rtp = paths[0]..",test/functional/fixtures,test/functional/fixtures/middle,"..join(paths[1:],",")', '--cmd', cmd}, env={XDG_CONFIG_HOME='test/functional/fixtures/'},
 | 
			
		||||
@@ -533,7 +561,6 @@ describe('startup', function()
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  it("handles &packpath during startup", function()
 | 
			
		||||
    pack_clear [[
 | 
			
		||||
      let g:x = bar#test()
 | 
			
		||||
@@ -640,13 +667,13 @@ describe('startup', function()
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('window widths are correct when modelines set &columns with tabpages', function()
 | 
			
		||||
    write_file('tab1.noft', 'vim: columns=81')
 | 
			
		||||
    write_file('tab2.noft', 'vim: columns=81')
 | 
			
		||||
    write_file('Xtab1.noft', 'vim: columns=81')
 | 
			
		||||
    write_file('Xtab2.noft', 'vim: columns=81')
 | 
			
		||||
    finally(function()
 | 
			
		||||
      os.remove('tab1.noft')
 | 
			
		||||
      os.remove('tab2.noft')
 | 
			
		||||
      os.remove('Xtab1.noft')
 | 
			
		||||
      os.remove('Xtab2.noft')
 | 
			
		||||
    end)
 | 
			
		||||
    clear({args = {'-p', 'tab1.noft', 'tab2.noft'}})
 | 
			
		||||
    clear({args = {'-p', 'Xtab1.noft', 'Xtab2.noft'}})
 | 
			
		||||
    eq(81, meths.win_get_width(0))
 | 
			
		||||
    command('tabnext')
 | 
			
		||||
    eq(81, meths.win_get_width(0))
 | 
			
		||||
@@ -736,9 +763,10 @@ describe('user config init', function()
 | 
			
		||||
    eq(funcs.fnamemodify(init_lua_path, ':p'), eval('$MYVIMRC'))
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  describe('with existing .exrc in cwd', function()
 | 
			
		||||
  describe('loads existing', function()
 | 
			
		||||
    local exrc_path = '.exrc'
 | 
			
		||||
    local xstate = 'Xstate'
 | 
			
		||||
    local xstateenv = { XDG_CONFIG_HOME=xconfig, XDG_DATA_HOME=xdata, XDG_STATE_HOME=xstate }
 | 
			
		||||
 | 
			
		||||
    local function setup_exrc_file(filename)
 | 
			
		||||
      exrc_path = filename
 | 
			
		||||
@@ -768,10 +796,10 @@ describe('user config init', function()
 | 
			
		||||
    end)
 | 
			
		||||
 | 
			
		||||
    for _, filename in ipairs({ '.exrc', '.nvimrc', '.nvim.lua' }) do
 | 
			
		||||
      it('loads ' .. filename, function ()
 | 
			
		||||
      it(filename .. ' in cwd', function()
 | 
			
		||||
        setup_exrc_file(filename)
 | 
			
		||||
 | 
			
		||||
        clear{ args_rm = {'-u'}, env={ XDG_CONFIG_HOME=xconfig, XDG_STATE_HOME=xstate } }
 | 
			
		||||
        clear{ args_rm={'-u'}, env=xstateenv }
 | 
			
		||||
        -- The 'exrc' file is not trusted, and the prompt is skipped because there is no UI.
 | 
			
		||||
        eq('---', eval('g:exrc_file'))
 | 
			
		||||
 | 
			
		||||
@@ -803,7 +831,7 @@ describe('user config init', function()
 | 
			
		||||
          -- TERMINAL --                                    |
 | 
			
		||||
        ]], filename, string.rep(' ', 50 - #filename)))
 | 
			
		||||
 | 
			
		||||
        clear{ args_rm = {'-u'}, env={ XDG_CONFIG_HOME=xconfig, XDG_STATE_HOME=xstate } }
 | 
			
		||||
        clear{ args_rm={'-u'}, env=xstateenv }
 | 
			
		||||
        -- The 'exrc' file is now trusted.
 | 
			
		||||
        eq(filename, eval('g:exrc_file'))
 | 
			
		||||
      end)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user