1 // SPDX-License-Identifier: GPL-2.0
3 * Assertion and expectation serialization API.
5 * Copyright (C) 2019, Google LLC.
6 * Author: Brendan Higgins <brendanhiggins@google.com>
8 #include <kunit/assert.h>
10 void kunit_base_assert_format(const struct kunit_assert *assert,
11 struct string_stream *stream)
13 const char *expect_or_assert = NULL;
15 switch (assert->type) {
16 case KUNIT_EXPECTATION:
17 expect_or_assert = "EXPECTATION";
20 expect_or_assert = "ASSERTION";
24 string_stream_add(stream, "%s FAILED at %s:%d\n",
25 expect_or_assert, assert->file, assert->line);
28 void kunit_assert_print_msg(const struct kunit_assert *assert,
29 struct string_stream *stream)
31 if (assert->message.fmt)
32 string_stream_add(stream, "\n%pV", &assert->message);
35 void kunit_fail_assert_format(const struct kunit_assert *assert,
36 struct string_stream *stream)
38 kunit_base_assert_format(assert, stream);
39 string_stream_add(stream, "%pV", &assert->message);
42 void kunit_unary_assert_format(const struct kunit_assert *assert,
43 struct string_stream *stream)
45 struct kunit_unary_assert *unary_assert = container_of(
46 assert, struct kunit_unary_assert, assert);
48 kunit_base_assert_format(assert, stream);
49 if (unary_assert->expected_true)
50 string_stream_add(stream,
51 "\tExpected %s to be true, but is false\n",
52 unary_assert->condition);
54 string_stream_add(stream,
55 "\tExpected %s to be false, but is true\n",
56 unary_assert->condition);
57 kunit_assert_print_msg(assert, stream);
60 void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
61 struct string_stream *stream)
63 struct kunit_ptr_not_err_assert *ptr_assert = container_of(
64 assert, struct kunit_ptr_not_err_assert, assert);
66 kunit_base_assert_format(assert, stream);
67 if (!ptr_assert->value) {
68 string_stream_add(stream,
69 "\tExpected %s is not null, but is\n",
71 } else if (IS_ERR(ptr_assert->value)) {
72 string_stream_add(stream,
73 "\tExpected %s is not error, but is: %ld\n",
75 PTR_ERR(ptr_assert->value));
77 kunit_assert_print_msg(assert, stream);
80 void kunit_binary_assert_format(const struct kunit_assert *assert,
81 struct string_stream *stream)
83 struct kunit_binary_assert *binary_assert = container_of(
84 assert, struct kunit_binary_assert, assert);
86 kunit_base_assert_format(assert, stream);
87 string_stream_add(stream,
88 "\tExpected %s %s %s, but\n",
89 binary_assert->left_text,
90 binary_assert->operation,
91 binary_assert->right_text);
92 string_stream_add(stream, "\t\t%s == %lld\n",
93 binary_assert->left_text,
94 binary_assert->left_value);
95 string_stream_add(stream, "\t\t%s == %lld",
96 binary_assert->right_text,
97 binary_assert->right_value);
98 kunit_assert_print_msg(assert, stream);
101 void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
102 struct string_stream *stream)
104 struct kunit_binary_ptr_assert *binary_assert = container_of(
105 assert, struct kunit_binary_ptr_assert, assert);
107 kunit_base_assert_format(assert, stream);
108 string_stream_add(stream,
109 "\tExpected %s %s %s, but\n",
110 binary_assert->left_text,
111 binary_assert->operation,
112 binary_assert->right_text);
113 string_stream_add(stream, "\t\t%s == %pK\n",
114 binary_assert->left_text,
115 binary_assert->left_value);
116 string_stream_add(stream, "\t\t%s == %pK",
117 binary_assert->right_text,
118 binary_assert->right_value);
119 kunit_assert_print_msg(assert, stream);
122 void kunit_binary_str_assert_format(const struct kunit_assert *assert,
123 struct string_stream *stream)
125 struct kunit_binary_str_assert *binary_assert = container_of(
126 assert, struct kunit_binary_str_assert, assert);
128 kunit_base_assert_format(assert, stream);
129 string_stream_add(stream,
130 "\tExpected %s %s %s, but\n",
131 binary_assert->left_text,
132 binary_assert->operation,
133 binary_assert->right_text);
134 string_stream_add(stream, "\t\t%s == %s\n",
135 binary_assert->left_text,
136 binary_assert->left_value);
137 string_stream_add(stream, "\t\t%s == %s",
138 binary_assert->right_text,
139 binary_assert->right_value);
140 kunit_assert_print_msg(assert, stream);