test: Add a way to skip console checking until a string matches
Some tests produce a lot of output that does not need to be individually checked by an assertion. Add a macro to handle this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
b9274095c2
commit
2e09008c3c
@ -82,6 +82,21 @@ int ut_check_console_linen(struct unit_test_state *uts, const char *fmt, ...)
|
||||
*/
|
||||
int ut_check_skipline(struct unit_test_state *uts);
|
||||
|
||||
/**
|
||||
* ut_check_skip_to_line() - skip output until a line is found
|
||||
*
|
||||
* This creates a string and then checks it against the following lines of
|
||||
* console output obtained with console_record_readline() until it is found.
|
||||
*
|
||||
* After the function returns, uts->expect_str holds the expected string and
|
||||
* uts->actual_str holds the actual string read from the console.
|
||||
*
|
||||
* @uts: Test state
|
||||
* @fmt: printf() format string to look for, followed by args
|
||||
* @return 0 if OK, -ENOENT if not found, other value on error
|
||||
*/
|
||||
int ut_check_skip_to_line(struct unit_test_state *uts, const char *fmt, ...);
|
||||
|
||||
/**
|
||||
* ut_check_console_end() - Check there is no more console output
|
||||
*
|
||||
@ -286,6 +301,15 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
return CMD_RET_FAILURE; \
|
||||
} \
|
||||
|
||||
/* Assert that a following console output line matches */
|
||||
#define ut_assert_skip_to_line(fmt, args...) \
|
||||
if (ut_check_skip_to_line(uts, fmt, ##args)) { \
|
||||
ut_failf(uts, __FILE__, __LINE__, __func__, \
|
||||
"console", "\nExpected '%s',\n got to '%s'", \
|
||||
uts->expect_str, uts->actual_str); \
|
||||
return CMD_RET_FAILURE; \
|
||||
} \
|
||||
|
||||
/* Assert that there is no more console output */
|
||||
#define ut_assert_console_end() \
|
||||
if (ut_check_console_end(uts)) { \
|
||||
|
26
test/ut.c
26
test/ut.c
@ -121,6 +121,32 @@ int ut_check_skipline(struct unit_test_state *uts)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ut_check_skip_to_line(struct unit_test_state *uts, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
int len;
|
||||
int ret;
|
||||
|
||||
va_start(args, fmt);
|
||||
len = vsnprintf(uts->expect_str, sizeof(uts->expect_str), fmt, args);
|
||||
va_end(args);
|
||||
if (len >= sizeof(uts->expect_str)) {
|
||||
ut_fail(uts, __FILE__, __LINE__, __func__,
|
||||
"unit_test_state->expect_str too small");
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
while (1) {
|
||||
if (!console_record_avail())
|
||||
return -ENOENT;
|
||||
ret = readline_check(uts);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (!strcmp(uts->expect_str, uts->actual_str))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ut_check_console_end(struct unit_test_state *uts)
|
||||
{
|
||||
int ret;
|
||||
|
Loading…
Reference in New Issue
Block a user