mirror of
https://github.com/neovim/neovim.git
synced 2025-09-13 14:58:18 +00:00
vim-patch:8.0.1510: cannot assert beep #9938
Problem: Cannot test if a command causes a beep.
Solution: Add assert_beeps().
b48e96f61c
This commit is contained in:

committed by
Justin M. Keyes

parent
24a9516ff4
commit
9d77a07686
@@ -1966,6 +1966,7 @@ argidx() Number current index in the argument list
|
|||||||
arglistid([{winnr} [, {tabnr}]]) Number argument list id
|
arglistid([{winnr} [, {tabnr}]]) Number argument list id
|
||||||
argv({nr} [, {winid}]) String {nr} entry of the argument list
|
argv({nr} [, {winid}]) String {nr} entry of the argument list
|
||||||
argv([-1, {winid}]) List the argument list
|
argv([-1, {winid}]) List the argument list
|
||||||
|
assert_beeps({cmd}) none assert {cmd} causes a beep
|
||||||
assert_equal({exp}, {act} [, {msg}])
|
assert_equal({exp}, {act} [, {msg}])
|
||||||
none assert {exp} is equal to {act}
|
none assert {exp} is equal to {act}
|
||||||
assert_exception({error} [, {msg}])
|
assert_exception({error} [, {msg}])
|
||||||
@@ -2479,6 +2480,11 @@ argv([{nr} [, {winid}])
|
|||||||
|
|
||||||
The {winid} argument specifies the window ID, see |argc()|.
|
The {winid} argument specifies the window ID, see |argc()|.
|
||||||
|
|
||||||
|
assert_beeps({cmd}) *assert_beeps()*
|
||||||
|
Run {cmd} and add an error message to |v:errors| if it does
|
||||||
|
NOT produce a beep or visual bell.
|
||||||
|
Also see |assert_fails()|.
|
||||||
|
|
||||||
*assert_equal()*
|
*assert_equal()*
|
||||||
assert_equal({expected}, {actual}, [, {msg}])
|
assert_equal({expected}, {actual}, [, {msg}])
|
||||||
When {expected} and {actual} are not equal an error message is
|
When {expected} and {actual} are not equal an error message is
|
||||||
@@ -2511,6 +2517,8 @@ assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
|
|||||||
Run {cmd} and add an error message to |v:errors| if it does
|
Run {cmd} and add an error message to |v:errors| if it does
|
||||||
NOT produce an error.
|
NOT produce an error.
|
||||||
When {error} is given it must match in |v:errmsg|.
|
When {error} is given it must match in |v:errmsg|.
|
||||||
|
Note that beeping is not considered an error, and some failing
|
||||||
|
commands only beep. Use |assert_beeps()| for those.
|
||||||
|
|
||||||
assert_false({actual} [, {msg}]) *assert_false()*
|
assert_false({actual} [, {msg}]) *assert_false()*
|
||||||
When {actual} is not false an error message is added to
|
When {actual} is not false an error message is added to
|
||||||
|
@@ -6877,6 +6877,27 @@ static void assert_equal_common(typval_T *argvars, assert_type_T atype)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void f_assert_beeps(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||||
|
{
|
||||||
|
const char *const cmd = tv_get_string_chk(&argvars[0]);
|
||||||
|
garray_T ga;
|
||||||
|
|
||||||
|
called_vim_beep = false;
|
||||||
|
suppress_errthrow = true;
|
||||||
|
emsg_silent = false;
|
||||||
|
do_cmdline_cmd(cmd);
|
||||||
|
if (!called_vim_beep) {
|
||||||
|
prepare_assert_error(&ga);
|
||||||
|
ga_concat(&ga, (const char_u *)"command did not beep: ");
|
||||||
|
ga_concat(&ga, (const char_u *)cmd);
|
||||||
|
assert_error(&ga);
|
||||||
|
ga_clear(&ga);
|
||||||
|
}
|
||||||
|
|
||||||
|
suppress_errthrow = false;
|
||||||
|
emsg_on_display = false;
|
||||||
|
}
|
||||||
|
|
||||||
// "assert_equal(expected, actual[, msg])" function
|
// "assert_equal(expected, actual[, msg])" function
|
||||||
static void f_assert_equal(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
static void f_assert_equal(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||||
{
|
{
|
||||||
|
@@ -25,6 +25,7 @@ return {
|
|||||||
arglistid={args={0, 2}},
|
arglistid={args={0, 2}},
|
||||||
argv={args={0, 1}},
|
argv={args={0, 1}},
|
||||||
asin={args=1, func="float_op_wrapper", data="&asin"}, -- WJMc
|
asin={args=1, func="float_op_wrapper", data="&asin"}, -- WJMc
|
||||||
|
assert_beeps={args={1, 2}},
|
||||||
assert_equal={args={2, 3}},
|
assert_equal={args={2, 3}},
|
||||||
assert_exception={args={1, 2}},
|
assert_exception={args={1, 2}},
|
||||||
assert_fails={args={1, 2}},
|
assert_fails={args={1, 2}},
|
||||||
|
@@ -227,6 +227,7 @@ EXTERN dict_T vimvardict; /* Dictionary with v: variables */
|
|||||||
EXTERN dict_T globvardict; /* Dictionary with g: variables */
|
EXTERN dict_T globvardict; /* Dictionary with g: variables */
|
||||||
EXTERN int did_emsg; /* set by emsg() when the message
|
EXTERN int did_emsg; /* set by emsg() when the message
|
||||||
is displayed or thrown */
|
is displayed or thrown */
|
||||||
|
EXTERN bool called_vim_beep; // set if vim_beep() is called
|
||||||
EXTERN int did_emsg_syntax; /* did_emsg set because of a
|
EXTERN int did_emsg_syntax; /* did_emsg set because of a
|
||||||
syntax error */
|
syntax error */
|
||||||
EXTERN int called_emsg; /* always set by emsg() */
|
EXTERN int called_emsg; /* always set by emsg() */
|
||||||
|
@@ -2578,6 +2578,8 @@ void beep_flush(void)
|
|||||||
// val is one of the BO_ values, e.g., BO_OPER
|
// val is one of the BO_ values, e.g., BO_OPER
|
||||||
void vim_beep(unsigned val)
|
void vim_beep(unsigned val)
|
||||||
{
|
{
|
||||||
|
called_vim_beep = true;
|
||||||
|
|
||||||
if (emsg_silent == 0) {
|
if (emsg_silent == 0) {
|
||||||
if (!((bo_flags & val) || (bo_flags & BO_ALL))) {
|
if (!((bo_flags & val) || (bo_flags & BO_ALL))) {
|
||||||
if (p_vb) {
|
if (p_vb) {
|
||||||
@@ -2587,8 +2589,9 @@ void vim_beep(unsigned val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* When 'verbose' is set and we are sourcing a script or executing a
|
// When 'debug' contains "beep" produce a message. If we are sourcing
|
||||||
* function give the user a hint where the beep comes from. */
|
// a script or executing a function give the user a hint where the beep
|
||||||
|
// comes from.
|
||||||
if (vim_strchr(p_debug, 'e') != NULL) {
|
if (vim_strchr(p_debug, 'e') != NULL) {
|
||||||
msg_source(HL_ATTR(HLF_W));
|
msg_source(HL_ATTR(HLF_W));
|
||||||
msg_attr(_("Beep!"), HL_ATTR(HLF_W));
|
msg_attr(_("Beep!"), HL_ATTR(HLF_W));
|
||||||
|
@@ -2272,6 +2272,8 @@ endfunc
|
|||||||
|
|
||||||
func! Test_normal45_drop()
|
func! Test_normal45_drop()
|
||||||
if !has('dnd')
|
if !has('dnd')
|
||||||
|
" The ~ register does not exist
|
||||||
|
call assert_beeps('norm! "~')
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -18,6 +18,15 @@ describe('assert function:', function()
|
|||||||
clear()
|
clear()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('assert_beeps', function()
|
||||||
|
it('works', function()
|
||||||
|
call('assert_beeps', 'normal h')
|
||||||
|
expected_empty()
|
||||||
|
call('assert_beeps', 'normal 0')
|
||||||
|
expected_errors({'command did not beep: normal 0'})
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
-- assert_equal({expected}, {actual}, [, {msg}])
|
-- assert_equal({expected}, {actual}, [, {msg}])
|
||||||
describe('assert_equal', function()
|
describe('assert_equal', function()
|
||||||
it('should not change v:errors when expected is equal to actual', function()
|
it('should not change v:errors when expected is equal to actual', function()
|
||||||
|
Reference in New Issue
Block a user