aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/searchhl_spec.lua
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2015-02-02 18:23:49 +0100
committerBjörn Linse <bjorn.linse@gmail.com>2015-03-19 23:09:56 +0100
commit93d01bf12e7620e57a91f653cd871696eead1729 (patch)
treeab5136e80aef459f0147a5f1402cb6cc9461d691 /test/functional/ui/searchhl_spec.lua
parent63d256440915f2bde1cbecd372ccd4e3a87a05a8 (diff)
downloadrneovim-93d01bf12e7620e57a91f653cd871696eead1729.tar.gz
rneovim-93d01bf12e7620e57a91f653cd871696eead1729.tar.bz2
rneovim-93d01bf12e7620e57a91f653cd871696eead1729.zip
tests/ui: test hlsearch and incsearch
Diffstat (limited to 'test/functional/ui/searchhl_spec.lua')
-rw-r--r--test/functional/ui/searchhl_spec.lua241
1 files changed, 241 insertions, 0 deletions
diff --git a/test/functional/ui/searchhl_spec.lua b/test/functional/ui/searchhl_spec.lua
new file mode 100644
index 0000000000..6986abdd65
--- /dev/null
+++ b/test/functional/ui/searchhl_spec.lua
@@ -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)
+