diff src/testdir/test_vim9_script.vim @ 19894:ea4f8e789627 v8.2.0503

patch 8.2.0503: Vim9: some code is not tested Commit: https://github.com/vim/vim/commit/585fea7b98b79f2c6d92fa8a2340e461aff805c8 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 2 22:33:21 2020 +0200 patch 8.2.0503: Vim9: some code is not tested Problem: Vim9: some code is not tested. Solution: Add tests. Fix uncovered problems.
author Bram Moolenaar <Bram@vim.org>
date Thu, 02 Apr 2020 22:45:04 +0200
parents 5feb426d2ea1
children bd4f91762d0f
line wrap: on
line diff
--- 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