diff options
Diffstat (limited to 'test/functional/vimscript/minmax_functions_spec.lua')
-rw-r--r-- | test/functional/vimscript/minmax_functions_spec.lua | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/functional/vimscript/minmax_functions_spec.lua b/test/functional/vimscript/minmax_functions_spec.lua new file mode 100644 index 0000000000..91106bef1e --- /dev/null +++ b/test/functional/vimscript/minmax_functions_spec.lua @@ -0,0 +1,49 @@ +local helpers = require('test.functional.helpers')(after_each) + +local eq = helpers.eq +local eval = helpers.eval +local command = helpers.command +local clear = helpers.clear +local funcs = helpers.funcs +local pcall_err = helpers.pcall_err + +before_each(clear) +for _, func in ipairs({'min', 'max'}) do + describe(func .. '()', function() + it('gives a single error message when multiple values failed conversions', + function() + eq('Vim(echo):E745: Using a List as a Number', + pcall_err(command, 'echo ' .. func .. '([-5, [], [], [], 5])')) + eq('Vim(echo):E745: Using a List as a Number', + pcall_err(command, 'echo ' .. func .. '({1:-5, 2:[], 3:[], 4:[], 5:5})')) + for errmsg, errinput in pairs({ + ['Vim(echo):E745: Using a List as a Number'] = '[]', + ['Vim(echo):E805: Using a Float as a Number'] = '0.0', + ['Vim(echo):E703: Using a Funcref as a Number'] = 'function("tr")', + ['Vim(echo):E728: Using a Dictionary as a Number'] = '{}', + }) do + eq(errmsg, pcall_err(command, 'echo ' .. func .. '([' .. errinput .. '])')) + eq(errmsg, pcall_err(command, 'echo ' .. func .. '({1:' .. errinput .. '})')) + end + end) + it('works with arrays/dictionaries with zero items', function() + eq(0, funcs[func]({})) + eq(0, eval(func .. '({})')) + end) + it('works with arrays/dictionaries with one item', function() + eq(5, funcs[func]({5})) + eq(5, funcs[func]({test=5})) + end) + it('works with NULL arrays/dictionaries', function() + eq(0, eval(func .. '(v:_null_list)')) + eq(0, eval(func .. '(v:_null_dict)')) + end) + it('errors out for invalid types', function() + for _, errinput in ipairs({'1', 'v:true', 'v:false', 'v:null', + 'function("tr")', '""'}) do + eq(('Vim(echo):E712: Argument of %s() must be a List or Dictionary'):format(func), + pcall_err(command, 'echo ' .. func .. '(' .. errinput .. ')')) + end + end) + end) +end |