linux/lib/kunit/assert.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Assertion and expectation serialization API.
   4 *
   5 * Copyright (C) 2019, Google LLC.
   6 * Author: Brendan Higgins <brendanhiggins@google.com>
   7 */
   8#include <kunit/assert.h>
   9#include <kunit/test.h>
  10
  11#include "string-stream.h"
  12
  13void kunit_base_assert_format(const struct kunit_assert *assert,
  14                              struct string_stream *stream)
  15{
  16        const char *expect_or_assert = NULL;
  17
  18        switch (assert->type) {
  19        case KUNIT_EXPECTATION:
  20                expect_or_assert = "EXPECTATION";
  21                break;
  22        case KUNIT_ASSERTION:
  23                expect_or_assert = "ASSERTION";
  24                break;
  25        }
  26
  27        string_stream_add(stream, "%s FAILED at %s:%d\n",
  28                         expect_or_assert, assert->file, assert->line);
  29}
  30EXPORT_SYMBOL_GPL(kunit_base_assert_format);
  31
  32void kunit_assert_print_msg(const struct kunit_assert *assert,
  33                            struct string_stream *stream)
  34{
  35        if (assert->message.fmt)
  36                string_stream_add(stream, "\n%pV", &assert->message);
  37}
  38EXPORT_SYMBOL_GPL(kunit_assert_print_msg);
  39
  40void kunit_fail_assert_format(const struct kunit_assert *assert,
  41                              struct string_stream *stream)
  42{
  43        kunit_base_assert_format(assert, stream);
  44        string_stream_add(stream, "%pV", &assert->message);
  45}
  46EXPORT_SYMBOL_GPL(kunit_fail_assert_format);
  47
  48void kunit_unary_assert_format(const struct kunit_assert *assert,
  49                               struct string_stream *stream)
  50{
  51        struct kunit_unary_assert *unary_assert = container_of(
  52                        assert, struct kunit_unary_assert, assert);
  53
  54        kunit_base_assert_format(assert, stream);
  55        if (unary_assert->expected_true)
  56                string_stream_add(stream,
  57                                  KUNIT_SUBTEST_INDENT "Expected %s to be true, but is false\n",
  58                                  unary_assert->condition);
  59        else
  60                string_stream_add(stream,
  61                                  KUNIT_SUBTEST_INDENT "Expected %s to be false, but is true\n",
  62                                  unary_assert->condition);
  63        kunit_assert_print_msg(assert, stream);
  64}
  65EXPORT_SYMBOL_GPL(kunit_unary_assert_format);
  66
  67void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
  68                                     struct string_stream *stream)
  69{
  70        struct kunit_ptr_not_err_assert *ptr_assert = container_of(
  71                        assert, struct kunit_ptr_not_err_assert, assert);
  72
  73        kunit_base_assert_format(assert, stream);
  74        if (!ptr_assert->value) {
  75                string_stream_add(stream,
  76                                  KUNIT_SUBTEST_INDENT "Expected %s is not null, but is\n",
  77                                  ptr_assert->text);
  78        } else if (IS_ERR(ptr_assert->value)) {
  79                string_stream_add(stream,
  80                                  KUNIT_SUBTEST_INDENT "Expected %s is not error, but is: %ld\n",
  81                                  ptr_assert->text,
  82                                  PTR_ERR(ptr_assert->value));
  83        }
  84        kunit_assert_print_msg(assert, stream);
  85}
  86EXPORT_SYMBOL_GPL(kunit_ptr_not_err_assert_format);
  87
  88void kunit_binary_assert_format(const struct kunit_assert *assert,
  89                                struct string_stream *stream)
  90{
  91        struct kunit_binary_assert *binary_assert = container_of(
  92                        assert, struct kunit_binary_assert, assert);
  93
  94        kunit_base_assert_format(assert, stream);
  95        string_stream_add(stream,
  96                          KUNIT_SUBTEST_INDENT "Expected %s %s %s, but\n",
  97                          binary_assert->left_text,
  98                          binary_assert->operation,
  99                          binary_assert->right_text);
 100        string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n",
 101                          binary_assert->left_text,
 102                          binary_assert->left_value);
 103        string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld",
 104                          binary_assert->right_text,
 105                          binary_assert->right_value);
 106        kunit_assert_print_msg(assert, stream);
 107}
 108EXPORT_SYMBOL_GPL(kunit_binary_assert_format);
 109
 110void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
 111                                    struct string_stream *stream)
 112{
 113        struct kunit_binary_ptr_assert *binary_assert = container_of(
 114                        assert, struct kunit_binary_ptr_assert, assert);
 115
 116        kunit_base_assert_format(assert, stream);
 117        string_stream_add(stream,
 118                          KUNIT_SUBTEST_INDENT "Expected %s %s %s, but\n",
 119                          binary_assert->left_text,
 120                          binary_assert->operation,
 121                          binary_assert->right_text);
 122        string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %px\n",
 123                          binary_assert->left_text,
 124                          binary_assert->left_value);
 125        string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %px",
 126                          binary_assert->right_text,
 127                          binary_assert->right_value);
 128        kunit_assert_print_msg(assert, stream);
 129}
 130EXPORT_SYMBOL_GPL(kunit_binary_ptr_assert_format);
 131
 132void kunit_binary_str_assert_format(const struct kunit_assert *assert,
 133                                    struct string_stream *stream)
 134{
 135        struct kunit_binary_str_assert *binary_assert = container_of(
 136                        assert, struct kunit_binary_str_assert, assert);
 137
 138        kunit_base_assert_format(assert, stream);
 139        string_stream_add(stream,
 140                          KUNIT_SUBTEST_INDENT "Expected %s %s %s, but\n",
 141                          binary_assert->left_text,
 142                          binary_assert->operation,
 143                          binary_assert->right_text);
 144        string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %s\n",
 145                          binary_assert->left_text,
 146                          binary_assert->left_value);
 147        string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %s",
 148                          binary_assert->right_text,
 149                          binary_assert->right_value);
 150        kunit_assert_print_msg(assert, stream);
 151}
 152EXPORT_SYMBOL_GPL(kunit_binary_str_assert_format);
 153