Patch 9.0.0418

9 views
Skip to first unread message

Bram Moolenaar

unread,
Sep 8, 2022, 2:54:30 PM9/8/22
to vim...@googlegroups.com

Patch 9.0.0418
Problem: Manually deleting temp test files.
Solution: Use the 'D' flag of writefile() and mkdir().
Files: src/testdir/test_cd.vim, src/testdir/test_changelist.vim,
src/testdir/test_channel.vim, src/testdir/test_checkpath.vim,
src/testdir/test_cmdline.vim, src/testdir/test_cmdwin.vim,
src/testdir/test_conceal.vim, src/testdir/test_cpoptions.vim,
src/testdir/test_cscope.vim, src/testdir/test_cursorline.vim


*** ../vim-9.0.0418/src/userfunc.c 2022-09-07 21:30:40.139379052 +0100
--- src/userfunc.c 2022-09-08 18:11:09.503285696 +0100
***************
*** 5608,5613 ****
--- 5608,5614 ----
ex_defer_inner(
char_u *name,
char_u **arg,
+ type_T *type,
partial_T *partial,
evalarg_T *evalarg)
{
***************
*** 5640,5645 ****
--- 5641,5684 ----
r = get_func_arguments(arg, evalarg, FALSE,
argvars + partial_argc, &argcount);
argcount += partial_argc;
+
+ if (r == OK)
+ {
+ if (type != NULL)
+ {
+ // Check that the arguments are OK for the types of the funcref.
+ r = check_argument_types(type, argvars, argcount, NULL, name);
+ }
+ else if (builtin_function(name, -1))
+ {
+ int idx = find_internal_func(name);
+
+ if (idx < 0)
+ {
+ emsg_funcname(e_unknown_function_str, name);
+ r = FAIL;
+ }
+ else if (check_internal_func(idx, argcount) == -1)
+ r = FAIL;
+ }
+ else
+ {
+ ufunc_T *ufunc = find_func(name, FALSE);
+
+ // we tolerate an unknown function here, it might be defined later
+ if (ufunc != NULL)
+ {
+ int error = check_user_func_argcount(ufunc, argcount);
+
+ if (error != FCERR_UNKNOWN)
+ {
+ user_func_error(error, name, NULL);
+ r = FAIL;
+ }
+ }
+ }
+ }
+
if (r == FAIL)
{
while (--argcount >= 0)
***************
*** 5839,5845 ****
if (eap->cmdidx == CMD_defer)
{
arg = startarg;
! failed = ex_defer_inner(name, &arg, partial, &evalarg) == FAIL;
}
else
{
--- 5878,5884 ----
if (eap->cmdidx == CMD_defer)
{
arg = startarg;
! failed = ex_defer_inner(name, &arg, type, partial, &evalarg) == FAIL;
}
else
{
*** ../vim-9.0.0418/src/vim9instr.c 2022-09-04 12:47:15.414692249 +0100
--- src/vim9instr.c 2022-09-08 19:39:51.440072875 +0100
***************
*** 1329,1361 ****
return OK;
}

-
/*
! * Generate an ISN_BCALL instruction.
! * "method_call" is TRUE for "value->method()"
! * Return FAIL if the number of arguments is wrong.
*/
int
! generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call)
{
- isn_T *isn;
garray_T *stack = &cctx->ctx_type_stack;
! int argoff;
! type2_T *typep;
! type2_T *argtypes = NULL;
! type2_T shuffled_argtypes[MAX_FUNC_ARGS];
! type2_T *maptype = NULL;
! type_T *type;
! type_T *decl_type;

- RETURN_OK_IF_SKIP(cctx);
- argoff = check_internal_func(func_idx, argcount);
if (argoff < 0)
return FAIL;

if (method_call && argoff > 1)
{
! if ((isn = generate_instr(cctx, ISN_SHUFFLE)) == NULL)
return FAIL;
isn->isn_arg.shuffle.shfl_item = argcount;
isn->isn_arg.shuffle.shfl_up = argoff - 1;
--- 1329,1359 ----
return OK;
}

/*
! * Check "argount" arguments and their types on the type stack.
! * Give an error and return FAIL if something is wrong.
! * When "method_call" is NULL no code is generated.
*/
int
! check_internal_func_args(
! cctx_T *cctx,
! int func_idx,
! int argcount,
! int method_call,
! type2_T **argtypes,
! type2_T *shuffled_argtypes)
{
garray_T *stack = &cctx->ctx_type_stack;
! int argoff = check_internal_func(func_idx, argcount);

if (argoff < 0)
return FAIL;

if (method_call && argoff > 1)
{
! isn_T *isn = generate_instr(cctx, ISN_SHUFFLE);
!
! if (isn == NULL)
return FAIL;
isn->isn_arg.shuffle.shfl_item = argcount;
isn->isn_arg.shuffle.shfl_up = argoff - 1;
***************
*** 1363,1379 ****

if (argcount > 0)
{
// Check the types of the arguments.
- typep = ((type2_T *)stack->ga_data) + stack->ga_len - argcount;
if (method_call && argoff > 1)
{
int i;

for (i = 0; i < argcount; ++i)
shuffled_argtypes[i] = (i < argoff - 1)
! ? typep[i + 1]
! : (i == argoff - 1) ? typep[0] : typep[i];
! argtypes = shuffled_argtypes;
}
else
{
--- 1361,1378 ----

if (argcount > 0)
{
+ type2_T *typep = ((type2_T *)stack->ga_data) + stack->ga_len - argcount;
+
// Check the types of the arguments.
if (method_call && argoff > 1)
{
int i;

for (i = 0; i < argcount; ++i)
shuffled_argtypes[i] = (i < argoff - 1)
! ? typep[i + 1]
! : (i == argoff - 1) ? typep[0] : typep[i];
! *argtypes = shuffled_argtypes;
}
else
{
***************
*** 1381,1394 ****

for (i = 0; i < argcount; ++i)
shuffled_argtypes[i] = typep[i];
! argtypes = shuffled_argtypes;
}
! if (internal_func_check_arg_types(argtypes, func_idx, argcount,
cctx) == FAIL)
return FAIL;
- if (internal_func_is_map(func_idx))
- maptype = argtypes;
}

if ((isn = generate_instr(cctx, ISN_BCALL)) == NULL)
return FAIL;
--- 1380,1418 ----

for (i = 0; i < argcount; ++i)
shuffled_argtypes[i] = typep[i];
! *argtypes = shuffled_argtypes;
}
! if (internal_func_check_arg_types(*argtypes, func_idx, argcount,
cctx) == FAIL)
return FAIL;
}
+ return OK;
+ }
+
+ /*
+ * Generate an ISN_BCALL instruction.
+ * "method_call" is TRUE for "value->method()"
+ * Return FAIL if the number of arguments is wrong.
+ */
+ int
+ generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call)
+ {
+ isn_T *isn;
+ garray_T *stack = &cctx->ctx_type_stack;
+ type2_T *argtypes = NULL;
+ type2_T shuffled_argtypes[MAX_FUNC_ARGS];
+ type2_T *maptype = NULL;
+ type_T *type;
+ type_T *decl_type;
+
+ RETURN_OK_IF_SKIP(cctx);
+
+ if (check_internal_func_args(cctx, func_idx, argcount, method_call,
+ &argtypes, shuffled_argtypes) == FAIL)
+ return FAIL;
+
+ if (internal_func_is_map(func_idx))
+ maptype = argtypes;

if ((isn = generate_instr(cctx, ISN_BCALL)) == NULL)
return FAIL;
***************
*** 1578,1583 ****
--- 1602,1662 ----
}

/*
+ * Check the arguments of function "type" against the types on the stack.
+ * Returns OK or FAIL;
+ */
+ int
+ check_func_args_from_type(
+ cctx_T *cctx,
+ type_T *type,
+ int argcount,
+ int at_top,
+ char_u *name)
+ {
+ if (type->tt_argcount != -1)
+ {
+ int varargs = (type->tt_flags & TTFLAG_VARARGS) ? 1 : 0;
+
+ if (argcount < type->tt_min_argcount - varargs)
+ {
+ emsg_funcname(e_not_enough_arguments_for_function_str, name);
+ return FAIL;
+ }
+ if (!varargs && argcount > type->tt_argcount)
+ {
+ emsg_funcname(e_too_many_arguments_for_function_str, name);
+ return FAIL;
+ }
+ if (type->tt_args != NULL)
+ {
+ int i;
+
+ for (i = 0; i < argcount; ++i)
+ {
+ int offset = -argcount + i - (at_top ? 0 : 1);
+ type_T *actual = get_type_on_stack(cctx, -1 - offset);
+ type_T *expected;
+
+ if (varargs && i >= type->tt_argcount - 1)
+ expected = type->tt_args[type->tt_argcount - 1]->tt_member;
+ else if (i >= type->tt_min_argcount
+ && actual->tt_type == VAR_SPECIAL)
+ expected = &t_any;
+ else
+ expected = type->tt_args[i];
+ if (need_type(actual, expected, offset, i + 1,
+ cctx, TRUE, FALSE) == FAIL)
+ {
+ arg_type_mismatch(expected, actual, i + 1);
+ return FAIL;
+ }
+ }
+ }
+ }
+
+ return OK;
+ }
+ /*
* Generate an ISN_PCALL instruction.
* "type" is the type of the FuncRef.
*/
***************
*** 1598,1644 ****
ret_type = &t_any;
else if (type->tt_type == VAR_FUNC || type->tt_type == VAR_PARTIAL)
{
! if (type->tt_argcount != -1)
! {
! int varargs = (type->tt_flags & TTFLAG_VARARGS) ? 1 : 0;
!
! if (argcount < type->tt_min_argcount - varargs)
! {
! emsg_funcname(e_not_enough_arguments_for_function_str, name);
! return FAIL;
! }
! if (!varargs && argcount > type->tt_argcount)
! {
! emsg_funcname(e_too_many_arguments_for_function_str, name);
! return FAIL;
! }
! if (type->tt_args != NULL)
! {
! int i;

- for (i = 0; i < argcount; ++i)
- {
- int offset = -argcount + i - (at_top ? 0 : 1);
- type_T *actual = get_type_on_stack(cctx, -1 - offset);
- type_T *expected;
-
- if (varargs && i >= type->tt_argcount - 1)
- expected = type->tt_args[
- type->tt_argcount - 1]->tt_member;
- else if (i >= type->tt_min_argcount
- && actual->tt_type == VAR_SPECIAL)
- expected = &t_any;
- else
- expected = type->tt_args[i];
- if (need_type(actual, expected, offset, i + 1,
- cctx, TRUE, FALSE) == FAIL)
- {
- arg_type_mismatch(expected, actual, i + 1);
- return FAIL;
- }
- }
- }
- }
ret_type = type->tt_member;
if (ret_type == &t_unknown)
// return type not known yet, use a runtime check
--- 1677,1685 ----
ret_type = &t_any;
else if (type->tt_type == VAR_FUNC || type->tt_type == VAR_PARTIAL)
{
! if (check_func_args_from_type(cctx, type, argcount, at_top, name) == FAIL)
! return FAIL;

ret_type = type->tt_member;
if (ret_type == &t_unknown)
// return type not known yet, use a runtime check
*** ../vim-9.0.0418/src/proto/vim9instr.pro 2022-09-03 21:35:50.184158219 +0100
--- src/proto/vim9instr.pro 2022-09-08 19:32:25.669422042 +0100
***************
*** 46,56 ****
--- 46,59 ----
int generate_JUMP_IF_ARG_SET(cctx_T *cctx, int arg_off);
int generate_FOR(cctx_T *cctx, int loop_idx);
int generate_TRYCONT(cctx_T *cctx, int levels, int where);
+ int check_internal_func_args(cctx_T *cctx, int func_idx, int argcount, int method_call, type2_T **argtypes, type2_T *shuffled_argtypes);
int generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call);
int generate_LISTAPPEND(cctx_T *cctx);
int generate_BLOBAPPEND(cctx_T *cctx);
+ int check_args_on_stack(cctx_T *cctx, ufunc_T *ufunc, int argcount);
int generate_CALL(cctx_T *cctx, ufunc_T *ufunc, int pushed_argcount);
int generate_UCALL(cctx_T *cctx, char_u *name, int argcount);
+ int check_func_args_from_type(cctx_T *cctx, type_T *type, int argcount, int at_top, char_u *name);
int generate_PCALL(cctx_T *cctx, int argcount, char_u *name, type_T *type, int at_top);
int generate_DEFER(cctx_T *cctx, int var_idx, int argcount);
int generate_STRINGMEMBER(cctx_T *cctx, char_u *name, size_t len);
*** ../vim-9.0.0418/src/vim9cmds.c 2022-09-04 18:08:00.327693560 +0100
--- src/vim9cmds.c 2022-09-08 19:35:10.052887004 +0100
***************
*** 1706,1738 ****
}

/*
- * Get the local variable index for deferred function calls.
- * Reserve it when not done already.
- * Returns zero for failure.
- */
- int
- get_defer_var_idx(cctx_T *cctx)
- {
- dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
- + cctx->ctx_ufunc->uf_dfunc_idx;
- if (dfunc->df_defer_var_idx == 0)
- {
- lvar_T *lvar = reserve_local(cctx, (char_u *)"@defer@", 7,
- TRUE, &t_list_any);
- if (lvar == NULL)
- return 0;
- dfunc->df_defer_var_idx = lvar->lv_idx + 1;
- }
- return dfunc->df_defer_var_idx;
- }
-
- /*
* Compile "defer func(arg)".
*/
char_u *
compile_defer(char_u *arg_start, cctx_T *cctx)
{
! char_u *p;
char_u *arg = arg_start;
int argcount = 0;
int defer_var_idx;
--- 1706,1717 ----
}

/*
* Compile "defer func(arg)".
*/
char_u *
compile_defer(char_u *arg_start, cctx_T *cctx)
{
! char_u *paren;
char_u *arg = arg_start;
int argcount = 0;
int defer_var_idx;
***************
*** 1741,1753 ****

// Get a funcref for the function name.
// TODO: better way to find the "(".
! p = vim_strchr(arg, '(');
! if (p == NULL)
{
semsg(_(e_missing_parenthesis_str), arg);
return NULL;
}
! *p = NUL;
func_idx = find_internal_func(arg);
if (func_idx >= 0)
// TODO: better type
--- 1720,1732 ----

// Get a funcref for the function name.
// TODO: better way to find the "(".
! paren = vim_strchr(arg, '(');
! if (paren == NULL)
{
semsg(_(e_missing_parenthesis_str), arg);
return NULL;
}
! *paren = NUL;
func_idx = find_internal_func(arg);
if (func_idx >= 0)
// TODO: better type
***************
*** 1755,1761 ****
&t_func_any, FALSE);
else if (compile_expr0(&arg, cctx) == FAIL)
return NULL;
! *p = '(';

// check for function type
type = get_type_on_stack(cctx, 0);
--- 1734,1740 ----
&t_func_any, FALSE);
else if (compile_expr0(&arg, cctx) == FAIL)
return NULL;
! *paren = '(';

// check for function type
type = get_type_on_stack(cctx, 0);
***************
*** 1766,1776 ****
}

// compile the arguments
! arg = skipwhite(p + 1);
if (compile_arguments(&arg, cctx, &argcount, CA_NOT_SPECIAL) == FAIL)
return NULL;

! // TODO: check argument count with "type"

defer_var_idx = get_defer_var_idx(cctx);
if (defer_var_idx == 0)
--- 1745,1766 ----
}

