aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/vim_spec.lua
diff options
context:
space:
mode:
authorArtem <vanaigranov@gmail.com>2024-12-25 14:12:40 -0600
committerGitHub <noreply@github.com>2024-12-25 21:12:40 +0100
commit487c48ec8689b865bad04fdb87b61f5ada25da97 (patch)
tree2dd0245dc458792b7ae5b3a989bbbc1a34d0c5ef /test/functional/api/vim_spec.lua
parent7567f7d3226ab247eb2b743460492c1101045b0e (diff)
downloadrneovim-487c48ec8689b865bad04fdb87b61f5ada25da97.tar.gz
rneovim-487c48ec8689b865bad04fdb87b61f5ada25da97.tar.bz2
rneovim-487c48ec8689b865bad04fdb87b61f5ada25da97.zip
fix(api): clamp range lines in `nvim__redraw()` (#31710)
Problem: `nvim__redraw()` doesn't clamp the lines in the `range` parameter before truncating to int. The resulting range may be empty when the original range contained buffer lines and vice versa. E.g. for a buffer with 4 lines, these are the redrawn lines: ```lua { 2, 2 ^ 31 } -> none (should be { 2, 3 }) { 2, 2 ^ 32 } -> none (should be { 2, 3 }) { 2 ^ 32 - 1, 2 } -> { 0, 1 } (should be none) ``` Solution: Clamp `range` values before truncating to int.
Diffstat (limited to 'test/functional/api/vim_spec.lua')
-rw-r--r--test/functional/api/vim_spec.lua49
1 files changed, 47 insertions, 2 deletions
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index fbc9490df6..578fa361e8 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -5385,8 +5385,53 @@ describe('API', function()
13 |
]],
})
- -- takes buffer line count from correct buffer with "win" and {0, -1} "range"
- api.nvim__redraw({ win = 0, range = { 0, -1 } })
+ end)
+
+ it('nvim__redraw range parameter', function()
+ Screen.new(10, 5)
+ fn.setline(1, fn.range(4))
+
+ exec_lua([[
+ _G.lines_list = {}
+ ns = vim.api.nvim_create_namespace('')
+ vim.api.nvim_set_decoration_provider(ns, {
+ on_win = function()
+ end,
+ on_line = function(_, _, _, line)
+ table.insert(_G.lines_list, line)
+ end,
+ })
+ function _G.get_lines()
+ local lines = _G.lines_list
+ _G.lines_list = {}
+ return lines
+ end
+ ]])
+
+ api.nvim__redraw({ flush = true, valid = false })
+ exec_lua('_G.get_lines()')
+
+ local actual_lines = {}
+ local function test(range)
+ api.nvim__redraw({ win = 0, range = range })
+ table.insert(actual_lines, exec_lua('return _G.get_lines()'))
+ end
+
+ test({ 0, -1 })
+ test({ 2, 2 ^ 31 })
+ test({ 2, 2 ^ 32 })
+ test({ 2 ^ 31 - 1, 2 })
+ test({ 2 ^ 32 - 1, 2 })
+
+ local expected_lines = {
+ { 0, 1, 2, 3 },
+ { 2, 3 },
+ { 2, 3 },
+ {},
+ {},
+ }
+ eq(expected_lines, actual_lines)
+
n.assert_alive()
end)
end)