patch 8.2.1416: Vim9: boolean evaluation does not work as intended
Problem: Vim9: boolean evaluation does not work as intended.
Solution: Use tv2bool() in Vim9 script. (closes #6681)
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index aa59973..d2d2e0b 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1750,31 +1750,35 @@
def Test_expr7_not()
- assert_equal(true, !'')
- assert_equal(true, ![])
- assert_equal(false, !'asdf')
- assert_equal(false, ![2])
- assert_equal(true, !!'asdf')
- assert_equal(true, !![2])
+ let lines =<< trim END
+ assert_equal(true, !'')
+ assert_equal(true, ![])
+ assert_equal(false, !'asdf')
+ assert_equal(false, ![2])
+ assert_equal(true, !!'asdf')
+ assert_equal(true, !![2])
- assert_equal(true, !test_null_partial())
- assert_equal(false, !{-> 'yes'})
+ assert_equal(true, !test_null_partial())
+ assert_equal(false, !{-> 'yes'})
- assert_equal(true, !test_null_dict())
- assert_equal(true, !{})
- assert_equal(false, !{'yes': 'no'})
+ assert_equal(true, !test_null_dict())
+ assert_equal(true, !{})
+ assert_equal(false, !{'yes': 'no'})
- if has('channel')
- assert_equal(true, !test_null_job())
- assert_equal(true, !test_null_channel())
- endif
+ if has('channel')
+ assert_equal(true, !test_null_job())
+ assert_equal(true, !test_null_channel())
+ endif
- assert_equal(true, !test_null_blob())
- assert_equal(true, !0z)
- assert_equal(false, !0z01)
+ assert_equal(true, !test_null_blob())
+ assert_equal(true, !0z)
+ assert_equal(false, !0z01)
- assert_equal(true, !test_void())
- assert_equal(true, !test_unknown())
+ assert_equal(true, !test_void())
+ assert_equal(true, !test_unknown())
+ END
+ CheckDefSuccess(lines)
+ CheckScriptSuccess(['vim9script'] + lines)
enddef
func Test_expr7_fails()
diff --git a/src/testdir/vim9.vim b/src/testdir/vim9.vim
index fdad9f7..448aa3d 100644
--- a/src/testdir/vim9.vim
+++ b/src/testdir/vim9.vim
@@ -1,5 +1,13 @@
" Utility functions for testing vim9 script
+" Check that "lines" inside ":def" has no error.
+func CheckDefSuccess(lines)
+ call writefile(['def Func()'] + a:lines + ['enddef', 'defcompile'], 'Xdef')
+ so Xdef
+ call Func()
+ call delete('Xdef')
+endfunc
+
" Check that "lines" inside ":def" results in an "error" message.
func CheckDefFailure(lines, error)
call writefile(['def Func()'] + a:lines + ['enddef', 'defcompile'], 'Xdef')