https://github.com/torvalds/linux
Raw File
Tip revision: e42617b825f8073569da76dc4510bfa019b1c35a authored by Linus Torvalds on 08 December 2019, 22:57:55 UTC
Linux 5.5-rc1
Tip revision: e42617b
assert.c
// SPDX-License-Identifier: GPL-2.0
/*
 * Assertion and expectation serialization API.
 *
 * Copyright (C) 2019, Google LLC.
 * Author: Brendan Higgins <brendanhiggins@google.com>
 */
#include <kunit/assert.h>

void kunit_base_assert_format(const struct kunit_assert *assert,
			      struct string_stream *stream)
{
	const char *expect_or_assert = NULL;

	switch (assert->type) {
	case KUNIT_EXPECTATION:
		expect_or_assert = "EXPECTATION";
		break;
	case KUNIT_ASSERTION:
		expect_or_assert = "ASSERTION";
		break;
	}

	string_stream_add(stream, "%s FAILED at %s:%d\n",
			 expect_or_assert, assert->file, assert->line);
}

void kunit_assert_print_msg(const struct kunit_assert *assert,
			    struct string_stream *stream)
{
	if (assert->message.fmt)
		string_stream_add(stream, "\n%pV", &assert->message);
}

void kunit_fail_assert_format(const struct kunit_assert *assert,
			      struct string_stream *stream)
{
	kunit_base_assert_format(assert, stream);
	string_stream_add(stream, "%pV", &assert->message);
}

void kunit_unary_assert_format(const struct kunit_assert *assert,
			       struct string_stream *stream)
{
	struct kunit_unary_assert *unary_assert = container_of(
			assert, struct kunit_unary_assert, assert);

	kunit_base_assert_format(assert, stream);
	if (unary_assert->expected_true)
		string_stream_add(stream,
				 "\tExpected %s to be true, but is false\n",
				 unary_assert->condition);
	else
		string_stream_add(stream,
				 "\tExpected %s to be false, but is true\n",
				 unary_assert->condition);
	kunit_assert_print_msg(assert, stream);
}

void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
				     struct string_stream *stream)
{
	struct kunit_ptr_not_err_assert *ptr_assert = container_of(
			assert, struct kunit_ptr_not_err_assert, assert);

	kunit_base_assert_format(assert, stream);
	if (!ptr_assert->value) {
		string_stream_add(stream,
				 "\tExpected %s is not null, but is\n",
				 ptr_assert->text);
	} else if (IS_ERR(ptr_assert->value)) {
		string_stream_add(stream,
				 "\tExpected %s is not error, but is: %ld\n",
				 ptr_assert->text,
				 PTR_ERR(ptr_assert->value));
	}
	kunit_assert_print_msg(assert, stream);
}

void kunit_binary_assert_format(const struct kunit_assert *assert,
				struct string_stream *stream)
{
	struct kunit_binary_assert *binary_assert = container_of(
			assert, struct kunit_binary_assert, assert);

	kunit_base_assert_format(assert, stream);
	string_stream_add(stream,
			 "\tExpected %s %s %s, but\n",
			 binary_assert->left_text,
			 binary_assert->operation,
			 binary_assert->right_text);
	string_stream_add(stream, "\t\t%s == %lld\n",
			 binary_assert->left_text,
			 binary_assert->left_value);
	string_stream_add(stream, "\t\t%s == %lld",
			 binary_assert->right_text,
			 binary_assert->right_value);
	kunit_assert_print_msg(assert, stream);
}

void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
				    struct string_stream *stream)
{
	struct kunit_binary_ptr_assert *binary_assert = container_of(
			assert, struct kunit_binary_ptr_assert, assert);

	kunit_base_assert_format(assert, stream);
	string_stream_add(stream,
			 "\tExpected %s %s %s, but\n",
			 binary_assert->left_text,
			 binary_assert->operation,
			 binary_assert->right_text);
	string_stream_add(stream, "\t\t%s == %pK\n",
			 binary_assert->left_text,
			 binary_assert->left_value);
	string_stream_add(stream, "\t\t%s == %pK",
			 binary_assert->right_text,
			 binary_assert->right_value);
	kunit_assert_print_msg(assert, stream);
}

void kunit_binary_str_assert_format(const struct kunit_assert *assert,
				    struct string_stream *stream)
{
	struct kunit_binary_str_assert *binary_assert = container_of(
			assert, struct kunit_binary_str_assert, assert);

	kunit_base_assert_format(assert, stream);
	string_stream_add(stream,
			 "\tExpected %s %s %s, but\n",
			 binary_assert->left_text,
			 binary_assert->operation,
			 binary_assert->right_text);
	string_stream_add(stream, "\t\t%s == %s\n",
			 binary_assert->left_text,
			 binary_assert->left_value);
	string_stream_add(stream, "\t\t%s == %s",
			 binary_assert->right_text,
			 binary_assert->right_value);
	kunit_assert_print_msg(assert, stream);
}
back to top