@@ -476,6 +476,8 @@ static void f_assert_exception(typval_T *argvars, typval_T *rettv);
476
476
static void f_assert_fails(typval_T *argvars, typval_T *rettv);
477
477
static void f_assert_false(typval_T *argvars, typval_T *rettv);
478
478
static void f_assert_match(typval_T *argvars, typval_T *rettv);
479
+ static void f_assert_notequal(typval_T *argvars, typval_T *rettv);
480
+ static void f_assert_notmatch(typval_T *argvars, typval_T *rettv);
479
481
static void f_assert_true(typval_T *argvars, typval_T *rettv);
480
482
#ifdef FEAT_FLOAT
481
483
static void f_asin(typval_T *argvars, typval_T *rettv);
@@ -2780,11 +2782,9 @@ get_lval(
2780
2782
if (len == -1)
2781
2783
{
2782
2784
/* "[key]": get key from "var1" */
2783
- key = get_tv_string (&var1); /* is number or string */
2784
- if (* key == NUL )
2785
+ key = get_tv_string_chk (&var1); /* is number or string */
2786
+ if (key == NULL )
2785
2787
{
2786
- if (!quiet)
2787
- EMSG(_(e_emptykey));
2788
2788
clear_tv(&var1);
2789
2789
return NULL;
2790
2790
}
@@ -5621,11 +5621,9 @@ eval_index(
5621
5621
5622
5622
if (len == -1)
5623
5623
{
5624
- key = get_tv_string (&var1);
5625
- if (* key == NUL )
5624
+ key = get_tv_string_chk (&var1);
5625
+ if (key == NULL )
5626
5626
{
5627
- if (verbose)
5628
- EMSG(_(e_emptykey));
5629
5627
clear_tv(&var1);
5630
5628
return FAIL;
5631
5629
}
@@ -7752,11 +7750,9 @@ get_dict_tv(char_u **arg, typval_T *rettv, int evaluate)
7752
7750
if (evaluate)
7753
7751
{
7754
7752
key = get_tv_string_buf_chk(&tvkey, buf);
7755
- if (key == NULL || *key == NUL )
7753
+ if (key == NULL)
7756
7754
{
7757
7755
/* "key" is NULL when get_tv_string_buf_chk() gave an errmsg */
7758
- if (key != NULL)
7759
- EMSG(_(e_emptykey));
7760
7756
clear_tv(&tvkey);
7761
7757
goto failret;
7762
7758
}
@@ -8182,6 +8178,8 @@ static struct fst
8182
8178
{"assert_fails", 1, 2, f_assert_fails},
8183
8179
{"assert_false", 1, 2, f_assert_false},
8184
8180
{"assert_match", 2, 3, f_assert_match},
8181
+ {"assert_notequal", 2, 3, f_assert_notequal},
8182
+ {"assert_notmatch", 2, 3, f_assert_notmatch},
8185
8183
{"assert_true", 1, 2, f_assert_true},
8186
8184
#ifdef FEAT_FLOAT
8187
8185
{"atan", 1, 1, f_atan},
@@ -9323,8 +9321,17 @@ f_argv(typval_T *argvars, typval_T *rettv)
9323
9321
alist_name(&ARGLIST[idx]), -1);
9324
9322
}
9325
9323
9324
+ typedef enum
9325
+ {
9326
+ ASSERT_EQUAL,
9327
+ ASSERT_NOTEQUAL,
9328
+ ASSERT_MATCH,
9329
+ ASSERT_NOTMATCH,
9330
+ ASSERT_OTHER,
9331
+ } assert_type_T;
9332
+
9326
9333
static void prepare_assert_error(garray_T*gap);
9327
- static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, char_u *exp_str, typval_T *exp_tv, typval_T *got_tv, int is_match);
9334
+ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, char_u *exp_str, typval_T *exp_tv, typval_T *got_tv, assert_type_T is_match);
9328
9335
static void assert_error(garray_T *gap);
9329
9336
static void assert_bool(typval_T *argvars, int isTrue);
9330
9337
@@ -9400,7 +9407,7 @@ fill_assert_error(
9400
9407
char_u *exp_str,
9401
9408
typval_T *exp_tv,
9402
9409
typval_T *got_tv,
9403
- int is_match )
9410
+ assert_type_T atype )
9404
9411
{
9405
9412
char_u numbuf[NUMBUFLEN];
9406
9413
char_u *tofree;
@@ -9412,7 +9419,7 @@ fill_assert_error(
9412
9419
}
9413
9420
else
9414
9421
{
9415
- if (is_match )
9422
+ if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH )
9416
9423
ga_concat(gap, (char_u *)"Pattern ");
9417
9424
else
9418
9425
ga_concat(gap, (char_u *)"Expected ");
@@ -9423,8 +9430,12 @@ fill_assert_error(
9423
9430
}
9424
9431
else
9425
9432
ga_concat_esc(gap, exp_str);
9426
- if (is_match )
9433
+ if (atype == ASSERT_MATCH )
9427
9434
ga_concat(gap, (char_u *)" does not match ");
9435
+ else if (atype == ASSERT_NOTMATCH)
9436
+ ga_concat(gap, (char_u *)" does match ");
9437
+ else if (atype == ASSERT_NOTEQUAL)
9438
+ ga_concat(gap, (char_u *)" differs from ");
9428
9439
else
9429
9440
ga_concat(gap, (char_u *)" but got ");
9430
9441
ga_concat_esc(gap, tv2string(got_tv, &tofree, numbuf, 0));
@@ -9446,24 +9457,40 @@ assert_error(garray_T *gap)
9446
9457
list_append_string(vimvars[VV_ERRORS].vv_list, gap->ga_data, gap->ga_len);
9447
9458
}
9448
9459
9449
- /*
9450
- * "assert_equal(expected, actual[, msg])" function
9451
- */
9452
9460
static void
9453
- f_assert_equal (typval_T *argvars, typval_T *rettv UNUSED )
9461
+ assert_equal_common (typval_T *argvars, assert_type_T atype )
9454
9462
{
9455
9463
garray_T ga;
9456
9464
9457
- if (!tv_equal(&argvars[0], &argvars[1], FALSE, FALSE))
9465
+ if (tv_equal(&argvars[0], &argvars[1], FALSE, FALSE)
9466
+ != (atype == ASSERT_EQUAL))
9458
9467
{
9459
9468
prepare_assert_error(&ga);
9460
9469
fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1],
9461
- FALSE );
9470
+ atype );
9462
9471
assert_error(&ga);
9463
9472
ga_clear(&ga);
9464
9473
}
9465
9474
}
9466
9475
9476
+ /*
9477
+ * "assert_equal(expected, actual[, msg])" function
9478
+ */
9479
+ static void
9480
+ f_assert_equal(typval_T *argvars, typval_T *rettv UNUSED)
9481
+ {
9482
+ assert_equal_common(argvars, ASSERT_EQUAL);
9483
+ }
9484
+
9485
+ /*
9486
+ * "assert_notequal(expected, actual[, msg])" function
9487
+ */
9488
+ static void
9489
+ f_assert_notequal(typval_T *argvars, typval_T *rettv UNUSED)
9490
+ {
9491
+ assert_equal_common(argvars, ASSERT_NOTEQUAL);
9492
+ }
9493
+
9467
9494
/*
9468
9495
* "assert_exception(string[, msg])" function
9469
9496
*/
@@ -9486,7 +9513,7 @@ f_assert_exception(typval_T *argvars, typval_T *rettv UNUSED)
9486
9513
{
9487
9514
prepare_assert_error(&ga);
9488
9515
fill_assert_error(&ga, &argvars[1], NULL, &argvars[0],
9489
- &vimvars[VV_EXCEPTION].vv_tv, FALSE );
9516
+ &vimvars[VV_EXCEPTION].vv_tv, ASSERT_OTHER );
9490
9517
assert_error(&ga);
9491
9518
ga_clear(&ga);
9492
9519
}
@@ -9523,7 +9550,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv UNUSED)
9523
9550
{
9524
9551
prepare_assert_error(&ga);
9525
9552
fill_assert_error(&ga, &argvars[2], NULL, &argvars[1],
9526
- &vimvars[VV_ERRMSG].vv_tv, FALSE );
9553
+ &vimvars[VV_ERRMSG].vv_tv, ASSERT_OTHER );
9527
9554
assert_error(&ga);
9528
9555
ga_clear(&ga);
9529
9556
}
@@ -9555,7 +9582,7 @@ assert_bool(typval_T *argvars, int isTrue)
9555
9582
prepare_assert_error(&ga);
9556
9583
fill_assert_error(&ga, &argvars[1],
9557
9584
(char_u *)(isTrue ? "True" : "False"),
9558
- NULL, &argvars[0], FALSE );
9585
+ NULL, &argvars[0], ASSERT_OTHER );
9559
9586
assert_error(&ga);
9560
9587
ga_clear(&ga);
9561
9588
}
@@ -9570,11 +9597,8 @@ f_assert_false(typval_T *argvars, typval_T *rettv UNUSED)
9570
9597
assert_bool(argvars, FALSE);
9571
9598
}
9572
9599
9573
- /*
9574
- * "assert_match(pattern, actual[, msg])" function
9575
- */
9576
9600
static void
9577
- f_assert_match (typval_T *argvars, typval_T *rettv UNUSED )
9601
+ assert_match_common (typval_T *argvars, assert_type_T atype )
9578
9602
{
9579
9603
garray_T ga;
9580
9604
char_u buf1[NUMBUFLEN];
@@ -9584,16 +9608,34 @@ f_assert_match(typval_T *argvars, typval_T *rettv UNUSED)
9584
9608
9585
9609
if (pat == NULL || text == NULL)
9586
9610
EMSG(_(e_invarg));
9587
- else if (! pattern_match(pat, text, FALSE))
9611
+ else if (pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH ))
9588
9612
{
9589
9613
prepare_assert_error(&ga);
9590
9614
fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1],
9591
- TRUE );
9615
+ atype );
9592
9616
assert_error(&ga);
9593
9617
ga_clear(&ga);
9594
9618
}
9595
9619
}
9596
9620
9621
+ /*
9622
+ * "assert_match(pattern, actual[, msg])" function
9623
+ */
9624
+ static void
9625
+ f_assert_match(typval_T *argvars, typval_T *rettv UNUSED)
9626
+ {
9627
+ assert_match_common(argvars, ASSERT_MATCH);
9628
+ }
9629
+
9630
+ /*
9631
+ * "assert_notmatch(pattern, actual[, msg])" function
9632
+ */
9633
+ static void
9634
+ f_assert_notmatch(typval_T *argvars, typval_T *rettv UNUSED)
9635
+ {
9636
+ assert_match_common(argvars, ASSERT_NOTMATCH);
9637
+ }
9638
+
9597
9639
/*
9598
9640
* "assert_true(actual[, msg])" function
9599
9641
*/
0 commit comments