mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	The following (run as a script) used to cause a crash due to :sign using a special redraw (not updating nvim's specific highlight data structures) without proper redraw first, as split just flags for redraw later. set cursorline sign define piet text=>> texthl=Search split sign place 3 line=2 name=piet buffer=1
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local helpers = require('test.functional.helpers')(after_each)
 | 
						|
local Screen = require('test.functional.ui.screen')
 | 
						|
local clear, feed, command = helpers.clear, helpers.feed, helpers.command
 | 
						|
local source = helpers.source
 | 
						|
 | 
						|
describe('Signs', function()
 | 
						|
  local screen
 | 
						|
 | 
						|
  before_each(function()
 | 
						|
    clear()
 | 
						|
    screen = Screen.new()
 | 
						|
    screen:attach()
 | 
						|
    screen:set_default_attr_ids( {
 | 
						|
      [0] = {bold=true, foreground=255},
 | 
						|
      [1] = {background = Screen.colors.Yellow},
 | 
						|
      [2] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Grey},
 | 
						|
      [3] = {background = Screen.colors.Gray90},
 | 
						|
      [4] = {bold = true, reverse = true},
 | 
						|
      [5] = {reverse = true},
 | 
						|
    } )
 | 
						|
  end)
 | 
						|
 | 
						|
  after_each(function()
 | 
						|
    screen:detach()
 | 
						|
  end)
 | 
						|
 | 
						|
  describe(':sign place', function()
 | 
						|
    it('shadows previously placed signs', function()
 | 
						|
      feed('ia<cr>b<cr>c<cr><esc>')
 | 
						|
      command('sign define piet text=>> texthl=Search')
 | 
						|
      command('sign define pietx text=>! texthl=Search')
 | 
						|
      command('sign place 1 line=1 name=piet buffer=1')
 | 
						|
      command('sign place 2 line=3 name=piet buffer=1')
 | 
						|
      command('sign place 3 line=1 name=pietx buffer=1')
 | 
						|
      screen:expect([[
 | 
						|
        {1:>!}a                                                  |
 | 
						|
        {2:  }b                                                  |
 | 
						|
        {1:>>}c                                                  |
 | 
						|
        {2:  }^                                                   |
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
                                                             |
 | 
						|
      ]])
 | 
						|
    end)
 | 
						|
 | 
						|
    it('can be called right after :split', function()
 | 
						|
      feed('ia<cr>b<cr>c<cr><esc>gg')
 | 
						|
      -- This used to cause a crash due to :sign using a special redraw
 | 
						|
      -- (not updating nvim's specific highlight data structures)
 | 
						|
      -- without proper redraw first, as split just flags for redraw later.
 | 
						|
      source([[
 | 
						|
        set cursorline
 | 
						|
        sign define piet text=>> texthl=Search
 | 
						|
        split
 | 
						|
        sign place 3 line=2 name=piet buffer=1
 | 
						|
      ]])
 | 
						|
      screen:expect([[
 | 
						|
        {2:  }{3:^a                                                  }|
 | 
						|
        {1:>>}b                                                  |
 | 
						|
        {2:  }c                                                  |
 | 
						|
        {2:  }                                                   |
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {4:[No Name] [+]                                        }|
 | 
						|
        {2:  }{3:a                                                  }|
 | 
						|
        {1:>>}b                                                  |
 | 
						|
        {2:  }c                                                  |
 | 
						|
        {2:  }                                                   |
 | 
						|
        {2:  }{0:~                                                  }|
 | 
						|
        {5:[No Name] [+]                                        }|
 | 
						|
                                                             |
 | 
						|
      ]])
 | 
						|
    end)
 | 
						|
  end)
 | 
						|
end)
 |