mirror of
https://github.com/neovim/neovim.git
synced 2025-10-18 07:41:51 +00:00
buffer: Forbid unletting b:changedtick
This commit is contained in:
@@ -1446,7 +1446,7 @@ static inline void buf_init_changedtick(buf_T *const buf)
|
|||||||
dictitem_T *const changedtick_di = dictitem_alloc((char_u *)"changedtick");
|
dictitem_T *const changedtick_di = dictitem_alloc((char_u *)"changedtick");
|
||||||
// For some reason `islocked('b:changedtick')` should return 1. It does not
|
// For some reason `islocked('b:changedtick')` should return 1. It does not
|
||||||
// do so for other read-only variables which are normally VAR_FIXED.
|
// do so for other read-only variables which are normally VAR_FIXED.
|
||||||
changedtick_di->di_flags |= DI_FLAGS_LOCK|DI_FLAGS_FIX;
|
changedtick_di->di_flags |= DI_FLAGS_RO|DI_FLAGS_LOCK|DI_FLAGS_FIX;
|
||||||
changedtick_di->di_tv = (typval_T) {
|
changedtick_di->di_tv = (typval_T) {
|
||||||
.v_type = VAR_NUMBER,
|
.v_type = VAR_NUMBER,
|
||||||
.v_lock = VAR_FIXED,
|
.v_lock = VAR_FIXED,
|
||||||
|
@@ -3,6 +3,7 @@ local helpers = require('test.functional.helpers')(after_each)
|
|||||||
local curbufmeths = helpers.curbufmeths
|
local curbufmeths = helpers.curbufmeths
|
||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
local neq = helpers.neq
|
||||||
local eval = helpers.eval
|
local eval = helpers.eval
|
||||||
local feed = helpers.feed
|
local feed = helpers.feed
|
||||||
local funcs = helpers.funcs
|
local funcs = helpers.funcs
|
||||||
@@ -57,13 +58,13 @@ describe('b:changedtick', function()
|
|||||||
local ct = changedtick()
|
local ct = changedtick()
|
||||||
local ctn = ct + 100500
|
local ctn = ct + 100500
|
||||||
eq(0, exc_exec('let d = b:'))
|
eq(0, exc_exec('let d = b:'))
|
||||||
eq('\nE742: Cannot change value of b:changedtick',
|
eq('\nE46: Cannot change read-only variable "b:changedtick"',
|
||||||
redir_exec('let b:changedtick = ' .. ctn))
|
redir_exec('let b:changedtick = ' .. ctn))
|
||||||
eq('\nE742: Cannot change value of b:["changedtick"] = ' .. ctn,
|
eq('\nE46: Cannot change read-only variable "b:["changedtick"] = '..ctn..'"',
|
||||||
redir_exec('let b:["changedtick"] = ' .. ctn))
|
redir_exec('let b:["changedtick"] = ' .. ctn))
|
||||||
eq('\nE742: Cannot change value of b:.changedtick = ' .. ctn,
|
eq('\nE46: Cannot change read-only variable "b:.changedtick = '..ctn..'"',
|
||||||
redir_exec('let b:.changedtick = ' .. ctn))
|
redir_exec('let b:.changedtick = ' .. ctn))
|
||||||
eq('\nE742: Cannot change value of d.changedtick = ' .. ctn,
|
eq('\nE46: Cannot change read-only variable "d.changedtick = '..ctn..'"',
|
||||||
redir_exec('let d.changedtick = ' .. ctn))
|
redir_exec('let d.changedtick = ' .. ctn))
|
||||||
-- FIXME
|
-- FIXME
|
||||||
-- eq({fales, ''},
|
-- eq({fales, ''},
|
||||||
@@ -71,24 +72,29 @@ describe('b:changedtick', function()
|
|||||||
|
|
||||||
eq('\nE795: Cannot delete variable b:changedtick',
|
eq('\nE795: Cannot delete variable b:changedtick',
|
||||||
redir_exec('unlet b:changedtick'))
|
redir_exec('unlet b:changedtick'))
|
||||||
-- FIXME
|
eq('\nE46: Cannot change read-only variable "b:.changedtick"',
|
||||||
-- eq('\nE795: Cannot delete variable b:.changedtick',
|
redir_exec('unlet b:.changedtick'))
|
||||||
-- redir_exec('unlet b:.changedtick'))
|
eq('\nE46: Cannot change read-only variable "b:["changedtick"]"',
|
||||||
-- eq('\nE795: Cannot delete variable b:["changedtick"]',
|
redir_exec('unlet b:["changedtick"]'))
|
||||||
-- redir_exec('unlet b:["changedtick"]'))
|
eq('\nE46: Cannot change read-only variable "d.changedtick"',
|
||||||
-- eq('\nE795: Cannot delete variable d.changedtick',
|
redir_exec('unlet d.changedtick'))
|
||||||
-- redir_exec('unlet d.changedtick'))
|
|
||||||
-- FIXME
|
-- FIXME
|
||||||
-- eq({},
|
-- eq({},
|
||||||
-- {pcall(curbufmeths.del_var, 'changedtick')})
|
-- {pcall(curbufmeths.del_var, 'changedtick')})
|
||||||
eq(ct, changedtick())
|
eq(ct, changedtick())
|
||||||
|
|
||||||
eq('\nE742: Cannot change value of b:["changedtick"] += ' .. ctn,
|
eq('\nE46: Cannot change read-only variable "b:["changedtick"] += '..ctn..'"',
|
||||||
redir_exec('let b:["changedtick"] += ' .. ctn))
|
redir_exec('let b:["changedtick"] += ' .. ctn))
|
||||||
eq('\nE742: Cannot change value of b:["changedtick"] -= ' .. ctn,
|
eq('\nE46: Cannot change read-only variable "b:["changedtick"] -= '..ctn..'"',
|
||||||
redir_exec('let b:["changedtick"] -= ' .. ctn))
|
redir_exec('let b:["changedtick"] -= ' .. ctn))
|
||||||
eq('\nE742: Cannot change value of b:["changedtick"] .= ' .. ctn,
|
eq('\nE46: Cannot change read-only variable "b:["changedtick"] .= '..ctn..'"',
|
||||||
redir_exec('let b:["changedtick"] .= ' .. ctn))
|
redir_exec('let b:["changedtick"] .= ' .. ctn))
|
||||||
|
|
||||||
|
eq(ct, changedtick())
|
||||||
|
|
||||||
|
funcs.setline(1, 'hello')
|
||||||
|
|
||||||
|
eq(ct + 1, changedtick())
|
||||||
end)
|
end)
|
||||||
it('is listed in :let output', function()
|
it('is listed in :let output', function()
|
||||||
eq('\nb:changedtick #2',
|
eq('\nb:changedtick #2',
|
||||||
@@ -101,13 +107,13 @@ describe('b:changedtick', function()
|
|||||||
-- So test mostly checks that b:changedtick status does not change.
|
-- So test mostly checks that b:changedtick status does not change.
|
||||||
eq(0, exc_exec('let d = b:'))
|
eq(0, exc_exec('let d = b:'))
|
||||||
eq(1, funcs.islocked('b:changedtick'))
|
eq(1, funcs.islocked('b:changedtick'))
|
||||||
eq(0, funcs.islocked('d.changedtick'))
|
neq(1, funcs.islocked('d.changedtick'))
|
||||||
eq('\nE46: Cannot change read-only variable "b:changedtick"',
|
eq('\nE46: Cannot change read-only variable "b:changedtick"',
|
||||||
redir_exec('unlockvar b:changedtick'))
|
redir_exec('unlockvar b:changedtick'))
|
||||||
eq('',
|
eq('\nE46: Cannot change read-only variable "d.changedtick"',
|
||||||
redir_exec('unlockvar d.changedtick'))
|
redir_exec('unlockvar d.changedtick'))
|
||||||
eq(1, funcs.islocked('b:changedtick'))
|
eq(1, funcs.islocked('b:changedtick'))
|
||||||
eq(0, funcs.islocked('d.changedtick'))
|
neq(1, funcs.islocked('d.changedtick'))
|
||||||
end)
|
end)
|
||||||
it('is being completed', function()
|
it('is being completed', function()
|
||||||
feed(':echo b:<Tab><Home>let cmdline="<End>"<CR>')
|
feed(':echo b:<Tab><Home>let cmdline="<End>"<CR>')
|
||||||
|
Reference in New Issue
Block a user