// compile the arguments
! arg = skipwhite(paren + 1);
if (compile_arguments(&arg, cctx, &argcount, CA_NOT_SPECIAL) == FAIL)
return NULL;

! if (func_idx >= 0)
! {
! type2_T *argtypes = NULL;
! type2_T shuffled_argtypes[MAX_FUNC_ARGS];
!
! if (check_internal_func_args(cctx, func_idx, argcount, FALSE,
! &argtypes, shuffled_argtypes) == FAIL)
! return NULL;
! }
! else if (check_func_args_from_type(cctx, type, argcount, TRUE,
! arg_start) == FAIL)
! return NULL;

defer_var_idx = get_defer_var_idx(cctx);
if (defer_var_idx == 0)
*** ../vim-9.0.0418/src/testdir/test_user_func.vim 2022-09-07 17:28:05.849865176 +0100
--- src/testdir/test_user_func.vim 2022-09-08 19:43:53.927437408 +0100
***************
*** 5,10 ****
--- 5,11 ----

source check.vim
source shared.vim
+ import './vim9.vim' as v9

func Table(title, ...)
let ret = a:title
***************
*** 619,625 ****
DeferLevelOne()
END
call writefile(lines, 'XdeferQuitall', 'D')
! let res = system(GetVimCommandClean() .. ' -X -S XdeferQuitall')
call assert_equal(0, v:shell_error)
call assert_false(filereadable('XQuitallOne'))
call assert_false(filereadable('XQuitallTwo'))
--- 620,626 ----
DeferLevelOne()
END
call writefile(lines, 'XdeferQuitall', 'D')
! let res = system(GetVimCommand() .. ' -X -S XdeferQuitall')
call assert_equal(0, v:shell_error)
call assert_false(filereadable('XQuitallOne'))
call assert_false(filereadable('XQuitallTwo'))
***************
*** 641,647 ****
call Test_defer_in_funcref()
END
call writefile(lines, 'XdeferQuitallExpr', 'D')
! let res = system(GetVimCommandClean() .. ' -X -S XdeferQuitallExpr')
call assert_equal(0, v:shell_error)
call assert_false(filereadable('Xentry0'))
call assert_false(filereadable('Xentry1'))
--- 642,648 ----
call Test_defer_in_funcref()
END
call writefile(lines, 'XdeferQuitallExpr', 'D')
! let res = system(GetVimCommand() .. ' -X -S XdeferQuitallExpr')
call assert_equal(0, v:shell_error)
call assert_false(filereadable('Xentry0'))
call assert_false(filereadable('Xentry1'))
***************
*** 695,699 ****
--- 696,755 ----
assert_false(filereadable('Xentry2'))
enddef

+ func Test_defer_wrong_arguments()
+ call assert_fails('defer delete()', 'E119:')
+ call assert_fails('defer FuncIndex(1)', 'E119:')
+ call assert_fails('defer delete(1, 2, 3)', 'E118:')
+ call assert_fails('defer FuncIndex(1, 2, 3)', 'E118:')
+
+ let lines =<< trim END
+ def DeferFunc0()
+ defer delete()
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E119:')
+ let lines =<< trim END
+ def DeferFunc3()
+ defer delete(1, 2, 3)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E118:')
+ let lines =<< trim END
+ def DeferFunc2()
+ defer delete(1, 2)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number')
+
+ def g:FuncOneArg(arg: string)
+ echo arg
+ enddef
+
+ let lines =<< trim END
+ def DeferUserFunc0()
+ defer g:FuncOneArg()
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E119:')
+ let lines =<< trim END
+ def DeferUserFunc2()
+ defer g:FuncOneArg(1, 2)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E118:')
+ let lines =<< trim END
+ def DeferUserFunc1()
+ defer g:FuncOneArg(1)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number')
+ endfunc
+

" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-9.0.0418/src/version.c 2022-09-08 16:39:16.912140162 +0100
--- src/version.c 2022-09-08 19:49:53.546558746 +0100
***************
*** 705,706 ****
--- 705,708 ----
{ /* Add new patch number below this line */
+ /**/
+ 419,
/**/

--
One difference between a man and a machine is that a machine is quiet
when well oiled.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///

Bram Moolenaar

unread,
Sep 8, 2022, 3:57:56 PM9/8/22
to vim...@googlegroups.com

I wrote:

> Patch 9.0.0418
> Problem: Manually deleting temp test files.
> Solution: Use the 'D' flag of writefile() and mkdir().
> Files: src/testdir/test_cd.vim, src/testdir/test_changelist.vim,
> src/testdir/test_channel.vim, src/testdir/test_checkpath.vim,
> src/testdir/test_cmdline.vim, src/testdir/test_cmdwin.vim,
> src/testdir/test_conceal.vim, src/testdir/test_cpoptions.vim,
> src/testdir/test_cscope.vim, src/testdir/test_cursorline.vim
>
>
> *** ../vim-9.0.0418/src/userfunc.c 2022-09-07 21:30:40.139379052 +0100
> --- src/userfunc.c 2022-09-08 18:11:09.503285696 +0100

That's the wrong diff. This should be the right one:


*** ../vim-9.0.0417/src/testdir/test_cd.vim 2022-08-29 22:31:15.919685279 +0100
--- src/testdir/test_cd.vim 2022-09-08 16:33:06.829221261 +0100
***************
*** 58,75 ****
call writefile(v:errors, 'Xresult')
qall!
[SCRIPT]
! call writefile(lines, 'Xscript')
if RunVim([], [], '--clean -S Xscript')
call assert_equal([], readfile('Xresult'))
endif
- call delete('Xscript')
call delete('Xresult')
endfunc

" Test for chdir()
func Test_chdir_func()
let topdir = getcwd()
! call mkdir('Xchdir/y/z', 'p')

" Create a few tabpages and windows with different directories
new
--- 58,74 ----
call writefile(v:errors, 'Xresult')
qall!
[SCRIPT]
! call writefile(lines, 'Xscript', 'D')
if RunVim([], [], '--clean -S Xscript')
call assert_equal([], readfile('Xresult'))
endif
call delete('Xresult')
endfunc

" Test for chdir()
func Test_chdir_func()
let topdir = getcwd()
! call mkdir('Xchdir/y/z', 'pR')

" Create a few tabpages and windows with different directories
new
***************
*** 110,122 ****

only | tabonly
call chdir(topdir)
- call delete('Xchdir', 'rf')
endfunc

" Test for changing to the previous directory '-'
func Test_prev_dir()
let topdir = getcwd()
! call mkdir('Xprevdir/a/b/c', 'p')

" Create a few tabpages and windows with different directories
new | only
--- 109,120 ----

only | tabonly
call chdir(topdir)
endfunc

" Test for changing to the previous directory '-'
func Test_prev_dir()
let topdir = getcwd()
! call mkdir('Xprevdir/a/b/c', 'pR')

" Create a few tabpages and windows with different directories
new | only
***************
*** 173,179 ****

only | tabonly
call chdir(topdir)
- call delete('Xprevdir', 'rf')
endfunc

func Test_lcd_split()
--- 171,176 ----
***************
*** 201,222 ****
endfunc

func Test_cd_completion()
! call mkdir('XComplDir1', 'p')
! call mkdir('XComplDir2', 'p')
! call writefile([], 'XComplFile')

for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir']
call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/', @:)
endfor
-
- call delete('XComplDir1', 'd')
- call delete('XComplDir2', 'd')
- call delete('XComplFile')
endfunc

func Test_cd_unknown_dir()
! call mkdir('Xa')
cd Xa
call writefile(['text'], 'Xb.txt')
edit Xa/Xb.txt
--- 198,215 ----
endfunc

func Test_cd_completion()
! call mkdir('XComplDir1', 'D')
! call mkdir('XComplDir2', 'D')
! call writefile([], 'XComplFile', 'D')

for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir']
call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/', @:)
endfor
endfunc

func Test_cd_unknown_dir()
! call mkdir('Xa', 'R')
cd Xa
call writefile(['text'], 'Xb.txt')
edit Xa/Xb.txt
***************
*** 229,242 ****

bwipe!
exe "bwipe! " .. first_buf
- call delete('Xa', 'rf')
endfunc

func Test_getcwd_actual_dir()
CheckOption autochdir

let startdir = getcwd()
! call mkdir('Xactual')
call test_autochdir()
set autochdir
edit Xactual/file.txt
--- 222,234 ----

bwipe!
exe "bwipe! " .. first_buf
endfunc

func Test_getcwd_actual_dir()
CheckOption autochdir

let startdir = getcwd()
! call mkdir('Xactual', 'R')
call test_autochdir()
set autochdir
edit Xactual/file.txt
***************
*** 250,256 ****
set noautochdir
bwipe!
call chdir(startdir)
- call delete('Xactual', 'rf')
endfunc

" vim: shiftwidth=2 sts=2 expandtab
--- 242,247 ----
*** ../vim-9.0.0417/src/testdir/test_changelist.vim 2022-08-30 21:46:03.657214444 +0100
--- src/testdir/test_changelist.vim 2022-09-08 16:33:49.105193035 +0100
***************
*** 64,71 ****
call assert_equal([], 10->getchangelist())
call assert_equal([[], 0], getchangelist())

! call writefile(['line1', 'line2', 'line3'], 'Xclistfile1.txt')
! call writefile(['line1', 'line2', 'line3'], 'Xclistfile2.txt')

edit Xclistfile1.txt
let buf_1 = bufnr()
--- 64,71 ----
call assert_equal([], 10->getchangelist())
call assert_equal([[], 0], getchangelist())

! call writefile(['line1', 'line2', 'line3'], 'Xclistfile1.txt', 'D')
! call writefile(['line1', 'line2', 'line3'], 'Xclistfile2.txt', 'D')

edit Xclistfile1.txt
let buf_1 = bufnr()
***************
*** 100,107 ****
\ getchangelist(buf_2))

bwipe!
- call delete('Xclistfile1.txt')
- call delete('Xclistfile2.txt')
endfunc

" vim: shiftwidth=2 sts=2 expandtab
--- 100,105 ----
*** ../vim-9.0.0417/src/testdir/test_channel.vim 2022-08-30 19:48:17.206760205 +0100
--- src/testdir/test_channel.vim 2022-09-08 16:15:23.413318159 +0100
***************
*** 714,720 ****
endfunc

func Test_nl_read_file()
! call writefile(['echo something', 'echoerr wrong', 'double this'], 'Xinput')
let g:job = job_start(s:python . " test_channel_pipe.py",
\ {'in_io': 'file', 'in_name': 'Xinput'})
call assert_equal("run", job_status(g:job))
--- 714,720 ----
endfunc

func Test_nl_read_file()
! call writefile(['echo something', 'echoerr wrong', 'double this'], 'Xinput', 'D')
let g:job = job_start(s:python . " test_channel_pipe.py",
\ {'in_io': 'file', 'in_name': 'Xinput'})
call assert_equal("run", job_status(g:job))
***************
*** 726,732 ****
call assert_equal("AND this", ch_readraw(handle))
finally
call Stop_g_job()
- call delete('Xinput')
endtry
call assert_fails("echo ch_read(test_null_channel(), {'callback' : 'abc'})", 'E475:')
endfunc
--- 726,731 ----
***************
*** 1161,1174 ****
endif
call job_start(cmd, #{out_io: 'buffer', out_name: 'Xscrollbuffer'})
END
! call writefile(lines, 'XtestBufferScroll')
let buf = RunVimInTerminal('-S XtestBufferScroll', #{rows: 10})
call TermWait(buf, 50)
call VerifyScreenDump(buf, 'Test_job_buffer_scroll_1', {})

" clean up
call StopVimInTerminal(buf)
- call delete('XtestBufferScroll')
endfunc

func Test_pipe_null()
--- 1160,1172 ----
endif
call job_start(cmd, #{out_io: 'buffer', out_name: 'Xscrollbuffer'})
END
! call writefile(lines, 'XtestBufferScroll', 'D')
let buf = RunVimInTerminal('-S XtestBufferScroll', #{rows: 10})
call TermWait(buf, 50)
call VerifyScreenDump(buf, 'Test_job_buffer_scroll_1', {})

" clean up
call StopVimInTerminal(buf)
endfunc

func Test_pipe_null()
***************
*** 2178,2184 ****
func Test_job_tty_in_out()
CheckUnix

! call writefile(['test'], 'Xtestin')
let in_opts = [{},
\ {'in_io': 'null'},
\ {'in_io': 'file', 'in_name': 'Xtestin'}]
--- 2176,2182 ----
func Test_job_tty_in_out()
CheckUnix

! call writefile(['test'], 'Xtestin', 'D')
let in_opts = [{},
\ {'in_io': 'null'},
\ {'in_io': 'file', 'in_name': 'Xtestin'}]
***************
*** 2220,2226 ****
call WaitForAssert({-> assert_equal('dead', job_status(job))})
endfor

- call delete('Xtestin')
call delete('Xtestout')
call delete('Xtesterr')
endfunc
--- 2218,2223 ----
***************
*** 2281,2289 ****
let text = readfile('Xlog')
call assert_match("hello there", text[1])
call assert_match("%s%s", text[2])
! call mkdir("Xchlogdir1")
call assert_fails("call ch_logfile('Xchlogdir1')", 'E484:')
! cal delete("Xchlogdir1", 'd')
call delete('Xlog')
endfunc

--- 2278,2286 ----
let text = readfile('Xlog')
call assert_match("hello there", text[1])
call assert_match("%s%s", text[2])
! call mkdir("Xchlogdir1", 'D')
call assert_fails("call ch_logfile('Xchlogdir1')", 'E484:')
!
call delete('Xlog')
endfunc

*** ../vim-9.0.0417/src/testdir/test_checkpath.vim 2022-08-29 22:31:15.919685279 +0100
--- src/testdir/test_checkpath.vim 2022-09-08 16:16:52.301354972 +0100
***************
*** 2,8 ****

" Test for 'include' without \zs or \ze
func Test_checkpath1()
! call mkdir("Xcheckdir1/dir2", "p")
call writefile(['#include "bar.a"'], 'Xcheckdir1/dir2/foo.a')
call writefile(['#include "baz.a"'], 'Xcheckdir1/dir2/bar.a')
call writefile(['#include "foo.a"'], 'Xcheckdir1/dir2/baz.a')
--- 2,8 ----

" Test for 'include' without \zs or \ze
func Test_checkpath1()
! call mkdir("Xcheckdir1/dir2", "pR")
call writefile(['#include "bar.a"'], 'Xcheckdir1/dir2/foo.a')
call writefile(['#include "baz.a"'], 'Xcheckdir1/dir2/bar.a')
call writefile(['#include "foo.a"'], 'Xcheckdir1/dir2/baz.a')
***************
*** 23,29 ****

enew
call delete("./Xbase.a")
- call delete("Xcheckdir1", "rf")
set path&
endfunc

--- 23,28 ----
***************
*** 33,43 ****

" Test for 'include' with \zs and \ze
func Test_checkpath2()
! call mkdir("Xcheckdir2/dir2", "p")
call writefile(['%inc /bar/'], 'Xcheckdir2/dir2/foo.b')
call writefile(['%inc /baz/'], 'Xcheckdir2/dir2/bar.b')
call writefile(['%inc /foo/'], 'Xcheckdir2/dir2/baz.b')
! call writefile(['%inc /foo/'], 'Xbase.b')

let &include='^\s*%inc\s*/\zs[^/]\+\ze'
let &includeexpr='DotsToSlashes()'
--- 32,42 ----

" Test for 'include' with \zs and \ze
func Test_checkpath2()
! call mkdir("Xcheckdir2/dir2", "pR")
call writefile(['%inc /bar/'], 'Xcheckdir2/dir2/foo.b')
call writefile(['%inc /baz/'], 'Xcheckdir2/dir2/bar.b')
call writefile(['%inc /foo/'], 'Xcheckdir2/dir2/baz.b')
! call writefile(['%inc /foo/'], 'Xbase.b', 'D')

let &include='^\s*%inc\s*/\zs[^/]\+\ze'
let &includeexpr='DotsToSlashes()'
***************
*** 56,63 ****
\ ' foo (Already listed)'], res)

enew
- call delete("./Xbase.b")
- call delete("Xcheckdir2", "rf")
set path&
set include&
set includeexpr&
--- 55,60 ----
***************
*** 72,83 ****

" Test for 'include' with \zs and no \ze
func Test_checkpath3()
! call mkdir("Xcheckdir3/dir2", "p")
call writefile(['%inc bar.c'], 'Xcheckdir3/dir2/foo.c')
call writefile(['%inc baz.c'], 'Xcheckdir3/dir2/bar.c')
call writefile(['%inc foo.c'], 'Xcheckdir3/dir2/baz.c')
call writefile(['%inc foo.c'], 'Xcheckdir3/dir2/FALSE.c')
! call writefile(['%inc FALSE.c foo.c'], 'Xbase.c')

let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
let &includeexpr='StripNewlineChar()'
--- 69,80 ----

" Test for 'include' with \zs and no \ze
func Test_checkpath3()
! call mkdir("Xcheckdir3/dir2", "pR")
call writefile(['%inc bar.c'], 'Xcheckdir3/dir2/foo.c')
call writefile(['%inc baz.c'], 'Xcheckdir3/dir2/bar.c')
call writefile(['%inc foo.c'], 'Xcheckdir3/dir2/baz.c')
call writefile(['%inc foo.c'], 'Xcheckdir3/dir2/FALSE.c')
! call writefile(['%inc FALSE.c foo.c'], 'Xbase.c', 'D')

let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
let &includeexpr='StripNewlineChar()'
***************
*** 96,103 ****
\ ' foo.c (Already listed)'], res)

