diff options
Diffstat (limited to 'lib/kunit/assert.c')
| -rw-r--r-- | lib/kunit/assert.c | 141 | 
1 files changed, 141 insertions, 0 deletions
diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c new file mode 100644 index 000000000000..86013d4cf891 --- /dev/null +++ b/lib/kunit/assert.c @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Assertion and expectation serialization API. + * + * Copyright (C) 2019, Google LLC. + * Author: Brendan Higgins <[email protected]> + */ +#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); +}  |