aboutsummaryrefslogtreecommitdiff
path: root/test/functional/autocmd/autocmd_oldtest_spec.lua
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-11-29 13:24:24 +0800
committerGitHub <noreply@github.com>2023-11-29 13:24:24 +0800
commit640680cccead28c28b1b789c254fc83d55979c08 (patch)
tree92aef0917ea0de65bc65ee72e9fe4f246214566a /test/functional/autocmd/autocmd_oldtest_spec.lua
parent64b53b71ba5d804b2c8cf186be68931b2621f53c (diff)
downloadrneovim-640680cccead28c28b1b789c254fc83d55979c08.tar.gz
rneovim-640680cccead28c28b1b789c254fc83d55979c08.tar.bz2
rneovim-640680cccead28c28b1b789c254fc83d55979c08.zip
vim-patch:9.0.2134: ml_get error when scrolling (#26264)
Problem: ml_get error when scrolling after delete Solution: mark topline to be validated in main_loop if it is larger than current buffers line count reset_lnums() is called after e.g. TextChanged autocommands and it may accidentally cause curwin->w_topline to become invalid, e.g. if the autocommand has deleted some lines. So verify that curwin->w_topline points to a valid line and if not, mark the window to have w_topline recalculated in main_loop() in update_topline() after reset_lnums() returns. fixes: vim/vim#13568 fixes: vim/vim#13578 https://github.com/vim/vim/commit/c4ffeddfe5bd1824650e9b911ed9245bf56c69e3 The error doesn't happen in Nvim because Nvim triggers TextChanged after calling update_topline(). Co-authored-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'test/functional/autocmd/autocmd_oldtest_spec.lua')
-rw-r--r--test/functional/autocmd/autocmd_oldtest_spec.lua42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/functional/autocmd/autocmd_oldtest_spec.lua b/test/functional/autocmd/autocmd_oldtest_spec.lua
index 29a6171269..dfd746a06e 100644
--- a/test/functional/autocmd/autocmd_oldtest_spec.lua
+++ b/test/functional/autocmd/autocmd_oldtest_spec.lua
@@ -1,10 +1,12 @@
local helpers = require('test.functional.helpers')(after_each)
+local Screen = require('test.functional.ui.screen')
local clear = helpers.clear
local eq = helpers.eq
local meths = helpers.meths
local funcs = helpers.funcs
local exec = helpers.exec
+local feed = helpers.feed
describe('oldtests', function()
before_each(clear)
@@ -81,4 +83,44 @@ describe('oldtests', function()
funcs.delete(fname)
funcs.delete('Xout')
end)
+
+ -- oldtest: Test_delete_ml_get_errors()
+ it('no ml_get error with TextChanged autocommand and delete', function()
+ local screen = Screen.new(75, 10)
+ screen:attach()
+ screen:set_default_attr_ids({
+ [1] = {background = Screen.colors.Cyan};
+ })
+ exec([[
+ set noshowcmd noruler scrolloff=0
+ source test/old/testdir/samples/matchparen.vim
+ edit test/old/testdir/samples/box.txt
+ ]])
+ feed('249GV<C-End>d')
+ screen:expect{grid=[[
+ const auto themeEmoji = _forPeer->themeEmoji(); |
+ if (themeEmoji.isEmpty()) { |
+ return nonCustom; |
+ } |
+ const auto &themes = _forPeer->owner().cloudThemes(); |
+ const auto theme = themes.themeForEmoji(themeEmoji); |
+ if (!theme) {1:{} |
+ return nonCustom; |
+ {1:^}} |
+ 353 fewer lines |
+ ]]}
+ feed('<PageUp>')
+ screen:expect{grid=[[
+ |
+ auto BackgroundBox::Inner::resolveResetCustomPaper() const |
+ -> std::optional<Data::WallPaper> { |
+ if (!_forPeer) { |
+ return {}; |
+ } |
+ const auto nonCustom = Window::Theme::Background()->paper(); |
+ const auto themeEmoji = _forPeer->themeEmoji(); |
+ ^if (themeEmoji.isEmpty()) { |
+ 353 fewer lines |
+ ]]}
+ end)
end)