diff options
author | ZyX <kp-pav@yandex.ru> | 2016-01-31 01:25:00 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2016-04-18 02:44:03 +0300 |
commit | d70a322c40e849f98ad573d2a37dc680c5616b26 (patch) | |
tree | abe3c021dd0d7e9ae0f0f7a6b23d4ec8f548f930 /test | |
parent | 18903bd9b88ec960cb36b1ddd2b5062aad4bac2e (diff) | |
download | rneovim-d70a322c40e849f98ad573d2a37dc680c5616b26.tar.gz rneovim-d70a322c40e849f98ad573d2a37dc680c5616b26.tar.bz2 rneovim-d70a322c40e849f98ad573d2a37dc680c5616b26.zip |
eval: Add special variables v:false, v:null, v:none
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/eval/msgpack_functions_spec.lua | 26 | ||||
-rw-r--r-- | test/functional/eval/special_vars_spec.lua | 156 | ||||
-rw-r--r-- | test/functional/eval/string_spec.lua | 7 |
3 files changed, 186 insertions, 3 deletions
diff --git a/test/functional/eval/msgpack_functions_spec.lua b/test/functional/eval/msgpack_functions_spec.lua index fc0aad7902..0c91471656 100644 --- a/test/functional/eval/msgpack_functions_spec.lua +++ b/test/functional/eval/msgpack_functions_spec.lua @@ -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) diff --git a/test/functional/eval/special_vars_spec.lua b/test/functional/eval/special_vars_spec.lua index 7adc529c88..c7df847946 100644 --- a/test/functional/eval/special_vars_spec.lua +++ b/test/functional/eval/special_vars_spec.lua @@ -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) diff --git a/test/functional/eval/string_spec.lua b/test/functional/eval/string_spec.lua index f7f5dca70a..fe79708910 100644 --- a/test/functional/eval/string_spec.lua +++ b/test/functional/eval/string_spec.lua @@ -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)) |