1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

tests/rust_libs: use shell_builtin_cmd_help_json

This increases the robustness of the test by not relying on the
order shell commands are printed in. At least for XFA based shell
commands, there is no guarantee in which order they will be shown in
the help.
This commit is contained in:
Marian Buschsieweke 2024-11-07 17:37:56 +01:00
parent f0a88dcf56
commit b60534796a
No known key found for this signature in database
GPG Key ID: 758BD52517F79C41
2 changed files with 31 additions and 23 deletions

View File

@ -2,6 +2,7 @@ include ../Makefile.tests_common
USEMODULE += shell
USEMODULE += shell_democommands
USEMODULE += shell_builtin_cmd_help_json # for automated testing
USEMODULE += ztimer_msec
FEATURES_REQUIRED += rust_target

View File

@ -7,34 +7,25 @@
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
import json
import sys
from testrunner import run
EXPECTED_HELP = (
'Command Description',
'---------------------------------------',
'bufsize Get the shell\'s buffer size',
'start_test starts a test',
'end_test ends a test',
'echo prints the input command',
'empty print nothing on command',
'hello_world Print a greeting',
'xfa_test1 xfa test command 1',
'xfa_test2 xfa test command 2',
)
EXPECTED_CMDS = {
'bufsize': 'Get the shell\'s buffer size',
'start_test': 'starts a test',
'end_test': 'ends a test',
'echo': 'prints the input command',
'empty': 'print nothing on command',
'periodic': 'periodically print command',
'hello_world': 'Print a greeting',
'xfa_test1': 'xfa test command 1',
'xfa_test2': 'xfa test command 2',
}
PROMPT = '> '
CMDS = (
('start_test', '[TEST_START]'),
# test default commands
('help', EXPECTED_HELP),
('end_test', '[TEST_END]'),
)
CMDS_REGEX = {'ps.rs'}
@ -49,10 +40,26 @@ def check_cmd(child, cmd, expected):
child.expect_exact(line)
def check_cmd_list(child):
child.expect(PROMPT)
child.sendline('help_json')
child.expect(r"(\{[^\n\r]*\})\r\n")
cmdlist = json.loads(child.match.group(1))["cmds"]
cmds = set(EXPECTED_CMDS)
for item in cmdlist:
assert item['cmd'] in EXPECTED_CMDS, f"command {item['cmd']} not expected"
assert item['cmd'] in cmds, f"command {item['cmd']} listed twice"
assert item['desc'] == EXPECTED_CMDS[item['cmd']], f"description of {item['cmd']} not expected"
cmds.remove(item['cmd'])
assert len(cmds) == 0, f"commands {cmds} missing"
def testfunc(child):
# loop other defined commands and expected output
for cmd, expected in CMDS:
check_cmd(child, cmd, expected)
check_cmd(child, 'start_test', '[TEST_START]')
check_cmd_list(child)
check_cmd(child, 'end_test', '[TEST_END]')
if __name__ == "__main__":