1" Tests for b:changedtick
2
3func Test_changedtick_increments()
4  new
5  " New buffer has an empty line, tick starts at 2.
6  let expected = 2
7  call assert_equal(expected, b:changedtick)
8  call assert_equal(expected, b:['changedtick'])
9  call setline(1, 'hello')
10  let expected += 1
11  call assert_equal(expected, b:changedtick)
12  call assert_equal(expected, b:['changedtick'])
13  undo
14  " Somehow undo counts as two changes.
15  let expected += 2
16  call assert_equal(expected, b:changedtick)
17  call assert_equal(expected, b:['changedtick'])
18  bwipe!
19endfunc
20
21func Test_changedtick_dict_entry()
22  let d = b:
23  call assert_equal(b:changedtick, d['changedtick'])
24endfunc
25
26func Test_changedtick_bdel()
27  new
28  let bnr = bufnr('%')
29  let v = b:changedtick
30  bdel
31  " Delete counts as a change too.
32  call assert_equal(v + 1, getbufvar(bnr, 'changedtick'))
33endfunc
34
35func Test_changedtick_islocked()
36  call assert_equal(0, islocked('b:changedtick'))
37  let d = b:
38  call assert_equal(0, islocked('d.changedtick'))
39endfunc
40
41func Test_changedtick_fixed()
42  call assert_fails('let b:changedtick = 4', 'E46:')
43  call assert_fails('let b:["changedtick"] = 4', 'E46:')
44
45  call assert_fails('lockvar b:changedtick', 'E940:')
46  call assert_fails('lockvar b:["changedtick"]', 'E46:')
47  call assert_fails('unlockvar b:changedtick', 'E940:')
48  call assert_fails('unlockvar b:["changedtick"]', 'E46:')
49  call assert_fails('unlet b:changedtick', 'E795:')
50  call assert_fails('unlet b:["changedtick"]', 'E46:')
51
52  let d = b:
53  call assert_fails('lockvar d["changedtick"]', 'E46:')
54  call assert_fails('unlockvar d["changedtick"]', 'E46:')
55  call assert_fails('unlet d["changedtick"]', 'E46:')
56
57endfunc
58
59func Test_changedtick_not_incremented_with_write()
60  new
61  let fname = "XChangeTick"
62  exe 'w ' .. fname
63
64  " :write when the buffer is not changed does not increment changedtick
65  let expected = b:changedtick
66  w
67  call assert_equal(expected, b:changedtick)
68
69  " :write when the buffer IS changed DOES increment changedtick
70  let expected = b:changedtick + 1
71  setlocal modified
72  w
73  call assert_equal(expected, b:changedtick)
74
75  " Two ticks: change + write
76  let expected = b:changedtick + 2
77  call setline(1, 'hello')
78  w
79  call assert_equal(expected, b:changedtick)
80
81  " Two ticks: start insert + write
82  let expected = b:changedtick + 2
83  normal! o
84  w
85  call assert_equal(expected, b:changedtick)
86
87  " Three ticks: start insert + change + write
88  let expected = b:changedtick + 3
89  normal! ochanged
90  w
91  call assert_equal(expected, b:changedtick)
92
93  bwipe
94  call delete(fname)
95endfunc
96
97" vim: shiftwidth=2 sts=2 expandtab
98