ceedling 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/GIT_COMMIT_SHA +1 -1
- data/Gemfile +4 -0
- data/Gemfile.lock +2 -0
- data/README.md +4 -1
- data/docs/Changelog.md +11 -0
- data/docs/KnownIssues.md +1 -0
- data/docs/mkdocs/configuration/project-file.md +25 -7
- data/docs/mkdocs/configuration/reference/cexception.md +1 -1
- data/docs/mkdocs/configuration/reference/cmock.md +1 -1
- data/docs/mkdocs/configuration/reference/unity.md +1 -1
- data/docs/mkdocs/getting-started/quick-start.md +11 -8
- data/docs/mkdocs/plugins/gcov/gcovr.md +324 -189
- data/docs/mkdocs/plugins/gcov/reportgenerator.md +113 -31
- data/docs/mkdocs/reference/gcov-plugin.md +21 -3
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -1
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +16 -8
- data/lib/ceedling/plugins/plugin_reportinator.rb +9 -0
- data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +1 -1
- data/lib/version.rb +1 -1
- data/plugins/gcov/config/defaults.yml +0 -1
- data/plugins/gcov/lib/gcov.rb +35 -16
- data/plugins/gcov/lib/gcovr_reportinator.rb +31 -1
- data/plugins/valgrind/lib/valgrind.rb +1 -1
- data/site-local/configuration/project-file.html +78 -8
- data/site-local/configuration/reference/cexception.html +5 -5
- data/site-local/configuration/reference/cmock.html +5 -5
- data/site-local/configuration/reference/unity.html +5 -5
- data/site-local/getting-started/quick-start.html +13 -9
- data/site-local/plugins/gcov/gcovr.html +1215 -255
- data/site-local/plugins/gcov/reportgenerator.html +404 -46
- data/site-local/reference/gcov-plugin.html +40 -7
- data/site-local/sitemap.xml.gz +0 -0
- data/site-local/snapshot/plugins/gcov/config/defaults.yml +0 -1
- data/spec/support/system/system_context.rb +7 -3
- data/spec/system/deployment_as_gem_spec.rb +2 -0
- data/spec/system/deployment_as_vendor_spec.rb +2 -0
- data/spec/system/gcov_deployment_spec.rb +2 -0
- data/spec/system/support/common_test_cases.rb +42 -0
- data/spec/system/support/gcov_common_test_cases.rb +52 -0
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +51 -0
- data/spec/units/plugin_reportinator_spec.rb +38 -0
- metadata +4 -2
|
@@ -4,55 +4,137 @@ The `ReportGenerator` utility may be configured with the following configuration
|
|
|
4
4
|
|
|
5
5
|
All generated reports are found in `<build root>/artifacts/gcov/ReportGenerator/`.
|
|
6
6
|
|
|
7
|
+
## Example configuration
|
|
8
|
+
|
|
7
9
|
```yaml
|
|
8
10
|
:gcov:
|
|
9
11
|
:report_generator:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
:
|
|
12
|
+
:history_directory: build/artifacts/gcov/history
|
|
13
|
+
:file_filters: "-./vendor/*;-./build/*;-./test/*;+./src/*"
|
|
14
|
+
:verbosity: Warning
|
|
15
|
+
:tag: "release-1.4.0"
|
|
16
|
+
:num_parallel_threads: 4
|
|
17
|
+
:gcov_exclude:
|
|
18
|
+
- some_excluded_file
|
|
19
|
+
:custom_args:
|
|
20
|
+
- "-title:MyProject"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Plugin configuration
|
|
24
|
+
|
|
25
|
+
### `:history_directory`
|
|
26
|
+
|
|
27
|
+
Optional directory for storing persistent coverage information. Can be used
|
|
28
|
+
in future reports to show coverage evolution.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### `:plugins`
|
|
33
|
+
|
|
34
|
+
Optional plugin files for custom reports or custom history storage (separated
|
|
35
|
+
by semicolon).
|
|
36
|
+
|
|
37
|
+
**Example:** `plugin.dll;*.dll`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### `:assembly_filters`
|
|
42
|
+
|
|
43
|
+
Optional list of assemblies that should be included or excluded in the
|
|
44
|
+
report (separated by semicolon). Exclusion filters take precedence over
|
|
45
|
+
inclusion filters. Wildcards are allowed, but not regular expressions.
|
|
46
|
+
|
|
47
|
+
**Example:** `+<included>;-<excluded>`
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### `:class_filters`
|
|
52
|
+
|
|
53
|
+
Optional list of classes that should be included or excluded in the report
|
|
54
|
+
(separated by semicolon). Exclusion filters take precedence over inclusion
|
|
55
|
+
filters. Wildcards are allowed, but not regular expressions.
|
|
56
|
+
|
|
57
|
+
**Example:** `+<included>;-<excluded>`
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### `:file_filters`
|
|
62
|
+
|
|
63
|
+
Optional list of files that should be included or excluded in the report
|
|
64
|
+
(separated by semicolon). Exclusion filters take precedence over inclusion
|
|
65
|
+
filters. Wildcards are allowed, but not regular expressions. Ceedling places
|
|
66
|
+
your own patterns first, ahead of the exclusions it generates automatically
|
|
67
|
+
for test paths, the build root, and (when Partials are in use) Partial
|
|
68
|
+
source files, so your patterns take precedence.
|
|
13
69
|
|
|
14
|
-
|
|
15
|
-
:plugins: <plugin.dll>;<*.dll>
|
|
70
|
+
**Example:** `"-./vendor/*;-./build/*;-./test/*;-./lib/*;+./src/*"`
|
|
16
71
|
|
|
17
|
-
|
|
18
|
-
# Exclusion filters take precedence over inclusion filters.
|
|
19
|
-
# Wildcards are allowed, but not regular expressions.
|
|
20
|
-
:assembly_filters: +<included>;-<excluded>
|
|
72
|
+
---
|
|
21
73
|
|
|
22
|
-
|
|
23
|
-
# Exclusion filters take precedence over inclusion filters.
|
|
24
|
-
# Wildcards are allowed, but not regular expressions.
|
|
25
|
-
:class_filters: +<included>;-<excluded>
|
|
74
|
+
### `:verbosity`
|
|
26
75
|
|
|
27
|
-
|
|
28
|
-
# Exclusion filters take precedence over inclusion filters.
|
|
29
|
-
# Wildcards are allowed, but not regular expressions.
|
|
30
|
-
# Example: "-./vendor/*;-./build/*;-./test/*;-./lib/*;+./src/*"
|
|
31
|
-
:file_filters: +<included>;-<excluded>
|
|
76
|
+
The verbosity level of the log messages.
|
|
32
77
|
|
|
33
|
-
|
|
34
|
-
# Values: Verbose, Info, Warning, Error, Off (defaults to Warning)
|
|
35
|
-
:verbosity: <level>
|
|
78
|
+
**Values:** `Verbose`, `Info`, `Warning`, `Error`, `Off`
|
|
36
79
|
|
|
37
|
-
|
|
38
|
-
:tag: <tag>
|
|
80
|
+
**Default:** `Warning`
|
|
39
81
|
|
|
40
|
-
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### `:tag`
|
|
85
|
+
|
|
86
|
+
Optional tag or build version.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### `:gcov_exclude`
|
|
91
|
+
|
|
92
|
+
Optional list of one or more regular expressions to exclude gcov notes
|
|
93
|
+
(`.gcno`) files that match these filters from coverage processing — these
|
|
94
|
+
files are never run through `gcov` at all. A trailing `.gcov` or `.gcno`
|
|
95
|
+
suffix on a pattern is stripped automatically, so either form works.
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
:gcov:
|
|
99
|
+
:report_generator:
|
|
41
100
|
:gcov_exclude:
|
|
42
101
|
- <regex>
|
|
43
102
|
- ...
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Default:** `[]`
|
|
44
106
|
|
|
45
|
-
|
|
46
|
-
:threads: <count>
|
|
107
|
+
---
|
|
47
108
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
109
|
+
### `:num_parallel_threads`
|
|
110
|
+
|
|
111
|
+
Optionally set the number of threads ReportGenerator uses in parallel. Drives
|
|
112
|
+
both of ReportGenerator's own `numberOfReportsParsedInParallel` and
|
|
113
|
+
`numberOfReportsMergedInParallel` settings together.
|
|
114
|
+
|
|
115
|
+
**Default:** unset (ReportGenerator's own default applies)
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### `:custom_args`
|
|
120
|
+
|
|
121
|
+
Optional list of one or more command line arguments to pass to Report
|
|
122
|
+
Generator. Useful for configuring Risk Hotspots and other settings not
|
|
123
|
+
covered by the options above. See the
|
|
124
|
+
[ReportGenerator settings wiki](https://github.com/danielpalme/ReportGenerator/wiki/Settings).
|
|
125
|
+
|
|
126
|
+
Note: This can be accomplished with Ceedling's tool configuration options
|
|
127
|
+
outside of plugin configuration but is supported here to collect
|
|
128
|
+
configuration options in one place.
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
:gcov:
|
|
132
|
+
:report_generator:
|
|
53
133
|
:custom_args:
|
|
54
134
|
- <argument>
|
|
55
135
|
- ...
|
|
56
136
|
```
|
|
57
137
|
|
|
138
|
+
**Default:** `[]`
|
|
139
|
+
|
|
58
140
|
<br/><br/>
|
|
@@ -213,8 +213,24 @@ Exit with status 4 if total branch coverage is below this percentage.
|
|
|
213
213
|
Exit with status 8 if total decision coverage is below this percentage.
|
|
214
214
|
(`gcovr --fail-under-decision`)
|
|
215
215
|
|
|
216
|
+
`gcovr` treats `--fail-under-decision` as a no-op without `--decisions` also
|
|
217
|
+
present — setting this option implies `:decisions` (below) automatically.
|
|
218
|
+
|
|
216
219
|
**Values:** `1`–`100`
|
|
217
220
|
|
|
221
|
+
**Requires:** `gcovr` 7.0 or higher
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
### `:decisions`
|
|
226
|
+
|
|
227
|
+
Report the decision coverage. For HTML, JSON, and the summary report.
|
|
228
|
+
(`gcovr --decisions`)
|
|
229
|
+
|
|
230
|
+
Implied automatically whenever `:fail_under_decision` is set.
|
|
231
|
+
|
|
232
|
+
**Requires:** `gcovr` 6.0 or higher
|
|
233
|
+
|
|
218
234
|
---
|
|
219
235
|
|
|
220
236
|
### `:fail_under_function`
|
|
@@ -552,11 +568,13 @@ are excluded from report generation.
|
|
|
552
568
|
|
|
553
569
|
---
|
|
554
570
|
|
|
555
|
-
### `:
|
|
571
|
+
### `:num_parallel_threads`
|
|
556
572
|
|
|
557
|
-
Number of parallel threads to use during report generation.
|
|
573
|
+
Number of parallel threads to use during report generation. Drives both
|
|
574
|
+
ReportGenerator's own `numberOfReportsParsedInParallel` and
|
|
575
|
+
`numberOfReportsMergedInParallel` settings together.
|
|
558
576
|
|
|
559
|
-
**Default:**
|
|
577
|
+
**Default:** unset (ReportGenerator's own default applies)
|
|
560
578
|
|
|
561
579
|
---
|
|
562
580
|
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
|
|
28
28
|
:report_generator:
|
|
29
29
|
:verbosity: Warning # Default verbosity
|
|
30
|
-
:collection_paths_source: [] # Explicitly defined as default empty array to simplify option validation code
|
|
31
30
|
:custom_args: [] # Explicitly defined as default empty array to simplify option validation code
|
|
32
31
|
:gcov_exclude: [] # Explicitly defined as default empty array to simplify option validation code
|
|
33
32
|
...
|
|
@@ -66,13 +66,17 @@ class GeneratorTestResultsBacktrace
|
|
|
66
66
|
# Attribute each group member its own real result line, if Unity printed one
|
|
67
67
|
group.each do |test_case|
|
|
68
68
|
case crash_result[:output]
|
|
69
|
-
# Success test case
|
|
70
|
-
|
|
69
|
+
# Success test case -- tolerates a trailing duration suffix (e.g. `PASS (12 ms)`,
|
|
70
|
+
# UNITY_INCLUDE_EXEC_TIME), matching the real format generator_test_results.rb's
|
|
71
|
+
# own parser already recognizes for it.
|
|
72
|
+
when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:PASS(\s\(.*ms\))?\s*$)/
|
|
71
73
|
group_results[:passed] += 1
|
|
72
74
|
group_results[:output] << $1
|
|
73
75
|
|
|
74
|
-
# Ignored test case
|
|
75
|
-
|
|
76
|
+
# Ignored test case -- tolerates a trailing message (TEST_IGNORE_MESSAGE), same as
|
|
77
|
+
# FAIL below. Before this fix, a message-carrying ignore fell through to "unresolved"
|
|
78
|
+
# and was misreported as crash evidence -- IGNORE was only recognized bare.
|
|
79
|
+
when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:IGNORE(:.+)?\s*$)/
|
|
76
80
|
group_results[:ignored] += 1
|
|
77
81
|
group_results[:output] << $1
|
|
78
82
|
|
|
@@ -260,13 +264,17 @@ class GeneratorTestResultsBacktrace
|
|
|
260
264
|
# Attribute each group member its own real result line, if Unity printed one
|
|
261
265
|
group.each do |test_case|
|
|
262
266
|
case crash_result[:output]
|
|
263
|
-
# Success test case
|
|
264
|
-
|
|
267
|
+
# Success test case -- tolerates a trailing duration suffix (e.g. `PASS (12 ms)`,
|
|
268
|
+
# UNITY_INCLUDE_EXEC_TIME), matching the real format generator_test_results.rb's
|
|
269
|
+
# own parser already recognizes for it.
|
|
270
|
+
when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:PASS(\s\(.*ms\))?\s*$)/
|
|
265
271
|
group_results[:passed] += 1
|
|
266
272
|
group_results[:output] << $1
|
|
267
273
|
|
|
268
|
-
# Ignored test case
|
|
269
|
-
|
|
274
|
+
# Ignored test case -- tolerates a trailing message (TEST_IGNORE_MESSAGE), same as
|
|
275
|
+
# FAIL below. Before this fix, a message-carrying ignore fell through to "unresolved"
|
|
276
|
+
# and was misreported as crash evidence -- IGNORE was only recognized bare.
|
|
277
|
+
when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:IGNORE(:.+)?\s*$)/
|
|
270
278
|
group_results[:ignored] += 1
|
|
271
279
|
group_results[:output] << $1
|
|
272
280
|
|
|
@@ -95,6 +95,15 @@ class PluginReportinator
|
|
|
95
95
|
return aggregated_results
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
+
# A build's own test results -- pass or fail -- are core information a user
|
|
99
|
+
# silencing routine build chatter still wants to see; ERRORS is the floor
|
|
100
|
+
# for both, not just for a failing run. Centralized here so every plugin
|
|
101
|
+
# printing post-build test results (report_tests_stdout_plugin, gcov,
|
|
102
|
+
# valgrind) agrees on the same answer instead of each hardcoding its own.
|
|
103
|
+
def test_results_floor_verbosity
|
|
104
|
+
Verbosity::ERRORS
|
|
105
|
+
end
|
|
106
|
+
|
|
98
107
|
def run_test_results_report(hash, verbosity=Verbosity::NORMAL)
|
|
99
108
|
if @test_results_template.nil?
|
|
100
109
|
raise CeedlingException.new( "No test results report template has been set." )
|
|
@@ -50,7 +50,7 @@ class ReportTestsStdoutPlugin < Plugin
|
|
|
50
50
|
|
|
51
51
|
results = @plugin_reportinator.assemble_test_results( @result_list )
|
|
52
52
|
hash = { :context => TEST_SYM, :results => results }
|
|
53
|
-
verbosity =
|
|
53
|
+
verbosity = @plugin_reportinator.test_results_floor_verbosity
|
|
54
54
|
|
|
55
55
|
# Print unit test suite results
|
|
56
56
|
@plugin_reportinator.run_test_results_report( hash, verbosity )
|
data/lib/version.rb
CHANGED
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
|
|
28
28
|
:report_generator:
|
|
29
29
|
:verbosity: Warning # Default verbosity
|
|
30
|
-
:collection_paths_source: [] # Explicitly defined as default empty array to simplify option validation code
|
|
31
30
|
:custom_args: [] # Explicitly defined as default empty array to simplify option validation code
|
|
32
31
|
:gcov_exclude: [] # Explicitly defined as default empty array to simplify option validation code
|
|
33
32
|
...
|
data/plugins/gcov/lib/gcov.rb
CHANGED
|
@@ -40,11 +40,19 @@ class Gcov < Plugin
|
|
|
40
40
|
)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# Validate
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
# #1252 -- Validate `:gcov ↳ :utilities` config (cheap, no external tool needed) and
|
|
44
|
+
# build the console summary Reportinator (needs no external tool of its own) here,
|
|
45
|
+
# eagerly, since `setup()` runs for every build this plugin is merely *enabled* for,
|
|
46
|
+
# not only real `gcov:` builds. Deliberately NOT building the gcovr/ReportGenerator
|
|
47
|
+
# Reportinators here -- doing so validates gcovr/ReportGenerator are installed
|
|
48
|
+
# (see their own constructors), which would make either a hard dependency of any
|
|
49
|
+
# build at all (e.g. plain `test:all`) rather than only a real `gcov:` build. See
|
|
50
|
+
# generate_coverage_reports, which builds (and so validates) them lazily, only once
|
|
51
|
+
# post_build already knows a gcov: task actually ran.
|
|
52
|
+
validate_utilities_config( @project_config[:gcov_utilities] )
|
|
53
|
+
@console_reportinator = summaries_enabled?( @project_config ) ?
|
|
54
|
+
ConsoleReportinator.new( @ceedling, @project_config ) : nil
|
|
55
|
+
@reportinators = nil
|
|
48
56
|
|
|
49
57
|
# Convenient instance variable references
|
|
50
58
|
@configurator = @ceedling[:configurator]
|
|
@@ -214,7 +222,7 @@ class Gcov < Plugin
|
|
|
214
222
|
results: results
|
|
215
223
|
}
|
|
216
224
|
|
|
217
|
-
verbosity =
|
|
225
|
+
verbosity = @plugin_reportinator.test_results_floor_verbosity
|
|
218
226
|
|
|
219
227
|
# Print unit test suite results
|
|
220
228
|
@plugin_reportinator.run_test_results_report( hash, verbosity )
|
|
@@ -257,6 +265,15 @@ class Gcov < Plugin
|
|
|
257
265
|
def generate_coverage_reports()
|
|
258
266
|
return if not @reports_enabled
|
|
259
267
|
|
|
268
|
+
# #1252 -- Lazily build (and so validate the external tools of) the gcovr/
|
|
269
|
+
# ReportGenerator Reportinators only now: this method only runs from post_build
|
|
270
|
+
# (automatic reporting) or the standalone `gcov:report` task (manual reporting,
|
|
271
|
+
# mutually exclusive with automatic per :gcov_report_task) -- either way, only
|
|
272
|
+
# once a real gcov: task is confirmed to have already run. See setup()'s own
|
|
273
|
+
# comment for why this can't happen any earlier. `||=` just guards against ever
|
|
274
|
+
# rebuilding (and so re-validating) on a hypothetical repeat call.
|
|
275
|
+
@reportinators ||= build_reportinators( @project_config[:gcov_utilities] )
|
|
276
|
+
|
|
260
277
|
@reportinators.each do |reportinator|
|
|
261
278
|
# Create the artifacts output directory.
|
|
262
279
|
@file_wrapper.mkdir( reportinator.artifacts_path ) if reportinator.artifacts_path
|
|
@@ -312,16 +329,10 @@ class Gcov < Plugin
|
|
|
312
329
|
return sources - tested_sources
|
|
313
330
|
end
|
|
314
331
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
@console_reportinator = summaries_enabled?(@project_config) ?
|
|
320
|
-
ConsoleReportinator.new(@ceedling, @project_config) : nil
|
|
321
|
-
|
|
322
|
-
# Do not instantiate file reportinators (and tool validation) unless reports enabled
|
|
323
|
-
return reportinators if (!enabled)
|
|
324
|
-
|
|
332
|
+
# Fail fast at plugin setup if :utilities holds an unrecognized name (e.g. a typo) --
|
|
333
|
+
# cheap, config-shape-only validation, so this stays eager even though the actual
|
|
334
|
+
# Reportinators it names are built lazily (see build_reportinators, generate_coverage_reports).
|
|
335
|
+
def validate_utilities_config(config)
|
|
325
336
|
config.each do |reportinator|
|
|
326
337
|
if not GCOV_UTILITY_NAMES.map(&:upcase).include?( reportinator.upcase )
|
|
327
338
|
options = GCOV_UTILITY_NAMES.map{ |utility| "'#{utility}'" }.join(', ')
|
|
@@ -329,6 +340,14 @@ class Gcov < Plugin
|
|
|
329
340
|
raise CeedlingException.new(msg)
|
|
330
341
|
end
|
|
331
342
|
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# #1252 -- Deliberately not called from setup(); see its own comment and
|
|
346
|
+
# generate_coverage_reports, the only caller. Constructing GcovrReportinator/
|
|
347
|
+
# ReportGeneratorReportinator validates gcovr/ReportGenerator are installed, so this
|
|
348
|
+
# can only run once a real gcov: task is confirmed to have run.
|
|
349
|
+
def build_reportinators(config)
|
|
350
|
+
reportinators = []
|
|
332
351
|
|
|
333
352
|
# Run reports using gcovr
|
|
334
353
|
if utility_enabled?( config, GCOV_UTILITY_NAME_GCOVR )
|
|
@@ -50,6 +50,28 @@ class GcovrReportinator < GcovReportinator
|
|
|
50
50
|
"(found #{@gcovr_version.major}.#{@gcovr_version.minor})"
|
|
51
51
|
)
|
|
52
52
|
end
|
|
53
|
+
|
|
54
|
+
# --decisions requires gcovr 6+; --fail-under-decision (which depends on --decisions)
|
|
55
|
+
# is a distinct, later addition requiring gcovr 7+ -- confirmed directly against real
|
|
56
|
+
# gcovr 6.0, which rejects --fail-under-decision outright as an unrecognized argument.
|
|
57
|
+
# Raised here, upfront, rather than left to surface as gcovr's own opaque CLI error or
|
|
58
|
+
# silently dropped -- either of which would leave a configured coverage threshold
|
|
59
|
+
# quietly never actually checked.
|
|
60
|
+
gcovr_opts = @config[GCOVR_SETTING_PREFIX.to_sym] || {}
|
|
61
|
+
|
|
62
|
+
if !gcovr_opts[:fail_under_decision].nil? && !min_version?( @gcovr_version, 7, 0 )
|
|
63
|
+
raise CeedlingException.new(
|
|
64
|
+
":gcov ↳ :gcovr ↳ :fail_under_decision ➡️ requires gcovr 7 or higher " \
|
|
65
|
+
"(found #{@gcovr_version.major}.#{@gcovr_version.minor})"
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if gcovr_opts[:decisions] && !min_version?( @gcovr_version, 6, 0 )
|
|
70
|
+
raise CeedlingException.new(
|
|
71
|
+
":gcov ↳ :gcovr ↳ :decisions ➡️ requires gcovr 6 or higher " \
|
|
72
|
+
"(found #{@gcovr_version.major}.#{@gcovr_version.minor})"
|
|
73
|
+
)
|
|
74
|
+
end
|
|
53
75
|
end
|
|
54
76
|
|
|
55
77
|
# Generate the gcovr report(s) specified in the options.
|
|
@@ -112,6 +134,14 @@ class GcovrReportinator < GcovReportinator
|
|
|
112
134
|
args += "--merge-mode-functions \"#{gcovr_opts[:merge_mode_function]}\" " unless gcovr_opts[:merge_mode_function].nil?
|
|
113
135
|
end
|
|
114
136
|
|
|
137
|
+
# --fail-under-decision is a no-op to gcovr without --decisions also present (that's
|
|
138
|
+
# what actually turns decision-coverage analysis on) -- :fail_under_decision implies
|
|
139
|
+
# it automatically so the threshold option can never be configured into silently
|
|
140
|
+
# failing outright. initialize already guarantees gcovr 6+ whenever either is set
|
|
141
|
+
# (7+ specifically whenever :fail_under_decision is set), matching this method's own
|
|
142
|
+
# 6+ gate above.
|
|
143
|
+
args += "--decisions " if gcovr_opts[:decisions] || !gcovr_opts[:fail_under_decision].nil?
|
|
144
|
+
|
|
115
145
|
[:fail_under_line,
|
|
116
146
|
:fail_under_branch,
|
|
117
147
|
:fail_under_decision,
|
|
@@ -327,7 +357,7 @@ class GcovrReportinator < GcovReportinator
|
|
|
327
357
|
# configuration must come from the gcovr configuration file itself.
|
|
328
358
|
IGNORED_WHEN_CONFIG_FILE_SET = [
|
|
329
359
|
:report_include, :report_exclude, :gcov_filter, :gcov_exclude, :exclude_directories,
|
|
330
|
-
:branches, :sort_uncovered, :sort_percentage, :print_summary, :gcov_executable,
|
|
360
|
+
:branches, :decisions, :sort_uncovered, :sort_percentage, :print_summary, :gcov_executable,
|
|
331
361
|
:exclude_unreachable_branches, :exclude_throw_branches, :use_gcov_files, :gcov_ignore_parse_errors,
|
|
332
362
|
:keep, :delete, :threads, :merge_mode_function,
|
|
333
363
|
:fail_under_line, :fail_under_branch, :fail_under_decision, :fail_under_function,
|
|
@@ -101,7 +101,7 @@ class Valgrind < Plugin
|
|
|
101
101
|
results: results
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
verbosity =
|
|
104
|
+
verbosity = @plugin_reportinator.test_results_floor_verbosity
|
|
105
105
|
|
|
106
106
|
# Print unit test suite results
|
|
107
107
|
@plugin_reportinator.run_test_results_report( hash, verbosity )
|
|
@@ -1684,6 +1684,34 @@
|
|
|
1684
1684
|
</span>
|
|
1685
1685
|
</a>
|
|
1686
1686
|
|
|
1687
|
+
<nav class="md-nav" aria-label="Some YAML Learnin’">
|
|
1688
|
+
<ul class="md-nav__list">
|
|
1689
|
+
|
|
1690
|
+
<li class="md-nav__item">
|
|
1691
|
+
<a href="#yaml-highlights-overview" class="md-nav__link">
|
|
1692
|
+
<span class="md-ellipsis">
|
|
1693
|
+
|
|
1694
|
+
YAML highlights & overview
|
|
1695
|
+
|
|
1696
|
+
</span>
|
|
1697
|
+
</a>
|
|
1698
|
+
|
|
1699
|
+
</li>
|
|
1700
|
+
|
|
1701
|
+
<li class="md-nav__item">
|
|
1702
|
+
<a href="#yaml-anchors-aliases-and-extensions" class="md-nav__link">
|
|
1703
|
+
<span class="md-ellipsis">
|
|
1704
|
+
|
|
1705
|
+
YAML anchors, aliases, and extensions
|
|
1706
|
+
|
|
1707
|
+
</span>
|
|
1708
|
+
</a>
|
|
1709
|
+
|
|
1710
|
+
</li>
|
|
1711
|
+
|
|
1712
|
+
</ul>
|
|
1713
|
+
</nav>
|
|
1714
|
+
|
|
1687
1715
|
</li>
|
|
1688
1716
|
|
|
1689
1717
|
<li class="md-nav__item">
|
|
@@ -4102,6 +4130,34 @@
|
|
|
4102
4130
|
</span>
|
|
4103
4131
|
</a>
|
|
4104
4132
|
|
|
4133
|
+
<nav class="md-nav" aria-label="Some YAML Learnin’">
|
|
4134
|
+
<ul class="md-nav__list">
|
|
4135
|
+
|
|
4136
|
+
<li class="md-nav__item">
|
|
4137
|
+
<a href="#yaml-highlights-overview" class="md-nav__link">
|
|
4138
|
+
<span class="md-ellipsis">
|
|
4139
|
+
|
|
4140
|
+
YAML highlights & overview
|
|
4141
|
+
|
|
4142
|
+
</span>
|
|
4143
|
+
</a>
|
|
4144
|
+
|
|
4145
|
+
</li>
|
|
4146
|
+
|
|
4147
|
+
<li class="md-nav__item">
|
|
4148
|
+
<a href="#yaml-anchors-aliases-and-extensions" class="md-nav__link">
|
|
4149
|
+
<span class="md-ellipsis">
|
|
4150
|
+
|
|
4151
|
+
YAML anchors, aliases, and extensions
|
|
4152
|
+
|
|
4153
|
+
</span>
|
|
4154
|
+
</a>
|
|
4155
|
+
|
|
4156
|
+
</li>
|
|
4157
|
+
|
|
4158
|
+
</ul>
|
|
4159
|
+
</nav>
|
|
4160
|
+
|
|
4105
4161
|
</li>
|
|
4106
4162
|
|
|
4107
4163
|
<li class="md-nav__item">
|
|
@@ -4241,10 +4297,20 @@
|
|
|
4241
4297
|
example of a complete project configuration.</p>
|
|
4242
4298
|
</div>
|
|
4243
4299
|
<h2 id="some-yaml-learnin">Some YAML Learnin’</h2>
|
|
4244
|
-
<p>Please consult YAML documentation for the finer points of format
|
|
4245
|
-
and to understand details of our YAML-based configuration file.</p>
|
|
4246
4300
|
<p>We recommend <a href="http://en.wikipedia.org/wiki/Yaml">Wikipedia’s entry on YAML</a>
|
|
4247
|
-
|
|
4301
|
+
and <a href="https://www.educative.io/blog/advanced-yaml-syntax-cheatsheet">educative.io’s advanced YAML cheatsheet</a>
|
|
4302
|
+
for a simple overview of YAML and its syntax sufficient for
|
|
4303
|
+
understanding your Ceedling project configuration.</p>
|
|
4304
|
+
<div class="admonition tip">
|
|
4305
|
+
<p class="admonition-title"><code>ceedling dumpconfig</code> to verify your YAML</p>
|
|
4306
|
+
<p>Ceedling provides a means to export the final result of YAML
|
|
4307
|
+
processing for your inspection via <a href="../getting-started/command-line.html#ceedling-dumpconfig-filepath-sections"><code>dumpconfig</code></a>.
|
|
4308
|
+
Dump output includes the resolution of advanced YAML features and
|
|
4309
|
+
Ceedling’s own manipulations. This is a good way to troubleshoot
|
|
4310
|
+
your project configuration.</p>
|
|
4311
|
+
</div>
|
|
4312
|
+
<h3 id="yaml-highlights-overview">YAML highlights & overview</h3>
|
|
4313
|
+
<p>A few points from the preceding references:</p>
|
|
4248
4314
|
<ul>
|
|
4249
4315
|
<li>
|
|
4250
4316
|
<p>YAML streams are encoded using the set of printable Unicode
|
|
@@ -4279,12 +4345,16 @@ for this. A few highlights from that reference page:</p>
|
|
|
4279
4345
|
punctuation can generally be represented without needing
|
|
4280
4346
|
to be enclosed in quotes.</p>
|
|
4281
4347
|
</li>
|
|
4282
|
-
<li>
|
|
4283
|
-
<p>Repeated nodes are initially denoted by an ampersand (<code>&</code>) and
|
|
4284
|
-
thereafter referenced with an asterisk (<code>*</code>). These are known as
|
|
4285
|
-
anchors and aliases in YAML speak.</p>
|
|
4286
|
-
</li>
|
|
4287
4348
|
</ul>
|
|
4349
|
+
<h3 id="yaml-anchors-aliases-and-extensions">YAML anchors, aliases, and extensions</h3>
|
|
4350
|
+
<p>YAML provides several “shortcuts” for referencing and modifying blocks
|
|
4351
|
+
of YAML so you can avoid duplication. This is advanced YAML and
|
|
4352
|
+
well beyond the scope of Ceedling documentation. However, know that
|
|
4353
|
+
Ceedling’s YAML parser is entirely capable of handling these advanced
|
|
4354
|
+
aspects of YAML.</p>
|
|
4355
|
+
<p>See this <a href="https://www.educative.io/blog/advanced-yaml-syntax-cheatsheet#anchors">cheatsheet entry</a>
|
|
4356
|
+
and <a href="https://blog.daemonl.com/2016/02/yaml.html">this guide</a>
|
|
4357
|
+
for much more on these powerful but finicky features.</p>
|
|
4288
4358
|
<h2 id="notes-on-project-file-structure">Notes on Project File Structure</h2>
|
|
4289
4359
|
<ul>
|
|
4290
4360
|
<li>
|
|
@@ -2344,10 +2344,10 @@
|
|
|
2344
2344
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
2345
2345
|
|
|
2346
2346
|
<li class="md-nav__item">
|
|
2347
|
-
<a href="#
|
|
2347
|
+
<a href="#example-cmock-yaml" class="md-nav__link">
|
|
2348
2348
|
<span class="md-ellipsis">
|
|
2349
2349
|
|
|
2350
|
-
|
|
2350
|
+
Example :cmock YAML
|
|
2351
2351
|
|
|
2352
2352
|
</span>
|
|
2353
2353
|
</a>
|
|
@@ -4046,10 +4046,10 @@
|
|
|
4046
4046
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
4047
4047
|
|
|
4048
4048
|
<li class="md-nav__item">
|
|
4049
|
-
<a href="#
|
|
4049
|
+
<a href="#example-cmock-yaml" class="md-nav__link">
|
|
4050
4050
|
<span class="md-ellipsis">
|
|
4051
4051
|
|
|
4052
|
-
|
|
4052
|
+
Example :cmock YAML
|
|
4053
4053
|
|
|
4054
4054
|
</span>
|
|
4055
4055
|
</a>
|
|
@@ -4155,7 +4155,7 @@
|
|
|
4155
4155
|
|
|
4156
4156
|
<h1 id="cexception"><code>:cexception</code></h1>
|
|
4157
4157
|
<p><strong>Configure CException’s features</strong></p>
|
|
4158
|
-
<h2 id="
|
|
4158
|
+
<h2 id="example-cmock-yaml">Example <code>:cmock</code> YAML</h2>
|
|
4159
4159
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">:cexception</span><span class="p">:</span>
|
|
4160
4160
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">:defines</span><span class="p">:</span>
|
|
4161
4161
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="c1"># Enables CException `#include`ing CExceptionConfig.h</span>
|
|
@@ -2288,10 +2288,10 @@
|
|
|
2288
2288
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
2289
2289
|
|
|
2290
2290
|
<li class="md-nav__item">
|
|
2291
|
-
<a href="#
|
|
2291
|
+
<a href="#example-cmock-yaml" class="md-nav__link">
|
|
2292
2292
|
<span class="md-ellipsis">
|
|
2293
2293
|
|
|
2294
|
-
|
|
2294
|
+
Example :cmock YAML
|
|
2295
2295
|
|
|
2296
2296
|
</span>
|
|
2297
2297
|
</a>
|
|
@@ -4112,10 +4112,10 @@
|
|
|
4112
4112
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
4113
4113
|
|
|
4114
4114
|
<li class="md-nav__item">
|
|
4115
|
-
<a href="#
|
|
4115
|
+
<a href="#example-cmock-yaml" class="md-nav__link">
|
|
4116
4116
|
<span class="md-ellipsis">
|
|
4117
4117
|
|
|
4118
|
-
|
|
4118
|
+
Example :cmock YAML
|
|
4119
4119
|
|
|
4120
4120
|
</span>
|
|
4121
4121
|
</a>
|
|
@@ -4290,7 +4290,7 @@
|
|
|
4290
4290
|
<p>Ceedling sets values for a subset of CMock settings. All CMock options are
|
|
4291
4291
|
available to be set, but only those options set by Ceedling in an automated
|
|
4292
4292
|
fashion are documented below. See <a href="https://github.com/ThrowTheSwitch/CMock/blob/master/docs/CMock_Summary.md">CMock documentation</a>.</p>
|
|
4293
|
-
<h2 id="
|
|
4293
|
+
<h2 id="example-cmock-yaml">Example <code>:cmock</code> YAML</h2>
|
|
4294
4294
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">:cmock</span><span class="p">:</span>
|
|
4295
4295
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">:when_no_prototypes</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">:warn</span>
|
|
4296
4296
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="nt">:enforce_strict_ordering</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">TRUE</span>
|