ceedling 1.2.1 → 1.2.2

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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/README.md +11 -9
  4. data/Rakefile +2 -1
  5. data/assets/features/ceedling +1 -1
  6. data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_typo.c +14 -0
  7. data/assets/fixtures/tests_with_duplicate_test_names/test_foo.c +21 -0
  8. data/bin/actionator.rb +6 -12
  9. data/bin/app_cfg.rb +14 -1
  10. data/bin/ceedling +13 -3
  11. data/bin/cli.rb +25 -6
  12. data/bin/cli_handler.rb +113 -73
  13. data/bin/cli_helper.rb +51 -78
  14. data/bin/installation_selector.rb +81 -0
  15. data/bin/launchinator.rb +69 -0
  16. data/bin/mixin_resolvinator.rb +26 -36
  17. data/bin/objects.yml +13 -0
  18. data/bin/path_validator.rb +25 -29
  19. data/bin/versionator.rb +47 -48
  20. data/ceedling.gemspec +19 -15
  21. data/docs/BreakingChanges.md +70 -1
  22. data/docs/Changelog.md +74 -3
  23. data/docs/KnownIssues.md +90 -4
  24. data/docs/ReleaseNotes.md +13 -0
  25. data/lib/ceedling/build_log_writer.rb +33 -0
  26. data/lib/ceedling/config/build_root_policy.rb +70 -0
  27. data/lib/ceedling/config/configurator.rb +14 -16
  28. data/lib/ceedling/config/configurator_builder.rb +58 -28
  29. data/lib/ceedling/config/configurator_paths_validator.rb +179 -0
  30. data/lib/ceedling/config/configurator_plugins.rb +1 -1
  31. data/lib/ceedling/config/configurator_setup.rb +15 -28
  32. data/lib/ceedling/config/configurator_validator.rb +1 -110
  33. data/lib/ceedling/defaults.rb +4 -4
  34. data/lib/ceedling/dependencies/README.md +18 -16
  35. data/lib/ceedling/dependencies/dependency_cache_store.rb +20 -3
  36. data/lib/ceedling/dependencies/dependency_hasher.rb +35 -1
  37. data/lib/ceedling/filename_extension.rb +7 -1
  38. data/lib/ceedling/filesystem/FILE_TREE.md +253 -0
  39. data/lib/ceedling/filesystem/PATH_HANDLING.md +304 -0
  40. data/lib/ceedling/filesystem/README.md +41 -0
  41. data/lib/ceedling/filesystem/build_subpath.rb +102 -0
  42. data/lib/ceedling/filesystem/destination_collision.rb +25 -0
  43. data/lib/ceedling/{file_finder.rb → filesystem/file_finder.rb} +159 -104
  44. data/lib/ceedling/{file_finder_helper.rb → filesystem/file_finder_helper.rb} +36 -31
  45. data/lib/ceedling/filesystem/file_path_collection_utils.rb +183 -0
  46. data/lib/ceedling/{file_path_utils.rb → filesystem/file_path_utils.rb} +108 -97
  47. data/lib/ceedling/{file_system_wrapper.rb → filesystem/file_system_wrapper.rb} +6 -5
  48. data/lib/ceedling/filesystem/file_tree.rb +241 -0
  49. data/lib/ceedling/{file_wrapper.rb → filesystem/file_wrapper.rb} +45 -38
  50. data/lib/ceedling/filesystem/path_exclusions.rb +30 -0
  51. data/lib/ceedling/{path_matcher.rb → filesystem/path_matcher.rb} +27 -23
  52. data/lib/ceedling/{path_mirror.rb → filesystem/path_mirror.rb} +19 -18
  53. data/lib/ceedling/filesystem/path_spellings.rb +55 -0
  54. data/lib/ceedling/filesystem/project_paths.rb +184 -0
  55. data/lib/ceedling/filesystem/working_dir.rb +40 -0
  56. data/lib/ceedling/generators/generator.rb +5 -6
  57. data/lib/ceedling/generators/generator_partials.rb +1 -1
  58. data/lib/ceedling/generators/generator_test_results_backtrace.rb +7 -7
  59. data/lib/ceedling/handoff.rb +121 -0
  60. data/lib/ceedling/includes/include_factory.rb +3 -3
  61. data/lib/ceedling/includes/include_pathinator.rb +67 -10
  62. data/lib/ceedling/includes/includes.rb +1 -1
  63. data/lib/ceedling/installation.rb +92 -0
  64. data/lib/ceedling/library_resolver.rb +99 -0
  65. data/lib/ceedling/objects.yml +23 -2
  66. data/lib/ceedling/partials/partializer.rb +4 -4
  67. data/lib/ceedling/partials/partializer_config.rb +3 -1
  68. data/lib/ceedling/plugins/report_log_writer_plugin.rb +3 -5
  69. data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +1 -1
  70. data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +1 -1
  71. data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +1 -1
  72. data/lib/ceedling/rake_app/rakefile_component_resolver.rb +10 -17
  73. data/lib/ceedling/rakefile.rb +15 -1
  74. data/lib/ceedling/rakefiles/base/tasks_base.rake +1 -1
  75. data/lib/ceedling/rakefiles/release/rules_release.rake +4 -7
  76. data/lib/ceedling/release_invoker/release_build_executor.rb +33 -44
  77. data/lib/ceedling/release_invoker/release_build_planner.rb +14 -6
  78. data/lib/ceedling/reportinator.rb +3 -4
  79. data/lib/ceedling/setupinator.rb +94 -90
  80. data/lib/ceedling/test_context_extractor.rb +5 -1
  81. data/lib/ceedling/test_invoker/PIPELINE.md +9 -7
  82. data/lib/ceedling/test_invoker/mock_locator.rb +60 -2
  83. data/lib/ceedling/test_invoker/partials_manager.rb +12 -0
  84. data/lib/ceedling/test_invoker/standin_headerinator.rb +22 -13
  85. data/lib/ceedling/test_invoker/test_build_executor.rb +24 -40
  86. data/lib/ceedling/test_invoker/test_build_planner.rb +37 -18
  87. data/lib/ceedling/test_invoker/test_build_setup.rb +17 -12
  88. data/lib/ceedling/test_invoker/test_build_validations.rb +16 -31
  89. data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +1 -1
  90. data/lib/ceedling/test_invoker/test_invoker.rb +6 -1
  91. data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +1 -1
  92. data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +40 -20
  93. data/lib/ceedling/tool_executor.rb +9 -3
  94. data/lib/ceedling/yaml_wrapper.rb +3 -2
  95. data/lib/version.rb +1 -1
  96. data/plugins/bullseye/config/defaults_bullseye.rb +1 -1
  97. data/plugins/bullseye/lib/bullseye.rb +9 -7
  98. data/plugins/cppcheck/config/defaults_cppcheck.rb +1 -1
  99. data/plugins/dependencies/config/defaults.yml +6 -6
  100. data/plugins/dependencies/dependencies.rake +4 -1
  101. data/plugins/dependencies/lib/dependencies.rb +18 -8
  102. data/plugins/dependencies/lib/dependency_spec.rb +17 -5
  103. data/plugins/fff/lib/fff.rb +45 -39
  104. data/plugins/fff/spec/fff_cmock_wrapper_spec.rb +128 -0
  105. data/plugins/gcov/config/defaults_gcov.rb +1 -1
  106. data/plugins/gcov/lib/console_reportinator.rb +4 -18
  107. data/plugins/gcov/lib/gcov.rb +9 -2
  108. data/plugins/gcov/lib/gcovr_reportinator.rb +8 -40
  109. data/plugins/gcov/lib/gcovr_thresholds.rb +74 -0
  110. data/plugins/gcov/lib/reportgenerator_reportinator.rb +1 -1
  111. data/plugins/module_generator/lib/module_generator.rb +3 -3
  112. data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +53 -80
  113. data/plugins/sanitize/lib/sanitize_records.rb +3 -6
  114. data/plugins/valgrind/lib/valgrind.rb +14 -7
  115. data/site-local/configuration/reference/cmock.html +2 -1
  116. data/site-local/configuration/reference/files.html +9 -3
  117. data/site-local/configuration/reference/libraries.html +21 -3
  118. data/site-local/configuration/reference/paths.html +29 -6
  119. data/site-local/configuration/reference/project.html +17 -7
  120. data/site-local/configuration/reference/release-build.html +2 -0
  121. data/site-local/configuration/reference/tools.html +9 -0
  122. data/site-local/configuration/which-ceedling.html +377 -17
  123. data/site-local/development/releases.html +5 -1
  124. data/site-local/development/workflow.html +48 -43
  125. data/site-local/getting-started/builds.html +2 -0
  126. data/site-local/getting-started/command-line.html +56 -4
  127. data/site-local/plugins/dependencies.html +6 -3
  128. data/site-local/plugins/fff.html +42 -11
  129. data/site-local/plugins/gcov/gcovr.html +15 -12
  130. data/site-local/plugins/gcov/setup.html +2 -1
  131. data/site-local/plugins/report-tests-raw-output-log.html +3 -1
  132. data/site-local/plugins/report-tests-teamcity-stdout.html +6 -3
  133. data/site-local/plugins/sanitize.html +7 -6
  134. data/site-local/plugins/valgrind.html +8 -7
  135. data/site-local/project/upgrade.html +3 -0
  136. data/site-local/reference/command-line.html +9 -2
  137. data/site-local/sitemap.xml.gz +0 -0
  138. data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +1 -1
  139. data/site-local/snapshot/plugins/gcov/config/defaults_gcov.rb +1 -1
  140. data/site-local/testing-guide/conventions.html +53 -0
  141. data/spec/integration/actionator_file_operations_spec.rb +91 -1
  142. data/spec/integration/compile_commands_json_db_spec.rb +1 -1
  143. data/spec/integration/configurator_validation_spec.rb +1 -1
  144. data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +26 -0
  145. data/spec/integration/dependencies/dependency_tracker_core_spec.rb +22 -0
  146. data/spec/integration/launcher_handoff_spec.rb +297 -0
  147. data/spec/integration/mixin_loading_spec.rb +1 -1
  148. data/spec/integration/module_generator_spec.rb +3 -3
  149. data/spec/integration/nested_test_artifacts_spec.rb +99 -0
  150. data/spec/integration/partials_module_resolution_spec.rb +7 -4
  151. data/spec/integration/path_intake_scenarios_spec.rb +101 -0
  152. data/spec/integration/path_scenarios_spec.rb +322 -0
  153. data/spec/integration/quote_include_isolator_spec.rb +1 -1
  154. data/spec/integration/report_build_warnings_log_spec.rb +1 -1
  155. data/spec/integration/report_tests_log_factory_spec.rb +1 -1
  156. data/spec/integration/test_executable_manifest_spec.rb +1 -1
  157. data/spec/integration/test_includes_extractinator_spec.rb +2 -1
  158. data/spec/integration/test_naming_spec.rb +198 -0
  159. data/spec/integration/test_source_file_checks_spec.rb +166 -0
  160. data/spec/integration/tool_validator_spec.rb +1 -1
  161. data/spec/integration/upgrade_docs_spec.rb +84 -0
  162. data/spec/integration/vendor_copy_transient_io_retry_spec.rb +74 -5
  163. data/spec/support/file_tree_helper.rb +88 -0
  164. data/spec/support/integration/configurator_integration_helper.rb +6 -6
  165. data/spec/support/integration/dependency_tracker_integration_helper.rb +1 -1
  166. data/spec/support/integration/partials_generation_integration_helper.rb +2 -2
  167. data/spec/support/integration/path_scenario_harness.rb +173 -0
  168. data/spec/support/integration/spec_integration_helper.rb +1 -1
  169. data/spec/support/integration/test_includes_harness.rb +13 -2
  170. data/spec/support/spec_helper.rb +2 -0
  171. data/spec/support/system/spec_system_helper.rb +7 -6
  172. data/spec/support/system/system_context.rb +21 -3
  173. data/spec/support/working_dir_tracking.rb +49 -0
  174. data/spec/system/build_output_mirroring_spec.rb +2 -2
  175. data/spec/system/conditional_mock_includes_spec.rb +1 -1
  176. data/spec/system/delta_builds_spec.rb +137 -11
  177. data/spec/system/gcov_deployment_spec.rb +1 -0
  178. data/spec/system/header_include_path_validation_spec.rb +4 -4
  179. data/spec/system/launcher_handoff_spec.rb +82 -0
  180. data/spec/system/mock_include_folders_spec.rb +91 -0
  181. data/spec/system/parent_directory_reference_spec.rb +5 -3
  182. data/spec/system/path_handling_probes_spec.rb +192 -0
  183. data/spec/system/preprocessing_parameterized_tests_spec.rb +1 -1
  184. data/spec/system/rake_release_task_path_disambiguation_spec.rb +6 -6
  185. data/spec/system/rake_test_task_path_disambiguation_spec.rb +85 -0
  186. data/spec/system/special_path_characters_spec.rb +86 -0
  187. data/spec/system/support/common_test_cases.rb +23 -21
  188. data/spec/system/support/gcov_common_test_cases.rb +37 -9
  189. data/spec/system/support/sanitize_common_test_cases.rb +2 -2
  190. data/spec/system/support/valgrind_common_test_cases.rb +12 -12
  191. data/spec/system/test_pipeline_stop_points_spec.rb +4 -4
  192. data/spec/system/test_runner_system_include_spec.rb +1 -1
  193. data/spec/system/test_source_file_directive_spec.rb +34 -5
  194. data/spec/units/bin/actionator_spec.rb +14 -17
  195. data/spec/units/bin/app_cfg_spec.rb +37 -0
  196. data/spec/units/bin/cli_handler_spec.rb +282 -6
  197. data/spec/units/bin/cli_helper_spec.rb +116 -45
  198. data/spec/units/bin/installation_selector_spec.rb +114 -0
  199. data/spec/units/bin/launchinator_spec.rb +171 -0
  200. data/spec/units/bin/path_validator_spec.rb +10 -0
  201. data/spec/units/bin/versionator_spec.rb +38 -6
  202. data/spec/units/build_log_writer_spec.rb +57 -0
  203. data/spec/units/config/build_root_policy_spec.rb +61 -0
  204. data/spec/units/config/configurator_builder_spec.rb +37 -6
  205. data/spec/units/config/configurator_paths_validator_spec.rb +292 -0
  206. data/spec/units/config/configurator_setup_spec.rb +9 -65
  207. data/spec/units/config/configurator_spec.rb +27 -5
  208. data/spec/units/config/configurator_validator_spec.rb +1 -172
  209. data/spec/units/default_tools_quoting_spec.rb +83 -0
  210. data/spec/units/dependencies/dependency_cache_store_spec.rb +33 -2
  211. data/spec/units/dependencies/dependency_debug_tree_spec.rb +1 -1
  212. data/spec/units/dependencies/dependency_hasher_spec.rb +42 -1
  213. data/spec/units/dependencies/dependency_path_normalizer_spec.rb +1 -1
  214. data/spec/units/dependencies/dependency_tracker_spec.rb +3 -1
  215. data/spec/units/filename_extension_spec.rb +11 -0
  216. data/spec/units/filesystem/build_subpath_spec.rb +122 -0
  217. data/spec/units/filesystem/destination_collision_spec.rb +30 -0
  218. data/spec/units/{file_finder_helper_spec.rb → filesystem/file_finder_helper_spec.rb} +46 -1
  219. data/spec/units/{file_finder_spec.rb → filesystem/file_finder_spec.rb} +188 -22
  220. data/spec/units/{file_path_collection_utils_spec.rb → filesystem/file_path_collection_utils_spec.rb} +181 -1
  221. data/spec/units/{file_path_utils_spec.rb → filesystem/file_path_utils_spec.rb} +204 -87
  222. data/spec/units/filesystem/file_system_wrapper_spec.rb +33 -0
  223. data/spec/units/filesystem/file_tree_spec.rb +511 -0
  224. data/spec/units/filesystem/file_tree_windows_spec.rb +78 -0
  225. data/spec/units/{file_wrapper_spec.rb → filesystem/file_wrapper_spec.rb} +95 -12
  226. data/spec/units/{path_matcher_spec.rb → filesystem/path_matcher_spec.rb} +12 -1
  227. data/spec/units/{path_mirror_spec.rb → filesystem/path_mirror_spec.rb} +32 -4
  228. data/spec/units/filesystem/project_paths_spec.rb +147 -0
  229. data/spec/units/filesystem/working_dir_spec.rb +71 -0
  230. data/spec/units/generators/generator_spec.rb +12 -6
  231. data/spec/units/generators/generator_test_results_backtrace_spec.rb +50 -46
  232. data/spec/units/generators/generator_test_results_spec.rb +1 -1
  233. data/spec/units/handoff_spec.rb +205 -0
  234. data/spec/units/includes/include_factory_spec.rb +3 -3
  235. data/spec/units/includes/include_pathinator_spec.rb +46 -0
  236. data/spec/units/installation_spec.rb +228 -0
  237. data/spec/units/library_resolver_spec.rb +157 -0
  238. data/spec/units/mock_locator_spec.rb +76 -1
  239. data/spec/units/partials/partializer_config_spec.rb +7 -0
  240. data/spec/units/partials/partializer_spec.rb +1 -0
  241. data/spec/units/partials_manager_spec.rb +17 -0
  242. data/spec/units/plugins/bullseye_spec.rb +15 -2
  243. data/spec/units/plugins/console_reportinator_spec.rb +18 -20
  244. data/spec/units/plugins/dependencies_spec.rb +33 -7
  245. data/spec/units/plugins/dependency_spec_spec.rb +17 -0
  246. data/spec/units/plugins/gcov_spec.rb +28 -3
  247. data/spec/units/plugins/gcovr_reportinator_spec.rb +19 -47
  248. data/spec/units/plugins/gcovr_thresholds_spec.rb +95 -0
  249. data/spec/units/plugins/module_generator_spec.rb +5 -5
  250. data/spec/units/plugins/report_build_warnings_log_spec.rb +3 -3
  251. data/spec/units/plugins/report_log_writer_plugin_spec.rb +10 -1
  252. data/spec/units/plugins/report_tests_raw_output_log_spec.rb +13 -2
  253. data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +77 -3
  254. data/spec/units/plugins/reportgenerator_reportinator_spec.rb +1 -1
  255. data/spec/units/plugins/sanitize_records_spec.rb +3 -1
  256. data/spec/units/plugins/sanitize_spec.rb +1 -1
  257. data/spec/units/plugins/valgrind_spec.rb +23 -8
  258. data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +1 -1
  259. data/spec/units/rake_app/rakefile_component_resolver_spec.rb +21 -0
  260. data/spec/units/release_build_executor_spec.rb +53 -14
  261. data/spec/units/release_build_planner_spec.rb +15 -3
  262. data/spec/units/reportinator_spec.rb +5 -5
  263. data/spec/units/standin_headerinator_spec.rb +31 -1
  264. data/spec/units/test_build_executor_spec.rb +65 -3
  265. data/spec/units/test_build_planner_spec.rb +104 -2
  266. data/spec/units/test_build_setup_spec.rb +96 -12
  267. data/spec/units/test_context_extractor_spec.rb +25 -0
  268. data/spec/units/test_file_preprocessinator_spec.rb +17 -1
  269. data/spec/units/test_includes_extractinator_spec.rb +5 -1
  270. data/spec/units/test_invoker/objects_wiring_spec.rb +6 -3
  271. data/spec/units/test_invoker_spec.rb +14 -1
  272. data/spec/units/test_source_file_directive_resolver_spec.rb +38 -7
  273. data/spec/units/tool_executor_spec.rb +26 -0
  274. data/spec/units/yaml_wrapper_spec.rb +11 -0
  275. metadata +109 -25
  276. data/lib/ceedling/file_path_collection_utils.rb +0 -164
