aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/buffer.c2
-rw-r--r--test/functional/eval/changedtick_spec.lua40
2 files changed, 24 insertions, 18 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index f2cd6adc9d..3eebd9d941 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1446,7 +1446,7 @@ static inline void buf_init_changedtick(buf_T *const buf)
dictitem_T *const changedtick_di = dictitem_alloc((char_u *)"changedtick");
// For some reason `islocked('b:changedtick')` should return 1. It does not
// 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) {
.v_type = VAR_NUMBER,
.v_lock = VAR_FIXED,
diff --git a/test/functional/eval/changedtick_spec.lua b/test/functional/eval/changedtick_spec.lua
index 6c5c91667f..1caff375bd 100644
--- a/test/functional/eval/changedtick_spec.lua
+++ b/test/functional/eval/changedtick_spec.lua
@@ -3,6 +3,7 @@ local helpers = require('test.functional.helpers')(after_each)
local curbufmeths = helpers.curbufmeths
local clear = helpers.clear
local eq = helpers.eq
+local neq = helpers.neq
local eval = helpers.eval
local feed = helpers.feed
local funcs = helpers.funcs
@@ -57,13 +58,13 @@ describe('b:changedtick', function()
local ct = changedtick()
local ctn = ct + 100500
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))
- 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))
- 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))
- 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))
-- FIXME
-- eq({fales, ''},
@@ -71,24 +72,29 @@ describe('b:changedtick', function()
eq('\nE795: Cannot delete variable b:changedtick',
redir_exec('unlet b:changedtick'))
- -- FIXME
- -- eq('\nE795: Cannot delete variable b:.changedtick',
- -- redir_exec('unlet b:.changedtick'))
- -- eq('\nE795: Cannot delete variable b:["changedtick"]',
- -- redir_exec('unlet b:["changedtick"]'))
- -- eq('\nE795: Cannot delete variable d.changedtick',
- -- redir_exec('unlet d.changedtick'))
+ eq('\nE46: Cannot change read-only variable "b:.changedtick"',
+ redir_exec('unlet b:.changedtick'))
+ eq('\nE46: Cannot change read-only variable "b:["changedtick"]"',
+ redir_exec('unlet b:["changedtick"]'))
+ eq('\nE46: Cannot change read-only variable "d.changedtick"',
+ redir_exec('unlet d.changedtick'))
-- FIXME
-- eq({},
-- {pcall(curbufmeths.del_var, '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))
- 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))
- 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))
+
+ eq(ct, changedtick())
+
+ funcs.setline(1, 'hello')
+
+ eq(ct + 1, changedtick())
end)
it('is listed in :let output', function()
eq('\nb:changedtick #2',
@@ -101,13 +107,13 @@ describe('b:changedtick', function()
-- So test mostly checks that b:changedtick status does not change.
eq(0, exc_exec('let d = b:'))
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"',
redir_exec('unlockvar b:changedtick'))
- eq('',
+ eq('\nE46: Cannot change read-only variable "d.changedtick"',
redir_exec('unlockvar d.changedtick'))
eq(1, funcs.islocked('b:changedtick'))
- eq(0, funcs.islocked('d.changedtick'))
+ neq(1, funcs.islocked('d.changedtick'))
end)
it('is being completed', function()
feed(':echo b:<Tab><Home>let cmdline="<End>"<CR>')