shell: Extend dummy backend to record for testing

It is useful to run tests which generate shell output and check that it
is correct. Update the existing 'dummy' backend to support this.

It works by retaining the output in a small buffer so that it can be
read and checked by the test.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2020-04-30 15:25:04 -06:00 committed by Ioannis Glaropoulos
commit 2a8463e2b8
2 changed files with 44 additions and 0 deletions

View file

@ -1,4 +1,6 @@
/*
* Shell backend used for testing
*
* Copyright (c) 2018 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
@ -55,13 +57,22 @@ static int write(const struct shell_transport *transport,
const void *data, size_t length, size_t *cnt)
{
struct shell_dummy *sh_dummy = (struct shell_dummy *)transport->ctx;
size_t store_cnt;
if (!sh_dummy->initialized) {
*cnt = 0;
return -ENODEV;
}
store_cnt = length;
if (sh_dummy->len + store_cnt >= sizeof(sh_dummy->buf)) {
store_cnt = sizeof(sh_dummy->buf) - sh_dummy->len - 1;
}
memcpy(sh_dummy->buf + sh_dummy->len, data, store_cnt);
sh_dummy->len += store_cnt;
*cnt = length;
return 0;
}
@ -99,3 +110,16 @@ const struct shell *shell_backend_dummy_get_ptr(void)
{
return &shell_dummy;
}
const char *shell_backend_dummy_get_output(const struct shell *shell,
size_t *sizep)
{
struct shell_dummy *sh_dummy;
sh_dummy = (struct shell_dummy *)shell->iface->ctx;
sh_dummy->buf[sh_dummy->len] = '\0';
*sizep = sh_dummy->len;
sh_dummy->len = 0;
return sh_dummy->buf;
}