Compare commits

...

8 Commits

Author SHA1 Message Date
e0b5949a3b patch 8.1.1363: ":vert options" does not make a vertical split
Problem:    ":vert options" does not make a vertical split.
Solution:   Pass the right modifiers in $OPTWIN_CMD. (Ken Takata,
            closes #4401)
2019-05-21 20:54:45 +02:00
c79745a82f patch 8.1.1362: code and data in tests can be hard to read
Problem:    Code and data in tests can be hard to read.
Solution:   Use the new heredoc style. (Yegappan Lakshmanan, closes #4400)
2019-05-20 22:12:34 +02:00
0b0ad35c33 patch 8.1.1361: Python setuptools don't work with Python 3
Problem:    Python setuptools don't work with Python 3.
Solution:   Add dummy implementation for find_module. (Joel Frederico,
            closes #4402, closes #3984
2019-05-20 21:52:45 +02:00
80341bcd89 patch 8.1.1360: buffer left 'nomodifiable' after :substitute
Problem:    Buffer left 'nomodifiable' after :substitute. (Ingo Karkat)
Solution:   Save the value of 'modifiable' earlier' (Christian Brabandt,
            closes #4403)
2019-05-20 20:34:51 +02:00
f3333b02f3 patch 8.1.1359: text property wrong after :substitute with backslash
Problem:    Text property wrong after :substitute with backslash.
Solution:   Adjust text property columns when removing backslashes.
            (closes #4397)
2019-05-19 22:53:40 +02:00
386b43e594 patch 8.1.1358: cannot enter character with a CSI byte
Problem:    Cannot enter character with a CSI byte.
Solution:   Only check "gui.in_use" when VIMDLL is defined. (Ken Takata,
            closes #4396)
2019-05-19 21:57:11 +02:00
999dc14644 patch 8.1.1357: test 37 is old style
Problem:    Test 37 is old style.
Solution:   Turn it into a new style test. (Yegappan Lakshmanan, closes #4398)
2019-05-19 21:44:08 +02:00
8471e57026 patch 8.1.1356: some text in heredoc assignment ends the text
Problem:    Some text in heredoc assignment ends the text. (Ozaki Kiichi)
Solution:   Recognize "let v =<<" and skip until the end.
2019-05-19 21:37:18 +02:00
39 changed files with 1474 additions and 1021 deletions

View File

@ -2179,7 +2179,7 @@ test_libvterm:
test1 \
test_eval \
test3 \
test30 test37 test39 \
test30 test39 \
test42 test44 test48 test49 \
test52 test59 \
test64 test69 \

View File

@ -684,7 +684,7 @@ inserted_bytes(linenr_T lnum, colnr_T col, int added UNUSED)
{
#ifdef FEAT_TEXT_PROP
if (curbuf->b_has_textprop && added != 0)
adjust_prop_columns(lnum, col, added, FALSE);
adjust_prop_columns(lnum, col, added, 0);
#endif
changed_bytes(lnum, col);

View File

@ -4104,7 +4104,7 @@ replace_do_bs(int limit_col)
--text_prop_frozen;
adjust_prop_columns(curwin->w_cursor.lnum, curwin->w_cursor.col,
(int)(len_now - len_before), FALSE);
(int)(len_now - len_before), 0);
}
#endif
}

View File

@ -5189,7 +5189,7 @@ do_sub(exarg_T *eap)
int skip_match = FALSE;
linenr_T sub_firstlnum; /* nr of first sub line */
#ifdef FEAT_TEXT_PROP
int save_for_undo = TRUE;
int apc_flags = APC_SAVE_FOR_UNDO | APC_SUBSTITUTE;
#endif
/*
@ -5557,6 +5557,7 @@ do_sub(exarg_T *eap)
* 3. substitute the string.
*/
#ifdef FEAT_EVAL
save_ma = curbuf->b_p_ma;
if (subflags.do_count)
{
// prevent accidentally changing the buffer by a function
@ -5566,7 +5567,6 @@ do_sub(exarg_T *eap)
// Save flags for recursion. They can change for e.g.
// :s/^/\=execute("s#^##gn")
subflags_save = subflags;
save_ma = curbuf->b_p_ma;
#endif
// get length of substitution part
sublen = vim_regsub_multi(&regmatch,
@ -5612,8 +5612,9 @@ do_sub(exarg_T *eap)
// undo first, unless done already.
if (adjust_prop_columns(lnum, regmatch.startpos[0].col,
sublen - 1 - (regmatch.endpos[0].col
- regmatch.startpos[0].col), save_for_undo))
save_for_undo = FALSE;
- regmatch.startpos[0].col),
apc_flags))
apc_flags &= ~APC_SAVE_FOR_UNDO;
}
#endif
}
@ -5715,7 +5716,20 @@ do_sub(exarg_T *eap)
for (p1 = new_end; *p1; ++p1)
{
if (p1[0] == '\\' && p1[1] != NUL) /* remove backslash */
{
STRMOVE(p1, p1 + 1);
#ifdef FEAT_TEXT_PROP
if (curbuf->b_has_textprop)
{
// When text properties are changed, need to save
// for undo first, unless done already.
if (adjust_prop_columns(lnum,
(colnr_T)(p1 - new_start), -1,
apc_flags))
apc_flags &= ~APC_SAVE_FOR_UNDO;
}
#endif
}
else if (*p1 == CAR)
{
if (u_inssub(lnum) == OK) // prepare for undo

View File

@ -3016,7 +3016,9 @@ ex_packadd(exarg_T *eap)
ex_options(
exarg_T *eap UNUSED)
{
vim_setenv((char_u *)"OPTWIN_CMD", (char_u *)(cmdmod.tab ? "tab" : ""));
vim_setenv((char_u *)"OPTWIN_CMD",
(char_u *)(cmdmod.tab ? "tab"
: (cmdmod.split & WSP_VERT) ? "vert" : ""));
cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
}
#endif

View File

@ -1453,9 +1453,9 @@ openscript(
oldcurscript = curscript;
do
{
update_topline_cursor(); /* update cursor position and topline */
normal_cmd(&oa, FALSE); /* execute one command */
vpeekc(); /* check for end of file */
update_topline_cursor(); // update cursor position and topline
normal_cmd(&oa, FALSE); // execute one command
vpeekc(); // check for end of file
}
while (scriptin[oldcurscript] != NULL);
@ -1753,7 +1753,11 @@ vgetc(void)
buf[i] = vgetorpeek(TRUE);
if (buf[i] == K_SPECIAL
#ifdef FEAT_GUI
|| (gui.in_use && buf[i] == CSI)
|| (
# ifdef VIMDLL
gui.in_use &&
# endif
buf[i] == CSI)
#endif
)
{

View File

@ -1222,6 +1222,14 @@ FinderFindSpec(PyObject *self, PyObject *args)
return spec;
}
static PyObject *
FinderFindModule(PyObject* self UNUSED, PyObject* args UNUSED)
{
// Apparently returning None works.
Py_INCREF(Py_None);
return Py_None;
}
#else
static PyObject *
call_load_module(char *name, int len, PyObject *find_module_result)
@ -1400,9 +1408,8 @@ static struct PyMethodDef VimMethods[] = {
{"foreach_rtp", VimForeachRTP, METH_O, "Call given callable for each path in &rtp"},
#if PY_VERSION_HEX >= 0x030700f0
{"find_spec", FinderFindSpec, METH_VARARGS, "Internal use only, returns spec object for any input it receives"},
#else
{"find_module", FinderFindModule, METH_VARARGS, "Internal use only, returns loader object for any input it receives"},
#endif
{"find_module", FinderFindModule, METH_VARARGS, "Internal use only, returns loader object for any input it receives"},
{"path_hook", VimPathHook, METH_VARARGS, "Hook function to install in sys.path_hooks"},
{"_get_paths", (PyCFunction)Vim_GetPaths, METH_NOARGS, "Get &rtp-based additions to sys.path"},
{ NULL, NULL, 0, NULL}

View File

@ -441,7 +441,7 @@ set_indent(
// the old indent, when decreasing indent it behaves like spaces
// were deleted at the new indent.
adjust_prop_columns(curwin->w_cursor.lnum,
(colnr_T)(added > 0 ? (p - oldline) : ind_len), added, FALSE);
(colnr_T)(added > 0 ? (p - oldline) : ind_len), added, 0);
}
#endif
retval = TRUE;

View File

@ -1937,7 +1937,7 @@ op_delete(oparg_T *oap)
#ifdef FEAT_TEXT_PROP
if (curbuf->b_has_textprop && n != 0)
adjust_prop_columns(lnum, bd.textcol, -n, FALSE);
adjust_prop_columns(lnum, bd.textcol, -n, 0);
#endif
}

View File

@ -13,7 +13,7 @@ void f_prop_type_get(typval_T *argvars, typval_T *rettv);
void f_prop_type_list(typval_T *argvars, typval_T *rettv);
void clear_global_prop_types(void);
void clear_buf_prop_types(buf_T *buf);
int adjust_prop_columns(linenr_T lnum, colnr_T col, int bytes_added, int save_for_undo);
int adjust_prop_columns(linenr_T lnum, colnr_T col, int bytes_added, int flags);
void adjust_props_for_split(linenr_T lnum_props, linenr_T lnum_top, int kept, int deleted);
void adjust_props_for_join(linenr_T lnum, textprop_T **prop_line, int *prop_length, long col, int removed);
void join_prop_lines(linenr_T lnum, char_u *newp, textprop_T **prop_lines, int *prop_lengths, int count);

View File

@ -14,7 +14,6 @@ SCRIPTS_FIRST = \
# Tests that run on all systems.
SCRIPTS_ALL = \
test3.out \
test37.out \
test39.out \
test42.out \
test44.out \

View File

@ -74,7 +74,7 @@ VIMPROG = <->vim.exe
.SUFFIXES : .out .in
SCRIPT = test1.out test3.out \
test30.out test37.out test39.out \
test30.out test39.out \
test42.out test44.out test48.out test49.out \
test64.out test69.out \
test72.out test77a.out test88.out \

View File

@ -1,116 +0,0 @@
Test for 'scrollbind'. <eralston@computer.org> Do not add a line below!
STARTTEST
:so small.vim
:set noscrollbind
:set scrollopt=ver,jump
:set scrolloff=2
:set nowrap
:set noequalalways
:set splitbelow
:" TEST using two windows open to one buffer, one extra empty window
:split
:new
t:
:resize 8
/^start of window 1$/
zt:
:set scrollbind
j:
:resize 7
/^start of window 2$/
zt:
:set scrollbind
:" -- start of tests --
:" TEST scrolling down
L5jHyybpr0tHyybpr1tL6jHyybpr2kHyybpr3:
:" TEST scrolling up
tH4kjHtHyybpr4kHyybpr5k3ktHjHyybpr6tHyybpr7:
:" TEST horizontal scrolling
:set scrollopt+=hor
gg"zyyG"zpGt015zly$bp"zpGky$bp"zpG:
k10jH7zhg0y$bp"zpGtHg0y$bp"zpG:
:set scrollopt-=hor
:" ****** tests using two different buffers *****
tj:
:close
t:
:set noscrollbind
:/^start of window 2$/,/^end of window 2$/y
:new
tj4"zpGp:
t/^start of window 1$/
zt:
:set scrollbind
j:
/^start of window 2$/
zt:
:set scrollbind
:" -- start of tests --
:" TEST scrolling down
L5jHyybpr0tHyybpr1tL6jHyybpr2kHyybpr3:
:" TEST scrolling up
tH4kjHtHyybpr4kHyybpr5k3ktHjHyybpr6tHyybpr7:
:" TEST horizontal scrolling
:set scrollopt+=hor
gg"zyyG"zpGt015zly$bp"zpGky$bp"zpG:
k10jH7zhg0y$bp"zpGtHg0y$bp"zpG:
:set scrollopt-=hor
:" TEST syncbind
t:set noscb
ggLj:set noscb
ggL:set scb
t:set scb
GjG:syncbind
HktHjHyybptyybp:
t:set noscb
ggLj:set noscb
ggL:set scb
t:set scb
tGjGt:syncbind
HkjHtHyybptjyybp:
tH3kjHtHyybptjyybp:
:" ***** done with tests *****
:w! test.out " Write contents of this file
:qa!
ENDTEST
start of window 1
. line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01
. line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
. line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03
. line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04
. line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
. line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
. line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07
. line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08
. line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09
. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10
. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
. line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12
. line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13
. line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14
. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15
end of window 1
start of window 2
. line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01
. line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
. line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03
. line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04
. line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
. line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
. line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07
. line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08
. line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09
. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10
. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12
. line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13
. line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14
. line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15
. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
end of window 2
end of test37.in (please don't delete this line)

View File

@ -1,33 +0,0 @@
0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
UTSRQPONMLKJIHGREDCBA9876543210 02
. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
UTSRQPONMLKJIHGREDCBA9876543210 02
. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
:set scrollbind
:set scrollbind
. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
j:
. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12

View File

@ -423,18 +423,20 @@ func Test_autocmd_bufwipe_in_SessLoadPost()
set noswapfile
mksession!
let content = ['set nocp noswapfile',
\ 'let v:swapchoice="e"',
\ 'augroup test_autocmd_sessionload',
\ 'autocmd!',
\ 'autocmd SessionLoadPost * exe bufnr("Xsomething") . "bw!"',
\ 'augroup END',
\ '',
\ 'func WriteErrors()',
\ ' call writefile([execute("messages")], "Xerrors")',
\ 'endfunc',
\ 'au VimLeave * call WriteErrors()',
\ ]
let content =<< trim [CODE]
set nocp noswapfile
let v:swapchoice="e"
augroup test_autocmd_sessionload
autocmd!
autocmd SessionLoadPost * exe bufnr("Xsomething") . "bw!"
augroup END
func WriteErrors()
call writefile([execute("messages")], "Xerrors")
endfunc
au VimLeave * call WriteErrors()
[CODE]
call writefile(content, 'Xvimrc')
call system(v:progpath. ' -u Xvimrc --not-a-term --noplugins -S Session.vim -c cq')
let errors = join(readfile('Xerrors'))
@ -452,27 +454,29 @@ func Test_autocmd_bufwipe_in_SessLoadPost2()
set noswapfile
mksession!
let content = ['set nocp noswapfile',
\ 'function! DeleteInactiveBufs()',
\ ' tabfirst',
\ ' let tabblist = []',
\ ' for i in range(1, tabpagenr(''$''))',
\ ' call extend(tabblist, tabpagebuflist(i))',
\ ' endfor',
\ ' for b in range(1, bufnr(''$''))',
\ ' if bufexists(b) && buflisted(b) && (index(tabblist, b) == -1 || bufname(b) =~# ''^$'')',
\ ' exec ''bwipeout '' . b',
\ ' endif',
\ ' endfor',
\ ' echomsg "SessionLoadPost DONE"',
\ 'endfunction',
\ 'au SessionLoadPost * call DeleteInactiveBufs()',
\ '',
\ 'func WriteErrors()',
\ ' call writefile([execute("messages")], "Xerrors")',
\ 'endfunc',
\ 'au VimLeave * call WriteErrors()',
\ ]
let content =<< trim [CODE]
set nocp noswapfile
function! DeleteInactiveBufs()
tabfirst
let tabblist = []
for i in range(1, tabpagenr(''$''))
call extend(tabblist, tabpagebuflist(i))
endfor
for b in range(1, bufnr(''$''))
if bufexists(b) && buflisted(b) && (index(tabblist, b) == -1 || bufname(b) =~# ''^$'')
exec ''bwipeout '' . b
endif
endfor
echomsg "SessionLoadPost DONE"
endfunction
au SessionLoadPost * call DeleteInactiveBufs()
func WriteErrors()
call writefile([execute("messages")], "Xerrors")
endfunc
au VimLeave * call WriteErrors()
[CODE]
call writefile(content, 'Xvimrc')
call system(v:progpath. ' -u Xvimrc --not-a-term --noplugins -S Session.vim -c cq')
let errors = join(readfile('Xerrors'))
@ -933,21 +937,23 @@ func Test_bufunload_all()
call writefile(['Test file Xxx1'], 'Xxx1')"
call writefile(['Test file Xxx2'], 'Xxx2')"
let content = [
\ "func UnloadAllBufs()",
\ " let i = 1",
\ " while i <= bufnr('$')",
\ " if i != bufnr('%') && bufloaded(i)",
\ " exe i . 'bunload'",
\ " endif",
\ " let i += 1",
\ " endwhile",
\ "endfunc",
\ "au BufUnload * call UnloadAllBufs()",
\ "au VimLeave * call writefile(['Test Finished'], 'Xout')",
\ "edit Xxx1",
\ "split Xxx2",
\ "q"]
let content =<< trim [CODE]
func UnloadAllBufs()
let i = 1
while i <= bufnr('$')
if i != bufnr('%') && bufloaded(i)
exe i . 'bunload'
endif
let i += 1
endwhile
endfunc
au BufUnload * call UnloadAllBufs()
au VimLeave * call writefile(['Test Finished'], 'Xout')
edit Xxx1
split Xxx2
q
[CODE]
call writefile(content, 'Xtest')
call delete('Xout')

View File

@ -8,14 +8,14 @@ if !CanRunVimInTerminal()
finish
endif
let s:common_script = [
\ 'call setline(1, ["one one one", "two tXo two", "three three three"])',
\ 'set balloonevalterm balloonexpr=MyBalloonExpr() balloondelay=100',
\ 'func MyBalloonExpr()',
\ ' return "line " .. v:beval_lnum .. " column " .. v:beval_col .. ": " .. v:beval_text',
\ 'endfun',
\ 'redraw',
\ ]
let s:common_script =<< [CODE]
call setline(1, ["one one one", "two tXo two", "three three three"])
set balloonevalterm balloonexpr=MyBalloonExpr() balloondelay=100
func MyBalloonExpr()
return "line " .. v:beval_lnum .. " column " .. v:beval_col .. ": " .. v:beval_text
endfun
redraw
[CODE]
func Test_balloon_eval_term()
" Use <Ignore> after <MouseMove> to return from vgetc() without removing

View File

@ -93,23 +93,24 @@ func Test_appendbufline()
endfunc
func Test_appendbufline_no_E315()
let after = [
\ 'set stl=%f ls=2',
\ 'new',
\ 'let buf = bufnr("%")',
\ 'quit',
\ 'vsp',
\ 'exec "buffer" buf',
\ 'wincmd w',
\ 'call appendbufline(buf, 0, "abc")',
\ 'redraw',
\ 'while getbufline(buf, 1)[0] =~ "^\\s*$"',
\ ' sleep 10m',
\ 'endwhile',
\ 'au VimLeavePre * call writefile([v:errmsg], "Xerror")',
\ 'au VimLeavePre * call writefile(["done"], "Xdone")',
\ 'qall!',
\ ]
let after =<< trim [CODE]
set stl=%f ls=2
new
let buf = bufnr("%")
quit
vsp
exec "buffer" buf
wincmd w
call appendbufline(buf, 0, "abc")
redraw
while getbufline(buf, 1)[0] =~ "^\\s*$"
sleep 10m
endwhile
au VimLeavePre * call writefile([v:errmsg], "Xerror")
au VimLeavePre * call writefile(["done"], "Xdone")
qall!
[CODE]
if !RunVim([], after, '--clean')
return
endif

View File

@ -18,25 +18,25 @@ endfunc
func Test_cino_extern_c()
" Test for cino-E
let without_ind = [
\ '#ifdef __cplusplus',
\ 'extern "C" {',
\ '#endif',
\ 'int func_a(void);',
\ '#ifdef __cplusplus',
\ '}',
\ '#endif'
\ ]
let without_ind =<< trim [CODE]
#ifdef __cplusplus
extern "C" {
#endif
int func_a(void);
#ifdef __cplusplus
}
#endif
[CODE]
let with_ind = [
\ '#ifdef __cplusplus',
\ 'extern "C" {',
\ '#endif',
\ "\tint func_a(void);",
\ '#ifdef __cplusplus',
\ '}',
\ '#endif'
\ ]
let with_ind =<< trim [CODE]
#ifdef __cplusplus
extern "C" {
#endif
int func_a(void);
#ifdef __cplusplus
}
#endif
[CODE]
new
setlocal cindent cinoptions=E0
call setline(1, without_ind)
@ -89,16 +89,32 @@ func Test_cindent_expr()
return v:lnum == 1 ? shiftwidth() : 0
endfunc
setl expandtab sw=8 indentkeys+=; indentexpr=MyIndentFunction()
call setline(1, ['var_a = something()', 'b = something()'])
let testinput =<< trim [CODE]
var_a = something()
b = something()
[CODE]
call setline(1, testinput)
call cursor(1, 1)
call feedkeys("^\<c-v>j$A;\<esc>", 'tnix')
call assert_equal([' var_a = something();', 'b = something();'], getline(1, '$'))
let expected =<< trim [CODE]
var_a = something();
b = something();
[CODE]
call assert_equal(expected, getline(1, '$'))
%d
call setline(1, [' var_a = something()', ' b = something()'])
let testinput =<< trim [CODE]
var_a = something()
b = something()
[CODE]
call setline(1, testinput)
call cursor(1, 1)
call feedkeys("^\<c-v>j$A;\<esc>", 'tnix')
call assert_equal([' var_a = something();', ' b = something()'], getline(1, '$'))
let expected =<< trim [CODE]
var_a = something();
b = something()
[CODE]
call assert_equal(expected, getline(1, '$'))
bw!
endfunc

View File

@ -11,21 +11,23 @@ if !CanRunVimInTerminal()
endif
func Test_conceal_two_windows()
call writefile([
\ 'let lines = ["one one one one one", "two |hidden| here", "three |hidden| three"]',
\ 'call setline(1, lines)',
\ 'syntax match test /|hidden|/ conceal',
\ 'set conceallevel=2',
\ 'set concealcursor=',
\ 'exe "normal /here\r"',
\ 'new',
\ 'call setline(1, lines)',
\ 'call setline(4, "Second window")',
\ 'syntax match test /|hidden|/ conceal',
\ 'set conceallevel=2',
\ 'set concealcursor=nc',
\ 'exe "normal /here\r"',
\ ], 'XTest_conceal')
let code =<< trim [CODE]
let lines = ["one one one one one", "two |hidden| here", "three |hidden| three"]
call setline(1, lines)
syntax match test /|hidden|/ conceal
set conceallevel=2
set concealcursor=
exe "normal /here\r"
new
call setline(1, lines)
call setline(4, "Second window")
syntax match test /|hidden|/ conceal
set conceallevel=2
set concealcursor=nc
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', {})
@ -113,14 +115,16 @@ endfunc
func Test_conceal_with_cursorline()
" Opens a help window, where 'conceal' is set, switches to the other window
" where 'cursorline' needs to be updated when the cursor moves.
call writefile([
\ 'set cursorline',
\ 'normal othis is a test',
\ 'new',
\ 'call setline(1, ["one", "two", "three", "four", "five"])',
\ 'set ft=help',
\ 'normal M',
\ ], 'XTest_conceal_cul')
let code =<< trim [CODE]
set cursorline
normal othis is a test
new
call setline(1, ["one", "two", "three", "four", "five"])
set ft=help
normal M
[CODE]
call writefile(code, 'XTest_conceal_cul')
let buf = RunVimInTerminal('-S XTest_conceal_cul', {})
call VerifyScreenDump(buf, 'Test_conceal_cul_01', {})

View File

@ -3,52 +3,56 @@
source shared.vim
func Test_exiting()
let after = [
\ 'au QuitPre * call writefile(["QuitPre"], "Xtestout")',
\ 'au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")',
\ 'quit',
\ ]
let after =<< trim [CODE]
au QuitPre * call writefile(["QuitPre"], "Xtestout")
au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")
quit
[CODE]
if RunVim([], after, '')
call assert_equal(['QuitPre', 'ExitPre'], readfile('Xtestout'))
endif
call delete('Xtestout')
let after = [
\ 'au QuitPre * call writefile(["QuitPre"], "Xtestout")',
\ 'au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")',
\ 'help',
\ 'wincmd w',
\ 'quit',
\ ]
let after =<< trim [CODE]
au QuitPre * call writefile(["QuitPre"], "Xtestout")
au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")
help
wincmd w
quit
[CODE]
if RunVim([], after, '')
call assert_equal(['QuitPre', 'ExitPre'], readfile('Xtestout'))
endif
call delete('Xtestout')
let after = [
\ 'au QuitPre * call writefile(["QuitPre"], "Xtestout")',
\ 'au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")',
\ 'split',
\ 'new',
\ 'qall',
\ ]
let after =<< trim [CODE]
au QuitPre * call writefile(["QuitPre"], "Xtestout")
au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")
split
new
qall
[CODE]
if RunVim([], after, '')
call assert_equal(['QuitPre', 'ExitPre'], readfile('Xtestout'))
endif
call delete('Xtestout')
let after = [
\ 'au QuitPre * call writefile(["QuitPre"], "Xtestout", "a")',
\ 'au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")',
\ 'augroup nasty',
\ ' au ExitPre * split',
\ 'augroup END',
\ 'quit',
\ 'augroup nasty',
\ ' au! ExitPre',
\ 'augroup END',
\ 'quit',
\ ]
let after =<< trim [CODE]
au QuitPre * call writefile(["QuitPre"], "Xtestout", "a")
au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")
augroup nasty
au ExitPre * split
augroup END
quit
augroup nasty
au! ExitPre
augroup END
quit
[CODE]
if RunVim([], after, '')
call assert_equal(['QuitPre', 'ExitPre', 'QuitPre', 'ExitPre'],
\ readfile('Xtestout'))

View File

@ -513,17 +513,18 @@ func Test_fold_create_marker_in_C()
set fdm=marker fdl=9
set filetype=c
let content = [
\ '/*',
\ ' * comment',
\ ' * ',
\ ' *',
\ ' */',
\ 'int f(int* p) {',
\ ' *p = 3;',
\ ' return 0;',
\ '}'
\]
let content =<< trim [CODE]
/*
* comment
*
*
*/
int f(int* p) {
*p = 3;
return 0;
}
[CODE]
for c in range(len(content) - 1)
bw!
call append(0, content)

View File

@ -15,262 +15,282 @@ func XTest_goto_decl(cmd, lines, line, col)
endfunc
func Test_gD()
let lines = [
\ 'int x;',
\ '',
\ 'int func(void)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int x;
int func(void)
{
return x;
}
[CODE]
call XTest_goto_decl('gD', lines, 1, 5)
endfunc
func Test_gD_too()
let lines = [
\ 'Filename x;',
\ '',
\ 'int Filename',
\ 'int func() {',
\ ' Filename x;',
\ ' return x;',
\ ]
let lines =<< trim [CODE]
Filename x;
int Filename
int func() {
Filename x;
return x;
[CODE]
call XTest_goto_decl('gD', lines, 1, 10)
endfunc
func Test_gD_comment()
let lines = [
\ '/* int x; */',
\ 'int x;',
\ '',
\ 'int func(void)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
/* int x; */
int x;
int func(void)
{
return x;
}
[CODE]
call XTest_goto_decl('gD', lines, 2, 5)
endfunc
func Test_gD_inline_comment()
let lines = [
\ 'int y /* , x */;',
\ 'int x;',
\ '',
\ 'int func(void)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int y /* , x */;
int x;
int func(void)
{
return x;
}
[CODE]
call XTest_goto_decl('gD', lines, 2, 5)
endfunc
func Test_gD_string()
let lines = [
\ 'char *s[] = "x";',
\ 'int x = 1;',
\ '',
\ 'int func(void)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
char *s[] = "x";
int x = 1;
int func(void)
{
return x;
}
[CODE]
call XTest_goto_decl('gD', lines, 2, 5)
endfunc
func Test_gD_string_same_line()
let lines = [
\ 'char *s[] = "x", int x = 1;',
\ '',
\ 'int func(void)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
char *s[] = "x", int x = 1;
int func(void)
{
return x;
}
[CODE]
call XTest_goto_decl('gD', lines, 1, 22)
endfunc
func Test_gD_char()
let lines = [
\ "char c = 'x';",
\ 'int x = 1;',
\ '',
\ 'int func(void)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
char c = 'x';
int x = 1;
int func(void)
{
return x;
}
[CODE]
call XTest_goto_decl('gD', lines, 2, 5)
endfunc
func Test_gd()
let lines = [
\ 'int x;',
\ '',
\ 'int func(int x)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int x;
int func(int x)
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 3, 14)
endfunc
func Test_gd_not_local()
let lines = [
\ 'int func1(void)',
\ '{',
\ ' return x;',
\ '}',
\ '',
\ 'int func2(int x)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func1(void)
{
return x;
}
int func2(int x)
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 3, 10)
endfunc
func Test_gd_kr_style()
let lines = [
\ 'int func(x)',
\ ' int x;',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(x)
int x;
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 2, 7)
endfunc
func Test_gd_missing_braces()
let lines = [
\ 'def func1(a)',
\ ' a + 1',
\ 'end',
\ '',
\ 'a = 1',
\ '',
\ 'def func2()',
\ ' return a',
\ 'end',
\ ]
let lines =<< trim [CODE]
def func1(a)
a + 1
end
a = 1
def func2()
return a
end
[CODE]
call XTest_goto_decl('gd', lines, 1, 11)
endfunc
func Test_gd_comment()
let lines = [
\ 'int func(void)',
\ '{',
\ ' /* int x; */',
\ ' int x;',
\ ' return x;',
\ '}',
\]
let lines =<< trim [CODE]
int func(void)
{
/* int x; */
int x;
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 4, 7)
endfunc
func Test_gd_comment_in_string()
let lines = [
\ 'int func(void)',
\ '{',
\ ' char *s ="//"; int x;',
\ ' int x;',
\ ' return x;',
\ '}',
\]
let lines =<< trim [CODE]
int func(void)
{
char *s ="//"; int x;
int x;
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 3, 22)
endfunc
func Test_gd_string_in_comment()
set comments=
let lines = [
\ 'int func(void)',
\ '{',
\ ' /* " */ int x;',
\ ' int x;',
\ ' return x;',
\ '}',
\]
let lines =<< trim [CODE]
int func(void)
{
/* " */ int x;
int x;
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 3, 15)
set comments&
endfunc
func Test_gd_inline_comment()
let lines = [
\ 'int func(/* x is an int */ int x)',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(/* x is an int */ int x)
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 1, 32)
endfunc
func Test_gd_inline_comment_only()
let lines = [
\ 'int func(void) /* one lonely x */',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(void) /* one lonely x */
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 3, 10)
endfunc
func Test_gd_inline_comment_body()
let lines = [
\ 'int func(void)',
\ '{',
\ ' int y /* , x */;',
\ '',
\ ' for (/* int x = 0 */; y < 2; y++);',
\ '',
\ ' int x = 0;',
\ '',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(void)
{
int y /* , x */;
for (/* int x = 0 */; y < 2; y++);
int x = 0;
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 7, 7)
endfunc
func Test_gd_trailing_multiline_comment()
let lines = [
\ 'int func(int x) /* x is an int */',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(int x) /* x is an int */
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 1, 14)
endfunc
func Test_gd_trailing_comment()
let lines = [
\ 'int func(int x) // x is an int',
\ '{',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(int x) // x is an int
{
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 1, 14)
endfunc
func Test_gd_string()
let lines = [
\ 'int func(void)',
\ '{',
\ ' char *s = "x";',
\ ' int x = 1;',
\ '',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(void)
{
char *s = "x";
int x = 1;
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 4, 7)
endfunc
func Test_gd_string_only()
let lines = [
\ 'int func(void)',
\ '{',
\ ' char *s = "x";',
\ '',
\ ' return x;',
\ '}',
\ ]
let lines =<< trim [CODE]
int func(void)
{
char *s = "x";
return x;
}
[CODE]
call XTest_goto_decl('gd', lines, 5, 10)
endfunc
@ -289,24 +309,25 @@ func Test_cursorline_keep_col()
endfunc
func Test_gd_local_block()
let lines = [
\ ' int main()',
\ '{',
\ ' char *a = "NOT NULL";',
\ ' if(a)',
\ ' {',
\ ' char *b = a;',
\ ' printf("%s\n", b);',
\ ' }',
\ ' else',
\ ' {',
\ ' char *b = "NULL";',
\ ' return b;',
\ ' }',
\ '',
\ ' return 0;',
\ '}',
\ ]
let lines =<< trim [CODE]
int main()
{
char *a = "NOT NULL";
if(a)
{
char *b = a;
printf("%s\n", b);
}
else
{
char *b = "NULL";
return b;
}
return 0;
}
[CODE]
call XTest_goto_decl('1gd', lines, 11, 11)
endfunc

View File

@ -98,30 +98,27 @@ ert
normal `xyl$p
normal `yy2l$p
normal G
let last_line = line('$')
" Expected output
append
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
zx cvn. as dfg? hjkl iop! ert ernop
zx cvn. as dfg? hjkl iop! ert ernop
.
let expected =<< trim [DATA]
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
zx cvn. as dfg? hjkl iop! ert ernop
zx cvn. as dfg? hjkl iop! ert ernop
[DATA]
call assert_equal(getline(last_line + 1, '$'), getline(1, last_line))
call assert_equal(expected, getline(1, '$'))
enew!
call append(0, text)
@ -143,31 +140,28 @@ zx cvn. as dfg? hjkl iop! ert ernop
normal `xyl$p
normal `yy2l$p
normal G
let last_line = line('$')
" Expected output
append
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
zx cvn. as dfg? hjkl iop! ert enop
zx cvn. as dfg? hjkl iop! ert ernop
let expected =<< trim [DATA]
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
zx cvn. as dfg? hjkl iop! ert enop
zx cvn. as dfg? hjkl iop! ert ernop
.
[DATA]
call assert_equal(getline(last_line + 1, '$'), getline(1, last_line))
call assert_equal(expected, getline(1, '$'))
enew!
call append(0, text)
@ -180,29 +174,26 @@ zx cvn. as dfg? hjkl iop! ert ernop
normal JjJjJjJjJjJjJjJjJjJjJjJjJjJ
normal j4Jy3l$pjdG
normal G
let last_line = line('$')
" Expected output
append
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
zx cvn. as dfg? hjkl iop! ert a
.
let expected =<< trim [DATA]
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf. asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf asdf
zx cvn. as dfg? hjkl iop! ert a
[DATA]
call assert_equal(getline(last_line + 1, '$'), getline(1, last_line))
call assert_equal(expected, getline(1, '$'))
set nocompatible
set cpoptions&vim
@ -262,11 +253,8 @@ action();
.,+2join
exe "normal jj3J\<CR>"
normal G
let last_line = line('$')
" Expected output
append
let expected =<< trim [CODE]
{
/* Make sure the previous comment leader is not removed. */
/* Make sure the previous comment leader is not removed. */
@ -279,9 +267,9 @@ action();
if (condition) // Remove the next comment leader! OK, I will.
action();
}
.
[CODE]
call assert_equal(getline(last_line + 1, '$'), getline(1, last_line))
call assert_equal(expected, getline(1, '$'))
set comments&vim
set joinspaces&vim
@ -389,11 +377,8 @@ int i = 7 /* foo *// 3
exe "normal j6J\<CR>"
exe "normal oSome code!\<CR>// Make sure backspacing does not remove this comment leader.\<Esc>0i\<C-H>\<Esc>"
normal G
let last_line = line('$')
" Expected output
append
let expected =<< [CODE]
{
/* Make sure the previous comment leader is not removed. */
/* Make sure the previous comment leader is not removed. */
@ -416,8 +401,8 @@ int i = 7 /* foo *// 3 // comment
Some code!// Make sure backspacing does not remove this comment leader.
}
.
[CODE]
call assert_equal(getline(last_line + 1, '$'), getline(1, last_line))
call assert_equal(expected, getline(1, '$'))
close!
endfunc

View File

@ -152,6 +152,28 @@ func Test_let_utf8_environment()
call assert_equal('ĀĒĪŌŪあいうえお', $a)
endfunc
func Test_let_heredoc_fails()
call assert_fails('let v =<< marker', 'E991:')
let text =<< trim END
func WrongSyntax()
let v =<< that there
endfunc
END
call writefile(text, 'XheredocFail')
call assert_fails('source XheredocFail', 'E126:')
call delete('XheredocFail')
let text =<< trim END
func MissingEnd()
let v =<< END
endfunc
END
call writefile(text, 'XheredocWrong')
call assert_fails('source XheredocWrong', 'E126:')
call delete('XheredocWrong')
endfunc
" Test for the setting a variable using the heredoc syntax
func Test_let_heredoc()
let var1 =<< END
@ -193,15 +215,45 @@ END
.
call assert_equal([' Line1'], var1)
call assert_fails('let v =<< marker', 'E991:')
call assert_fails('call WrongSyntax()', 'E488:')
call assert_fails('call MissingEnd()', 'E990:')
" ignore "endfunc"
let var1 =<< END
something
endfunc
END
call assert_equal(['something', 'endfunc'], var1)
func WrongSyntax()
let fail =<< that there
endfunc
" ignore "endfunc" with trim
let var1 =<< trim END
something
endfunc
END
call assert_equal(['something', 'endfunc'], var1)
func MissingEnd()
let fail =<< END
" ignore "python << xx"
let var1 =<<END
something
python << xx
END
call assert_equal(['something', 'python << xx'], var1)
" ignore "python << xx" with trim
let var1 =<< trim END
something
python << xx
END
call assert_equal(['something', 'python << xx'], var1)
" ignore "append"
let var1 =<<
something
app
.
call assert_equal(['something', 'app'], var1)
" ignore "append" with trim
let var1 =<< trim
something
app
.
call assert_equal(['something', 'app'], var1)
endfunc

View File

@ -65,34 +65,35 @@ func Test_mksession_utf8()
call wincol()
mksession! test_mks.out
let li = filter(readfile('test_mks.out'), 'v:val =~# "\\(^ *normal! 0\\|^ *exe ''normal!\\)"')
let expected = [
\ 'normal! 016|',
\ 'normal! 016|',
\ 'normal! 016|',
\ 'normal! 08|',
\ 'normal! 08|',
\ 'normal! 016|',
\ 'normal! 016|',
\ 'normal! 016|',
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|",
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|",
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|",
\ " exe 'normal! ' . s:c . '|zs' . 8 . '|'",
\ " normal! 08|",
\ " exe 'normal! ' . s:c . '|zs' . 8 . '|'",
\ " normal! 08|",
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|",
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|",
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|",
\ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
\ " normal! 016|"
\ ]
let expected =<< trim [DATA]
normal! 016|
normal! 016|
normal! 016|
normal! 08|
normal! 08|
normal! 016|
normal! 016|
normal! 016|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
exe 'normal! ' . s:c . '|zs' . 8 . '|'
normal! 08|
exe 'normal! ' . s:c . '|zs' . 8 . '|'
normal! 08|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
exe 'normal! ' . s:c . '|zs' . 16 . '|'
normal! 016|
[DATA]
call assert_equal(expected, li)
tabclose!

View File

@ -1555,73 +1555,158 @@ endfunc
fun! Test_normal29_brace()
" basic test for { and } movements
let text= ['A paragraph begins after each empty line, and also at each of a set of',
\ 'paragraph macros, specified by the pairs of characters in the ''paragraphs''',
\ 'option. The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to',
\ 'the macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in',
\ 'the first column). A section boundary is also a paragraph boundary.',
\ 'Note that a blank line (only containing white space) is NOT a paragraph',
\ 'boundary.',
\ '',
\ '',
\ 'Also note that this does not include a ''{'' or ''}'' in the first column. When',
\ 'the ''{'' flag is in ''cpoptions'' then ''{'' in the first column is used as a',
\ 'paragraph boundary |posix|.',
\ '{',
\ 'This is no paragraph',
\ 'unless the ''{'' is set',
\ 'in ''cpoptions''',
\ '}',
\ '.IP',
\ 'The nroff macros IP separates a paragraph',
\ 'That means, it must be a ''.''',
\ 'followed by IP',
\ '.LPIt does not matter, if afterwards some',
\ 'more characters follow.',
\ '.SHAlso section boundaries from the nroff',
\ 'macros terminate a paragraph. That means',
\ 'a character like this:',
\ '.NH',
\ 'End of text here']
let text =<< trim [DATA]
A paragraph begins after each empty line, and also at each of a set of
paragraph macros, specified by the pairs of characters in the 'paragraphs'
option. The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to
the macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in
the first column). A section boundary is also a paragraph boundary.
Note that a blank line (only containing white space) is NOT a paragraph
boundary.
Also note that this does not include a '{' or '}' in the first column. When
the '{' flag is in 'cpoptions' then '{' in the first column is used as a
paragraph boundary |posix|.
{
This is no paragraph
unless the '{' is set
in 'cpoptions'
}
.IP
The nroff macros IP separates a paragraph
That means, it must be a '.'
followed by IP
.LPIt does not matter, if afterwards some
more characters follow.
.SHAlso section boundaries from the nroff
macros terminate a paragraph. That means
a character like this:
.NH
End of text here
[DATA]
new
call append(0, text)
1
norm! 0d2}
call assert_equal(['.IP',
\ 'The nroff macros IP separates a paragraph', 'That means, it must be a ''.''', 'followed by IP',
\ '.LPIt does not matter, if afterwards some', 'more characters follow.', '.SHAlso section boundaries from the nroff',
\ 'macros terminate a paragraph. That means', 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$'))
let expected =<< trim [DATA]
.IP
The nroff macros IP separates a paragraph
That means, it must be a '.'
followed by IP
.LPIt does not matter, if afterwards some
more characters follow.
.SHAlso section boundaries from the nroff
macros terminate a paragraph. That means
a character like this:
.NH
End of text here
[DATA]
call assert_equal(expected, getline(1, '$'))
norm! 0d}
call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.',
\ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means',
\ 'a character like this:', '.NH', 'End of text here', ''], getline(1, '$'))
let expected =<< trim [DATA]
.LPIt does not matter, if afterwards some
more characters follow.
.SHAlso section boundaries from the nroff
macros terminate a paragraph. That means
a character like this:
.NH
End of text here
[DATA]
call assert_equal(expected, getline(1, '$'))
$
norm! d{
call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.',
\ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 'a character like this:', ''], getline(1, '$'))
let expected =<< trim [DATA]
.LPIt does not matter, if afterwards some
more characters follow.
.SHAlso section boundaries from the nroff
macros terminate a paragraph. That means
a character like this:
[DATA]
call assert_equal(expected, getline(1, '$'))
norm! d{
call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', ''], getline(1,'$'))
let expected =<< trim [DATA]
.LPIt does not matter, if afterwards some
more characters follow.
[DATA]
call assert_equal(expected, getline(1, '$'))
" Test with { in cpooptions
%d
call append(0, text)
set cpo+={
1
norm! 0d2}
call assert_equal(['{', 'This is no paragraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}',
\ '.IP', 'The nroff macros IP separates a paragraph', 'That means, it must be a ''.''',
\ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.',
\ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means',
\ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$'))
let expected =<< trim [DATA]
{
This is no paragraph
unless the '{' is set
in 'cpoptions'
}
.IP
The nroff macros IP separates a paragraph
That means, it must be a '.'
followed by IP
.LPIt does not matter, if afterwards some
more characters follow.
.SHAlso section boundaries from the nroff
macros terminate a paragraph. That means
a character like this:
.NH
End of text here
[DATA]
call assert_equal(expected, getline(1, '$'))
$
norm! d}
call assert_equal(['{', 'This is no paragraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}',
\ '.IP', 'The nroff macros IP separates a paragraph', 'That means, it must be a ''.''',
\ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.',
\ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means',
\ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$'))
let expected =<< trim [DATA]
{
This is no paragraph
unless the '{' is set
in 'cpoptions'
}
.IP
The nroff macros IP separates a paragraph
That means, it must be a '.'
followed by IP
.LPIt does not matter, if afterwards some
more characters follow.
.SHAlso section boundaries from the nroff
macros terminate a paragraph. That means
a character like this:
.NH
End of text here
[DATA]
call assert_equal(expected, getline(1, '$'))
norm! gg}
norm! d5}
call assert_equal(['{', 'This is no paragraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', ''], getline(1,'$'))
let expected =<< trim [DATA]
{
This is no paragraph
unless the '{' is set
in 'cpoptions'
}
[DATA]
call assert_equal(expected, getline(1, '$'))
" clean up
set cpo-={

View File

@ -51,6 +51,32 @@ func Test_options()
endtry
call assert_equal('ok', caught)
" Check if the option-window is opened horizontally.
wincmd j
call assert_notequal('option-window', bufname(''))
wincmd k
call assert_equal('option-window', bufname(''))
" close option-window
close
" Open the option-window vertically.
vert options
" Check if the option-window is opened vertically.
wincmd l
call assert_notequal('option-window', bufname(''))
wincmd h
call assert_equal('option-window', bufname(''))
" close option-window
close
" Open the option-window in a new tab.
tab options
" Check if the option-window is opened in a tab.
normal gT
call assert_notequal('option-window', bufname(''))
normal gt
call assert_equal('option-window', bufname(''))
" close option-window
close
endfunc

View File

@ -4,34 +4,34 @@ if !has('profile')
endif
func Test_profile_func()
let lines = [
\ 'profile start Xprofile_func.log',
\ 'profile func Foo*"',
\ "func! Foo1()",
\ "endfunc",
\ "func! Foo2()",
\ " let l:count = 100",
\ " while l:count > 0",
\ " let l:count = l:count - 1",
\ " endwhile",
\ "endfunc",
\ "func! Foo3()",
\ "endfunc",
\ "func! Bar()",
\ "endfunc",
\ "call Foo1()",
\ "call Foo1()",
\ "profile pause",
\ "call Foo1()",
\ "profile continue",
\ "call Foo2()",
\ "call Foo3()",
\ "call Bar()",
\ "if !v:profiling",
\ " delfunc Foo2",
\ "endif",
\ "delfunc Foo3",
\ ]
let lines =<< trim [CODE]
profile start Xprofile_func.log
profile func Foo*
func! Foo1()
endfunc
func! Foo2()
let l:count = 100
while l:count > 0
let l:count = l:count - 1
endwhile
endfunc
func! Foo3()
endfunc
func! Bar()
endfunc
call Foo1()
call Foo1()
profile pause
call Foo1()
profile continue
call Foo2()
call Foo3()
call Bar()
if !v:profiling
delfunc Foo2
endif
delfunc Foo3
[CODE]
call writefile(lines, 'Xprofile_func.vim')
call system(v:progpath
@ -86,38 +86,38 @@ func Test_profile_func()
endfunc
func Test_profile_func_with_ifelse()
let lines = [
\ "func! Foo1()",
\ " if 1",
\ " let x = 0",
\ " elseif 1",
\ " let x = 1",
\ " else",
\ " let x = 2",
\ " endif",
\ "endfunc",
\ "func! Foo2()",
\ " if 0",
\ " let x = 0",
\ " elseif 1",
\ " let x = 1",
\ " else",
\ " let x = 2",
\ " endif",
\ "endfunc",
\ "func! Foo3()",
\ " if 0",
\ " let x = 0",
\ " elseif 0",
\ " let x = 1",
\ " else",
\ " let x = 2",
\ " endif",
\ "endfunc",
\ "call Foo1()",
\ "call Foo2()",
\ "call Foo3()",
\ ]
let lines =<< trim [CODE]
func! Foo1()
if 1
let x = 0
elseif 1
let x = 1
else
let x = 2
endif
endfunc
func! Foo2()
if 0
let x = 0
elseif 1
let x = 1
else
let x = 2
endif
endfunc
func! Foo3()
if 0
let x = 0
elseif 0
let x = 1
else
let x = 2
endif
endfunc
call Foo1()
call Foo2()
call Foo3()
[CODE]
call writefile(lines, 'Xprofile_func.vim')
call system(v:progpath
@ -196,41 +196,41 @@ func Test_profile_func_with_ifelse()
endfunc
func Test_profile_func_with_trycatch()
let lines = [
\ "func! Foo1()",
\ " try",
\ " let x = 0",
\ " catch",
\ " let x = 1",
\ " finally",
\ " let x = 2",
\ " endtry",
\ "endfunc",
\ "func! Foo2()",
\ " try",
\ " throw 0",
\ " catch",
\ " let x = 1",
\ " finally",
\ " let x = 2",
\ " endtry",
\ "endfunc",
\ "func! Foo3()",
\ " try",
\ " throw 0",
\ " catch",
\ " throw 1",
\ " finally",
\ " let x = 2",
\ " endtry",
\ "endfunc",
\ "call Foo1()",
\ "call Foo2()",
\ "try",
\ " call Foo3()",
\ "catch",
\ "endtry",
\ ]
let lines =<< trim [CODE]
func! Foo1()
try
let x = 0
catch
let x = 1
finally
let x = 2
endtry
endfunc
func! Foo2()
try
throw 0
catch
let x = 1
finally
let x = 2
endtry
endfunc
func! Foo3()
try
throw 0
catch
throw 1
finally
let x = 2
endtry
endfunc
call Foo1()
call Foo2()
try
call Foo3()
catch
endtry
[CODE]
call writefile(lines, 'Xprofile_func.vim')
call system(v:progpath
@ -309,15 +309,15 @@ func Test_profile_func_with_trycatch()
endfunc
func Test_profile_file()
let lines = [
\ 'func! Foo()',
\ 'endfunc',
\ 'for i in range(10)',
\ ' " a comment',
\ ' call Foo()',
\ 'endfor',
\ 'call Foo()',
\ ]
let lines =<< trim [CODE]
func! Foo()
endfunc
for i in range(10)
" a comment
call Foo()
endfor
call Foo()
[CODE]
call writefile(lines, 'Xprofile_file.vim')
call system(v:progpath
@ -448,26 +448,27 @@ func Test_profile_truncate_mbyte()
endfunc
func Test_profdel_func()
let lines = [
\ 'profile start Xprofile_file.log',
\ 'func! Foo1()',
\ 'endfunc',
\ 'func! Foo2()',
\ 'endfunc',
\ 'func! Foo3()',
\ 'endfunc',
\ '',
\ 'profile func Foo1',
\ 'profile func Foo2',
\ 'call Foo1()',
\ 'call Foo2()',
\ '',
\ 'profile func Foo3',
\ 'profdel func Foo2',
\ 'profdel func Foo3',
\ 'call Foo1()',
\ 'call Foo2()',
\ 'call Foo3()' ]
let lines =<< trim [CODE]
profile start Xprofile_file.log
func! Foo1()
endfunc
func! Foo2()
endfunc
func! Foo3()
endfunc
profile func Foo1
profile func Foo2
call Foo1()
call Foo2()
profile func Foo3
profdel func Foo2
profdel func Foo3
call Foo1()
call Foo2()
call Foo3()
[CODE]
call writefile(lines, 'Xprofile_file.vim')
call system(v:progpath . ' -es --clean -c "so Xprofile_file.vim" -c q')
call assert_equal(0, v:shell_error)
@ -494,14 +495,15 @@ endfunc
func Test_profdel_star()
" Foo() is invoked once before and once after 'profdel *'.
" So profiling should report it only once.
let lines = [
\ 'profile start Xprofile_file.log',
\ 'func! Foo()',
\ 'endfunc',
\ 'profile func Foo',
\ 'call Foo()',
\ 'profdel *',
\ 'call Foo()' ]
let lines =<< trim [CODE]
profile start Xprofile_file.log
func! Foo()
endfunc
profile func Foo
call Foo()
profdel *
call Foo()
[CODE]
call writefile(lines, 'Xprofile_file.vim')
call system(v:progpath . ' -es --clean -c "so Xprofile_file.vim" -c q')
call assert_equal(0, v:shell_error)

View File

@ -818,68 +818,68 @@ func Test_efm1()
return
endif
let l = [
\ '"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.',
\ '"Xtestfile", line 6 col 19; this is an error',
\ 'gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c',
\ 'Xtestfile:9: parse error before `asd''',
\ 'make: *** [vim] Error 1',
\ 'in file "Xtestfile" linenr 10: there is an error',
\ '',
\ '2 returned',
\ '"Xtestfile", line 11 col 1; this is an error',
\ '"Xtestfile", line 12 col 2; this is another error',
\ '"Xtestfile", line 14:10; this is an error in column 10',
\ '=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time',
\ '"Xtestfile", linenr 16: yet another problem',
\ 'Error in "Xtestfile" at line 17:',
\ 'x should be a dot',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17',
\ ' ^',
\ 'Error in "Xtestfile" at line 18:',
\ 'x should be a dot',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18',
\ '.............^',
\ 'Error in "Xtestfile" at line 19:',
\ 'x should be a dot',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19',
\ '--------------^',
\ 'Error in "Xtestfile" at line 20:',
\ 'x should be a dot',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20',
\ ' ^',
\ '',
\ 'Does anyone know what is the problem and how to correction it?',
\ '"Xtestfile", line 21 col 9: What is the title of the quickfix window?',
\ '"Xtestfile", line 22 col 9: What is the title of the quickfix window?'
\ ]
let l =<< trim [DATA]
"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
"Xtestfile", line 6 col 19; this is an error
gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
Xtestfile:9: parse error before `asd'
make: *** [vim] Error 1
in file "Xtestfile" linenr 10: there is an error
2 returned
"Xtestfile", line 11 col 1; this is an error
"Xtestfile", line 12 col 2; this is another error
"Xtestfile", line 14:10; this is an error in column 10
=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
"Xtestfile", linenr 16: yet another problem
Error in "Xtestfile" at line 17:
x should be a dot
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
^
Error in "Xtestfile" at line 18:
x should be a dot
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
.............^
Error in "Xtestfile" at line 19:
x should be a dot
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
--------------^
Error in "Xtestfile" at line 20:
x should be a dot
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
^
Does anyone know what is the problem and how to correction it?
"Xtestfile", line 21 col 9: What is the title of the quickfix window?
"Xtestfile", line 22 col 9: What is the title of the quickfix window?
[DATA]
call writefile(l, 'Xerrorfile1')
call writefile(l[:-2], 'Xerrorfile2')
let m = [
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21',
\ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22'
\ ]
let m =<< trim [DATA]
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22
[DATA]
call writefile(m, 'Xtestfile')
let save_efm = &efm
@ -1092,21 +1092,23 @@ func Test_efm2()
call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l)
" Test for %P, %Q and %t format specifiers
let lines=["[Xtestfile1]",
\ "(1,17) error: ';' missing",
\ "(21,2) warning: variable 'z' not defined",
\ "(67,3) error: end of file found before string ended",
\ "--",
\ "",
\ "[Xtestfile2]",
\ "--",
\ "",
\ "[Xtestfile3]",
\ "NEW compiler v1.1",
\ "(2,2) warning: variable 'x' not defined",
\ "(67,3) warning: 's' already defined",
\ "--"
\]
let lines =<< trim [DATA]
[Xtestfile1]
(1,17) error: ';' missing
(21,2) warning: variable 'z' not defined
(67,3) error: end of file found before string ended
--
[Xtestfile2]
--
[Xtestfile3]
NEW compiler v1.1
(2,2) warning: variable 'x' not defined
(67,3) warning: 's' already defined
--
[DATA]
set efm=%+P[%f]%r,(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%+Q--%r
" To exercise the push/pop file functionality in quickfix, the test files
" need to be created.
@ -1128,11 +1130,13 @@ func Test_efm2()
call delete('Xtestfile3')
" Tests for %E, %C and %Z format specifiers
let lines = ["Error 275",
\ "line 42",
\ "column 3",
\ "' ' expected after '--'"
\]
let lines =<< trim [DATA]
Error 275
line 42
column 3
' ' expected after '--'
[DATA]
set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m
cgetexpr lines
let l = getqflist()
@ -1143,9 +1147,11 @@ func Test_efm2()
call assert_equal("\n' ' expected after '--'", l[0].text)
" Test for %>
let lines = ["Error in line 147 of foo.c:",
\"unknown variable 'i'"
\]
let lines =<< trim [DATA]
Error in line 147 of foo.c:
unknown variable 'i'
[DATA]
set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m
cgetexpr lines
let l = getqflist()
@ -1154,21 +1160,22 @@ func Test_efm2()
call assert_equal("\nunknown variable 'i'", l[0].text)
" Test for %A, %C and other formats
let lines = [
\"==============================================================",
\"FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)",
\"--------------------------------------------------------------",
\"Traceback (most recent call last):",
\' File "unittests/dbfacadeTest.py", line 89, in testFoo',
\" self.assertEquals(34, dtid)",
\' File "/usr/lib/python2.2/unittest.py", line 286, in',
\" failUnlessEqual",
\" raise self.failureException, \\",
\"AssertionError: 34 != 33",
\"",
\"--------------------------------------------------------------",
\"Ran 27 tests in 0.063s"
\]
let lines =<< trim [DATA]
==============================================================
FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)
--------------------------------------------------------------
Traceback (most recent call last):
File "unittests/dbfacadeTest.py", line 89, in testFoo
self.assertEquals(34, dtid)
File "/usr/lib/python2.2/unittest.py", line 286, in
failUnlessEqual
raise self.failureException, \\
AssertionError: 34 != 33
--------------------------------------------------------------
Ran 27 tests in 0.063s
[DATA]
set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
cgetexpr lines
let l = getqflist()

View File

@ -30,3 +30,243 @@ func Test_scrollbind()
setl noscrollbind
call assert_equal(0, topLineLeft - topLineRight)
endfunc
" Test for 'scrollbind'
func Test_scrollbind_opt()
new | only
set noscrollbind
set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow
" Insert the text used for the test
append
start of window 1
. line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01
. line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
. line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03
. line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04
. line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
. line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
. line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07
. line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08
. line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09
. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10
. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
. line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12
. line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13
. line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14
. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15
end of window 1
start of window 2
. line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01
. line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
. line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03
. line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04
. line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
. line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
. line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07
. line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08
. line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09
. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10
. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12
. line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13
. line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14
. line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15
. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
end of window 2
.
" Test using two windows open to one buffer, one extra empty window
split
new
wincmd t
resize 8
call search('^start of window 1$')
normal zt
set scrollbind
wincmd j
resize 7
call search('^start of window 2$')
normal zt
set scrollbind
" -- start of tests --
" Test scrolling down
normal L5jHyy
wincmd b | normal pr0
wincmd t | normal Hyy
wincmd b | normal pr1
wincmd t | normal L6jHyy
wincmd b | normal pr2
wincmd k | normal Hyy
wincmd b | normal pr3
" Test scrolling up
wincmd t | normal H4k
wincmd j | normal H
wincmd t | normal Hyy
wincmd b | normal pr4
wincmd k | normal Hyy
wincmd b | normal pr5
wincmd k | normal 3k
wincmd t | normal H
wincmd j | normal Hyy
wincmd b | normal pr6
wincmd t | normal Hyy
wincmd b | normal pr7
" Test horizontal scrolling
set scrollopt+=hor
normal gg"zyyG"zpG
wincmd t | normal 015zly$
wincmd b | normal p"zpG
wincmd k | normal y$
wincmd b | normal p"zpG
wincmd k | normal 10jH7zhg0y$
wincmd b | normal p"zpG
wincmd t | normal Hg0y$
wincmd b | normal p"zpG
set scrollopt-=hor
wincmd b
call assert_equal([
\ '',
\ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
\ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
\ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
\ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
\ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
\ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
\ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
\ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
\ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
\ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
\ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
\ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
\ ''], getline(1, '$'))
enew!
" ****** tests using two different buffers *****
wincmd t | wincmd j | close
wincmd t | set noscrollbind
/start of window 2$/,/^end of window 2$/y
new
wincmd t | wincmd j | normal 4"zpGp
wincmd t
call search('^start of window 1$')
normal zt
set scrollbind
wincmd j
call search('^start of window 2$')
normal zt
set scrollbind
" -- start of tests --
" Test scrolling down
normal L5jHyy
wincmd b | normal pr0
wincmd t | normal Hyy
wincmd b | normal pr1
wincmd t | normal L6jHyy
wincmd b | normal pr2
wincmd k | normal Hyy
wincmd b | normal pr3
" Test scrolling up
wincmd t | normal H4k
wincmd j | normal H
wincmd t | normal Hyy
wincmd b | normal pr4
wincmd k | normal Hyy
wincmd b | normal pr5
wincmd k | normal 3k
wincmd t | normal H
wincmd j | normal Hyy
wincmd b | normal pr6
wincmd t | normal Hyy
wincmd b | normal pr7
" Test horizontal scrolling
set scrollopt+=hor
normal gg"zyyG"zpG
wincmd t | normal 015zly$
wincmd b | normal p"zpG
wincmd k | normal y$
wincmd b | normal p"zpG
wincmd k | normal 10jH7zhg0y$
wincmd b | normal p"zpG
wincmd t | normal Hg0y$
wincmd b | normal p"zpG
set scrollopt-=hor
wincmd b
call assert_equal([
\ '',
\ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
\ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
\ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
\ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
\ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
\ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
\ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
\ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
\ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
\ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
\ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
\ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
\ ''], getline(1, '$'))
enew!
" Test 'syncbind'
wincmd t | set noscrollbind | normal ggL
wincmd j | set noscrollbind | normal ggL
set scrollbind
wincmd t | set scrollbind | normal G
wincmd j | normal G
syncbind
normal Hk
wincmd t | normal H
wincmd j | normal Hyy
wincmd b | normal p
wincmd t | normal yy
wincmd b | normal p
wincmd t | set noscrollbind | normal ggL
wincmd j | set noscrollbind
normal ggL
set scrollbind
wincmd t | set scrollbind
wincmd t | normal G
wincmd j | normal G
wincmd t | syncbind | normal Hk
wincmd j | normal H
wincmd t | normal Hyy
wincmd b | normal p
wincmd t | wincmd j | normal yy
wincmd b | normal p
wincmd t | normal H3k
wincmd j | normal H
wincmd t | normal Hyy
wincmd b | normal p
wincmd t | wincmd j | normal yy
wincmd b | normal p
wincmd b
call assert_equal([
\ '',
\ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
\ 'start of window 2',
\ 'start of window 2',
\ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
\ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15',
\ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12',
\ ], getline(1, '$'))
enew!
new | only!
set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow&
endfunc

View File

@ -19,25 +19,27 @@ func Test_after_comes_later()
if !has('packages')
return
endif
let before = [
\ 'set nocp viminfo+=nviminfo',
\ 'set guioptions+=M',
\ 'let $HOME = "/does/not/exist"',
\ 'set loadplugins',
\ 'set rtp=Xhere,Xafter,Xanother',
\ 'set packpath=Xhere,Xafter',
\ 'set nomore',
\ 'let g:sequence = ""',
\ ]
let after = [
\ 'redir! > Xtestout',
\ 'scriptnames',
\ 'redir END',
\ 'redir! > Xsequence',
\ 'echo g:sequence',
\ 'redir END',
\ 'quit',
\ ]
let before =<< trim [CODE]
set nocp viminfo+=nviminfo
set guioptions+=M
let $HOME = "/does/not/exist"
set loadplugins
set rtp=Xhere,Xafter,Xanother
set packpath=Xhere,Xafter
set nomore
let g:sequence = ""
[CODE]
let after =<< trim [CODE]
redir! > Xtestout
scriptnames
redir END
redir! > Xsequence
echo g:sequence
redir END
quit
[CODE]
call mkdir('Xhere/plugin', 'p')
call writefile(['let g:sequence .= "here "'], 'Xhere/plugin/here.vim')
call mkdir('Xanother/plugin', 'p')
@ -76,15 +78,16 @@ func Test_pack_in_rtp_when_plugins_run()
if !has('packages')
return
endif
let before = [
\ 'set nocp viminfo+=nviminfo',
\ 'set guioptions+=M',
\ 'let $HOME = "/does/not/exist"',
\ 'set loadplugins',
\ 'set rtp=Xhere',
\ 'set packpath=Xhere',
\ 'set nomore',
\ ]
let before =<< trim [CODE]
set nocp viminfo+=nviminfo
set guioptions+=M
let $HOME = "/does/not/exist"
set loadplugins
set rtp=Xhere
set packpath=Xhere
set nomore
[CODE]
let after = [
\ 'quit',
\ ]
@ -131,11 +134,12 @@ func Test_help_arg()
endfunc
func Test_compatible_args()
let after = [
\ 'call writefile([string(&compatible)], "Xtestout")',
\ 'set viminfo+=nviminfo',
\ 'quit',
\ ]
let after =<< trim [CODE]
call writefile([string(&compatible)], "Xtestout")
set viminfo+=nviminfo
quit
[CODE]
if RunVim([], after, '-C')
let lines = readfile('Xtestout')
call assert_equal('1', lines[0])
@ -152,14 +156,15 @@ endfunc
" Test the -o[N] and -O[N] arguments to open N windows split
" horizontally or vertically.
func Test_o_arg()
let after = [
\ 'call writefile([winnr("$"),
\ winheight(1), winheight(2), &lines,
\ winwidth(1), winwidth(2), &columns,
\ bufname(winbufnr(1)), bufname(winbufnr(2))],
\ "Xtestout")',
\ 'qall',
\ ]
let after =<< trim [CODE]
call writefile([winnr("$"),
\ winheight(1), winheight(2), &lines,
\ winwidth(1), winwidth(2), &columns,
\ bufname(winbufnr(1)), bufname(winbufnr(2))],
\ "Xtestout")
qall
[CODE]
if RunVim([], after, '-o2')
" Open 2 windows split horizontally. Expect:
" - 2 windows
@ -228,10 +233,11 @@ endfunc
" Test the -p[N] argument to open N tabpages.
func Test_p_arg()
let after = [
\ 'call writefile(split(execute("tabs"), "\n"), "Xtestout")',
\ 'qall',
\ ]
let after =<< trim [CODE]
call writefile(split(execute("tabs"), "\n"), "Xtestout")
qall
[CODE]
if RunVim([], after, '-p2')
let lines = readfile('Xtestout')
call assert_equal(4, len(lines))
@ -273,12 +279,12 @@ endfunc
" Test the '-q [errorfile]' argument.
func Test_q_arg()
let source_file = has('win32') ? '..\memfile.c' : '../memfile.c'
let after = [
\ 'call writefile([&errorfile, string(getpos("."))], "Xtestout")',
\ 'copen',
\ 'w >> Xtestout',
\ 'qall'
\ ]
let after =<< trim [CODE]
call writefile([&errorfile, string(getpos("."))], "Xtestout")
copen
w >> Xtestout
qall
[CODE]
" Test with default argument '-q'.
call assert_equal('errors.err', &errorfile)
@ -335,10 +341,11 @@ endfunc
" -M resets 'modifiable' and 'write'
" -R sets 'readonly'
func Test_m_M_R()
let after = [
\ 'call writefile([&write, &modifiable, &readonly, &updatecount], "Xtestout")',
\ 'qall',
\ ]
let after =<< trim [CODE]
call writefile([&write, &modifiable, &readonly, &updatecount], "Xtestout")
qall
[CODE]
if RunVim([], after, '')
let lines = readfile('Xtestout')
call assert_equal(['1', '1', '0', '200'], lines)
@ -361,10 +368,11 @@ endfunc
" Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes).
func Test_A_F_H_arg()
let after = [
\ 'call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout")',
\ 'qall',
\ ]
let after =<< trim [CODE]
call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout")
qall
[CODE]
" Use silent Ex mode to avoid the hit-Enter prompt for the warning that
" 'encoding' is not utf-8.
if has('arabic') && &encoding == 'utf-8' && RunVim([], after, '-e -s -A')
@ -481,10 +489,11 @@ func Test_invalid_args()
endfunc
func Test_file_args()
let after = [
\ 'call writefile(argv(), "Xtestout")',
\ 'qall',
\ ]
let after =<< trim [CODE]
call writefile(argv(), "Xtestout")
qall
[CODE]
if RunVim([], after, '')
let lines = readfile('Xtestout')
call assert_equal(0, len(lines))
@ -546,10 +555,11 @@ func Test_startuptime()
endfunc
func Test_read_stdin()
let after = [
\ 'write Xtestout',
\ 'quit!',
\ ]
let after =<< trim [CODE]
write Xtestout
quit!
[CODE]
if RunVimPiped([], after, '-', 'echo something | ')
let lines = readfile('Xtestout')
" MS-Windows adds a space after the word
@ -559,10 +569,11 @@ func Test_read_stdin()
endfunc
func Test_set_shell()
let after = [
\ 'call writefile([&shell], "Xtestout")',
\ 'quit!',
\ ]
let after =<< trim [CODE]
call writefile([&shell], "Xtestout")
quit!
[CODE]
let $SHELL = '/bin/with space/sh'
if RunVimPiped([], after, '', '')
let lines = readfile('Xtestout')
@ -613,20 +624,22 @@ endfunc
func Test_zzz_startinsert()
" Test :startinsert
call writefile(['123456'], 'Xtestout')
let after = [
\ ':startinsert',
\ 'call feedkeys("foobar\<c-o>:wq\<cr>","t")'
\ ]
let after =<< trim [CODE]
:startinsert
call feedkeys("foobar\<c-o>:wq\<cr>","t")
[CODE]
if RunVim([], after, 'Xtestout')
let lines = readfile('Xtestout')
call assert_equal(['foobar123456'], lines)
endif
" Test :startinsert!
call writefile(['123456'], 'Xtestout')
let after = [
\ ':startinsert!',
\ 'call feedkeys("foobar\<c-o>:wq\<cr>","t")'
\ ]
let after =<< trim [CODE]
:startinsert!
call feedkeys("foobar\<c-o>:wq\<cr>","t")
[CODE]
if RunVim([], after, 'Xtestout')
let lines = readfile('Xtestout')
call assert_equal(['123456foobar'], lines)

View File

@ -611,9 +611,24 @@ func Test_sub_cmd_8()
set titlestring&
endfunc
func Test_sub_cmd_9()
new
let input = ['1 aaa', '2 aaa', '3 aaa']
call setline(1, input)
func Foo()
return submatch(0)
endfunc
%s/aaa/\=Foo()/gn
call assert_equal(input, getline(1, '$'))
call assert_equal(1, &modifiable)
delfunc Foo
bw!
endfunc
func Test_nocatch_sub_failure_handling()
" normal error results in all replacements
func! Foo()
func Foo()
foobar
endfunc
new
@ -649,6 +664,7 @@ func Test_nocatch_sub_failure_handling()
call assert_equal(1, error_caught)
call assert_equal(['1 aaa', '2 aaa', '3 aaa'], getline(1, 3))
delfunc Foo
bwipe!
endfunc

View File

@ -1012,18 +1012,19 @@ endfunc
" Run Vim, start a terminal in that Vim without the kill argument,
" check that :qall does not exit, :qall! does.
func Test_terminal_qall_exit()
let after = [
\ 'term',
\ 'let buf = bufnr("%")',
\ 'while term_getline(buf, 1) =~ "^\\s*$"',
\ ' sleep 10m',
\ 'endwhile',
\ 'set nomore',
\ 'au VimLeavePre * call writefile(["too early"], "Xdone")',
\ 'qall',
\ 'au! VimLeavePre * exe buf . "bwipe!" | call writefile(["done"], "Xdone")',
\ 'cquit',
\ ]
let after =<< trim [CODE]
term
let buf = bufnr("%")
while term_getline(buf, 1) =~ "^\\s*$"
sleep 10m
endwhile
set nomore
au VimLeavePre * call writefile(["too early"], "Xdone")
qall
au! VimLeavePre * exe buf . "bwipe!" | call writefile(["done"], "Xdone")
cquit
[CODE]
if !RunVim([], after, '')
return
endif

View File

@ -620,6 +620,25 @@ func Test_prop_undo()
undo
let expected[0].col = 12
call assert_equal(expected, prop_list(1))
call prop_clear(1)
" substitute with backslash
call setline(1, 'the number 123 is highlighted.')
call prop_add(1, 12, {'length': 3, 'type': 'comment'})
let expected = [{'col': 12, 'length': 3, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
call assert_equal(expected, prop_list(1))
1s/the/\The
call assert_equal(expected, prop_list(1))
1s/^/\\
let expected[0].col += 1
call assert_equal(expected, prop_list(1))
1s/^/\~
let expected[0].col += 1
call assert_equal(expected, prop_list(1))
1s/123/12\\3
let expected[0].length += 1
call assert_equal(expected, prop_list(1))
call prop_clear(1)
bwipe!
call prop_type_delete('comment')

View File

@ -95,9 +95,13 @@ func Test_xxd()
%d
exe '0r! ' . s:xxd_cmd . ' -i XXDfile'
$d
let expected = ['unsigned char XXDfile[] = {',
\ ' 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a', '};',
\ 'unsigned int XXDfile_len = 11;']
let expected =<< trim [CODE]
unsigned char XXDfile[] = {
0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
};
unsigned int XXDfile_len = 11;
[CODE]
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
" Test 8: Print C include capitalized
@ -107,9 +111,12 @@ func Test_xxd()
%d
exe '0r! ' . s:xxd_cmd . ' -i ' . arg . ' XXDfile'
$d
let expected = ['unsigned char XXDFILE[] = {',
\ ' 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a', '};',
\ 'unsigned int XXDFILE_LEN = 11;']
let expected =<< trim [CODE]
unsigned char XXDFILE[] = {
0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
};
unsigned int XXDFILE_LEN = 11;
[CODE]
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
endfor

View File

@ -957,8 +957,9 @@ clear_buf_prop_types(buf_T *buf)
* shift by "bytes_added" (can be negative).
* Note that "col" is zero-based, while tp_col is one-based.
* Only for the current buffer.
* When "save_for_undo" is TRUE then call u_savesub() before making changes to
* the line.
* "flags" can have:
* APC_SAVE_FOR_UNDO: Call u_savesub() before making changes to the line.
* APC_SUBSTITUTE: Text is replaced, not inserted.
* Caller is expected to check b_has_textprop and "bytes_added" being non-zero.
* Returns TRUE when props were changed.
*/
@ -967,7 +968,7 @@ adjust_prop_columns(
linenr_T lnum,
colnr_T col,
int bytes_added,
int save_for_undo)
int flags)
{
int proplen;
char_u *props;
@ -988,15 +989,30 @@ adjust_prop_columns(
wi = 0; // write index
for (ri = 0; ri < proplen; ++ri)
{
int start_incl;
mch_memmove(&tmp_prop, props + ri * sizeof(textprop_T),
sizeof(textprop_T));
pt = text_prop_type_by_id(curbuf, tmp_prop.tp_type);
start_incl = (flags & APC_SUBSTITUTE) ||
(pt != NULL && (pt->pt_flags & PT_FLAG_INS_START_INCL));
if (bytes_added > 0
? (tmp_prop.tp_col >= col
+ (pt != NULL && (pt->pt_flags & PT_FLAG_INS_START_INCL)
? 2 : 1))
: (tmp_prop.tp_col > col + 1))
&& (tmp_prop.tp_col >= col + (start_incl ? 2 : 1)))
{
if (tmp_prop.tp_col < col + (start_incl ? 2 : 1))
{
tmp_prop.tp_len += (tmp_prop.tp_col - 1 - col) + bytes_added;
tmp_prop.tp_col = col + 1;
}
else
tmp_prop.tp_col += bytes_added;
// Save for undo if requested and not done yet.
if ((flags & APC_SAVE_FOR_UNDO) && !dirty)
u_savesub(lnum);
dirty = TRUE;
}
else if (bytes_added <= 0 && (tmp_prop.tp_col > col + 1))
{
if (tmp_prop.tp_col + bytes_added < col + 1)
{
@ -1006,7 +1022,7 @@ adjust_prop_columns(
else
tmp_prop.tp_col += bytes_added;
// Save for undo if requested and not done yet.
if (save_for_undo && !dirty)
if ((flags & APC_SAVE_FOR_UNDO) && !dirty)
u_savesub(lnum);
dirty = TRUE;
if (tmp_prop.tp_len <= 0)
@ -1024,7 +1040,7 @@ adjust_prop_columns(
else
tmp_prop.tp_len += bytes_added;
// Save for undo if requested and not done yet.
if (save_for_undo && !dirty)
if ((flags & APC_SAVE_FOR_UNDO) && !dirty)
u_savesub(lnum);
dirty = TRUE;
if (tmp_prop.tp_len <= 0)

View File

@ -1979,6 +1979,7 @@ ex_function(exarg_T *eap)
int indent;
int nesting;
char_u *skip_until = NULL;
char_u *trimmed = NULL;
dictitem_T *v;
funcdict_T fudi;
static int func_nr = 0; /* number for nameless function */
@ -2303,10 +2304,18 @@ ex_function(exarg_T *eap)
if (skip_until != NULL)
{
/* between ":append" and "." and between ":python <<EOF" and "EOF"
* don't check for ":endfunc". */
if (STRCMP(theline, skip_until) == 0)
VIM_CLEAR(skip_until);
// Between ":append" and "." and between ":python <<EOF" and "EOF"
// don't check for ":endfunc".
if (trimmed == NULL
|| STRNCMP(theline, trimmed, STRLEN(trimmed)) == 0)
{
p = trimmed == NULL ? theline : theline + STRLEN(trimmed);
if (STRCMP(p, skip_until) == 0)
{
VIM_CLEAR(skip_until);
VIM_CLEAR(trimmed);
}
}
}
else
{
@ -2406,6 +2415,30 @@ ex_function(exarg_T *eap)
else
skip_until = vim_strsave(p);
}
// Check for ":let v =<< [trim] EOF"
arg = skipwhite(skiptowhite(p));
arg = skipwhite(skiptowhite(arg));
if (arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
&& ((p[0] == 'l'
&& p[1] == 'e'
&& (!ASCII_ISALNUM(p[2])
|| (p[2] == 't' && !ASCII_ISALNUM(p[3]))))))
{
// ":let v =<<" continues until a dot
p = skipwhite(arg + 3);
if (STRNCMP(p, "trim", 4) == 0)
{
// Ignore leading white space.
p = skipwhite(p + 4);
trimmed = vim_strnsave(theline,
(int)(skipwhite(theline) - theline));
}
if (*p == NUL)
skip_until = vim_strsave((char_u *)".");
else
skip_until = vim_strnsave(p, (int)(skiptowhite(p) - p));
}
}
/* Add the line to the function. */

View File

@ -767,6 +767,22 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1363,
/**/
1362,
/**/
1361,
/**/
1360,
/**/
1359,
/**/
1358,
/**/
1357,
/**/
1356,
/**/
1355,
/**/

View File

@ -2571,4 +2571,8 @@ long elapsed(DWORD start_tick);
#define SAVE_RESTORE_ICON 2
#define SAVE_RESTORE_BOTH (SAVE_RESTORE_TITLE | SAVE_RESTORE_ICON)
// Flags for adjust_prop_columns()
#define APC_SAVE_FOR_UNDO 1 // call u_savesub() before making changes
#define APC_SUBSTITUTE 2 // text is replaced, not inserted
#endif /* VIM__H */