blob: 2fdd29a265f73dd852fcbf766d5ee331c3707803 [file] [log] [blame]
Simon Glass17b45e62023-03-28 08:34:13 +13001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2023 Google LLC
4 */
5
6#include <common.h>
7#include <cli.h>
8#include <test/common.h>
9#include <test/test.h>
10#include <test/ut.h>
11
12static int cli_ch_test(struct unit_test_state *uts)
13{
14 struct cli_ch_state s_cch, *cch = &s_cch;
15
16 cli_ch_init(cch);
17
18 /* should be nothing to return at first */
19 ut_asserteq(0, cli_ch_process(cch, 0));
20
21 /* check normal entry */
22 ut_asserteq('a', cli_ch_process(cch, 'a'));
23 ut_asserteq('b', cli_ch_process(cch, 'b'));
24 ut_asserteq('c', cli_ch_process(cch, 'c'));
25 ut_asserteq(0, cli_ch_process(cch, 0));
26
27 /* send an invalid escape sequence */
28 ut_asserteq(0, cli_ch_process(cch, '\e'));
29 ut_asserteq(0, cli_ch_process(cch, '['));
30
31 /*
32 * with the next char it sees that the sequence is invalid, so starts
33 * emitting it
34 */
35 ut_asserteq('\e', cli_ch_process(cch, 'X'));
36
37 /* now we set 0 bytes to empty the buffer */
38 ut_asserteq('[', cli_ch_process(cch, 0));
39 ut_asserteq('X', cli_ch_process(cch, 0));
40 ut_asserteq(0, cli_ch_process(cch, 0));
41
42 /* things are normal again */
43 ut_asserteq('a', cli_ch_process(cch, 'a'));
44 ut_asserteq(0, cli_ch_process(cch, 0));
45
46 return 0;
47}
48COMMON_TEST(cli_ch_test, 0);
Simon Glassbe0169f2023-03-28 08:34:14 +130049
50static int cread_test(struct unit_test_state *uts)
51{
52 int duration;
53 ulong start;
54 char buf[10];
55
56 /*
57 * useful for debugging
58 *
59 * gd->flags &= ~GD_FLG_RECORD;
60 * print_buffer(0, buf, 1, 7, 0);
61 */
62
63 console_record_reset_enable();
64
65 /* simple input */
66 *buf = '\0';
67 ut_asserteq(4, console_in_puts("abc\n"));
68 ut_asserteq(3, cli_readline_into_buffer("-> ", buf, 1));
69 ut_asserteq_str("abc", buf);
70
71 /* try an escape sequence (cursor left after the 'c') */
72 *buf = '\0';
73 ut_asserteq(8, console_in_puts("abc\e[Dx\n"));
74 ut_asserteq(4, cli_readline_into_buffer("-> ", buf, 1));
75 ut_asserteq_str("abxc", buf);
76
77 /* invalid escape sequence */
78 *buf = '\0';
79 ut_asserteq(8, console_in_puts("abc\e[Xx\n"));
80 ut_asserteq(7, cli_readline_into_buffer("-> ", buf, 1));
81 ut_asserteq_str("abc\e[Xx", buf);
82
83 /* check timeout, should be between 1000 and 1050ms */
84 start = get_timer(0);
85 *buf = '\0';
86 ut_asserteq(-2, cli_readline_into_buffer("-> ", buf, 1));
87 duration = get_timer(start) - 1000;
88 ut_assert(duration >= 0);
89 ut_assert(duration < 50);
90
91 return 0;
92}
93COMMON_TEST(cread_test, 0);