ceedling 1.2.0 → 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 (383) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/README.md +57 -58
  4. data/Rakefile +5 -3
  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 +35 -1
  10. data/bin/ceedling +13 -3
  11. data/bin/cli.rb +25 -6
  12. data/bin/cli_handler.rb +119 -73
  13. data/bin/cli_helper.rb +56 -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 +84 -3
  23. data/docs/KnownIssues.md +90 -4
  24. data/docs/ReleaseNotes.md +13 -0
  25. data/docs/overrides/main.html +11 -8
  26. data/lib/ceedling/build_log_writer.rb +33 -0
  27. data/lib/ceedling/config/build_root_policy.rb +70 -0
  28. data/lib/ceedling/config/configurator.rb +19 -18
  29. data/lib/ceedling/config/configurator_builder.rb +58 -28
  30. data/lib/ceedling/config/configurator_paths_validator.rb +179 -0
  31. data/lib/ceedling/config/configurator_plugins.rb +1 -1
  32. data/lib/ceedling/config/configurator_setup.rb +39 -41
  33. data/lib/ceedling/config/configurator_validator.rb +1 -110
  34. data/lib/ceedling/defaults.rb +4 -4
  35. data/lib/ceedling/dependencies/README.md +18 -16
  36. data/lib/ceedling/dependencies/dependency_cache_store.rb +20 -3
  37. data/lib/ceedling/dependencies/dependency_hasher.rb +35 -1
  38. data/lib/ceedling/filename_extension.rb +7 -1
  39. data/lib/ceedling/filesystem/FILE_TREE.md +253 -0
  40. data/lib/ceedling/filesystem/PATH_HANDLING.md +304 -0
  41. data/lib/ceedling/filesystem/README.md +41 -0
  42. data/lib/ceedling/filesystem/build_subpath.rb +102 -0
  43. data/lib/ceedling/filesystem/destination_collision.rb +25 -0
  44. data/lib/ceedling/{file_finder.rb → filesystem/file_finder.rb} +159 -104
  45. data/lib/ceedling/{file_finder_helper.rb → filesystem/file_finder_helper.rb} +36 -31
  46. data/lib/ceedling/filesystem/file_path_collection_utils.rb +183 -0
  47. data/lib/ceedling/{file_path_utils.rb → filesystem/file_path_utils.rb} +108 -97
  48. data/lib/ceedling/{file_system_wrapper.rb → filesystem/file_system_wrapper.rb} +6 -5
  49. data/lib/ceedling/filesystem/file_tree.rb +241 -0
  50. data/lib/ceedling/{file_wrapper.rb → filesystem/file_wrapper.rb} +65 -28
  51. data/lib/ceedling/filesystem/path_exclusions.rb +30 -0
  52. data/lib/ceedling/{path_matcher.rb → filesystem/path_matcher.rb} +27 -23
  53. data/lib/ceedling/{path_mirror.rb → filesystem/path_mirror.rb} +19 -18
  54. data/lib/ceedling/filesystem/path_spellings.rb +55 -0
  55. data/lib/ceedling/filesystem/project_paths.rb +184 -0
  56. data/lib/ceedling/filesystem/working_dir.rb +40 -0
  57. data/lib/ceedling/generators/generator.rb +5 -6
  58. data/lib/ceedling/generators/generator_partials.rb +1 -1
  59. data/lib/ceedling/generators/generator_test_results_backtrace.rb +7 -7
  60. data/lib/ceedling/handoff.rb +121 -0
  61. data/lib/ceedling/includes/include_factory.rb +3 -3
  62. data/lib/ceedling/includes/include_pathinator.rb +67 -10
  63. data/lib/ceedling/includes/includes.rb +1 -1
  64. data/lib/ceedling/installation.rb +92 -0
  65. data/lib/ceedling/library_resolver.rb +99 -0
  66. data/lib/ceedling/objects.yml +23 -2
  67. data/lib/ceedling/partials/partializer.rb +4 -4
  68. data/lib/ceedling/partials/partializer_config.rb +3 -1
  69. data/lib/ceedling/plugins/report_log_writer_plugin.rb +3 -5
  70. data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +1 -1
  71. data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +1 -1
  72. data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +1 -1
  73. data/lib/ceedling/rake_app/rakefile_component_resolver.rb +10 -17
  74. data/lib/ceedling/rake_app/test_task_name.rb +29 -0
  75. data/lib/ceedling/rakefile.rb +16 -1
  76. data/lib/ceedling/rakefiles/base/tasks_base.rake +1 -1
  77. data/lib/ceedling/rakefiles/release/rules_release.rake +4 -7
  78. data/lib/ceedling/rakefiles/tests/rules_tests.rake +3 -20
  79. data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +4 -30
  80. data/lib/ceedling/release_invoker/release_build_executor.rb +33 -44
  81. data/lib/ceedling/release_invoker/release_build_planner.rb +14 -6
  82. data/lib/ceedling/reportinator.rb +3 -4
  83. data/lib/ceedling/setupinator.rb +95 -87
  84. data/lib/ceedling/test_context_extractor.rb +5 -1
  85. data/lib/ceedling/test_invoker/PIPELINE.md +9 -7
  86. data/lib/ceedling/test_invoker/mock_locator.rb +60 -2
  87. data/lib/ceedling/test_invoker/partials_manager.rb +12 -0
  88. data/lib/ceedling/test_invoker/standin_headerinator.rb +22 -13
  89. data/lib/ceedling/test_invoker/test_build_executor.rb +42 -41
  90. data/lib/ceedling/test_invoker/test_build_planner.rb +37 -18
  91. data/lib/ceedling/test_invoker/test_build_setup.rb +17 -12
  92. data/lib/ceedling/test_invoker/test_build_validations.rb +16 -31
  93. data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +1 -1
  94. data/lib/ceedling/test_invoker/test_invoker.rb +6 -1
  95. data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +1 -1
  96. data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +40 -20
  97. data/lib/ceedling/tool_executor.rb +9 -3
  98. data/lib/ceedling/yaml_wrapper.rb +3 -2
  99. data/lib/version.rb +1 -1
  100. data/plugins/bullseye/bullseye.rake +6 -9
  101. data/plugins/bullseye/config/defaults_bullseye.rb +1 -1
  102. data/plugins/bullseye/lib/bullseye.rb +9 -7
  103. data/plugins/cppcheck/config/defaults_cppcheck.rb +1 -1
  104. data/plugins/dependencies/config/defaults.yml +6 -6
  105. data/plugins/dependencies/dependencies.rake +4 -1
  106. data/plugins/dependencies/lib/dependencies.rb +18 -8
  107. data/plugins/dependencies/lib/dependency_spec.rb +17 -5
  108. data/plugins/fff/lib/fff.rb +45 -39
  109. data/plugins/fff/spec/fff_cmock_wrapper_spec.rb +128 -0
  110. data/plugins/gcov/config/defaults_gcov.rb +1 -1
  111. data/plugins/gcov/gcov.rake +6 -9
  112. data/plugins/gcov/lib/console_reportinator.rb +4 -18
  113. data/plugins/gcov/lib/gcov.rb +9 -2
  114. data/plugins/gcov/lib/gcovr_reportinator.rb +8 -40
  115. data/plugins/gcov/lib/gcovr_thresholds.rb +74 -0
  116. data/plugins/gcov/lib/reportgenerator_reportinator.rb +1 -1
  117. data/plugins/module_generator/lib/module_generator.rb +3 -3
  118. data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +53 -80
  119. data/plugins/sanitize/lib/sanitize_records.rb +3 -6
  120. data/plugins/sanitize/sanitize.rake +6 -6
  121. data/plugins/valgrind/lib/valgrind.rb +14 -7
  122. data/plugins/valgrind/valgrind.rake +6 -6
  123. data/site-local/404.html +6 -20
  124. data/site-local/assets/javascripts/{bundle.d7400e89.min.js → bundle.c21346df.min.js} +3 -3
  125. data/site-local/assets/javascripts/{bundle.d7400e89.min.js.map → bundle.c21346df.min.js.map} +2 -2
  126. data/site-local/assets/javascripts/workers/{search.2c215733.min.js → search.a7633da7.min.js} +2 -2
  127. data/site-local/assets/javascripts/workers/{search.2c215733.min.js.map → search.a7633da7.min.js.map} +1 -1
  128. data/site-local/assets/stylesheets/main.57a0d79d.min.css +6 -0
  129. data/site-local/assets/stylesheets/main.57a0d79d.min.css.map +1 -0
  130. data/site-local/assets/stylesheets/palette.fb2fffe2.min.css +4 -0
  131. data/site-local/assets/stylesheets/palette.fb2fffe2.min.css.map +1 -0
  132. data/site-local/configuration/environment-vars.html +6 -20
  133. data/site-local/configuration/global-collections.html +6 -20
  134. data/site-local/configuration/index.html +6 -20
  135. data/site-local/configuration/loading.html +6 -20
  136. data/site-local/configuration/mixins.html +10 -24
  137. data/site-local/configuration/parallel-builds.html +6 -20
  138. data/site-local/configuration/project-file.html +8 -22
  139. data/site-local/configuration/reference/cexception.html +6 -20
  140. data/site-local/configuration/reference/cmock.html +8 -21
  141. data/site-local/configuration/reference/defines.html +16 -30
  142. data/site-local/configuration/reference/environment.html +10 -24
  143. data/site-local/configuration/reference/extension.html +6 -20
  144. data/site-local/configuration/reference/files.html +22 -30
  145. data/site-local/configuration/reference/flags.html +13 -27
  146. data/site-local/configuration/reference/index.html +6 -20
  147. data/site-local/configuration/reference/libraries.html +27 -23
  148. data/site-local/configuration/reference/mixins.html +6 -20
  149. data/site-local/configuration/reference/partials.html +6 -20
  150. data/site-local/configuration/reference/paths.html +38 -29
  151. data/site-local/configuration/reference/plugins.html +6 -20
  152. data/site-local/configuration/reference/project.html +32 -36
  153. data/site-local/configuration/reference/release-build.html +8 -20
  154. data/site-local/configuration/reference/test-build.html +6 -20
  155. data/site-local/configuration/reference/test-runner.html +6 -20
  156. data/site-local/configuration/reference/tools.html +27 -32
  157. data/site-local/configuration/reference/unity.html +6 -20
  158. data/site-local/configuration/which-ceedling.html +383 -37
  159. data/site-local/development/index.html +6 -20
  160. data/site-local/development/plugins/configuration.html +6 -20
  161. data/site-local/development/plugins/index.html +6 -20
  162. data/site-local/development/plugins/plugin-subclass.html +54 -68
  163. data/site-local/development/plugins/rake-tasks.html +8 -22
  164. data/site-local/development/releases.html +84 -29
  165. data/site-local/development/workflow.html +62 -71
  166. data/site-local/getting-started/builds.html +8 -20
  167. data/site-local/getting-started/command-line.html +62 -24
  168. data/site-local/getting-started/example-projects/cipher-quest.html +6 -20
  169. data/site-local/getting-started/example-projects/index.html +6 -20
  170. data/site-local/getting-started/example-projects/temp-sensor.html +6 -20
  171. data/site-local/getting-started/example-projects/wondrous-forest.html +6 -20
  172. data/site-local/getting-started/index.html +6 -20
  173. data/site-local/getting-started/installation.html +6 -20
  174. data/site-local/getting-started/quick-start.html +6 -20
  175. data/site-local/help.html +6 -20
  176. data/site-local/index.html +11 -24
  177. data/site-local/overview/build-system.html +6 -20
  178. data/site-local/overview/index.html +6 -20
  179. data/site-local/overview/test-environments.html +6 -20
  180. data/site-local/overview/tools-and-frameworks.html +6 -20
  181. data/site-local/plugins/beep.html +6 -20
  182. data/site-local/plugins/bullseye/index.html +13 -24
  183. data/site-local/plugins/bullseye/licensing.html +14 -28
  184. data/site-local/plugins/command-hooks.html +8 -22
  185. data/site-local/plugins/compile-commands-json-db.html +6 -20
  186. data/site-local/plugins/cppcheck.html +8 -22
  187. data/site-local/plugins/dependencies.html +16 -27
  188. data/site-local/plugins/fff.html +49 -32
  189. data/site-local/plugins/gcov/examples.html +7 -21
  190. data/site-local/plugins/gcov/gcovr.html +22 -33
  191. data/site-local/plugins/gcov/index.html +6 -20
  192. data/site-local/plugins/gcov/overview.html +9 -20
  193. data/site-local/plugins/gcov/reportgenerator.html +9 -23
  194. data/site-local/plugins/gcov/reporting.html +6 -20
  195. data/site-local/plugins/gcov/setup.html +8 -21
  196. data/site-local/plugins/gcov/tool-versions.html +6 -20
  197. data/site-local/plugins/gcov/troubleshooting.html +10 -24
  198. data/site-local/plugins/index.html +6 -20
  199. data/site-local/plugins/module-generator.html +21 -35
  200. data/site-local/plugins/report-build-warnings-log.html +53 -67
  201. data/site-local/plugins/report-tests-gtestlike-stdout.html +6 -20
  202. data/site-local/plugins/report-tests-ide-stdout.html +43 -57
  203. data/site-local/plugins/report-tests-log-factory.html +50 -64
  204. data/site-local/plugins/report-tests-pretty-stdout.html +7 -21
  205. data/site-local/plugins/report-tests-raw-output-log.html +9 -21
  206. data/site-local/plugins/report-tests-teamcity-stdout.html +20 -31
  207. data/site-local/plugins/sanitize.html +56 -65
  208. data/site-local/plugins/valgrind.html +49 -58
  209. data/site-local/project/index.html +6 -20
  210. data/site-local/project/release-history.html +6 -20
  211. data/site-local/project/sbom.html +6 -20
  212. data/site-local/project/upgrade.html +9 -20
  213. data/site-local/reference/build-directives.html +6 -20
  214. data/site-local/reference/command-line.html +15 -22
  215. data/site-local/reference/environment-vars.html +6 -20
  216. data/site-local/reference/gcov-plugin.html +6 -20
  217. data/site-local/reference/global-collections.html +6 -20
  218. data/site-local/reference/index.html +6 -20
  219. data/site-local/reference/partials-macros.html +6 -20
  220. data/site-local/reference/project-configuration.html +6 -20
  221. data/site-local/sitemap.xml.gz +0 -0
  222. data/site-local/snapshot/examples/cipher_quest/index.html +16 -30
  223. data/site-local/snapshot/examples/temp_sensor/index.html +8 -22
  224. data/site-local/snapshot/examples/wondrous_forest/index.html +6 -20
  225. data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +1 -1
  226. data/site-local/snapshot/plugins/gcov/config/defaults_gcov.rb +1 -1
  227. data/site-local/testing-guide/build-directives.html +14 -28
  228. data/site-local/testing-guide/conventions.html +66 -27
  229. data/site-local/testing-guide/frameworks.html +11 -25
  230. data/site-local/testing-guide/index.html +6 -20
  231. data/site-local/testing-guide/partials/configuration.html +8 -22
  232. data/site-local/testing-guide/partials/conventions.html +8 -22
  233. data/site-local/testing-guide/partials/directives.html +16 -30
  234. data/site-local/testing-guide/partials/example.html +14 -28
  235. data/site-local/testing-guide/partials/index.html +6 -20
  236. data/site-local/testing-guide/partials/overview.html +6 -20
  237. data/site-local/testing-guide/partials/variables.html +11 -25
  238. data/site-local/testing-guide/test-cases.html +13 -27
  239. data/site-local/testing-guide/test-sample.html +12 -26
  240. data/site-local/testing-guide/test-suite-anatomy.html +6 -20
  241. data/spec/integration/actionator_file_operations_spec.rb +91 -1
  242. data/spec/integration/compile_commands_json_db_spec.rb +1 -1
  243. data/spec/integration/configurator_pipeline_spec.rb +10 -0
  244. data/spec/integration/configurator_validation_spec.rb +1 -1
  245. data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +26 -0
  246. data/spec/integration/dependencies/dependency_tracker_core_spec.rb +62 -0
  247. data/spec/integration/launcher_handoff_spec.rb +297 -0
  248. data/spec/integration/mixin_loading_spec.rb +1 -1
  249. data/spec/integration/module_generator_spec.rb +3 -3
  250. data/spec/integration/nested_test_artifacts_spec.rb +99 -0
  251. data/spec/integration/partials_module_resolution_spec.rb +7 -4
  252. data/spec/integration/path_intake_scenarios_spec.rb +101 -0
  253. data/spec/integration/path_scenarios_spec.rb +322 -0
  254. data/spec/integration/quote_include_isolator_spec.rb +1 -1
  255. data/spec/integration/rake_task_registry_plugins_spec.rb +95 -0
  256. data/spec/integration/report_build_warnings_log_spec.rb +1 -1
  257. data/spec/integration/report_tests_log_factory_spec.rb +1 -1
  258. data/spec/integration/test_executable_manifest_spec.rb +1 -1
  259. data/spec/integration/test_includes_extractinator_spec.rb +2 -1
  260. data/spec/integration/test_naming_spec.rb +198 -0
  261. data/spec/integration/test_source_file_checks_spec.rb +166 -0
  262. data/spec/integration/tool_validator_spec.rb +1 -1
  263. data/spec/integration/upgrade_docs_spec.rb +84 -0
  264. data/spec/integration/vendor_copy_transient_io_retry_spec.rb +192 -75
  265. data/spec/support/file_tree_helper.rb +88 -0
  266. data/spec/support/integration/configurator_integration_helper.rb +10 -7
  267. data/spec/support/integration/dependency_tracker_integration_helper.rb +1 -1
  268. data/spec/support/integration/partials_generation_integration_helper.rb +2 -2
  269. data/spec/support/integration/path_scenario_harness.rb +173 -0
  270. data/spec/support/integration/spec_integration_helper.rb +1 -1
  271. data/spec/support/integration/test_includes_harness.rb +13 -2
  272. data/spec/support/spec_helper.rb +2 -0
  273. data/spec/support/system/spec_system_helper.rb +7 -6
  274. data/spec/support/system/system_context.rb +21 -3
  275. data/spec/support/working_dir_tracking.rb +49 -0
  276. data/spec/system/build_output_mirroring_spec.rb +2 -2
  277. data/spec/system/conditional_mock_includes_spec.rb +1 -1
  278. data/spec/system/delta_builds_spec.rb +137 -11
  279. data/spec/system/gcov_deployment_spec.rb +1 -0
  280. data/spec/system/header_include_path_validation_spec.rb +4 -4
  281. data/spec/system/launcher_handoff_spec.rb +82 -0
  282. data/spec/system/mock_include_folders_spec.rb +91 -0
  283. data/spec/system/parent_directory_reference_spec.rb +5 -3
  284. data/spec/system/path_handling_probes_spec.rb +192 -0
  285. data/spec/system/preprocessing_parameterized_tests_spec.rb +1 -1
  286. data/spec/system/rake_release_task_path_disambiguation_spec.rb +6 -6
  287. data/spec/system/rake_test_task_path_disambiguation_spec.rb +85 -0
  288. data/spec/system/special_path_characters_spec.rb +86 -0
  289. data/spec/system/support/common_test_cases.rb +23 -21
  290. data/spec/system/support/gcov_common_test_cases.rb +37 -9
  291. data/spec/system/support/sanitize_common_test_cases.rb +2 -2
  292. data/spec/system/support/valgrind_common_test_cases.rb +12 -12
  293. data/spec/system/test_pipeline_stop_points_spec.rb +4 -4
  294. data/spec/system/test_runner_system_include_spec.rb +1 -1
  295. data/spec/system/test_source_file_directive_spec.rb +34 -5
  296. data/spec/units/bin/actionator_spec.rb +14 -17
  297. data/spec/units/bin/app_cfg_spec.rb +47 -0
  298. data/spec/units/bin/cli_handler_spec.rb +284 -7
  299. data/spec/units/bin/cli_helper_spec.rb +126 -45
  300. data/spec/units/bin/installation_selector_spec.rb +114 -0
  301. data/spec/units/bin/launchinator_spec.rb +171 -0
  302. data/spec/units/bin/path_validator_spec.rb +10 -0
  303. data/spec/units/bin/versionator_spec.rb +38 -6
  304. data/spec/units/build_log_writer_spec.rb +57 -0
  305. data/spec/units/config/build_root_policy_spec.rb +61 -0
  306. data/spec/units/config/configurator_builder_spec.rb +37 -6
  307. data/spec/units/config/configurator_paths_validator_spec.rb +292 -0
  308. data/spec/units/config/configurator_setup_spec.rb +65 -103
  309. data/spec/units/config/configurator_spec.rb +37 -6
  310. data/spec/units/config/configurator_validator_spec.rb +1 -172
  311. data/spec/units/default_tools_quoting_spec.rb +83 -0
  312. data/spec/units/dependencies/dependency_cache_store_spec.rb +33 -2
  313. data/spec/units/dependencies/dependency_debug_tree_spec.rb +1 -1
  314. data/spec/units/dependencies/dependency_hasher_spec.rb +42 -1
  315. data/spec/units/dependencies/dependency_path_normalizer_spec.rb +1 -1
  316. data/spec/units/dependencies/dependency_tracker_spec.rb +3 -1
  317. data/spec/units/filename_extension_spec.rb +11 -0
  318. data/spec/units/filesystem/build_subpath_spec.rb +122 -0
  319. data/spec/units/filesystem/destination_collision_spec.rb +30 -0
  320. data/spec/units/{file_finder_helper_spec.rb → filesystem/file_finder_helper_spec.rb} +46 -1
  321. data/spec/units/{file_finder_spec.rb → filesystem/file_finder_spec.rb} +188 -22
  322. data/spec/units/{file_path_collection_utils_spec.rb → filesystem/file_path_collection_utils_spec.rb} +181 -1
  323. data/spec/units/{file_path_utils_spec.rb → filesystem/file_path_utils_spec.rb} +204 -87
  324. data/spec/units/filesystem/file_system_wrapper_spec.rb +33 -0
  325. data/spec/units/filesystem/file_tree_spec.rb +511 -0
  326. data/spec/units/filesystem/file_tree_windows_spec.rb +78 -0
  327. data/spec/units/{file_wrapper_spec.rb → filesystem/file_wrapper_spec.rb} +154 -32
  328. data/spec/units/{path_matcher_spec.rb → filesystem/path_matcher_spec.rb} +12 -1
  329. data/spec/units/{path_mirror_spec.rb → filesystem/path_mirror_spec.rb} +32 -4
  330. data/spec/units/filesystem/project_paths_spec.rb +147 -0
  331. data/spec/units/filesystem/working_dir_spec.rb +71 -0
  332. data/spec/units/generators/generator_spec.rb +12 -6
  333. data/spec/units/generators/generator_test_results_backtrace_spec.rb +50 -46
  334. data/spec/units/generators/generator_test_results_spec.rb +1 -1
  335. data/spec/units/handoff_spec.rb +205 -0
  336. data/spec/units/includes/include_factory_spec.rb +3 -3
  337. data/spec/units/includes/include_pathinator_spec.rb +46 -0
  338. data/spec/units/installation_spec.rb +228 -0
  339. data/spec/units/library_resolver_spec.rb +157 -0
  340. data/spec/units/mock_locator_spec.rb +76 -1
  341. data/spec/units/partials/partializer_config_spec.rb +7 -0
  342. data/spec/units/partials/partializer_spec.rb +1 -0
  343. data/spec/units/partials_manager_spec.rb +17 -0
  344. data/spec/units/plugins/bullseye_spec.rb +15 -2
  345. data/spec/units/plugins/console_reportinator_spec.rb +18 -20
  346. data/spec/units/plugins/dependencies_spec.rb +33 -7
  347. data/spec/units/plugins/dependency_spec_spec.rb +17 -0
  348. data/spec/units/plugins/gcov_spec.rb +28 -3
  349. data/spec/units/plugins/gcovr_reportinator_spec.rb +19 -47
  350. data/spec/units/plugins/gcovr_thresholds_spec.rb +95 -0
  351. data/spec/units/plugins/module_generator_spec.rb +5 -5
  352. data/spec/units/plugins/report_build_warnings_log_spec.rb +3 -3
  353. data/spec/units/plugins/report_log_writer_plugin_spec.rb +10 -1
  354. data/spec/units/plugins/report_tests_raw_output_log_spec.rb +13 -2
  355. data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +77 -3
  356. data/spec/units/plugins/reportgenerator_reportinator_spec.rb +1 -1
  357. data/spec/units/plugins/sanitize_records_spec.rb +3 -1
  358. data/spec/units/plugins/sanitize_spec.rb +1 -1
  359. data/spec/units/plugins/valgrind_spec.rb +23 -8
  360. data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +1 -1
  361. data/spec/units/rake_app/rakefile_component_resolver_spec.rb +21 -0
  362. data/spec/units/rake_app/test_task_name_spec.rb +47 -0
  363. data/spec/units/release_build_executor_spec.rb +53 -14
  364. data/spec/units/release_build_planner_spec.rb +15 -3
  365. data/spec/units/reportinator_spec.rb +5 -5
  366. data/spec/units/standin_headerinator_spec.rb +31 -1
  367. data/spec/units/test_build_executor_spec.rb +107 -5
  368. data/spec/units/test_build_planner_spec.rb +104 -2
  369. data/spec/units/test_build_setup_spec.rb +96 -12
  370. data/spec/units/test_context_extractor_spec.rb +25 -0
  371. data/spec/units/test_file_preprocessinator_spec.rb +17 -1
  372. data/spec/units/test_includes_extractinator_spec.rb +5 -1
  373. data/spec/units/test_invoker/objects_wiring_spec.rb +6 -3
  374. data/spec/units/test_invoker_spec.rb +14 -1
  375. data/spec/units/test_source_file_directive_resolver_spec.rb +38 -7
  376. data/spec/units/tool_executor_spec.rb +26 -0
  377. data/spec/units/yaml_wrapper_spec.rb +11 -0
  378. metadata +122 -33
  379. data/lib/ceedling/file_path_collection_utils.rb +0 -164
  380. data/site-local/assets/stylesheets/main.ec1eaa64.min.css +0 -1
  381. data/site-local/assets/stylesheets/main.ec1eaa64.min.css.map +0 -1
  382. data/site-local/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
  383. data/site-local/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
