Mercurial > vim
comparison src/testdir/test_listdict.vim @ 25308:a386f83499ed v8.2.3191
patch 8.2.3191: Vim9: not enough code is tested
Commit: https://github.com/vim/vim/commit/63cb6567f0153c35dc75cbc09039ff5d0a7b60e3
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jul 20 22:21:59 2021 +0200
patch 8.2.3191: Vim9: not enough code is tested
Problem: Vim9: not enough code is tested.
Solution: Use CheckLegacyAndVim9Success() in more places. Fix uncovered
problems.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 20 Jul 2021 22:30:05 +0200 |
parents | 3b8d3b383fd6 |
children | 820395d1137b |
comparison
equal
deleted
inserted
replaced
25307:10e0c155813d | 25308:a386f83499ed |
---|---|
1 " Tests for the List and Dict types | 1 " Tests for the List and Dict types |
2 | |
3 source vim9.vim | |
2 | 4 |
3 func TearDown() | 5 func TearDown() |
4 " Run garbage collection after every test | 6 " Run garbage collection after every test |
5 call test_garbagecollect_now() | 7 call test_garbagecollect_now() |
6 endfunc | 8 endfunc |
42 call assert_equal([2, 4, 2], l) | 44 call assert_equal([2, 4, 2], l) |
43 endfunc | 45 endfunc |
44 | 46 |
45 " List identity | 47 " List identity |
46 func Test_list_identity() | 48 func Test_list_identity() |
47 let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},] | 49 let lines =<< trim END |
48 let ll = l | 50 VAR l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},] |
49 let lx = copy(l) | 51 VAR ll = l |
50 call assert_true(l == ll) | 52 VAR lx = copy(l) |
51 call assert_false(l isnot ll) | 53 call assert_true(l == ll) |
52 call assert_true(l is ll) | 54 call assert_false(l isnot ll) |
53 call assert_true(l == lx) | 55 call assert_true(l is ll) |
54 call assert_false(l is lx) | 56 call assert_true(l == lx) |
55 call assert_true(l isnot lx) | 57 call assert_false(l is lx) |
58 call assert_true(l isnot lx) | |
59 END | |
60 call CheckLegacyAndVim9Success(lines) | |
56 endfunc | 61 endfunc |
57 | 62 |
58 " removing items with :unlet | 63 " removing items with :unlet |
59 func Test_list_unlet() | 64 func Test_list_unlet() |
60 let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},] | 65 let lines =<< trim END |
61 unlet l[2] | 66 VAR l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},] |
62 call assert_equal([1, 'as''d', {'a': 1}], l) | 67 unlet l[2] |
63 let l = range(8) | 68 call assert_equal([1, 'as''d', {'a': 1}], l) |
64 unlet l[:3] | 69 LET l = range(8) |
65 unlet l[1:] | 70 unlet l[: 3] |
66 call assert_equal([4], l) | 71 unlet l[1 :] |
67 | 72 call assert_equal([4], l) |
68 " removing items out of range: silently skip items that don't exist | 73 |
69 let l = [0, 1, 2, 3] | 74 #" removing items out of range: silently skip items that don't exist |
70 call assert_fails('unlet l[2:1]', 'E684:') | 75 LET l = [0, 1, 2, 3] |
76 unlet l[2 : 2] | |
77 call assert_equal([0, 1, 3], l) | |
78 LET l = [0, 1, 2, 3] | |
79 unlet l[2 : 3] | |
80 call assert_equal([0, 1], l) | |
81 LET l = [0, 1, 2, 3] | |
82 unlet l[2 : 4] | |
83 call assert_equal([0, 1], l) | |
84 LET l = [0, 1, 2, 3] | |
85 unlet l[2 : 5] | |
86 call assert_equal([0, 1], l) | |
87 LET l = [0, 1, 2, 3] | |
88 unlet l[-2 : 2] | |
89 call assert_equal([0, 1, 3], l) | |
90 LET l = [0, 1, 2, 3] | |
91 unlet l[-3 : 2] | |
92 call assert_equal([0, 3], l) | |
93 LET l = [0, 1, 2, 3] | |
94 unlet l[-4 : 2] | |
95 call assert_equal([3], l) | |
96 LET l = [0, 1, 2, 3] | |
97 unlet l[-5 : 2] | |
98 call assert_equal([3], l) | |
99 LET l = [0, 1, 2, 3] | |
100 unlet l[-6 : 2] | |
101 call assert_equal([3], l) | |
102 END | |
103 call CheckLegacyAndVim9Success(lines) | |
104 | |
71 let l = [0, 1, 2, 3] | 105 let l = [0, 1, 2, 3] |
72 unlet l[2:2] | 106 unlet l[2:2] |
73 call assert_equal([0, 1, 3], l) | 107 call assert_equal([0, 1, 3], l) |
74 let l = [0, 1, 2, 3] | 108 let l = [0, 1, 2, 3] |
75 unlet l[2:3] | 109 unlet l[2:3] |
76 call assert_equal([0, 1], l) | 110 call assert_equal([0, 1], l) |
111 | |
77 let l = [0, 1, 2, 3] | 112 let l = [0, 1, 2, 3] |
78 unlet l[2:4] | 113 call assert_fails('unlet l[2:1]', 'E684:') |
79 call assert_equal([0, 1], l) | |
80 let l = [0, 1, 2, 3] | |
81 unlet l[2:5] | |
82 call assert_equal([0, 1], l) | |
83 let l = [0, 1, 2, 3] | 114 let l = [0, 1, 2, 3] |
84 call assert_fails('unlet l[-1:2]', 'E684:') | 115 call assert_fails('unlet l[-1:2]', 'E684:') |
85 let l = [0, 1, 2, 3] | |
86 unlet l[-2:2] | |
87 call assert_equal([0, 1, 3], l) | |
88 let l = [0, 1, 2, 3] | |
89 unlet l[-3:2] | |
90 call assert_equal([0, 3], l) | |
91 let l = [0, 1, 2, 3] | |
92 unlet l[-4:2] | |
93 call assert_equal([3], l) | |
94 let l = [0, 1, 2, 3] | |
95 unlet l[-5:2] | |
96 call assert_equal([3], l) | |
97 let l = [0, 1, 2, 3] | |
98 unlet l[-6:2] | |
99 call assert_equal([3], l) | |
100 endfunc | 116 endfunc |
101 | 117 |
102 " assignment to a list | 118 " assignment to a list |
103 func Test_list_assign() | 119 func Test_list_assign() |
120 let lines =<< trim END | |
121 VAR l = [0, 1, 2, 3] | |
122 VAR va = 0 | |
123 VAR vb = 0 | |
124 LET [va, vb] = l[2 : 3] | |
125 call assert_equal([2, 3], [va, vb]) | |
126 END | |
127 call CheckLegacyAndVim9Success(lines) | |
128 | |
104 let l = [0, 1, 2, 3] | 129 let l = [0, 1, 2, 3] |
105 let [va, vb] = l[2:3] | |
106 call assert_equal([2, 3], [va, vb]) | |
107 call assert_fails('let [va, vb] = l', 'E687:') | 130 call assert_fails('let [va, vb] = l', 'E687:') |
108 call assert_fails('let [va, vb] = l[1:1]', 'E688:') | 131 call assert_fails('let [va, vb] = l[1:1]', 'E688:') |
109 endfunc | 132 endfunc |
110 | 133 |
111 " test for range assign | 134 " test for range assign |
117 call assert_equal([5, 6], l) | 140 call assert_equal([5, 6], l) |
118 endfunc | 141 endfunc |
119 | 142 |
120 " Test removing items in list | 143 " Test removing items in list |
121 func Test_list_func_remove() | 144 func Test_list_func_remove() |
122 " Test removing 1 element | 145 let lines =<< trim END |
123 let l = [1, 2, 3, 4] | 146 #" Test removing 1 element |
124 call assert_equal(1, remove(l, 0)) | 147 VAR l = [1, 2, 3, 4] |
125 call assert_equal([2, 3, 4], l) | 148 call assert_equal(1, remove(l, 0)) |
126 | 149 call assert_equal([2, 3, 4], l) |
127 let l = [1, 2, 3, 4] | 150 |
128 call assert_equal(2, remove(l, 1)) | 151 LET l = [1, 2, 3, 4] |
129 call assert_equal([1, 3, 4], l) | 152 call assert_equal(2, remove(l, 1)) |
130 | 153 call assert_equal([1, 3, 4], l) |
131 let l = [1, 2, 3, 4] | 154 |
132 call assert_equal(4, remove(l, -1)) | 155 LET l = [1, 2, 3, 4] |
133 call assert_equal([1, 2, 3], l) | 156 call assert_equal(4, remove(l, -1)) |
134 | 157 call assert_equal([1, 2, 3], l) |
135 " Test removing range of element(s) | 158 |
136 let l = [1, 2, 3, 4] | 159 #" Test removing range of element(s) |
137 call assert_equal([3], remove(l, 2, 2)) | 160 LET l = [1, 2, 3, 4] |
138 call assert_equal([1, 2, 4], l) | 161 call assert_equal([3], remove(l, 2, 2)) |
139 | 162 call assert_equal([1, 2, 4], l) |
140 let l = [1, 2, 3, 4] | 163 |
141 call assert_equal([2, 3], remove(l, 1, 2)) | 164 LET l = [1, 2, 3, 4] |
142 call assert_equal([1, 4], l) | 165 call assert_equal([2, 3], remove(l, 1, 2)) |
143 | 166 call assert_equal([1, 4], l) |
144 let l = [1, 2, 3, 4] | 167 |
145 call assert_equal([2, 3], remove(l, -3, -2)) | 168 LET l = [1, 2, 3, 4] |
146 call assert_equal([1, 4], l) | 169 call assert_equal([2, 3], remove(l, -3, -2)) |
170 call assert_equal([1, 4], l) | |
171 END | |
172 call CheckLegacyAndVim9Success(lines) | |
147 | 173 |
148 " Test invalid cases | 174 " Test invalid cases |
149 let l = [1, 2, 3, 4] | 175 let l = [1, 2, 3, 4] |
150 call assert_fails("call remove(l, 5)", 'E684:') | 176 call assert_fails("call remove(l, 5)", 'E684:') |
151 call assert_fails("call remove(l, 1, 5)", 'E684:') | 177 call assert_fails("call remove(l, 1, 5)", 'E684:') |
154 call assert_fails("call remove(l, l)", 'E745:') | 180 call assert_fails("call remove(l, l)", 'E745:') |
155 endfunc | 181 endfunc |
156 | 182 |
157 " List add() function | 183 " List add() function |
158 func Test_list_add() | 184 func Test_list_add() |
159 let l = [] | 185 let lines =<< trim END |
160 call add(l, 1) | 186 VAR l = [] |
161 call add(l, [2, 3]) | 187 call add(l, 1) |
162 call add(l, []) | 188 call add(l, [2, 3]) |
163 call add(l, test_null_list()) | 189 call add(l, []) |
164 call add(l, {'k' : 3}) | 190 call add(l, test_null_list()) |
165 call add(l, {}) | 191 call add(l, {'k': 3}) |
166 call add(l, test_null_dict()) | 192 call add(l, {}) |
167 call assert_equal([1, [2, 3], [], [], {'k' : 3}, {}, {}], l) | 193 call add(l, test_null_dict()) |
194 call assert_equal([1, [2, 3], [], [], {'k': 3}, {}, {}], l) | |
195 END | |
196 call CheckLegacyAndVim9Success(lines) | |
197 | |
198 " weird legacy behavior | |
168 call assert_equal(1, add(test_null_list(), 4)) | 199 call assert_equal(1, add(test_null_list(), 4)) |
169 endfunc | 200 endfunc |
170 | 201 |
171 " Tests for Dictionary type | 202 " Tests for Dictionary type |
172 | 203 |
173 func Test_dict() | 204 func Test_dict() |
174 " Creating Dictionary directly with different types | 205 " Creating Dictionary directly with different types |
206 let lines =<< trim END | |
207 VAR d = {'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}, } | |
208 call assert_equal("{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}", string(d)) | |
209 call assert_equal('asd', d.1) | |
210 call assert_equal(['-1', '1', 'b'], sort(keys(d))) | |
211 call assert_equal(['asd', [1, 2, function('strlen')], {'a': 1}], values(d)) | |
212 call extend(d, {3: 33, 1: 99}) | |
213 call extend(d, {'b': 'bbb', 'c': 'ccc'}, "keep") | |
214 call assert_equal({'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}, d) | |
215 END | |
216 call CheckLegacyAndVim9Success(lines) | |
217 | |
175 let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},} | 218 let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},} |
176 call assert_equal("{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}", string(d)) | 219 call assert_equal("{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}", string(d)) |
177 call assert_equal('asd', d.1) | 220 |
178 call assert_equal(['-1', '1', 'b'], sort(keys(d))) | |
179 call assert_equal(['asd', [1, 2, function('strlen')], {'a': 1}], values(d)) | |
180 let v = [] | 221 let v = [] |
181 for [key, val] in items(d) | 222 for [key, val] in items(d) |
182 call extend(v, [key, val]) | 223 call extend(v, [key, val]) |
183 unlet key val | 224 unlet key val |
184 endfor | 225 endfor |
185 call assert_equal(['1','asd','b',[1, 2, function('strlen')],'-1',{'a': 1}], v) | 226 call assert_equal(['1','asd','b',[1, 2, function('strlen')],'-1',{'a': 1}], v) |
186 | 227 |
187 call extend(d, {3:33, 1:99}) | 228 call extend(d, {3: 33, 1: 99}) |
188 call extend(d, {'b':'bbb', 'c':'ccc'}, "keep") | |
189 call assert_fails("call extend(d, {3:333,4:444}, 'error')", 'E737:') | 229 call assert_fails("call extend(d, {3:333,4:444}, 'error')", 'E737:') |
190 call assert_equal({'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}, d) | |
191 call filter(d, 'v:key =~ ''[ac391]''') | |
192 call assert_equal({'c': 'ccc', '1': 99, '3': 33, '-1': {'a': 1}}, d) | |
193 | 230 |
194 " duplicate key | 231 " duplicate key |
195 call assert_fails("let d = {'k' : 10, 'k' : 20}", 'E721:') | 232 call assert_fails("let d = {'k' : 10, 'k' : 20}", 'E721:') |
196 " missing comma | 233 " missing comma |
197 call assert_fails("let d = {'k' : 10 'k' : 20}", 'E722:') | 234 call assert_fails("let d = {'k' : 10 'k' : 20}", 'E722:') |