-- Normal mode tests. local t = require('test.testutil') local n = require('test.functional.testnvim')() local Screen = require('test.functional.ui.screen') local describe, it, before_each = t.describe, t.it, t.before_each local clear = n.clear local feed = n.feed local fn = n.fn local command = n.command local eq = t.eq local api = n.api describe('Normal mode', function() before_each(clear) it('setting &winhighlight or &winblend does not change curswant #27470', function() fn.setline(1, { 'long long lone line', 'short line' }) feed('ggfi') local pos = fn.getcurpos() feed('j') command('setlocal winblend=10 winhighlight=Visual:Search') feed('k') eq(pos, fn.getcurpos()) end) it('&showcmd does not crash with :startinsert #28419', function() local screen = Screen.new(60, 17) fn.jobstart({ n.nvim_prog, '--clean', '--cmd', 'startinsert' }, { term = true, env = { VIMRUNTIME = os.getenv('VIMRUNTIME') }, }) screen:expect({ grid = [[ ^ | ~ |*13 [No Name] 0,1 All| -- INSERT -- | | ]], attr_ids = {}, }) end) it('replacing with ZWJ emoji sequences', function() local screen = Screen.new(30, 8) api.nvim_buf_set_lines(0, 0, -1, true, { 'abcdefg' }) feed('05rπŸ§‘β€πŸŒΎ') -- ZWJ screen:expect([[ πŸ§‘β€πŸŒΎπŸ§‘β€πŸŒΎπŸ§‘β€πŸŒΎπŸ§‘β€πŸŒΎ^πŸ§‘β€πŸŒΎfg | {1:~ }|*6 | ]]) feed('2rπŸ³οΈβ€βš§οΈ') -- ZWJ and variant selectors screen:expect([[ πŸ§‘β€πŸŒΎπŸ§‘β€πŸŒΎπŸ§‘β€πŸŒΎπŸ§‘β€πŸŒΎπŸ³οΈβ€βš§οΈ^πŸ³οΈβ€βš§οΈg | {1:~ }|*6 | ]]) end) it('"gk" does not crash with signcolumn=yes in narrow window #31274', function() feed('o') command('1vsplit | setlocal signcolumn=yes') feed('gk') n.assert_alive() end) it("'] after a forced blockwise exclusive motion", function() n.exec([=[ function! Opfunc(type) let g:marks = [getpos("'[")[1:3], getpos("']")[1:3]] endfunction set operatorfunc=Opfunc ]=]) fn.setline(1, { 'abcd' }) feed('02|g@l') eq({ { 1, 2, 0 }, { 1, 3, 0 } }, api.nvim_get_var('marks')) fn.setline(1, { 'ab cd' }) feed('0yw') eq({ 'ab c' }, fn.getreg('"', 1, 1)) eq({ 0, 1, 4, 0 }, fn.getpos("']")) -- With 'selection' exclusive the block is only "b". command('set selection=exclusive') fn.setline(1, { 'abcd' }) feed('02|yl') eq({ 'b' }, fn.getreg('"', 1, 1)) eq({ 0, 1, 2, 0 }, fn.getpos("']")) end) end)