aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-11-19 22:57:13 +0000
committerJosh Rahm <joshuarahm@gmail.com>2024-11-19 22:57:13 +0000
commit9be89f131f87608f224f0ee06d199fcd09d32176 (patch)
tree11022dcfa9e08cb4ac5581b16734196128688d48 /test/functional/legacy
parentff7ed8f586589d620a806c3758fac4a47a8e7e15 (diff)
parent88085c2e80a7e3ac29aabb6b5420377eed99b8b6 (diff)
downloadrneovim-9be89f131f87608f224f0ee06d199fcd09d32176.tar.gz
rneovim-9be89f131f87608f224f0ee06d199fcd09d32176.tar.bz2
rneovim-9be89f131f87608f224f0ee06d199fcd09d32176.zip
Merge remote-tracking branch 'upstream/master' into mix_20240309
Diffstat (limited to 'test/functional/legacy')
-rw-r--r--test/functional/legacy/crash_spec.lua31
-rw-r--r--test/functional/legacy/edit_spec.lua6
-rw-r--r--test/functional/legacy/ex_mode_spec.lua18
-rw-r--r--test/functional/legacy/excmd_spec.lua31
-rw-r--r--test/functional/legacy/matchparen_spec.lua79
-rw-r--r--test/functional/legacy/put_spec.lua41
-rw-r--r--test/functional/legacy/scroll_opt_spec.lua120
-rw-r--r--test/functional/legacy/signs_spec.lua63
8 files changed, 297 insertions, 92 deletions
diff --git a/test/functional/legacy/crash_spec.lua b/test/functional/legacy/crash_spec.lua
index 04f77c7d4f..b63b3146f4 100644
--- a/test/functional/legacy/crash_spec.lua
+++ b/test/functional/legacy/crash_spec.lua
@@ -1,9 +1,14 @@
+local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local assert_alive = n.assert_alive
local clear = n.clear
local command = n.command
+local eq = t.eq
+local eval = n.eval
+local exec = n.exec
local feed = n.feed
+local pcall_err = t.pcall_err
before_each(clear)
@@ -32,3 +37,29 @@ it('no crash with very long option error message', function()
pcall(command, 'source test/old/testdir/crash/poc_did_set_langmap')
assert_alive()
end)
+
+it('no crash when closing window with tag in loclist', function()
+ exec([[
+ new
+ lexpr ['foo']
+ lopen
+ let g:qf_bufnr = bufnr()
+ lclose
+ call settagstack(1, #{items: [#{tagname: 'foo', from: [g:qf_bufnr, 1, 1, 0]}]})
+ ]])
+ eq(1, eval('bufexists(g:qf_bufnr)'))
+ command('1close')
+ eq(0, eval('bufexists(g:qf_bufnr)'))
+ assert_alive()
+end)
+
+it('no crash when writing "Untitled" file fails', function()
+ t.mkdir('Untitled')
+ finally(function()
+ vim.uv.fs_rmdir('Untitled')
+ end)
+ feed('ifoobar')
+ command('set bufhidden=unload')
+ eq('Vim(enew):E502: "Untitled" is a directory', pcall_err(command, 'confirm enew'))
+ assert_alive()
+end)
diff --git a/test/functional/legacy/edit_spec.lua b/test/functional/legacy/edit_spec.lua
index f3d18a2541..2d98188f9b 100644
--- a/test/functional/legacy/edit_spec.lua
+++ b/test/functional/legacy/edit_spec.lua
@@ -44,6 +44,12 @@ describe('edit', function()
{1:~ }|*4
=^ |
]])
+ feed([['r'<CR><Esc>]])
+ expect('r')
+ -- Test for inserting null and empty list
+ feed('a<C-R>=v:_null_list<CR><Esc>')
+ feed('a<C-R>=[]<CR><Esc>')
+ expect('r')
end)
-- oldtest: Test_edit_ctrl_r_failed()
diff --git a/test/functional/legacy/ex_mode_spec.lua b/test/functional/legacy/ex_mode_spec.lua
index 574c3e4069..e033898d7a 100644
--- a/test/functional/legacy/ex_mode_spec.lua
+++ b/test/functional/legacy/ex_mode_spec.lua
@@ -48,7 +48,7 @@ describe('Ex mode', function()
command('set noincsearch nohlsearch inccommand=')
local screen = Screen.new(60, 6)
screen:attach()
- command([[call setline(1, ['foo foo', 'foo foo', 'foo foo'])]])
+ command([[call setline(1, repeat(['foo foo'], 4))]])
command([[set number]])
feed('gQ')
screen:expect([[
@@ -110,12 +110,24 @@ describe('Ex mode', function()
:^ |
]])
+ -- The printed line should overwrite the colon
+ feed('<CR>')
+ screen:expect([[
+ {8: 2 }foo foo |
+ ^^^q |
+ {8: 2 }foo foo |
+ {8: 3 }foo foo |
+ {8: 4 }foo foo |
+ :^ |
+ ]])
+
feed(':vi<CR>')
screen:expect([[
{8: 1 }foo bar |
{8: 2 }foo foo |
- {8: 3 }^foo foo |
- {1:~ }|*2
+ {8: 3 }foo foo |
+ {8: 4 }^foo foo |
+ {1:~ }|
|
]])
end)
diff --git a/test/functional/legacy/excmd_spec.lua b/test/functional/legacy/excmd_spec.lua
index de3d498f27..753a45ee05 100644
--- a/test/functional/legacy/excmd_spec.lua
+++ b/test/functional/legacy/excmd_spec.lua
@@ -5,45 +5,14 @@ local Screen = require('test.functional.ui.screen')
local clear = n.clear
local command = n.command
local exec = n.exec
-local exec_lua = n.exec_lua
local expect_exit = n.expect_exit
local feed = n.feed
local fn = n.fn
-local api = n.api
local read_file = t.read_file
-local source = n.source
local eq = t.eq
local write_file = t.write_file
local is_os = t.is_os
-local function sizeoflong()
- if not exec_lua('return pcall(require, "ffi")') then
- pending('missing LuaJIT FFI')
- end
- return exec_lua('return require("ffi").sizeof(require("ffi").typeof("long"))')
-end
-
-describe('Ex command', function()
- before_each(clear)
- after_each(function()
- eq({}, api.nvim_get_vvar('errors'))
- end)
-
- it('checks for address line overflow', function()
- if sizeoflong() < 8 then
- pending('Skipped: only works with 64 bit long ints')
- end
-
- source [[
- new
- call setline(1, 'text')
- call assert_fails('|.44444444444444444444444', 'E1247:')
- call assert_fails('|.9223372036854775806', 'E1247:')
- bwipe!
- ]]
- end)
-end)
-
describe(':confirm command dialog', function()
local screen
diff --git a/test/functional/legacy/matchparen_spec.lua b/test/functional/legacy/matchparen_spec.lua
index 3841761515..df0d80f0ab 100644
--- a/test/functional/legacy/matchparen_spec.lua
+++ b/test/functional/legacy/matchparen_spec.lua
@@ -120,8 +120,7 @@ describe('matchparen', function()
]])
feed('i<C-X><C-N><C-N>')
- screen:expect {
- grid = [[
+ screen:expect([[
aa |
aaa |
aaaa |
@@ -131,7 +130,79 @@ describe('matchparen', function()
{4: aaaa }{1: }|
{1:~ }|
{5:-- }{6:match 2 of 3} |
- ]],
- }
+ ]])
+ end)
+
+ -- oldtest: Test_matchparen_mbyte()
+ it("works with multibyte chars in 'matchpairs'", function()
+ local screen = Screen.new(30, 10)
+ screen:set_default_attr_ids({
+ [0] = { bold = true, foreground = Screen.colors.Blue },
+ [1] = { background = Screen.colors.Cyan },
+ [2] = { bold = true },
+ })
+ screen:attach()
+
+ exec([[
+ source $VIMRUNTIME/plugin/matchparen.vim
+ call setline(1, ['aaaaaaaa(', 'bbbb)cc'])
+ set matchpairs+=(:)
+ ]])
+
+ screen:expect([[
+ ^aaaaaaaa( |
+ bbbb)cc |
+ {0:~ }|*7
+ |
+ ]])
+ feed('$')
+ screen:expect([[
+ aaaaaaaa{1:^(} |
+ bbbb{1:)}cc |
+ {0:~ }|*7
+ |
+ ]])
+ feed('j')
+ screen:expect([[
+ aaaaaaaa( |
+ bbbb)c^c |
+ {0:~ }|*7
+ |
+ ]])
+ feed('2h')
+ screen:expect([[
+ aaaaaaaa{1:(} |
+ bbbb{1:^)}cc |
+ {0:~ }|*7
+ |
+ ]])
+ feed('0')
+ screen:expect([[
+ aaaaaaaa( |
+ ^bbbb)cc |
+ {0:~ }|*7
+ |
+ ]])
+ feed('kA')
+ screen:expect([[
+ aaaaaaaa{1:(}^ |
+ bbbb{1:)}cc |
+ {0:~ }|*7
+ {2:-- INSERT --} |
+ ]])
+ feed('<Down>')
+ screen:expect([[
+ aaaaaaaa( |
+ bbbb)cc^ |
+ {0:~ }|*7
+ {2:-- INSERT --} |
+ ]])
+ feed('<C-W>')
+ screen:expect([[
+ aaaaaaaa{1:(} |
+ bbbb{1:)}^ |
+ {0:~ }|*7
+ {2:-- INSERT --} |
+ ]])
end)
end)
diff --git a/test/functional/legacy/put_spec.lua b/test/functional/legacy/put_spec.lua
index 587424da10..8b9b495679 100644
--- a/test/functional/legacy/put_spec.lua
+++ b/test/functional/legacy/put_spec.lua
@@ -1,52 +1,11 @@
-local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local Screen = require('test.functional.ui.screen')
local clear = n.clear
-local exec_lua = n.exec_lua
-local api = n.api
local source = n.source
-local eq = t.eq
-
-local function sizeoflong()
- if not exec_lua('return pcall(require, "ffi")') then
- pending('missing LuaJIT FFI')
- end
- return exec_lua('return require("ffi").sizeof(require("ffi").typeof("long"))')
-end
describe('put', function()
before_each(clear)
- after_each(function()
- eq({}, api.nvim_get_vvar('errors'))
- end)
-
- it('very large count 64-bit', function()
- if sizeoflong() < 8 then
- pending('Skipped: only works with 64 bit long ints')
- end
-
- source [[
- new
- let @" = repeat('x', 100)
- call assert_fails('norm 999999999p', 'E1240:')
- bwipe!
- ]]
- end)
-
- it('very large count (visual block) 64-bit', function()
- if sizeoflong() < 8 then
- pending('Skipped: only works with 64 bit long ints')
- end
-
- source [[
- new
- call setline(1, repeat('x', 100))
- exe "norm \<C-V>$y"
- call assert_fails('norm 999999999p', 'E1240:')
- bwipe!
- ]]
- end)
-- oldtest: Test_put_other_window()
it('above topline in buffer in two splits', function()
diff --git a/test/functional/legacy/scroll_opt_spec.lua b/test/functional/legacy/scroll_opt_spec.lua
index 97578067d5..ec1dc59d53 100644
--- a/test/functional/legacy/scroll_opt_spec.lua
+++ b/test/functional/legacy/scroll_opt_spec.lua
@@ -375,6 +375,108 @@ describe('smoothscroll', function()
screen:expect_unchanged()
end)
+ -- oldtest: Test_smoothscroll_diff_change_line()
+ it('works in diff mode when changing line', function()
+ screen:try_resize(55, 20)
+ exec([[
+ set diffopt+=followwrap smoothscroll
+ call setline(1, repeat(' abc', &columns))
+ call setline(2, 'bar')
+ call setline(3, repeat(' abc', &columns))
+ vnew
+ call setline(1, repeat(' abc', &columns))
+ call setline(2, 'foo')
+ call setline(3, 'bar')
+ call setline(4, repeat(' abc', &columns))
+ windo exe "normal! 2gg5\<C-E>"
+ windo diffthis
+ ]])
+
+ screen:expect([[
+ {1:<<<}bc abc abc abc abc abc a│{1:<<<}bc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {7: }{22:foo }│{7: }{23:-------------------------}|
+ {7: }bar │{7: }^bar |
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {1:~ }│{1:~ }|*3
+ {2:[No Name] [+] }{3:[No Name] [+] }|
+ |
+ ]])
+ feed('Abar')
+ screen:expect([[
+ {1:<<<}bc abc abc abc abc abc a│{1:<<<}bc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {7: }{22:foo }│{7: }{23:-------------------------}|
+ {7: }bar │{7: }barbar^ |
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {1:~ }│{1:~ }|*3
+ {2:[No Name] [+] }{3:[No Name] [+] }|
+ {5:-- INSERT --} |
+ ]])
+ feed('<Esc>')
+ screen:expect([[
+ {1:<<<}bc abc abc abc abc abc a│{1:<<<}bc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {7: }{27:foo}{4: }│{7: }{27:barba^r}{4: }|
+ {7: }{22:bar }│{7: }{23:-------------------------}|
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {1:~ }│{1:~ }|*3
+ {2:[No Name] [+] }{3:[No Name] [+] }|
+ |
+ ]])
+ feed('yyp')
+ screen:expect([[
+ {1:<<<}bc abc abc abc abc abc a│{1:<<<}bc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {7: }{27:foo}{4: }│{7: }{27:barbar}{4: }|
+ {7: }{4:bar }│{7: }{4:^bar}{27:bar}{4: }|
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc abc │{7: } abc abc abc abc abc abc |
+ {7: }abc abc abc abc abc abc a│{7: }abc abc abc abc abc abc a|
+ {7: }bc abc abc abc abc abc ab│{7: }bc abc abc abc abc abc ab|
+ {7: }c abc abc abc abc abc abc│{7: }c abc abc abc abc abc abc|
+ {7: } abc abc abc abc abc │{7: } abc abc abc abc abc |
+ {1:~ }│{1:~ }|*3
+ {2:[No Name] [+] }{3:[No Name] [+] }|
+ |
+ ]])
+ end)
+
-- oldtest: Test_smoothscroll_wrap_scrolloff_zero()
it("works with zero 'scrolloff'", function()
screen:try_resize(40, 8)
@@ -1204,16 +1306,15 @@ describe('smoothscroll', function()
set smoothscroll scrolloff=3
call setline(1, ['one', 'two long '->repeat(100), 'three', 'four', 'five', 'six'])
]])
- --FIXME: incorrect screen due to reset_skipcol()/curs_columns() shenanigans
feed(':norm j721|<CR>')
screen:expect([[
- two long two long two long two long two |
+ {1:<<<}two long two long two long two long t|
+ wo long two long two long two long two l|
+ ong two long two long two long two long |
+ ^two long two long two long two long two |
long two long two long two long two long|
two long two long two long two long two|
- ^ long two long two long two long two lon|
- g two long two long two long two long tw|
- o long two long two long two long two lo|
- ng two long two long two long two long t|
+ long two long two long two long two lon|
:norm j721| |
]])
feed('gj')
@@ -1272,15 +1373,14 @@ describe('smoothscroll', function()
:norm j721| |
]])
feed('gk')
- --FIXME: incorrect screen due to reset_skipcol()/curs_columns() shenanigans
screen:expect([[
+ {1:<<<}long two long two long two long two l|
+ ong two long two long two long two long |
two long two long two long two long two |
long two long two long two long two long|
two long two long two long two long two|
long two long two long two long two lon|
- g two long two long two long two long tw|
- o long two long two long two long two lo|
- ^ng two long two long two long two long t|
+ ^g two long two long |
:norm j721| |
]])
end)
diff --git a/test/functional/legacy/signs_spec.lua b/test/functional/legacy/signs_spec.lua
index 614673ee3c..27145f4c91 100644
--- a/test/functional/legacy/signs_spec.lua
+++ b/test/functional/legacy/signs_spec.lua
@@ -1,13 +1,14 @@
-- Tests for signs
local n = require('test.functional.testnvim')()
+local Screen = require('test.functional.ui.screen')
-local clear, command, expect = n.clear, n.command, n.expect
+local clear, command, exec, expect, feed = n.clear, n.command, n.exec, n.expect, n.feed
describe('signs', function()
- setup(clear)
+ before_each(clear)
- it('is working', function()
+ it('are working', function()
command('sign define JumpSign text=x')
command([[exe 'sign place 42 line=2 name=JumpSign buffer=' . bufnr('')]])
-- Split the window to the bottom to verify :sign-jump will stay in the current
@@ -21,4 +22,60 @@ describe('signs', function()
2]])
end)
+
+ -- oldtest: Test_sign_cursor_position()
+ it('are drawn correctly', function()
+ local screen = Screen.new(75, 6)
+ screen:attach()
+ exec([[
+ call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
+ call cursor(2,1)
+ sign define s1 texthl=Search text==>
+ sign define s2 linehl=Pmenu
+ redraw
+ sign place 10 line=2 name=s1
+ ]])
+ screen:expect([[
+ {7: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
+ {7: }xx |
+ {10:=>}^mmmm |
+ {7: }yyyy |
+ {1:~ }|
+ |
+ ]])
+
+ -- Change the sign text
+ command('sign define s1 text=-)')
+ screen:expect([[
+ {7: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
+ {7: }xx |
+ {10:-)}^mmmm |
+ {7: }yyyy |
+ {1:~ }|
+ |
+ ]])
+
+ -- Also place a line HL sign
+ command('sign place 11 line=2 name=s2')
+ screen:expect([[
+ {7: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
+ {7: }xx |
+ {10:-)}{4:^mmmm }|
+ {7: }yyyy |
+ {1:~ }|
+ |
+ ]])
+
+ -- update cursor position calculation
+ feed('lh')
+ command('sign unplace 11')
+ command('sign unplace 10')
+ screen:expect([[
+ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
+ ^mmmm |
+ yyyy |
+ {1:~ }|*2
+ |
+ ]])
+ end)
end)