Mercurial > vim
comparison src/testdir/test_vim9_assign.vim @ 24357:108a6e2497f6 v8.2.2719
patch 8.2.2719: Vim9: appending to dict item doesn't work in a :def function
Commit: https://github.com/vim/vim/commit/e42939af87be3adad8c08ceb454e3a31114d7165
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Apr 5 17:11:17 2021 +0200
patch 8.2.2719: Vim9: appending to dict item doesn't work in a :def function
Problem: Vim9: appending to dict item doesn't work in a :def function.
Solution: Implement assignment with operator on indexed item.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 05 Apr 2021 17:15:06 +0200 |
parents | cd9f77409393 |
children | 1a145eb83a28 |
comparison
equal
deleted
inserted
replaced
24356:03088264506d | 24357:108a6e2497f6 |
---|---|
1114 CheckScriptSuccess(lines) | 1114 CheckScriptSuccess(lines) |
1115 enddef | 1115 enddef |
1116 | 1116 |
1117 def Test_assign_dict_with_op() | 1117 def Test_assign_dict_with_op() |
1118 var lines =<< trim END | 1118 var lines =<< trim END |
1119 vim9script | |
1120 var ds: dict<string> = {a: 'x'} | 1119 var ds: dict<string> = {a: 'x'} |
1121 ds['a'] ..= 'y' | 1120 ds['a'] ..= 'y' |
1122 ds.a ..= 'z' | 1121 ds.a ..= 'z' |
1123 assert_equal('xyz', ds.a) | 1122 assert_equal('xyz', ds.a) |
1124 | 1123 |
1146 dn['a'] %= 3 | 1145 dn['a'] %= 3 |
1147 assert_equal(2, dn.a) | 1146 assert_equal(2, dn.a) |
1148 dn.a %= 6 | 1147 dn.a %= 6 |
1149 assert_equal(2, dn.a) | 1148 assert_equal(2, dn.a) |
1150 END | 1149 END |
1151 # TODO: this should also work with a :def function | 1150 CheckDefAndScriptSuccess(lines) |
1152 CheckScriptSuccess(lines) | 1151 enddef |
1152 | |
1153 def Test_assign_list_with_op() | |
1154 var lines =<< trim END | |
1155 var ls: list<string> = ['x'] | |
1156 ls[0] ..= 'y' | |
1157 assert_equal('xy', ls[0]) | |
1158 | |
1159 var ln: list<number> = [9] | |
1160 ln[0] += 2 | |
1161 assert_equal(11, ln[0]) | |
1162 | |
1163 ln[0] -= 3 | |
1164 assert_equal(8, ln[0]) | |
1165 | |
1166 ln[0] *= 2 | |
1167 assert_equal(16, ln[0]) | |
1168 | |
1169 ln[0] /= 3 | |
1170 assert_equal(5, ln[0]) | |
1171 | |
1172 ln[0] %= 3 | |
1173 assert_equal(2, ln[0]) | |
1174 END | |
1175 CheckDefAndScriptSuccess(lines) | |
1176 enddef | |
1177 | |
1178 def Test_assign_with_op_fails() | |
1179 var lines =<< trim END | |
1180 var s = 'abc' | |
1181 s[1] += 'x' | |
1182 END | |
1183 CheckDefAndScriptFailure2(lines, 'E1141:', 'E689:', 2) | |
1184 | |
1185 lines =<< trim END | |
1186 var s = 'abc' | |
1187 s[1] ..= 'x' | |
1188 END | |
1189 CheckDefAndScriptFailure2(lines, 'E1141:', 'E689:', 2) | |
1153 enddef | 1190 enddef |
1154 | 1191 |
1155 def Test_assign_lambda() | 1192 def Test_assign_lambda() |
1156 # check if assign a lambda to a variable which type is func or any. | 1193 # check if assign a lambda to a variable which type is func or any. |
1157 var lines =<< trim END | 1194 var lines =<< trim END |