Clone of official tools
Diff: test.py
- Revision:
- 31:8ea194f6145b
- Parent:
- 30:f12ce67666d0
- Child:
- 36:96847d42f010
--- a/test.py Mon Aug 29 11:56:59 2016 +0100 +++ b/test.py Wed Jan 04 11:58:24 2017 -0600 @@ -26,8 +26,9 @@ ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.insert(0, ROOT) +from tools.config import ConfigException from tools.test_api import test_path_to_name, find_tests, print_tests, build_tests, test_spec_from_test_builds -from tools.options import get_default_options_parser +from tools.options import get_default_options_parser, extract_profile from tools.build_api import build_project, build_library from tools.build_api import print_build_memory_usage from tools.targets import TARGET_MAP @@ -35,13 +36,13 @@ from tools.test_exporters import ReportExporter, ResultExporterType from utils import argparse_filestring_type, argparse_lowercase_type, argparse_many from utils import argparse_dir_not_parent -from tools.toolchains import mbedToolchain +from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS, TOOLCHAIN_CLASSES from tools.settings import CLI_COLOR_MAP if __name__ == '__main__': try: # Parse Options - parser = get_default_options_parser() + parser = get_default_options_parser(add_app_config=True) parser.add_argument("-D", action="append", @@ -107,17 +108,24 @@ # Target if options.mcu is None : - args_error(parser, "[ERROR] You should specify an MCU") + args_error(parser, "argument -m/--mcu is required") mcu = options.mcu[0] # Toolchain if options.tool is None: - args_error(parser, "[ERROR] You should specify a TOOLCHAIN") + args_error(parser, "argument -t/--tool is required") toolchain = options.tool[0] + if not TOOLCHAIN_CLASSES[toolchain].check_executable(): + search_path = TOOLCHAIN_PATHS[toolchain] or "No path set" + args_error(parser, "Could not find executable for %s.\n" + "Currently set search path: %s" + % (toolchain, search_path)) + # Find all tests in the relevant paths for path in all_paths: - all_tests.update(find_tests(path, mcu, toolchain, options.options)) + all_tests.update(find_tests(path, mcu, toolchain, + app_config=options.app_config)) # Filter tests by name if specified if options.names: @@ -152,8 +160,7 @@ else: # Build all tests if not options.build_dir: - print "[ERROR] You must specify a build path" - sys.exit(1) + args_error(parser, "argument --build is required") base_source_paths = options.source_dir @@ -165,10 +172,10 @@ build_properties = {} library_build_success = False + profile = extract_profile(parser, options, toolchain) try: # Build sources build_library(base_source_paths, options.build_dir, mcu, toolchain, - options=options.options, jobs=options.jobs, clean=options.clean, report=build_report, @@ -177,7 +184,9 @@ macros=options.macros, verbose=options.verbose, notify=notify, - archive=False) + archive=False, + app_config=options.app_config, + build_profile=profile) library_build_success = True except ToolException, e: @@ -194,8 +203,8 @@ print "Failed to build library" else: # Build all the tests + test_build_success, test_build = build_tests(tests, [options.build_dir], options.build_dir, mcu, toolchain, - options=options.options, clean=options.clean, report=build_report, properties=build_properties, @@ -203,7 +212,9 @@ verbose=options.verbose, notify=notify, jobs=options.jobs, - continue_on_build_fail=options.continue_on_build_fail) + continue_on_build_fail=options.continue_on_build_fail, + app_config=options.app_config, + build_profile=profile) # If a path to a test spec is provided, write it to a file if options.test_spec: @@ -242,6 +253,9 @@ except KeyboardInterrupt, e: print "\n[CTRL+c] exit" + except ConfigException, e: + # Catching ConfigException here to prevent a traceback + print "[ERROR] %s" % str(e) except Exception,e: import traceback traceback.print_exc(file=sys.stdout)