mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
eval: Add special variables v:false, v:null, v:none
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
local helpers = require('test.functional.helpers')
|
||||
local clear = helpers.clear
|
||||
local funcs = helpers.funcs
|
||||
local eval, eq = helpers.eval, helpers.eq
|
||||
local execute = helpers.execute
|
||||
local nvim = helpers.nvim
|
||||
@@ -517,6 +518,19 @@ describe('msgpackdump() function', function()
|
||||
eq({'\129\128\128'}, eval('msgpackdump([todump])'))
|
||||
end)
|
||||
|
||||
it('can dump v:true', function()
|
||||
eq({'\195'}, funcs.msgpackdump({true}))
|
||||
end)
|
||||
|
||||
it('can dump v:false', function()
|
||||
eq({'\194'}, funcs.msgpackdump({false}))
|
||||
end)
|
||||
|
||||
it('can v:null', function()
|
||||
execute('let todump = v:null')
|
||||
eq({'\192'}, eval('msgpackdump([todump])'))
|
||||
end)
|
||||
|
||||
it('can dump special ext mapping', function()
|
||||
execute('let todump = {"_TYPE": v:msgpack_types.ext, "_VAL": [5, ["",""]]}')
|
||||
eq({'\212\005', ''}, eval('msgpackdump([todump])'))
|
||||
@@ -620,6 +634,11 @@ describe('msgpackdump() function', function()
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
end)
|
||||
|
||||
it('fails to dump v:none', function()
|
||||
eq('Vim(call):E953: Attempt to convert v:none in msgpackdump() argument, index 0, itself',
|
||||
exc_exec('call msgpackdump([v:none])'))
|
||||
end)
|
||||
|
||||
it('fails when called with no arguments', function()
|
||||
eq('Vim(call):E119: Not enough arguments for function: msgpackdump',
|
||||
exc_exec('call msgpackdump()'))
|
||||
@@ -654,4 +673,11 @@ describe('msgpackdump() function', function()
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(0.0)'))
|
||||
end)
|
||||
|
||||
it('fails to dump special value', function()
|
||||
for _, val in ipairs({'v:true', 'v:false', 'v:null', 'v:none'}) do
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(' .. val .. ')'))
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
local helpers = require('test.functional.helpers')
|
||||
local exc_exec = helpers.exc_exec
|
||||
local execute = helpers.execute
|
||||
local meths = helpers.meths
|
||||
local funcs = helpers.funcs
|
||||
local meths = helpers.meths
|
||||
local clear = helpers.clear
|
||||
local eval = helpers.eval
|
||||
local eq = helpers.eq
|
||||
|
||||
describe('Special values', function()
|
||||
before_each(clear)
|
||||
@@ -17,20 +21,166 @@ describe('Special values', function()
|
||||
endtry
|
||||
endfunction
|
||||
]])
|
||||
eq(true, funcs.Test())
|
||||
eq(0, exc_exec('call Test()'))
|
||||
end)
|
||||
|
||||
it('work with empty()', function()
|
||||
eq(0, funcs.empty(true))
|
||||
eq(1, funcs.empty(false))
|
||||
eq(1, funcs.empty(nil))
|
||||
eq(1, eval('empty(v:null)'))
|
||||
eq(1, eval('empty(v:none)'))
|
||||
end)
|
||||
|
||||
it('can be stringified and eval’ed back', function()
|
||||
eq(true, funcs.eval(funcs.string(true)))
|
||||
eq(false, funcs.eval(funcs.string(false)))
|
||||
eq(nil, funcs.eval(funcs.string(nil)))
|
||||
eq(nil, eval('eval(string(v:null))'))
|
||||
eq(1, eval('eval(string(v:none)) is# v:none'))
|
||||
end)
|
||||
|
||||
it('work with is/isnot properly', function()
|
||||
eq(1, eval('v:none is v:none'))
|
||||
eq(0, eval('v:none is v:null'))
|
||||
eq(0, eval('v:none is v:true'))
|
||||
eq(0, eval('v:none is v:false'))
|
||||
eq(1, eval('v:null is v:null'))
|
||||
eq(0, eval('v:null is v:true'))
|
||||
eq(0, eval('v:null is v:false'))
|
||||
eq(1, eval('v:true is v:true'))
|
||||
eq(0, eval('v:true is v:false'))
|
||||
eq(1, eval('v:false is v:false'))
|
||||
|
||||
eq(0, eval('v:none is 0'))
|
||||
eq(0, eval('v:null is 0'))
|
||||
eq(0, eval('v:true is 0'))
|
||||
eq(0, eval('v:false is 0'))
|
||||
|
||||
eq(0, eval('v:none is 1'))
|
||||
eq(0, eval('v:null is 1'))
|
||||
eq(0, eval('v:true is 1'))
|
||||
eq(0, eval('v:false is 1'))
|
||||
|
||||
eq(0, eval('v:none is ""'))
|
||||
eq(0, eval('v:null is ""'))
|
||||
eq(0, eval('v:true is ""'))
|
||||
eq(0, eval('v:false is ""'))
|
||||
|
||||
eq(0, eval('v:none is "none"'))
|
||||
eq(0, eval('v:null is "null"'))
|
||||
eq(0, eval('v:true is "true"'))
|
||||
eq(0, eval('v:false is "false"'))
|
||||
|
||||
eq(0, eval('v:none is []'))
|
||||
eq(0, eval('v:null is []'))
|
||||
eq(0, eval('v:true is []'))
|
||||
eq(0, eval('v:false is []'))
|
||||
|
||||
eq(0, eval('v:none isnot v:none'))
|
||||
eq(1, eval('v:none isnot v:null'))
|
||||
eq(1, eval('v:none isnot v:true'))
|
||||
eq(1, eval('v:none isnot v:false'))
|
||||
eq(0, eval('v:null isnot v:null'))
|
||||
eq(1, eval('v:null isnot v:true'))
|
||||
eq(1, eval('v:null isnot v:false'))
|
||||
eq(0, eval('v:true isnot v:true'))
|
||||
eq(1, eval('v:true isnot v:false'))
|
||||
eq(0, eval('v:false isnot v:false'))
|
||||
|
||||
eq(1, eval('v:none isnot 0'))
|
||||
eq(1, eval('v:null isnot 0'))
|
||||
eq(1, eval('v:true isnot 0'))
|
||||
eq(1, eval('v:false isnot 0'))
|
||||
|
||||
eq(1, eval('v:none isnot 1'))
|
||||
eq(1, eval('v:null isnot 1'))
|
||||
eq(1, eval('v:true isnot 1'))
|
||||
eq(1, eval('v:false isnot 1'))
|
||||
|
||||
eq(1, eval('v:none isnot ""'))
|
||||
eq(1, eval('v:null isnot ""'))
|
||||
eq(1, eval('v:true isnot ""'))
|
||||
eq(1, eval('v:false isnot ""'))
|
||||
|
||||
eq(1, eval('v:none isnot "none"'))
|
||||
eq(1, eval('v:null isnot "null"'))
|
||||
eq(1, eval('v:true isnot "true"'))
|
||||
eq(1, eval('v:false isnot "false"'))
|
||||
|
||||
eq(1, eval('v:none isnot []'))
|
||||
eq(1, eval('v:null isnot []'))
|
||||
eq(1, eval('v:true isnot []'))
|
||||
eq(1, eval('v:false isnot []'))
|
||||
end)
|
||||
|
||||
it('work with +/-/* properly', function()
|
||||
eq(1, eval('0 + v:true'))
|
||||
eq(0, eval('0 + v:none'))
|
||||
eq(0, eval('0 + v:null'))
|
||||
eq(0, eval('0 + v:false'))
|
||||
|
||||
eq(-1, eval('0 - v:true'))
|
||||
eq( 0, eval('0 - v:none'))
|
||||
eq( 0, eval('0 - v:null'))
|
||||
eq( 0, eval('0 - v:false'))
|
||||
|
||||
eq(1, eval('1 * v:true'))
|
||||
eq(0, eval('1 * v:none'))
|
||||
eq(0, eval('1 * v:null'))
|
||||
eq(0, eval('1 * v:false'))
|
||||
end)
|
||||
|
||||
it('does not work with +=/-=/.=', function()
|
||||
meths.set_var('true', true)
|
||||
meths.set_var('false', false)
|
||||
execute('let none = v:none')
|
||||
execute('let null = v:null')
|
||||
|
||||
eq('Vim(let):E734: Wrong variable type for +=', exc_exec('let true += 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for +=', exc_exec('let false += 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for +=', exc_exec('let none += 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for +=', exc_exec('let null += 1'))
|
||||
|
||||
eq('Vim(let):E734: Wrong variable type for -=', exc_exec('let true -= 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for -=', exc_exec('let false -= 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for -=', exc_exec('let none -= 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for -=', exc_exec('let null -= 1'))
|
||||
|
||||
eq('Vim(let):E734: Wrong variable type for .=', exc_exec('let true .= 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for .=', exc_exec('let false .= 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for .=', exc_exec('let none .= 1'))
|
||||
eq('Vim(let):E734: Wrong variable type for .=', exc_exec('let null .= 1'))
|
||||
end)
|
||||
|
||||
it('work with . (concat) properly', function()
|
||||
eq("true", eval('"" . v:true'))
|
||||
eq("none", eval('"" . v:none'))
|
||||
eq("null", eval('"" . v:null'))
|
||||
eq("false", eval('"" . v:false'))
|
||||
end)
|
||||
|
||||
it('work with type()', function()
|
||||
eq(6, funcs.type(true))
|
||||
eq(6, funcs.type(false))
|
||||
eq(7, eval('type(v:null)'))
|
||||
eq(7, eval('type(v:none)'))
|
||||
end)
|
||||
|
||||
it('work with copy() and deepcopy()', function()
|
||||
eq(true, funcs.deepcopy(true))
|
||||
eq(false, funcs.deepcopy(false))
|
||||
eq(nil, eval('deepcopy(v:null)'))
|
||||
eq(nil, eval('deepcopy(v:none)'))
|
||||
|
||||
eq(true, funcs.copy(true))
|
||||
eq(false, funcs.copy(false))
|
||||
eq(nil, eval('copy(v:null)'))
|
||||
eq(nil, eval('copy(v:none)'))
|
||||
end)
|
||||
|
||||
it('fails in index', function()
|
||||
eq('Vim(echo):E15: Cannot index a special value', exc_exec('echo v:true[0]'))
|
||||
eq('Vim(echo):E15: Cannot index a special value', exc_exec('echo v:false[0]'))
|
||||
eq('Vim(echo):E15: Cannot index a special value', exc_exec('echo v:none[0]'))
|
||||
eq('Vim(echo):E15: Cannot index a special value', exc_exec('echo v:null[0]'))
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -28,6 +28,13 @@ describe('string() function', function()
|
||||
eq('0.0', eval('string(0.0)'))
|
||||
end)
|
||||
|
||||
it('dumps special v: values', function()
|
||||
eq('v:true', eval('string(v:true)'))
|
||||
eq('v:false', eval('string(v:false)'))
|
||||
eq('v:none', eval('string(v:none)'))
|
||||
eq('v:null', eval('string(v:null)'))
|
||||
end)
|
||||
|
||||
it('dumps values with at most six digits after the decimal point',
|
||||
function()
|
||||
eq('1.234568e-20', funcs.string(1.23456789123456789123456789e-020))
|
||||
|
||||
Reference in New Issue
Block a user