kunit: make KUNIT_EXPECT_STREQ() quote values, don't print literals
authorDaniel Latypov <dlatypov@google.com>
Fri, 2 Apr 2021 19:33:57 +0000 (12:33 -0700)
committerShuah Khan <skhan@linuxfoundation.org>
Fri, 2 Apr 2021 20:14:16 +0000 (14:14 -0600)
Before:
>  Expected str == "world", but
>      str == hello
>      "world" == world

After:
>  Expected str == "world", but
>      str == "hello"
<we don't need to tell the user that "world" == "world">

Note: like the literal ellision for integers, this doesn't handle the
case of
  KUNIT_EXPECT_STREQ(test, "hello", "world")
since we don't expect it to realistically happen in checked in tests.
(If you really wanted a test to fail, KUNIT_FAIL("msg") exists)

In that case, you'd get:
>  Expected "hello" == "world", but
<output for next failure>

Signed-off-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
lib/kunit/assert.c

index acfbf86..b972bda 100644 (file)
@@ -163,6 +163,22 @@ void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
 }
 EXPORT_SYMBOL_GPL(kunit_binary_ptr_assert_format);
 
+/* Checks if KUNIT_EXPECT_STREQ() args were string literals.
+ * Note: `text` will have ""s where as `value` will not.
+ */
+static bool is_str_literal(const char *text, const char *value)
+{
+       int len;
+
+       len = strlen(text);
+       if (len < 2)
+               return false;
+       if (text[0] != '\"' || text[len - 1] != '\"')
+               return false;
+
+       return strncmp(text + 1, value, len - 2) == 0;
+}
+
 void kunit_binary_str_assert_format(const struct kunit_assert *assert,
                                    struct string_stream *stream)
 {
@@ -177,12 +193,14 @@ void kunit_binary_str_assert_format(const struct kunit_assert *assert,
                          binary_assert->left_text,
                          binary_assert->operation,
                          binary_assert->right_text);
-       string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %s\n",
-                         binary_assert->left_text,
-                         binary_assert->left_value);
-       string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %s",
-                         binary_assert->right_text,
-                         binary_assert->right_value);
+       if (!is_str_literal(binary_assert->left_text, binary_assert->left_value))
+               string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == \"%s\"\n",
+                                 binary_assert->left_text,
+                                 binary_assert->left_value);
+       if (!is_str_literal(binary_assert->right_text, binary_assert->right_value))
+               string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == \"%s\"",
+                                 binary_assert->right_text,
+                                 binary_assert->right_value);
        kunit_assert_print_msg(assert, stream);
 }
 EXPORT_SYMBOL_GPL(kunit_binary_str_assert_format);