summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt20
-rw-r--r--src/eval.c33
-rw-r--r--src/evalfunc.c11
-rw-r--r--src/proto/eval.pro1
-rw-r--r--src/testdir/test_assert.vim13
-rw-r--r--src/testdir/test_man.vim21
-rw-r--r--src/version.c2
7 files changed, 86 insertions, 15 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index fa3c756a7..11cd8bbaf 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 7.4. Last change: 2016 Jul 22
+*eval.txt* For Vim version 7.4. Last change: 2016 Jul 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1947,6 +1947,8 @@ assert_equal({exp}, {act} [, {msg}]) none assert {exp} is equal to {act}
assert_exception({error} [, {msg}]) none assert {error} is in v:exception
assert_fails({cmd} [, {error}]) none assert {cmd} fails
assert_false({actual} [, {msg}]) none assert {actual} is false
+assert_inrange({lower}, {upper}, {actual} [, {msg}])
+ none assert {actual} is inside the range
assert_match({pat}, {text} [, {msg}]) none assert {pat} matches {text}
assert_notequal({exp}, {act} [, {msg}]) none assert {exp} is not equal {act}
assert_notmatch({pat}, {text} [, {msg}]) none assert {pat} not matches {text}
@@ -2478,8 +2480,16 @@ assert_false({actual} [, {msg}]) *assert_false()*
|v:errors|, like with |assert_equal()|.
A value is false when it is zero. When {actual} is not a
number the assert fails.
- When {msg} is omitted an error in the form "Expected False but
- got {actual}" is produced.
+ When {msg} is omitted an error in the form
+ "Expected False but got {actual}" is produced.
+
+assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()*
+ This asserts number values. When {actual} is lower than
+ {lower} or higher than {upper} an error message is added to
+ |v:errors|.
+ When {msg} is omitted an error in the form
+ "Expected range {lower} - {upper}, but got {actual}" is
+ produced.
*assert_match()*
assert_match({pattern}, {actual} [, {msg}])
@@ -2494,8 +2504,8 @@ assert_match({pattern}, {actual} [, {msg}])
Use "^" and "$" to match with the start and end of the text.
Use both to match the whole text.
- When {msg} is omitted an error in the form "Pattern {pattern}
- does not match {actual}" is produced.
+ When {msg} is omitted an error in the form
+ "Pattern {pattern} does not match {actual}" is produced.
Example: >
assert_match('^f.*o$', 'foobar')
< Will result in a string to be added to |v:errors|:
diff --git a/src/eval.c b/src/eval.c
index 53c188bae..3bc2afdb1 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -8992,6 +8992,39 @@ assert_match_common(typval_T *argvars, assert_type_T atype)
}
}
+ void
+assert_inrange(typval_T *argvars)
+{
+ garray_T ga;
+ int error = FALSE;
+ varnumber_T lower = get_tv_number_chk(&argvars[0], &error);
+ varnumber_T upper = get_tv_number_chk(&argvars[1], &error);
+ varnumber_T actual = get_tv_number_chk(&argvars[2], &error);
+ char_u *tofree;
+ char msg[200];
+ char_u numbuf[NUMBUFLEN];
+
+ if (error)
+ return;
+ if (actual < lower || actual > upper)
+ {
+ prepare_assert_error(&ga);
+ if (argvars[3].v_type != VAR_UNKNOWN)
+ {
+ ga_concat(&ga, tv2string(&argvars[3], &tofree, numbuf, 0));
+ vim_free(tofree);
+ }
+ else
+ {
+ vim_snprintf(msg, 200, "Expected range %ld - %ld, but got %ld",
+ (long)lower, (long)upper, (long)actual);
+ ga_concat(&ga, (char_u *)msg);
+ }
+ assert_error(&ga);
+ ga_clear(&ga);
+ }
+}
+
/*
* Common for assert_true() and assert_false().
*/
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 61dce74fd..ec347c112 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -48,6 +48,7 @@ static void f_assert_equal(typval_T *argvars, typval_T *rettv);
static void f_assert_exception(typval_T *argvars, typval_T *rettv);
static void f_assert_fails(typval_T *argvars, typval_T *rettv);
static void f_assert_false(typval_T *argvars, typval_T *rettv);
+static void f_assert_inrange(typval_T *argvars, typval_T *rettv);
static void f_assert_match(typval_T *argvars, typval_T *rettv);
static void f_assert_notequal(typval_T *argvars, typval_T *rettv);
static void f_assert_notmatch(typval_T *argvars, typval_T *rettv);
@@ -460,6 +461,7 @@ static struct fst
{"assert_exception", 1, 2, f_assert_exception},
{"assert_fails", 1, 2, f_assert_fails},
{"assert_false", 1, 2, f_assert_false},
+ {"assert_inrange", 2, 3, f_assert_inrange},
{"assert_match", 2, 3, f_assert_match},
{"assert_notequal", 2, 3, f_assert_notequal},
{"assert_notmatch", 2, 3, f_assert_notmatch},
@@ -1278,6 +1280,15 @@ f_assert_false(typval_T *argvars, typval_T *rettv UNUSED)
}
/*
+ * "assert_inrange(lower, upper[, msg])" function
+ */
+ static void
+f_assert_inrange(typval_T *argvars, typval_T *rettv UNUSED)
+{
+ assert_inrange(argvars);
+}
+
+/*
* "assert_match(pattern, actual[, msg])" function
*/
static void
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index e9ec97df4..5d9b35c62 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -121,6 +121,7 @@ void prepare_assert_error(garray_T *gap);
void assert_error(garray_T *gap);
void assert_equal_common(typval_T *argvars, assert_type_T atype);
void assert_match_common(typval_T *argvars, assert_type_T atype);
+void assert_inrange(typval_T *argvars);
void assert_bool(typval_T *argvars, int isTrue);
void assert_exception(typval_T *argvars);
void assert_fails(typval_T *argvars);
diff --git a/src/testdir/test_assert.vim b/src/testdir/test_assert.vim
index d7fb6385f..0ab664ad3 100644
--- a/src/testdir/test_assert.vim
+++ b/src/testdir/test_assert.vim
@@ -105,6 +105,19 @@ func Test_assert_fail_fails()
call remove(v:errors, 0)
endfunc
+func Test_assert_inrange()
+ call assert_inrange(7, 7, 7)
+ call assert_inrange(5, 7, 5)
+ call assert_inrange(5, 7, 6)
+ call assert_inrange(5, 7, 7)
+
+ call assert_inrange(5, 7, 4)
+ call assert_match("Expected range 5 - 7, but got 4", v:errors[0])
+ call remove(v:errors, 0)
+ call assert_inrange(5, 7, 8)
+ call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
+ call remove(v:errors, 0)
+endfunc
func Test_user_is_happy()
smile
diff --git a/src/testdir/test_man.vim b/src/testdir/test_man.vim
index f2c48a405..1485ec321 100644
--- a/src/testdir/test_man.vim
+++ b/src/testdir/test_man.vim
@@ -1,19 +1,20 @@
runtime ftplugin/man.vim
function Test_g_ft_man_open_mode()
- let l:w = winwidth(1)
vnew
let l:h = winheight(1)
q
+ let l:w = winwidth(1)
" split horizontally
let wincnt = winnr('$')
- Man 'vim'
+ Man vim
if wincnt == winnr('$')
" Vim manual page cannot be found.
return
endif
- call assert_equal(l:w, winwidth(1))
+
+ call assert_inrange(l:w - 2, l:w + 2, winwidth(1))
call assert_true(l:h > winheight(1))
call assert_equal(1, tabpagenr('$'))
call assert_equal(1, tabpagenr())
@@ -21,8 +22,8 @@ function Test_g_ft_man_open_mode()
" split horizontally
let g:ft_man_open_mode = "horz"
- Man 'vim'
- call assert_equal(l:w, winwidth(1))
+ Man vim
+ call assert_inrange(l:w - 2, l:w + 2, winwidth(1))
call assert_true(l:h > winheight(1))
call assert_equal(1, tabpagenr('$'))
call assert_equal(1, tabpagenr())
@@ -30,7 +31,7 @@ function Test_g_ft_man_open_mode()
" split vertically
let g:ft_man_open_mode = "vert"
- Man 'vim'
+ Man vim
call assert_true(l:w > winwidth(1))
call assert_equal(l:h, winheight(1))
call assert_equal(1, tabpagenr('$'))
@@ -39,9 +40,9 @@ function Test_g_ft_man_open_mode()
" separate tab
let g:ft_man_open_mode = "tab"
- Man 'vim'
- call assert_equal(l:w, winwidth(1))
- call assert_equal(l:h, winheight(1))
+ Man vim
+ call assert_inrange(l:w - 2, l:w + 2, winwidth(1))
+ call assert_inrange(l:h - 1, l:h + 1, winheight(1))
call assert_equal(2, tabpagenr('$'))
call assert_equal(2, tabpagenr())
q
@@ -49,7 +50,7 @@ endfunction
function Test_nomodifiable()
let wincnt = winnr('$')
- Man 'vim'
+ Man vim
if wincnt == winnr('$')
" Vim manual page cannot be found.
return
diff --git a/src/version.c b/src/version.c
index 0110c1d28..757590cb5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -759,6 +759,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2095,
+/**/
2094,
/**/
2093,