summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_vim9_expr.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-03-28 15:22:35 +0100
committerBram Moolenaar <Bram@vim.org>2022-03-28 15:22:35 +0100
commit859cc21c6b60af07b549456b7d050a03b3e48bc9 (patch)
treef2b27da6d782dc353fa52f8055b900b78997c6c7 /src/testdir/test_vim9_expr.vim
parent471b3aed3e9c43d4dd53444ceb74f9a4f8a3874a (diff)
patch 8.2.4642: Vim9: in :def function script var cannot be nullv8.2.4642
Problem: Vim9: in :def function script var cannot be null. Solution: Only initialize a script variable when not set to a null value. (closes #10034)
Diffstat (limited to 'src/testdir/test_vim9_expr.vim')
-rw-r--r--src/testdir/test_vim9_expr.vim87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 209bb10a5e..e76e1344af 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -890,6 +890,93 @@ def Test_expr4_compare_null()
unlet g:null_dict
unlet g:not_null_list
+ # variables declared at script level used in a :def function
+ lines =<< trim END
+ vim9script
+
+ var l_decl: list<number>
+ var l_empty = []
+ var l_null = null_list
+
+ def TestList()
+ assert_false(l_decl == null)
+ assert_false(l_decl is null_list)
+ assert_false(l_empty == null)
+ assert_false(l_empty is null_list)
+ assert_true(l_null == null)
+ assert_true(l_null is null_list)
+ assert_true(l_null == null_list)
+
+ add(l_decl, 6)
+ assert_equal([6], l_decl)
+ add(l_empty, 7)
+ assert_equal([7], l_empty)
+ var caught = false
+ try
+ add(l_null, 9)
+ catch /E1130:/
+ caught = true
+ endtry
+ assert_true(caught)
+ enddef
+ TestList()
+
+ var b_decl: blob
+ var b_empty = 0z
+ var b_null = null_blob
+
+ def TestBlob()
+ assert_false(b_decl == null)
+ assert_false(b_decl is null_blob)
+ assert_false(b_empty == null)
+ assert_false(b_empty is null_blob)
+ assert_true(b_null == null)
+ assert_true(b_null is null_blob)
+ assert_true(b_null == null_blob)
+
+ add(b_decl, 6)
+ assert_equal(0z06, b_decl)
+ add(b_empty, 7)
+ assert_equal(0z07, b_empty)
+ var caught = false
+ try
+ add(b_null, 9)
+ catch /E1131:/
+ caught = true
+ endtry
+ assert_true(caught)
+ enddef
+ TestBlob()
+
+ var d_decl: dict<number>
+ var d_empty = {}
+ var d_null = null_dict
+
+ def TestDict()
+ assert_false(d_decl == null)
+ assert_false(d_decl is null_dict)
+ assert_false(d_empty == null)
+ assert_false(d_empty is null_dict)
+ assert_true(d_null == null)
+ assert_true(d_null is null_dict)
+ assert_true(d_null == null_dict)
+
+ d_decl['a'] = 6
+ assert_equal({a: 6}, d_decl)
+ d_empty['b'] = 7
+ assert_equal({b: 7}, d_empty)
+ var caught = false
+ try
+ d_null['c'] = 9
+ catch /E1103:/
+ caught = true
+ endtry
+ assert_true(caught)
+ enddef
+ TestDict()
+ END
+ v9.CheckScriptSuccess(lines)
+
lines =<< trim END
var d: dict<func> = {f: null_function}
assert_equal(null_function, d.f)