@@ -5595,9 +5595,16 @@ new project (default is your working directory).</p>
5595
5595
  </table>
5596
5596
  <hr />
5597
5597
  <h3 id="ceedling-upgrade-path"><code>ceedling upgrade PATH</code></h3>
5598
- <p>Upgrade vendored installation of Ceedling for an existing project
5599
- along with any locally installed documentation bundles. <code>PATH</code> is
5600
- required and should be the root of the project to upgrade.</p>
5598
+ <p>Upgrade vendored installation of Ceedling for an existing project. <code>PATH</code>
5599
+ is required and should be the root of the project to upgrade.</p>
5600
+ <p>If the project holds documentation that <code>new --docs</code> or <code>example --docs</code>
5601
+ exported, <code>upgrade</code> replaces it with the documentation of the Ceedling it
5602
+ copies. It replaces only what the export wrote, and leaves your own files in
5603
+ <code>docs/</code>. If that Ceedling has no HTML documentation bundle (a <code>--local</code> copy
5604
+ carries none), <code>upgrade</code> keeps the project’s existing bundle.</p>
5605
+ <p><code>upgrade</code> copies the Ceedling you run, or the installation the
5606
+ <code>WHICH_CEEDLING</code> environment variable names. It never copies from a
5607
+ <code>vendor/ceedling/</code> it finds in your working directory.</p>
5601
5608
  <table>
