diff options
Diffstat (limited to 'test/functional/ui/searchhl_spec.lua')
-rw-r--r-- | test/functional/ui/searchhl_spec.lua | 352 |
1 files changed, 140 insertions, 212 deletions
diff --git a/test/functional/ui/searchhl_spec.lua b/test/functional/ui/searchhl_spec.lua index dc7ef666bd..a05436cf55 100644 --- a/test/functional/ui/searchhl_spec.lua +++ b/test/functional/ui/searchhl_spec.lua @@ -5,7 +5,7 @@ local command = helpers.command local feed_command = helpers.feed_command local eq = helpers.eq local eval = helpers.eval -local funcs = helpers.funcs +local fn = helpers.fn local testprg = helpers.testprg describe('search highlighting', function() @@ -15,46 +15,50 @@ describe('search highlighting', function() clear() screen = Screen.new(40, 7) screen:attach() - screen:set_default_attr_ids( { - [1] = {bold=true, foreground=Screen.colors.Blue}, - [2] = {background = Screen.colors.Yellow}, -- Search - [3] = {reverse = true}, - [4] = {foreground = Screen.colors.Red}, -- WarningMsg - [5] = {bold = true, reverse = true}, -- StatusLine - [6] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGrey}, -- Folded + screen:set_default_attr_ids({ + [1] = { bold = true, foreground = Screen.colors.Blue }, + [2] = { background = Screen.colors.Yellow }, -- Search + [3] = { reverse = true }, + [4] = { foreground = Screen.colors.Red }, -- WarningMsg + [5] = { bold = true, reverse = true }, -- StatusLine + [6] = { foreground = Screen.colors.Blue4, background = Screen.colors.LightGrey }, -- Folded }) end) it('is disabled by ":set nohlsearch"', function() feed_command('set nohlsearch') - insert("some text\nmore text") - feed("gg/text<cr>") + insert('some text\nmore text') + feed('gg/text<cr>') screen:expect([[ some ^text | more text | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 /text | ]]) end) it('is disabled in folded text', function() - insert("some text\nmore text") + insert('some text\nmore text') feed_command('1,2fold') - feed("gg/text") - screen:expect{grid=[[ + feed('gg/text') + screen:expect { + grid = [[ {6:+-- 2 lines: some text·················}| - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*5 /text^ | - ]], win_viewport={ - [2] = {win = {id = 1000}, topline = 0, botline = 3, curline = 0, curcol = 8, linecount = 2, sum_scroll_delta = 0}; - }} + ]], + win_viewport = { + [2] = { + win = 1000, + topline = 0, + botline = 3, + curline = 0, + curcol = 8, + linecount = 2, + sum_scroll_delta = 0, + }, + }, + } end) local function test_search_hl() @@ -66,7 +70,7 @@ describe('search highlighting', function() ]]) -- 'hlsearch' is enabled by default. #2859 - feed("gg/text<cr>") + feed('gg/text<cr>') screen:expect([[ some {2:^text} | more {2:text}stuff | @@ -78,7 +82,7 @@ describe('search highlighting', function() ]]) -- overlapping matches not allowed - feed("3nx") + feed('3nx') screen:expect([[ some {2:text} | more {2:text}stuff | @@ -89,7 +93,7 @@ describe('search highlighting', function() /text | ]]) - feed("ggn*") -- search for entire word + feed('ggn*') -- search for entire word screen:expect([[ some {2:text} | more textstuff | @@ -100,7 +104,7 @@ describe('search highlighting', function() /\<text\> | ]]) - feed_command("nohlsearch") + feed_command('nohlsearch') screen:expect([[ some text | more textstuff | @@ -119,7 +123,7 @@ describe('search highlighting', function() it("works when 'winhighlight' doesn't change Search highlight", function() command('setlocal winhl=NonText:Underlined') local attrs = screen:get_default_attr_ids() - attrs[1] = {foreground = Screen.colors.SlateBlue, underline = true} + attrs[1] = { foreground = Screen.colors.SlateBlue, underline = true } screen:set_default_attr_ids(attrs) test_search_hl() end) @@ -127,7 +131,7 @@ describe('search highlighting', function() it("works when 'winhighlight' changes Search highlight", function() command('setlocal winhl=Search:Underlined') local attrs = screen:get_default_attr_ids() - attrs[2] = {foreground = Screen.colors.SlateBlue, underline = true} + attrs[2] = { foreground = Screen.colors.SlateBlue, underline = true } screen:set_default_attr_ids(attrs) test_search_hl() end) @@ -135,9 +139,9 @@ describe('search highlighting', function() describe('CurSearch highlight', function() before_each(function() screen:set_default_attr_ids({ - [1] = {background = Screen.colors.Yellow}, -- Search - [2] = {foreground = Screen.colors.White, background = Screen.colors.Black}, -- CurSearch - [3] = {foreground = Screen.colors.Red}, -- WarningMsg + [1] = { background = Screen.colors.Yellow }, -- Search + [2] = { foreground = Screen.colors.White, background = Screen.colors.Black }, -- CurSearch + [3] = { foreground = Screen.colors.Red }, -- WarningMsg }) command('highlight CurSearch guibg=Black guifg=White') end) @@ -152,7 +156,8 @@ describe('search highlighting', function() humans think is impossible.]]) feed('/bee<CR>') - screen:expect{grid=[[ + screen:expect { + grid = [[ There is no way that a {2:^bee} should be | able to fly. Its wings are too small | to get its fat little body off the | @@ -160,10 +165,12 @@ describe('search highlighting', function() anyway because {1:bee}s don't care what | humans think is impossible. | {3:search hit BOTTOM, continuing at TOP} | - ]]} + ]], + } feed('nn') - screen:expect{grid=[[ + screen:expect { + grid = [[ There is no way that a {1:bee} should be | able to fly. Its wings are too small | to get its fat little body off the | @@ -171,10 +178,12 @@ describe('search highlighting', function() anyway because {2:^bee}s don't care what | humans think is impossible. | /bee | - ]]} + ]], + } feed('N') - screen:expect{grid=[[ + screen:expect { + grid = [[ There is no way that a {1:bee} should be | able to fly. Its wings are too small | to get its fat little body off the | @@ -182,7 +191,8 @@ describe('search highlighting', function() anyway because {1:bee}s don't care what | humans think is impossible. | ?bee | - ]]} + ]], + } end) it('works for multiline match', function() @@ -273,54 +283,42 @@ describe('search highlighting', function() end) it('highlights after EOL', function() - insert("\n\n\n\n\n\n") + insert('\n\n\n\n\n\n') - feed("gg/^<cr>") + feed('gg/^<cr>') screen:expect([[ {2: } | {2:^ } | - {2: } | - {2: } | - {2: } | - {2: } | + {2: } |*4 /^ | ]]) -- Test that highlights are preserved after moving the cursor. - feed("j") + feed('j') screen:expect([[ - {2: } | - {2: } | + {2: } |*2 {2:^ } | - {2: } | - {2: } | - {2: } | + {2: } |*3 /^ | ]]) -- Repeat the test in rightleft mode. - command("nohlsearch") - command("set rightleft") - feed("gg/^<cr>") + command('nohlsearch') + command('set rightleft') + feed('gg/^<cr>') screen:expect([[ {2: }| {2:^ }| - {2: }| - {2: }| - {2: }| - {2: }| + {2: }|*4 ^/ | ]]) - feed("j") + feed('j') screen:expect([[ - {2: }| - {2: }| + {2: }|*2 {2:^ }| - {2: }| - {2: }| - {2: }| + {2: }|*3 ^/ | ]]) end) @@ -338,7 +336,7 @@ describe('search highlighting', function() :file term | ]]) - feed('G') -- Follow :terminal output. + feed('G') -- Follow :terminal output. feed(':vnew<CR>') insert([[ foo bar baz @@ -349,8 +347,7 @@ describe('search highlighting', function() {3:foo} bar baz │{MATCH:%d+}: {2:foo}{MATCH:%s+}| bar baz {2:foo} │{MATCH:%d+}: {2:foo}{MATCH:%s+}| bar {2:foo} baz │{MATCH:%d+}: {2:foo}{MATCH:%s+}| - {1:~ }│{MATCH:.*}| - {1:~ }│{MATCH:.*}| + {1:~ }│{MATCH:.*}|*2 {5:[No Name] [+] }{3:term }| /foo^ | ]]) @@ -364,82 +361,61 @@ describe('search highlighting', function() the first line in a little file]]) command('vsplit') - feed("gg/li") + feed('gg/li') screen:expect([[ the first {3:li}ne │the first {2:li}ne | in a {2:li}ttle file │in a {2:li}ttle file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /li^ | ]]) -- check that consecutive matches are caught by C-g/C-t - feed("<C-g>") + feed('<C-g>') screen:expect([[ the first {2:li}ne │the first {2:li}ne | in a {3:li}ttle file │in a {2:li}ttle file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /li^ | ]]) - feed("<C-t>") + feed('<C-t>') screen:expect([[ the first {3:li}ne │the first {2:li}ne | in a {2:li}ttle file │in a {2:li}ttle file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /li^ | ]]) - feed("t") + feed('t') screen:expect([[ the first line │the first line | in a {3:lit}tle file │in a {2:lit}tle file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /lit^ | ]]) - feed("<cr>") + feed('<cr>') screen:expect([[ the first line │the first line | in a {2:^lit}tle file │in a {2:lit}tle file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /lit | ]]) - feed("/fir") + feed('/fir') screen:expect([[ the {3:fir}st line │the {2:fir}st line | in a little file │in a little file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /fir^ | ]]) -- incsearch have priority over hlsearch - feed("<esc>/ttle") + feed('<esc>/ttle') screen:expect([[ the first line │the first line | in a li{3:ttle} file │in a li{2:ttle} file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /ttle^ | ]]) @@ -448,10 +424,7 @@ describe('search highlighting', function() screen:expect([[ the first line │the first line | in a {2:^lit}tle file │in a {2:lit}tle file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 | ]]) eq('lit', eval('@/')) @@ -461,10 +434,7 @@ describe('search highlighting', function() screen:expect([[ the first line │the first line | in a ^little file │in a little file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 :noh | ]]) @@ -472,20 +442,14 @@ describe('search highlighting', function() screen:expect([[ the {3:first} line │the {2:first} line | in a little file │in a little file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /first^ | ]]) feed('<esc>') screen:expect([[ the first line │the first line | in a ^little file │in a little file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 | ]]) @@ -494,43 +458,34 @@ describe('search highlighting', function() command([[let @/ = 'i']]) -- moves to next match of previous search pattern, just like /<cr> feed('/<c-g><cr>') - eq({0, 1, 6, 0}, funcs.getpos('.')) + eq({ 0, 1, 6, 0 }, fn.getpos('.')) -- moves to next match of previous search pattern, just like /<cr> feed('/<cr>') - eq({0, 1, 12, 0}, funcs.getpos('.')) + eq({ 0, 1, 12, 0 }, fn.getpos('.')) -- moves to next match of previous search pattern, just like /<cr> feed('/<c-t><cr>') - eq({0, 2, 1, 0}, funcs.getpos('.')) + eq({ 0, 2, 1, 0 }, fn.getpos('.')) -- 8.0.1304, test that C-g and C-t works with incsearch and empty pattern feed('<esc>/fi<CR>') screen:expect([[ the {2:fi}rst line │the {2:fi}rst line | in a little {2:^fi}le │in a little {2:fi}le | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /fi | ]]) feed('//') screen:expect([[ the {3:fi}rst line │the {2:fi}rst line | in a little {2:fi}le │in a little {2:fi}le | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 //^ | ]]) feed('<C-g>') screen:expect([[ the {2:fi}rst line │the {2:fi}rst line | in a little {3:fi}le │in a little {2:fi}le | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 //^ | ]]) feed('<Esc>') @@ -541,10 +496,7 @@ describe('search highlighting', function() screen:expect([[ the first line │the first line | in a little {3:file} │in a little {2:file} | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /file^ | ]]) feed('<Esc>') @@ -557,10 +509,7 @@ describe('search highlighting', function() screen:expect([[ the {3:first} line │the {2:first} line | in a little file │in a little file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /first^ | ]]) feed('<Esc>') @@ -570,10 +519,7 @@ describe('search highlighting', function() screen:expect([[ the first line │the first line | in a {3:little} file │in a {2:little} file | - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| - {1:~ }│{1:~ }| + {1:~ }│{1:~ }|*4 /little^ | ]]) feed('<Esc>') @@ -586,37 +532,28 @@ describe('search highlighting', function() not the match you're looking for the match is here]]) - feed("gg/mat/e") + feed('gg/mat/e') screen:expect([[ not the {3:mat}ch you're looking for | the {2:mat}ch is here | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 /mat/e^ | ]]) -- Search with count and /e offset fixed in Vim patch 7.4.532. - feed("<esc>2/mat/e") + feed('<esc>2/mat/e') screen:expect([[ not the {2:mat}ch you're looking for | the {3:mat}ch is here | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 /mat/e^ | ]]) - feed("<cr>") + feed('<cr>') screen:expect([[ not the {2:mat}ch you're looking for | the {2:ma^t}ch is here | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 /mat/e | ]]) end) @@ -628,8 +565,7 @@ describe('search highlighting', function() screen:expect([[ | a repeated {2:^line } | - {2:a} repeated {2:line } | - {2:a} repeated {2:line } | + {2:a} repeated {2:line } |*2 {2:a} repeated line | {1:~ }| {4:search hit BOTTOM, continuing at TOP} | @@ -650,83 +586,80 @@ describe('search highlighting', function() it('works with matchadd and syntax', function() screen:set_default_attr_ids { - [1] = {bold=true, foreground=Screen.colors.Blue}; - [2] = {background = Screen.colors.Yellow}; - [3] = {reverse = true}; - [4] = {foreground = Screen.colors.Red}; - [5] = {bold = true, background = Screen.colors.Green}; - [6] = {italic = true, background = Screen.colors.Magenta}; - [7] = {bold = true, background = Screen.colors.Yellow}; - [8] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGray}; + [1] = { bold = true, foreground = Screen.colors.Blue }, + [2] = { background = Screen.colors.Yellow }, + [3] = { reverse = true }, + [4] = { foreground = Screen.colors.Red }, + [5] = { bold = true, background = Screen.colors.Green }, + [6] = { italic = true, background = Screen.colors.Magenta }, + [7] = { bold = true, background = Screen.colors.Yellow }, + [8] = { foreground = Screen.colors.Blue4, background = Screen.colors.LightGray }, } feed_command('set hlsearch') insert [[ very special text ]] - feed_command("syntax on") - feed_command("highlight MyGroup guibg=Green gui=bold") - feed_command("highlight MyGroup2 guibg=Magenta gui=italic") + feed_command('syntax on') + feed_command('highlight MyGroup guibg=Green gui=bold') + feed_command('highlight MyGroup2 guibg=Magenta gui=italic') feed_command("call matchadd('MyGroup', 'special')") feed_command("call matchadd('MyGroup2', 'text', 0)") -- searchhl and matchadd matches are exclusive, only the highest priority -- is used (and matches with lower priorities are not combined) - feed_command("/ial te") - screen:expect{grid=[[ + feed_command('/ial te') + screen:expect { + grid = [[ very {5:spec^ial}{2: te}{6:xt} | | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 {4:search hit BOTTOM, continuing at TOP} | - ]], win_viewport={ - [2] = {win = {id = 1000}, topline = 0, botline = 3, curline = 0, curcol = 11, linecount = 2, sum_scroll_delta = 0}; - }} + ]], + win_viewport = { + [2] = { + win = 1000, + topline = 0, + botline = 3, + curline = 0, + curcol = 11, + linecount = 2, + sum_scroll_delta = 0, + }, + }, + } -- check highlights work also in folds - feed("zf4j") - screen:expect{grid=[[ + feed('zf4j') + screen:expect { + grid = [[ {8:^+-- 2 lines: very special text·········}| - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*5 {4:search hit BOTTOM, continuing at TOP} | - ]]} - command("%foldopen") + ]], + } + command('%foldopen') screen:expect([[ very {5:spec^ial}{2: te}{6:xt} | | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 {4:search hit BOTTOM, continuing at TOP} | ]]) - feed_command("call clearmatches()") + feed_command('call clearmatches()') screen:expect([[ very spec{2:^ial te}xt | | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 :call clearmatches() | ]]) -- searchhl has priority over syntax, but in this case -- nonconflicting attributes are combined - feed_command("syntax keyword MyGroup special") + feed_command('syntax keyword MyGroup special') screen:expect([[ very {5:spec}{7:^ial}{2: te}xt | | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*4 :syntax keyword MyGroup special | ]]) end) @@ -737,13 +670,8 @@ describe('search highlighting', function() feed(':%g@a/b') screen:expect([[ {3:a/b}/c | - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| - {1:~ }| + {1:~ }|*5 :%g@a/b^ | ]]) end) end) - |