summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-02 22:33:21 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-02 22:33:21 +0200
commit585fea7b98b79f2c6d92fa8a2340e461aff805c8 (patch)
treee2d17a5f941550ebddef10efa925eee140c4756e
parente8c4abbbd711af8fd3ed85ea69e9ac3d63a0d879 (diff)
downloadvim-git-585fea7b98b79f2c6d92fa8a2340e461aff805c8.tar.gz
patch 8.2.0503: Vim9: some code is not testedv8.2.0503
Problem: Vim9: some code is not tested. Solution: Add tests. Fix uncovered problems.
-rw-r--r--src/testdir/test_vim9_script.vim88
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c11
3 files changed, 70 insertions, 31 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index d93ea6a06..518f60c62 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -112,6 +112,8 @@ def Test_assignment()
call CheckDefFailure(['&notex += 3'], 'E113:')
call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
call CheckDefFailure(['&path += 3'], 'E1013:')
+ " test freeing ISN_STOREOPT
+ call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
&ts = 8
g:inc_counter += 1
@@ -171,6 +173,9 @@ def Test_assignment()
let thechannel: channel
assert_equal(test_null_channel(), thechannel)
endif
+
+ let nr = 1234 | nr = 5678
+ assert_equal(5678, nr)
enddef
func Test_assignment_failure()
@@ -253,8 +258,16 @@ enddef
func Test_block_failure()
call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
+ call CheckDefFailure(['}'], 'E1025:')
+ call CheckDefFailure(['{', 'echo 1'], 'E1026:')
endfunc
+def Test_cmd_modifier()
+ tab echo '0'
+ call CheckDefFailure(['5tab echo 3'], 'E16:')
+enddef
+
+
def ReturnString(): string
return 'string'
enddef
@@ -326,6 +339,8 @@ def Test_call_default_args()
assert_equal('string', MyDefaultArgs())
assert_equal('one', MyDefaultArgs('one'))
assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
+
+ call CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef'], 'E1001:')
enddef
func Test_call_default_args_from_func()
@@ -480,6 +495,16 @@ def Test_try_catch_fails()
call CheckDefFailure(['catch'], 'E603:')
call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:')
call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:')
+ call CheckDefFailure(['finally'], 'E606:')
+ call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:')
+ call CheckDefFailure(['endtry'], 'E602:')
+ call CheckDefFailure(['while 1', 'endtry'], 'E170:')
+ call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
+ call CheckDefFailure(['if 2', 'endtry'], 'E171:')
+ call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
+
+ call CheckDefFailure(['throw'], 'E471:')
+ call CheckDefFailure(['throw xxx'], 'E1001:')
enddef
let s:export_script_lines =<< trim END
@@ -939,6 +964,7 @@ def Test_if_elseif_else_fails()
call CheckDefFailure(['else'], 'E581:')
call CheckDefFailure(['endif'], 'E580:')
call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:')
+ call CheckDefFailure(['if true', 'echo 1'], 'E171:')
enddef
let g:bool_true = v:true
@@ -951,6 +977,16 @@ def Test_if_const_expr()
endif
assert_equal(true, res)
+ g:glob = 2
+ if false
+ execute('let g:glob = 3')
+ endif
+ assert_equal(2, g:glob)
+ if true
+ execute('let g:glob = 3')
+ endif
+ assert_equal(3, g:glob)
+
res = false
if g:bool_true ? true : false
res = true
@@ -1092,10 +1128,13 @@ def Test_execute_cmd()
execute cmd_first .. cmd_last
assert_equal('execute-var-var', getline(1))
bwipe!
+
+ call CheckDefFailure(['execute xxx'], 'E1001:')
enddef
def Test_echo_cmd()
- echo 'something'
+ echo 'some'
+ echon 'thing'
assert_match('^something$', Screenline(&lines))
let str1 = 'some'
@@ -1141,6 +1180,7 @@ def Test_for_loop_fails()
call CheckDefFailure(['for i in "text"'], 'E1024:')
call CheckDefFailure(['for i in xxx'], 'E1001:')
call CheckDefFailure(['endfor'], 'E588:')
+ call CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:')
enddef
def Test_while_loop()
@@ -1166,6 +1206,7 @@ def Test_while_loop_fails()
call CheckDefFailure(['if true', 'continue'], 'E586:')
call CheckDefFailure(['break'], 'E587:')
call CheckDefFailure(['if true', 'break'], 'E587:')
+ call CheckDefFailure(['while 1', 'echo 3'], 'E170:')
enddef
def Test_interrupt_loop()
@@ -1185,28 +1226,6 @@ def Test_interrupt_loop()
assert_true(caught, 'should have caught an exception')
enddef
-def Test_substitute_cmd()
- new
- setline(1, 'something')
- :substitute(some(other(
- assert_equal('otherthing', getline(1))
- bwipe!
-
- " also when the context is Vim9 script
- let lines =<< trim END
- vim9script
- new
- setline(1, 'something')
- :substitute(some(other(
- assert_equal('otherthing', getline(1))
- bwipe!
- END
- writefile(lines, 'Xvim9lines')
- source Xvim9lines
-
- delete('Xvim9lines')
-enddef
-
def Test_redef_failure()
call writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef')
so Xdef
@@ -1285,4 +1304,27 @@ func Test_internalfunc_arg_error()
call delete('Xinvalidarg')
endfunc
+" Keep this last, it messes up highlighting.
+def Test_substitute_cmd()
+ new
+ setline(1, 'something')
+ :substitute(some(other(
+ assert_equal('otherthing', getline(1))
+ bwipe!
+
+ " also when the context is Vim9 script
+ let lines =<< trim END
+ vim9script
+ new
+ setline(1, 'something')
+ :substitute(some(other(
+ assert_equal('otherthing', getline(1))
+ bwipe!
+ END
+ writefile(lines, 'Xvim9lines')
+ source Xvim9lines
+
+ delete('Xvim9lines')
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index ddc5295c8..528454b23 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 503,
+/**/
502,
/**/
501,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index dec7587a8..836617205 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -4972,6 +4972,7 @@ compile_finally(char_u *arg, cctx_T *cctx)
// Fill in the "end" label in jumps at the end of the blocks.
compile_fill_jump_to_end(&scope->se_u.se_try.ts_end_label, cctx);
+ isn->isn_arg.try.try_finally = instr->ga_len;
if (scope->se_u.se_try.ts_catch_label != 0)
{
// Previous catch without match jumps here
@@ -4979,7 +4980,6 @@ compile_finally(char_u *arg, cctx_T *cctx)
isn->isn_arg.jump.jump_where = instr->ga_len;
}
- isn->isn_arg.try.try_finally = instr->ga_len;
// TODO: set index in ts_finally_label jumps
return arg;
@@ -5350,13 +5350,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
line = p;
continue;
}
- if (ea.cmdidx == CMD_let)
- {
- line = compile_assignment(ea.cmd, &ea, CMD_SIZE, &cctx);
- if (line == NULL)
- goto erret;
- continue;
- }
+ // CMD_let cannot happen, compile_assignment() above is used
iemsg("Command from find_ex_command() not handled");
goto erret;
}
@@ -5464,6 +5458,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
}
if (line == NULL)
goto erret;
+ line = skipwhite(line);
if (cctx.ctx_type_stack.ga_len < 0)
{