aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/vim_spec.lua
diff options
context:
space:
mode:
authorGregory Anders <8965202+gpanders@users.noreply.github.com>2024-05-27 08:08:23 -0500
committerGitHub <noreply@github.com>2024-05-27 08:08:23 -0500
commit48251134ee59a3e2f0aeb89608fa820c21b25d4f (patch)
tree62856aa0110c3f3bcd169a19f2b2a3a31abbf422 /test/functional/lua/vim_spec.lua
parentc4eb0b64bd4923a72fe737837cfe234c80fb539c (diff)
downloadrneovim-48251134ee59a3e2f0aeb89608fa820c21b25d4f.tar.gz
rneovim-48251134ee59a3e2f0aeb89608fa820c21b25d4f.tar.bz2
rneovim-48251134ee59a3e2f0aeb89608fa820c21b25d4f.zip
perf: add fast path to vim.validate (#28977)
For many small/simple functions (like those found in shared.lua), the runtime of vim.validate can far exceed the runtime of the function itself. Add an "overload" to vim.validate that uses a simple assertion pattern, rather than parsing a full "validation spec".
Diffstat (limited to 'test/functional/lua/vim_spec.lua')
-rw-r--r--test/functional/lua/vim_spec.lua20
1 files changed, 19 insertions, 1 deletions
diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua
index c8f94c6ffa..d50b646085 100644
--- a/test/functional/lua/vim_spec.lua
+++ b/test/functional/lua/vim_spec.lua
@@ -1408,7 +1408,25 @@ describe('lua stdlib', function()
exec_lua("vim.validate{arg1={{}, 't' }, arg2={ 'foo', 's' }}")
exec_lua("vim.validate{arg1={2, function(a) return (a % 2) == 0 end, 'even number' }}")
exec_lua("vim.validate{arg1={5, {'n', 's'} }, arg2={ 'foo', {'n', 's'} }}")
-
+ vim.validate('arg1', 5, 'number')
+ vim.validate('arg1', '5', 'string')
+ vim.validate('arg1', { 5 }, 'table')
+ vim.validate('arg1', function()
+ return 5
+ end, 'function')
+ vim.validate('arg1', nil, 'number', true)
+ vim.validate('arg1', nil, 'string', true)
+ vim.validate('arg1', nil, 'table', true)
+ vim.validate('arg1', nil, 'function', true)
+
+ matches('arg1: expected number, got nil', pcall_err(vim.validate, 'arg1', nil, 'number'))
+ matches('arg1: expected string, got nil', pcall_err(vim.validate, 'arg1', nil, 'string'))
+ matches('arg1: expected table, got nil', pcall_err(vim.validate, 'arg1', nil, 'table'))
+ matches('arg1: expected function, got nil', pcall_err(vim.validate, 'arg1', nil, 'function'))
+ matches('arg1: expected string, got number', pcall_err(vim.validate, 'arg1', 5, 'string'))
+ matches('arg1: expected table, got number', pcall_err(vim.validate, 'arg1', 5, 'table'))
+ matches('arg1: expected function, got number', pcall_err(vim.validate, 'arg1', 5, 'function'))
+ matches('arg1: expected number, got string', pcall_err(vim.validate, 'arg1', '5', 'number'))
matches('expected table, got number', pcall_err(exec_lua, "vim.validate{ 1, 'x' }"))
matches('invalid type name: x', pcall_err(exec_lua, "vim.validate{ arg1={ 1, 'x' }}"))
matches('invalid type name: 1', pcall_err(exec_lua, 'vim.validate{ arg1={ 1, 1 }}'))