1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
-- ShaDa variables saving/reading support
local helpers = require('test.functional.helpers')
local nvim, nvim_command, nvim_eval, eq =
helpers.nvim, helpers.command, helpers.eval, 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()
nvim('set_var', 'STRVAR', 'foo')
nvim_command('set shada+=!')
nvim_command('wshada')
reset()
nvim_command('set shada+=!')
nvim_command('rshada')
eq('foo', nvim('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()
nvim('set_var', varname, varval)
-- Exit during `reset` is not a regular exit: it does not write shada
-- automatically
nvim_command('qall')
reset()
eq(varval, nvim('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()
nvim('set_var', 'STRVAR', 'foo')
nvim_command('set shada+=!')
nvim_command('wshada')
set_additional_cmd('set shada-=!')
reset()
nvim_command('rshada')
eq(0, nvim_eval('exists("g:STRVAR")'))
end)
it('does not dump variables without `!` in &shada', function()
nvim_command('set shada-=!')
nvim('set_var', 'STRVAR', 'foo')
nvim_command('wshada')
reset()
nvim_command('set shada+=!')
nvim_command('rshada')
eq(0, nvim_eval('exists("g:STRVAR")'))
end)
it('does not dump session variables', function()
nvim_command('set shada+=!')
nvim('set_var', 'StrVar', 'foo')
nvim_command('wshada')
reset()
nvim_command('set shada+=!')
nvim_command('rshada')
eq(0, nvim_eval('exists("g:StrVar")'))
end)
it('does not dump regular variables', function()
nvim_command('set shada+=!')
nvim('set_var', 'str_var', 'foo')
nvim_command('wshada')
reset()
nvim_command('set shada+=!')
nvim_command('rshada')
eq(0, nvim_eval('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
nvim('set_var', 'STRVAR', '\171')
nvim('set_var', 'LSTVAR', {'\171'})
nvim('set_var', 'DCTVAR', {['\171']='\171'})
nvim('set_var', 'NESTEDVAR', {['\171']={{'\171'}, {['\171']='\171'},
{a='Test'}}})
nvim_command('qall')
reset()
eq('\171', nvim('get_var', 'STRVAR'))
eq({'\171'}, nvim('get_var', 'LSTVAR'))
eq({['\171']='\171'}, nvim('get_var', 'DCTVAR'))
eq({['\171']={{'\171'}, {['\171']='\171'}, {a='Test'}}},
nvim('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
nvim('set_var', 'STRVAR', '\171')
nvim('set_var', 'LSTVAR', {'\171'})
nvim('set_var', 'DCTVAR', {['\171']='\171'})
nvim('set_var', 'NESTEDVAR', {['\171']={{'\171'}, {['\171']='\171'},
{a='Test'}}})
set_additional_cmd('')
nvim_command('qall')
reset()
eq('«', nvim('get_var', 'STRVAR'))
eq({'«'}, nvim('get_var', 'LSTVAR'))
eq({['«']='«'}, nvim('get_var', 'DCTVAR'))
eq({['«']={{'«'}, {['«']='«'}, {a='Test'}}}, nvim('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
nvim('set_var', 'STRVAR', '«')
nvim('set_var', 'LSTVAR', {'«'})
nvim('set_var', 'DCTVAR', {['«']='«'})
nvim('set_var', 'NESTEDVAR', {['«']={{'«'}, {['«']='«'}, {a='Test'}}})
set_additional_cmd('set encoding=latin1')
nvim_command('qall')
reset()
eq('\171', nvim('get_var', 'STRVAR'))
eq({'\171'}, nvim('get_var', 'LSTVAR'))
eq({['\171']='\171'}, nvim('get_var', 'DCTVAR'))
eq({['\171']={{'\171'}, {['\171']='\171'}, {a='Test'}}},
nvim('get_var', 'NESTEDVAR'))
end)
end)
|