enew
- call delete("./Xbase.c")
- call delete("Xcheckdir3", "rf")
set path&
set include&
set includeexpr&
--- 93,98 ----
*** ../vim-9.0.0417/src/testdir/test_cmdline.vim 2022-09-02 19:45:12.215205522 +0100
--- src/testdir/test_cmdline.vim 2022-09-08 16:25:44.665361233 +0100
***************
*** 20,33 ****
endfunc

func Test_complete_tab()
! call writefile(['testfile'], 'Xtestfile')
call feedkeys(":e Xtest\t\r", "tx")
call assert_equal('testfile', getline(1))

" Pressing <Tab> after '%' completes the current file, also on MS-Windows
call feedkeys(":e %\t\r", "tx")
call assert_equal('e Xtestfile', @:)
- call delete('Xtestfile')
endfunc

func Test_complete_list()
--- 20,32 ----
endfunc

func Test_complete_tab()
! call writefile(['testfile'], 'Xtestfile', 'D')
call feedkeys(":e Xtest\t\r", "tx")
call assert_equal('testfile', getline(1))

" Pressing <Tab> after '%' completes the current file, also on MS-Windows
call feedkeys(":e %\t\r", "tx")
call assert_equal('e Xtestfile', @:)
endfunc

func Test_complete_list()
***************
*** 42,48 ****

" Test for displaying the tail of the completion matches
set wildmode=longest,full
! call mkdir('Xtest')
call writefile([], 'Xtest/a.c')
call writefile([], 'Xtest/a.h')
let g:Sline = ''
--- 41,47 ----

" Test for displaying the tail of the completion matches
set wildmode=longest,full
! call mkdir('Xtest', 'R')
call writefile([], 'Xtest/a.c')
call writefile([], 'Xtest/a.h')
let g:Sline = ''
***************
*** 78,89 ****
call assert_equal(':e Xtes[/', g:Sline)
call assert_equal('"e Xtes[/', @:)

- call delete('Xtest', 'rf')
set wildmode&
endfunc

func Test_complete_wildmenu()
! call mkdir('Xwilddir1/Xdir2', 'p')
call writefile(['testfile1'], 'Xwilddir1/Xtestfile1')
call writefile(['testfile2'], 'Xwilddir1/Xtestfile2')
call writefile(['testfile3'], 'Xwilddir1/Xdir2/Xtestfile3')
--- 77,87 ----
call assert_equal(':e Xtes[/', g:Sline)
call assert_equal('"e Xtes[/', @:)

set wildmode&
endfunc

func Test_complete_wildmenu()
! call mkdir('Xwilddir1/Xdir2', 'pR')
call writefile(['testfile1'], 'Xwilddir1/Xtestfile1')
call writefile(['testfile2'], 'Xwilddir1/Xtestfile2')
call writefile(['testfile3'], 'Xwilddir1/Xdir2/Xtestfile3')
***************
*** 162,168 ****

" cleanup
%bwipe
- call delete('Xwilddir1', 'rf')
set nowildmenu
endfunc

--- 160,165 ----
***************
*** 172,178 ****
let lines =<< trim [SCRIPT]
set wildmenu hlsearch
[SCRIPT]
! call writefile(lines, 'XTest_wildmenu')

let buf = RunVimInTerminal('-S XTest_wildmenu', {'rows': 8})
call term_sendkeys(buf, ":vim\<Tab>")
--- 169,175 ----
let lines =<< trim [SCRIPT]
set wildmenu hlsearch
[SCRIPT]
! call writefile(lines, 'XTest_wildmenu', 'D')

let buf = RunVimInTerminal('-S XTest_wildmenu', {'rows': 8})
call term_sendkeys(buf, ":vim\<Tab>")
***************
*** 190,196 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_wildmenu')
endfunc

func Test_redraw_in_autocmd()
--- 187,192 ----
***************
*** 200,206 ****
set cmdheight=2
autocmd CmdlineChanged * redraw
END
! call writefile(lines, 'XTest_redraw')

let buf = RunVimInTerminal('-S XTest_redraw', {'rows': 8})
call term_sendkeys(buf, ":for i in range(3)\<CR>")
--- 196,202 ----
set cmdheight=2
autocmd CmdlineChanged * redraw
END
! call writefile(lines, 'XTest_redraw', 'D')

let buf = RunVimInTerminal('-S XTest_redraw', {'rows': 8})
call term_sendkeys(buf, ":for i in range(3)\<CR>")
***************
*** 212,218 ****
" clean up
call term_sendkeys(buf, "\<CR>")
call StopVimInTerminal(buf)
- call delete('XTest_redraw')
endfunc

func Test_changing_cmdheight()
--- 208,213 ----
***************
*** 221,227 ****
let lines =<< trim END
set cmdheight=1 laststatus=2
END
! call writefile(lines, 'XTest_cmdheight')

let buf = RunVimInTerminal('-S XTest_cmdheight', {'rows': 8})
call term_sendkeys(buf, ":resize -3\<CR>")
--- 216,222 ----
let lines =<< trim END
set cmdheight=1 laststatus=2
END
! call writefile(lines, 'XTest_cmdheight', 'D')

let buf = RunVimInTerminal('-S XTest_cmdheight', {'rows': 8})
call term_sendkeys(buf, ":resize -3\<CR>")
***************
*** 246,252 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_cmdheight')
endfunc

func Test_map_completion()
--- 241,246 ----
***************
*** 455,464 ****
call assert_true(index(l, 'runtest.vim') < 0)
set wildignore&
" Directory name with space character
! call mkdir('Xdir with space')
call assert_equal(['Xdir with space/'], getcompletion('Xdir\ w', 'shellcmd'))
call assert_equal(['./Xdir with space/'], getcompletion('./Xdir', 'shellcmd'))
- call delete('Xdir with space', 'd')

let l = getcompletion('ha', 'filetype')
call assert_true(index(l, 'hamster') >= 0)
--- 449,457 ----
call assert_true(index(l, 'runtest.vim') < 0)
set wildignore&
" Directory name with space character
! call mkdir('Xdir with space', 'D')
call assert_equal(['Xdir with space/'], getcompletion('Xdir\ w', 'shellcmd'))
call assert_equal(['./Xdir with space/'], getcompletion('./Xdir', 'shellcmd'))

let l = getcompletion('ha', 'filetype')
call assert_true(index(l, 'hamster') >= 0)
***************
*** 581,594 ****
endif

set tags=Xtags
! call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags')

for name in names
let matchcount = len(getcompletion('', name))
call assert_true(matchcount >= 0, 'No matches for ' . name)
endfor

- call delete('Xtags')
set tags&

edit a~b
--- 574,586 ----
endif

set tags=Xtags
! call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags', 'D')

for name in names
let matchcount = len(getcompletion('', name))
call assert_true(matchcount >= 0, 'No matches for ' . name)
endfor

set tags&

edit a~b
***************
*** 633,639 ****
enddef
echo this will cause an error
END
! call mkdir('Xdir/autoload', 'p')
call writefile(lines, 'Xdir/autoload/script.vim')
exe 'set rtp+=' .. getcwd() .. '/Xdir'

--- 625,631 ----
enddef
echo this will cause an error
END
! call mkdir('Xdir/autoload', 'pR')
call writefile(lines, 'Xdir/autoload/script.vim')
exe 'set rtp+=' .. getcwd() .. '/Xdir'