5602
5609
  <thead>
5603
5610
  <tr>
@@ -5620,6 +5627,10 @@ required and should be the root of the project to upgrade.</p>
5620
5627
  <h3 id="ceedling-docs-dest"><code>ceedling docs [DEST]</code></h3>
5621
5628
  <p>Exports the Ceedling documentation bundle to the filesystem. <code>DEST</code> is
5622
5629
  an optional destination path (default is your working directory).</p>
5630
+ <p><code>docs</code> exports the documentation of the installation <a href="../configuration/which-ceedling.html"><em>Which Ceedling</em></a>
5631
+ selects. A <code>--local</code> copy carries no documentation bundle, so for a vendored
5632
+ copy <code>docs</code> exports the documentation of the <code>ceedling</code> command you ran, with a
5633
+ notice naming both installations.</p>
5623
5634
  <p><em>No parameters.</em></p>
5624
5635
  <hr />
5625
5636
  <h3 id="ceedling-version"><code>ceedling version</code></h3>
@@ -5637,7 +5648,48 @@ an optional destination path (default is your working directory).</p>
5637
5648
  <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a> CException =&gt; #.#.#
5638
5649
  </code></pre></div>
5639
5650
  <p>If the short SHA information is unavailable such as in local development, the SHA is omitted. The source for this string is generated and captured in the Gem at the time of Ceedling’s automated build in CI.</p>
