@@ -476,6 +476,8 @@ static void f_assert_exception(typval_T *argvars, typval_T *rettv);
476476static void f_assert_fails(typval_T *argvars, typval_T *rettv);
477477static void f_assert_false(typval_T *argvars, typval_T *rettv);
478478static 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);
479481static void f_assert_true(typval_T *argvars, typval_T *rettv);
480482#ifdef FEAT_FLOAT
481483static void f_asin(typval_T *argvars, typval_T *rettv);
@@ -8182,6 +8184,8 @@ static struct fst
81828184 {"assert_fails", 1, 2, f_assert_fails},
81838185 {"assert_false", 1, 2, f_assert_false},
81848186 {"assert_match", 2, 3, f_assert_match},
8187+ {"assert_notequal", 2, 3, f_assert_notequal},
8188+ {"assert_notmatch", 2, 3, f_assert_notmatch},
81858189 {"assert_true", 1, 2, f_assert_true},
81868190#ifdef FEAT_FLOAT
81878191 {"atan", 1, 1, f_atan},
@@ -9323,8 +9327,17 @@ f_argv(typval_T *argvars, typval_T *rettv)
93239327 alist_name(&ARGLIST[idx]), -1);
93249328}
93259329
9330+ typedef enum
9331+ {
9332+ ASSERT_EQUAL,
9333+ ASSERT_NOTEQUAL,
9334+ ASSERT_MATCH,
9335+ ASSERT_NOTMATCH,
9336+ ASSERT_OTHER,
9337+ } assert_type_T;
9338+
93269339static 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);
93289341static void assert_error(garray_T *gap);
93299342static void assert_bool(typval_T *argvars, int isTrue);
93309343
@@ -9400,7 +9413,7 @@ fill_assert_error(
94009413 char_u *exp_str,
94019414 typval_T *exp_tv,
94029415 typval_T *got_tv,
9403- int is_match )
9416+ assert_type_T atype )
94049417{
94059418 char_u numbuf[NUMBUFLEN];
94069419 char_u *tofree;
@@ -9412,7 +9425,7 @@ fill_assert_error(
94129425 }
94139426 else
94149427 {
9415- if (is_match )
9428+ if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH )
94169429 ga_concat(gap, (char_u *)"Pattern ");
94179430 else
94189431 ga_concat(gap, (char_u *)"Expected ");
@@ -9423,8 +9436,12 @@ fill_assert_error(
94239436 }
94249437 else
94259438 ga_concat_esc(gap, exp_str);
9426- if (is_match )
9439+ if (atype == ASSERT_MATCH )
94279440 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 ");
94289445 else
94299446 ga_concat(gap, (char_u *)" but got ");
94309447 ga_concat_esc(gap, tv2string(got_tv, &tofree, numbuf, 0));
@@ -9446,24 +9463,40 @@ assert_error(garray_T *gap)
94469463 list_append_string(vimvars[VV_ERRORS].vv_list, gap->ga_data, gap->ga_len);
94479464}
94489465
9449- /*
9450- * "assert_equal(expected, actual[, msg])" function
9451- */
94529466 static void
9453- f_assert_equal (typval_T *argvars, typval_T *rettv UNUSED )
9467+ assert_equal_common (typval_T *argvars, assert_type_T atype )
94549468{
94559469 garray_T ga;
94569470
9457- if (!tv_equal(&argvars[0], &argvars[1], FALSE, FALSE))
9471+ if (tv_equal(&argvars[0], &argvars[1], FALSE, FALSE)
9472+ != (atype == ASSERT_EQUAL))
94589473 {
94599474 prepare_assert_error(&ga);
94609475 fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1],
9461- FALSE );
9476+ atype );
94629477 assert_error(&ga);
94639478 ga_clear(&ga);
94649479 }
94659480}
94669481
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+
94679500/*
94689501 * "assert_exception(string[, msg])" function
94699502 */
@@ -9486,7 +9519,7 @@ f_assert_exception(typval_T *argvars, typval_T *rettv UNUSED)
94869519 {
94879520 prepare_assert_error(&ga);
94889521 fill_assert_error(&ga, &argvars[1], NULL, &argvars[0],
9489- &vimvars[VV_EXCEPTION].vv_tv, FALSE );
9522+ &vimvars[VV_EXCEPTION].vv_tv, ASSERT_OTHER );
94909523 assert_error(&ga);
94919524 ga_clear(&ga);
94929525 }
@@ -9523,7 +9556,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv UNUSED)
95239556 {
95249557 prepare_assert_error(&ga);
95259558 fill_assert_error(&ga, &argvars[2], NULL, &argvars[1],
9526- &vimvars[VV_ERRMSG].vv_tv, FALSE );
9559+ &vimvars[VV_ERRMSG].vv_tv, ASSERT_OTHER );
95279560 assert_error(&ga);
95289561 ga_clear(&ga);
95299562 }
@@ -9555,7 +9588,7 @@ assert_bool(typval_T *argvars, int isTrue)
95559588 prepare_assert_error(&ga);
95569589 fill_assert_error(&ga, &argvars[1],
95579590 (char_u *)(isTrue ? "True" : "False"),
9558- NULL, &argvars[0], FALSE );
9591+ NULL, &argvars[0], ASSERT_OTHER );
95599592 assert_error(&ga);
95609593 ga_clear(&ga);
95619594 }
@@ -9570,11 +9603,8 @@ f_assert_false(typval_T *argvars, typval_T *rettv UNUSED)
95709603 assert_bool(argvars, FALSE);
95719604}
95729605
9573- /*
9574- * "assert_match(pattern, actual[, msg])" function
9575- */
95769606 static void
9577- f_assert_match (typval_T *argvars, typval_T *rettv UNUSED )
9607+ assert_match_common (typval_T *argvars, assert_type_T atype )
95789608{
95799609 garray_T ga;
95809610 char_u buf1[NUMBUFLEN];
@@ -9584,16 +9614,34 @@ f_assert_match(typval_T *argvars, typval_T *rettv UNUSED)
95849614
95859615 if (pat == NULL || text == NULL)
95869616 EMSG(_(e_invarg));
9587- else if (! pattern_match(pat, text, FALSE))
9617+ else if (pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH ))
95889618 {
95899619 prepare_assert_error(&ga);
95909620 fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1],
9591- TRUE );
9621+ atype );
95929622 assert_error(&ga);
95939623 ga_clear(&ga);
95949624 }
95959625}
95969626
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+
95979645/*
95989646 * "assert_true(actual[, msg])" function
95999647 */
0 commit comments