patch 9.1.0319: Using heredoc in string not tested with :execute
Commit:
https://github.com/vim/vim/commit/3d93630605df60e8de5a38918eaff62165b42382
Author: zeertzjq <
zeer...@outlook.com>
Date: Sun Apr 14 18:49:56 2024 +0200
patch 9.1.0319: Using heredoc in string not tested with :execute
Problem: Using heredoc in string not tested with :execute.
Solution: Test with both :execute and execute() (zeertzjq).
closes: #14546
Signed-off-by: zeertzjq <
zeer...@outlook.com>
Signed-off-by: Christian Brabandt <
c...@256bit.org>
diff --git a/src/testdir/test_let.vim b/src/testdir/test_let.vim
index 974e8f1a3..17f78ea34 100644
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -722,31 +722,33 @@ END
LINES
call v9.CheckScriptFailure(lines, 'E15:')
- " Test for using heredoc in a single string using execute()
- call assert_equal("
['one', 'two']",
- \ execute("let x =<< trim END
one
two
END
echo x"))
- call assert_equal("
['one', ' two']",
- \ execute("let x =<< trim END
one
two
END
echo x"))
- call assert_equal("
['one', 'two']",
- \ execute(" let x =<< trim END
one
two
END
echo x"))
- call assert_equal("
['one', ' two']",
- \ execute(" let x =<< trim END
one
two
END
echo x"))
- call assert_equal("
[' one', ' two']",
- \ execute("let x =<< END
one
two
END
echo x"))
- call assert_equal("
['one', 'two']",
- \ execute("let x =<< END
one
two
END
echo x"))
- call assert_equal("
['one', 'two']",
- \ execute("let x =<< END \" comment
one
two
END
echo x"))
- let cmd = 'execute("let x =<< END
one
two
echo x")'
- call assert_fails(cmd, "E990: Missing end marker 'END'")
- let cmd = 'execute("let x =<<
one
two
echo x")'
- call assert_fails(cmd, "E172: Missing marker")
- let cmd = 'execute("let x =<< trim
one
two
echo x")'
- call assert_fails(cmd, "E172: Missing marker")
- let cmd = 'execute("let x =<< end
one
two
end
echo x")'
- call assert_fails(cmd, "E221: Marker cannot start with lower case letter")
- let cmd = 'execute("let x =<< eval END
one
two{y}
END
echo x")'
- call assert_fails(cmd, 'E121: Undefined variable: y')
+ " Test for using heredoc in a single string using :execute or execute()
+ for [cmd, res] in items({
+ \ "let x =<< trim END
one
two
END": ['one', 'two'],
+ \ "let x =<< trim END
one
two
END": ['one', ' two'],
+ \ " let x =<< trim END
one
two
END": ['one', 'two'],
+ \ " let x =<< trim END
one
two
END": ['one', ' two'],
+ \ "let x =<< END
one
two
END": [' one', ' two'],
+ \ "let x =<< END
one
two
END": ['one', 'two'],
+ \ "let x =<< END \" comment
one
two
END": ['one', 'two'],
+ \ })
+ execute cmd
+ call assert_equal(res, x)
+ unlet x
+ call assert_equal($"
{string(res)}", execute($"{cmd}
echo x"))
+ unlet x
+ endfor
+ for [cmd, err] in items({
+ \ "let x =<<
one
two": "E172:",
+ \ "let x =<< trim
one
two": "E172:",
+ \ "let x =<< end
one
two
end": "E221:",
+ \ "let x =<< END
one
two": "E990: Missing end marker 'END'",
+ \ "let x =<< END !
one
two
END": "E488: Trailing characters: !",
+ \ "let x =<< eval END
one
two{y}
END": "E121: Undefined variable: y",
+ \ })
+ call assert_fails('execute cmd', err)
+ call assert_fails('call execute(cmd)', err)
+ endfor
" skipped heredoc
if 0
diff --git a/src/version.c b/src/version.c
index b6c4e96c1..35ab83f2e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 319,
/**/
318,
/**/