1" Test for :const 2 3func s:noop() 4endfunc 5 6func Test_define_var_with_lock() 7 const i = 1 8 const f = 1.1 9 const s = 'vim' 10 const F = funcref('s:noop') 11 const l = [1, 2, 3] 12 const d = {'foo': 10} 13 if has('channel') 14 const j = test_null_job() 15 const c = test_null_channel() 16 endif 17 const b = v:true 18 const n = v:null 19 const bl = 0zC0FFEE 20 const here =<< trim EOS 21 hello 22 EOS 23 24 call assert_fails('let i = 1', 'E741:') 25 call assert_fails('let f = 1.1', 'E741:') 26 call assert_fails('let s = "vim"', 'E741:') 27 call assert_fails('let F = funcref("s:noop")', 'E741:') 28 call assert_fails('let l = [1, 2, 3]', 'E741:') 29 call assert_fails('let d = {"foo": 10}', 'E741:') 30 if has('channel') 31 call assert_fails('let j = test_null_job()', 'E741:') 32 call assert_fails('let c = test_null_channel()', 'E741:') 33 endif 34 call assert_fails('let b = v:true', 'E741:') 35 call assert_fails('let n = v:null', 'E741:') 36 call assert_fails('let bl = 0zC0FFEE', 'E741:') 37 call assert_fails('let here = "xxx"', 'E741:') 38 39 " Unlet 40 unlet i 41 unlet f 42 unlet s 43 unlet F 44 unlet l 45 unlet d 46 if has('channel') 47 unlet j 48 unlet c 49 endif 50 unlet b 51 unlet n 52 unlet bl 53 unlet here 54endfunc 55 56func Test_define_l_var_with_lock() 57 " With l: prefix 58 const l:i = 1 59 const l:f = 1.1 60 const l:s = 'vim' 61 const l:F = funcref('s:noop') 62 const l:l = [1, 2, 3] 63 const l:d = {'foo': 10} 64 if has('channel') 65 const l:j = test_null_job() 66 const l:c = test_null_channel() 67 endif 68 const l:b = v:true 69 const l:n = v:null 70 const l:bl = 0zC0FFEE 71 const l:here =<< trim EOS 72 hello 73 EOS 74 75 call assert_fails('let l:i = 1', 'E741:') 76 call assert_fails('let l:f = 1.1', 'E741:') 77 call assert_fails('let l:s = "vim"', 'E741:') 78 call assert_fails('let l:F = funcref("s:noop")', 'E741:') 79 call assert_fails('let l:l = [1, 2, 3]', 'E741:') 80 call assert_fails('let l:d = {"foo": 10}', 'E741:') 81 if has('channel') 82 call assert_fails('let l:j = test_null_job()', 'E741:') 83 call assert_fails('let l:c = test_null_channel()', 'E741:') 84 endif 85 call assert_fails('let l:b = v:true', 'E741:') 86 call assert_fails('let l:n = v:null', 'E741:') 87 call assert_fails('let l:bl = 0zC0FFEE', 'E741:') 88 call assert_fails('let l:here = "xxx"', 'E741:') 89 90 " Unlet 91 unlet l:i 92 unlet l:f 93 unlet l:s 94 unlet l:F 95 unlet l:l 96 unlet l:d 97 if has('channel') 98 unlet l:j 99 unlet l:c 100 endif 101 unlet l:b 102 unlet l:n 103 unlet l:bl 104 unlet l:here 105endfunc 106 107func Test_define_script_var_with_lock() 108 const s:x = 0 109 call assert_fails('let s:x = 1', 'E741:') 110 unlet s:x 111endfunc 112 113func Test_descructuring_with_lock() 114 const [a, b, c] = [1, 1.1, 'vim'] 115 116 call assert_fails('let a = 1', 'E741:') 117 call assert_fails('let b = 1.1', 'E741:') 118 call assert_fails('let c = "vim"', 'E741:') 119 120 const [d; e] = [1, 1.1, 'vim'] 121 call assert_fails('let d = 1', 'E741:') 122 call assert_fails('let e = [2.2, "a"]', 'E741:') 123endfunc 124 125func Test_cannot_modify_existing_variable() 126 let i = 1 127 let f = 1.1 128 let s = 'vim' 129 let F = funcref('s:noop') 130 let l = [1, 2, 3] 131 let d = {'foo': 10} 132 if has('channel') 133 let j = test_null_job() 134 let c = test_null_channel() 135 endif 136 let b = v:true 137 let n = v:null 138 let bl = 0zC0FFEE 139 140 call assert_fails('const i = 1', 'E995:') 141 call assert_fails('const f = 1.1', 'E995:') 142 call assert_fails('const s = "vim"', 'E995:') 143 call assert_fails('const F = funcref("s:noop")', 'E995:') 144 call assert_fails('const l = [1, 2, 3]', 'E995:') 145 call assert_fails('const d = {"foo": 10}', 'E995:') 146 if has('channel') 147 call assert_fails('const j = test_null_job()', 'E995:') 148 call assert_fails('const c = test_null_channel()', 'E995:') 149 endif 150 call assert_fails('const b = v:true', 'E995:') 151 call assert_fails('const n = v:null', 'E995:') 152 call assert_fails('const bl = 0zC0FFEE', 'E995:') 153 call assert_fails('const [i, f, s] = [1, 1.1, "vim"]', 'E995:') 154 155 const i2 = 1 156 const f2 = 1.1 157 const s2 = 'vim' 158 const F2 = funcref('s:noop') 159 const l2 = [1, 2, 3] 160 const d2 = {'foo': 10} 161 if has('channel') 162 const j2 = test_null_job() 163 const c2 = test_null_channel() 164 endif 165 const b2 = v:true 166 const n2 = v:null 167 const bl2 = 0zC0FFEE 168 169 call assert_fails('const i2 = 1', 'E995:') 170 call assert_fails('const f2 = 1.1', 'E995:') 171 call assert_fails('const s2 = "vim"', 'E995:') 172 call assert_fails('const F2 = funcref("s:noop")', 'E995:') 173 call assert_fails('const l2 = [1, 2, 3]', 'E995:') 174 call assert_fails('const d2 = {"foo": 10}', 'E995:') 175 if has('channel') 176 call assert_fails('const j2 = test_null_job()', 'E995:') 177 call assert_fails('const c2 = test_null_channel()', 'E995:') 178 endif 179 call assert_fails('const b2 = v:true', 'E995:') 180 call assert_fails('const n2 = v:null', 'E995:') 181 call assert_fails('const bl2 = 0zC0FFEE', 'E995:') 182 call assert_fails('const [i2, f2, s2] = [1, 1.1, "vim"]', 'E995:') 183endfunc 184 185func Test_const_with_index_access() 186 let l = [1, 2, 3] 187 call assert_fails('const l[0] = 4', 'E996:') 188 call assert_fails('const l[0:1] = [1, 2]', 'E996:') 189 190 let d = {'aaa': 0} 191 call assert_fails("const d['aaa'] = 4", 'E996:') 192 call assert_fails("const d.aaa = 4", 'E996:') 193endfunc 194 195func Test_const_with_compound_assign() 196 let i = 0 197 call assert_fails('const i += 4', 'E995:') 198 call assert_fails('const i -= 4', 'E995:') 199 call assert_fails('const i *= 4', 'E995:') 200 call assert_fails('const i /= 4', 'E995:') 201 call assert_fails('const i %= 4', 'E995:') 202 203 let s = 'a' 204 call assert_fails('const s .= "b"', 'E995:') 205 206 let [a, b, c] = [1, 2, 3] 207 call assert_fails('const [a, b, c] += [4, 5, 6]', 'E995:') 208 209 let [d; e] = [1, 2, 3] 210 call assert_fails('const [d; e] += [4, 5, 6]', 'E995:') 211endfunc 212 213func Test_const_with_special_variables() 214 call assert_fails('const $FOO = "hello"', 'E996:') 215 call assert_fails('const @a = "hello"', 'E996:') 216 call assert_fails('const &filetype = "vim"', 'E996:') 217 call assert_fails('const &l:filetype = "vim"', 'E996:') 218 call assert_fails('const &g:encoding = "utf-8"', 'E996:') 219endfunc 220 221func Test_lock_depth_is_1() 222 const l = [1, 2, 3] 223 const d = {'foo': 10} 224 225 " Modify list 226 call add(l, 4) 227 let l[0] = 42 228 229 " Modify dict 230 let d['bar'] = 'hello' 231 let d.foo = 44 232endfunc 233