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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +2 -0
  5. data/README.md +4 -1
  6. data/docs/Changelog.md +11 -0
  7. data/docs/KnownIssues.md +1 -0
  8. data/docs/mkdocs/configuration/project-file.md +25 -7
  9. data/docs/mkdocs/configuration/reference/cexception.md +1 -1
  10. data/docs/mkdocs/configuration/reference/cmock.md +1 -1
  11. data/docs/mkdocs/configuration/reference/unity.md +1 -1
  12. data/docs/mkdocs/getting-started/quick-start.md +11 -8
  13. data/docs/mkdocs/plugins/gcov/gcovr.md +324 -189
  14. data/docs/mkdocs/plugins/gcov/reportgenerator.md +113 -31
  15. data/docs/mkdocs/reference/gcov-plugin.md +21 -3
  16. data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -1
  17. data/lib/ceedling/generators/generator_test_results_backtrace.rb +16 -8
  18. data/lib/ceedling/plugins/plugin_reportinator.rb +9 -0
  19. data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +1 -1
  20. data/lib/version.rb +1 -1
  21. data/plugins/gcov/config/defaults.yml +0 -1
  22. data/plugins/gcov/lib/gcov.rb +35 -16
  23. data/plugins/gcov/lib/gcovr_reportinator.rb +31 -1
  24. data/plugins/valgrind/lib/valgrind.rb +1 -1
  25. data/site-local/configuration/project-file.html +78 -8
  26. data/site-local/configuration/reference/cexception.html +5 -5
  27. data/site-local/configuration/reference/cmock.html +5 -5
  28. data/site-local/configuration/reference/unity.html +5 -5
  29. data/site-local/getting-started/quick-start.html +13 -9
  30. data/site-local/plugins/gcov/gcovr.html +1215 -255
  31. data/site-local/plugins/gcov/reportgenerator.html +404 -46
  32. data/site-local/reference/gcov-plugin.html +40 -7
  33. data/site-local/sitemap.xml.gz +0 -0
  34. data/site-local/snapshot/plugins/gcov/config/defaults.yml +0 -1
  35. data/spec/support/system/system_context.rb +7 -3
  36. data/spec/system/deployment_as_gem_spec.rb +2 -0
  37. data/spec/system/deployment_as_vendor_spec.rb +2 -0
  38. data/spec/system/gcov_deployment_spec.rb +2 -0
  39. data/spec/system/support/common_test_cases.rb +42 -0
  40. data/spec/system/support/gcov_common_test_cases.rb +52 -0
  41. data/spec/units/generators/generator_test_results_backtrace_spec.rb +51 -0
  42. data/spec/units/plugin_reportinator_spec.rb +38 -0
  43. 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
- # Optional directory for storing persistent coverage information.
11
- # Can be used in future reports to show coverage evolution.
12
- :history_directory: <path>
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
- # Optional plugin files for custom reports or custom history storage (separated by semicolon).
15
- :plugins: <plugin.dll>;<*.dll>
70
+ **Example:** `"-./vendor/*;-./build/*;-./test/*;-./lib/*;+./src/*"`
16
71
 
17
- # Optional list of assemblies that should be included or excluded in the report (separated by semicolon).
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
- # Optional list of classes that should be included or excluded in the report (separated by semicolon).
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
- # Optional list of files that should be included or excluded in the report (separated by semicolon).
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
- # The verbosity level of the log messages.
34
- # Values: Verbose, Info, Warning, Error, Off (defaults to Warning)
35
- :verbosity: <level>
78
+ **Values:** `Verbose`, `Info`, `Warning`, `Error`, `Off`
36
79
 
37
- # Optional tag or build version.
38
- :tag: <tag>
80
+ **Default:** `Warning`
39
81
 
40
- # Optional list of one or more regular expressions to exclude gcov notes files that match these filters.
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
- # Optionally set the number of threads to use in parallel. Defaults to 1.
46
- :threads: <count>
107
+ ---
47
108
 
48
- # Optional list of one or more command line arguments to pass to Report Generator.
49
- # Useful for configuring Risk Hotspots and Other Settings.
50
- # https://github.com/danielpalme/ReportGenerator/wiki/Settings
51
- # Note: This can be accomplished with Ceedling's tool configuration options outside of plugin
52
- # configuration but is supported here to collect configuration options in one place.
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
- ### `:threads`
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:** `1`
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
- when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:PASS\s*$)/
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
- when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:IGNORE\s*$)/
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
- when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:PASS\s*$)/
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
- when /(^#{Regexp.escape(filename)}:\d+:#{Regexp.escape(test_case[:test])}:IGNORE\s*$)/
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 = (results[:counts][:failed] > 0) ? Verbosity::ERRORS : Verbosity::NORMAL
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
@@ -15,7 +15,7 @@
15
15
  module Ceedling
16
16
  module Version
17
17
  # Convenience constants for gem building, etc.
18
- GEM = '1.1.6'
18
+ GEM = '1.1.7'
19
19
  TAG = GEM
20
20
 
21
21
  # If run as a script print Ceedling's version to $stdout
@@ -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
  ...
@@ -40,11 +40,19 @@ class Gcov < Plugin
40
40
  )
41
41
  end
42
42
 
43
- # Validate configuration and tools while building Reportinators
44
- @reportinators = build_reportinators(
45
- @project_config[:gcov_utilities],
46
- @reports_enabled
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 = (results[:counts][:failed] > 0) ? Verbosity::ERRORS : Verbosity::NORMAL
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
- def build_reportinators(config, enabled)
316
- reportinators = []
317
-
318
- # Instantiate console summary reportinator if summaries enabled
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 = (results[:counts][:failed] > 0) ? Verbosity::ERRORS : Verbosity::NORMAL
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 &amp; 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 &amp; 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
- for this. A few highlights from that reference page:</p>
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 &amp; 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>&amp;</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="#exmaple-cmock-yaml" class="md-nav__link">
2347
+ <a href="#example-cmock-yaml" class="md-nav__link">
2348
2348
  <span class="md-ellipsis">
2349
2349
 
2350
- Exmaple :cmock YAML
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="#exmaple-cmock-yaml" class="md-nav__link">
4049
+ <a href="#example-cmock-yaml" class="md-nav__link">
4050
4050
  <span class="md-ellipsis">
4051
4051
 
4052
- Exmaple :cmock YAML
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="exmaple-cmock-yaml">Exmaple <code>:cmock</code> YAML</h2>
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="#exmaple-cmock-yaml" class="md-nav__link">
2291
+ <a href="#example-cmock-yaml" class="md-nav__link">
2292
2292
  <span class="md-ellipsis">
2293
2293
 
2294
- Exmaple :cmock YAML
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="#exmaple-cmock-yaml" class="md-nav__link">
4115
+ <a href="#example-cmock-yaml" class="md-nav__link">
4116
4116
  <span class="md-ellipsis">
4117
4117
 
4118
- Exmaple :cmock YAML
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="exmaple-cmock-yaml">Exmaple <code>:cmock</code> YAML</h2>
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>