diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-03-28 15:22:35 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-03-28 15:22:35 +0100 |
commit | 859cc21c6b60af07b549456b7d050a03b3e48bc9 (patch) | |
tree | f2b27da6d782dc353fa52f8055b900b78997c6c7 /src/testdir/test_vim9_expr.vim | |
parent | 471b3aed3e9c43d4dd53444ceb74f9a4f8a3874a (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.vim | 87 |
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) |