blob: d457a54fe01000c87ad663bf47d1837a5ee57fe3 [file] [log] [blame]
/* 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;
spinlock_t lock; /* Guards level. */
const char *level;
struct string_stream *internal_stream;
};
/**
* kunit_new_stream() - constructs a new &struct kunit_stream.
* @test: The test context object.
*
* Constructs a new test managed &struct kunit_stream.
*/
struct kunit_stream *kunit_new_stream(struct kunit *test);
/**
* kunit_stream_set_level(): sets the level that string should be printed at.
* @this: the stream being operated on.
* @level: the print level the stream is set to output to.
*
* Sets the print level at which the stream outputs.
*/
void kunit_stream_set_level(struct kunit_stream *this, const char *level);
/**
* kunit_stream_add(): adds the formatted input to the internal buffer.
* @this: 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 *this,
const char *fmt, ...);
/**
* kunit_stream_append(): appends the contents of @other to @this.
* @this: the stream to which @other is appended.
* @other: the stream whose contents are appended to @this.
*
* Appends the contents of @other to @this.
*/
void kunit_stream_append(struct kunit_stream *this, struct kunit_stream *other);
/**
* kunit_stream_commit(): prints out the internal buffer to the user.
* @this: the stream being operated on.
*
* Outputs the contents of the internal buffer as a kunit_printk formatted
* output.
*/
void kunit_stream_commit(struct kunit_stream *this);
/**
* kunit_stream_clear(): clears the internal buffer.
* @this: the stream being operated on.
*
* Clears the contents of the internal buffer.
*/
void kunit_stream_clear(struct kunit_stream *this);
#endif /* _KUNIT_KUNIT_STREAM_H */