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',