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:')