summaryrefslogtreecommitdiff
path: root/src/testdir/test_vim9_assign.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-11-30 16:14:49 +0000
committerBram Moolenaar <Bram@vim.org>2021-11-30 16:14:49 +0000
commitab36e6ae7b87b0295fb19270e4339a734875c6b1 (patch)
treef049630a28f6c7967eafd5220f43a7ff23b79123 /src/testdir/test_vim9_assign.vim
parent53ba95e4f0a82f6dab1791bb01f6cddc9b3f61b3 (diff)
downloadvim-git-ab36e6ae7b87b0295fb19270e4339a734875c6b1.tar.gz
patch 8.2.3704: Vim9: cannot use a list declaration in a :def functionv8.2.3704
Problem: Vim9: cannot use a list declaration in a :def function. Solution: Make it work.
Diffstat (limited to 'src/testdir/test_vim9_assign.vim')
-rw-r--r--src/testdir/test_vim9_assign.vim55
1 files changed, 54 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 394dfe663..87924c629 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -732,7 +732,6 @@ def Test_assignment_list()
assert_equal(['sdf', 'asdf', 'end'], list3)
CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:')
- CheckDefExecFailure(['var [v1, v2] = [1, 2]'], 'E1092:')
# type becomes list<any>
var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
@@ -753,6 +752,60 @@ def Test_assignment_list()
CheckDefExecAndScriptFailure(lines, 'E1012:', 5)
enddef
+def Test_list_declaration()
+ var [v1, v2] = [1, 2]
+ v1 += 3
+ assert_equal(4, v1)
+ v2 *= 3
+ assert_equal(6, v2)
+
+ var lines =<< trim END
+ var [v1, v2] = [1]
+ END
+ CheckDefExecAndScriptFailure2(lines, 'E1093: Expected 2 items but got 1', 'E688:')
+ lines =<< trim END
+ var testlist = [1]
+ var [v1, v2] = testlist
+ END
+ CheckDefExecAndScriptFailure2(lines, 'E1093: Expected 2 items but got 1', 'E688:')
+ lines =<< trim END
+ var [v1, v2] = [1, 2, 3]
+ END
+ CheckDefExecAndScriptFailure2(lines, 'E1093: Expected 2 items but got 3', 'E687:')
+ lines =<< trim END
+ var testlist = [1, 2, 3]
+ var [v1, v2] = testlist
+ END
+ CheckDefExecAndScriptFailure2(lines, 'E1093: Expected 2 items but got 3', 'E687:')
+
+ var [vnr, vstr] = [123, 'text']
+ vnr += 3
+ assert_equal(126, vnr)
+ vstr ..= 'end'
+ assert_equal('textend', vstr)
+
+ var [vnr2: number, vstr2: string] = [123, 'text']
+ vnr2 += 3
+ assert_equal(126, vnr2)
+ vstr2 ..= 'end'
+ assert_equal('textend', vstr2)
+
+ var [vnr3: number; vlist: list<string>] = [123, 'foo', 'bar']
+ vnr3 += 5
+ assert_equal(128, vnr3)
+ assert_equal(['foo', 'bar'], vlist)
+
+ lines =<< trim END
+ var [vnr2: number, vstr2: number] = [123, 'text']
+ END
+ CheckDefExecAndScriptFailure2(lines, 'E1163: Variable 2: type mismatch, expected number but got string', 'E1012: Type mismatch; expected number but got string')
+ lines =<< trim END
+ var testlist = [234, 'text']
+ var [vnr2: number, vstr2: number] = testlist
+ END
+ CheckDefExecAndScriptFailure2(lines, 'E1163: Variable 2: type mismatch, expected number but got string', 'E1012: Type mismatch; expected number but got string')
+enddef
+
def PartFuncBool(b: bool): string
return 'done'
enddef