kopia lustrzana https://github.com/micropython/micropython-lib
71 wiersze
1.7 KiB
Python
71 wiersze
1.7 KiB
Python
import argparse
|
|
import sys
|
|
import uos
|
|
from fnmatch import fnmatch
|
|
|
|
from unittest import TestRunner, TestResult, run_module
|
|
|
|
|
|
def discover(runner: TestRunner):
|
|
"""
|
|
Implements discover function inspired by https://docs.python.org/3/library/unittest.html#test-discovery
|
|
"""
|
|
parser = argparse.ArgumentParser()
|
|
# parser.add_argument(
|
|
# "-v",
|
|
# "--verbose",
|
|
# action="store_true",
|
|
# help="Verbose output",
|
|
# )
|
|
parser.add_argument(
|
|
"-s",
|
|
"--start-directory",
|
|
dest="start",
|
|
default=".",
|
|
help="Directory to start discovery",
|
|
)
|
|
parser.add_argument(
|
|
"-p",
|
|
"--pattern ",
|
|
dest="pattern",
|
|
default="test*.py",
|
|
help="Pattern to match test files",
|
|
)
|
|
parser.add_argument(
|
|
"-t",
|
|
"--top-level-directory",
|
|
dest="top",
|
|
help="Top level directory of project (defaults to start directory)",
|
|
)
|
|
args = parser.parse_args(args=sys.argv[2:])
|
|
|
|
path = args.start
|
|
top = args.top or path
|
|
|
|
return run_all_in_dir(
|
|
runner=runner,
|
|
path=path,
|
|
pattern=args.pattern,
|
|
top=top,
|
|
)
|
|
|
|
|
|
def run_all_in_dir(runner: TestRunner, path: str, pattern: str, top: str):
|
|
DIR_TYPE = 0x4000
|
|
|
|
result = TestResult()
|
|
for fname, type, *_ in uos.ilistdir(path):
|
|
if fname in ("..", "."):
|
|
continue
|
|
if type == DIR_TYPE:
|
|
result += run_all_in_dir(
|
|
runner=runner,
|
|
path="/".join((path, fname)),
|
|
pattern=pattern,
|
|
top=top,
|
|
)
|
|
if fnmatch(fname, pattern):
|
|
modname = fname[: fname.rfind(".")]
|
|
result += run_module(runner, modname, path, top)
|
|
return result
|