diff options
Diffstat (limited to 'test/functional/shada/variables_spec.lua')
-rw-r--r-- | test/functional/shada/variables_spec.lua | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/test/functional/shada/variables_spec.lua b/test/functional/shada/variables_spec.lua new file mode 100644 index 0000000000..6225971e5f --- /dev/null +++ b/test/functional/shada/variables_spec.lua @@ -0,0 +1,139 @@ +-- ShaDa variables saving/reading support +local helpers = require('test.functional.helpers') +local meths, funcs, nvim_command, eq = + helpers.meths, helpers.funcs, helpers.command, helpers.eq + +local shada_helpers = require('test.functional.shada.helpers') +local reset, set_additional_cmd, clear = + shada_helpers.reset, shada_helpers.set_additional_cmd, + shada_helpers.clear + +describe('ShaDa support code', function() + before_each(reset) + after_each(clear) + + it('is able to dump and read back string variable', function() + meths.set_var('STRVAR', 'foo') + nvim_command('set shada+=!') + nvim_command('wshada') + reset() + nvim_command('set shada+=!') + nvim_command('rshada') + eq('foo', meths.get_var('STRVAR')) + end) + + local autotest = function(tname, varname, varval) + it('is able to dump and read back ' .. tname .. ' variable automatically', + function() + set_additional_cmd('set shada+=!') + reset() + meths.set_var(varname, varval) + -- Exit during `reset` is not a regular exit: it does not write shada + -- automatically + nvim_command('qall') + reset() + eq(varval, meths.get_var(varname)) + end) + end + + autotest('string', 'STRVAR', 'foo') + autotest('number', 'NUMVAR', 42) + autotest('float', 'FLTVAR', 42.5) + autotest('dictionary', 'DCTVAR', {a=10}) + autotest('list', 'LSTVAR', {{a=10}, {b=10.5}, {c='str'}}) + + it('does not read back variables without `!` in &shada', function() + meths.set_var('STRVAR', 'foo') + nvim_command('set shada+=!') + nvim_command('wshada') + set_additional_cmd('set shada-=!') + reset() + nvim_command('rshada') + eq(0, funcs.exists('g:STRVAR')) + end) + + it('does not dump variables without `!` in &shada', function() + nvim_command('set shada-=!') + meths.set_var('STRVAR', 'foo') + nvim_command('wshada') + reset() + nvim_command('set shada+=!') + nvim_command('rshada') + eq(0, funcs.exists('g:STRVAR')) + end) + + it('does not dump session variables', function() + nvim_command('set shada+=!') + meths.set_var('StrVar', 'foo') + nvim_command('wshada') + reset() + nvim_command('set shada+=!') + nvim_command('rshada') + eq(0, funcs.exists('g:StrVar')) + end) + + it('does not dump regular variables', function() + nvim_command('set shada+=!') + meths.set_var('str_var', 'foo') + nvim_command('wshada') + reset() + nvim_command('set shada+=!') + nvim_command('rshada') + eq(0, funcs.exists('g:str_var')) + end) + + it('dumps and loads variables correctly when &encoding is not UTF-8', + function() + set_additional_cmd('set encoding=latin1') + reset() + -- \171 is U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK in latin1 + meths.set_var('STRVAR', '\171') + meths.set_var('LSTVAR', {'\171'}) + meths.set_var('DCTVAR', {['\171']='\171'}) + meths.set_var('NESTEDVAR', {['\171']={{'\171'}, {['\171']='\171'}, + {a='Test'}}}) + nvim_command('qall') + reset() + eq('\171', meths.get_var('STRVAR')) + eq({'\171'}, meths.get_var('LSTVAR')) + eq({['\171']='\171'}, meths.get_var('DCTVAR')) + eq({['\171']={{'\171'}, {['\171']='\171'}, {a='Test'}}}, + meths.get_var('NESTEDVAR')) + end) + + it('dumps and loads variables correctly when &encoding /= UTF-8 when dumping', + function() + set_additional_cmd('set encoding=latin1') + reset() + -- \171 is U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK in latin1 + meths.set_var('STRVAR', '\171') + meths.set_var('LSTVAR', {'\171'}) + meths.set_var('DCTVAR', {['\171']='\171'}) + meths.set_var('NESTEDVAR', {['\171']={{'\171'}, {['\171']='\171'}, + {a='Test'}}}) + set_additional_cmd('') + nvim_command('qall') + reset() + eq('«', meths.get_var('STRVAR')) + eq({'«'}, meths.get_var('LSTVAR')) + eq({['«']='«'}, meths.get_var('DCTVAR')) + eq({['«']={{'«'}, {['«']='«'}, {a='Test'}}}, meths.get_var('NESTEDVAR')) + end) + + it('dumps and loads variables correctly when &encoding /= UTF-8 when loading', + function() + -- \171 is U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK in latin1 + meths.set_var('STRVAR', '«') + meths.set_var('LSTVAR', {'«'}) + meths.set_var('DCTVAR', {['«']='«'}) + meths.set_var('NESTEDVAR', {['«']={{'«'}, {['«']='«'}, {a='Test'}}}) + set_additional_cmd('set encoding=latin1') + nvim_command('qall') + reset() + eq('\171', meths.get_var('STRVAR')) + eq({'\171'}, meths.get_var('LSTVAR')) + eq({['\171']='\171'}, meths.get_var('DCTVAR')) + eq({['\171']={{'\171'}, {['\171']='\171'}, {a='Test'}}}, + meths.get_var('NESTEDVAR')) + end) +end) |