mame/regtests/tool_tester/test_tools.py

71 lines
2.3 KiB
Python

#!/usr/bin/python
##
## license:BSD-3-Clause
## copyright-holders:Angelo Salese
##
import sys
import os
from os.path import join, dirname, realpath
import argparse
import logging
from tool_tester import (
ORCHESTRATOR_POOL
)
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
dest="verbose",
action="store_true",
help="Enable debug logging messages if enabled"
)
parser.add_argument(
"-work_dir",
dest="work_dir",
type=str,
default=os.getcwd(),
help="Work directory where tools lies"
)
parser.add_argument(
"-id",
dest="test_id",
type=str,
default=None,
help="If non-default run this test suite only, supported values: {0}".format(
repr([item.identifier for item in ORCHESTRATOR_POOL])
)
)
return parser.parse_args()
if __name__ == "__main__":
args = get_args()
# TODO: proper requirements.txt / setup.py or virtual env management
# dataclasses aren't supported in anything prior to 3.7 (dacite lib 3.6)
assert sys.version_info >= (3, 7), f"python version {sys.version_info.major}.{sys.version_info.minor} < 3.7"
log_level = logging.DEBUG if args.verbose else logging.INFO
# TODO: add colorized messages
# consider either using colorlog or make one that has support for all terminal flavours
logging.basicConfig(format='%(levelname)s: %(message)s', level=log_level)
# TODO: currently points to $(regtests)/assets, make it a configurable option?
assets_folder = join(dirname(dirname(realpath(__file__))), "assets")
chained_results = []
__single_test = args.test_id
if __single_test is None:
__EXECUTE_TESTS = ORCHESTRATOR_POOL
else:
__EXECUTE_TESTS = [item for item in ORCHESTRATOR_POOL if item.identifier == args.test_id]
assert __EXECUTE_TESTS, f"{args.test_id} not found in available tests"
for test_cls in __EXECUTE_TESTS:
test_fn = test_cls(args.work_dir, assets_folder)
logging.info("Start test suite: %s", test_fn.identifier)
chained_results.append(test_fn.execute_tests(test_fn.compose_tests()))
logging.debug("test results %s", repr(chained_results))
sys.exit(0 if all(chained_results) else 1)