A kunit suite is a top level test from the KTAP point of view but
all suite diagnostic messages are printed at the subtest level:

    $ ./tools/testing/kunit/kunit.py run --raw_output \
        --kunitconfig ./lib/kunit/.kunitconfig "example.*simple*"

    KTAP version 1
    1..1
        # example: initializing suite
        # example: failed to initialize (-ENODEV)
    not ok 1 example

    KTAP version 1
    1..1
        # example: initializing suite
        KTAP version 1
        # Subtest: example
        # module: kunit_example_test
        1..1
        # example_simple_test: initializing
        # example_simple_test: cleaning up
        ok 1 example_simple_test
        # example: exiting suite
    ok 1 example

Replace hardcoded indent in kunit_printk() with flexible
indentation based on the argument type (test or suite):

    KTAP version 1
    1..1
    # example: initializing suite
    # example: failed to initialize (-ENODEV)
    not ok 1 example

    KTAP version 1
    1..1
    # example: initializing suite
        KTAP version 1
        # Subtest: example
        # module: kunit_example_test
        1..1
        # example_simple_test: initializing
        # example_simple_test: cleaning up
        ok 1 example_simple_test
    # example: exiting suite
    ok 1 example

Signed-off-by: Michal Wajdeczko <[email protected]>
Cc: David Gow <[email protected]>
Cc: Rae Moar <[email protected]>
---
 include/kunit/test.h | 24 ++++++++++++++++++++++--
 lib/kunit/test.c     |  7 -------
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index 20ed9f9275c9..158876c4cb43 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -509,6 +509,21 @@ void __printf(2, 3) kunit_log_append(struct string_stream 
*log, const char *fmt,
                kunit_try_catch_throw(&((test_or_suite)->try_catch));   \
        } while (0)
 
+/* Currently supported test levels */
+enum {
+       KUNIT_LEVEL_SUITE = 0,
+       KUNIT_LEVEL_CASE,
+       KUNIT_LEVEL_CASE_PARAM,
+};
+
+#define kunit_level(test_or_suite)                                     \
+       _Generic((test_or_suite),                                       \
+                struct kunit_suite * : KUNIT_LEVEL_SUITE,              \
+                struct kunit * : KUNIT_LEVEL_CASE)
+
+#define kunit_indent_level(test_or_suite)                              \
+       (KUNIT_INDENT_LEN * kunit_level(test_or_suite))
+
 /*
  * printk and log to per-test or per-suite log buffer.  Logging only done
  * if CONFIG_KUNIT_DEBUGFS is 'y'; if it is 'n', no log is allocated/used.
@@ -520,9 +535,14 @@ void __printf(2, 3) kunit_log_append(struct string_stream 
*log, const char *fmt,
                                 ##__VA_ARGS__);                        \
        } while (0)
 
+#define kunit_log_indent(lvl, test_or_suite, fmt, ...)                 \
+       kunit_log(lvl, test_or_suite, "%*s" fmt,                        \
+                 kunit_indent_level(test_or_suite), "",                \
+                 ##__VA_ARGS__)
+
 #define kunit_printk(lvl, test, fmt, ...)                              \
-       kunit_log(lvl, test, KUNIT_SUBTEST_INDENT "# %s: " fmt,         \
-                 (test)->name, ##__VA_ARGS__)
+       kunit_log_indent(lvl, test, "# %s: " fmt,                       \
+                        (test)->name, ##__VA_ARGS__)
 
 /**
  * kunit_info() - Prints an INFO level message associated with @test.
diff --git a/lib/kunit/test.c b/lib/kunit/test.c
index fb5981ce578d..d10e6d610e20 100644
--- a/lib/kunit/test.c
+++ b/lib/kunit/test.c
@@ -135,13 +135,6 @@ size_t kunit_suite_num_test_cases(struct kunit_suite 
*suite)
 }
 EXPORT_SYMBOL_GPL(kunit_suite_num_test_cases);
 
-/* Currently supported test levels */
-enum {
-       KUNIT_LEVEL_SUITE = 0,
-       KUNIT_LEVEL_CASE,
-       KUNIT_LEVEL_CASE_PARAM,
-};
-
 static void kunit_print_suite_start(struct kunit_suite *suite)
 {
        /*
-- 
2.25.1

Reply via email to