mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Unit tests: improve argument checking in coverage.py
							parent
							
								
									04c98b0223
								
							
						
					
					
						commit
						00397b232c
					
				| 
						 | 
				
			
			@ -25,12 +25,15 @@ import re
 | 
			
		|||
 | 
			
		||||
from .utils import execute_program
 | 
			
		||||
from .get_tools import get_gcov_program, \
 | 
			
		||||
                       get_gcovr_program
 | 
			
		||||
    get_gcovr_program
 | 
			
		||||
from .settings import COVERAGE_OUTPUT_TYPES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CoverageAPI(object):
 | 
			
		||||
    """
 | 
			
		||||
    Generate code coverage reports for unit tests.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def __init__(self, mbed_os_root=None, build_dir=None):
 | 
			
		||||
        self.root = mbed_os_root
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +65,8 @@ class CoverageAPI(object):
 | 
			
		|||
            args.extend(["-x",
 | 
			
		||||
                         "-o",
 | 
			
		||||
                         "./coverage.xml"])
 | 
			
		||||
        else:
 | 
			
		||||
            logging.error("Invalid coverage output type: %s" % coverage_type)
 | 
			
		||||
 | 
			
		||||
        # Add exclude filters:
 | 
			
		||||
        for path in excludes:
 | 
			
		||||
| 
						 | 
				
			
			@ -103,9 +108,11 @@ class CoverageAPI(object):
 | 
			
		|||
        build_path - build path
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        # Check for the tool
 | 
			
		||||
        if get_gcovr_program() is None:
 | 
			
		||||
            logging.error("No gcovr tool found in path. \
 | 
			
		||||
            Cannot generate coverage reports.")
 | 
			
		||||
            logging.error(
 | 
			
		||||
                "No gcovr tool found in path. " +
 | 
			
		||||
                "Cannot generate coverage reports.")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if build_path is None:
 | 
			
		||||
| 
						 | 
				
			
			@ -118,19 +125,24 @@ class CoverageAPI(object):
 | 
			
		|||
            excludes = []
 | 
			
		||||
 | 
			
		||||
        for output in outputs:
 | 
			
		||||
            # Skip if invalid/unsupported output type
 | 
			
		||||
            if output not in COVERAGE_OUTPUT_TYPES:
 | 
			
		||||
                logging.warning(
 | 
			
		||||
                    "Invalid output type. " +
 | 
			
		||||
                    "Skip coverage report for type: %s." % output.upper())
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            if output == "html":
 | 
			
		||||
                # Create build directory if not exist.
 | 
			
		||||
                # Create a build directory if not exist
 | 
			
		||||
                coverage_path = os.path.join(build_path, "coverage")
 | 
			
		||||
                if not os.path.exists(coverage_path):
 | 
			
		||||
                    os.mkdir(coverage_path)
 | 
			
		||||
 | 
			
		||||
            # Generate the command
 | 
			
		||||
            args = self._gen_cmd(output, excludes, filter_regex)
 | 
			
		||||
 | 
			
		||||
            if output == "html":
 | 
			
		||||
                execute_program(args,
 | 
			
		||||
                                "HTML code coverage report generation failed.",
 | 
			
		||||
                                "HTML code coverage report created.")
 | 
			
		||||
            elif output == "xml":
 | 
			
		||||
                execute_program(args,
 | 
			
		||||
                                "XML code coverage report generation failed.",
 | 
			
		||||
                                "XML code coverage report created.")
 | 
			
		||||
            # Run the coverage tool
 | 
			
		||||
            execute_program(
 | 
			
		||||
                args,
 | 
			
		||||
                "%s code coverage report generation failed." % output.upper(),
 | 
			
		||||
                "%s code coverage report created." % output.upper())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ UNIT TEST OPTIONS
 | 
			
		|||
import argparse
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from .settings import CMAKE_GENERATORS, MAKE_PROGRAMS, COVERAGE_TYPES
 | 
			
		||||
from .settings import CMAKE_GENERATORS, MAKE_PROGRAMS, COVERAGE_ARGS
 | 
			
		||||
from .get_tools import get_make_tool
 | 
			
		||||
 | 
			
		||||
def get_options_parser():
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ def get_options_parser():
 | 
			
		|||
                        dest="debug_build")
 | 
			
		||||
 | 
			
		||||
    parser.add_argument("--coverage",
 | 
			
		||||
                        choices=COVERAGE_TYPES,
 | 
			
		||||
                        choices=COVERAGE_ARGS,
 | 
			
		||||
                        help="Generate code coverage report",
 | 
			
		||||
                        dest="coverage")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,10 +29,12 @@ DEFAULT_CMAKE_GENERATORS = {
 | 
			
		|||
    "ninja": "Ninja"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
COVERAGE_TYPES = ["html",
 | 
			
		||||
COVERAGE_ARGS = ["html",
 | 
			
		||||
                  "xml",
 | 
			
		||||
                  "both"]
 | 
			
		||||
 | 
			
		||||
COVERAGE_OUTPUT_TYPES = ["html", "xml"]
 | 
			
		||||
 | 
			
		||||
CXX_COMPILERS = ["g++-6", "g++-8", "g++-7", "g++-5", "g++-4.9", "g++"]
 | 
			
		||||
 | 
			
		||||
C_COMPILERS = ["gcc-6", "gcc-8", "gcc-7", "gcc-5", "gcc-4.9", "gcc"]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue