1
0
Fork 0

Initial 'qmk test-c' functionality (#23038)

This commit is contained in:
Joel Challis 2024-03-05 16:59:30 +00:00 committed by GitHub
parent bbeb9c1ccd
commit a2c23e9419
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 85 additions and 1 deletions

View file

@ -81,6 +81,7 @@ subcommands = [
'qmk.cli.new.keymap',
'qmk.cli.painter',
'qmk.cli.pytest',
'qmk.cli.test.c',
'qmk.cli.userspace.add',
'qmk.cli.userspace.compile',
'qmk.cli.userspace.doctor',

View file

View file

@ -0,0 +1,47 @@
import fnmatch
import re
from subprocess import DEVNULL
from milc import cli
from qmk.commands import find_make, get_make_parallel_args, build_environment
@cli.argument('-j', '--parallel', type=int, default=1, help="Set the number of parallel make jobs; 0 means unlimited.")
@cli.argument('-e', '--env', arg_only=True, action='append', default=[], help="Set a variable to be passed to make. May be passed multiple times.")
@cli.argument('-c', '--clean', arg_only=True, action='store_true', help="Remove object files before compiling.")
@cli.argument('-l', '--list', arg_only=True, action='store_true', help='List available tests.')
@cli.argument('-t', '--test', arg_only=True, action='append', default=[], help="Test to run from the available list. Supports wildcard globs. May be passed multiple times.")
@cli.subcommand("QMK C Unit Tests.", hidden=False if cli.config.user.developer else True)
def test_c(cli):
"""Run native unit tests.
"""
list_tests = cli.run([find_make(), 'list-tests', 'SILENT=true'])
available_tests = sorted(list_tests.stdout.strip().split())
if cli.args.list:
return print("\n".join(available_tests))
# expand any wildcards
filtered_tests = set()
for test in cli.args.test:
regex = re.compile(fnmatch.translate(test))
filtered_tests |= set(filter(regex.match, available_tests))
for invalid in filtered_tests - set(available_tests):
cli.log.warning(f'Invalid test provided: {invalid}')
# convert test names to build targets
targets = list(map(lambda x: f'test:{x}', filtered_tests or ['all']))
if cli.args.clean:
targets.insert(0, 'clean')
# Add in the environment vars
for key, value in build_environment(cli.args.env).items():
targets.append(f'{key}={value}')
command = [find_make(), *get_make_parallel_args(cli.config.test_c.parallel), *targets]
cli.log.info('Compiling tests with {fg_cyan}%s', ' '.join(command))
return cli.run(command, capture_output=False, stdin=DEVNULL).returncode