5640
- <p><em>No parameters.</em></p>
5651
+ <p><code>version</code> reads your project file when one is available. When your project selects another Ceedling installation through <a href="../configuration/which-ceedling.html"><em>Which Ceedling</em></a>, <code>version</code> reports the <code>ceedling</code> command you ran and the selected installation separately, each with its own version:</p>
5652
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>🌱 Welcome to Ceedling!
5653
+ <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
5654
+ <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> Ceedling Launcher =&gt; #.#.#-&lt;Short SHA&gt;
5655
+ <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> ----------------------
5656
+ <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> &lt;Ceedling launcher install path&gt;
5657
+ <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a>
5658
+ <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> Ceedling App =&gt; #.#.#-&lt;Short SHA&gt;
5659
+ <a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> ----------------------
5660
+ <a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> &lt;Ceedling application install path&gt;
5661
+ <a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a>
5662
+ <a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a> Build Frameworks
5663
+ <a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a> ----------------------
5664
+ <a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a> CMock =&gt; #.#.#
5665
+ <a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a> Unity =&gt; #.#.#
5666
+ <a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a> CException =&gt; #.#.#
5667
+ </code></pre></div>
5668
+ <p>The build frameworks are always those of the Ceedling application.</p>
5669
+ <table>
5670
+ <thead>
5671
+ <tr>
5672
+ <th>Flag</th>
5673
+ <th>Alias</th>
5674
+ <th>Description</th>
5675
+ <th>Default</th>
5676
+ </tr>
5677
+ </thead>
5678
+ <tbody>
5679
+ <tr>
5680
+ <td><code>--project</code></td>
5681
+ <td><code>-p</code></td>
5682
+ <td>Project filepath. A project file named this way must load. Without it, a default project file that cannot be loaded is skipped.</td>
5683
+ <td><code>project.yml</code> or <code>ceedling.yml</code> in your working directory</td>
5684
+ </tr>
5685
+ <tr>
5686
+ <td><code>--mixin</code></td>
5687
+ <td><code>-m</code></td>
5688
+ <td>Merge a mixin into the project configuration. Repeatable.</td>
5689
+ <td></td>
5690
+ </tr>
5691
+ </tbody>
5692
+ </table>
5641
5693
  <hr />
5642
5694
  <h2 id="build-plugin-tasks">Build &amp; plugin tasks</h2>
5643
5695
  <p>Build task are loaded from your project configuration. Unlike
@@ -5064,8 +5064,9 @@ project’s own files.</p>
5064
5064
  <p>If the dependency is part of your repository (its fetch <code>:method</code> is <code>:none</code>), <code>:source</code>
5065
5065
  is where its code already lives. Paths may lie outside your project, such as
5066
5066
  <code>../shared/lib</code>, and headers found there work in test and release builds alike.</p>
5067
- <p>Every artifact is relative to the <code>:artifact</code> path. With several include directories,
5068
- choose the highest level and list the rest relative to it.</p>
5067
+ <p>Every artifact is relative to the <code>:artifact</code> path, unless it is an absolute path, which
5068
+ names the artifact itself. With several include directories, choose the highest level
5069
+ and list the rest relative to it. A path may begin with <code>~</code> to name your home directory.</p>
5069
5070
  <h2 id="fetching-dependencies">Fetching dependencies</h2>
5070
5071
  <p>The plugin fetches a dependency with one of several common methods, configured under its
5071
5072
  <code>:fetch</code>:</p>
@@ -5237,7 +5238,9 @@ under <code>:tools</code>:</p>
5237
5238
  <p>The compiler, assembler, and archiver are checked just before <code>:build_lib</code> uses them, so
5238
5239
  a project without <code>:build_lib</code> needs none of them.</p>
5239
5240
  <p><code>:build_lib</code> compiles every C file anywhere under the dependency’s <code>:source</code> path, with
5240
- every directory holding a header there as a search path. It then archives the objects
5241
+ every directory holding a header there as a search path. Each object, and its list file,
5242
+ sits in the <code>:build</code> path at its source’s path below the <code>:source</code> path, so same-named
5243
+ sources in different directories keep apart. It then archives the objects
5241
5244
  into the first library under <code>:artifacts</code> ↳ <code>:static_libraries</code>, built in the <code>:build</code>
5242
5245
  path and copied to the <code>:artifact</code> path when the two differ. A dependency’s own
5243
5246
  <code>:defines</code> and <code>:flags</code> apply to its compilation, and <code>:libraries</code> and <code>:libpaths</code> to its
@@ -4844,19 +4844,50 @@ Each example uses fakes for a "display" module, created from a display.h file wi
4844
4844
  <h2 id="test-setup">Test setup</h2>
4845
4845
  <p>All of the fake functions and any fff global state are all reset automatically between each test.</p>
4846
4846
  <h2 id="cmock-configuration">CMock configuration</h2>
4847
- <p>We still use some CMock configuration options for setting things like the mock prefix and for including additional header files in the mock files.</p>
4847
+ <p>Fakes still use some CMock settings, such as the mock prefix and the extra
4848
+ header files to include.</p>
4848
4849
  <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="nt">:cmock</span><span class="p">:</span>
4849
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="w"> </span><span class="nt">:mock_prefix</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mock_</span>
4850
- <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">:includes</span><span class="p p-Indicator">:</span>
4851
- <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4852
- <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="w"> </span><span class="w w-Error"> </span><span class="nt">:includes_h_pre_orig_header</span><span class="p">:</span>
4853
- <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4854
- <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a><span class="w"> </span><span class="nt">:includes_h_post_orig_header</span><span class="p">:</span>
4855
- <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4856
- <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a><span class="w"> </span><span class="nt">:includes_c_pre_header</span><span class="p">:</span>
4857
- <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4858
- <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a><span class="w"> </span><span class="nt">:includes_c_post_header</span><span class="p">:</span>
4850
+ <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="w"> </span><span class="nt">:mock_prefix</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mock_</span>
4851
+ <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="nt">:includes</span><span class="p">:</span>
4852
+ <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4853
+ <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="w"> </span><span class="nt">:includes_h_pre_orig_header</span><span class="p">:</span>
4854
+ <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4855
+ <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a><span class="w"> </span><span class="nt">:includes_h_post_orig_header</span><span class="p">:</span>
4856
+ <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4857
+ <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a><span class="w"> </span><span class="nt">:includes_c_pre_header</span><span class="p">:</span>
4858
+ <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4859
+ <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a><span class="w"> </span><span class="nt">:includes_c_post_header</span><span class="p">:</span>
4860
+ <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">...</span>
4859
4861
  </code></pre></div>
4862
+ <p>Each include setting puts its headers in a fake where CMock puts them in a mock.</p>
4863
+ <table>
4864
+ <thead>
4865
+ <tr>
4866
+ <th>Setting</th>
4867
+ <th>Where the <code>#include</code> goes</th>
4868
+ </tr>
4869
+ </thead>
4870
+ <tbody>
4871
+ <tr>
4872
+ <td><code>:includes</code>, <code>:includes_h_pre_orig_header</code></td>
4873
+ <td>The fake’s header, before the original header</td>
4874
+ </tr>
4875
+ <tr>
4876
+ <td><code>:includes_h_post_orig_header</code></td>
4877
+ <td>The fake’s header, after the original header</td>
4878
+ </tr>
4879
+ <tr>
4880
+ <td><code>:includes_c_pre_header</code></td>
4881
+ <td>The fake’s source, before the fake’s header</td>
4882
+ </tr>
4883
+ <tr>
4884
+ <td><code>:includes_c_post_header</code></td>
4885
+ <td>The fake’s source, after the fake’s header</td>
4886
+ </tr>
4887
+ </tbody>
4888
+ </table>
4889
+ <p>A <a href="../configuration/reference/cmock.html#unity_helper_path">Unity helper</a> is
4890
+ included in a fake’s header and source, as it is in a mock’s.</p>
4860
4891
  <h3 id="fakes-of-same-named-headers">Fakes of same-named headers</h3>
