| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * C++ stream style string formatter and printer used in KUnit for outputting |
| * KUnit messages. |
| * |
| * Copyright (C) 2019, Google LLC. |
| * Author: Brendan Higgins <brendanhiggins@google.com> |
| */ |
| |
| #ifndef _KUNIT_KUNIT_STREAM_H |
| #define _KUNIT_KUNIT_STREAM_H |
| |
| #include <linux/types.h> |
| #include <kunit/string-stream.h> |
| |
| struct kunit; |
| |
| /** |
| * struct kunit_stream - a std::stream style string builder. |
| * |
| * A std::stream style string builder. Allows messages to be built up and |
| * printed all at once. |
| */ |
| struct kunit_stream { |
| /* private: internal use only. */ |
| struct kunit *test; |
| const char *level; |
| struct string_stream *internal_stream; |
| }; |
| |
| /** |
| * alloc_kunit_stream() - constructs a new &struct kunit_stream. |
| * @test: The test context object. |
| * @level: The log level at which to print out the message. |
| * |
| * Constructs a new test managed &struct kunit_stream. |
| */ |
| struct kunit_stream *alloc_kunit_stream(struct kunit *test, const char *level); |
| |
| /** |
| * kunit_stream_add(): adds the formatted input to the internal buffer. |
| * @kstream: the stream being operated on. |
| * @fmt: printf style format string to append to stream. |
| * |
| * Appends the formatted string, @fmt, to the internal buffer. |
| */ |
| void __printf(2, 3) kunit_stream_add(struct kunit_stream *kstream, |
| const char *fmt, ...); |
| |
| /** |
| * kunit_stream_append(): appends the contents of @other to @kstream. |
| * @kstream: the stream to which @other is appended. |
| * @other: the stream whose contents are appended to @kstream. |
| * |
| * Appends the contents of @other to @kstream. |
| */ |
| void kunit_stream_append(struct kunit_stream *kstream, |
| struct kunit_stream *other); |
| |
| /** |
| * kunit_stream_commit(): prints out the internal buffer to the user. |
| * @kstream: the stream being operated on. |
| * |
| * Outputs the contents of the internal buffer as a kunit_printk formatted |
| * output. KUNIT_STREAM ONLY OUTPUTS ITS BUFFER TO THE USER IF COMMIT IS |
| * CALLED!!! The reason for this is that it allows us to construct a message |
| * before we know whether we want to print it out; this can be extremely handy |
| * if there is information you might need for a failure message that is easiest |
| * to collect in the steps leading up to the actual check. |
| */ |
| void kunit_stream_commit(struct kunit_stream *kstream); |
| |
| /** |
| * kunit_stream_clear(): clears the internal buffer. |
| * @kstream: the stream being operated on. |
| * |
| * Clears the contents of the internal buffer. |
| */ |
| void kunit_stream_clear(struct kunit_stream *kstream); |
| |
| #endif /* _KUNIT_KUNIT_STREAM_H */ |