102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
ceedling-gcov
 | 
						|
=============
 | 
						|
 | 
						|
# Plugin Overview
 | 
						|
 | 
						|
Plugin for integrating GNU GCov code coverage tool into Ceedling projects.
 | 
						|
Currently only designed for the gcov command (like LCOV for example). In the
 | 
						|
future we could configure this to work with other code coverage tools.
 | 
						|
 | 
						|
This plugin currently uses `gcovr` to generate HTML and/or XML reports as a
 | 
						|
utility. The normal gcov plugin _must_ be run first for this report to generate.
 | 
						|
 | 
						|
## Installation
 | 
						|
 | 
						|
Gcovr can be installed via pip like so:
 | 
						|
 | 
						|
```
 | 
						|
pip install gcovr
 | 
						|
```
 | 
						|
 | 
						|
## Configuration
 | 
						|
 | 
						|
The gcov plugin supports configuration options via your `project.yml` provided
 | 
						|
by Ceedling.
 | 
						|
 | 
						|
Generation of HTML reports may be enabled or disabled with the following
 | 
						|
config. Set to `true` to enable or set to `false` to disable.
 | 
						|
 | 
						|
```
 | 
						|
:gcov:
 | 
						|
  :html_report: true
 | 
						|
```
 | 
						|
 | 
						|
Generation of XML reports may be enabled or disabled with the following
 | 
						|
config. Set to `true` to enable or set to `false` to disable.
 | 
						|
 | 
						|
```
 | 
						|
:gcov:
 | 
						|
  :xml_report: true
 | 
						|
```
 | 
						|
 | 
						|
There are two types of gcovr HTML reports that can be configured in your
 | 
						|
`project.yml`. To create a basic HTML report, with only the overall file
 | 
						|
information, use the following config.
 | 
						|
 | 
						|
```
 | 
						|
:gcov:
 | 
						|
  :html_report_type: basic
 | 
						|
```
 | 
						|
 | 
						|
To create a detailed HTML report, with line by line breakdown of the
 | 
						|
coverage, use the following config.
 | 
						|
 | 
						|
```
 | 
						|
:gcov:
 | 
						|
  :html_report_type: detailed
 | 
						|
```
 | 
						|
 | 
						|
There are a number of options to control which files are considered part of
 | 
						|
the coverage report. Most often, we only care about coverage on our source code, and not
 | 
						|
on tests or automatically generated mocks, runners, etc. However, there are times 
 | 
						|
where this isn't true... or there are times where we've moved ceedling's directory 
 | 
						|
structure so that the project file isn't at the root of the project anymore. In these
 | 
						|
cases, you may need to tweak the following:
 | 
						|
 | 
						|
```
 | 
						|
:gcov:
 | 
						|
  :report_root: "."
 | 
						|
  :report_exclude: "^build|^vendor|^test|^support"
 | 
						|
  :report_include: "^src"
 | 
						|
```
 | 
						|
 | 
						|
One important note about html_report_root: gcovr will only take a single root folder, unlike 
 | 
						|
Ceedling's ability to take as many as you like. So you will need to choose a folder which is 
 | 
						|
a superset of ALL the folders you want, and then use the include or exclude options to set up
 | 
						|
patterns of files to pay attention to or ignore. It's not ideal, but it works.
 | 
						|
 | 
						|
Finally, there are a number of settings which can be specified in order to adjust the
 | 
						|
default behaviors of gcov:
 | 
						|
 | 
						|
```
 | 
						|
:gcov:
 | 
						|
  :html_medium_threshold: 75
 | 
						|
  :html_high_threshold: 90
 | 
						|
  :fail_under_line: 30
 | 
						|
  :fail_under_branch: 30
 | 
						|
```
 | 
						|
 | 
						|
These HTML and XML reports will be found in `build/artifacts/gcov`.
 | 
						|
 | 
						|
## Example Usage
 | 
						|
 | 
						|
```
 | 
						|
ceedling gcov:all utils:gcov
 | 
						|
```
 | 
						|
 | 
						|
## To-Do list
 | 
						|
 | 
						|
- Generate overall report (combined statistics from all files with coverage)
 | 
						|
- Generate coverage output files
 | 
						|
- Easier option override for better customisation 
 |