patch 8.2.4407: Vim9: some code not covered by tests
Problem: Vim9: some code not covered by tests.
Solution: Add more tests. Avoid giving two errors. Remove dead code.
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index c4a457e..835bc1e 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -543,6 +543,13 @@
d3.one.two.three = 123
assert_equal({one: {two: {three: 123}}}, d3)
+ # blob
+ var bl: blob = 0z11223344
+ bl[0] = 0x77
+ assert_equal(0z77223344, bl)
+ bl[-2] = 0x66
+ assert_equal(0z77226644, bl)
+
# should not read the next line when generating "a.b"
var a = {}
a.b = {}
@@ -591,6 +598,18 @@
dl.one = {}
END
v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<unknown>', 2)
+
+ lines =<< trim END
+ g:l = [1, 2]
+ g:l['x'] = 3
+ END
+ v9.CheckDefExecAndScriptFailure(lines, ['E39:', 'E1030:'], 2)
+
+ lines =<< trim END
+ var bl: blob = test_null_blob()
+ bl[1] = 8
+ END
+ v9.CheckDefExecAndScriptFailure(lines, ['E1184:', 'E979:'], 2)
enddef
def Test_init_in_for_loop()
@@ -1201,6 +1220,21 @@
assert_equal(5678, nr)
enddef
+def Test_script_var_default()
+ var lines =<< trim END
+ vim9script
+ var l: list<number>
+ var bl: blob
+ var d: dict<number>
+ def Echo()
+ assert_equal([], l)
+ assert_equal(0z, bl)
+ assert_equal({}, d)
+ enddef
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
let s:scriptvar = 'init'
def Test_assignment_var_list()
@@ -2082,6 +2116,25 @@
'var ll = [1, 2]',
'unlet ll[0: 1]',
], 'E1004:', 2)
+
+ v9.CheckDefExecFailure([
+ 'g:ll = [1, 2]',
+ 'g:idx = "x"',
+ 'unlet g:ll[g:idx]',
+ ], 'E1029: Expected number but got string', 3)
+
+ v9.CheckDefExecFailure([
+ 'g:ll = [1, 2, 3]',
+ 'g:idx = "x"',
+ 'unlet g:ll[g:idx : 2]',
+ ], 'E1029: Expected number but got string', 3)
+
+ v9.CheckDefExecFailure([
+ 'g:ll = [1, 2, 3]',
+ 'g:idx = "x"',
+ 'unlet g:ll[0 : g:idx]',
+ ], 'E1029: Expected number but got string', 3)
+
# command recognized as assignment when skipping, should not give an error
v9.CheckScriptSuccess([
'vim9script',
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 10be691..e4bea07 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -1529,6 +1529,17 @@
var lines =<< trim END
vim9script
+ g:bl = 0z1122
+ lockvar g:bl
+ def Tryit()
+ g:bl[1] = 99
+ enddef
+ Tryit()
+ END
+ v9.CheckScriptFailure(lines, 'E741:', 1)
+
+ lines =<< trim END
+ vim9script
var theList = [1, 2, 3]
def SetList()
theList[1] = 22
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 9544f0b..a7b6187 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -910,6 +910,14 @@
v9.CheckScriptFailure(lines, 'E476:', 1)
enddef
+def Test_global_function_not_found()
+ var lines =<< trim END
+ g:Ref = 123
+ call g:Ref()
+ END
+ v9.CheckDefExecAndScriptFailure(lines, ['E117:', 'E1085:'], 2)
+enddef
+
def Test_global_local_function()
var lines =<< trim END
vim9script