***************
*** 647,653 ****
call v9.CheckScriptFailure(lines, 'E121: Undefined variable: this')

let &rtp = save_rtp
- call delete('Xdir', 'rf')
endfunc

func Test_fullcommand()
--- 639,644 ----
***************
*** 698,704 ****
func Test_shellcmd_completion()
let save_path = $PATH

! call mkdir('Xpathdir/Xpathsubdir', 'p')
call writefile([''], 'Xpathdir/Xfile.exe')
call setfperm('Xpathdir/Xfile.exe', 'rwx------')

--- 689,695 ----
func Test_shellcmd_completion()
let save_path = $PATH

! call mkdir('Xpathdir/Xpathsubdir', 'pR')
call writefile([''], 'Xpathdir/Xfile.exe')
call setfperm('Xpathdir/Xfile.exe', 'rwx------')

***************
*** 714,730 ****
call insert(expected, 'Xfile.exe')
call assert_equal(expected, actual)

- call delete('Xpathdir', 'rf')
let $PATH = save_path
endfunc

func Test_expand_star_star()
! call mkdir('a/b', 'p')
call writefile(['asdfasdf'], 'a/b/fileXname')
call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt')
call assert_equal('find a/b/fileXname', @:)
bwipe!
- call delete('a', 'rf')
endfunc

func Test_cmdline_paste()
--- 705,719 ----
call insert(expected, 'Xfile.exe')
call assert_equal(expected, actual)

let $PATH = save_path
endfunc

func Test_expand_star_star()
! call mkdir('a/b', 'pR')
call writefile(['asdfasdf'], 'a/b/fileXname')
call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt')
call assert_equal('find a/b/fileXname', @:)
bwipe!
endfunc

func Test_cmdline_paste()
***************
*** 832,845 ****
endfunc

func Test_illegal_address2()
! call writefile(['c', 'x', ' x', '.', '1;y'], 'Xtest.vim')
new
source Xtest.vim
" Trigger calling validate_cursor()
diffsp Xtest.vim
quit!
bwipe!
- call delete('Xtest.vim')
endfunc

func Test_mark_from_line_zero()
--- 821,833 ----
endfunc

func Test_illegal_address2()
! call writefile(['c', 'x', ' x', '.', '1;y'], 'Xtest.vim', 'D')
new
source Xtest.vim
" Trigger calling validate_cursor()
diffsp Xtest.vim
quit!
bwipe!
endfunc

func Test_mark_from_line_zero()
***************
*** 1035,1048 ****
call assert_equal("\"sI \<C-A>", @:)

