diff src/testdir/test_let.vim @ 19689:da98d2ed8dc5 v8.2.0401

patch 8.2.0401: not enough test coverage for evalvars.c Commit: https://github.com/vim/vim/commit/8dfcce3a78ccb520cc9d09081f998091494c50bf Author: Bram Moolenaar <Bram@vim.org> Date: Wed Mar 18 19:32:26 2020 +0100 patch 8.2.0401: not enough test coverage for evalvars.c Problem: Not enough test coverage for evalvars.c. Solution: Add more tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/5804)
author Bram Moolenaar <Bram@vim.org>
date Wed, 18 Mar 2020 19:45:04 +0100
parents baf890fa1621
children b3e93a05c3ca
line wrap: on
line diff
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -25,9 +25,62 @@ func Test_let()
   let s = "\na                     #1\nb                     #2"
   call assert_equal(s, out)
 
+  " Test for displaying a string variable
+  let s = 'vim'
+  let out = execute('let s')
+  let s = "\ns                      vim"
+  call assert_equal(s, out)
+
+  " Test for displaying a list variable
+  let l = [1, 2]
+  let out = execute('let l')
+  let s = "\nl                     [1, 2]"
+  call assert_equal(s, out)
+
+  " Test for displaying a dict variable
+  let d = {'k' : 'v'}
+  let out = execute('let d')
+  let s = "\nd                     {'k': 'v'}"
+  call assert_equal(s, out)
+
+  " Test for displaying a function reference variable
+  let F = function('min')
+  let out = execute('let F')
+  let s = "\nF                     *min()"
+  call assert_equal(s, out)
+
   let x = 0
   if 0 | let x = 1 | endif
   call assert_equal(0, x)
+
+  " Display a list item using an out of range index
+  let l = [10]
+  call assert_fails('let l[1]', 'E684:')
+
+  " List special variable dictionaries
+  let g:Test_Global_Var = 5
+  call assert_match("\nTest_Global_Var       #5", execute('let g:'))
+  unlet g:Test_Global_Var
+
+  let b:Test_Buf_Var = 8
+  call assert_match("\nb:Test_Buf_Var        #8", execute('let b:'))
+  unlet b:Test_Buf_Var
+
+  let w:Test_Win_Var = 'foo'
+  call assert_equal("\nw:Test_Win_Var         foo", execute('let w:'))
+  unlet w:Test_Win_Var
+
+  let t:Test_Tab_Var = 'bar'
+  call assert_equal("\nt:Test_Tab_Var         bar", execute('let t:'))
+  unlet t:Test_Tab_Var
+
+  let s:Test_Script_Var = [7]
+  call assert_match("\ns:Test_Script_Var     \\[7]", execute('let s:'))
+  unlet s:Test_Script_Var
+
+  let l:Test_Local_Var = {'k' : 5}
+  call assert_match("\nl:Test_Local_Var      {'k': 5}", execute('let l:'))
+  call assert_match("v:errors              []", execute('let v:'))
 endfunc
 
 func s:set_arg1(a) abort
@@ -200,16 +253,45 @@ func Test_let_option_error()
   let &fillchars = _w
 endfunc
 
+" Errors with the :let statement
 func Test_let_errors()
   let s = 'abcd'
   call assert_fails('let s[1] = 5', 'E689:')
 
   let l = [1, 2, 3]
   call assert_fails('let l[:] = 5', 'E709:')
+
+  call assert_fails('let x:lnum=5', 'E488:')
+  call assert_fails('let v:=5', 'E461:')
+  call assert_fails('let [a]', 'E474:')
+  call assert_fails('let [a, b] = [', 'E697:')
+  call assert_fails('let [a, b] = [10, 20', 'E696:')
+  call assert_fails('let [a, b] = 10', 'E714:')
+  call assert_fails('let [a, , b] = [10, 20]', 'E475:')
+  call assert_fails('let [a, b&] = [10, 20]', 'E475:')
+  call assert_fails('let $ = 10', 'E475:')
+  call assert_fails('let $FOO[1] = "abc"', 'E18:')
+  call assert_fails('let &buftype[1] = "nofile"', 'E18:')
+  let s = "var"
+  let var = 1
+  call assert_fails('let {s}.1 = 2', 'E18:')
+
+  " This test works only when the language is English
+  if v:lang == "C" || v:lang =~ '^[Ee]n'
+    call assert_fails('let [a ; b;] = [10, 20]',
+          \ 'Double ; in list of variables')
+  endif
 endfunc
 
 func Test_let_heredoc_fails()
   call assert_fails('let v =<< marker', 'E991:')
+  try
+    exe "let v =<< TEXT | abc | TEXT"
+    call assert_report('No exception thrown')
+  catch /E488:/
+  catch
+    call assert_report("Caught exception: " .. v:exception)
+  endtry
 
   let text =<< trim END
   func WrongSyntax()
@@ -242,6 +324,10 @@ func Test_let_heredoc_fails()
   call writefile(text, 'XheredocBadMarker')
   call assert_fails('source XheredocBadMarker', 'E221:')
   call delete('XheredocBadMarker')
+
+  call writefile(['let v =<< TEXT', 'abc'], 'XheredocMissingMarker')
+  call assert_fails('source XheredocMissingMarker', 'E990:')
+  call delete('XheredocMissingMarker')
 endfunc
 
 func Test_let_heredoc_trim_no_indent_marker()
@@ -368,3 +454,5 @@ E
 END
   call assert_equal(['     x', '     \y', '     z'], [a, b, c])
 endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab