@@ -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);
@@ -8182,6 +8184,8 @@ static struct fst
8182
8184
{"assert_fails", 1, 2, f_assert_fails},
8183
8185
{"assert_false", 1, 2, f_assert_false},
8184
8186
{"assert_match", 2, 3, f_assert_match},
8187
+ {"assert_notequal", 2, 3, f_assert_notequal},
8188
+ {"assert_notmatch", 2, 3, f_assert_notmatch},
8185
8189
{"assert_true", 1, 2, f_assert_true},
8186
8190
#ifdef FEAT_FLOAT
8187
8191
{"atan", 1, 1, f_atan},
@@ -9323,8 +9327,17 @@ f_argv(typval_T *argvars, typval_T *rettv)
9323
9327
alist_name(&ARGLIST[idx]), -1);
9324
9328
}
9325
9329
9330
+ typedef enum
9331
+ {
9332
+ ASSERT_EQUAL,
9333
+ ASSERT_NOTEQUAL,
9334
+ ASSERT_MATCH,
9335
+ ASSERT_NOTMATCH,
9336
+ ASSERT_OTHER,
9337
+ } assert_type_T;
9338
+
9326
9339
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);
9340
+ 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
9341
static void assert_error(garray_T *gap);
9329
9342
static void assert_bool(typval_T *argvars, int isTrue);
9330
9343
@@ -9400,7 +9413,7 @@ fill_assert_error(
9400
9413
char_u *exp_str,
9401
9414
typval_T *exp_tv,
9402
9415
typval_T *got_tv,
9403
- int is_match )
9416
+ assert_type_T atype )
9404
9417
{
9405
9418
char_u numbuf[NUMBUFLEN];
9406
9419
char_u *tofree;
@@ -9412,7 +9425,7 @@ fill_assert_error(
9412
9425
}
9413
9426
else
9414
9427
{
9415
- if (is_match )
9428
+ if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH )
9416
9429
ga_concat(gap, (char_u *)"Pattern ");
9417
9430
else
9418
9431
ga_concat(gap, (char_u *)"Expected ");
@@ -9423,8 +9436,12 @@ fill_assert_error(
9423
9436
}
9424
9437
else
9425
9438
ga_concat_esc(gap, exp_str);
9426
- if (is_match )
9439
+ if (atype == ASSERT_MATCH )
9427
9440
ga_concat(gap, (char_u *)" does not match ");
9441
+ else if (atype == ASSERT_NOTMATCH)
9442
+ ga_concat(gap, (char_u *)" does match ");
9443
+ else if (atype == ASSERT_NOTEQUAL)
9444
+ ga_concat(gap, (char_u *)" differs from ");
9428
9445
else
9429
9446
ga_concat(gap, (char_u *)" but got ");
9430
9447
ga_concat_esc(gap, tv2string(got_tv, &tofree, numbuf, 0));
@@ -9446,24 +9463,40 @@ assert_error(garray_T *gap)
9446
9463
list_append_string(vimvars[VV_ERRORS].vv_list, gap->ga_data, gap->ga_len);
9447
9464
}
9448
9465
9449
- /*
9450
- * "assert_equal(expected, actual[, msg])" function
9451
- */
9452
9466
static void
9453
- f_assert_equal (typval_T *argvars, typval_T *rettv UNUSED )
9467
+ assert_equal_common (typval_T *argvars, assert_type_T atype )
9454
9468
{
9455
9469
garray_T ga;
9456
9470
9457
- if (!tv_equal(&argvars[0], &argvars[1], FALSE, FALSE))
9471
+ if (tv_equal(&argvars[0], &argvars[1], FALSE, FALSE)
9472
+ != (atype == ASSERT_EQUAL))
9458
9473
{
9459
9474
prepare_assert_error(&ga);
9460
9475
fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1],
9461
- FALSE );
9476
+ atype );
9462
9477
assert_error(&ga);
9463
9478
ga_clear(&ga);
9464
9479
}
9465
9480
}
9466
9481
9482
+ /*
9483
+ * "assert_equal(expected, actual[, msg])" function
9484
+ */
9485
+ static void
9486
+ f_assert_equal(typval_T *argvars, typval_T *rettv UNUSED)
9487
+ {
9488
+ assert_equal_common(argvars, ASSERT_EQUAL);
9489
+ }
9490
+
9491
+ /*
9492
+ * "assert_notequal(expected, actual[, msg])" function
9493
+ */
9494
+ static void
9495
+ f_assert_notequal(typval_T *argvars, typval_T *rettv UNUSED)
9496
+ {
9497
+ assert_equal_common(argvars, ASSERT_NOTEQUAL);
9498
+ }
9499
+
9467
9500
/*
9468
9501
* "assert_exception(string[, msg])" function
9469
9502
*/
@@ -9486,7 +9519,7 @@ f_assert_exception(typval_T *argvars, typval_T *rettv UNUSED)
9486
9519
{
9487
9520
prepare_assert_error(&ga);
9488
9521
fill_assert_error(&ga, &argvars[1], NULL, &argvars[0],
9489
- &vimvars[VV_EXCEPTION].vv_tv, FALSE );
9522
+ &vimvars[VV_EXCEPTION].vv_tv, ASSERT_OTHER );
9490
9523
assert_error(&ga);
9491
9524
ga_clear(&ga);
9492
9525
}
@@ -9523,7 +9556,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv UNUSED)
9523
9556
{
9524
9557
prepare_assert_error(&ga);
9525
9558
fill_assert_error(&ga, &argvars[2], NULL, &argvars[1],
9526
- &vimvars[VV_ERRMSG].vv_tv, FALSE );
9559
+ &vimvars[VV_ERRMSG].vv_tv, ASSERT_OTHER );
9527
9560
assert_error(&ga);
9528
9561
ga_clear(&ga);
9529
9562
}
@@ -9555,7 +9588,7 @@ assert_bool(typval_T *argvars, int isTrue)
9555
9588
prepare_assert_error(&ga);
9556
9589
fill_assert_error(&ga, &argvars[1],
9557
9590
(char_u *)(isTrue ? "True" : "False"),
9558
- NULL, &argvars[0], FALSE );
9591
+ NULL, &argvars[0], ASSERT_OTHER );
9559
9592
assert_error(&ga);
9560
9593
ga_clear(&ga);
9561
9594
}
@@ -9570,11 +9603,8 @@ f_assert_false(typval_T *argvars, typval_T *rettv UNUSED)
9570
9603
assert_bool(argvars, FALSE);
9571
9604
}
9572
9605
9573
- /*
9574
- * "assert_match(pattern, actual[, msg])" function
9575
- */
9576
9606
static void
9577
- f_assert_match (typval_T *argvars, typval_T *rettv UNUSED )
9607
+ assert_match_common (typval_T *argvars, assert_type_T atype )
9578
9608
{
9579
9609
garray_T ga;
9580
9610
char_u buf1[NUMBUFLEN];
@@ -9584,16 +9614,34 @@ f_assert_match(typval_T *argvars, typval_T *rettv UNUSED)
9584
9614
9585
9615
if (pat == NULL || text == NULL)
9586
9616
EMSG(_(e_invarg));
9587
- else if (! pattern_match(pat, text, FALSE))
9617
+ else if (pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH ))
9588
9618
{
9589
9619
prepare_assert_error(&ga);
9590
9620
fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1],
9591
- TRUE );
9621
+ atype );
9592
9622
assert_error(&ga);
9593
9623
ga_clear(&ga);
9594
9624
}
9595
9625
}
9596
9626
9627
+ /*
9628
+ * "assert_match(pattern, actual[, msg])" function
9629
+ */
9630
+ static void
9631
+ f_assert_match(typval_T *argvars, typval_T *rettv UNUSED)
9632
+ {
9633
+ assert_match_common(argvars, ASSERT_MATCH);
9634
+ }
9635
+
9636
+ /*
9637
+ * "assert_notmatch(pattern, actual[, msg])" function
9638
+ */
9639
+ static void
9640
+ f_assert_notmatch(typval_T *argvars, typval_T *rettv UNUSED)
9641
+ {
9642
+ assert_match_common(argvars, ASSERT_NOTMATCH);
9643
+ }
9644
+
9597
9645
/*
9598
9646
* "assert_true(actual[, msg])" function
9599
9647
*/
0 commit comments