Mercurial > vim
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 |