Mercurial > vim
comparison src/testdir/test_vim9_expr.vim @ 22500:ef8a3177edc1 v8.2.1798
patch 8.2.1798: Vim9: trinary operator condition is too permissive
Commit: https://github.com/vim/vim/commit/1310660557470a669cc64b359e20666b116e5dbd
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Oct 4 16:06:05 2020 +0200
patch 8.2.1798: Vim9: trinary operator condition is too permissive
Problem: Vim9: trinary operator condition is too permissive.
Solution: Use tv_get_bool_chk().
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 04 Oct 2020 16:15:04 +0200 |
parents | 4c21f7f6f9e3 |
children | ac8c4a8b8cba |
comparison
equal
deleted
inserted
replaced
22499:8db2a5f8c40a | 22500:ef8a3177edc1 |
---|---|
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') |
21 assert_equal('one', 0.1 ? 'one' : 'two') | 21 assert_equal('one', !!0.1 ? 'one' : 'two') |
22 endif | 22 endif |
23 assert_equal('one', 'x' ? 'one' : 'two') | 23 assert_equal('one', !!'x' ? 'one' : 'two') |
24 assert_equal('one', 'x' | 24 assert_equal('one', !!'x' |
25 ? 'one' | 25 ? 'one' |
26 : 'two') | 26 : 'two') |
27 assert_equal('one', 0z1234 ? 'one' : 'two') | 27 assert_equal('one', !!0z1234 ? 'one' : 'two') |
28 assert_equal('one', [0] ? 'one' : 'two') | 28 assert_equal('one', !![0] ? 'one' : 'two') |
29 assert_equal('one', #{x: 0} ? 'one' : 'two') | 29 assert_equal('one', !!#{x: 0} ? 'one' : 'two') |
30 var name = 1 | 30 var name = 1 |
31 assert_equal('one', name ? 'one' : 'two') | 31 assert_equal('one', name ? 'one' : 'two') |
32 | 32 |
33 assert_equal('two', false ? 'one' : 'two') | 33 assert_equal('two', false ? 'one' : 'two') |
34 assert_equal('two', 0 ? 'one' : 'two') | 34 assert_equal('two', 0 ? 'one' : 'two') |
35 if has('float') | 35 if has('float') |
36 assert_equal('two', 0.0 ? 'one' : 'two') | 36 assert_equal('two', !!0.0 ? 'one' : 'two') |
37 endif | 37 endif |
38 assert_equal('two', '' ? 'one' : 'two') | 38 assert_equal('two', !!'' ? 'one' : 'two') |
39 assert_equal('two', 0z ? 'one' : 'two') | 39 assert_equal('two', !!0z ? 'one' : 'two') |
40 assert_equal('two', [] ? 'one' : 'two') | 40 assert_equal('two', !![] ? 'one' : 'two') |
41 assert_equal('two', {} ? 'one' : 'two') | 41 assert_equal('two', !!{} ? 'one' : 'two') |
42 name = 0 | 42 name = 0 |
43 assert_equal('two', name ? 'one' : 'two') | 43 assert_equal('two', name ? 'one' : 'two') |
44 | 44 |
45 # with constant condition expression is not evaluated | 45 # with constant condition expression is not evaluated |
46 assert_equal('one', 1 ? 'one' : xxx) | 46 assert_equal('one', 1 ? 'one' : xxx) |
114 lines =<< trim END | 114 lines =<< trim END |
115 vim9script | 115 vim9script |
116 var name = v:true ? 1 :2 | 116 var name = v:true ? 1 :2 |
117 END | 117 END |
118 CheckScriptFailure(lines, 'E1004:', 2) | 118 CheckScriptFailure(lines, 'E1004:', 2) |
119 | |
120 lines =<< trim END | |
121 vim9script | |
122 var name = 'x' ? 1 : 2 | |
123 END | |
124 CheckScriptFailure(lines, 'E1030:', 2) | |
125 | |
126 lines =<< trim END | |
127 vim9script | |
128 var name = [] ? 1 : 2 | |
129 END | |
130 CheckScriptFailure(lines, 'E745:', 2) | |
131 | |
132 lines =<< trim END | |
133 vim9script | |
134 var name = {} ? 1 : 2 | |
135 END | |
136 CheckScriptFailure(lines, 'E728:', 2) | |
119 | 137 |
120 # check after failure eval_flags is reset | 138 # check after failure eval_flags is reset |
121 lines =<< trim END | 139 lines =<< trim END |
122 vim9script | 140 vim9script |
123 try | 141 try |
149 | 167 |
150 let msg = "White space required before and after ':'" | 168 let msg = "White space required before and after ':'" |
151 call CheckDefFailure(["var x = 1 ? 'one': 'two'"], msg, 1) | 169 call CheckDefFailure(["var x = 1 ? 'one': 'two'"], msg, 1) |
152 call CheckDefFailure(["var x = 1 ? 'one' :'two'"], msg, 1) | 170 call CheckDefFailure(["var x = 1 ? 'one' :'two'"], msg, 1) |
153 call CheckDefFailure(["var x = 1 ? 'one':'two'"], msg, 1) | 171 call CheckDefFailure(["var x = 1 ? 'one':'two'"], msg, 1) |
172 | |
173 call CheckDefFailure(["var x = 'x' ? 'one' : 'two'"], 'E1030:', 1) | |
174 call CheckDefFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1) | |
175 call CheckDefExecFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1) | |
176 call CheckDefExecFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1) | |
177 | |
178 if has('float') | |
179 call CheckDefFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1) | |
180 endif | |
154 | 181 |
155 " missing argument detected even when common type is used | 182 " missing argument detected even when common type is used |
156 call CheckDefFailure([ | 183 call CheckDefFailure([ |
157 \ 'var X = FuncOne', | 184 \ 'var X = FuncOne', |
158 \ 'var Y = FuncTwo', | 185 \ 'var Y = FuncTwo', |