mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 09:09:10 -04:00
ci(autocomplete): add test for file autocompletion
Merge Request !31081 introduced support for file autocompletion. This adds a basic test for README files autocompletion in the root directory of the esp-idf repository. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
This commit is contained in:
parent
1f4ea21092
commit
96e627d9a1
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
import collections
|
||||
import os
|
||||
@ -7,13 +7,49 @@ import unittest
|
||||
|
||||
import pexpect
|
||||
|
||||
Test = collections.namedtuple('Test', ['name', 'term', 'pattern', 'ext'])
|
||||
Test = collections.namedtuple('Test', ['name', 'shell', 'term', 'prefix', 'pattern', 'ext'])
|
||||
|
||||
IDF_PATH = os.environ['IDF_PATH']
|
||||
|
||||
TESTS = (Test('fish', 'vt100', 'all.*app.*app-flash.*bootloader.*', 'fish'),
|
||||
Test('bash', 'xterm-256color', 'all.*app.*app-flash.*bootloader.*bootloader-flash.*build-system-targets.*clean.*', 'sh'),
|
||||
Test('zsh', '', 'all.*app.*app-flash.*bootloader.*bootloader-flash.*build-system-targets.*clean.*', 'sh'))
|
||||
|
||||
TESTS = (
|
||||
Test('base',
|
||||
'fish',
|
||||
'vt100',
|
||||
'',
|
||||
'all.*app.*app-flash.*bootloader.*',
|
||||
'fish'),
|
||||
Test('base',
|
||||
'bash',
|
||||
'xterm-256color',
|
||||
'',
|
||||
'all.*app.*app-flash.*bootloader.*bootloader-flash.*build-system-targets.*clean.*',
|
||||
'sh'),
|
||||
Test('base',
|
||||
'zsh',
|
||||
'',
|
||||
'',
|
||||
'all.*app.*app-flash.*bootloader.*bootloader-flash.*build-system-targets.*clean.*',
|
||||
'sh'),
|
||||
# Tests for file autocompletion
|
||||
Test('file',
|
||||
'fish',
|
||||
'vt100',
|
||||
f'@{IDF_PATH}/README',
|
||||
'.*README.*md.*',
|
||||
'fish'),
|
||||
Test('file',
|
||||
'bash',
|
||||
'xterm-256color',
|
||||
f'@{IDF_PATH}/README',
|
||||
'.*README.*md.*',
|
||||
'sh'),
|
||||
Test('file',
|
||||
'zsh',
|
||||
'',
|
||||
f'@{IDF_PATH}/README',
|
||||
'.*README.*md.*',
|
||||
'sh')
|
||||
)
|
||||
|
||||
# Additional positional arguments for all child.expect() calls are constant so we can rely on the order and print message
|
||||
# about which pattern was matched
|
||||
@ -34,19 +70,22 @@ def get_fail_msg(pproc: pexpect.spawn, msg: str, index: int) -> str:
|
||||
class UTTest(unittest.TestCase):
|
||||
|
||||
def test_shell(self) -> None:
|
||||
idf_path = os.environ['IDF_PATH']
|
||||
env = os.environ.copy()
|
||||
for test in TESTS:
|
||||
with self.subTest():
|
||||
with open(os.path.join(idf_path, f'{test.name}.out'), 'wb') as o:
|
||||
with open(os.path.join(IDF_PATH, f'{test.shell}.{test.name}.out'), 'wb') as o:
|
||||
env['TERM'] = test.term
|
||||
with pexpect.spawn(f'{test.name} -i', env=env, logfile=o, timeout=200) as pproc:
|
||||
pproc.sendline(f'. {idf_path}/export.{test.ext}')
|
||||
with pexpect.spawn(f'{test.shell} -i', env=env, logfile=o, timeout=200) as pproc:
|
||||
if test.shell == 'bash':
|
||||
# The @-argument autocomplete works reliably in bash only
|
||||
# if @ is not included in COMP_WORDBREAKS.
|
||||
pproc.sendline('COMP_WORDBREAKS=${COMP_WORDBREAKS//@/}')
|
||||
pproc.sendline(f'. {IDF_PATH}/export.{test.ext}')
|
||||
i = pproc.expect(['Go to the project directory and run.*idf\\.py build', *pargs])
|
||||
self.assertEqual(i, 0, get_fail_msg(pproc, 'Export was not successful!', i))
|
||||
pproc.send('idf.py \t\t')
|
||||
pproc.send(f'idf.py {test.prefix}\t\t')
|
||||
i = pproc.expect([test.pattern, *pargs], timeout=100)
|
||||
self.assertEqual(i, 0, get_fail_msg(pproc, f'Autocompletion for idf.py failed in {test.name}!', i))
|
||||
self.assertEqual(i, 0, get_fail_msg(pproc, f'Autocompletion for idf.py failed in {test.shell}!', i))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
x
Reference in New Issue
Block a user