4861
4892
  <p>With <code>:cmock</code> ↳ <code>:mock_name_include_folder</code> enabled, Ceedling’s default, a fake
4862
4893
  included through a folder is named by that folder, as a CMock mock is. A fake
@@ -5777,7 +5777,7 @@ settings with other CLI arguments derived from plugin configuration. You must
5777
5777
  provide any settings that would have been provided by the Gcov plugin, either
5778
5778
  in the config file itself or via <code>:custom_args:</code>.</p>
5779
5779
  </div>
5780
- <p>A Gcovr config file replaces Ceedling's own automatically generated exclusion
5780
+ <p>A Gcovr config file replaces Ceedling’s own automatically generated exclusion
5781
5781
  patterns (see <a href="#results-filtering">Results filtering</a> below) entirely — it is
5782
5782
  the only way to override or remove one of those defaults, since the
5783
5783
  project-configuration <code>:report_exclude</code> option can only add further
@@ -5812,7 +5812,7 @@ Ceedling itself generates as part of a build all skew that number if left in.</p
5812
5812
  <code>test/</code>:</p>
5813
5813
  <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>.*(?:^|/)test/(?:.*/)?test_[^/]+(?:\.c)$
5814
5814
  </code></pre></div>
5815
- <p>A project's <code>:extension</code> ↳ <code>:source</code> can list more than one source
5815
+ <p>A project’s <code>:extension</code> ↳ <code>:source</code> can list more than one source
5816
5816
  extension; every configured extension is joined into this same
5817
5817
  alternation. Given <code>:extension</code> ↳ <code>:source</code> ⇒ <code>['.c', '.C']</code>:</p>
5818
5818
  <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>.*(?:^|/)test/(?:.*/)?test_[^/]+(?:\.c|\.C)$
@@ -5836,7 +5836,7 @@ the alternation. Given <code>:extension</code> ↳ <code>:source</code> ⇒ <cod
5836
5836
  <code>:build_root</code>: generated mocks, test runners, Partials output, and the
5837
5837
  vendored Unity/CMock/CException framework sources Ceedling copies in to
5838
5838
  build against. Unlike the two patterns above, this one always matches a
5839
- literal <code>.c</code> extension regardless of your project's own <code>:extension</code> ↳
5839
+ literal <code>.c</code> extension regardless of your project’s own <code>:extension</code> ↳
5840
5840
  <code>:source</code> setting, since every file it catches is one Ceedling itself
5841
5841
  writes in plain C.</p>
5842
5842
  <p>Given <code>:build_root</code> ⇒ <code>build/</code>:</p>
