aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/hl_spec.lua
diff options
context:
space:
mode:
authorSiddhant Agarwal <68201519+siddhantdev@users.noreply.github.com>2025-04-03 19:56:56 +0530
committerGitHub <noreply@github.com>2025-04-03 07:26:56 -0700
commiteae2d3b145c724e8c801c7c22a2ccc3bde5534eb (patch)
treed30812a2e6b14b82aab0eb05085f424abaf84c04 /test/functional/lua/hl_spec.lua
parent974a3aa2c4c34f97ce015466a7dfc5fd727fccc2 (diff)
downloadrneovim-eae2d3b145c724e8c801c7c22a2ccc3bde5534eb.tar.gz
rneovim-eae2d3b145c724e8c801c7c22a2ccc3bde5534eb.tar.bz2
rneovim-eae2d3b145c724e8c801c7c22a2ccc3bde5534eb.zip
feat(vim.hl): allow multiple timed highlights simultaneously #33283
Problem: Currently vim.hl.range only allows one timed highlight. Creating another one, removes the old one. Solution: vim.hl.range now returns a timer and a function. The timer keeps track of how much time is left in the highlight and the function allows you to clear it, letting the user decide what to do with old highlights.
Diffstat (limited to 'test/functional/lua/hl_spec.lua')
-rw-r--r--test/functional/lua/hl_spec.lua74
1 files changed, 74 insertions, 0 deletions
diff --git a/test/functional/lua/hl_spec.lua b/test/functional/lua/hl_spec.lua
index 12be01e0a5..e3c6c706c7 100644
--- a/test/functional/lua/hl_spec.lua
+++ b/test/functional/lua/hl_spec.lua
@@ -139,6 +139,80 @@ describe('vim.hl.range', function()
|
]])
end)
+
+ it('shows multiple highlights with different timeouts simultaneously', function()
+ local timeout1 = 300
+ local timeout2 = 600
+ exec_lua(function()
+ local ns = vim.api.nvim_create_namespace('')
+ vim.hl.range(0, ns, 'Search', { 0, 0 }, { 4, 0 }, { timeout = timeout1 })
+ vim.hl.range(0, ns, 'Search', { 2, 6 }, { 3, 5 }, { timeout = timeout2 })
+ end)
+ screen:expect({
+ grid = [[
+ {10:^asdfghjkl}{100:$} |
+ {10:«口=口»}{100:$} |
+ {10:qwertyuiop}{100:$} |
+ {10:口口=口口}{1:$} |
+ zxcvbnm{1:$} |
+ |
+ ]],
+ timeout = timeout1 / 3,
+ })
+ screen:expect({
+ grid = [[
+ ^asdfghjkl{1:$} |
+ «口=口»{1:$} |
+ qwerty{10:uiop}{100:$} |
+ {10:口口}=口口{1:$} |
+ zxcvbnm{1:$} |
+ |
+ ]],
+ timeout = timeout1 + ((timeout2 - timeout1) / 3),
+ })
+ screen:expect([[
+ ^asdfghjkl{1:$} |
+ «口=口»{1:$} |
+ qwertyuiop{1:$} |
+ 口口=口口{1:$} |
+ zxcvbnm{1:$} |
+ |
+ ]])
+ end)
+
+ it('allows cancelling a highlight that has not timed out', function()
+ exec_lua(function()
+ local timeout = 3000
+ local range_timer
+ local range_hl_clear
+ local ns = vim.api.nvim_create_namespace('')
+ range_timer, range_hl_clear = vim.hl.range(
+ 0,
+ ns,
+ 'Search',
+ { 0, 0 },
+ { 4, 0 },
+ { timeout = timeout }
+ )
+ if range_timer and not range_timer:is_closing() then
+ range_timer:close()
+ assert(range_hl_clear)
+ range_hl_clear()
+ range_hl_clear() -- Exercise redundant call
+ end
+ end)
+ screen:expect({
+ grid = [[
+ ^asdfghjkl{1:$} |
+ «口=口»{1:$} |
+ qwertyuiop{1:$} |
+ 口口=口口{1:$} |
+ zxcvbnm{1:$} |
+ |
+ ]],
+ unchanged = true,
+ })
+ end)
end)
describe('vim.hl.on_yank', function()