mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
tests/ui: test hlsearch and incsearch
This commit is contained in:
parent
63d2564409
commit
93d01bf12e
241
test/functional/ui/searchhl_spec.lua
Normal file
241
test/functional/ui/searchhl_spec.lua
Normal file
@ -0,0 +1,241 @@
|
||||
local helpers = require('test.functional.helpers')
|
||||
local Screen = require('test.functional.ui.screen')
|
||||
local clear, feed, nvim, insert = helpers.clear, helpers.feed, helpers.nvim, helpers.insert
|
||||
local execute, request, eq = helpers.execute, helpers.request, helpers.eq
|
||||
|
||||
describe('search highlighting', function()
|
||||
local screen
|
||||
local colors = Screen.colors
|
||||
local hl_colors = {
|
||||
NonText = colors.Blue,
|
||||
Search = colors.Yellow,
|
||||
Message = colors.Red,
|
||||
}
|
||||
|
||||
before_each(function()
|
||||
clear()
|
||||
screen = Screen.new(40, 7)
|
||||
screen:attach()
|
||||
--ignore highligting of ~-lines
|
||||
screen:set_default_attr_ids( {
|
||||
[1] = {background = hl_colors.Search},
|
||||
[2] = {reverse = true},
|
||||
[3] = {foreground = hl_colors.Message},
|
||||
})
|
||||
screen:set_default_attr_ignore( {{bold=true, foreground=hl_colors.NonText}} )
|
||||
end)
|
||||
|
||||
it('is off by default', function()
|
||||
insert("some text\nmore text")
|
||||
feed("gg/text<cr>")
|
||||
screen:expect([[
|
||||
some ^text |
|
||||
more text |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
/text |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('works', function()
|
||||
execute('set hlsearch')
|
||||
insert([[
|
||||
some text
|
||||
more textstuff
|
||||
stupidtexttextstuff
|
||||
a text word
|
||||
]])
|
||||
feed("gg/text<cr>")
|
||||
screen:expect([[
|
||||
some {1:^text} |
|
||||
more {1:text}stuff |
|
||||
stupid{1:texttext}stuff |
|
||||
a {1:text} word |
|
||||
|
|
||||
~ |
|
||||
/text |
|
||||
]])
|
||||
|
||||
-- overlapping matches not allowed
|
||||
feed("3nx")
|
||||
screen:expect([[
|
||||
some {1:text} |
|
||||
more {1:text}stuff |
|
||||
stupid{1:text}^extstuff |
|
||||
a {1:text} word |
|
||||
|
|
||||
~ |
|
||||
/text |
|
||||
]])
|
||||
|
||||
feed("ggn*") -- search for entire word
|
||||
screen:expect([[
|
||||
some {1:text} |
|
||||
more textstuff |
|
||||
stupidtextextstuff |
|
||||
a {1:^text} word |
|
||||
|
|
||||
~ |
|
||||
/\<text\> |
|
||||
]])
|
||||
|
||||
execute("nohlsearch")
|
||||
screen:expect([[
|
||||
some text |
|
||||
more textstuff |
|
||||
stupidtextextstuff |
|
||||
a ^text word |
|
||||
|
|
||||
~ |
|
||||
:nohlsearch |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('works with incsearch', function()
|
||||
execute('set hlsearch')
|
||||
execute('set incsearch')
|
||||
insert([[
|
||||
the first line
|
||||
in a little file
|
||||
]])
|
||||
feed("gg/li")
|
||||
screen:expect([[
|
||||
the first {2:li}ne |
|
||||
in a little file |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
/li^ |
|
||||
]])
|
||||
|
||||
feed("t")
|
||||
screen:expect([[
|
||||
the first line |
|
||||
in a {2:lit}tle file |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
/lit^ |
|
||||
]])
|
||||
|
||||
feed("<cr>")
|
||||
screen:expect([[
|
||||
the first line |
|
||||
in a {1:^lit}tle file |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
/lit |
|
||||
]])
|
||||
|
||||
feed("/fir")
|
||||
screen:expect([[
|
||||
the {2:fir}st line |
|
||||
in a {1:lit}tle file |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
/fir^ |
|
||||
]])
|
||||
|
||||
-- incsearch have priority over hlsearch
|
||||
feed("<esc>/ttle")
|
||||
screen:expect([[
|
||||
the first line |
|
||||
in a {1:li}{2:ttle} file |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
/ttle^ |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('works with multiline regexps', function()
|
||||
execute('set hlsearch')
|
||||
feed('4oa repeated line<esc>')
|
||||
feed('/line\\na<cr>')
|
||||
screen:expect([[
|
||||
|
|
||||
a repeated {1:^line} |
|
||||
{1:a} repeated {1:line} |
|
||||
{1:a} repeated {1:line} |
|
||||
{1:a} repeated line |
|
||||
~ |
|
||||
{3:search hit BOTTOM, continuing at TOP} |
|
||||
]])
|
||||
|
||||
-- it redraws rows above the changed one
|
||||
feed('4Grb')
|
||||
screen:expect([[
|
||||
|
|
||||
a repeated {1:line} |
|
||||
{1:a} repeated line |
|
||||
^b repeated {1:line} |
|
||||
{1:a} repeated line |
|
||||
~ |
|
||||
{3:search hit BOTTOM, continuing at TOP} |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('works with matchadd and syntax', function()
|
||||
execute('set hlsearch')
|
||||
insert([[
|
||||
very special text
|
||||
]])
|
||||
execute("syntax on")
|
||||
execute("highlight MyGroup guibg=Green gui=bold")
|
||||
execute("highlight MyGroup2 guibg=Magenta gui=italic")
|
||||
execute("call matchadd('MyGroup', 'special')")
|
||||
execute("call matchadd('MyGroup2', 'text', 0)")
|
||||
|
||||
-- searchhl and matchadd matches are exclusive, only the higest priority
|
||||
-- is used (and matches with lower priorities are not combined)
|
||||
execute("/ial te")
|
||||
screen:expect([[
|
||||
very {4:spec^ial}{1: te}{5:xt} |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
{3:search hit BOTTOM, continuing at TOP} |
|
||||
]], {[1] = {background = hl_colors.Search}, [2] = {reverse = true},
|
||||
[3] = {foreground = hl_colors.Message}, [4] = {bold = true, background =
|
||||
colors.Green}, [5] = {italic = true, background = colors.Magenta}})
|
||||
|
||||
execute("call clearmatches()")
|
||||
screen:expect([[
|
||||
very spec{1:^ial te}xt |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
:call clearmatches() |
|
||||
]])
|
||||
|
||||
-- searchhl has priority over syntax, but in this case
|
||||
-- nonconflicting attributes are combined
|
||||
execute("syntax keyword MyGroup special")
|
||||
screen:expect([[
|
||||
very {4:spec}{5:^ial}{1: te}xt |
|
||||
|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
:syntax keyword MyGroup special |
|
||||
]], {[1] = {background = hl_colors.Search}, [2] = {reverse = true},
|
||||
[3] = {foreground = hl_colors.Message}, [4] = {bold = true,
|
||||
background = colors.Green}, [5] = {bold = true, background = hl_colors.Search}})
|
||||
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user