@@ -5849,7 +5849,7 @@ provide via <a href="#report_exclude"><code>:report_exclude</code></a> below —
5849
5849
  (and normally shouldn't) duplicate them yourself.</p>
5850
5850
  <div class="admonition warning">
5851
5851
  <p class="admonition-title">Not applied when using a Gcovr configuration file</p>
5852
- <p>These defaults are only generated when Ceedling builds <code>gcovr</code>'s command
5852
+ <p>These defaults are only generated when Ceedling builds <code>gcovr</code>’s command
5853
5853
  line directly. As covered in
5854
5854
  <a href="#gcovr-configuration-file">Gcovr configuration file</a> above, setting
5855
5855
  <code>:config_file</code> bypasses this entirely — none of the three patterns above
@@ -5865,7 +5865,7 @@ own three patterns ahead of anything you configure there. Neither
5865
5865
  either: <code>:report_include</code> narrows which files are considered at all, but an
5866
5866
  exclude pattern still wins over it for any file matching both; <code>:custom_args</code>
5867
5867
  lets you pass additional raw <code>gcovr</code> flags, but a raw <code>--filter</code>/<code>--exclude</code>
5868
- of your own is just as additive as <code>:report_exclude</code> — there's no <code>gcovr</code>
5868
+ of your own is just as additive as <code>:report_exclude</code> — there’s no <code>gcovr</code>
5869
5869
  flag that removes or replaces an exclusion already given, only ones that add
5870
5870
  more.</p>
5871
5871
  <p>The only way to actually remove or replace one of these defaults — for
@@ -5912,7 +5912,7 @@ Ceedling from overriding config file values with its CLI arguments.
5912
5912
  different working directory than your project root, and <code>:custom_args:</code> is
5913
5913
  still applied too — the one way to pass Gcovr flags of your own alongside a
5914
5914
  config file (see <code>:custom_args</code> below).</p>
5915
- <p>To preserve the plugin's base filtering behavior, include exclusion patterns
5915
+ <p>To preserve the plugin’s base filtering behavior, include exclusion patterns
5916
5916
  matching your project layout in the config file itself — see
5917
5917
  <a href="#gcovr-configuration-file">Gcovr configuration file</a> above.</p>
5918
5918
  <p><strong>Default:</strong> unset — Ceedling does not look for or autodetect a config file
@@ -5937,7 +5937,10 @@ percentage. Can be ORed with the exit status of other <code>:fail_under_*</code>
5937
5937
  (<code>gcovr --fail-under-decision</code>)</p>
5938
5938
  <p><code>gcovr</code> treats <code>--fail-under-decision</code> as a no-op without <code>--decisions</code> also
5939
5939
  present — setting this option implies <code>:decisions</code> (below) automatically, so
5940
- it's never silently non-functional.</p>
5940
+ it’s never silently non-functional.</p>
5941
+ <p>From <code>gcovr</code> 8.7, <code>--fail-under-decision</code> also checks condition coverage, which
5942
+ <code>:mcdc</code> produces. A run below the minimum for either reports each failure on its
5943
+ own line of the build failure summary.</p>
5941
5944
  <p><strong>Values:</strong> <code>1</code>–<code>100</code></p>
5942
5945
  <p><strong>Requires:</strong> <code>gcovr</code> 7.0 or higher</p>
5943
5946
  <hr />
@@ -5987,7 +5990,7 @@ is in addition to any other configured reports. (<code>gcovr --print-summary</co
5987
5990
  <p>Keep only source files that match this filter. Filters are regular
5988
5991
  expressions. (<code>gcovr --filter</code>)</p>
5989
5992
  <p>This narrows which files are considered at all, but does not override
5990
- <a href="#results-filtering">Results filtering</a>'s automatic exclusion defaults — a
5993
+ <a href="#results-filtering">Results filtering</a>’s automatic exclusion defaults — a
5991
5994
  file excluded by one of those three default patterns stays excluded even if
5992
5995
  it also matches <code>:report_include</code>. See
5993
5996
  <a href="#overriding-the-defaults">Overriding the defaults</a> if you need to remove one
@@ -6021,7 +6024,7 @@ files. Filters are regular expressions. (<code>gcovr --exclude-directories</code
6021
6024
  <hr />
6022
6025
  <h3 id="gcov_executable"><code>:gcov_executable</code></h3>
6023
6026
  <p>Use a particular <code>gcov</code> executable. This may be appropriate and necessary in
6024
- special circumstances — review Ceedling's options for modifying tools first.
6027
+ special circumstances — review Ceedling’s options for modifying tools first.
6025
6028
  (<code>gcovr --gcov-executable</code>)</p>
6026
6029
  <hr />
6027
6030
  <h3 id="exclude_unreachable_branches"><code>:exclude_unreachable_branches</code></h3>
@@ -6039,7 +6042,7 @@ the same source function, this is a real risk. This option controls how
6039
6042
  <code>gcovr</code> merges those repeated entries. See the
6040
6043
  <a href="https://gcovr.com/en/stable/guide/merging.html">gcovr merging docs</a> for all
6041
6044
  valid values. Ignored on <code>gcovr</code> versions below 6.0.</p>
6042
- <p><strong>Default:</strong> <code>merge-use-line-max</code> (<code>gcovr</code>'s own default, <code>strict</code>, raises an
6045
+ <p><strong>Default:</strong> <code>merge-use-line-max</code> (<code>gcovr</code>’s own default, <code>strict</code>, raises an
6043
6046
  exception for many Ceedling projects)</p>
6044
6047
  <hr />
6045
6048
  <h3 id="use_gcov_files"><code>:use_gcov_files</code></h3>
@@ -6067,12 +6070,12 @@ error. (<code>gcovr --gcov-ignore-parse-errors</code>)</p>
6067
6070
  <h3 id="custom_args"><code>:custom_args</code></h3>
6068
6071
  <p>Optional list of one or more raw command line arguments to pass to <code>gcovr</code>.
6069
6072
  Useful as an escape hatch for any <code>gcovr</code> flag Ceedling has no named option
6070
- for (e.g. limiting <code>gcovr</code>'s search root).</p>
6073
+ for (e.g. limiting <code>gcovr</code>’s search root).</p>
6071
6074
  <p>Unlike every other option above, these arguments are still applied even when
6072
6075
  <code>:config_file</code> is set — the one way to pass <code>gcovr</code> flags of your own
6073
6076
  alongside a config file.</p>
6074
6077
  <p>This does not, on its own, let you override
6075
- <a href="#results-filtering">Results filtering</a>'s automatic exclusion defaults when
6078
+ <a href="#results-filtering">Results filtering</a>’s automatic exclusion defaults when
6076
6079
  <code>:config_file</code> is unset — a raw <code>--filter</code>/<code>--exclude</code> passed here is just as
6077
6080
  additive as <a href="#report_exclude"><code>:report_exclude</code></a>; see
6078
6081
  <a href="#overriding-the-defaults">Overriding the defaults</a> for the one option that
@@ -4694,7 +4694,8 @@ are not exercised by any test. It takes one of three values:</p>
4694
4694
  appear in the final report with 0% coverage (since no test exercises
4695
4695
  them). This causes all source files to appear in any generated reporting.
4696
4696
  If a source file fails to compile, Ceedling logs guidance at the console,
4697
- and the build fails.</li>
4697
+ and the build fails. Each untested source’s object sits below <code>build/gcov/out/</code>
4698
+ at the source’s path from your project’s root.</li>
4698
4699
  </ul>
4699
4700
  <p><div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="nt">:plugins</span><span class="p">:</span>
4700
4701
  <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="nt">:enabled</span><span class="p">:</span>
@@ -4458,7 +4458,9 @@ expected Unity test results as described above. Log files are named for the
4458
4458
  respective test executables.</p>
4459
4459
  <p>Builds are differentiated by build context — <code>test</code>, <code>release</code>, or
4460
4460
  plugin-modified build (e.g. <code>gcov</code>). Log files are written to <code>&lt;build
4461
- root&gt;/artifacts/&lt;context&gt;/&lt;test file&gt;.raw.log</code>.</p>
4461
+ root&gt;/artifacts/&lt;context&gt;/&lt;test name&gt;.raw.log</code>. A <a href="../testing-guide/conventions.html#test-names-build-output">test’s name</a> is its path
4462
+ from your project’s root, so <code>test/unit/test_calc.c</code> logs to
4463
+ <code>build/artifacts/test/test/unit/test_calc.raw.log</code>.</p>
4462
4464
  <h2 id="setup">Setup</h2>
4463
4465
  <p>Enable the plugin in your Ceedling project:</p>
4464
4466
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">:plugins</span><span class="p">:</span>
@@ -4444,7 +4444,10 @@ run on a TeamCity build server but not in your local development environment.</p
4444
4444
  underlying Java language in which TeamCity is written,
4445
4445
  <code>package_or_namespace.ClassName.TestName</code>.</p>
4446
4446
  <p>This plugin maps Ceedling conventions to TeamCity test service messages as
4447
- <code>context.TestFilepath.TestCaseName</code>.</p>
4447
+ <code>context.TestFilepath.TestCaseName</code>. Each test suite is named by its test file’s
4448
+ path from your project’s root, without its file extension (e.g.
4449
+ <code>test/TestUsartModel</code>), so same-named test files in different directories are
4450
+ distinct suites.</p>
4448
4451
  <ul>
4449
4452
  <li><code>context</code> Your build's context defaults to <code>test</code>. Certain other test build
4450
4453
  plugins (e.g. GCov) provide a different context (<code>gcov</code>) for test builds,
@@ -4455,7 +4458,7 @@ underlying Java language in which TeamCity is written,
4455
4458
  </ul>
4456
4459
  <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="w"> </span>&gt;<span class="w"> </span>ceedling<span class="w"> </span>test:UsartModel
4457
4460
  </code></pre></div>
4458
- <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>##teamcity[testSuiteStarted name='TestUsartModel' flowId='15']
4461
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>##teamcity[testSuiteStarted name='test/TestUsartModel' flowId='15']
4459
4462
  <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>##teamcity[testStarted name='test.test/TestUsartModel.testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting' flowId='15']
4460
4463
  <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>##teamcity[testFinished name='test.test/TestUsartModel.testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting' duration='81' flowId='15']
4461
4464
  <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a>##teamcity[testStarted name='test.test/TestUsartModel.testShouldReturnErrorMessageUponInvalidTemperatureValue' flowId='15']
@@ -4464,7 +4467,7 @@ underlying Java language in which TeamCity is written,
4464
4467
  <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a>##teamcity[testFailed name='test.test/TestUsartModel.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately' message='Function TemperatureFilter_GetTemperatureInCelcius() called more times than expected.' details='File: test/TestUsartModel.c Line: 25' flowId='15']
4465
4468
  <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a>##teamcity[testFinished name='test.test/TestUsartModel.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately' duration='81' flowId='15']
4466
4469
  <a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a>##teamcity[testIgnored name='test.test/TestUsartModel.testShouldReturnWakeupMessage' flowId='15']
4467
- <a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a>##teamcity[testSuiteFinished name='TestUsartModel' flowId='15']
4470
+ <a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a>##teamcity[testSuiteFinished name='test/TestUsartModel' flowId='15']
4468
4471
  </code></pre></div>
4469
4472
  <p><br/><br/></p>
4470
4473
 
@@ -5103,10 +5103,10 @@ as much of the file’s path as needed to tell same-named test files apart:</p>
5103
5103
  </ul>
5104
5104
  <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>☠️ ERROR: Test executable `test_buffer.out` was stopped by a sanitizer finding.
5105
5105
  <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>&gt; AddressSanitizer heap-buffer-overflow at test/test_buffer.c:21
5106
- <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a>&gt; Boom log: build/artifacts/sanitize/sanitize/test_buffer.log
5106
+ <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a>&gt; Boom log: build/artifacts/sanitize/sanitize/test/test_buffer.log
5107
5107
  </code></pre></div>
5108
5108
  <p>The test’s failure message carries the same on one line:</p>
5109
- <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>AddressSanitizer heap-buffer-overflow at test/test_buffer.c:21 (Boom log: build/artifacts/sanitize/sanitize/test_buffer.log)
5109
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>AddressSanitizer heap-buffer-overflow at test/test_buffer.c:21 (Boom log: build/artifacts/sanitize/sanitize/test/test_buffer.log)
5110
5110
  </code></pre></div>
5111
5111
  <ul>
5112
5112
  <li>
@@ -5128,12 +5128,12 @@ counts the findings and names the reports written:</p>
5128
5128
  <p>A halted test, with <code>:reports</code> set to <code>[:text, :json, :sarif]</code>:</p>
5129
5129
  <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>☠️ ERROR: Test executable `test_nosanitize_heap_buffer_overflow.out` was stopped by a sanitizer finding.
5130
5130
  <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>&gt; AddressSanitizer heap-buffer-overflow at test/test_nosanitize_heap_buffer_overflow.c:29
5131
- <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a>&gt; Boom log: build/artifacts/sanitize/sanitize/test_nosanitize_heap_buffer_overflow.log
5131
+ <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a>&gt; Boom log: build/artifacts/sanitize/sanitize/test/test_nosanitize_heap_buffer_overflow.log
5132
5132
  <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a>
5133
5133
  <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a>SANITIZE: FAILED TEST SUMMARY
5134
5134
  <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a>[test/test_nosanitize_heap_buffer_overflow.c]
5135
5135
  <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a> Test: test_writes_past_its_buffer
5136
- <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a> At line (27): "AddressSanitizer heap-buffer-overflow at test/test_nosanitize_heap_buffer_overflow.c:29 (Boom log: build/artifacts/sanitize/sanitize/test_nosanitize_heap_buffer_overflow.log)"
5136
+ <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a> At line (27): "AddressSanitizer heap-buffer-overflow at test/test_nosanitize_heap_buffer_overflow.c:29 (Boom log: build/artifacts/sanitize/sanitize/test/test_nosanitize_heap_buffer_overflow.log)"
5137
5137
  <a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a>
5138
5138
  <a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a>SANITIZE: ❌ OVERALL TEST SUMMARY
5139
5139
  <a id="__codelineno-16-11" name="__codelineno-16-11" href="#__codelineno-16-11"></a>TESTED: 2
@@ -5147,7 +5147,7 @@ counts the findings and names the reports written:</p>
5147
5147
  </code></pre></div>
5148
5148
  <p>A leak. Every test passes, and the leak alone fails the build. The test’s
5149
5149
  own output section shows the sanitizer’s report:</p>
5150
- <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>🪲 ERROR: test_nosanitize_leak: LeakSanitizer memory-leak at test/test_nosanitize_leak.c:32 ➡️ see build/artifacts/sanitize/sanitize/test_nosanitize_leak.log
5150
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>🪲 ERROR: test/test_nosanitize_leak: LeakSanitizer memory-leak at test/test_nosanitize_leak.c:32 ➡️ see build/artifacts/sanitize/sanitize/test/test_nosanitize_leak.log
5151
5151
  <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>
5152
5152
  <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a>SANITIZE: TEST OUTPUT
5153
5153
  <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a>[test/test_nosanitize_leak.c]
@@ -5179,7 +5179,8 @@ named by its own finding.</p>
5179
5179
  The leak sanitizer cannot run under a debugger, and a sanitizer’s own report
5180
5180
  already includes the stack.</p>
5181
5181
  <h2 id="artifacts">Artifacts</h2>
5182
- <p>Each test with findings has a log of its sanitizer reports:</p>
5182
+ <p>Each test with findings has a log of its sanitizer reports, placed by the
5183
+ <a href="../testing-guide/conventions.html#test-names-build-output">test’s name</a>, its path from your project’s root:</p>
5183
5184
  <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>build/artifacts/sanitize/sanitize/&lt;test_name&gt;.log
5184
5185
  </code></pre></div>
5185
5186
  <p>The configured reports are written beside the logs:</p>
@@ -4729,7 +4729,7 @@ building and then running test executables under Valgrind’s Memcheck tool.</p>
4729
4729
  <ul>
4730
4730
  <li><strong>Whole test suite</strong>: By running <code>ceedling valgrind:all</code>, all test
4731
4731
  executables are built and then each is run under Valgrind. A separate log
4732
- file is produced for each test executable in <code>build/artifacts/valgrind/</code>.</li>
4732
+ file is produced for each test executable beneath <code>build/artifacts/valgrind/</code>.</li>
4733
4733
  <li><strong>Single test file</strong>: By running <code>ceedling valgrind:&lt;filename&gt;</code>, a single
4734
4734
  test executable is built and run under Valgrind, producing one log file.</li>
4735
4735
  </ul>
@@ -4861,8 +4861,9 @@ as much of the file’s path as needed to tell same-named test files apart:</p>
4861
4861
  beside it:</p>
4862
4862
  <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>build/artifacts/valgrind/&lt;test_name&gt;.xml
4863
4863
  </code></pre></div>
4864
- <p>For example, running <code>ceedling valgrind:test_my_module.c</code> produces:</p>
4865
- <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>build/artifacts/valgrind/test_my_module.log
4864
+ <p>A <a href="../testing-guide/conventions.html#test-names-build-output">test’s name</a> is its path from your project’s root. For example,
4865
+ running <code>ceedling valgrind:test/test_my_module.c</code> produces:</p>
4866
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>build/artifacts/valgrind/test/test_my_module.log
4866
4867
  </code></pre></div>
4867
4868
  <p>These log files contain the full Valgrind Memcheck output, including any
4868
4869
  detected memory errors, leak summaries, and (with <code>--track-origins=yes</code>)
@@ -4883,7 +4884,7 @@ the origin of uninitialized values.</p>
4883
4884
  report. It replaces Ceedling’s generic crash notice:</p>
4884
4885
  <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>☠️ ERROR: Test executable `test_nosanitize_crash_sigsegv.out` terminated with Valgrind memory errors.
4885
4886
  <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>&gt; Invalid read of size 4 at test_nosanitize_crash_sigsegv.c:32
4886
- <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a>&gt; Boom log: build/artifacts/valgrind/test_nosanitize_crash_sigsegv.log
4887
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a>&gt; Boom log: build/artifacts/valgrind/test/test_nosanitize_crash_sigsegv.log
4887
4888
  <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a>
4888
4889
  <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a>VALGRIND: FAILED TEST SUMMARY
4889
4890
  <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a>[test/test_nosanitize_crash_sigsegv.c]
@@ -4905,15 +4906,15 @@ report. It replaces Ceedling’s generic crash notice:</p>
4905
4906
  <p>With <a href="#fail_build"><code>:fail_build:</code></a> set to <code>false</code>, the same run omits the last
4906
4907
  line. Only the test failure fails the build.</p>
4907
4908
  <p>A test that completes despite memory errors logs one line as it runs:</p>
4908
- <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>🪲 ERROR: Valgrind detected 2 memory errors in test_example ➡️ see build/artifacts/valgrind/test_example.log
4909
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>🪲 ERROR: Valgrind detected 2 memory errors in test/test_example ➡️ see build/artifacts/valgrind/test/test_example.log
4909
4910
  </code></pre></div>
4910
4911
  <p>A test whose report is missing logs a warning, since its memory error status
4911
4912
  is unknown:</p>
4912
- <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>⚠️ WARNING: Valgrind wrote no report for test_example at build/artifacts/valgrind/test_example.log. Memory error status is unknown.
4913
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>⚠️ WARNING: Valgrind wrote no report for test/test_example at build/artifacts/valgrind/test/test_example.log. Memory error status is unknown.
4913
4914
  </code></pre></div>
4914
4915
  <h2 id="interpreting-results">Interpreting results</h2>
4915
4916
  <p>To review the log for a specific test:</p>
4916
- <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>cat<span class="w"> </span>build/artifacts/valgrind/test_my_module.log
4917
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>cat<span class="w"> </span>build/artifacts/valgrind/test/test_my_module.log
4917
4918
  </code></pre></div>
4918
4919
  <p>Common Valgrind findings include:</p>
4919
4920
  <table>
@@ -4468,6 +4468,9 @@ update our project.</p>
4468
4468
  <p>Ceedling will automatically look for your project yaml file and do its best to determine what needs
4469
4469
  to be updated. If installed locally, this will mean copying the latest copy of Unity, CMock, and
4470
4470
  Ceedling. It will also involve copying documentation, if you had that installed.</p>
4471
+ <p><code>upgrade</code> copies the Ceedling you run, or the installation the <code>WHICH_CEEDLING</code> environment
4472
+ variable names. As of 1.2.2, it never copies from your project’s own vendored Ceedling, so
4473
+ <code>ceedling upgrade .</code> from inside the project works too.</p>
4471
4474
  <h2 id="step-3-solving-problems">Step 3: Solving Problems</h2>
4472
4475
  <p>We wish every project would update seamlessly... unfortunately there is a lot of customization that
4473
4476
  goes into each project, and Ceedling often isn't aware of all of these. To make matter worse, Ceedling
@@ -5102,8 +5102,9 @@ use <code>ceedling example</code>.</p>
5102
5102
  and/or a starter project configuration file.</p>
5103
5103
  <hr />
5104
5104
  <h3 id="ceedling-upgrade"><a href="../getting-started/command-line.html#ceedling-upgrade-path"><code>ceedling upgrade</code></a></h3>
5105
- <p>Upgrade vendored installation of Ceedling for an existing project
5106
- along with any locally installed documentation bundles.</p>
5105
+ <p>Upgrade vendored installation of Ceedling for an existing project, from
5106
+ the version of Ceedling you run, along with any documentation <code>--docs</code>
5107
+ exported.</p>
5107
5108
  <hr />
5108
5109
  <h3 id="ceedling-version"><a href="../getting-started/command-line.html#ceedling-version"><code>ceedling version</code></a></h3>
5109
5110
  <p>Displays version information for Ceedling and its components. Version
@@ -5121,6 +5122,12 @@ build identifier and Ceedling’s path of origin.</p>
5121
5122
  <a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> Unity =&gt; #.#.#
5122
5123
  <a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> CException =&gt; #.#.#
5123
5124
  </code></pre></div>
5125
+ <div class="admonition note">
5126
+ <p class="admonition-title">Note</p>
5127
+ <p>For a project configuration that selects another Ceedling installation
5128
+ different from the installation that launched Ceedling, <code>version</code> reports
5129
+ the launcher and the selected application versions separately.</p>
5130
+ </div>
5124
5131
  <p>If the short SHA information is unavailable such as in local
5125
5132
  development, the SHA is omitted. The source for this string is
5126
5133
  generated and captured in the Ruby Gem at the time of Ceedling’s
Binary file
@@ -51,7 +51,7 @@ DEFAULT_BULLSEYE_LINKER_TOOL = {
51
51
  }
52
52
 
53
53
  DEFAULT_BULLSEYE_FIXTURE_TOOL = {
54
- :executable => '${1}'.freeze,
54
+ :executable => '"${1}"'.freeze, # Test executable, quoted as a path
55
55
  :name => 'default_bullseye_fixture'.freeze,
56
56
  :optional => false.freeze,
57
57
  :arguments => [].freeze
@@ -41,7 +41,7 @@ DEFAULT_GCOV_LINKER_TOOL = {
41
41
  }
42
42
 
43
43
  DEFAULT_GCOV_FIXTURE_TOOL = {
44
- :executable => '${1}'.freeze,
44
+ :executable => '"${1}"'.freeze, # Test executable, quoted as a path
45
45
  :name => 'default_gcov_fixture'.freeze,
46
46
  :optional => false.freeze,
47
47
  :arguments => [].freeze
@@ -1334,6 +1334,17 @@
1334
1334
  </span>
1335
1335
  </a>
1336
1336
 
1337
+ </li>
1338
+
1339
+ <li class="md-nav__item">
1340
+ <a href="#test-names-build-output" class="md-nav__link">
1341
+ <span class="md-ellipsis">
1342
+
1343
+ Test names &amp; build output
1344
+
1345
+ </span>
1346
+ </a>
1347
+
1337
1348
  </li>
1338
1349
 
1339
1350
  <li class="md-nav__item">
@@ -4705,6 +4716,17 @@
4705
4716
  </span>
4706
4717
  </a>
4707
4718
 
4719
+ </li>
4720
+
4721
+ <li class="md-nav__item">
4722
+ <a href="#test-names-build-output" class="md-nav__link">
4723
+ <span class="md-ellipsis">
4724
+
4725
+ Test names &amp; build output
4726
+
4727
+ </span>
4728
+ </a>
4729
+
4708
4730
  </li>
4709
4731
 
4710
4732
  <li class="md-nav__item">
@@ -5240,6 +5262,37 @@ of its own. Whether yours does depends on your toolchain.</p>
5240
5262
  <p>Before 1.2.0, Ceedling wrote no manifest. With a toolchain that embeds none,
5241
5263
  test files with these words in their names could not be run on Windows without
5242
5264
  administrator privileges.</p>
5265
+ <h3 id="test-names-build-output">Test names &amp; build output</h3>
5266
+ <p>Ceedling names each test by its path from your project’s root, without its
5267
+ file extension. <code>test/unit/test_calc.c</code> is named <code>test/unit/test_calc</code>. Every
5268
+ test gets its own build output, even when test files share a filename.</p>
5269
+ <p>The name places a test’s output beneath each build directory:</p>
5270
+ <ul>
5271
+ <li>Executable: <code>build/test/out/test/unit/test_calc/</code></li>
5272
+ <li>Results: <code>build/test/results/test/unit/test_calc.pass</code></li>
5273
+ <li>Logs from plugins and backtraces, such as
5274
+ <code>build/artifacts/valgrind/test/unit/test_calc.log</code> or
5275
+ <code>build/logs/test/test/unit/test_calc/&lt;test case&gt;.gdb.log</code></li>
5276
+ </ul>
5277
+ <p>Within a test’s directory, each object sits at its source’s own path from your
5278
+ project’s root, so same-named sources never share a path. <code>src/drivers/uart.c</code>
5279
+ compiles to <code>build/test/out/test/unit/test_calc/src/drivers/uart.o</code>. Preprocessed
5280
+ files and dependency files follow the same layout, and a release build places its
5281
+ objects the same way below <code>build/release/out/</code>. Mocks sit below their test’s own
5282
+ mock directory, and runners and Unity, CMock, and CException objects sit directly in
5283
+ the test’s directory.</p>
5284
+ <p>A test or source outside your project keeps its whole path. Each <code>..</code> becomes
5285
+ <code>_up_</code>, so <code>../shared/test/test_io.c</code> is named <code>_up_/shared/test/test_io</code>. A path
5286
+ with no relative form, such as one on another Windows drive, sits beneath <code>_abs_</code>,
5287
+ and a file of the running Ceedling installation outside your project, such as a
5288
+ plugin’s source, beneath <code>_ceedling_</code>. None of these reaches outside the build
5289
+ directory. A directory of your project that is itself named like one of these
5290
+ gains a leading <code>_</code> (e.g. <code>__up_/</code>), so it never shares a name with a path outside
5291
+ your project.</p>
5292
+ <p>Two tests share a name only if their paths differ in extension alone (e.g.
5293
+ <code>test_a.c</code> and <code>test_a.cpp</code>). A build that includes either test stops with an
5294
+ error naming both files. Two sources that would build to one file stop a build the
5295
+ same way.</p>
5243
5296
  <h3 id="source-mock-files-to-compile-and-link">Source &amp; mock files to compile and link</h3>
5244
5297
  <p>Ceedling knows what files to compile and link into each individual
5245
5298
  test executable by way of the <code>#include</code> list contained in each