comparison src/testdir/test_vim9_expr.vim @ 22492:0e03ef68e738 v8.2.1794

patch 8.2.1794: no falsy Coalescing operator Commit: https://github.com/vim/vim/commit/92f26c256e06277ff2ec4ce7adea1eb58c85abe0 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Oct 3 20:17:30 2020 +0200 patch 8.2.1794: no falsy Coalescing operator Problem: No falsy Coalescing operator. Solution: Add the "??" operator. Fix mistake with function argument count.
author Bram Moolenaar <Bram@vim.org>
date Sat, 03 Oct 2020 20:30:04 +0200
parents a1b3804163ca
children 4c21f7f6f9e3
comparison
equal deleted inserted replaced
22491:2ebfb710e320 22492:0e03ef68e738
10 def FuncTwo(arg: number): number 10 def FuncTwo(arg: number): number
11 return 123 11 return 123
12 enddef 12 enddef
13 13
14 " test cond ? expr : expr 14 " test cond ? expr : expr
15 def Test_expr1() 15 def Test_expr1_trinary()
16 assert_equal('one', true ? 'one' : 'two') 16 assert_equal('one', true ? 'one' : 'two')
17 assert_equal('one', 1 ? 17 assert_equal('one', 1 ?
18 'one' : 18 'one' :
19 'two') 19 'two')
20 if has('float') 20 if has('float')
59 var Y = FuncTwo 59 var Y = FuncTwo
60 var Z = g:cond ? FuncOne : FuncTwo 60 var Z = g:cond ? FuncOne : FuncTwo
61 assert_equal(123, Z(3)) 61 assert_equal(123, Z(3))
62 enddef 62 enddef
63 63
64 def Test_expr1_vimscript() 64 def Test_expr1_trinary_vimscript()
65 # check line continuation 65 # check line continuation
66 var lines =<< trim END 66 var lines =<< trim END
67 vim9script 67 vim9script
68 var name = 1 68 var name = 1
69 ? 'yes' 69 ? 'yes'
137 assert_equal(v:true, eval(string(v:true))) 137 assert_equal(v:true, eval(string(v:true)))
138 END 138 END
139 CheckScriptSuccess(lines) 139 CheckScriptSuccess(lines)
140 enddef 140 enddef
141 141
142 func Test_expr1_fails() 142 func Test_expr1_trinary_fails()
143 call CheckDefFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1) 143 call CheckDefFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1)
144 144
145 let msg = "White space required before and after '?'" 145 let msg = "White space required before and after '?'"
146 call CheckDefFailure(["var x = 1? 'one' : 'two'"], msg, 1) 146 call CheckDefFailure(["var x = 1? 'one' : 'two'"], msg, 1)
147 call CheckDefFailure(["var x = 1 ?'one' : 'two'"], msg, 1) 147 call CheckDefFailure(["var x = 1 ?'one' : 'two'"], msg, 1)
157 \ 'var X = FuncOne', 157 \ 'var X = FuncOne',
158 \ 'var Y = FuncTwo', 158 \ 'var Y = FuncTwo',
159 \ 'var Z = g:cond ? FuncOne : FuncTwo', 159 \ 'var Z = g:cond ? FuncOne : FuncTwo',
160 \ 'Z()'], 'E119:', 4) 160 \ 'Z()'], 'E119:', 4)
161 endfunc 161 endfunc
162
163 def Test_expr1_falsy()
164 var lines =<< trim END
165 assert_equal(v:true, v:true ?? 456)
166 assert_equal(123, 123 ?? 456)
167 assert_equal('yes', 'yes' ?? 456)
168 assert_equal([1], [1] ?? 456)
169 assert_equal(#{one: 1}, #{one: 1} ?? 456)
170 if has('float')
171 assert_equal(0.1, 0.1 ?? 456)
172 endif
173
174 assert_equal(456, v:false ?? 456)
175 assert_equal(456, 0 ?? 456)
176 assert_equal(456, '' ?? 456)
177 assert_equal(456, [] ?? 456)
178 assert_equal(456, {} ?? 456)
179 if has('float')
180 assert_equal(456, 0.0 ?? 456)
181 endif
182 END
183 CheckDefAndScriptSuccess(lines)
184
185 var msg = "White space required before and after '??'"
186 call CheckDefFailure(["var x = 1?? 'one' : 'two'"], msg, 1)
187 call CheckDefFailure(["var x = 1 ??'one' : 'two'"], msg, 1)
188 call CheckDefFailure(["var x = 1??'one' : 'two'"], msg, 1)
189 enddef
162 190
163 " TODO: define inside test function 191 " TODO: define inside test function
164 def Record(val: any): any 192 def Record(val: any): any
165 g:vals->add(val) 193 g:vals->add(val)
166 return val 194 return val