@@ -21,7 +21,7 @@
21
21
 
22
22
 
23
23
  <link rel="icon" href="../../assets/images/favicon.png">
24
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
24
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.8.0">
25
25
 
26
26
 
27
27
 
@@ -29,10 +29,10 @@
29
29
 
30
30
 
31
31
 
32
- <link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
32
+ <link rel="stylesheet" href="../../assets/stylesheets/main.57a0d79d.min.css">
33
33
 
34
34
 
35
- <link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
35
+ <link rel="stylesheet" href="../../assets/stylesheets/palette.fb2fffe2.min.css">
36
36
 
37
37
 
38
38
 
@@ -89,30 +89,16 @@
89
89
  </div>
90
90
  <div data-md-component="announce">
91
91
 
92
- <aside class="md-banner">
93
- <div class="md-banner__inner md-grid md-typeset">
94
-
95
-
96
-
97
-
98
- </div>
99
-
100
- </aside>
101
-
102
92
  </div>
103
93
 
104
94
  <div data-md-color-scheme="default" data-md-component="outdated" hidden>
105
95
 
106
96
  <aside class="md-banner md-banner--warning">
107
97
  <div class="md-banner__inner md-grid md-typeset">
108
-
109
-
110
- You are not viewing the latest version.
98
+ You are not viewing the latest version.
111
99
  <a href="../../..">
