diff options
Diffstat (limited to 'test/old/testdir/test_let.vim')
-rw-r--r-- | test/old/testdir/test_let.vim | 120 |
1 files changed, 119 insertions, 1 deletions
diff --git a/test/old/testdir/test_let.vim b/test/old/testdir/test_let.vim index 6fbf305624..0d84164274 100644 --- a/test/old/testdir/test_let.vim +++ b/test/old/testdir/test_let.vim @@ -1,5 +1,7 @@ " Tests for the :let command. +source vim9.vim + func Test_let() " Test to not autoload when assigning. It causes internal error. set runtimepath+=./sautest @@ -385,7 +387,18 @@ END call assert_equal(['Text', 'with', 'indent'], text) endfunc -" Test for the setting a variable using the heredoc syntax +func Test_let_interpolated() + call assert_equal('{text}', $'{{text}}') + call assert_equal('{{text}}', $'{{{{text}}}}') + let text = 'text' + call assert_equal('text{{', $'{text .. "{{"}') + call assert_equal('text{{', $"{text .. '{{'}") + call assert_equal('text{{', $'{text .. '{{'}') + call assert_equal('text{{', $"{text .. "{{"}") +endfunc + +" Test for the setting a variable using the heredoc syntax. +" Keep near the end, this messes up highlighting. func Test_let_heredoc() let var1 =<< END Some sample text @@ -493,4 +506,109 @@ END call assert_equal([' x', ' \y', ' z'], [a, b, c]) endfunc +" Test for evaluating Vim expressions in a heredoc using {expr} +" Keep near the end, this messes up highlighting. +func Test_let_heredoc_eval() + let str = '' + let code =<< trim eval END + let a = {5 + 10} + let b = {min([10, 6])} + {max([4, 6])} + {str} + let c = "abc{str}d" + END + call assert_equal(['let a = 15', 'let b = 6 + 6', '', 'let c = "abcd"'], code) + + let $TESTVAR = "Hello" + let code =<< eval trim END + let s = "{$TESTVAR}" + END + call assert_equal(['let s = "Hello"'], code) + + let code =<< eval END + let s = "{$TESTVAR}" +END + call assert_equal([' let s = "Hello"'], code) + + let a = 10 + let data =<< eval END +{a} +END + call assert_equal(['10'], data) + + let x = 'X' + let code =<< eval trim END + let a = {{abc}} + let b = {x} + let c = {{ + END + call assert_equal(['let a = {abc}', 'let b = X', 'let c = {'], code) + + let code = 'xxx' + let code =<< eval trim END + let n = {5 + + 6} + END + call assert_equal('xxx', code) + + let code =<< eval trim END + let n = {min([1, 2]} + {max([3, 4])} + END + call assert_equal('xxx', code) + + let lines =<< trim LINES + let text =<< eval trim END + let b = { + END + LINES + call CheckScriptFailure(lines, 'E1279:') + + let lines =<< trim LINES + let text =<< eval trim END + let b = {abc + END + LINES + call CheckScriptFailure(lines, 'E1279:') + + let lines =<< trim LINES + let text =<< eval trim END + let b = {} + END + LINES + call CheckScriptFailure(lines, 'E15:') + + " skipped heredoc + if 0 + let msg =<< trim eval END + n is: {n} + END + endif + + " Test for sourcing a script containing a heredoc with invalid expression. + " Variable assignment should fail, if expression evaluation fails + new + let g:Xvar = 'test' + let g:b = 10 + let lines =<< trim END + let Xvar =<< eval CODE + let a = 1 + let b = {5+} + let c = 2 + CODE + let g:Count += 1 + END + call setline(1, lines) + let g:Count = 0 + call assert_fails('source', 'E15:') + call assert_equal(1, g:Count) + call setline(3, 'let b = {abc}') + call assert_fails('source', 'E121:') + call assert_equal(2, g:Count) + call setline(3, 'let b = {abc} + {min([9, 4])} + 2') + call assert_fails('source', 'E121:') + call assert_equal(3, g:Count) + call assert_equal('test', g:Xvar) + call assert_equal(10, g:b) + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab |