aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/api')
-rw-r--r--test/functional/api/buffer_spec.lua117
-rw-r--r--test/functional/api/buffer_updates_spec.lua6
-rw-r--r--test/functional/api/extmark_spec.lua44
-rw-r--r--test/functional/api/version_spec.lua14
-rw-r--r--test/functional/api/vim_spec.lua515
-rw-r--r--test/functional/api/window_spec.lua281
6 files changed, 556 insertions, 421 deletions
diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua
index cf69958fd8..3775c8c7b7 100644
--- a/test/functional/api/buffer_spec.lua
+++ b/test/functional/api/buffer_spec.lua
@@ -125,11 +125,6 @@ describe('api/buf', function()
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' }
@@ -143,11 +138,11 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
line5 |
line6 |
{1:~ }|*2
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -158,11 +153,11 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
boogalo 5 |
line6 |
{1:~ }|*2
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -172,11 +167,11 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
boogalo 5 |
^line6 |
{1:~ }|*2
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
}
@@ -216,11 +211,6 @@ describe('api/buf', function()
local screen
before_each(function()
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()
api.nvim_buf_set_lines(
0,
@@ -243,12 +233,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
www |
xxx |
yyy |
^zzz |
- {2:[No Name] }|
+ {3:[No Name] }|
|
]],
}
@@ -258,12 +248,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
www |
xxx |
yyy |
^zzz |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
}
@@ -274,12 +264,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
wwweeee |
xxx |
yyy |
^zzz |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
}
@@ -290,12 +280,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
wwweeee |
xxx |
yyy |
^zzz |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
unchanged = true,
@@ -306,12 +296,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
wwweeee |
xxx |
^yyy |
zzz |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
}
@@ -321,12 +311,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
mmmeeeee |
wwweeee |
xxx |
^yyy |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
}
@@ -343,12 +333,12 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] }|
+ {2:[No Name] }|
|
]],
}
@@ -358,12 +348,12 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -374,12 +364,12 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
wwweeee |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -389,12 +379,12 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
wwweeee |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
unchanged = true,
@@ -416,12 +406,12 @@ describe('api/buf', function()
ccc |
ddd |
www |
- {2:[No Name] }|
+ {3:[No Name] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] }|
+ {2:[No Name] }|
|
]],
}
@@ -434,12 +424,12 @@ describe('api/buf', function()
ddd |
www |
xxx |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -453,12 +443,12 @@ describe('api/buf', function()
ddd |
wwweeee |
xxx |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
wwweeee |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -471,12 +461,12 @@ describe('api/buf', function()
ddd |
mmm |
wwweeee |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
wwweeee |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -745,10 +735,6 @@ describe('api/buf', function()
it("set_lines of invisible buffer doesn't move cursor in current window", function()
local screen = Screen.new(20, 5)
- screen:set_default_attr_ids({
- [1] = { bold = true, foreground = Screen.colors.Blue1 },
- [2] = { bold = true },
- })
screen:attach()
insert([[
@@ -771,7 +757,7 @@ describe('api/buf', function()
A real window |
with proper tex^t |
{1:~ }|
- {2:-- INSERT --} |
+ {5:-- INSERT --} |
]])
end)
@@ -1756,11 +1742,6 @@ describe('api/buf', function()
local screen
before_each(function()
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()
api.nvim_buf_set_lines(
0,
@@ -1783,12 +1764,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
www |
xxx |
yyy |
^zzz |
- {2:[No Name] }|
+ {3:[No Name] }|
|
]],
}
@@ -1798,12 +1779,12 @@ describe('api/buf', function()
grid = [[
|
{1:~ }|*4
- {3:[No Name] }|
+ {2:[No Name] }|
www |
xxx |
yyy |
^zzz |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
|
]],
}
@@ -1820,12 +1801,12 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] }|
+ {2:[No Name] }|
|
]],
}
@@ -1835,12 +1816,12 @@ describe('api/buf', function()
grid = [[
^ |
{1:~ }|*4
- {2:[No Name] }|
+ {3:[No Name] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -1861,12 +1842,12 @@ describe('api/buf', function()
ccc |
ddd |
www |
- {2:[No Name] }|
+ {3:[No Name] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] }|
+ {2:[No Name] }|
|
]],
}
@@ -1879,12 +1860,12 @@ describe('api/buf', function()
ddd |
www |
xxx |
- {2:[No Name] [+] }|
+ {3:[No Name] [+] }|
www |
xxx |
yyy |
zzz |
- {3:[No Name] [+] }|
+ {2:[No Name] [+] }|
|
]],
}
@@ -1910,6 +1891,8 @@ describe('api/buf', function()
eq({ '' }, get_text(0, 0, 18, 0, 20, {}))
eq({ 'ext' }, get_text(0, -2, 1, -2, 4, {}))
eq({ 'hello foo!', 'text', 'm' }, get_text(0, 0, 0, 2, 1, {}))
+ eq({ 'hello foo!' }, get_text(0, 0, -987654321, 0, 987654321, {}))
+ eq({ '' }, get_text(0, 0, -15, 0, -20, {}))
end)
it('errors on out-of-range', function()
@@ -1923,7 +1906,7 @@ describe('api/buf', function()
it('errors when start is greater than end', function()
eq("'start' is higher than 'end'", pcall_err(get_text, 0, 1, 0, 0, 0, {}))
- eq('start_col must be less than end_col', pcall_err(get_text, 0, 0, 1, 0, 0, {}))
+ eq('start_col must be less than or equal to end_col', pcall_err(get_text, 0, 0, 1, 0, 0, {}))
end)
end)
diff --git a/test/functional/api/buffer_updates_spec.lua b/test/functional/api/buffer_updates_spec.lua
index e030b45396..527394bfd1 100644
--- a/test/functional/api/buffer_updates_spec.lua
+++ b/test/functional/api/buffer_updates_spec.lua
@@ -27,12 +27,10 @@ end
local function sendkeys(keys)
api.nvim_input(keys)
- -- give nvim some time to process msgpack requests before possibly sending
+ -- Wait for Nvim to fully process pending input before possibly sending
-- more key presses - otherwise they all pile up in the queue and get
-- processed at once
- local ntime = os.clock() + 0.1
- repeat
- until os.clock() > ntime
+ n.poke_eventloop()
end
local function open(activate, lines)
diff --git a/test/functional/api/extmark_spec.lua b/test/functional/api/extmark_spec.lua
index 7b2fe209ba..52d8fd5097 100644
--- a/test/functional/api/extmark_spec.lua
+++ b/test/functional/api/extmark_spec.lua
@@ -1758,13 +1758,13 @@ describe('API/extmarks', function()
command('1d 2')
eq(0, #get_extmarks(-1, 0, -1, {}))
-- mark is not removed when deleting bytes before the range
- set_extmark(
- ns,
- 3,
- 0,
- 4,
- { invalidate = true, undo_restore = false, hl_group = 'Error', end_col = 7 }
- )
+ set_extmark(ns, 3, 0, 4, {
+ invalidate = true,
+ undo_restore = true,
+ hl_group = 'Error',
+ end_col = 7,
+ right_gravity = false,
+ })
feed('dw')
eq(3, get_extmark_by_id(ns, 3, { details = true })[3].end_col)
-- mark is not removed when deleting bytes at the start of the range
@@ -1778,15 +1778,18 @@ describe('API/extmarks', function()
eq(1, get_extmark_by_id(ns, 3, { details = true })[3].end_col)
-- mark is removed when all bytes in the range are deleted
feed('hx')
- eq({}, get_extmark_by_id(ns, 3, {}))
+ eq(true, get_extmark_by_id(ns, 3, { details = true })[3].invalid)
+ -- mark is restored with undo_restore == true if pos did not change
+ command('undo')
+ eq(nil, get_extmark_by_id(ns, 3, { details = true })[3].invalid)
-- multiline mark is not removed when start of its range is deleted
- set_extmark(
- ns,
- 4,
- 1,
- 4,
- { undo_restore = false, invalidate = true, hl_group = 'Error', end_col = 7, end_row = 3 }
- )
+ set_extmark(ns, 4, 1, 4, {
+ undo_restore = false,
+ invalidate = true,
+ hl_group = 'Error',
+ end_col = 7,
+ end_row = 3,
+ })
feed('ddDdd')
eq({ 0, 0 }, get_extmark_by_id(ns, 4, {}))
-- multiline mark is removed when entirety of its range is deleted
@@ -1795,10 +1798,15 @@ describe('API/extmarks', function()
end)
it('can set a URL', function()
- set_extmark(ns, 1, 0, 0, { url = 'https://example.com', end_col = 3 })
+ local url1 = 'https://example.com'
+ local url2 = 'http://127.0.0.1'
+ set_extmark(ns, 1, 0, 0, { url = url1, end_col = 3 })
+ set_extmark(ns, 2, 0, 3, { url = url2, hl_group = 'Search', end_col = 5 })
local extmarks = get_extmarks(ns, 0, -1, { details = true })
- eq(1, #extmarks)
- eq('https://example.com', extmarks[1][4].url)
+ eq(2, #extmarks)
+ eq(url1, extmarks[1][4].url)
+ eq(url2, extmarks[2][4].url)
+ eq('Search', extmarks[2][4].hl_group)
end)
it('respects priority', function()
diff --git a/test/functional/api/version_spec.lua b/test/functional/api/version_spec.lua
index 5dad9978b7..617786eb2d 100644
--- a/test/functional/api/version_spec.lua
+++ b/test/functional/api/version_spec.lua
@@ -58,10 +58,18 @@ describe('api metadata', function()
return by_name
end
- -- Remove metadata that is not essential to backwards-compatibility.
- local function filter_function_metadata(f)
+ -- Remove or patch metadata that is not essential to backwards-compatibility.
+ local function normalize_func_metadata(f)
+ -- Dictionary was renamed to Dict. That doesn't break back-compat because clients don't actually
+ -- use the `return_type` field (evidence: "ArrayOf(…)" didn't break clients).
+ f.return_type = f.return_type:gsub('Dictionary', 'Dict')
+
f.deprecated_since = nil
for idx, _ in ipairs(f.parameters) do
+ -- Dictionary was renamed to Dict. Doesn't break back-compat because clients don't actually
+ -- use the `parameters` field of API metadata (evidence: "ArrayOf(…)" didn't break clients).
+ f.parameters[idx][1] = f.parameters[idx][1]:gsub('Dictionary', 'Dict')
+
f.parameters[idx][2] = '' -- Remove parameter name.
end
@@ -141,7 +149,7 @@ describe('api metadata', function()
)
end
else
- eq(filter_function_metadata(f), filter_function_metadata(funcs_new[f.name]))
+ eq(normalize_func_metadata(f), normalize_func_metadata(funcs_new[f.name]))
end
end
funcs_compat[level] = name_table(old_api[level].functions)
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index fd0535aa51..af4d4854f5 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -367,14 +367,11 @@ describe('API', function()
it('displays messages when opts.output=false', function()
local screen = Screen.new(40, 8)
screen:attach()
- screen:set_default_attr_ids({
- [0] = { bold = true, foreground = Screen.colors.Blue },
- })
api.nvim_exec2("echo 'hello'", { output = false })
screen:expect {
grid = [[
^ |
- {0:~ }|*6
+ {1:~ }|*6
hello |
]],
}
@@ -383,14 +380,11 @@ describe('API', function()
it("doesn't display messages when output=true", function()
local screen = Screen.new(40, 6)
screen:attach()
- screen:set_default_attr_ids({
- [0] = { bold = true, foreground = Screen.colors.Blue },
- })
api.nvim_exec2("echo 'hello'", { output = true })
screen:expect {
grid = [[
^ |
- {0:~ }|*4
+ {1:~ }|*4
|
]],
}
@@ -403,7 +397,7 @@ describe('API', function()
screen:expect {
grid = [[
^ |
- {0:~ }|*4
+ {1:~ }|*4
15 |
]],
}
@@ -699,7 +693,7 @@ describe('API', function()
pcall_err(request, 'nvim_call_dict_function', "{ 'f': '' }", 'f', { 1, 2 })
)
eq(
- 'dict argument type must be String or Dictionary',
+ 'dict argument type must be String or Dict',
pcall_err(request, 'nvim_call_dict_function', 42, 'f', { 1, 2 })
)
eq(
@@ -1307,12 +1301,136 @@ describe('API', function()
end)
it('crlf=false does not break lines at CR, CRLF', function()
api.nvim_paste('line 1\r\n\r\rline 2\nline 3\rline 4\r', false, -1)
- expect('line 1\r\n\r\rline 2\nline 3\rline 4\r')
+ local expected = 'line 1\r\n\r\rline 2\nline 3\rline 4\r'
+ expect(expected)
eq({ 0, 3, 14, 0 }, fn.getpos('.'))
+ feed('u') -- Undo.
+ expect('')
+ feed('.') -- Dot-repeat.
+ expect(expected)
+ end)
+ describe('repeating a paste via redo/recording', function()
+ -- Test with indent and control chars and multibyte chars containing 0x80 bytes
+ local text = dedent(([[
+ foo
+ bar
+ baz
+ !!!%s!!!%s!!!%s!!!
+ 最…倒…倀…
+ ]]):format('\0', '\2\3\6\21\22\23\24\27', '\127'))
+ before_each(function()
+ api.nvim_set_option_value('autoindent', true, {})
+ end)
+ local function test_paste_repeat_normal_insert(is_insert)
+ feed('qr' .. (is_insert and 'i' or ''))
+ eq('r', fn.reg_recording())
+ api.nvim_paste(text, true, -1)
+ feed(is_insert and '<Esc>' or '')
+ expect(text)
+ feed('.')
+ expect(text:rep(2))
+ feed('q')
+ eq('', fn.reg_recording())
+ feed('3.')
+ expect(text:rep(5))
+ feed('2@r')
+ expect(text:rep(9))
+ end
+ it('works in Normal mode', function()
+ test_paste_repeat_normal_insert(false)
+ end)
+ it('works in Insert mode', function()
+ test_paste_repeat_normal_insert(true)
+ end)
+ local function test_paste_repeat_visual_select(is_select)
+ insert(('xxx\n'):rep(5))
+ feed('ggqr' .. (is_select and 'gH' or 'V'))
+ api.nvim_paste(text, true, -1)
+ feed('q')
+ expect(text .. ('xxx\n'):rep(4))
+ feed('2@r')
+ expect(text:rep(3) .. ('xxx\n'):rep(2))
+ end
+ it('works in Visual mode (recording only)', function()
+ test_paste_repeat_visual_select(false)
+ end)
+ it('works in Select mode (recording only)', function()
+ test_paste_repeat_visual_select(true)
+ end)
+ end)
+ it('in a mapping recorded in a macro', function()
+ command([[nnoremap <F2> <Cmd>call nvim_paste('foo', v:false, -1)<CR>]])
+ feed('qr<F2>$q')
+ expect('foo')
+ feed('@r') -- repeating a macro containing the mapping should only paste once
+ expect('foofoo')
+ end)
+ local function test_paste_cancel_error(is_error)
+ before_each(function()
+ exec_lua(([[
+ vim.paste = (function(overridden)
+ return function(lines, phase)
+ for i, line in ipairs(lines) do
+ if line == 'CANCEL' then
+ %s
+ end
+ end
+ return overridden(lines, phase)
+ end
+ end)(vim.paste)
+ ]]):format(is_error and 'error("fake fail")' or 'return false'))
+ end)
+ local function check_paste_cancel_error(data, crlf, phase)
+ if is_error then
+ eq('fake fail', pcall_err(api.nvim_paste, data, crlf, phase))
+ else
+ eq(false, api.nvim_paste(data, crlf, phase))
+ end
+ end
+ it('in phase -1', function()
+ feed('A')
+ check_paste_cancel_error('CANCEL', true, -1)
+ feed('<Esc>')
+ expect('')
+ feed('.')
+ expect('')
+ end)
+ it('in phase 1', function()
+ feed('A')
+ check_paste_cancel_error('CANCEL', true, 1)
+ feed('<Esc>')
+ expect('')
+ feed('.')
+ expect('')
+ end)
+ it('in phase 2', function()
+ feed('A')
+ eq(true, api.nvim_paste('aaa', true, 1))
+ expect('aaa')
+ check_paste_cancel_error('CANCEL', true, 2)
+ feed('<Esc>')
+ expect('aaa')
+ feed('.')
+ expect('aaaaaa')
+ end)
+ it('in phase 3', function()
+ feed('A')
+ eq(true, api.nvim_paste('aaa', true, 1))
+ expect('aaa')
+ eq(true, api.nvim_paste('bbb', true, 2))
+ expect('aaabbb')
+ check_paste_cancel_error('CANCEL', true, 3)
+ feed('<Esc>')
+ expect('aaabbb')
+ feed('.')
+ expect('aaabbbaaabbb')
+ end)
+ end
+ describe('vim.paste() cancel', function()
+ test_paste_cancel_error(false)
end)
- it('vim.paste() failure', function()
- api.nvim_exec_lua('vim.paste = (function(lines, phase) error("fake fail") end)', {})
- eq('fake fail', pcall_err(request, 'nvim_paste', 'line 1\nline 2\nline 3', false, 1))
+ describe('vim.paste() error', function()
+ test_paste_cancel_error(true)
end)
end)
@@ -1441,6 +1559,28 @@ describe('API', function()
it('cannot handle NULs', function()
eq(0, api.nvim_strwidth('\0abc'))
end)
+
+ it('can handle emoji with variant selectors and ZWJ', function()
+ local selector = '❤️'
+ eq(2, fn.strchars(selector))
+ eq(1, fn.strcharlen(selector))
+ eq(2, api.nvim_strwidth(selector))
+
+ local no_selector = '❤'
+ eq(1, fn.strchars(no_selector))
+ eq(1, fn.strcharlen(no_selector))
+ eq(1, api.nvim_strwidth(no_selector))
+
+ local selector_zwj_selector = '🏳️‍⚧️'
+ eq(5, fn.strchars(selector_zwj_selector))
+ eq(1, fn.strcharlen(selector_zwj_selector))
+ eq(2, api.nvim_strwidth(selector_zwj_selector))
+
+ local emoji_zwj_emoji = '🧑‍🌾'
+ eq(3, fn.strchars(emoji_zwj_emoji))
+ eq(1, fn.strcharlen(emoji_zwj_emoji))
+ eq(2, api.nvim_strwidth(emoji_zwj_emoji))
+ end)
end)
describe('nvim_get_current_line, nvim_set_current_line', function()
@@ -1503,9 +1643,11 @@ describe('API', function()
it('nvim_get_vvar, nvim_set_vvar', function()
eq('Key is read-only: count', pcall_err(request, 'nvim_set_vvar', 'count', 42))
- eq('Dictionary is locked', pcall_err(request, 'nvim_set_vvar', 'nosuchvar', 42))
+ eq('Dict is locked', pcall_err(request, 'nvim_set_vvar', 'nosuchvar', 42))
api.nvim_set_vvar('errmsg', 'set by API')
eq('set by API', api.nvim_get_vvar('errmsg'))
+ api.nvim_set_vvar('completed_item', { word = 'a', user_data = vim.empty_dict() })
+ eq({}, api.nvim_get_vvar('completed_item')['user_data'])
api.nvim_set_vvar('errmsg', 42)
eq('42', eval('v:errmsg'))
api.nvim_set_vvar('oldfiles', { 'one', 'two' })
@@ -1533,16 +1675,12 @@ describe('API', function()
eq({ 1, 5 }, api.nvim_win_get_cursor(0))
local screen = Screen.new(60, 3)
- screen:set_default_attr_ids({
- [0] = { bold = true, foreground = Screen.colors.Blue },
- [1] = { background = Screen.colors.Yellow },
- })
screen:attach()
eq(1, eval('v:hlsearch'))
screen:expect {
grid = [[
- {1:foo} {1:^foo} {1:foo} |
- {0:~ }|
+ {10:foo} {10:^foo} {10:foo} |
+ {1:~ }|
|
]],
}
@@ -1551,7 +1689,7 @@ describe('API', function()
screen:expect {
grid = [[
foo ^foo foo |
- {0:~ }|
+ {1:~ }|
|
]],
}
@@ -1559,8 +1697,8 @@ describe('API', function()
eq(1, eval('v:hlsearch'))
screen:expect {
grid = [[
- {1:foo} {1:^foo} {1:foo} |
- {0:~ }|
+ {10:foo} {10:^foo} {10:foo} |
+ {1:~ }|
|
]],
}
@@ -1581,9 +1719,9 @@ describe('API', function()
eq(val2, request('vim_del_var', 'lua'))
end)
- it('truncates values with NULs in them', function()
+ it('preserves values with NULs in them', function()
api.nvim_set_var('xxx', 'ab\0cd')
- eq('ab', api.nvim_get_var('xxx'))
+ eq('ab\000cd', api.nvim_get_var('xxx'))
end)
end)
@@ -2144,7 +2282,7 @@ describe('API', function()
end)
describe('nvim_load_context', function()
- it('sets current editor state to given context dictionary', function()
+ it('sets current editor state to given context dict', function()
local opts = { types = { 'regs', 'jumps', 'bufs', 'gvars' } }
eq({}, parse_context(api.nvim_get_context(opts)))
@@ -2160,7 +2298,7 @@ describe('API', function()
eq({ 1, 2, 3 }, eval('[g:one, g:Two, g:THREE]'))
end)
- it('errors when context dictionary is invalid', function()
+ it('errors when context dict is invalid', function()
eq(
'E474: Failed to convert list to msgpack string buffer',
pcall_err(api.nvim_load_context, { regs = { {} }, jumps = { {} } })
@@ -2254,12 +2392,6 @@ describe('API', function()
before_each(function()
screen = Screen.new(40, 8)
screen:attach()
- screen:set_default_attr_ids({
- [0] = { bold = true, foreground = Screen.colors.Blue },
- [1] = { bold = true, foreground = Screen.colors.SeaGreen },
- [2] = { bold = true, reverse = true },
- [3] = { foreground = Screen.colors.Blue },
- })
end)
it('prints long messages correctly #20534', function()
@@ -2287,11 +2419,11 @@ describe('API', function()
screen:expect {
grid = [[
|
- {0:~ }|*3
- {2: }|
+ {1:~ }|*3
+ {3: }|
|
a |
- {1:Press ENTER or type command to continue}^ |
+ {6:Press ENTER or type command to continue}^ |
]],
}
feed('<CR>')
@@ -2299,12 +2431,12 @@ describe('API', function()
screen:expect {
grid = [[
|
- {0:~ }|*2
- {2: }|
+ {1:~ }|*2
+ {3: }|
b |
|
c |
- {1:Press ENTER or type command to continue}^ |
+ {6:Press ENTER or type command to continue}^ |
]],
}
end)
@@ -2314,11 +2446,11 @@ describe('API', function()
screen:expect {
grid = [[
|
- {0:~ }|*3
- {2: }|
- aaa{3:^@}bbb{3:^@^@}ccc |
- ddd{3:^@^@^@}eee |
- {1:Press ENTER or type command to continue}^ |
+ {1:~ }|*3
+ {3: }|
+ aaa{18:^@}bbb{18:^@^@}ccc |
+ ddd{18:^@^@^@}eee |
+ {6:Press ENTER or type command to continue}^ |
]],
}
end)
@@ -2330,20 +2462,14 @@ describe('API', function()
before_each(function()
screen = Screen.new(40, 8)
screen:attach()
- screen:set_default_attr_ids({
- [0] = { bold = true, foreground = Screen.colors.Blue },
- [1] = { foreground = Screen.colors.White, background = Screen.colors.Red },
- [2] = { bold = true, foreground = Screen.colors.SeaGreen },
- [3] = { bold = true, reverse = true },
- })
end)
it('can show one line', function()
async_meths.nvim_err_write('has bork\n')
screen:expect([[
^ |
- {0:~ }|*6
- {1:has bork} |
+ {1:~ }|*6
+ {9:has bork} |
]])
end)
@@ -2351,11 +2477,11 @@ describe('API', function()
async_meths.nvim_err_write('something happened\nvery bad\n')
screen:expect([[
|
- {0:~ }|*3
+ {1:~ }|*3
{3: }|
- {1:something happened} |
- {1:very bad} |
- {2:Press ENTER or type command to continue}^ |
+ {9:something happened} |
+ {9:very bad} |
+ {6:Press ENTER or type command to continue}^ |
]])
end)
@@ -2363,13 +2489,13 @@ describe('API', function()
async_meths.nvim_err_write('FAILURE\nERROR\nEXCEPTION\nTRACEBACK\n')
screen:expect([[
|
- {0:~ }|
+ {1:~ }|
{3: }|
- {1:FAILURE} |
- {1:ERROR} |
- {1:EXCEPTION} |
- {1:TRACEBACK} |
- {2:Press