112
100
  <strong>Click here to go to latest.</strong>
113
101
  </a>
114
-
115
-
116
102
  </div>
117
103
  <script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL("../.."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
118
104
  </aside>
@@ -4540,10 +4526,10 @@ ordering — see <a href="test-runner.html#test_runner-rng_seed"><code>:test_run
4540
4526
 
4541
4527
 
4542
4528
 
4543
- <script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "navigation.indexes", "navigation.path", "search.suggest", "search.highlight", "content.code.copy", "content.code.annotate"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
4529
+ <script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "navigation.indexes", "navigation.path", "search.suggest", "search.highlight", "content.code.copy", "content.code.annotate"], "search": "../../assets/javascripts/workers/search.a7633da7.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
4544
4530
 
4545
4531
 
4546
- <script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
4532
+ <script src="../../assets/javascripts/bundle.c21346df.min.js"></script>
4547
4533
 
4548
4534
 
4549
4535
  </body>
@@ -21,7 +21,7 @@
21
21
 
22
22
 
23
23
  <link rel="icon" href="../assets/images/favicon.png">
24
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
24
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.8.0">
25
25
 
26
26
 
27
27
 
@@ -29,10 +29,10 @@
29
29
 
30
30
 
31
31
 
32
- <link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
32
+ <link rel="stylesheet" href="../assets/stylesheets/main.57a0d79d.min.css">
33
33
 
