aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/buffer_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/api/buffer_spec.lua')
-rw-r--r--test/functional/api/buffer_spec.lua193
1 files changed, 125 insertions, 68 deletions
diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua
index 78d220ff57..cf69958fd8 100644
--- a/test/functional/api/buffer_spec.lua
+++ b/test/functional/api/buffer_spec.lua
@@ -1,21 +1,23 @@
-local helpers = require('test.functional.helpers')(after_each)
+local t = require('test.testutil')
+local n = require('test.functional.testnvim')()
local Screen = require('test.functional.ui.screen')
-local clear = helpers.clear
-local eq = helpers.eq
-local ok = helpers.ok
-local describe_lua_and_rpc = helpers.describe_lua_and_rpc(describe)
-local api = helpers.api
-local fn = helpers.fn
-local request = helpers.request
-local exc_exec = helpers.exc_exec
-local exec_lua = helpers.exec_lua
-local feed_command = helpers.feed_command
-local insert = helpers.insert
+
+local clear = n.clear
+local eq = t.eq
+local ok = t.ok
+local describe_lua_and_rpc = n.describe_lua_and_rpc(describe)
+local api = n.api
+local fn = n.fn
+local request = n.request
+local exc_exec = n.exc_exec
+local exec_lua = n.exec_lua
+local feed_command = n.feed_command
+local insert = n.insert
local NIL = vim.NIL
-local command = helpers.command
-local feed = helpers.feed
-local pcall_err = helpers.pcall_err
-local assert_alive = helpers.assert_alive
+local command = n.command
+local feed = n.feed
+local pcall_err = t.pcall_err
+local assert_alive = n.assert_alive
describe('api/buf', function()
before_each(clear)
@@ -121,6 +123,65 @@ describe('api/buf', function()
eq({ 5, 2 }, api.nvim_win_get_cursor(win2))
end)
+ it('cursor position is maintained consistently with viewport', function()
+ local screen = Screen.new(20, 12)
+ screen:set_default_attr_ids {
+ [1] = { bold = true, foreground = Screen.colors.Blue1 },
+ [2] = { reverse = true, bold = true },
+ [3] = { reverse = true },
+ }
+ screen:attach()
+
+ local lines = { 'line1', 'line2', 'line3', 'line4', 'line5', 'line6' }
+ local buf = api.nvim_get_current_buf()
+
+ api.nvim_buf_set_lines(buf, 0, -1, true, lines)
+
+ command('6')
+ command('new')
+ screen:expect {
+ grid = [[
+ ^ |
+ {1:~ }|*4
+ {2:[No Name] }|
+ line5 |
+ line6 |
+ {1:~ }|*2
+ {3:[No Name] [+] }|
+ |
+ ]],
+ }
+
+ lines[5] = 'boogalo 5'
+ api.nvim_buf_set_lines(buf, 0, -1, true, lines)
+ screen:expect {
+ grid = [[
+ ^ |
+ {1:~ }|*4
+ {2:[No Name] }|
+ boogalo 5 |
+ line6 |
+ {1:~ }|*2
+ {3:[No Name] [+] }|
+ |
+ ]],
+ }
+
+ command('wincmd w')
+ screen:expect {
+ grid = [[
+ |
+ {1:~ }|*4
+ {3:[No Name] }|
+ boogalo 5 |
+ ^line6 |
+ {1:~ }|*2
+ {2:[No Name] [+] }|
+ |
+ ]],
+ }
+ end)
+
it('line_count has defined behaviour for unloaded buffers', function()
-- we'll need to know our bufnr for when it gets unloaded
local bufnr = api.nvim_buf_get_number(0)
@@ -323,20 +384,20 @@ describe('api/buf', function()
]],
}
- -- inserting just before topline scrolls up
api.nvim_buf_set_lines(buf, 3, 3, true, { 'mmm' })
screen:expect {
grid = [[
^ |
{1:~ }|*4
{2:[No Name] }|
- mmm |
wwweeee |
xxx |
yyy |
+ zzz |
{3:[No Name] [+] }|
|
]],
+ unchanged = true,
}
end)
@@ -402,7 +463,6 @@ describe('api/buf', function()
]],
}
- -- inserting just before topline scrolls up
api.nvim_buf_set_lines(buf, 3, 3, true, { 'mmm' })
screen:expect {
grid = [[
@@ -412,10 +472,10 @@ describe('api/buf', function()
mmm |
wwweeee |
{2:[No Name] [+] }|
- mmm |
wwweeee |
xxx |
yyy |
+ zzz |
{3:[No Name] [+] }|
|
]],
@@ -1316,12 +1376,7 @@ describe('api/buf', function()
-- immediate call to nvim_win_get_cursor should have returned the same position
eq({ 2, 12 }, cursor)
-- coladd should be 0
- eq(
- 0,
- exec_lua([[
- return vim.fn.winsaveview().coladd
- ]])
- )
+ eq(0, fn.winsaveview().coladd)
end)
it('does not change cursor screen column when cursor >EOL and row got shorter', function()
@@ -1335,9 +1390,7 @@ describe('api/buf', function()
-- turn on virtualedit
command('set virtualedit=all')
-- move cursor after eol
- exec_lua([[
- vim.fn.winrestview({ coladd = 5 })
- ]])
+ fn.winrestview({ coladd = 5 })
local cursor = exec_lua([[
vim.api.nvim_buf_set_text(0, 0, 15, 2, 11, {
@@ -1356,12 +1409,7 @@ describe('api/buf', function()
-- immediate call to nvim_win_get_cursor should have returned the same position
eq({ 2, 26 }, cursor)
-- coladd should be increased so that cursor stays in the same screen column
- eq(
- 13,
- exec_lua([[
- return vim.fn.winsaveview().coladd
- ]])
- )
+ eq(13, fn.winsaveview().coladd)
end)
it(
@@ -1377,9 +1425,7 @@ describe('api/buf', function()
-- turn on virtualedit
command('set virtualedit=all')
-- move cursor after eol
- exec_lua([[
- vim.fn.winrestview({ coladd = 21 })
- ]])
+ fn.winrestview({ coladd = 21 })
local cursor = exec_lua([[
vim.api.nvim_buf_set_text(0, 0, 15, 2, 11, {
@@ -1398,12 +1444,7 @@ describe('api/buf', function()
-- immediate call to nvim_win_get_cursor should have returned the same position
eq({ 1, 38 }, cursor)
-- coladd should be increased so that cursor stays in the same screen column
- eq(
- 2,
- exec_lua([[
- return vim.fn.winsaveview().coladd
- ]])
- )
+ eq(2, fn.winsaveview().coladd)
end
)
@@ -1420,9 +1461,7 @@ describe('api/buf', function()
-- turn on virtualedit
command('set virtualedit=all')
-- move cursor after eol just a bit
- exec_lua([[
- vim.fn.winrestview({ coladd = 3 })
- ]])
+ fn.winrestview({ coladd = 3 })
local cursor = exec_lua([[
vim.api.nvim_buf_set_text(0, 0, 15, 2, 11, {
@@ -1441,12 +1480,7 @@ describe('api/buf', function()
-- immediate call to nvim_win_get_cursor should have returned the same position
eq({ 1, 22 }, cursor)
-- coladd should become 0
- eq(
- 0,
- exec_lua([[
- return vim.fn.winsaveview().coladd
- ]])
- )
+ eq(0, fn.winsaveview().coladd)
end
)
@@ -1464,9 +1498,7 @@ describe('api/buf', function()
-- turn on virtualedit
command('set virtualedit=all')
-- move cursor after eol
- exec_lua([[
- vim.fn.winrestview({ coladd = 28 })
- ]])
+ fn.winrestview({ coladd = 28 })
local cursor = exec_lua([[
vim.api.nvim_buf_set_text(0, 0, 15, 3, 11, {
@@ -1485,12 +1517,7 @@ describe('api/buf', function()
-- immediate call to nvim_win_get_cursor should have returned the same position
eq({ 2, 26 }, cursor)
-- coladd should be increased so that cursor stays in the same screen column
- eq(
- 13,
- exec_lua([[
- return vim.fn.winsaveview().coladd
- ]])
- )
+ eq(13, fn.winsaveview().coladd)
end
)
end)
@@ -1686,12 +1713,11 @@ describe('api/buf', function()
api.nvim_buf_set_text(0, 0, 0, 1, 3, { 'XXX', 'YYY' })
screen:expect([[
- XXX |
- YYY |
- ^ |
- ~ |
- |
-
+ XXX |
+ YYY |
+ ^ |
+ {1:~ }|
+ |
]])
end)
@@ -2024,6 +2050,37 @@ describe('api/buf', function()
eq(1, fn.filereadable(new_name))
os.remove(new_name)
end)
+
+ describe("with 'autochdir'", function()
+ local topdir
+ local oldbuf
+ local newbuf
+
+ before_each(function()
+ command('set shellslash')
+ topdir = fn.getcwd()
+ t.mkdir(topdir .. '/Xacd')
+
+ oldbuf = api.nvim_get_current_buf()
+ command('vnew')
+ newbuf = api.nvim_get_current_buf()
+ command('set autochdir')
+ end)
+
+ after_each(function()
+ n.rmdir(topdir .. '/Xacd')
+ end)
+
+ it('does not change cwd with non-current buffer', function()
+ api.nvim_buf_set_name(oldbuf, topdir .. '/Xacd/foo.txt')
+ eq(topdir, fn.getcwd())
+ end)
+
+ it('changes cwd with current buffer', function()
+ api.nvim_buf_set_name(newbuf, topdir .. '/Xacd/foo.txt')
+ eq(topdir .. '/Xacd', fn.getcwd())
+ end)
+ end)
end)
describe('nvim_buf_is_loaded', function()