" completion for :write command
! call mkdir('Xcwdir')
call writefile(['one'], 'Xcwdir/Xfile1')
let save_cwd = getcwd()
cd Xcwdir
call feedkeys(":w >> \<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"w >> Xfile1", @:)
call chdir(save_cwd)
- call delete('Xcwdir', 'rf')

" completion for :w ! and :r ! commands
call feedkeys(":w !invalid_xyz_cmd\<C-A>\<C-B>\"\<CR>", 'xt')
--- 1023,1035 ----
call assert_equal("\"sI \<C-A>", @:)

" completion for :write command
! call mkdir('Xcwdir', 'R')
call writefile(['one'], 'Xcwdir/Xfile1')
let save_cwd = getcwd()
cd Xcwdir
call feedkeys(":w >> \<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"w >> Xfile1", @:)
call chdir(save_cwd)

" completion for :w ! and :r ! commands
call feedkeys(":w !invalid_xyz_cmd\<C-A>\<C-B>\"\<CR>", 'xt')
***************
*** 1125,1136 ****
call assert_equal("\"doautocmd BufNew,BufEnter", @:)

" completion of file name in :doautocmd
! call writefile([], 'Xvarfile1')
! call writefile([], 'Xvarfile2')
call feedkeys(":doautocmd BufEnter Xvarfi\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"doautocmd BufEnter Xvarfile1 Xvarfile2", @:)
- call delete('Xvarfile1')
- call delete('Xvarfile2')

" completion for the :augroup command
augroup XTest.test
--- 1112,1121 ----
call assert_equal("\"doautocmd BufNew,BufEnter", @:)

" completion of file name in :doautocmd
! call writefile([], 'Xvarfile1', 'D')
! call writefile([], 'Xvarfile2', 'D')
call feedkeys(":doautocmd BufEnter Xvarfi\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"doautocmd BufEnter Xvarfile1 Xvarfile2", @:)

" completion for the :augroup command
augroup XTest.test
***************
*** 1272,1278 ****
" Test for 'wildignorecase'
func Test_cmdline_wildignorecase()
CheckUnix
! call writefile([], 'XTEST')
set wildignorecase
call feedkeys(":e xt\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e XTEST', @:)
--- 1257,1263 ----
" Test for 'wildignorecase'
func Test_cmdline_wildignorecase()
CheckUnix
! call writefile([], 'XTEST', 'D')
set wildignorecase
call feedkeys(":e xt\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e XTEST', @:)
***************
*** 1282,1288 ****
call assert_equal('"e xt', @:)
call assert_equal('XTEST', g:Sline)
set wildignorecase&
- call delete('XTEST')
endfunc

func Test_cmdline_write_alternatefile()
--- 1267,1272 ----
***************
*** 1408,1416 ****
let log = readfile('Xlog')
call assert_match("foo\nbar", join(log, "\n"))
call delete('Xlog')
! call mkdir('Xdir')
call assert_fails('set verbosefile=Xdir', ['E484:.*Xdir', 'E474:'])
- call delete('Xdir', 'd')
endfunc

func Test_verbose_option()
--- 1392,1400 ----
let log = readfile('Xlog')
call assert_match("foo\nbar", join(log, "\n"))
call delete('Xlog')
!
! call mkdir('Xdir', 'D')
call assert_fails('set verbosefile=Xdir', ['E484:.*Xdir', 'E474:'])
endfunc

func Test_verbose_option()
***************
*** 1421,1427 ****
call feedkeys("\r", 't') " for the hit-enter prompt
set verbose=20
[SCRIPT]
! call writefile(lines, 'XTest_verbose')

let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12})
call TermWait(buf, 50)
--- 1405,1411 ----
call feedkeys("\r", 't') " for the hit-enter prompt
set verbose=20
[SCRIPT]
! call writefile(lines, 'XTest_verbose', 'D')

let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12})
call TermWait(buf, 50)
***************
*** 1430,1436 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_verbose')
endfunc

func Test_setcmdpos()
--- 1414,1419 ----
***************
*** 1533,1539 ****
call setline(1, range(30))
[SCRIPT]

! call writefile(lines, 'XtestCmdlineClearTabenter')
let buf = RunVimInTerminal('-S XtestCmdlineClearTabenter', #{rows: 10})
call TermWait(buf, 25)
" in one tab make the command line higher with CTRL-W -
--- 1516,1522 ----
call setline(1, range(30))
[SCRIPT]

! call writefile(lines, 'XtestCmdlineClearTabenter', 'D')
let buf = RunVimInTerminal('-S XtestCmdlineClearTabenter', #{rows: 10})
call TermWait(buf, 25)
" in one tab make the command line higher with CTRL-W -
***************
*** 1541,1547 ****
call VerifyScreenDump(buf, 'Test_cmdlineclear_tabenter', {})

call StopVimInTerminal(buf)
- call delete('XtestCmdlineClearTabenter')
endfunc

" Test for expanding special keywords in cmdline
--- 1524,1529 ----
***************
*** 1552,1565 ****
call assert_fails('e <abuf>', 'E496:')
call assert_fails('e <amatch>', 'E497:')

! call writefile([], 'Xfile.cpp')
! call writefile([], 'Xfile.java')
new Xfile.cpp
call feedkeys(":e %:r\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e Xfile.cpp Xfile.java', @:)
close
- call delete('Xfile.cpp')
- call delete('Xfile.java')
endfunc

" Test for backtick expression in the command line
--- 1534,1545 ----
call assert_fails('e <abuf>', 'E496:')
call assert_fails('e <amatch>', 'E497:')

! call writefile([], 'Xfile.cpp', 'D')
! call writefile([], 'Xfile.java', 'D')
new Xfile.cpp
call feedkeys(":e %:r\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e Xfile.cpp Xfile.java', @:)
close
endfunc

" Test for backtick expression in the command line
***************
*** 1593,1603 ****
call delete('Xfile.out')
qall!
[SCRIPT]
! call writefile(lines, 'Xscript')
if RunVim([], [], '--clean -S Xscript')
call assert_equal([], readfile('Xresult'))
endif
- call delete('Xscript')
call delete('Xresult')
endfunc

--- 1573,1582 ----
call delete('Xfile.out')
qall!
[SCRIPT]
! call writefile(lines, 'Xscript', 'D')
if RunVim([], [], '--clean -S Xscript')
call assert_equal([], readfile('Xresult'))
endif
call delete('Xresult')
endfunc

***************
*** 1619,1625 ****

" Test for using ~ for home directory in cmdline completion matches
func Test_cmdline_expand_home()
! call mkdir('Xexpdir')
call writefile([], 'Xexpdir/Xfile1')
call writefile([], 'Xexpdir/Xfile2')
cd Xexpdir
--- 1598,1604 ----

" Test for using ~ for home directory in cmdline completion matches
func Test_cmdline_expand_home()
! call mkdir('Xexpdir', 'R')
call writefile([], 'Xexpdir/Xfile1')
call writefile([], 'Xexpdir/Xfile2')
cd Xexpdir
***************
*** 1629,1635 ****
call assert_equal('"e ~/Xfile1 ~/Xfile2', @:)
let $HOME = save_HOME
cd ..
- call delete('Xexpdir', 'rf')
endfunc

" Test for using CTRL-\ CTRL-G in the command line to go back to normal mode
--- 1608,1613 ----
***************
*** 1714,1721 ****
" Test for longest file name completion with 'fileignorecase'
" On MS-Windows, file names are case insensitive.
if has('unix')
! call writefile([], 'XTESTfoo')
! call writefile([], 'Xtestbar')
set nofileignorecase
call feedkeys(":e XT\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e XTESTfoo', @:)
--- 1692,1699 ----
" Test for longest file name completion with 'fileignorecase'
" On MS-Windows, file names are case insensitive.
if has('unix')
! call writefile([], 'XTESTfoo', 'D')
! call writefile([], 'Xtestbar', 'D')
set nofileignorecase
call feedkeys(":e XT\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e XTESTfoo', @:)
***************
*** 1727,1734 ****
call feedkeys(":e Xt\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e Xtest', @:)
set fileignorecase&
- call delete('XTESTfoo')
- call delete('Xtestbar')
endif

%argdelete
--- 1705,1710 ----
***************
*** 1750,1756 ****
endfunc

func Test_custom_complete_autoload()
! call mkdir('Xcustdir/autoload', 'p')
let save_rtp = &rtp
exe 'set rtp=' .. getcwd() .. '/Xcustdir'
let lines =<< trim END
--- 1726,1732 ----
endfunc

func Test_custom_complete_autoload()
! call mkdir('Xcustdir/autoload', 'pR')
let save_rtp = &rtp
exe 'set rtp=' .. getcwd() .. '/Xcustdir'
let lines =<< trim END
***************
*** 1769,1775 ****
let &rtp = save_rtp
set wildmode& wildmenu&
delcommand MyCmd
- call delete('Xcustdir', 'rf')
endfunc

" Test for interrupting the command-line completion
--- 1745,1750 ----
***************
*** 1946,1952 ****
func Test_wildmenu_dirstack()
CheckUnix
%bw!
! call mkdir('Xwildmenu/dir2/dir3/dir4', 'p')
call writefile([], 'Xwildmenu/file1_1.txt')
call writefile([], 'Xwildmenu/file1_2.txt')
call writefile([], 'Xwildmenu/dir2/file2_1.txt')
--- 1921,1927 ----
func Test_wildmenu_dirstack()
CheckUnix
%bw!
! call mkdir('Xwildmenu/dir2/dir3/dir4', 'pR')
call writefile([], 'Xwildmenu/file1_1.txt')
call writefile([], 'Xwildmenu/file1_2.txt')
call writefile([], 'Xwildmenu/dir2/file2_1.txt')
***************
*** 1974,1980 ****
call feedkeys(":e Xwildmenu/\<Tab>\<Down>\<Down>\<Down>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e Xwildmenu/dir2/dir3/dir4/file4_1.txt', @:)

- call delete('Xwildmenu', 'rf')
set wildmenu&
endfunc

--- 1949,1954 ----
***************
*** 2054,2062 ****

" Test for the 'suffixes' option
func Test_suffixes_opt()
! call writefile([], 'Xsuffile')
! call writefile([], 'Xsuffile.c')
! call writefile([], 'Xsuffile.o')
set suffixes=
call feedkeys(":e Xsuffi*\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e Xsuffile Xsuffile.c Xsuffile.o', @:)
--- 2028,2036 ----

" Test for the 'suffixes' option
func Test_suffixes_opt()
! call writefile([], 'Xsuffile', 'D')
! call writefile([], 'Xsuffile.c', 'D')
! call writefile([], 'Xsuffile.o', 'D')
set suffixes=
call feedkeys(":e Xsuffi*\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal('"e Xsuffile Xsuffile.c Xsuffile.o', @:)
***************
*** 2076,2084 ****
" Test for getcompletion() with different patterns
call assert_equal(['Xsuffile', 'Xsuffile.c', 'Xsuffile.o'], getcompletion('Xsuffile', 'file'))
call assert_equal(['Xsuffile'], getcompletion('Xsuffile$', 'file'))
- call delete('Xsuffile')
- call delete('Xsuffile.c')
- call delete('Xsuffile.o')
endfunc

" Test for using a popup menu for the command line completion matches
--- 2050,2055 ----
***************
*** 2120,2126 ****
call feedkeys(":edit $VIMRUNTIME/\<Tab>\<Left>\<C-U>ab\<Tab>")
endfunc
[CODE]
! call writefile(commands, 'Xtest')

let buf = RunVimInTerminal('-S Xtest', #{rows: 10})

--- 2091,2097 ----
call feedkeys(":edit $VIMRUNTIME/\<Tab>\<Left>\<C-U>ab\<Tab>")
endfunc
[CODE]
! call writefile(commands, 'Xtest', 'D')

let buf = RunVimInTerminal('-S Xtest', #{rows: 10})

***************
*** 2258,2264 ****
call VerifyScreenDump(buf, 'Test_wildmenu_pum_31', {})

" Tests a directory name contained full-width characters.
! call mkdir('Xnamedir/あいう', 'p')
call writefile([], 'Xnamedir/あいう/abc')
call writefile([], 'Xnamedir/あいう/xyz')
call writefile([], 'Xnamedir/あいう/123')
--- 2229,2235 ----
call VerifyScreenDump(buf, 'Test_wildmenu_pum_31', {})

" Tests a directory name contained full-width characters.
! call mkdir('Xnamedir/あいう', 'pR')
call writefile([], 'Xnamedir/あいう/abc')
call writefile([], 'Xnamedir/あいう/xyz')
call writefile([], 'Xnamedir/あいう/123')
***************
*** 2346,2353 ****

call term_sendkeys(buf, "\<C-U>\<CR>")
call StopVimInTerminal(buf)
- call delete('Xtest')
- call delete('Xnamedir', 'rf')
endfunc

" Test for wildmenumode() with the cmdline popup menu
--- 2317,2322 ----
***************
*** 2378,2384 ****
set foldtext=MyFoldText() wildoptions=pum
normal ggzfj
END
! call writefile(lines, 'Xpumfold')
let buf = RunVimInTerminal('-S Xpumfold', #{rows: 10})
call term_sendkeys(buf, ":set\<Tab>")
call VerifyScreenDump(buf, 'Test_wildmenu_with_pum_foldexpr_1', {})
--- 2347,2353 ----
set foldtext=MyFoldText() wildoptions=pum
normal ggzfj
END
! call writefile(lines, 'Xpumfold', 'D')
let buf = RunVimInTerminal('-S Xpumfold', #{rows: 10})
call term_sendkeys(buf, ":set\<Tab>")
call VerifyScreenDump(buf, 'Test_wildmenu_with_pum_foldexpr_1', {})
***************
*** 2387,2393 ****
call VerifyScreenDump(buf, 'Test_wildmenu_with_pum_foldexpr_2', {})

call StopVimInTerminal(buf)
- call delete('Xpumfold')
endfunc

" Test for opening the cmdline completion popup menu from the terminal window.
--- 2356,2361 ----
***************
*** 2402,2408 ****
let cmds = ['set wildmenu wildoptions=pum']
let pcmd = python .. ' -c "import sys; sys.stdout.write(sys.stdin.read())"'
call add(cmds, "call term_start('" .. pcmd .. "')")
! call writefile(cmds, 'Xtest')
let buf = RunVimInTerminal('-S Xtest', #{rows: 10})
call term_sendkeys(buf, "\r\r\r")
call term_wait(buf)
--- 2370,2376 ----
let cmds = ['set wildmenu wildoptions=pum']
let pcmd = python .. ' -c "import sys; sys.stdout.write(sys.stdin.read())"'
call add(cmds, "call term_start('" .. pcmd .. "')")
! call writefile(cmds, 'Xtest', 'D')
let buf = RunVimInTerminal('-S Xtest', #{rows: 10})
call term_sendkeys(buf, "\r\r\r")
call term_wait(buf)
***************
*** 2411,2417 ****
call VerifyScreenDump(buf, 'Test_wildmenu_pum_term_01', {})
call term_wait(buf)
call StopVimInTerminal(buf)
- call delete('Xtest')
endfunc

" Test for completion after a :substitute command followed by a pipe (|)
--- 2379,2384 ----
***************
*** 2511,2517 ****
func Test_fuzzy_completion_bufname_fullpath()
CheckUnix
set wildoptions&
! call mkdir('Xcmd/Xstate/Xfile.js', 'p')
edit Xcmd/Xstate/Xfile.js
cd Xcmd/Xstate
enew
--- 2478,2484 ----
func Test_fuzzy_completion_bufname_fullpath()
CheckUnix
set wildoptions&
! call mkdir('Xcmd/Xstate/Xfile.js', 'pR')
edit Xcmd/Xstate/Xfile.js
cd Xcmd/Xstate
enew
***************
*** 2521,2527 ****
call feedkeys(":b CmdStateFile\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('Xcmd/Xstate/Xfile.js$', @:)
cd -
- call delete('Xcmd', 'rf')
set wildoptions&
endfunc

--- 2488,2493 ----
***************
*** 3028,3034 ****
call assert_equal([], l)

" Test for :breakadd file [lnum] <file>
! call writefile([], 'Xscript')
call feedkeys(":breakadd file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakadd file Xscript", @:)
call feedkeys(":breakadd file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
--- 2994,3000 ----
call assert_equal([], l)

" Test for :breakadd file [lnum] <file>
! call writefile([], 'Xscript', 'D')
call feedkeys(":breakadd file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakadd file Xscript", @:)
call feedkeys(":breakadd file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
***************
*** 3047,3053 ****
call assert_equal("\"breakadd file Xscript ", @:)
call feedkeys(":breakadd file X1B2C3\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakadd file X1B2C3", @:)
- call delete('Xscript')

" Test for :breakadd func [lnum] <function>
func Xbreak_func()
--- 3013,3018 ----
***************
*** 3109,3115 ****
call assert_equal("\"breakdel abc", @:)

" Test for :breakdel file [lnum] <file>
! call writefile([], 'Xscript')
call feedkeys(":breakdel file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakdel file Xscript", @:)
call feedkeys(":breakdel file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
--- 3074,3080 ----
call assert_equal("\"breakdel abc", @:)

" Test for :breakdel file [lnum] <file>
! call writefile([], 'Xscript', 'D')
call feedkeys(":breakdel file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakdel file Xscript", @:)
call feedkeys(":breakdel file Xsc\<Tab>\<C-B>\"\<CR>", 'tx')
***************
*** 3128,3134 ****
call assert_equal("\"breakdel file Xscript ", @:)
call feedkeys(":breakdel file X1B2C3\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakdel file X1B2C3", @:)
- call delete('Xscript')

" Test for :breakdel func [lnum] <function>
func Xbreak_func()
--- 3093,3098 ----
***************
*** 3165,3171 ****
" Test for :scriptnames argument completion
func Test_cmdline_complete_scriptnames()
set wildmenu
! call writefile(['let a = 1'], 'Xa1b2c3.vim')
source Xa1b2c3.vim
call feedkeys(":script \<Tab>\<Left>\<Left>\<C-B>\"\<CR>", 'tx')
call assert_match("\"script .*Xa1b2c3.vim$", @:)
--- 3129,3135 ----
" Test for :scriptnames argument completion
func Test_cmdline_complete_scriptnames()
set wildmenu
! call writefile(['let a = 1'], 'Xa1b2c3.vim', 'D')
source Xa1b2c3.vim
call feedkeys(":script \<Tab>\<Left>\<Left>\<C-B>\"\<CR>", 'tx')
call assert_match("\"script .*Xa1b2c3.vim$", @:)
***************
*** 3185,3191 ****
call feedkeys(":script \<Tab>\<Left>\<Left>\<CR>", 'tx')
call assert_equal('Xa1b2c3.vim', fnamemodify(@%, ':t'))
bw!
- call delete('Xa1b2c3.vim')
set wildmenu&
endfunc

--- 3149,3154 ----
***************
*** 3259,3271 ****
set showtabline=2
autocmd CmdlineEnter * set tabline=foo
END
! call writefile(lines, 'Xcmdline_redraw_tabline')
let buf = RunVimInTerminal('-S Xcmdline_redraw_tabline', #{rows: 6})
call term_sendkeys(buf, ':')
call WaitForAssert({-> assert_match('^foo', term_getline(buf, 1))})

call StopVimInTerminal(buf)
- call delete('Xcmdline_redraw_tabline')
endfunc

func Test_wildmenu_pum_disable_while_shown()
--- 3222,3233 ----
set showtabline=2
autocmd CmdlineEnter * set tabline=foo
END
! call writefile(lines, 'Xcmdline_redraw_tabline', 'D')
let buf = RunVimInTerminal('-S Xcmdline_redraw_tabline', #{rows: 6})
call term_sendkeys(buf, ':')
call WaitForAssert({-> assert_match('^foo', term_getline(buf, 1))})

call StopVimInTerminal(buf)
endfunc

func Test_wildmenu_pum_disable_while_shown()
*** ../vim-9.0.0417/src/testdir/test_cmdwin.vim 2022-08-23 19:54:24.251779395 +0100
--- src/testdir/test_cmdwin.vim 2022-09-08 16:26:21.537352829 +0100
***************
*** 70,76 ****
call setline(1, range(30))
2split
[SCRIPT]
! call writefile(lines, 'XTest_restore')

let buf = RunVimInTerminal('-S XTest_restore', {'rows': 12})
call TermWait(buf, 50)
--- 70,76 ----
call setline(1, range(30))
2split
[SCRIPT]
! call writefile(lines, 'XTest_restore', 'D')

let buf = RunVimInTerminal('-S XTest_restore', {'rows': 12})
call TermWait(buf, 50)
***************
*** 90,96 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_restore')
endfunc

func Test_cmdwin_no_terminal()
--- 90,95 ----
***************
*** 186,192 ****
let lines =<< trim [SCRIPT]
au WinNew * smile
[SCRIPT]
! call writefile(lines, 'XTest_cmdwin')

let buf = RunVimInTerminal('-S XTest_cmdwin', {'rows': 18})
" open cmdwin
--- 185,191 ----
let lines =<< trim [SCRIPT]
au WinNew * smile
[SCRIPT]
! call writefile(lines, 'XTest_cmdwin', 'D')

let buf = RunVimInTerminal('-S XTest_cmdwin', {'rows': 18})
" open cmdwin
***************
*** 201,207 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_cmdwin')
endfunc

" Test for recursively getting multiple command line inputs
--- 200,205 ----
*** ../vim-9.0.0417/src/testdir/test_conceal.vim 2022-07-09 04:56:12.522528981 +0100
--- src/testdir/test_conceal.vim 2022-09-08 16:27:42.405331850 +0100
***************
*** 25,31 ****
exe "normal /here\r"
[CODE]

! call writefile(code, 'XTest_conceal')
" Check that cursor line is concealed
let buf = RunVimInTerminal('-S XTest_conceal', {})
call VerifyScreenDump(buf, 'Test_conceal_two_windows_01', {})
--- 25,31 ----
exe "normal /here\r"
[CODE]

! call writefile(code, 'XTest_conceal', 'D')
" Check that cursor line is concealed
let buf = RunVimInTerminal('-S XTest_conceal', {})
call VerifyScreenDump(buf, 'Test_conceal_two_windows_01', {})
***************
*** 109,115 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_conceal')
endfunc

func Test_conceal_with_cursorline()
--- 109,114 ----
***************
*** 126,132 ****
normal M
[CODE]

! call writefile(code, 'XTest_conceal_cul')
let buf = RunVimInTerminal('-S XTest_conceal_cul', {})
call VerifyScreenDump(buf, 'Test_conceal_cul_01', {})

--- 125,131 ----
normal M
[CODE]

! call writefile(code, 'XTest_conceal_cul', 'D')
let buf = RunVimInTerminal('-S XTest_conceal_cul', {})
call VerifyScreenDump(buf, 'Test_conceal_cul_01', {})

***************
*** 138,144 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_conceal_cul')
endfunc

func Test_conceal_resize_term()
--- 137,142 ----
***************
*** 150,156 ****
syn region CommentCodeSpan matchgroup=Comment start=/`/ end=/`/ concealends
normal fb
[CODE]
! call writefile(code, 'XTest_conceal_resize')
let buf = RunVimInTerminal('-S XTest_conceal_resize', {'rows': 6})
call VerifyScreenDump(buf, 'Test_conceal_resize_01', {})

--- 148,154 ----
syn region CommentCodeSpan matchgroup=Comment start=/`/ end=/`/ concealends
normal fb
[CODE]
! call writefile(code, 'XTest_conceal_resize', 'D')
let buf = RunVimInTerminal('-S XTest_conceal_resize', {'rows': 6})
call VerifyScreenDump(buf, 'Test_conceal_resize_01', {})

***************
*** 159,165 ****

" clean up
call StopVimInTerminal(buf)
- call delete('XTest_conceal_resize')
endfunc

" Tests for correct display (cursor column position) with +conceal and
--- 157,162 ----
***************
*** 247,253 ****
:q!

[CODE]
! call writefile(code, 'XTest_conceal_curpos')

if RunVim([], [], '-s XTest_conceal_curpos')
call assert_equal([
--- 244,250 ----
:q!

[CODE]
! call writefile(code, 'XTest_conceal_curpos', 'D')

if RunVim([], [], '-s XTest_conceal_curpos')
call assert_equal([
***************
*** 258,264 ****
endif

call delete('Xconceal_curpos.out')
- call delete('XTest_conceal_curpos')
endfunc

func Test_conceal_eol()
--- 255,260 ----
*** ../vim-9.0.0417/src/testdir/test_cpoptions.vim 2022-08-30 21:46:03.657214444 +0100
--- src/testdir/test_cpoptions.vim 2022-09-08 16:29:22.701301635 +0100
***************
*** 8,14 ****
" file name.
func Test_cpo_a()
let save_cpo = &cpo
! call writefile(['one'], 'XfileCpoA')
" Wipe out all the buffers, so that the alternate file is empty
edit Xfoo | %bw
set cpo-=a
--- 8,14 ----
" file name.
func Test_cpo_a()
let save_cpo = &cpo
! call writefile(['one'], 'XfileCpoA', 'D')
" Wipe out all the buffers, so that the alternate file is empty
edit Xfoo | %bw
set cpo-=a
***************
*** 20,26 ****
read XfileCpoA
call assert_equal('XfileCpoA', @#)
close!
- call delete('XfileCpoA')
let &cpo = save_cpo
endfunc

--- 20,25 ----
***************
*** 99,119 ****
" Test for the 'C' flag in 'cpo' (line continuation)
func Test_cpo_C()
let save_cpo = &cpo
! call writefile(['let l = [', '\ 1,', '\ 2]'], 'XfileCpoC')
set cpo-=C
source XfileCpoC
call assert_equal([1, 2], g:l)
set cpo+=C
call assert_fails('source XfileCpoC', ['E697:', 'E10:'])
- call delete('XfileCpoC')
let &cpo = save_cpo
endfunc

" Test for the 'd' flag in 'cpo' (tags relative to the current file)
func Test_cpo_d()
let save_cpo = &cpo
! call mkdir('XdirCpoD')
! call writefile(["one\tXfile1\t/^one$/"], 'tags')
call writefile(["two\tXfile2\t/^two$/"], 'XdirCpoD/tags')
set tags=./tags
set cpo-=d
--- 98,117 ----
" Test for the 'C' flag in 'cpo' (line continuation)
func Test_cpo_C()
let save_cpo = &cpo
! call writefile(['let l = [', '\ 1,', '\ 2]'], 'XfileCpoC', 'D')
set cpo-=C
source XfileCpoC
call assert_equal([1, 2], g:l)
set cpo+=C
call assert_fails('source XfileCpoC', ['E697:', 'E10:'])
let &cpo = save_cpo
endfunc

" Test for the 'd' flag in 'cpo' (tags relative to the current file)
func Test_cpo_d()
let save_cpo = &cpo
! call mkdir('XdirCpoD', 'R')
! call writefile(["one\tXfile1\t/^one$/"], 'tags', 'D')
call writefile(["two\tXfile2\t/^two$/"], 'XdirCpoD/tags')
set tags=./tags
set cpo-=d
***************
*** 121,129 ****
call assert_equal('two', taglist('.*')[0].name)
set cpo+=d
call assert_equal('one', taglist('.*')[0].name)
%bw!
- call delete('tags')
- call delete('XdirCpoD', 'rf')
set tags&
let &cpo = save_cpo
endfunc
--- 119,126 ----
call assert_equal('two', taglist('.*')[0].name)
set cpo+=d
call assert_equal('one', taglist('.*')[0].name)
+
%bw!
set tags&
let &cpo = save_cpo
endfunc
***************
*** 415,428 ****
let save_cpo = &cpo
new XfileCpoO
call setline(1, 'one')
! call writefile(['two'], 'XfileCpoO')
set cpo-=O
call assert_fails('write', 'E13:')
set cpo+=O
write
call assert_equal(['one'], readfile('XfileCpoO'))
close!
- call delete('XfileCpoO')
let &cpo = save_cpo
endfunc

--- 412,424 ----
let save_cpo = &cpo
new XfileCpoO
call setline(1, 'one')
! call writefile(['two'], 'XfileCpoO', 'D')
set cpo-=O
call assert_fails('write', 'E13:')
set cpo+=O
write
call assert_equal(['one'], readfile('XfileCpoO'))
close!
let &cpo = save_cpo
endfunc

***************
*** 432,438 ****
" name)
func Test_cpo_P()
let save_cpo = &cpo
! call writefile([], 'XfileCpoP')
new
call setline(1, 'one')
set cpo+=F
--- 428,434 ----
" name)
func Test_cpo_P()
let save_cpo = &cpo
! call writefile([], 'XfileCpoP', 'D')
new
call setline(1, 'one')
set cpo+=F
***************
*** 443,449 ****
write >> XfileCpoP
call assert_equal('XfileCpoP', @%)
close!
- call delete('XfileCpoP')
let &cpo = save_cpo
endfunc

--- 439,444 ----
***************
*** 635,641 ****
" Test for the 'Z' flag in 'cpo' (write! resets 'readonly')
func Test_cpo_Z()
let save_cpo = &cpo
! call writefile([], 'XfileCpoZ')
new XfileCpoZ
setlocal readonly
set cpo-=Z
--- 630,636 ----
" Test for the 'Z' flag in 'cpo' (write! resets 'readonly')
func Test_cpo_Z()
let save_cpo = &cpo
! call writefile([], 'XfileCpoZ', 'D')
new XfileCpoZ
setlocal readonly
set cpo-=Z
***************
*** 646,652 ****
write!
call assert_equal(1, &readonly)
close!
- call delete('XfileCpoZ')
let &cpo = save_cpo
endfunc

--- 641,646 ----
***************
*** 723,729 ****
" flag)
func Test_cpo_plus()
let save_cpo = &cpo
! call writefile([], 'XfileCpoPlus')
new XfileCpoPlus
call setline(1, 'foo')
write X1
--- 717,723 ----
" flag)
func Test_cpo_plus()
let save_cpo = &cpo
! call writefile([], 'XfileCpoPlus', 'D')
new XfileCpoPlus
call setline(1, 'foo')
write X1
***************
*** 732,738 ****
write X2
call assert_equal(0, &modified)
close!
- call delete('XfileCpoPlus')
call delete('X1')
call delete('X2')
let &cpo = save_cpo
--- 726,731 ----
***************
*** 835,841 ****
" Test for the '&' flag in 'cpo'. The swap file is kept when a buffer is still
" loaded and ':preserve' is used.
func Test_cpo_ampersand()
! call writefile(['one'], 'XfileCpoAmp')
let after =<< trim [CODE]
set cpo+=&
preserve
--- 828,834 ----
" Test for the '&' flag in 'cpo'. The swap file is kept when a buffer is still
" loaded and ':preserve' is used.
func Test_cpo_ampersand()
! call writefile(['one'], 'XfileCpoAmp', 'D')
let after =<< trim [CODE]
set cpo+=&
preserve
***************
*** 845,851 ****
call assert_equal(1, filereadable('.XfileCpoAmp.swp'))
call delete('.XfileCpoAmp.swp')
endif
- call delete('XfileCpoAmp')
endfunc

" Test for the '\' flag in 'cpo' (backslash in a [] range in a search pattern)
--- 838,843 ----
*** ../vim-9.0.0417/src/testdir/test_cscope.vim 2022-06-21 16:53:03.000000000 +0100
--- src/testdir/test_cscope.vim 2022-09-08 16:36:27.720623563 +0100
***************
*** 300,306 ****

" Test ":cs add {dir}" (add the {dir}/cscope.out database)
func Test_cscope_add_dir()
! call mkdir('Xcscopedir', 'p')

" Cscope doesn't handle symlinks, so this needs to be resolved in case a
" shadow directory is being used.
--- 300,306 ----

" Test ":cs add {dir}" (add the {dir}/cscope.out database)
func Test_cscope_add_dir()
! call mkdir('Xcscopedir', 'pD')

" Cscope doesn't handle symlinks, so this needs to be resolved in case a
" shadow directory is being used.
***************
*** 318,325 ****
cs kill -1
call delete('Xcscopedir/cscope.out')
call assert_fails('cs add Xcscopedir', 'E563:')
-
- call delete('Xcscopedir', 'd')
endfunc

func Test_cscopequickfix()
--- 318,323 ----
*** ../vim-9.0.0417/src/testdir/test_cursorline.vim 2022-04-20 22:30:41.000000000 +0100
--- src/testdir/test_cursorline.vim 2022-09-08 16:31:25.409259565 +0100
***************
*** 133,139 ****
call extend(lines, lines1)
call extend(lines, ["call append(0, ".. string(file_content).. ')'])
call extend(lines, lines2)
! call writefile(lines, filename)
" basic test
let buf = RunVimInTerminal('-S '. filename, #{rows: 20})
call VerifyScreenDump(buf, 'Test_'. filename. '_1', {})
--- 133,139 ----
call extend(lines, lines1)
call extend(lines, ["call append(0, ".. string(file_content).. ')'])
call extend(lines, lines2)
! call writefile(lines, filename, 'D')
" basic test
let buf = RunVimInTerminal('-S '. filename, #{rows: 20})
call VerifyScreenDump(buf, 'Test_'. filename. '_1', {})
***************
*** 196,202 ****
call term_sendkeys(buf, ":set list& cursorlineopt& listchars&\<cr>")

call StopVimInTerminal(buf)
- call delete(filename)
endfunc

func Test_cursorline_redraw()
--- 196,201 ----
***************
*** 227,239 ****
When the option was set by hand there is no "Last set" message.
When the option was set while executing a function, user command or
END
! call writefile(textlines, 'Xtextfile')

let script =<< trim END
set cursorline scrolloff=2
normal 12G
END
! call writefile(script, 'Xscript')

let buf = RunVimInTerminal('-S Xscript Xtextfile', #{rows: 20, cols: 40})
call VerifyScreenDump(buf, 'Test_cursorline_redraw_1', {})
--- 226,238 ----
When the option was set by hand there is no "Last set" message.
When the option was set while executing a function, user command or
END
! call writefile(textlines, 'Xtextfile', 'D')

let script =<< trim END
set cursorline scrolloff=2
normal 12G
END
! call writefile(script, 'Xscript', 'D')

let buf = RunVimInTerminal('-S Xscript Xtextfile', #{rows: 20, cols: 40})
call VerifyScreenDump(buf, 'Test_cursorline_redraw_1', {})
***************
*** 243,250 ****
call VerifyScreenDump(buf, 'Test_cursorline_redraw_2', {})

call StopVimInTerminal(buf)
- call delete('Xscript')
- call delete('Xtextfile')
endfunc

func Test_cursorline_callback()
--- 242,247 ----
***************
*** 262,275 ****

call timer_start(300, 'Func')
END
! call writefile(lines, 'Xcul_timer')

let buf = RunVimInTerminal('-S Xcul_timer', #{rows: 8})
call TermWait(buf, 310)
call VerifyScreenDump(buf, 'Test_cursorline_callback_1', {})

call StopVimInTerminal(buf)
- call delete('Xcul_timer')
endfunc

func Test_cursorline_screenline_update()
--- 259,271 ----

call timer_start(300, 'Func')
END
! call writefile(lines, 'Xcul_timer', 'D')

let buf = RunVimInTerminal('-S Xcul_timer', #{rows: 8})
call TermWait(buf, 310)
call VerifyScreenDump(buf, 'Test_cursorline_callback_1', {})

call StopVimInTerminal(buf)
endfunc

func Test_cursorline_screenline_update()
***************
*** 280,286 ****
set cursorline cursorlineopt=screenline
inoremap <F2> <Cmd>call cursor(1, 1)<CR>
END
! call writefile(lines, 'Xcul_screenline')

let buf = RunVimInTerminal('-S Xcul_screenline', #{rows: 8})
call term_sendkeys(buf, "A")
--- 276,282 ----
set cursorline cursorlineopt=screenline
inoremap <F2> <Cmd>call cursor(1, 1)<CR>
END
! call writefile(lines, 'Xcul_screenline', 'D')

let buf = RunVimInTerminal('-S Xcul_screenline', #{rows: 8})
call term_sendkeys(buf, "A")
***************
*** 290,296 ****
call term_sendkeys(buf, "\<Esc>")

call StopVimInTerminal(buf)
- call delete('Xcul_screenline')
endfunc

func Test_cursorline_cursorbind_horizontal_scroll()
--- 286,291 ----
***************
*** 307,313 ****
20vsp
windo :set cursorbind
END
! call writefile(lines, 'Xhor_scroll')

let buf = RunVimInTerminal('-S Xhor_scroll', #{rows: 8})
call term_sendkeys(buf, "20l")
--- 302,308 ----
20vsp
windo :set cursorbind
END
! call writefile(lines, 'Xhor_scroll', 'D')

let buf = RunVimInTerminal('-S Xhor_scroll', #{rows: 8})
call term_sendkeys(buf, "20l")
***************
*** 326,332 ****
call VerifyScreenDump(buf, 'Test_hor_scroll_5', {})

call StopVimInTerminal(buf)
- call delete('Xhor_scroll')
endfunc


--- 321,326 ----
*** ../vim-9.0.0417/src/version.c 2022-09-08 14:41:45.338817579 +0100
--- src/version.c 2022-09-08 16:36:48.368558499 +0100
***************
*** 705,706 ****
--- 705,708 ----
{ /* Add new patch number below this line */
+ /**/
+ 418,
/**/


--
`The Guide says there is an art to flying,' said Ford, `or at least a
knack. The knack lies in learning how to throw yourself at the ground
and miss.' He smiled weakly.
-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
Reply all
Reply to author
Forward
0 new messages