34
34
 
35
- <link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
35
+ <link rel="stylesheet" href="../assets/stylesheets/palette.fb2fffe2.min.css">
36
36
 
37
37
 
38
38
 
@@ -89,30 +89,16 @@
89
89
  </div>
90
90
  <div data-md-component="announce">
91
91
 
92
- <aside class="md-banner">
93
- <div class="md-banner__inner md-grid md-typeset">
94
-
95
-
96
-
97
-
98
- </div>
99
-
100
- </aside>
101
-
102
92
  </div>
103
93
 
104
94
  <div data-md-color-scheme="default" data-md-component="outdated" hidden>
105
95
 
106
96
  <aside class="md-banner md-banner--warning">
107
97
  <div class="md-banner__inner md-grid md-typeset">
108
-
109
-
110
- You are not viewing the latest version.
98
+ You are not viewing the latest version.
111
99
  <a href="../..">
112
100
  <strong>Click here to go to latest.</strong>
113
101
  </a>
114
-
115
-
116
102
  </div>
117
103
  <script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL(".."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
118
104
  </aside>
@@ -1844,6 +1830,78 @@
1844
1830
  </span>
1845
1831
  </a>
1846
1832
 
1833
+ </li>
1834
+
1835
+ <li class="md-nav__item">
1836
+ <a href="#hand-off" class="md-nav__link">
1837
+ <span class="md-ellipsis">
1838
+
1839
+ Hand-off
1840
+
1841
+ </span>
1842
+ </a>
1843
+
1844
+ <nav class="md-nav" aria-label="Hand-off">
1845
+ <ul class="md-nav__list">
1846
+
1847
+ <li class="md-nav__item">
1848
+ <a href="#hand-off-by-condition" class="md-nav__link">
1849
+ <span class="md-ellipsis">
1850
+
1851
+ Hand-off by condition
1852
+
1853
+ </span>
1854
+ </a>
1855
+
1856
+ </li>
1857
+
1858
+ <li class="md-nav__item">
1859
+ <a href="#version" class="md-nav__link">
1860
+ <span class="md-ellipsis">
1861
+
1862
+ version
1863
+
1864
+ </span>
1865
+ </a>
1866
+
1867
+ </li>
1868
+
1869
+ <li class="md-nav__item">
1870
+ <a href="#older-launchers" class="md-nav__link">
1871
+ <span class="md-ellipsis">
1872
+
1873
+ Older launchers
1874
+
1875
+ </span>
1876
+ </a>
1877
+
1878
+ </li>
1879
+
1880
+ <li class="md-nav__item">
1881
+ <a href="#projects-vendored-by-110-through-121" class="md-nav__link">
1882
+ <span class="md-ellipsis">
1883
+
1884
+ Projects vendored by 1.1.0 through 1.2.1
1885
+
1886
+ </span>
1887
+ </a>
1888
+
1889
+ </li>
1890
+
1891
+ </ul>
1892
+ </nav>
1893
+
1894
+ </li>
1895
+
1896
+ <li class="md-nav__item">
1897
+ <a href="#ceedling-development" class="md-nav__link">
1898
+ <span class="md-ellipsis">
1899
+
1900
+ Ceedling development
1901
+
1902
+ </span>
1903
+ </a>
1904
+
1847
1905
  </li>
1848
1906
 
1849
1907
  </ul>
@@ -4319,6 +4377,78 @@
4319
4377
  </span>
4320
4378
  </a>
4321
4379
 
4380
+ </li>
4381
+
4382
+ <li class="md-nav__item">
4383
+ <a href="#hand-off" class="md-nav__link">
4384
+ <span class="md-ellipsis">
4385
+
4386
+ Hand-off
4387
+
4388
+ </span>
4389
+ </a>
4390
+
4391
+ <nav class="md-nav" aria-label="Hand-off">
4392
+ <ul class="md-nav__list">
4393
+
4394
+ <li class="md-nav__item">
4395
+ <a href="#hand-off-by-condition" class="md-nav__link">
4396
+ <span class="md-ellipsis">
4397
+
4398
+ Hand-off by condition
4399
+
4400
+ </span>
4401
+ </a>
4402
+
4403
+ </li>
4404
+
4405
+ <li class="md-nav__item">
4406
+ <a href="#version" class="md-nav__link">
4407
+ <span class="md-ellipsis">
4408
+
4409
+ version
4410
+
4411
+ </span>
4412
+ </a>
4413
+
4414
+ </li>
4415
+
4416
+ <li class="md-nav__item">
4417
+ <a href="#older-launchers" class="md-nav__link">
4418
+ <span class="md-ellipsis">
4419
+
4420
+ Older launchers
4421
+
4422
+ </span>
4423
+ </a>
4424
+
4425
+ </li>
4426
+
4427
+ <li class="md-nav__item">
4428
+ <a href="#projects-vendored-by-110-through-121" class="md-nav__link">
4429
+ <span class="md-ellipsis">
4430
+
4431
+ Projects vendored by 1.1.0 through 1.2.1
4432
+
4433
+ </span>
4434
+ </a>
4435
+
4436
+ </li>
4437
+
4438
+ </ul>
4439
+ </nav>
4440
+
4441
+ </li>
4442
+
4443
+ <li class="md-nav__item">
4444
+ <a href="#ceedling-development" class="md-nav__link">
4445
+ <span class="md-ellipsis">
4446
+
4447
+ Ceedling development
4448
+
4449
+ </span>
4450
+ </a>
4451
+
4322
4452
  </li>
4323
4453
 
4324
4454
  </ul>
@@ -4408,16 +4538,14 @@ in <code>lib/</code>. The code in <code>/bin</code> manages lots of startup deta
4408
4538
  configuration. Ultimately, it then launches the main application code from
4409
4539
  <code>lib/</code>.</p>
4410
4540
  <p>The features and conventions controlling <em>which ceedling</em> dictate which
4411
- application code the <code>ceedling</code> command line handler launches.</p>
4541
+ installation of Ceedling runs your command. When they select an
4542
+ installation other than the one whose <code>ceedling</code> command you ran, the launcher
4543
+ hands your command off to that installation’s own launcher. See
4544
+ <a href="#hand-off">Hand-off</a>.</p>
4412
4545
  <div class="admonition note">
4413
- <p class="admonition-title">Ceedling development in <code>bin/</code></p>
4414
- <p>Working on the code in Ceedling’s <code>bin/</code> and need to run it while a gem is
4415
- installed? You must take the additional step of specifying the path to the
4416
- <code>ceedling</code> launcher in your filesystem.</p>
4417
- <p>In Unix-like systems:
4418
- <code>&gt; my/ceedling/changes/bin/ceedling &lt;args&gt;</code>.</p>
4419
- <p>On Windows systems:
4420
- <code>&gt; ruby my\ceedling\changes\bin\ceedling &lt;args&gt;</code>.</p>
4546
+ <p class="admonition-title">Ceedling development</p>
4547
+ <p><em>Which ceedling</em> lets the <code>ceedling</code> command you have installed run your local
4548
+ Ceedling repository. See <a href="#ceedling-development">Ceedling development</a>.</p>
4421
4549
  </div>
4422
4550
  <h2 id="options-and-precedence">Options and precedence</h2>
4423
4551
  <p>When Ceedling starts up, it evaluates a handful of conditions to determine
@@ -4436,25 +4564,243 @@ which Ceedling location to launch.</p>
4436
4564
  <code>ceedling</code> launcher is running. In the typical case this is the default
4437
4565
  gem installation.</li>
4438
4566
  </ol>
4567
+ <p>A path in <code>WHICH_CEEDLING</code> or <code>:which_ceedling</code> may begin with <code>~</code> to name
4568
+ your home directory, as in <code>:which_ceedling: ~/ceedlings/1.2.0</code>.</p>
4439
4569
  <div class="admonition note">
4440
4570
  <p class="admonition-title">Configuration entry (2) does not make sense in some scenarios</p>
4441
- <p>When running <code>ceedling new</code>, <code>ceedling examples</code>, or <code>ceedling example</code>
4442
- there is no project file to read. Similarly, <code>ceedling upgrade</code> does not
4443
- load a project file; it merely works with the directory structure and
4444
- contents of a project. In these cases, the environment variable is your
4445
- only option to set which Ceedling to launch.</p>
4571
+ <p><code>ceedling new</code>, <code>ceedling examples</code>, <code>ceedling example</code>, <code>ceedling docs</code>,
4572
+ and <code>ceedling help</code> outside a project have no project file to read. They
4573
+ use the environment variable or a <code>vendor/ceedling</code> path in your working
4574
+ directory.</p>
4575
+ <p><code>ceedling upgrade</code> re-vendors a project from the Ceedling you run, or from
4576
+ the installation the environment variable names. It never selects a
4577
+ <code>vendor/ceedling</code> path, which inside a project is the copy being replaced.</p>
4578
+ <p><code>ceedling version</code> reads your project file when one is available. See
4579
+ <a href="#hand-off">Hand-off</a>.</p>
4446
4580
  </div>
4447
4581
  <h2 id="settings">Settings</h2>
4448
4582
  <p>The environment variable and configuration entry for <em>Which Ceedling</em> can
4449
4583
  contain two values:</p>
4450
4584
  <ol>
4451
- <li>The value <code>gem</code> indicates that the command line <code>ceedling</code> launcher
4452
- should run the application packaged alongside it in <code>lib/</code> (these
4585
+ <li>The value <code>gem</code>, in any case, indicates that the command line <code>ceedling</code>
4586
+ launcher should run the application packaged alongside it in <code>lib/</code> (these
4453
4587
  paths are typically found in the gem installation location).</li>
4454
4588
  <li>A relative or absolute path in your file system. Such a path should
4455
4589
  point to the top-level directory that contains Ceedling’s <code>bin/</code> and
4456
- <code>lib/</code> sub-directories.</li>
4590
+ <code>lib/</code> sub-directories. A relative path is relative to your working
4591
+ directory, not to your project file.</li>
4592
+ </ol>
4593
+ <h2 id="hand-off">Hand-off</h2>
4594
+ <p>When <em>which ceedling</em> selects an installation other than the one whose
4595
+ <code>ceedling</code> command you ran, every command except <code>version</code> runs in the selected
4596
+ installation. Its own launcher replaces the one you ran, in a new process,
4597
+ and receives your original command line. Your command then runs wholly on the
4598
+ selected installation’s code, whatever its version.</p>
4599
+ <p>One command falls back. A <code>--local</code> copy carries no documentation bundle, so
4600
+ <code>ceedling docs</code> with such a copy selected exports the documentation of the
4601
+ <code>ceedling</code> command you ran instead, with a notice naming both installations.</p>
4602
+ <p>Both sides log a notice, naming each installation and its version where
4603
+ it can be read:</p>
4604
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>NOTICE: Ceedling launcher 1.2.2 at /var/lib/gems/3.3.0/gems/ceedling-1.2.2/ is handing off to Ceedling 1.2.0 at /home/me/project/vendor/ceedling/, which runs in its own process.
4605
+ </code></pre></div>
4606
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>NOTICE: Ceedling 1.2.3 at /home/me/project/vendor/ceedling/ is now running, launched from Ceedling 1.2.2 at /var/lib/gems/3.3.0/gems/ceedling-1.2.2/.
4607
+ </code></pre></div>
4608
+ <p>The second notice comes only from Ceedling 1.2.2 or later. Commands that
4609
+ quiet logging, such as <code>help</code> and <code>dumpconfig</code>, show neither.</p>
4610
+ <p>A hand-off adds about 0.2 seconds to a command.</p>
4611
+ <h3 id="hand-off-by-condition">Hand-off by condition</h3>
4612
+ <p>The table names one of five mechanisms per condition:</p>
4613
+ <ul>
4614
+ <li><strong>In-process:</strong> the <code>ceedling</code> command you run does the work itself.</li>
4615
+ <li><strong>Hand-off:</strong> the selected installation’s own launcher runs the command, in a new process.</li>
4616
+ <li><strong>Restart:</strong> an application loaded by an older launcher restarts in its own process.</li>
4617
+ <li><strong>Report:</strong> the <code>ceedling</code> command you run reports on both installations without running the selected one.</li>
4618
+ <li><strong>Stop:</strong> the <code>ceedling</code> command you run stops with advice.</li>
4619
+ </ul>
4620
+ <table>
4621
+ <thead>
4622
+ <tr>
4623
+ <th>Condition</th>
4624
+ <th>Example</th>
4625
+ <th>Mechanism</th>
4626
+ <th>Behavior in 1.2.2+</th>
4627
+ </tr>
4628
+ </thead>
4629
+ <tbody>
4630
+ <tr>
4631
+ <td>The selection is the installation you run</td>
4632
+ <td><code>ceedling test:all</code> with the gem and <code>:which_ceedling: gem</code></td>
4633
+ <td>In-process</td>
4634
+ <td>Runs as before 1.2.2, with no notice</td>
4635
+ </tr>
4636
+ <tr>
4637
+ <td>The selection is the same installation by another path</td>
4638
+ <td><code>:which_ceedling</code> names a symlink to the gem’s directory</td>
4639
+ <td>In-process</td>
4640
+ <td>Paths are compared after resolving links, so nothing is handed off</td>
4641
+ </tr>
4642
+ <tr>
4643
+ <td>The selection is another installation</td>
4644
+ <td>The gem’s <code>ceedling test:all</code> in a <code>--local</code> project</td>
4645
+ <td>Hand-off</td>
4646
+ <td>The vendored copy runs the build whole, whatever its version. Both sides log a notice.</td>
4647
+ </tr>
4648
+ <tr>
4649
+ <td>A command without a project selects another installation</td>
4650
+ <td><code>ceedling new</code> with <code>WHICH_CEEDLING</code> set</td>
4651
+ <td>Hand-off</td>
4652
+ <td>The selected installation creates the project with its own code and files</td>
4653
+ </tr>
4654
+ <tr>
4655
+ <td>The selection is a development checkout</td>
4656
+ <td>The gem’s <code>ceedling test:all</code> with <code>:which_ceedling: /home/me/dev/ceedling</code></td>
4657
+ <td>Hand-off</td>
4658
+ <td>The checkout’s own <code>bin/</code> and <code>lib/</code> run the command, so every change takes effect</td>
4659
+ </tr>
4660
+ <tr>
4661
+ <td><code>docs</code> selects a <code>--local</code> copy</td>
4662
+ <td><code>ceedling docs out/</code> in a <code>--local</code> project</td>
4663
+ <td>In-process</td>
4664
+ <td>Exports the documentation of the <code>ceedling</code> command you run, with a notice</td>
4665
+ </tr>
4666
+ <tr>
4667
+ <td><code>version</code> with a selection</td>
4668
+ <td><code>ceedling version</code> in a <code>--local</code> project</td>
4669
+ <td>Report</td>
4670
+ <td>Lists <code>Ceedling Launcher =&gt;</code> and <code>Ceedling App =&gt;</code>, each with its own version</td>
4671
+ </tr>
4672
+ <tr>
4673
+ <td><code>upgrade</code> inside a <code>--local</code> project</td>
4674
+ <td><code>ceedling upgrade .</code></td>
4675
+ <td>Stop</td>
4676
+ <td>Refuses to upgrade the vendored copy from itself</td>
4677
+ </tr>
4678
+ <tr>
4679
+ <td>The selection is a copy vendored by 1.1.0 through 1.2.1</td>
4680
+ <td>The gem’s <code>ceedling test:all</code> in a project vendored by 1.2.0</td>
4681
+ <td>Stop</td>
4682
+ <td>Advises re-vendoring with <code>ceedling upgrade</code></td>
4683
+ </tr>
4684
+ <tr>
4685
+ <td>A launcher before 1.2.2 selects a 1.2.2+ application</td>
4686
+ <td>A 1.2.1 gem <code>ceedling test:all</code> in a project vendoring 1.2.2</td>
4687
+ <td>Restart</td>
4688
+ <td>Logs a warning, then the application runs whole. If it can’t restart, it warns and continues in the older launcher’s process.</td>
4689
+ </tr>
4690
+ <tr>
4691
+ <td>A launcher before 1.2.2 runs a command without a project</td>
4692
+ <td>A 1.2.1 gem <code>ceedling new</code> with <code>WHICH_CEEDLING</code> naming 1.2.2</td>
4693
+ <td>In-process</td>
4694
+ <td>The older launcher’s own code runs the command. Upgrade the <code>ceedling</code> command you run.</td>
4695
+ </tr>
4696
+ </tbody>
4697
+ </table>
4698
+ <h4 id="example-scenarios">Example scenarios</h4>
4699
+ <p>These show when the conditions above come into play, and which goal each
4700
+ serves.</p>
4701
+ <p><strong>Pin a team’s project to one Ceedling version.</strong> Create the project with
4702
+ <code>ceedling new --local</code>, and commit <code>vendor/ceedling/</code>. Each teammate can then
4703
+ run the project with whatever 1.2.2+ gem they have installed. The gem hands
4704
+ each command off to the vendored copy, so everyone builds with the same
4705
+ version. <code>ceedling version</code> confirms it under <code>Ceedling App =&gt;</code>.</p>
4706
+ <p><strong>Keep an older project on its version while you upgrade the gem.</strong> A
4707
+ project vendoring 1.2.0 still builds with 1.2.0 after you install the 1.2.2
4708
+ gem, because the gem hands off to the vendored copy. If the copy was vendored
4709
+ by 1.1.0 through 1.2.1, the gem stops instead. Re-vendor it as below, or
4710
+ copy Unity’s <code>test/targets/</code> into the copy to keep its version.</p>
4711
+ <p><strong>Upgrade a vendored project.</strong> Run <code>upgrade</code> with the Ceedling you want,
4712
+ from outside the project:</p>
4713
+ <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>upgrade<span class="w"> </span>my_project
4714
+ </code></pre></div>
4715
+ <p>To re-vendor with an installation other than the one you run, name it in
4716
+ <code>WHICH_CEEDLING</code>. Run from inside the project, <code>upgrade</code> stops, because the
4717
+ vendored copy would be both source and destination.</p>
4718
+ <p><strong>Create a project with a version you haven’t installed as a gem.</strong> Point
4719
+ <code>WHICH_CEEDLING</code> at an unpacked copy or a checkout of that version. <code>new</code>
4720
+ hands off to it, so the project, its vendored files, and its recorded
4721
+ <code>:ceedling_version:</code> all come from that version:</p>
4722
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="w"> </span>&gt;<span class="w"> </span><span class="nv">WHICH_CEEDLING</span><span class="o">=</span>~/ceedlings/1.2.0<span class="w"> </span>ceedling<span class="w"> </span>new<span class="w"> </span>--local<span class="w"> </span>my_project
4723
+ </code></pre></div>
4724
+ <p><strong>Compare versions, or find where a behavior changed.</strong> Set <code>WHICH_CEEDLING</code>
4725
+ for each run instead of editing the project file. It overrides
4726
+ <code>:which_ceedling</code> and a <code>vendor/ceedling/</code> copy, so a CI job can build one
4727
+ project with several versions:</p>
4728
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="w"> </span>&gt;<span class="w"> </span><span class="nv">WHICH_CEEDLING</span><span class="o">=</span>~/ceedlings/1.2.0<span class="w"> </span>ceedling<span class="w"> </span>test:all
4729
+ <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span>&gt;<span class="w"> </span><span class="nv">WHICH_CEEDLING</span><span class="o">=</span>~/ceedlings/1.2.2<span class="w"> </span>ceedling<span class="w"> </span>test:all
4730
+ </code></pre></div>
4731
+ <p><strong>Run a 1.2.2 project in a CI image with an older gem.</strong> A Docker image
4732
+ shipping a 1.2.1 gem loads the vendored 1.2.2 application into its own
4733
+ process. The application restarts itself, with a warning. To avoid the
4734
+ restart, run the project’s <code>./ceedling</code> launch script, or upgrade the image.</p>
4735
+ <p><strong>Develop Ceedling itself.</strong> Point <code>:which_ceedling</code> at your local
4736
+ repository and keep running the installed gem. See
4737
+ <a href="#ceedling-development">Ceedling development</a>.</p>
4738
+ <div class="admonition note">
4739
+ <p class="admonition-title">The launcher you run still parses your command line</p>
4740
+ <p>The <code>ceedling</code> command you run reads your command line before it hands off, so it
4741
+ rejects an option that only the selected installation knows. Run the
4742
+ selected installation’s own launcher instead, such as <code>./ceedling</code> in a
4743
+ <code>--local</code> project.</p>
4744
+ </div>
4745
+ <h3 id="version"><code>version</code></h3>
4746
+ <p><code>ceedling version</code> reports on both installations rather than hand off. It
4747
+ reads your project file when one is available, or the one <code>--project</code> names,
4748
+ along with any <code>--mixin</code>s. When the project selects another installation, it
4749
+ lists <code>Ceedling Launcher =&gt;</code> and <code>Ceedling App =&gt;</code> separately, each with its
4750
+ own version.</p>
4751
+ <h3 id="older-launchers">Older launchers</h3>
4752
+ <p>A launcher before 1.2.2 loads the selected installation’s application into
4753
+ its own process instead of handing off. A 1.2.2 or later application detects
4754
+ this, logs a warning, and restarts in its own process with your original
4755
+ command line. <code>new</code>, <code>example</code>, <code>examples</code>, <code>upgrade</code>, <code>docs</code>, and <code>help</code>
4756
+ without a project never load the application, so these still run the older
4757
+ launcher’s own code. Upgrade the <code>ceedling</code> command you run to avoid this.</p>
4758
+ <h3 id="projects-vendored-by-110-through-121">Projects vendored by 1.1.0 through 1.2.1</h3>
4759
+ <p><code>ceedling new --local</code> in Ceedling 1.1.0 through 1.2.1 left Unity’s built-in
4760
+ mixins out of the vendored copy, so that copy cannot run on its own. The
4761
+ <code>ceedling</code> command you run stops with advice instead of handing off to it. Re-vendor
4762
+ the project with <code>ceedling upgrade &lt;project path&gt;</code>.</p>
4763
+ <h2 id="ceedling-development">Ceedling development</h2>
4764
+ <p><em>Which ceedling</em> lets you run your local Ceedling repository on a project
4765
+ from the <code>ceedling</code> command you already have installed. Set <code>:project</code> ↳
4766
+ <code>:which_ceedling</code> in the project file, or <code>WHICH_CEEDLING</code>, to the path of
4767
+ your repository:</p>
4768
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="nt">:project</span><span class="p">:</span>
4769
+ <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span><span class="nt">:which_ceedling</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/home/me/dev/ceedling</span>
4770
+ </code></pre></div>
4771
+ <p>The installed <code>ceedling</code> command hands every command off to your repository’s own
4772
+ <code>bin/ceedling</code>. Your command runs wholly on your repository’s <code>bin/</code> and
4773
+ <code>lib/</code>, so changes in either take effect. <code>ceedling version</code> lists both
4774
+ installations, your repository with its <code>.dev</code> tag.</p>
4775
+ <p>Before 1.2.2, the installed <code>ceedling</code> command loaded your repository’s application
4776
+ into its own process. Any <code>lib/</code> file it had already loaded stayed the
4777
+ installed copy, so changes to those files were silently ignored.</p>
4778
+ <p>Keep in mind:</p>
4779
+ <ol>
4780
+ <li><strong>Your repository’s <code>bin/</code> runs as well as its <code>lib/</code>.</strong> The installed
4781
+ launcher never runs your repository’s application. To exercise a
4782
+ particular launcher, run its <code>bin/ceedling</code> directly.</li>
4783
+ <li><strong>The installed <code>ceedling</code> command parses your command line first.</strong> It rejects a
4784
+ command or option that exists only in your repository. Run your
4785
+ repository’s launcher directly for those.</li>
4786
+ <li><strong>Your repository must run on its own.</strong> It needs <code>bin/ceedling</code> and its
4787
+ checked-out Git submodules, including Unity’s <code>test/targets/</code>. Otherwise
4788
+ the installed <code>ceedling</code> command stops with advice.</li>
4789
+ <li><strong>A debugger or profiler loses the command at the hand-off.</strong> It attaches
4790
+ to the installed <code>ceedling</code> command, whose process the hand-off replaces. Attach
4791
+ it to your repository’s launcher directly instead.</li>
4792
+ <li><strong>A hand-off adds about 0.2 seconds</strong> to each command.</li>
4793
+ <li><strong><code>ceedling docs</code> exports the installed <code>ceedling</code> command’s documentation</strong> when
4794
+ your repository has no built <code>site-local/</code> bundle.</li>
4795
+ <li><strong>A path that resolves to the installation you run is not handed off.</strong>
4796
+ The plugin test suites’ <code>:which_ceedling: ../../../..</code> names the
4797
+ repository running them, so they run in-process.</li>
4457
4798
  </ol>
4799
+ <p>To run your repository’s launcher directly:</p>
4800
+ <ul>
4801
+ <li>In Unix-like systems: <code>&gt; ~/dev/ceedling/bin/ceedling &lt;args&gt;</code>.</li>
4802
+ <li>On Windows systems: <code>&gt; ruby %USERPROFILE%\dev\ceedling\bin\ceedling &lt;args&gt;</code>.</li>
4803
+ </ul>
4458
4804
  <p><br/><br/></p>
4459
4805
 
4460
4806
 
@@ -4523,10 +4869,10 @@ contain two values:</p>
4523
4869
 
4524
4870
 
4525
4871
 
4526
- <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "navigation.indexes", "navigation.path", "search.suggest", "search.highlight", "content.code.copy", "content.code.annotate"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
4872
+ <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "navigation.indexes", "navigation.path", "search.suggest", "search.highlight", "content.code.copy", "content.code.annotate"], "search": "../assets/javascripts/workers/search.a7633da7.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
4527
4873
 
4528
4874
 
4529
- <script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
4875
+ <script src="../assets/javascripts/bundle.c21346df.min.js"></script>
4530
4876
 
4531
4877
 
4532
4878
  </body>
@@ -21,7 +21,7 @@
21
21
 
22
22
 
23
23
  <link rel="icon" href="../assets/images/favicon.png">
24
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
24
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.8.0">
25
25
 
26
26
 
27
27
 
@@ -29,10 +29,10 @@
29
29
 
30
30
 
31
31
 
32
- <link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
32
+ <link rel="stylesheet" href="../assets/stylesheets/main.57a0d79d.min.css">
33
33
 
34
34
 
35
- <link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
35
+ <link rel="stylesheet" href="../assets/stylesheets/palette.fb2fffe2.min.css">
36
36
 
37
37
 
38
38
 
@@ -89,30 +89,16 @@
89
89
  </div>
90
90
  <div data-md-component="announce">
91
91
 
92
- <aside class="md-banner">
93
- <div class="md-banner__inner md-grid md-typeset">
94
-
95
-
96
-
97
-
98
- </div>
99
-
100
- </aside>
101
-
102
92
  </div>
103
93
 
104
94
  <div data-md-color-scheme="default" data-md-component="outdated" hidden>
105
95
 
106
96
  <aside class="md-banner md-banner--warning">
107
97
  <div class="md-banner__inner md-grid md-typeset">
108
-
109
-
110
- You are not viewing the latest version.
98
+ You are not viewing the latest version.
111
99
  <a href="../..">
112
100
  <strong>Click here to go to latest.</strong>
113
101
  </a>
114
-
115
-
116
102
  </div>
117
103
  <script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL(".."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
118
104
  </aside>
@@ -4415,10 +4401,10 @@ available build step hooks.</p>
4415
4401
 
4416
4402
 
4417
4403
 
4418
- <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "navigation.indexes", "navigation.path", "search.suggest", "search.highlight", "content.code.copy", "content.code.annotate"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
4404
+ <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "navigation.indexes", "navigation.path", "search.suggest", "search.highlight", "content.code.copy", "content.code.annotate"], "search": "../assets/javascripts/workers/search.a7633da7.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
4419
4405
 
4420
4406
 
4421
- <script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
4407
+ <script src="../assets/javascripts/bundle.c21346df.min.js"></script>
4422
4408
 
4423
4409
 
4424
4410
  </body>