![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466
Diff: mbed-os/UNITTESTS/unit_test/test.py
- Revision:
- 0:8fdf9a60065b
diff -r 000000000000 -r 8fdf9a60065b mbed-os/UNITTESTS/unit_test/test.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os/UNITTESTS/unit_test/test.py Wed Oct 10 00:33:53 2018 +0000 @@ -0,0 +1,197 @@ +""" +Copyright (c) 2018, Arm Limited +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +UNIT TEST BUILD & RUN +""" + +import os +import logging +import sys +from shutil import copy + +from .utils import execute_program +from .get_tools import get_make_tool, \ + get_cmake_tool, \ + get_cxx_tool, \ + get_c_tool +from .settings import DEFAULT_CMAKE_GENERATORS + +class UnitTestTool(object): + """ + Unit test tool to: + - prepare build directory + - create makefiles + - build unit tests + - run unit tests + - generate code coverage reports + """ + + def __init__(self, + make_program=None): + """ + Constructor + + Keyword arguments: + make_program - Make tool to use + """ + + self.make_program = make_program + + if self.make_program is None: + self.make_program = get_make_tool() + + def create_makefiles(self, + path_to_src=None, + generator=None, + coverage_output_type=None, + debug=False): + """ + Create Makefiles and prepare targets with CMake. + + Keyword arguments: + path_to_src - Path to source directory + generator - Type of Makefiles to generate + coverage_output_type - Generate HTML, XML or both reports + debug - Target debug or release build + """ + + if generator is None: + generator = DEFAULT_CMAKE_GENERATORS.get(self.make_program, + "Unix Makefiles") + + cmake = get_cmake_tool() + + if cmake is None: + logging.error( + "No CMake found in Path. Install all the required tools.") + sys.exit(1) + + args = [cmake, + "-G", + generator, + "-DCMAKE_MAKE_PROGRAM=%s" % self.make_program, + "-DCMAKE_CXX_COMPILER=%s" % get_cxx_tool(), + "-DCMAKE_C_COMPILER=%s" % get_c_tool()] + + if debug: + args.append("-DCMAKE_BUILD_TYPE=Debug") + + if coverage_output_type: + args.append("-DCOVERAGE:STRING=%s" % coverage_output_type) + + if path_to_src is not None: + args.append(path_to_src) + + execute_program(args, + "CMake failed to run successfully. See error message.") + + def build_tests(self): + """ + Build unit tests and libraries to be tested. + """ + + args = [self.make_program] + + if logging.getLogger().getEffectiveLevel() == logging.DEBUG: + args.append("VERBOSE=1") + + execute_program(args, + "Building unit tests failed.", + "Unit tests built successfully.") + + def run_tests(self, filter_regex=None): + """ + Run unit tests. + + Keyword arguments: + filter_regex - Regular expression to select which tests to run + """ + + args = [self.make_program, "test"] + + if filter_regex: + args.append("ARGS=-R %s -V -D ExperimentalTest" % filter_regex) + else: + args.append("ARGS=-V -D ExperimentalTest") + + if logging.getLogger().getEffectiveLevel() == logging.DEBUG: + args.append("VERBOSE=1") + + execute_program(args, "Unit test run failed.") + + def prepare_build_directory(self, + path_to_src=None, + build_path=None, + clean=False): + """ + Create build directory if not exist and + change current working directory to it + + Keyword arguments: + path_to_src - Path to source directory + build_path - Path to build directory + clean - Clean build directory + """ + + if build_path is None: + build_path = os.getcwd() + + # Clean CMake data if exists. + if clean: + self._clean_build(build_path) + + # Create build directory if not exist. + if not os.path.exists(build_path): + os.makedirs(build_path) + filename = ".mbedignore" + inputfile = os.path.join(path_to_src, filename) + outputfile = os.path.join(build_path, filename) + copy(inputfile, outputfile) + + # Change current working directory to build directory. + os.chdir(build_path) + + def _clean_build(self, build_path=None): + """ + Try clean build directory + + Keyword arguments: + build_path - Path to build directory + """ + + logging.info("Cleaning build directory...") + + if os.path.exists(os.path.join(build_path, "CMakeCache.txt")): + args = [self.make_program, + "-C", + build_path, + "--no-print-directory", + "clean"] + + # Remove coverage files + for root, _, files in os.walk(build_path): + for current_file in files: + if current_file.endswith((".gcno", ".gcda")): + os.remove(os.path.join(root, current_file)) + + execute_program(args, + "Clean step failed.", + "Clean done.") + + else: + logging.warning("%s does not exist or \ + does not contain previous build data.", build_path)