1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2023 Google LLC
8 #include <test/common.h>
12 static int cli_ch_test(struct unit_test_state *uts)
14 struct cli_ch_state s_cch, *cch = &s_cch;
18 /* should be nothing to return at first */
19 ut_asserteq(0, cli_ch_process(cch, 0));
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));
27 /* send an invalid escape sequence */
28 ut_asserteq(0, cli_ch_process(cch, '\e'));
29 ut_asserteq(0, cli_ch_process(cch, '['));
32 * with the next char it sees that the sequence is invalid, so starts
35 ut_asserteq('\e', cli_ch_process(cch, 'X'));
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));
42 /* things are normal again */
43 ut_asserteq('a', cli_ch_process(cch, 'a'));
44 ut_asserteq(0, cli_ch_process(cch, 0));
46 /* unexpected 'Esc' */
47 ut_asserteq('a', cli_ch_process(cch, 'a'));
48 ut_asserteq(0, cli_ch_process(cch, '\e'));
49 ut_asserteq('b', cli_ch_process(cch, 'b'));
50 ut_asserteq(0, cli_ch_process(cch, 0));
54 COMMON_TEST(cli_ch_test, 0);
56 static int cread_test(struct unit_test_state *uts)
63 * useful for debugging
65 * gd->flags &= ~GD_FLG_RECORD;
66 * print_buffer(0, buf, 1, 7, 0);
71 ut_asserteq(4, console_in_puts("abc\n"));
72 ut_asserteq(3, cli_readline_into_buffer("-> ", buf, 1));
73 ut_asserteq_str("abc", buf);
75 /* try an escape sequence (cursor left after the 'c') */
77 ut_asserteq(8, console_in_puts("abc\e[Dx\n"));
78 ut_asserteq(4, cli_readline_into_buffer("-> ", buf, 1));
79 ut_asserteq_str("abxc", buf);
81 /* invalid escape sequence */
83 ut_asserteq(8, console_in_puts("abc\e[Xx\n"));
84 ut_asserteq(7, cli_readline_into_buffer("-> ", buf, 1));
85 ut_asserteq_str("abc\e[Xx", buf);
87 /* unexpected 'Esc' */
89 ut_asserteq(7, console_in_puts("abc\eXx\n"));
90 ut_asserteq(5, cli_readline_into_buffer("-> ", buf, 1));
91 ut_asserteq_str("abcXx", buf);
93 /* check timeout, should be between 1000 and 1050ms */
96 ut_asserteq(-2, cli_readline_into_buffer("-> ", buf, 1));
97 duration = get_timer(start) - 1000;
98 ut_assert(duration >= 0);
99 ut_assert(duration < 50);
103 COMMON_TEST(cread_test, UTF_CONSOLE);