ceedling 1.1.10 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +3 -0
- data/.simplecov +73 -0
- data/GIT_COMMIT_SHA +1 -1
- data/Gemfile +84 -8
- data/Gemfile.lock +38 -8
- data/README.md +64 -45
- data/Rakefile +769 -16
- data/assets/{project.yml → features/project.yml} +4 -1
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.c +24 -0
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.h +14 -0
- data/assets/fixtures/bullseye_branch_coverage/test/test_branchy.c +18 -0
- data/assets/fixtures/cppcheck_findings/findings.c +23 -0
- data/assets/fixtures/cppcheck_findings/findings.h +13 -0
- data/assets/fixtures/header_include_path_validation/alt_drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/bar.h +6 -0
- data/assets/fixtures/header_include_path_validation/drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/other_inc/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/test_ambiguous_mock.c +15 -0
- data/assets/fixtures/header_include_path_validation/test_bare_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_mock_path.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_vanilla_path.c +10 -0
- data/assets/fixtures/header_include_path_validation/test_include_outranks_test_include_path.c +16 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock_ambiguous.c +14 -0
- data/assets/fixtures/header_include_path_validation/test_test_include_path_outranks_include.c +17 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/gamma/dup_gamma.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_alpha.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_bare.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_beta.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_override.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive_noop.c +16 -0
- data/assets/fixtures/parent_directory_references/alpha/extra.c +4 -0
- data/assets/fixtures/parent_directory_references/common/helper.c +6 -0
- data/assets/fixtures/parent_directory_references/common/helper.h +6 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_include.c +10 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_source.c +16 -0
- data/assets/fixtures/plain_inline_module.h +9 -0
- data/assets/fixtures/same_named_modules/include/drivers/spi/config.h +6 -0
- data/assets/fixtures/same_named_modules/include/drivers/uart/config.h +6 -0
- data/assets/fixtures/same_named_modules/src/drivers/spi/config.c +8 -0
- data/assets/fixtures/same_named_modules/src/drivers/uart/config.c +10 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs.c +26 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked.c +20 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked_traditional.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_both_modules.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_bare.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_partial_only.c +20 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/main.c +11 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_baz_bar.c +10 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_both_bars.c +12 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_foo_bar.c +10 -0
- data/assets/{test_example_file_boom.c → fixtures/test_nosanitize_boom.c} +9 -0
- data/assets/{test_example_file_crash_assert.c → fixtures/test_nosanitize_crash_assert.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv.c → fixtures/test_nosanitize_crash_sigsegv.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv_with_param.c → fixtures/test_nosanitize_crash_sigsegv_with_param.c} +8 -0
- data/assets/fixtures/test_nosanitize_heap_buffer_overflow.c +31 -0
- data/assets/fixtures/test_nosanitize_leak.c +34 -0
- data/assets/fixtures/test_nosanitize_two_findings.c +36 -0
- data/assets/{test_example_file_ub_shift_overflow.c → fixtures/test_nosanitize_ub_shift_overflow.c} +9 -0
- data/assets/fixtures/test_plain_inline_module.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/alpha/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/beta/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_alpha.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_ambiguous.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_beta.c +15 -0
- data/assets/fixtures/tests_with_conditional_includes/src/feature_extra2.h +13 -0
- data/assets/fixtures/tests_with_conditional_includes/src/macro_target_extra.h +13 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.c +19 -3
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.h +1 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.c +17 -1
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget.c +12 -4
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget_feature.c +8 -5
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/FeatureConfig.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Gpt.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModuleConfig.h +17 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart1.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart2.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/drivers/widget.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01.c +21 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01_legacy.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_02.c +31 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_FeatureConfig.c +15 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_reader.c +13 -0
- data/assets/fixtures/tests_with_duplicate_test_names/integration/test_foo.c +21 -0
- data/assets/fixtures/tests_with_duplicate_test_names/unit/test_foo.c +21 -0
- data/assets/fixtures/tests_with_fallback_conditionals/src/conditional_module.c +28 -0
- data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/test/test_conditionals.c +8 -1
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_lower.s +2 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_upper.S +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.c +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.h +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/test/test_counter_module.c +27 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/app/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/drivers/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.c +30 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/shared/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/test/test_sensor.c +32 -0
- data/bin/actionator.rb +234 -0
- data/bin/app_cfg.rb +28 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +96 -58
- data/bin/cli_helper.rb +95 -49
- data/bin/cli_options_transform.rb +22 -0
- data/bin/{configinator.rb → composinator.rb} +39 -32
- data/bin/mixin_resolvinator.rb +124 -0
- data/bin/mixin_standardizer.rb +31 -61
- data/bin/mixinator.rb +27 -29
- data/bin/mixins.rb +0 -5
- data/bin/objects.yml +20 -7
- data/bin/path_validator.rb +6 -5
- data/bin/projectinator.rb +51 -142
- data/bin/rake_patches.rb +36 -2
- data/bin/recursive_merger.rb +7 -1
- data/bin/versionator.rb +2 -3
- data/ceedling.gemspec +83 -12
- data/docs/BreakingChanges.md +46 -2
- data/docs/CONTRIBUTING.md +45 -29
- data/docs/CeedlingPullRequestChecklist.md +10 -9
- data/docs/Changelog.md +337 -37
- data/docs/KnownIssues.md +30 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +46 -2
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +35 -0
- data/examples/temp_sensor/mixin/add_bullseye.yml +19 -0
- data/examples/wondrous_forest/README.md +3 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.c +21 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.h +14 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.c +23 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.h +14 -0
- data/examples/wondrous_forest/test/TestCalibration.c +39 -0
- data/lib/ceedling/batchinator.rb +81 -22
- data/lib/ceedling/c_extractor/README.md +61 -0
- data/lib/ceedling/c_extractor/c_extractor.rb +33 -2
- data/lib/ceedling/c_extractor/c_extractor_code_text.rb +18 -10
- data/lib/ceedling/c_extractor/c_extractor_constants.rb +10 -10
- data/lib/ceedling/c_extractor/c_extractor_declarations.rb +14 -14
- data/lib/ceedling/c_extractor/c_extractor_functions.rb +10 -13
- data/lib/ceedling/c_extractor/c_extractor_preprocessing.rb +77 -0
- data/lib/ceedling/c_extractor/c_extractor_types.rb +8 -5
- data/lib/ceedling/ceedling.h +33 -0
- data/lib/ceedling/config/config_matchinator.rb +36 -13
- data/lib/ceedling/config/configurator.rb +370 -531
- data/lib/ceedling/config/configurator_builder.rb +253 -365
- data/lib/ceedling/config/configurator_plugins.rb +68 -102
- data/lib/ceedling/config/configurator_setup.rb +360 -616
- data/lib/ceedling/config/configurator_validator.rb +114 -142
- data/lib/ceedling/config/line_marker_suppressors.rb +67 -0
- data/lib/ceedling/constants.rb +60 -6
- data/lib/ceedling/defaults.rb +28 -14
- data/lib/ceedling/defineinator.rb +9 -4
- data/lib/ceedling/dependencies/README.md +69 -0
- data/lib/ceedling/dependencies/dependency_cache_store.rb +160 -0
- data/lib/ceedling/dependencies/dependency_debug_tree.rb +129 -0
- data/lib/ceedling/dependencies/dependency_differ.rb +127 -0
- data/lib/ceedling/dependencies/dependency_hasher.rb +94 -0
- data/lib/ceedling/dependencies/dependency_path_normalizer.rb +80 -0
- data/lib/ceedling/dependencies/dependency_tracker.rb +405 -0
- data/lib/ceedling/dependencies/dependinator.rb +65 -0
- data/lib/ceedling/dependencies/gcc_dependency_parser.rb +86 -0
- data/lib/ceedling/encodinator.rb +23 -11
- data/lib/ceedling/file_finder.rb +373 -89
- data/lib/ceedling/file_finder_helper.rb +44 -33
- data/lib/ceedling/file_path_collection_utils.rb +17 -4
- data/lib/ceedling/file_path_utils.rb +310 -52
- data/lib/ceedling/file_wrapper.rb +275 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +192 -70
- data/lib/ceedling/generators/generator_helper.rb +116 -69
- data/lib/ceedling/generators/generator_mocks.rb +13 -8
- data/lib/ceedling/generators/generator_partials.rb +47 -15
- data/lib/ceedling/generators/generator_test_results.rb +29 -17
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +199 -107
- data/lib/ceedling/generators/generator_test_results_sanity_checker.rb +1 -1
- data/lib/ceedling/includes/include_factory.rb +21 -6
- data/lib/ceedling/includes/include_pathinator.rb +40 -4
- data/lib/ceedling/includes/includes.rb +215 -61
- data/lib/ceedling/loginator.rb +13 -4
- data/lib/ceedling/objects.yml +216 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +118 -26
- data/lib/ceedling/partials/partializer_config.rb +141 -8
- data/lib/ceedling/partials/partializer_helper.rb +88 -2
- data/lib/ceedling/partials/partializer_utils.rb +1 -1
- data/lib/ceedling/partials/partials.rb +4 -4
- data/lib/ceedling/path_matcher.rb +163 -0
- data/lib/ceedling/path_mirror.rb +73 -0
- data/lib/ceedling/plugins/plugin.rb +1 -1
- data/lib/ceedling/plugins/plugin_manager.rb +31 -15
- data/lib/ceedling/plugins/plugin_manager_helper.rb +5 -1
- data/lib/ceedling/plugins/plugin_reportinator.rb +36 -7
- data/lib/ceedling/plugins/plugin_reportinator_helper.rb +3 -3
- data/lib/ceedling/plugins/report_log_writer_plugin.rb +66 -0
- data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +18 -5
- data/lib/ceedling/preprocess/README.md +135 -120
- data/lib/ceedling/preprocess/c_comment_scanner.rb +9 -7
- data/lib/ceedling/preprocess/c_preprocessor_conditionals.rb +27 -10
- data/lib/ceedling/preprocess/preprocessinator.rb +253 -217
- data/lib/ceedling/preprocess/preprocessinator_bare_includes_extractor.rb +7 -10
- data/lib/ceedling/preprocess/preprocessinator_code_finder.rb +8 -6
- data/lib/ceedling/preprocess/preprocessinator_comment_stripper.rb +5 -3
- data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +86 -82
- data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +182 -163
- data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +174 -8
- data/lib/ceedling/preprocess/preprocessinator_reconstructor.rb +41 -20
- data/lib/ceedling/quote_include_isolator.rb +129 -0
- data/lib/ceedling/rake_app/rake_task_registry.rb +9 -9
- data/lib/ceedling/rake_app/rake_wrapper.rb +0 -13
- data/lib/ceedling/rake_app/rakefile_component_resolver.rb +24 -12
- data/lib/ceedling/rake_app/test_task_name.rb +29 -0
- data/lib/ceedling/rakefile.rb +3 -1
- data/lib/ceedling/{tasks_base.rake → rakefiles/base/tasks_base.rake} +1 -1
- data/lib/ceedling/{tasks_filesystem.rake → rakefiles/base/tasks_filesystem.rake} +3 -0
- data/lib/ceedling/rakefiles/release/rules_release.rake +52 -0
- data/lib/ceedling/{erb_wrapper.rb → rakefiles/release/tasks_release.rake} +5 -8
- data/lib/ceedling/{rules_tests.rake → rakefiles/tests/rules_tests.rake} +4 -18
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +54 -0
- data/lib/ceedling/{tasks_tests.rake → rakefiles/tests/tasks_tests.rake} +11 -20
- data/lib/ceedling/rakefiles/tests/tasks_tests_generate.rake +55 -0
- data/lib/ceedling/release_invoker/README.md +35 -0
- data/lib/ceedling/release_invoker/release_build_executor.rb +263 -0
- data/lib/ceedling/release_invoker/release_build_planner.rb +80 -0
- data/lib/ceedling/release_invoker/release_invoker.rb +78 -0
- data/lib/ceedling/release_invoker/release_invoker_types.rb +40 -0
- data/lib/ceedling/reportinator.rb +18 -2
- data/lib/ceedling/ruby_expandinator.rb +40 -1
- data/lib/ceedling/setupinator.rb +13 -3
- data/lib/ceedling/system_wrapper.rb +17 -0
- data/lib/ceedling/templateinator.rb +146 -0
- data/lib/ceedling/test_context_extractor.rb +59 -28
- data/lib/ceedling/test_invoker/HEADER_COLLISIONS.md +41 -0
- data/lib/ceedling/test_invoker/PIPELINE.md +142 -0
- data/lib/ceedling/test_invoker/README.md +6 -0
- data/lib/ceedling/test_invoker/mock_locator.rb +49 -0
- data/lib/ceedling/test_invoker/partials_manager.rb +426 -0
- data/lib/ceedling/test_invoker/standin_headerinator.rb +136 -0
- data/lib/ceedling/test_invoker/test_bare_includes_extractinator.rb +117 -0
- data/lib/ceedling/test_invoker/test_build_executor.rb +800 -429
- data/lib/ceedling/test_invoker/test_build_planner.rb +175 -70
- data/lib/ceedling/test_invoker/test_build_setup.rb +132 -241
- data/lib/ceedling/test_invoker/test_build_validations.rb +102 -0
- data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +148 -0
- data/lib/ceedling/test_invoker/test_includes_extractinator.rb +34 -0
- data/lib/ceedling/test_invoker/test_includes_preprocessinator.rb +118 -0
- data/lib/ceedling/test_invoker/test_includes_reconcilinator.rb +149 -0
- data/lib/ceedling/test_invoker/test_invoker.rb +16 -183
- data/lib/ceedling/test_invoker/test_invoker_types.rb +85 -16
- data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +121 -0
- data/lib/ceedling/test_invoker/test_pipeline_manager.rb +303 -0
- data/lib/ceedling/test_invoker/test_runner_generatinator.rb +105 -0
- data/lib/ceedling/test_invoker/test_search_paths.rb +73 -0
- data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +78 -0
- data/lib/ceedling/tool_executor.rb +42 -13
- data/lib/ceedling/tool_executor_helper.rb +1 -1
- data/lib/ceedling/tool_validator.rb +124 -123
- data/lib/ceedling/yaml_wrapper.rb +5 -3
- data/lib/version.rb +19 -2
- data/mkdocs.prerelease.yml +42 -0
- data/mkdocs.yml +10 -2
- data/plugins/bullseye/bullseye.rake +71 -111
- data/plugins/bullseye/config/defaults.yml +12 -54
- data/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/plugins/bullseye/lib/bullseye.rb +511 -120
- data/plugins/bullseye/lib/bullseye_constants.rb +100 -0
- data/plugins/command_hooks/lib/command_hooks.rb +117 -199
- data/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb +72 -27
- data/plugins/cppcheck/config/defaults.yml +6 -1
- data/plugins/cppcheck/config/defaults_cppcheck.rb +5 -1
- data/plugins/cppcheck/cppcheck.rake +7 -1
- data/plugins/cppcheck/lib/cppcheck.rb +175 -26
- data/plugins/cppcheck/lib/cppcheck_constants.rb +12 -0
- data/plugins/cppcheck/lib/cppcheck_reports.rb +5 -1
- data/plugins/dependencies/Rakefile +14 -2
- data/plugins/dependencies/config/defaults.yml +9 -6
- data/plugins/dependencies/dependencies.rake +46 -76
- data/plugins/dependencies/example/boss/project.yml +1 -1
- data/plugins/dependencies/example/supervisor/project.yml +1 -1
- data/plugins/dependencies/example/version.tar.gzip +0 -0
- data/plugins/dependencies/lib/dependencies.rb +232 -427
- data/plugins/dependencies/lib/dependency_commands.rb +72 -0
- data/plugins/dependencies/lib/dependency_environment.rb +57 -0
- data/plugins/dependencies/lib/dependency_spec.rb +145 -0
- data/plugins/fff/.rspec +1 -0
- data/plugins/fff/Rakefile +14 -2
- data/plugins/fff/examples/fff_example/project.yml +1 -1
- data/plugins/fff/lib/fff.rb +30 -9
- data/plugins/fff/lib/fff_mock_generator.rb +142 -128
- data/plugins/fff/spec/fff_mock_header_generator_spec.rb +15 -0
- data/plugins/fff/spec/fff_mock_source_generator_spec.rb +14 -0
- data/plugins/fff/spec/spec_helper.rb +45 -0
- data/plugins/fff/src/fff_unity_helper.h +5 -0
- data/plugins/fff/vendor/fff/fakegen.rb +5 -4
- data/plugins/fff/vendor/fff/fff.h +4 -4
- data/plugins/gcov/config/defaults.yml +5 -0
- data/plugins/gcov/gcov.rake +16 -15
- data/plugins/gcov/lib/console_reportinator.rb +140 -20
- data/plugins/gcov/lib/gcov.rb +155 -60
- data/plugins/gcov/lib/gcov_constants.rb +4 -7
- data/plugins/gcov/lib/gcov_reportinator.rb +90 -0
- data/plugins/gcov/lib/gcov_types.rb +62 -1
- data/plugins/gcov/lib/gcovr_reportinator.rb +255 -213
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +122 -44
- data/plugins/module_generator/Rakefile +4 -4
- data/plugins/module_generator/config/module_generator.yml +0 -1
- data/plugins/module_generator/example/project.yml +1 -1
- data/plugins/module_generator/lib/module_generator.rb +117 -87
- data/plugins/module_generator/lib/module_generator_options.rb +150 -0
- data/plugins/module_generator/lib/module_generator_project.rb +45 -0
- data/plugins/module_generator/lib/module_generator_request.rb +83 -0
- data/plugins/module_generator/lib/module_generator_test_file.rb +68 -0
- data/plugins/module_generator/lib/module_generator_unity.rb +24 -0
- data/plugins/module_generator/module_generator.rake +24 -46
- data/plugins/report_build_warnings_log/config/defaults.yml +4 -1
- data/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb +47 -55
- data/plugins/report_build_warnings_log/lib/warning_collector.rb +140 -0
- data/plugins/report_build_warnings_log/lib/warning_reports.rb +135 -0
- data/plugins/report_tests_gtestlike_stdout/assets/test_results.template +3 -0
- data/{spec/units/configurator_builder_spec.rb → plugins/report_tests_gtestlike_stdout/config/defaults.yml} +6 -10
- data/plugins/report_tests_gtestlike_stdout/lib/gtestlike_report.rb +168 -0
- data/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb +25 -1
- data/plugins/report_tests_ide_stdout/assets/test_results.template +50 -0
- data/plugins/report_tests_ide_stdout/config/defaults.yml +13 -0
- data/plugins/report_tests_ide_stdout/lib/ide_report_lines.rb +103 -0
- data/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb +12 -4
- data/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb +33 -51
- data/plugins/report_tests_log_factory/lib/html_tests_reporter.rb +286 -295
- data/plugins/report_tests_log_factory/lib/json_tests_reporter.rb +22 -35
- data/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb +91 -133
- data/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb +72 -86
- data/plugins/report_tests_log_factory/lib/tests_reporter.rb +31 -12
- data/plugins/report_tests_pretty_stdout/assets/{template.erb → test_results.template} +8 -8
- data/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb +18 -48
- data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +13 -2
- data/plugins/sanitize/config/defaults.yml +44 -0
- data/plugins/sanitize/config/defaults_sanitize.rb +20 -0
- data/plugins/sanitize/lib/sanitize.rb +174 -0
- data/plugins/sanitize/lib/sanitize_config.rb +110 -0
- data/plugins/sanitize/lib/sanitize_constants.rb +13 -0
- data/plugins/sanitize/lib/sanitize_findings.rb +85 -0
- data/plugins/sanitize/lib/sanitize_records.rb +115 -0
- data/plugins/sanitize/lib/sanitize_reports.rb +135 -0
- data/plugins/sanitize/sanitize.rake +108 -0
- data/plugins/valgrind/config/defaults.yml +7 -1
- data/plugins/valgrind/config/defaults_valgrind.rb +6 -1
- data/plugins/valgrind/lib/valgrind.rb +202 -39
- data/plugins/valgrind/lib/valgrind_constants.rb +4 -0
- data/plugins/valgrind/lib/valgrind_report.rb +52 -0
- data/plugins/valgrind/valgrind.rake +37 -15
- data/site-local/404.html +239 -19
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js → bundle.c21346df.min.js} +3 -3
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js.map → bundle.c21346df.min.js.map} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js → search.a7633da7.min.js} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js.map → search.a7633da7.min.js.map} +1 -1
- data/site-local/assets/stylesheets/main.57a0d79d.min.css +6 -0
- data/site-local/assets/stylesheets/main.57a0d79d.min.css.map +1 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css +4 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css.map +1 -0
- data/site-local/configuration/environment-vars.html +239 -19
- data/site-local/configuration/global-collections.html +239 -24
- data/site-local/configuration/index.html +240 -20
- data/site-local/configuration/loading.html +251 -27
- data/site-local/configuration/mixins.html +247 -26
- data/site-local/configuration/parallel-builds.html +239 -19
- data/site-local/configuration/project-file.html +268 -37
- data/site-local/configuration/reference/cexception.html +246 -25
- data/site-local/configuration/reference/cmock.html +272 -19
- data/site-local/configuration/reference/defines.html +263 -34
- data/site-local/configuration/reference/environment.html +246 -26
- data/site-local/configuration/reference/extension.html +352 -21
- data/site-local/configuration/reference/files.html +258 -24
- data/site-local/configuration/reference/flags.html +268 -31
- data/site-local/configuration/reference/index.html +239 -19
- data/site-local/configuration/reference/libraries.html +239 -19
- data/site-local/configuration/reference/mixins.html +239 -19
- data/site-local/configuration/reference/partials.html +240 -24
- data/site-local/configuration/reference/paths.html +269 -23
- data/site-local/configuration/reference/plugins.html +239 -19
- data/site-local/configuration/reference/project.html +292 -29
- data/site-local/configuration/reference/release-build.html +247 -19
- data/site-local/configuration/reference/test-build.html +281 -29
- data/site-local/configuration/reference/test-runner.html +279 -22
- data/site-local/configuration/reference/tools.html +257 -31
- data/site-local/configuration/reference/unity.html +271 -20
- data/site-local/configuration/which-ceedling.html +239 -19
- data/site-local/development/index.html +245 -19
- data/site-local/development/plugins/configuration.html +260 -22
- data/site-local/development/plugins/index.html +258 -20
- data/site-local/development/plugins/plugin-subclass.html +912 -174
- data/site-local/development/plugins/rake-tasks.html +269 -21
- data/site-local/development/releases.html +4759 -0
- data/site-local/development/workflow.html +1023 -58
- data/site-local/getting-started/builds.html +4593 -0
- data/site-local/getting-started/command-line.html +409 -39
- data/site-local/getting-started/example-projects/cipher-quest.html +239 -19
- data/site-local/getting-started/example-projects/index.html +240 -20
- data/site-local/getting-started/example-projects/temp-sensor.html +239 -19
- data/site-local/getting-started/example-projects/wondrous-forest.html +239 -19
- data/site-local/getting-started/index.html +246 -19
- data/site-local/getting-started/installation.html +249 -27
- data/site-local/getting-started/quick-start.html +242 -20
- data/site-local/help.html +246 -19
- data/site-local/index.html +284 -27
- data/site-local/overview/build-system.html +240 -20
- data/site-local/overview/index.html +239 -19
- data/site-local/overview/test-environments.html +248 -19
- data/site-local/overview/tools-and-frameworks.html +239 -19
- data/site-local/plugins/beep.html +242 -19
- data/site-local/plugins/bullseye/index.html +5068 -0
- data/site-local/plugins/bullseye/licensing.html +4826 -0
- data/site-local/plugins/command-hooks.html +258 -34
- data/site-local/plugins/compile-commands-json-db.html +247 -22
- data/site-local/plugins/cppcheck.html +1073 -268
- data/site-local/plugins/dependencies.html +927 -249
- data/site-local/plugins/fff.html +288 -21
- data/site-local/plugins/gcov/examples.html +243 -20
- data/site-local/plugins/gcov/gcovr.html +559 -71
- data/site-local/plugins/gcov/index.html +242 -19
- data/site-local/plugins/gcov/overview.html +253 -23
- data/site-local/plugins/gcov/reportgenerator.html +380 -46
- data/site-local/plugins/gcov/reporting.html +339 -105
- data/site-local/plugins/gcov/setup.html +244 -20
- data/site-local/plugins/gcov/tool-versions.html +292 -24
- data/site-local/plugins/gcov/troubleshooting.html +265 -42
- data/site-local/plugins/index.html +285 -41
- data/site-local/plugins/module-generator.html +770 -200
- data/site-local/plugins/report-build-warnings-log.html +569 -38
- data/site-local/plugins/report-tests-gtestlike-stdout.html +458 -89
- data/site-local/plugins/report-tests-ide-stdout.html +645 -56
- data/site-local/plugins/report-tests-log-factory.html +364 -111
- data/site-local/plugins/report-tests-pretty-stdout.html +243 -20
- data/site-local/plugins/report-tests-raw-output-log.html +242 -19
- data/site-local/plugins/report-tests-teamcity-stdout.html +252 -29
- data/site-local/plugins/sanitize.html +5322 -0
- data/site-local/plugins/valgrind.html +414 -34
- data/site-local/{plugins/bullseye.html → project/index.html} +288 -222
- data/site-local/project/release-history.html +242 -22
- data/site-local/project/sbom.html +4712 -0
- data/site-local/project/upgrade.html +241 -21
- data/site-local/reference/build-directives.html +248 -19
- data/site-local/reference/command-line.html +364 -21
- data/site-local/reference/environment-vars.html +239 -19
- data/site-local/reference/gcov-plugin.html +483 -23
- data/site-local/reference/global-collections.html +240 -20
- data/site-local/reference/index.html +239 -19
- data/site-local/reference/partials-macros.html +249 -19
- data/site-local/reference/project-configuration.html +239 -19
- data/site-local/sitemap.xml.gz +0 -0
- data/{docs/mkdocs/snapshot/assets → site-local/snapshot/assets/features}/project.yml +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +249 -29
- data/site-local/snapshot/examples/temp_sensor/index.html +241 -21
- data/site-local/snapshot/examples/wondrous_forest/index.html +256 -30
- data/site-local/snapshot/plugins/bullseye/config/defaults.yml +24 -0
- data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/site-local/snapshot/plugins/gcov/config/defaults.yml +5 -0
- data/site-local/testing-guide/build-directives.html +331 -35
- data/site-local/testing-guide/conventions.html +671 -160
- data/site-local/testing-guide/frameworks.html +244 -24
- data/site-local/testing-guide/index.html +239 -26
- data/site-local/testing-guide/partials/configuration.html +241 -21
- data/site-local/testing-guide/partials/conventions.html +308 -23
- data/site-local/testing-guide/partials/directives.html +452 -58
- data/site-local/testing-guide/partials/example.html +247 -27
- data/site-local/testing-guide/partials/index.html +246 -19
- data/site-local/testing-guide/partials/overview.html +239 -19
- data/site-local/testing-guide/partials/variables.html +244 -24
- data/site-local/testing-guide/test-cases.html +246 -26
- data/site-local/testing-guide/test-sample.html +245 -25
- data/site-local/testing-guide/test-suite-anatomy.html +239 -19
- data/spec/integration/actionator_file_operations_spec.rb +287 -0
- data/spec/integration/analysis_tool_output_spec.rb +204 -0
- data/spec/{units/c_extractor/c_extractor_integration_spec.rb → integration/c_extractor_composition_spec.rb} +196 -17
- data/spec/integration/command_hooks_plugin_spec.rb +152 -0
- data/spec/integration/compile_commands_json_db_spec.rb +76 -0
- data/spec/integration/configurator_pipeline_spec.rb +190 -0
- data/spec/integration/configurator_plugins_spec.rb +122 -0
- data/spec/integration/configurator_validation_spec.rb +98 -0
- data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +396 -0
- data/spec/integration/dependencies/dependency_tracker_core_spec.rb +284 -0
- data/spec/integration/dependencies/dependency_tracker_diagnose_spec.rb +224 -0
- data/spec/integration/dependencies/dependency_tracker_filename_handling_spec.rb +118 -0
- data/spec/integration/dependencies/dependency_tracker_gcc_deps_spec.rb +199 -0
- data/spec/integration/dependencies/dependency_tracker_pruning_spec.rb +167 -0
- data/spec/integration/dependencies_plugin_spec.rb +473 -0
- data/spec/integration/erb_dependency_removed_spec.rb +167 -0
- data/spec/integration/includes_extraction_spec.rb +612 -0
- data/spec/integration/mixin_loading_spec.rb +414 -0
- data/spec/integration/module_generator_spec.rb +436 -0
- data/spec/integration/partials_fallback_preprocessing_spec.rb +316 -0
- data/spec/integration/partials_header_composition_spec.rb +889 -0
- data/spec/integration/partials_module_resolution_spec.rb +372 -0
- data/spec/integration/partials_symbol_linkage_spec.rb +371 -0
- data/spec/integration/preprocessing_transient_io_retry_spec.rb +135 -0
- data/spec/integration/quote_include_isolator_spec.rb +167 -0
- data/spec/integration/rake_task_registry_plugins_spec.rb +95 -0
- data/spec/integration/report_build_warnings_log_spec.rb +170 -0
- data/spec/integration/report_tests_log_factory_spec.rb +100 -0
- data/spec/integration/sanitizer_exclusions_spec.rb +126 -0
- data/spec/integration/system_harness_sanitizers_spec.rb +104 -0
- data/spec/integration/test_build_parallel_barrier_spec.rb +89 -0
- data/spec/integration/test_executable_manifest_spec.rb +118 -0
- data/spec/integration/test_includes_extractinator_spec.rb +293 -0
- data/spec/integration/tool_executor_spec.rb +224 -0
- data/spec/integration/tool_validator_spec.rb +133 -0
- data/spec/integration/vendor_copy_transient_io_retry_spec.rb +178 -0
- data/spec/manual/stress_test.rb +1 -1
- data/spec/support/config_yaml_helper.rb +17 -0
- data/spec/support/fixtures/sanitizer_reports/clang_asan_heap.txt +45 -0
- data/spec/support/fixtures/sanitizer_reports/clang_ubsan_shift.txt +5 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_heap.txt +47 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_leak.txt +10 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_segv.txt +6 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_ubsan_shift.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__all_pass.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_branches_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_functions_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_none.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__empty.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__gcov_context.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__mixed_all.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_matching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_multiline.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_nonmatching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_with_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__stdout_only.txt +6 -0
- data/spec/support/fixtures/templates/ide__all_pass.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_branches_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_functions_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_none.txt +10 -0
- data/spec/support/fixtures/templates/ide__empty.txt +8 -0
- data/spec/support/fixtures/templates/ide__gcov_context.txt +28 -0
- data/spec/support/fixtures/templates/ide__mixed_all.txt +29 -0
- data/spec/support/fixtures/templates/ide__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/ide__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__stdout_only.txt +16 -0
- data/spec/support/fixtures/templates/pretty__all_pass.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_branches_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_functions_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_none.txt +8 -0
- data/spec/support/fixtures/templates/pretty__empty.txt +6 -0
- data/spec/support/fixtures/templates/pretty__gcov_context.txt +31 -0
- data/spec/support/fixtures/templates/pretty__mixed_all.txt +35 -0
- data/spec/support/fixtures/templates/pretty__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/pretty__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__stdout_only.txt +15 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.log +51 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.xml +182 -0
- data/spec/support/include_guard_helper.rb +20 -0
- data/spec/support/integration/configurator_integration_helper.rb +162 -0
- data/spec/support/integration/dependency_tracker_integration_helper.rb +136 -0
- data/spec/support/integration/partials_generation_integration_helper.rb +726 -0
- data/spec/support/integration/spec_integration_helper.rb +285 -0
- data/spec/support/integration/test_includes_harness.rb +259 -0
- data/spec/support/integration/tool_executor_integration_helper.rb +55 -0
- data/spec/support/spec_helper.rb +41 -0
- data/spec/support/system/sanitizers/asan_ubsan.yml +82 -0
- data/spec/support/system/sanitizers/asan_ubsan_leaks.yml +57 -0
- data/spec/support/system/simplecov_boot.rb +66 -0
- data/spec/support/system/spec_system_helper.rb +376 -16
- data/spec/support/system/system_context.rb +181 -59
- data/spec/support/template_render_cases.rb +166 -0
- data/spec/system/bracket_path_handling_spec.rb +175 -0
- data/spec/system/build_output_mirroring_spec.rb +89 -0
- data/spec/system/build_recovery_spec.rb +382 -0
- data/spec/system/bullseye_deployment_spec.rb +102 -0
- data/spec/system/cli_surface_spec.rb +245 -0
- data/spec/system/command_hooks_spec.rb +117 -0
- data/spec/system/conditional_include_macro_visibility_spec.rb +32 -124
- data/spec/system/conditional_mock_includes_spec.rb +181 -0
- data/spec/system/cppcheck_deployment_spec.rb +26 -8
- data/spec/system/delta_builds_spec.rb +751 -0
- data/spec/system/deployment_as_gem_spec.rb +7 -0
- data/spec/system/deployment_as_vendor_spec.rb +29 -145
- data/spec/system/dumpconfig_spec.rb +137 -0
- data/spec/system/encoding_stress_spec.rb +7 -4
- data/spec/system/example_cipher_quest_spec.rb +25 -100
- data/spec/system/example_temp_sensor_spec.rb +30 -172
- data/spec/system/example_wondrous_forest_spec.rb +25 -62
- data/spec/system/extension_multiple_values_spec.rb +75 -0
- data/spec/system/files_paths_reporting_spec.rb +154 -0
- data/spec/system/gcov_deployment_spec.rb +72 -3
- data/spec/system/header_include_path_validation_spec.rb +222 -0
- data/spec/system/implicit_source_header_correspondence_disambiguation_spec.rb +100 -0
- data/spec/system/include_path_reconciliation_spec.rb +64 -0
- data/spec/system/mixin_ordering_spec.rb +30 -415
- data/spec/system/mocks_partials_configuration_validation_spec.rb +126 -0
- data/spec/system/parent_directory_reference_spec.rb +114 -0
- data/spec/system/partials_module_disambiguation_spec.rb +143 -0
- data/spec/system/pinned_thread_count_spec.rb +102 -0
- data/spec/system/plugin_delta_builds_spec.rb +179 -0
- data/spec/system/preprocessing_encoding_spec.rb +87 -4
- data/spec/system/preprocessing_fallback_conditionals_spec.rb +19 -25
- data/spec/system/preprocessing_parameterized_tests_spec.rb +2 -2
- data/spec/system/rake_release_task_path_disambiguation_spec.rb +97 -0
- data/spec/system/rake_test_task_path_disambiguation_spec.rb +118 -0
- data/spec/system/report_and_tooling_plugins_spec.rb +327 -0
- data/spec/system/ruby_replacement_spec.rb +1 -1
- data/spec/system/same_named_modules_spec.rb +115 -0
- data/spec/system/sanitize_deployment_spec.rb +64 -0
- data/spec/system/shuffle_tests_spec.rb +139 -0
- data/spec/system/sibling_header_collision_spec.rb +620 -0
- data/spec/system/subdir_include_preservation_spec.rb +63 -0
- data/spec/system/support/bullseye_common_test_cases.rb +369 -0
- data/spec/system/support/bullseye_helpers.rb +70 -0
- data/spec/system/support/common_test_cases.rb +167 -43
- data/spec/system/support/cppcheck_common_test_cases.rb +80 -0
- data/spec/system/support/cppcheck_helpers.rb +10 -8
- data/spec/system/support/gcov_common_test_cases.rb +173 -37
- data/spec/system/support/gcov_helpers.rb +3 -3
- data/spec/system/support/gcov_partials_test_cases.rb +48 -2
- data/spec/system/support/sanitize_common_test_cases.rb +222 -0
- data/spec/system/support/sanitize_helpers.rb +27 -0
- data/spec/system/support/valgrind_common_test_cases.rb +116 -16
- data/spec/system/support/valgrind_helpers.rb +3 -4
- data/spec/system/test_pipeline_stop_points_spec.rb +160 -0
- data/spec/system/test_runner_system_include_spec.rb +19 -41
- data/spec/system/test_source_file_directive_spec.rb +235 -0
- data/spec/system/upgrade_as_vendor_spec.rb +25 -46
- data/spec/system/valgrind_deployment_spec.rb +41 -0
- data/spec/units/batchinator_spec.rb +314 -0
- data/spec/units/bin/actionator_spec.rb +412 -0
- data/spec/units/bin/app_cfg_spec.rb +100 -0
- data/spec/units/bin/cli_handler_spec.rb +205 -0
- data/spec/units/bin/cli_helper_spec.rb +248 -10
- data/spec/units/bin/cli_options_transform_spec.rb +49 -0
- data/spec/units/bin/composinator_spec.rb +236 -0
- data/spec/units/bin/{projectinator_mixin_spec.rb → mixin_resolvinator_spec.rb} +122 -83
- data/spec/units/bin/mixin_standardizer_spec.rb +4 -3
- data/spec/units/bin/mixinator_spec.rb +58 -22
- data/spec/units/bin/path_validator_spec.rb +112 -0
- data/spec/units/bin/projectinator_spec.rb +223 -0
- data/spec/units/bin/rake_patches_spec.rb +52 -0
- data/spec/units/bin/recursive_merger_spec.rb +22 -0
- data/spec/units/bin/versionator_spec.rb +104 -0
- data/spec/units/c_extractor/c_extractor_code_text_spec.rb +4 -4
- data/spec/units/c_extractor/c_extractor_declarations_spec.rb +70 -0
- data/spec/units/c_extractor/c_extractor_functions_spec.rb +75 -1
- data/spec/units/c_extractor/c_extractor_preprocessing_spec.rb +158 -0
- data/spec/units/c_extractor/c_extractor_spec.rb +236 -6
- data/spec/units/ceedling/templateinator_golden_spec.rb +84 -0
- data/spec/units/ceedling/templateinator_spec.rb +188 -0
- data/spec/units/config/configurator_builder_spec.rb +444 -0
- data/spec/units/config/configurator_plugins_spec.rb +160 -0
- data/spec/units/config/configurator_setup_spec.rb +724 -6
- data/spec/units/config/configurator_spec.rb +961 -0
- data/spec/units/config/configurator_validator_spec.rb +259 -0
- data/spec/units/config/line_marker_suppressors_spec.rb +89 -0
- data/spec/units/config_matchinator_spec.rb +103 -0
- data/spec/units/defineinator_spec.rb +158 -0
- data/spec/units/dependencies/dependency_cache_store_spec.rb +364 -0
- data/spec/units/dependencies/dependency_debug_tree_spec.rb +189 -0
- data/spec/units/dependencies/dependency_differ_spec.rb +139 -0
- data/spec/units/dependencies/dependency_hasher_spec.rb +141 -0
- data/spec/units/dependencies/dependency_path_normalizer_spec.rb +111 -0
- data/spec/units/dependencies/dependency_tracker_spec.rb +905 -0
- data/spec/units/dependencies/dependinator_spec.rb +99 -0
- data/spec/units/dependencies/gcc_dependency_parser_spec.rb +152 -0
- data/spec/units/encodinator_spec.rb +92 -0
- data/spec/units/file_finder_helper_spec.rb +99 -15
- data/spec/units/file_finder_spec.rb +495 -0
- data/spec/units/file_path_collection_utils_spec.rb +9 -0
- data/spec/units/file_path_utils_spec.rb +736 -0
- data/spec/units/file_wrapper_spec.rb +486 -0
- data/spec/units/filename_extension_spec.rb +120 -0
- data/spec/units/flaginator_spec.rb +114 -0
- data/spec/units/generators/generator_helper_spec.rb +113 -0
- data/spec/units/generators/generator_mocks_spec.rb +131 -0
- data/spec/units/generators/generator_partials_spec.rb +336 -160
- data/spec/units/generators/generator_spec.rb +317 -0
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +169 -9
- data/spec/units/generators/generator_test_results_sanity_checker_spec.rb +14 -6
- data/spec/units/generators/generator_test_results_spec.rb +65 -8
- data/spec/units/generators/generator_test_runner_spec.rb +1 -1
- data/spec/units/includes/include_factory_spec.rb +53 -0
- data/spec/units/includes/include_pathinator_spec.rb +269 -0
- data/spec/units/includes/include_spec.rb +8 -4
- data/spec/units/includes/includes_spec.rb +326 -18
- data/spec/units/mock_locator_spec.rb +74 -0
- data/spec/units/parsing_parcels_spec.rb +65 -0
- data/spec/units/partials/partializer_config_spec.rb +284 -18
- data/spec/units/partials/partializer_helper_spec.rb +122 -0
- data/spec/units/partials/partializer_spec.rb +346 -71
- data/spec/units/partials/partializer_utils_spec.rb +4 -4
- data/spec/units/partials_manager_spec.rb +539 -0
- data/spec/units/path_matcher_spec.rb +193 -0
- data/spec/units/path_mirror_spec.rb +103 -0
- data/spec/units/plugin_manager_spec.rb +77 -0
- data/spec/units/plugin_reportinator_spec.rb +78 -3
- data/spec/units/plugins/bullseye_spec.rb +1068 -0
- data/spec/units/plugins/command_hooks_spec.rb +157 -0
- data/spec/units/plugins/compile_commands_json_db_spec.rb +145 -0
- data/spec/units/plugins/console_reportinator_spec.rb +370 -0
- data/spec/units/plugins/cppcheck_spec.rb +330 -4
- data/spec/units/plugins/cppunit_tests_reporter_spec.rb +118 -0
- data/spec/units/plugins/dependencies_spec.rb +295 -0
- data/spec/units/plugins/dependency_commands_spec.rb +83 -0
- data/spec/units/plugins/dependency_environment_spec.rb +64 -0
- data/spec/units/plugins/dependency_spec_spec.rb +170 -0
- data/spec/units/plugins/gcov_reportinator_spec.rb +272 -0
- data/spec/units/plugins/gcov_spec.rb +521 -0
- data/spec/units/plugins/gcovr_reportinator_spec.rb +795 -0
- data/spec/units/plugins/gtestlike_report_spec.rb +363 -0
- data/spec/units/plugins/html_tests_reporter_spec.rb +158 -0
- data/spec/units/plugins/ide_report_lines_spec.rb +229 -0
- data/spec/units/plugins/json_tests_reporter_spec.rb +87 -0
- data/spec/units/plugins/junit_tests_reporter_spec.rb +237 -0
- data/spec/units/plugins/module_generator_options_spec.rb +185 -0
- data/spec/units/plugins/module_generator_project_spec.rb +55 -0
- data/spec/units/plugins/module_generator_request_spec.rb +107 -0
- data/spec/units/plugins/module_generator_spec.rb +214 -0
- data/spec/units/plugins/module_generator_test_file_spec.rb +102 -0
- data/spec/units/plugins/module_generator_unity_spec.rb +37 -0
- data/spec/units/plugins/report_build_warnings_log_spec.rb +199 -0
- data/spec/units/plugins/report_log_writer_plugin_spec.rb +94 -0
- data/spec/units/plugins/report_tests_gtestlike_stdout_spec.rb +274 -0
- data/spec/units/plugins/report_tests_ide_stdout_spec.rb +140 -0
- data/spec/units/plugins/report_tests_log_factory_spec.rb +210 -0
- data/spec/units/plugins/report_tests_pretty_stdout_spec.rb +83 -0
- data/spec/units/plugins/report_tests_raw_output_log_spec.rb +98 -0
- data/spec/units/plugins/report_tests_stdout_plugin_spec.rb +145 -0
- data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +121 -0
- data/spec/units/plugins/reportgenerator_reportinator_spec.rb +410 -0
- data/spec/units/plugins/sanitize_config_spec.rb +119 -0
- data/spec/units/plugins/sanitize_findings_spec.rb +69 -0
- data/spec/units/plugins/sanitize_records_spec.rb +114 -0
- data/spec/units/plugins/sanitize_reports_spec.rb +84 -0
- data/spec/units/plugins/sanitize_spec.rb +300 -0
- data/spec/units/plugins/tests_reporter_spec.rb +89 -0
- data/spec/units/plugins/valgrind_spec.rb +560 -0
- data/spec/units/plugins/warning_collector_spec.rb +185 -0
- data/spec/units/plugins/warning_reports_spec.rb +150 -0
- data/spec/units/preprocess/c_comment_scanner_spec.rb +17 -17
- data/spec/units/preprocess/c_preprocessor_conditionals_spec.rb +94 -0
- data/spec/units/preprocess/preprocessinator_bare_includes_extractor_spec.rb +73 -0
- data/spec/units/preprocess/preprocessinator_code_finder_spec.rb +35 -16
- data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +129 -48
- data/spec/units/preprocess/preprocessinator_file_assembler_spec.rb +292 -9
- data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +294 -16
- data/spec/units/preprocess/preprocessinator_line_marker_includes_extractor_spec.rb +356 -6
- data/spec/units/preprocess/preprocessinator_reconstructor_spec.rb +58 -4
- data/spec/units/preprocess/preprocessinator_spec.rb +693 -5
- data/spec/units/quote_include_isolator_spec.rb +176 -0
- data/spec/units/rake_app/rake_invocation_tracker_spec.rb +94 -0
- data/spec/units/rake_app/rake_task_registry_spec.rb +263 -0
- data/spec/units/rake_app/rake_utils_spec.rb +54 -0
- data/spec/units/rake_app/rake_wrapper_spec.rb +64 -0
- data/spec/units/rake_app/rakefile_component_resolver_spec.rb +182 -0
- data/spec/units/rake_app/test_task_name_spec.rb +47 -0
- data/spec/units/release_build_executor_spec.rb +404 -0
- data/spec/units/release_build_planner_spec.rb +144 -0
- data/spec/units/release_invoker_spec.rb +127 -0
- data/spec/units/reportinator_spec.rb +35 -0
- data/spec/units/ruby_expandinator_spec.rb +36 -0
- data/spec/units/standin_headerinator_spec.rb +168 -0
- data/spec/units/system_wrapper_spec.rb +16 -0
- data/spec/units/test_build_executor_spec.rb +1693 -8
- data/spec/units/test_build_planner_spec.rb +878 -0
- data/spec/units/test_build_setup_spec.rb +583 -0
- data/spec/units/test_context_extractor_spec.rb +51 -3
- data/spec/units/test_file_preprocessinator_spec.rb +206 -0
- data/spec/units/test_includes_extractinator_spec.rb +764 -0
- data/spec/units/test_invoker/objects_wiring_spec.rb +31 -0
- data/spec/units/test_invoker_spec.rb +147 -0
- data/spec/units/test_invoker_types_spec.rb +182 -0
- data/spec/units/test_pipeline_helpers_spec.rb +100 -0
- data/spec/units/test_pipeline_manager_spec.rb +415 -0
- data/spec/units/test_runner_generatinator_spec.rb +215 -0
- data/spec/units/test_runner_manager_spec.rb +70 -0
- data/spec/units/test_search_paths_spec.rb +84 -0
- data/spec/units/test_source_file_directive_resolver_spec.rb +239 -0
- data/spec/units/tool_executor_helper_spec.rb +1 -1
- data/spec/units/tool_executor_spec.rb +571 -2
- data/spec/units/tool_validator_spec.rb +303 -24
- data/spec/units/version_spec.rb +74 -0
- data/spec/units/yaml_wrapper_spec.rb +4 -1
- data/vendor/cmock/docs/CMock_Summary.md +11 -0
- data/vendor/cmock/lib/cmock_config.rb +1 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +31 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +8 -2
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +2 -2
- data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +7 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +4 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
- data/vendor/cmock/vendor/unity/test/Makefile +9 -2
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/cmock/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/cmock/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +78 -0
- data/vendor/cmock/vendor/unity/test/tests/test_unity_test_summary.rb +58 -0
- data/vendor/diy/lib/diy/factory.rb +5 -4
- data/vendor/diy/lib/diy.rb +5 -4
- data/vendor/diy/sample_code/car.rb +5 -4
- data/vendor/diy/sample_code/chassis.rb +5 -4
- data/vendor/diy/sample_code/diy_example.rb +5 -4
- data/vendor/diy/sample_code/engine.rb +5 -4
- data/vendor/diy/sample_code/objects.yml +5 -4
- data/vendor/diy/test/constructor.rb +5 -4
- data/vendor/diy/test/diy_test.rb +5 -4
- data/vendor/diy/test/factory_test.rb +5 -4
- data/vendor/diy/test/files/broken_construction.yml +5 -4
- data/vendor/diy/test/files/cat/cat.rb +5 -4
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -4
- data/vendor/diy/test/files/cat/heritage.rb +5 -4
- data/vendor/diy/test/files/cat/needs_input.yml +5 -4
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +5 -4
- data/vendor/diy/test/files/dog/dog_model.rb +5 -4
- data/vendor/diy/test/files/dog/dog_presenter.rb +5 -4
- data/vendor/diy/test/files/dog/dog_view.rb +5 -4
- data/vendor/diy/test/files/dog/file_resolver.rb +5 -4
- data/vendor/diy/test/files/dog/other_thing.rb +5 -4
- data/vendor/diy/test/files/dog/simple.yml +5 -4
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +5 -4
- data/vendor/diy/test/files/donkey/foo.rb +5 -4
- data/vendor/diy/test/files/factory/beef.rb +5 -4
- data/vendor/diy/test/files/factory/dog.rb +5 -4
- data/vendor/diy/test/files/factory/factory.yml +5 -4
- data/vendor/diy/test/files/factory/farm/llama.rb +5 -4
- data/vendor/diy/test/files/factory/farm/pork.rb +5 -4
- data/vendor/diy/test/files/factory/kitten.rb +5 -4
- data/vendor/diy/test/files/fud/objects.yml +5 -4
- data/vendor/diy/test/files/fud/toy.rb +5 -4
- data/vendor/diy/test/files/functions/attached_things_builder.rb +5 -4
- data/vendor/diy/test/files/functions/invalid_method.yml +5 -4
- data/vendor/diy/test/files/functions/method_extractor.rb +5 -4
- data/vendor/diy/test/files/functions/nonsingleton_objects.yml +5 -4
- data/vendor/diy/test/files/functions/objects.yml +5 -4
- data/vendor/diy/test/files/functions/thing.rb +5 -4
- data/vendor/diy/test/files/functions/thing_builder.rb +5 -4
- data/vendor/diy/test/files/functions/things_builder.rb +5 -4
- data/vendor/diy/test/files/gnu/objects.yml +5 -4
- data/vendor/diy/test/files/gnu/thinger.rb +5 -4
- data/vendor/diy/test/files/goat/base.rb +5 -4
- data/vendor/diy/test/files/goat/can.rb +5 -4
- data/vendor/diy/test/files/goat/goat.rb +5 -4
- data/vendor/diy/test/files/goat/objects.yml +5 -4
- data/vendor/diy/test/files/goat/paper.rb +5 -4
- data/vendor/diy/test/files/goat/plane.rb +5 -4
- data/vendor/diy/test/files/goat/shirt.rb +5 -4
- data/vendor/diy/test/files/goat/wings.rb +5 -4
- data/vendor/diy/test/files/horse/holder_thing.rb +5 -4
- data/vendor/diy/test/files/horse/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/animal/bird.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/cat.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +5 -4
- data/vendor/diy/test/files/namespace/bad_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/class_name_combine.yml +5 -4
- data/vendor/diy/test/files/namespace/no_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/road.rb +5 -4
- data/vendor/diy/test/files/namespace/sky.rb +5 -4
- data/vendor/diy/test/files/namespace/subcontext.yml +5 -4
- data/vendor/diy/test/files/non_singleton/air.rb +5 -4
- data/vendor/diy/test/files/non_singleton/fat_cat.rb +5 -4
- data/vendor/diy/test/files/non_singleton/objects.yml +5 -4
- data/vendor/diy/test/files/non_singleton/pig.rb +5 -4
- data/vendor/diy/test/files/non_singleton/thread_spinner.rb +5 -4
- data/vendor/diy/test/files/non_singleton/tick.rb +5 -4
- data/vendor/diy/test/files/non_singleton/yard.rb +5 -4
- data/vendor/diy/test/files/yak/core_model.rb +5 -4
- data/vendor/diy/test/files/yak/core_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/core_view.rb +5 -4
- data/vendor/diy/test/files/yak/data_source.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_model.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_view.rb +5 -4
- data/vendor/diy/test/files/yak/giant_squid.rb +5 -4
- data/vendor/diy/test/files/yak/krill.rb +5 -4
- data/vendor/diy/test/files/yak/my_objects.yml +5 -4
- data/vendor/diy/test/files/yak/sub_sub_context_test.yml +5 -4
- data/vendor/diy/test/test_helper.rb +5 -4
- data/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/unity/auto/generate_test_runner.rb +5 -1
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/unity/test/tests/test_generate_test_runner.rb +29 -0
- metadata +783 -295
- data/assets/tests_with_fallback_conditionals/src/conditional_module.c +0 -18
- data/bin/actions_wrapper.rb +0 -51
- data/docs/mkdocs/assets/images/ceedling-logo-circle.png +0 -0
- data/docs/mkdocs/assets/images/ceedling.svg +0 -90
- data/docs/mkdocs/assets/images/favicon.png +0 -0
- data/docs/mkdocs/assets/stylesheets/admonitions.css +0 -152
- data/docs/mkdocs/assets/stylesheets/fixes-local.css +0 -15
- data/docs/mkdocs/assets/stylesheets/styling.css +0 -102
- data/docs/mkdocs/configuration/environment-vars.md +0 -14
- data/docs/mkdocs/configuration/global-collections.md +0 -156
- data/docs/mkdocs/configuration/index.md +0 -75
- data/docs/mkdocs/configuration/loading.md +0 -89
- data/docs/mkdocs/configuration/mixins.md +0 -607
- data/docs/mkdocs/configuration/parallel-builds.md +0 -97
- data/docs/mkdocs/configuration/project-file.md +0 -216
- data/docs/mkdocs/configuration/reference/cexception.md +0 -35
- data/docs/mkdocs/configuration/reference/cmock.md +0 -106
- data/docs/mkdocs/configuration/reference/defines.md +0 -352
- data/docs/mkdocs/configuration/reference/environment.md +0 -55
- data/docs/mkdocs/configuration/reference/extension.md +0 -63
- data/docs/mkdocs/configuration/reference/files.md +0 -154
- data/docs/mkdocs/configuration/reference/flags.md +0 -296
- data/docs/mkdocs/configuration/reference/index.md +0 -176
- data/docs/mkdocs/configuration/reference/libraries.md +0 -82
- data/docs/mkdocs/configuration/reference/mixins.md +0 -24
- data/docs/mkdocs/configuration/reference/partials.md +0 -38
- data/docs/mkdocs/configuration/reference/paths.md +0 -276
- data/docs/mkdocs/configuration/reference/plugins.md +0 -60
- data/docs/mkdocs/configuration/reference/project.md +0 -333
- data/docs/mkdocs/configuration/reference/release-build.md +0 -62
- data/docs/mkdocs/configuration/reference/test-build.md +0 -55
- data/docs/mkdocs/configuration/reference/test-runner.md +0 -61
- data/docs/mkdocs/configuration/reference/tools.md +0 -457
- data/docs/mkdocs/configuration/reference/unity.md +0 -49
- data/docs/mkdocs/configuration/which-ceedling.md +0 -77
- data/docs/mkdocs/development/index.md +0 -61
- data/docs/mkdocs/development/plugins/configuration.md +0 -164
- data/docs/mkdocs/development/plugins/index.md +0 -84
- data/docs/mkdocs/development/plugins/plugin-subclass.md +0 -513
- data/docs/mkdocs/development/plugins/rake-tasks.md +0 -54
- data/docs/mkdocs/development/workflow.md +0 -284
- data/docs/mkdocs/getting-started/command-line.md +0 -477
- data/docs/mkdocs/getting-started/example-projects/cipher-quest.md +0 -65
- data/docs/mkdocs/getting-started/example-projects/index.md +0 -49
- data/docs/mkdocs/getting-started/example-projects/temp-sensor.md +0 -60
- data/docs/mkdocs/getting-started/example-projects/wondrous-forest.md +0 -45
- data/docs/mkdocs/getting-started/index.md +0 -41
- data/docs/mkdocs/getting-started/installation.md +0 -179
- data/docs/mkdocs/getting-started/quick-start.md +0 -86
- data/docs/mkdocs/help.md +0 -49
- data/docs/mkdocs/index.md +0 -222
- data/docs/mkdocs/overview/build-system.md +0 -115
- data/docs/mkdocs/overview/index.md +0 -29
- data/docs/mkdocs/overview/test-environments.md +0 -33
- data/docs/mkdocs/overview/tools-and-frameworks.md +0 -115
- data/docs/mkdocs/plugins/beep.md +0 -134
- data/docs/mkdocs/plugins/bullseye.md +0 -83
- data/docs/mkdocs/plugins/command-hooks.md +0 -268
- data/docs/mkdocs/plugins/compile-commands-json-db.md +0 -42
- data/docs/mkdocs/plugins/cppcheck.md +0 -377
- data/docs/mkdocs/plugins/dependencies.md +0 -310
- data/docs/mkdocs/plugins/fff.md +0 -247
- data/docs/mkdocs/plugins/gcov/examples.md +0 -92
- data/docs/mkdocs/plugins/gcov/gcovr.md +0 -526
- data/docs/mkdocs/plugins/gcov/index.md +0 -74
- data/docs/mkdocs/plugins/gcov/overview.md +0 -145
- data/docs/mkdocs/plugins/gcov/reportgenerator.md +0 -246
- data/docs/mkdocs/plugins/gcov/reporting.md +0 -147
- data/docs/mkdocs/plugins/gcov/setup.md +0 -232
- data/docs/mkdocs/plugins/gcov/tool-versions.md +0 -60
- data/docs/mkdocs/plugins/gcov/troubleshooting.md +0 -78
- data/docs/mkdocs/plugins/index.md +0 -261
- data/docs/mkdocs/plugins/module-generator.md +0 -267
- data/docs/mkdocs/plugins/report-build-warnings-log.md +0 -42
- data/docs/mkdocs/plugins/report-tests-gtestlike-stdout.md +0 -98
- data/docs/mkdocs/plugins/report-tests-ide-stdout.md +0 -63
- data/docs/mkdocs/plugins/report-tests-log-factory.md +0 -454
- data/docs/mkdocs/plugins/report-tests-pretty-stdout.md +0 -56
- data/docs/mkdocs/plugins/report-tests-raw-output-log.md +0 -52
- data/docs/mkdocs/plugins/report-tests-teamcity-stdout.md +0 -96
- data/docs/mkdocs/plugins/sample_html_report.png +0 -0
- data/docs/mkdocs/plugins/valgrind.md +0 -198
- data/docs/mkdocs/project/release-history.md +0 -61
- data/docs/mkdocs/project/upgrade.md +0 -85
- data/docs/mkdocs/reference/build-directives.md +0 -37
- data/docs/mkdocs/reference/command-line.md +0 -323
- data/docs/mkdocs/reference/environment-vars.md +0 -60
- data/docs/mkdocs/reference/gcov-plugin.md +0 -600
- data/docs/mkdocs/reference/global-collections.md +0 -160
- data/docs/mkdocs/reference/index.md +0 -65
- data/docs/mkdocs/reference/partials-macros.md +0 -79
- data/docs/mkdocs/reference/project-configuration.md +0 -46
- data/docs/mkdocs/snapshot/examples/cipher_quest/README.md +0 -210
- data/docs/mkdocs/snapshot/examples/temp_sensor/README.md +0 -283
- data/docs/mkdocs/snapshot/examples/wondrous_forest/README.md +0 -92
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -32
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults_gcov.rb +0 -136
- data/docs/mkdocs/snapshot.yml +0 -20
- data/docs/mkdocs/testing-guide/build-directives.md +0 -153
- data/docs/mkdocs/testing-guide/conventions.md +0 -616
- data/docs/mkdocs/testing-guide/frameworks.md +0 -192
- data/docs/mkdocs/testing-guide/index.md +0 -80
- data/docs/mkdocs/testing-guide/partials/configuration.md +0 -67
- data/docs/mkdocs/testing-guide/partials/conventions.md +0 -68
- data/docs/mkdocs/testing-guide/partials/directives.md +0 -212
- data/docs/mkdocs/testing-guide/partials/example.md +0 -149
- data/docs/mkdocs/testing-guide/partials/index.md +0 -88
- data/docs/mkdocs/testing-guide/partials/overview.md +0 -81
- data/docs/mkdocs/testing-guide/partials/variables.md +0 -244
- data/docs/mkdocs/testing-guide/test-cases.md +0 -194
- data/docs/mkdocs/testing-guide/test-sample.md +0 -94
- data/docs/mkdocs/testing-guide/test-suite-anatomy.md +0 -58
- data/lib/ceedling/cacheinator.rb +0 -53
- data/lib/ceedling/cacheinator_helper.rb +0 -60
- data/lib/ceedling/dependinator.rb +0 -31
- data/lib/ceedling/makefile.rb +0 -52
- data/lib/ceedling/release_invoker.rb +0 -112
- data/lib/ceedling/rules_release.rake +0 -109
- data/lib/ceedling/tasks_release.rake +0 -36
- data/plugins/fff/vendor/fff/Makefile +0 -10
- data/plugins/fff/vendor/fff/buildandtest +0 -15
- data/plugins/fff/vendor/fff/examples/Makefile +0 -7
- data/plugins/fff/vendor/fff/examples/driver_testing/Makefile +0 -64
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.c +0 -32
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.h +0 -21
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp +0 -58
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp +0 -70
- data/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h +0 -25
- data/plugins/fff/vendor/fff/examples/driver_testing/registers.h +0 -23
- data/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h +0 -27
- data/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt +0 -25
- data/plugins/fff/vendor/fff/examples/embedded_ui/Makefile +0 -67
- data/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h +0 -31
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.c +0 -56
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.h +0 -22
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c +0 -191
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp +0 -144
- data/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c +0 -42
- data/plugins/fff/vendor/fff/gtest/Makefile +0 -22
- data/plugins/fff/vendor/fff/gtest/gtest-all.cc +0 -9118
- data/plugins/fff/vendor/fff/gtest/gtest-main.cc +0 -6
- data/plugins/fff/vendor/fff/gtest/gtest.h +0 -19547
- data/plugins/fff/vendor/fff/test/Makefile +0 -81
- data/plugins/fff/vendor/fff/test/c_test_framework.h +0 -25
- data/plugins/fff/vendor/fff/test/fff_test_c.c +0 -116
- data/plugins/fff/vendor/fff/test/fff_test_cpp.cpp +0 -53
- data/plugins/fff/vendor/fff/test/fff_test_global_c.c +0 -84
- data/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp +0 -31
- data/plugins/fff/vendor/fff/test/global_fakes.c +0 -21
- data/plugins/fff/vendor/fff/test/global_fakes.h +0 -47
- data/plugins/fff/vendor/fff/test/test_cases.include +0 -276
- data/plugins/report_tests_gtestlike_stdout/assets/template.erb +0 -83
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css +0 -1
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css.map +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
- data/site-local/snapshot/assets/project.yml +0 -404
- data/spec/system/partials_types_header_spec.rb +0 -166
- data/spec/units/configurator_spec.rb +0 -232
- /data/assets/{ceedling → features/ceedling} +0 -0
- /data/assets/{ceedling.cmd → features/ceedling.cmd} +0 -0
- /data/assets/{default_gitignore → features/default_gitignore} +0 -0
- /data/assets/{broken_uncovered_file.c → fixtures/broken_uncovered_file.c} +0 -0
- /data/assets/{example_file.c → fixtures/example_file.c} +0 -0
- /data/assets/{example_file.h → fixtures/example_file.h} +0 -0
- /data/assets/{example_file_call.c → fixtures/example_file_call.c} +0 -0
- /data/assets/{example_file_call.h → fixtures/example_file_call.h} +0 -0
- /data/assets/{example_file_with_statics.c → fixtures/example_file_with_statics.c} +0 -0
- /data/assets/{example_file_with_stdio.c → fixtures/example_file_with_stdio.c} +0 -0
- /data/assets/{example_file_with_stdio.h → fixtures/example_file_with_stdio.h} +0 -0
- /data/assets/{fake_crash_test_fixture.rb → fixtures/fake_crash_test_fixture.rb} +0 -0
- /data/assets/{partial_all_module.h → fixtures/partial_all_module.h} +0 -0
- /data/assets/{run_with_ubsan.rb → fixtures/run_with_ubsan.rb} +0 -0
- /data/assets/{same_dir_pairing_module.c → fixtures/same_dir_pairing_module.c} +0 -0
- /data/assets/{same_dir_pairing_module.h → fixtures/same_dir_pairing_module.h} +0 -0
- /data/assets/{same_dir_pairing_module_func.h → fixtures/same_dir_pairing_module_func.h} +0 -0
- /data/assets/{same_dir_pairing_other.c → fixtures/same_dir_pairing_other.c} +0 -0
- /data/assets/{same_dir_pairing_other.h → fixtures/same_dir_pairing_other.h} +0 -0
- /data/assets/{test_example_file.c → fixtures/test_example_file.c} +0 -0
- /data/assets/{test_example_file_2.c → fixtures/test_example_file_2.c} +0 -0
- /data/assets/{test_example_file_source_include.c → fixtures/test_example_file_source_include.c} +0 -0
- /data/assets/{test_example_file_success.c → fixtures/test_example_file_success.c} +0 -0
- /data/assets/{test_example_file_unity_printf.c → fixtures/test_example_file_unity_printf.c} +0 -0
- /data/assets/{test_example_file_verbose.c → fixtures/test_example_file_verbose.c} +0 -0
- /data/assets/{test_example_file_with_mock.c → fixtures/test_example_file_with_mock.c} +0 -0
- /data/assets/{test_example_file_with_stdio.c → fixtures/test_example_file_with_stdio.c} +0 -0
- /data/assets/{test_example_with_parameterized_tests.c → fixtures/test_example_with_parameterized_tests.c} +0 -0
- /data/assets/{test_partial_all_module.c → fixtures/test_partial_all_module.c} +0 -0
- /data/assets/{test_same_dir_pairing.c → fixtures/test_same_dir_pairing.c} +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_config.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/local_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_wrapper.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/project_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware_special.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.h +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder_partial.c +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/conditional_module.h +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/optional_dep.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_decorators.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareC.c +0 -0
- /data/assets/{uncovered_example_file.c → fixtures/uncovered_example_file.c} +0 -0
- /data/plugins/bullseye/assets/{template.erb → coverage.template} +0 -0
|
@@ -10,17 +10,36 @@ require 'ceedling/constants'
|
|
|
10
10
|
require 'ceedling/file_path_utils'
|
|
11
11
|
require 'ceedling/exceptions'
|
|
12
12
|
require 'ceedling/rake_app/rakefile_component_resolver'
|
|
13
|
-
require 'ceedling/config/config_matchinator'
|
|
14
13
|
require 'ceedling/tool_executor'
|
|
15
14
|
require 'deep_merge'
|
|
16
15
|
|
|
17
16
|
class Configurator
|
|
18
17
|
|
|
19
18
|
attr_reader :project_config_hash, :programmatic_plugins, :rake_plugins
|
|
20
|
-
attr_accessor :project_logging, :sanity_checks, :include_test_case, :exclude_test_case
|
|
19
|
+
attr_accessor :project_logging, :sanity_checks, :include_test_case, :exclude_test_case, :force_test_rerun,
|
|
20
|
+
:test_build_tasks, :release_build_tasks
|
|
21
21
|
|
|
22
22
|
constructor :configurator_setup, :configurator_builder, :configurator_plugins, :config_walkinator, :yaml_wrapper, :system_wrapper, :loginator, :reportinator, :ruby_expandinator
|
|
23
23
|
|
|
24
|
+
# Validations of the sections everything else depends on. Configuration can reference
|
|
25
|
+
# environment variables that are evaluated early, so :environment is among them.
|
|
26
|
+
ESSENTIAL_VALIDATIONS = [:validate_required_sections, :validate_required_section_values, :validate_environment_vars].freeze
|
|
27
|
+
|
|
28
|
+
# Validations of the completed configuration
|
|
29
|
+
FINAL_VALIDATIONS = [
|
|
30
|
+
:validate_paths, :validate_tools, :validate_defines, :validate_flags, :validate_line_markers,
|
|
31
|
+
:validate_test_preprocessor, :validate_backtrace, :validate_threads, :validate_partials, :validate_plugins
|
|
32
|
+
].freeze
|
|
33
|
+
|
|
34
|
+
# CMock and Unity options that test runner generation also reads
|
|
35
|
+
RUNNER_CMOCK_OPTIONS = [:mock_prefix, :mock_suffix, :mock_name_include_folder, :enforce_strict_ordering].freeze
|
|
36
|
+
RUNNER_UNITY_OPTIONS = [:use_param_tests, :shuffle_tests].freeze
|
|
37
|
+
|
|
38
|
+
# A minimal subset of the directives-only preprocessor tool: no defines, no include paths,
|
|
39
|
+
# and output to stdout, so no platform-specific null device. It is enough to detect
|
|
40
|
+
# -fdirectives-only support by a warning or exit code.
|
|
41
|
+
DIRECTIVES_ONLY_PROBE_ARGUMENTS = ['-E', '-fdirectives-only', '-x c', "\"${1}\""].freeze
|
|
42
|
+
|
|
24
43
|
def setup()
|
|
25
44
|
# Cmock config reference to provide to CMock for mock generation
|
|
26
45
|
@cmock_config = {} # Default empty hash, replaced by reference below
|
|
@@ -28,8 +47,13 @@ class Configurator
|
|
|
28
47
|
# Runner config reference to provide to runner generation
|
|
29
48
|
@runner_config = {} # Default empty hash, replaced by reference below
|
|
30
49
|
|
|
31
|
-
#
|
|
32
|
-
|
|
50
|
+
# Unity config reference. The flattened project_config_hash holds no :unity section to read back.
|
|
51
|
+
@unity_config = {} # Default empty hash, replaced by reference below
|
|
52
|
+
|
|
53
|
+
# Partials config reference, for the same reason. Dependency-tracker meta hashes it whole.
|
|
54
|
+
@partials_config = {} # Default empty hash, replaced by reference below
|
|
55
|
+
|
|
56
|
+
# Accessors built from configuration read this
|
|
33
57
|
@project_config_hash = {}
|
|
34
58
|
|
|
35
59
|
@programmatic_plugins = []
|
|
@@ -39,34 +63,35 @@ class Configurator
|
|
|
39
63
|
@sanity_checks = TestResultsSanityChecks::NORMAL
|
|
40
64
|
end
|
|
41
65
|
|
|
66
|
+
# What startup learned of gdb backtraces (see ConfiguratorSetup#gdb_backtrace_state)
|
|
67
|
+
def gdb_backtrace_state
|
|
68
|
+
return @configurator_setup.gdb_backtrace_state
|
|
69
|
+
end
|
|
70
|
+
|
|
42
71
|
# Override to prevent exception handling from walking & stringifying the object variables.
|
|
43
72
|
# Object variables are gigantic and produce a flood of output.
|
|
44
73
|
def inspect
|
|
45
|
-
|
|
46
|
-
return this.class.name
|
|
74
|
+
return self.class.name
|
|
47
75
|
end
|
|
48
76
|
|
|
49
77
|
def replace_flattened_config(config)
|
|
50
78
|
@project_config_hash.merge!(config)
|
|
51
|
-
@configurator_setup.build_constants_and_accessors(@project_config_hash,
|
|
79
|
+
@configurator_setup.build_constants_and_accessors(@project_config_hash, self)
|
|
52
80
|
end
|
|
53
81
|
|
|
54
82
|
|
|
55
83
|
# Set up essential flattened config related to verbosity.
|
|
56
84
|
# We do this because early config validation failures may need access to verbosity,
|
|
57
85
|
# but the accessors won't be available until after configuration is validated.
|
|
58
|
-
|
|
59
|
-
|
|
86
|
+
# PROJECT_VERBOSITY and PROJECT_DEBUG are set by command line processing.
|
|
87
|
+
def set_verbosity()
|
|
88
|
+
debug = !!defined?(PROJECT_DEBUG) && PROJECT_DEBUG
|
|
89
|
+
define_singleton_method( :project_debug ) { debug }
|
|
60
90
|
|
|
61
|
-
if
|
|
62
|
-
eval("def project_debug() return true end", binding())
|
|
63
|
-
else
|
|
64
|
-
eval("def project_debug() return false end", binding())
|
|
65
|
-
end
|
|
91
|
+
return if !defined?(PROJECT_VERBOSITY)
|
|
66
92
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
end
|
|
93
|
+
verbosity = PROJECT_VERBOSITY
|
|
94
|
+
define_singleton_method( :project_verbosity ) { verbosity }
|
|
70
95
|
end
|
|
71
96
|
|
|
72
97
|
|
|
@@ -80,125 +105,33 @@ class Configurator
|
|
|
80
105
|
# If partials enabled, enable full test preprocessing
|
|
81
106
|
config[:project][:use_test_preprocessor] = :all
|
|
82
107
|
@loginator.log( " > Enabled preprocessing." )
|
|
83
|
-
|
|
84
|
-
# If partials enabled and CMock's `:treat_inlines` is enabled, quietly disable.
|
|
85
|
-
# Enabling Partials and this feature causes extra processing for Ceedling and CMock that is never used.
|
|
86
|
-
if config[:cmock][:treat_inlines] == :include
|
|
87
|
-
config[:cmock][:treat_inlines] = :exclude
|
|
88
|
-
@loginator.log( "Reverted :cmock ↳ :treat_inlines to :exclude because this CMock feature is superseded by Partials.", Verbosity::COMPLAIN, LogLabels::NOTICE )
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# If partials enabled, inject partials name prefix symbol to all test compilation
|
|
92
|
-
# and, if a project defines its own preprocess-scoped defines matcher, to
|
|
93
|
-
# preprocessing as well -- `:preprocess:` defines are looked up independently
|
|
94
|
-
# of `:test:` defines and only fall back to the latter when `:preprocess:`
|
|
95
|
-
# is absent entirely, so a project-defined `:preprocess:` matcher needs this
|
|
96
|
-
# symbol appended directly or Partials' own macro-based #includes break.
|
|
97
|
-
# Handle both the simple list and matcher hash config formats.
|
|
98
|
-
_partials_prefix_symbol = "CEEDLING_PARTIALS_PREFIX=#{PARTIAL_FILENAME_PREFIX}"
|
|
99
|
-
ConfigMatchinator.append_matcher_entries( config[:defines][:test], _partials_prefix_symbol )
|
|
100
|
-
ConfigMatchinator.append_matcher_entries( config[:defines][:preprocess], _partials_prefix_symbol )
|
|
101
108
|
end
|
|
102
109
|
|
|
103
110
|
|
|
111
|
+
# Directives-only preprocessing is available only when preprocessing is on, fallback
|
|
112
|
+
# is not forced, and the configured C preprocessor supports -fdirectives-only
|
|
104
113
|
def resolve_directives_only_preprocessing(config, tool_executor)
|
|
105
|
-
# Nothing to probe if preprocessing is disabled
|
|
106
|
-
preprocessing = config[:project][:use_test_preprocessor]
|
|
107
114
|
config[:test_build][:preprocess_directives_only_available] = false
|
|
108
|
-
return if preprocessing == :none
|
|
109
115
|
|
|
110
|
-
|
|
116
|
+
return if config[:project][:use_test_preprocessor] == :none
|
|
117
|
+
|
|
111
118
|
if config[:test_build][:preprocess_force_fallback]
|
|
112
|
-
|
|
113
|
-
"Forcing fallback text-based preprocessing in place of directives-only (:test_build ↳ :preprocess_force_fallback is enabled).",
|
|
114
|
-
Verbosity::COMPLAIN,
|
|
115
|
-
LogLabels::NOTICE
|
|
116
|
-
)
|
|
117
|
-
return
|
|
119
|
+
return log_notice( "Forcing best-effort fallback preprocessing in place of directives-only (:test_build ↳ :preprocess_force_fallback is enabled)." )
|
|
118
120
|
end
|
|
119
121
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
# Output goes to stdout (no -o flag) to avoid platform-specific null device paths.
|
|
123
|
-
probe_filepath = File.join( CEEDLING_VENDOR, UNITY_LIB_PATH, UNITY_H_FILE )
|
|
124
|
-
|
|
125
|
-
# Minimal subset of the directives-only preprocessor tool: no defines, no include paths,
|
|
126
|
-
# no output file. Sufficient to detect `-fdirectives-only` support via warning or exit code.
|
|
127
|
-
probe_tool = {
|
|
128
|
-
executable: config[:tools][:test_file_directives_only_preprocessor][:executable],
|
|
129
|
-
name: 'directives_only_probe',
|
|
130
|
-
arguments: [
|
|
131
|
-
'-E',
|
|
132
|
-
'-fdirectives-only',
|
|
133
|
-
'-x c',
|
|
134
|
-
"\"${1}\""
|
|
135
|
-
]
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
command = tool_executor.build_command_line( probe_tool, [], probe_filepath )
|
|
139
|
-
# Exception if something goes wrong; we want to detect errors here
|
|
140
|
-
command[:options][:boom] = false
|
|
141
|
-
results = tool_executor.exec( command )
|
|
142
|
-
|
|
143
|
-
# Clang and some older GCC emit a warning (not an error) when -fdirectives-only is unsupported
|
|
144
|
-
warning_detected = results[:output].match?( /warning[^\n]+-fdirectives-only/ )
|
|
145
|
-
|
|
146
|
-
if warning_detected || results[:exit_code] != 0
|
|
147
|
-
@loginator.log(
|
|
148
|
-
"Preprocessor lacks -fdirectives-only support ➡️ Ceedling will use text-based fallback for preprocessing.",
|
|
149
|
-
Verbosity::COMPLAIN,
|
|
150
|
-
LogLabels::NOTICE
|
|
151
|
-
)
|
|
152
|
-
# :preprocess_directives_only_available already set to false above
|
|
153
|
-
else
|
|
154
|
-
config[:test_build][:preprocess_directives_only_available] = true
|
|
122
|
+
if !directives_only_supported?( config, tool_executor )
|
|
123
|
+
return log_notice( "Preprocessor lacks -fdirectives-only support ➡️ Ceedling will use best-effort fallback preprocessing." )
|
|
155
124
|
end
|
|
125
|
+
|
|
126
|
+
config[:test_build][:preprocess_directives_only_available] = true
|
|
156
127
|
end
|
|
157
128
|
|
|
158
129
|
|
|
159
|
-
# The default tools
|
|
130
|
+
# The default tools a build needs are merged into the default config hash
|
|
160
131
|
def merge_tools_defaults(config, default_config)
|
|
161
|
-
|
|
162
|
-
@reportinator.generate_progress( 'Collecting default tool configurations' )
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# config[:project] is guaranteed to exist / validated to exist but may not include elements referenced below
|
|
166
|
-
# config[:test_build] and config[:release_build] are optional in a user project configuration
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
release_build, _ = @config_walkinator.fetch_value( :project, :release_build,
|
|
170
|
-
hash:config,
|
|
171
|
-
default: DEFAULT_CEEDLING_PROJECT_CONFIG[:project][:release_build]
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
test_preprocessing, _ = @config_walkinator.fetch_value( :project, :use_test_preprocessor,
|
|
175
|
-
hash:config,
|
|
176
|
-
default: DEFAULT_CEEDLING_PROJECT_CONFIG[:project][:use_test_preprocessor]
|
|
177
|
-
)
|
|
132
|
+
progress( 'Collecting default tool configurations' )
|
|
178
133
|
|
|
179
|
-
|
|
180
|
-
hash:config,
|
|
181
|
-
default: DEFAULT_CEEDLING_PROJECT_CONFIG[:project][:use_backtrace]
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
release_assembly, _ = @config_walkinator.fetch_value( :release_build, :use_assembly,
|
|
185
|
-
hash:config,
|
|
186
|
-
default: DEFAULT_CEEDLING_PROJECT_CONFIG[:release_build][:use_assembly]
|
|
187
|
-
)
|
|
188
|
-
|
|
189
|
-
test_assembly, _ = @config_walkinator.fetch_value( :test_build, :use_assembly,
|
|
190
|
-
hash:config,
|
|
191
|
-
default: DEFAULT_CEEDLING_PROJECT_CONFIG[:test_build][:use_assembly]
|
|
192
|
-
)
|
|
193
|
-
|
|
194
|
-
default_config.deep_merge( DEFAULT_TOOLS_TEST.deep_clone() )
|
|
195
|
-
|
|
196
|
-
default_config.deep_merge( DEFAULT_TOOLS_TEST_PREPROCESSORS.deep_clone() ) if (test_preprocessing != :none)
|
|
197
|
-
default_config.deep_merge( DEFAULT_TOOLS_TEST_ASSEMBLER.deep_clone() ) if test_assembly
|
|
198
|
-
default_config.deep_merge( DEFAULT_TOOLS_TEST_GDB_BACKTRACE.deep_clone() ) if (backtrace == :gdb)
|
|
199
|
-
|
|
200
|
-
default_config.deep_merge( DEFAULT_TOOLS_RELEASE.deep_clone() ) if release_build
|
|
201
|
-
default_config.deep_merge( DEFAULT_TOOLS_RELEASE_ASSEMBLER.deep_clone() ) if (release_build and release_assembly)
|
|
134
|
+
needed_tools_defaults( config ).each { |defaults| default_config.deep_merge( defaults.deep_clone() ) }
|
|
202
135
|
end
|
|
203
136
|
|
|
204
137
|
|
|
@@ -206,9 +139,7 @@ class Configurator
|
|
|
206
139
|
# Cmock has its own internal defaults handling, but we need to set these specific values
|
|
207
140
|
# so they're guaranteed values and present for the Ceedling environment to access
|
|
208
141
|
|
|
209
|
-
|
|
210
|
-
@reportinator.generate_progress( 'Collecting CMock defaults' )
|
|
211
|
-
end
|
|
142
|
+
progress( 'Collecting CMock defaults' )
|
|
212
143
|
|
|
213
144
|
# Begin populating defaults with CMock defaults as set by Ceedling
|
|
214
145
|
default_cmock = default_config[:cmock]
|
|
@@ -237,52 +168,14 @@ class Configurator
|
|
|
237
168
|
end
|
|
238
169
|
|
|
239
170
|
|
|
171
|
+
# Plugin YAML defaults merge before plugin Ruby defaults. Neither replaces a value already present.
|
|
240
172
|
def merge_plugins_defaults(paths_hash, config, default_config)
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
# Config Ruby-based hash defaults plugins
|
|
245
|
-
plugin_hash_defaults = @configurator_plugins.find_plugin_hash_defaults( config, paths_hash )
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
if !plugin_hash_defaults.empty?
|
|
249
|
-
@loginator.lazy( Verbosity::OBNOXIOUS ) do
|
|
250
|
-
@reportinator.generate_progress( 'Collecting Plugin YAML defaults' )
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
# Load base configuration values (defaults) from YAML
|
|
255
|
-
plugin_yml_defaults.each do |plugin, defaults|
|
|
256
|
-
_defaults = begin
|
|
257
|
-
@yaml_wrapper.load( defaults )
|
|
258
|
-
rescue YamlLoadException => e
|
|
259
|
-
raise YamlLoadException.new(
|
|
260
|
-
reason: e.reason, source: e.source, original_error: e.original_error,
|
|
261
|
-
message: "Could not load default configuration for plugin '#{plugin}' ⏩️ #{e.message}"
|
|
262
|
-
)
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
266
|
-
" - #{plugin} >> " + _defaults.to_s()
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
default_config.deep_merge( _defaults )
|
|
173
|
+
yaml_defaults = @configurator_plugins.find_plugin_yml_defaults( config, paths_hash ).to_h do |plugin, path|
|
|
174
|
+
[plugin, load_plugin_yaml( path, "Could not load default configuration for plugin '#{plugin}'" )]
|
|
270
175
|
end
|
|
271
176
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
@reportinator.generate_progress( 'Collecting Plugin Ruby hash defaults' )
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
# Load base configuration values (defaults) as hash from Ruby
|
|
279
|
-
plugin_hash_defaults.each do |plugin, defaults|
|
|
280
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
281
|
-
" - #{plugin} >> " + defaults.to_s()
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
default_config.deep_merge( defaults )
|
|
285
|
-
end
|
|
177
|
+
merge_plugin_defaults( 'YAML', yaml_defaults, default_config )
|
|
178
|
+
merge_plugin_defaults( 'Ruby hash', @configurator_plugins.find_plugin_hash_defaults( config, paths_hash ), default_config )
|
|
286
179
|
end
|
|
287
180
|
|
|
288
181
|
|
|
@@ -291,118 +184,82 @@ class Configurator
|
|
|
291
184
|
config.deep_merge( runtime_config )
|
|
292
185
|
end
|
|
293
186
|
|
|
294
|
-
|
|
187
|
+
|
|
295
188
|
def populate_with_defaults( config_hash, defaults_hash )
|
|
296
|
-
|
|
297
|
-
@reportinator.generate_progress( 'Populating project configuration with collected default values' )
|
|
298
|
-
end
|
|
189
|
+
progress( 'Populating project configuration with collected default values' )
|
|
299
190
|
|
|
300
191
|
@configurator_builder.populate_with_defaults( config_hash, defaults_hash )
|
|
192
|
+
|
|
193
|
+
# Every :extension value is settled the moment defaults are merged in, well before
|
|
194
|
+
# validation or flattening ever look at it, so nothing downstream ever has to wonder
|
|
195
|
+
# whether a given :extension entry is a bare String or already a FilenameExtension.
|
|
196
|
+
@configurator_builder.normalize_filename_extensions( config_hash )
|
|
301
197
|
end
|
|
302
198
|
|
|
303
199
|
|
|
200
|
+
# Parameterized tests need Unity's test case and variadic macro support
|
|
304
201
|
def populate_unity_config(config)
|
|
305
|
-
|
|
306
|
-
@reportinator.generate_progress( 'Processing Unity configuration' )
|
|
307
|
-
end
|
|
202
|
+
progress( 'Processing Unity configuration' )
|
|
308
203
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
config[:unity][:defines] << 'UNITY_SUPPORT_VARIADIC_MACROS'
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
315
|
-
"Unity configuration >> #{config[:unity]}"
|
|
316
|
-
end
|
|
317
|
-
end
|
|
204
|
+
# Save Unity config reference
|
|
205
|
+
@unity_config = config[:unity]
|
|
318
206
|
|
|
207
|
+
config[:unity][:defines].concat( ['UNITY_SUPPORT_TEST_CASES', 'UNITY_SUPPORT_VARIADIC_MACROS'] ) if config[:unity][:use_param_tests]
|
|
319
208
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
@cmock_config = config[:cmock]
|
|
209
|
+
debug { "Unity configuration >> #{config[:unity]}" }
|
|
210
|
+
end
|
|
323
211
|
|
|
324
|
-
cmock = config[:cmock]
|
|
325
212
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
end
|
|
331
|
-
return
|
|
332
|
-
end
|
|
213
|
+
def populate_partials_config(config)
|
|
214
|
+
# Save Partials config reference. Unlike Unity, CMock, and the test runner, nothing
|
|
215
|
+
# derives values from or into this section.
|
|
216
|
+
@partials_config = config[:partials]
|
|
333
217
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
end
|
|
218
|
+
debug { "Partials configuration >> #{config[:partials]}" }
|
|
219
|
+
end
|
|
337
220
|
|
|
338
|
-
# Plugins housekeeping
|
|
339
|
-
cmock[:plugins].map! { |plugin| plugin.to_sym() }
|
|
340
|
-
cmock[:plugins].uniq!
|
|
341
221
|
|
|
342
|
-
|
|
343
|
-
|
|
222
|
+
# CMock needs no preparation when mocks are off
|
|
223
|
+
def populate_cmock_config(config)
|
|
224
|
+
# Save CMock config reference
|
|
225
|
+
@cmock_config = config[:cmock]
|
|
344
226
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
227
|
+
if config[:project][:use_mocks]
|
|
228
|
+
progress( 'Processing CMock configuration' )
|
|
229
|
+
prepare_cmock_config( config[:cmock] )
|
|
348
230
|
end
|
|
349
231
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
# Add mocking prefix symbol for all test compilation
|
|
353
|
-
cmock[:defines] << "CMOCK_MOCK_PREFIX=#{cmock[:mock_prefix]}"
|
|
354
|
-
|
|
355
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
356
|
-
"CMock configuration >> #{cmock}"
|
|
357
|
-
end
|
|
232
|
+
debug { "CMock configuration >> #{config[:cmock]}" }
|
|
358
233
|
end
|
|
359
234
|
|
|
360
235
|
|
|
361
236
|
def populate_test_runner_generation_config(config)
|
|
362
|
-
|
|
363
|
-
@reportinator.generate_progress( 'Populating test runner generation settings' )
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
use_backtrace = config[:project][:use_backtrace]
|
|
237
|
+
progress( 'Populating test runner generation settings' )
|
|
367
238
|
|
|
368
|
-
|
|
369
|
-
if use_backtrace != :none
|
|
370
|
-
if config[:test_runner][:cmdline_args] == false
|
|
371
|
-
config[:test_runner][:cmdline_args] = true
|
|
372
|
-
@loginator.log( "Enabled :test_runner ↳ :cmdline_args because :project ↳ :use_backtrace is enabled.", Verbosity::COMPLAIN, LogLabels::NOTICE )
|
|
373
|
-
end
|
|
374
|
-
end
|
|
239
|
+
runner = config[:test_runner]
|
|
375
240
|
|
|
376
|
-
#
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
241
|
+
# Backtraces rerun test cases by name, and command line filters select them, both
|
|
242
|
+
# through runner command line arguments
|
|
243
|
+
force_cmdline_args( runner, ':project ↳ :use_backtrace is enabled' ) if config[:project][:use_backtrace] != :none
|
|
244
|
+
force_cmdline_args( runner, 'command line test case filters are in use' ) if test_case_filters?
|
|
380
245
|
|
|
381
|
-
|
|
382
|
-
config[:test_runner][:defines] += config[:unity][:defines]
|
|
383
|
-
config[:test_runner][:use_param_tests] = config[:unity][:use_param_tests]
|
|
246
|
+
copy_runner_options( config, runner )
|
|
384
247
|
|
|
385
|
-
@runner_config =
|
|
248
|
+
@runner_config = runner
|
|
386
249
|
|
|
387
|
-
|
|
388
|
-
"Test Runner configuration >> #{config[:test_runner]}"
|
|
389
|
-
end
|
|
250
|
+
debug { "Test Runner configuration >> #{runner}" }
|
|
390
251
|
end
|
|
391
252
|
|
|
392
253
|
|
|
393
254
|
def populate_exceptions_config(config)
|
|
394
255
|
# Automagically set exception handling if CMock is configured for it
|
|
395
256
|
if config[:cmock][:plugins] && config[:cmock][:plugins].include?(:cexception)
|
|
396
|
-
|
|
397
|
-
@reportinator.generate_progress( 'Enabling CException use based on CMock plugins settings' )
|
|
398
|
-
end
|
|
257
|
+
progress( 'Enabling CException use based on CMock plugins settings' )
|
|
399
258
|
|
|
400
259
|
config[:project][:use_exceptions] = true
|
|
401
260
|
end
|
|
402
261
|
|
|
403
|
-
|
|
404
|
-
"CException configuration >> #{config[:cexception]}"
|
|
405
|
-
end
|
|
262
|
+
debug { "CException configuration >> #{config[:cexception]}" }
|
|
406
263
|
end
|
|
407
264
|
|
|
408
265
|
|
|
@@ -420,120 +277,56 @@ class Configurator
|
|
|
420
277
|
end
|
|
421
278
|
|
|
422
279
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
# - Configure test runner from backtrace configuration
|
|
428
|
-
def populate_tools_config(config)
|
|
429
|
-
@loginator.lazy( Verbosity::OBNOXIOUS ) do
|
|
430
|
-
@reportinator.generate_progress( 'Populating tool definition settings and expanding any string replacements' )
|
|
431
|
-
end
|
|
280
|
+
def get_unity_config
|
|
281
|
+
# Clone for the same reason as get_runner_config/get_cmock_config above.
|
|
282
|
+
return @unity_config.clone
|
|
283
|
+
end
|
|
432
284
|
|
|
433
|
-
config[:tools].each_key do |name|
|
|
434
|
-
tool = config[:tools][name]
|
|
435
285
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
286
|
+
def get_partials_config
|
|
287
|
+
# Clone for the same reason as get_runner_config/get_cmock_config above.
|
|
288
|
+
return @partials_config.clone
|
|
289
|
+
end
|
|
439
290
|
|
|
440
|
-
# Populate name if not given
|
|
441
|
-
ToolExecutor.default_name!( tool, name.to_s )
|
|
442
291
|
|
|
443
|
-
|
|
444
|
-
|
|
292
|
+
# Fills in each tool's missing name, $stderr redirect, and optional flag
|
|
293
|
+
def populate_tools_config(config)
|
|
294
|
+
progress( 'Populating tool definition settings and expanding any string replacements' )
|
|
445
295
|
|
|
446
|
-
|
|
447
|
-
tool[:optional] = false if (tool[:optional].nil?)
|
|
448
|
-
end
|
|
296
|
+
config[:tools].each { |name, tool| populate_tool( name, tool ) }
|
|
449
297
|
end
|
|
450
298
|
|
|
451
299
|
|
|
452
|
-
#
|
|
453
|
-
#
|
|
454
|
-
# - Redefine executable
|
|
300
|
+
# A tool definition shortcut, :tools_<name>, may redefine the tool's executable and add
|
|
301
|
+
# arguments to it
|
|
455
302
|
#
|
|
456
303
|
# :tools_<name>
|
|
457
304
|
# :arguments: [...]
|
|
458
305
|
# :executable: '...'
|
|
459
306
|
def populate_tools_shortcuts(config)
|
|
460
|
-
|
|
461
|
-
@reportinator.generate_progress( 'Processing tool definition shortcuts' )
|
|
462
|
-
end
|
|
307
|
+
progress( 'Processing tool definition shortcuts' )
|
|
463
308
|
|
|
464
|
-
prefix = 'tools_'
|
|
465
309
|
config[:tools].each do |name, tool|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
# Try to lookup the executable from user config
|
|
470
|
-
executable, _ = @config_walkinator.fetch_value(shortcut, :executable,
|
|
471
|
-
hash:config
|
|
472
|
-
)
|
|
473
|
-
|
|
474
|
-
# Try to lookup arguments from user config
|
|
475
|
-
args_to_add, _ = @config_walkinator.fetch_value(shortcut, :arguments,
|
|
476
|
-
hash:config,
|
|
477
|
-
default: []
|
|
478
|
-
)
|
|
479
|
-
|
|
480
|
-
# Redefine the tool config
|
|
481
|
-
if !executable.nil?
|
|
482
|
-
tool[:executable] = executable
|
|
483
|
-
end
|
|
484
|
-
|
|
485
|
-
# Add to the tool config
|
|
486
|
-
if !args_to_add.empty?
|
|
487
|
-
tool[:arguments].concat( args_to_add )
|
|
488
|
-
end
|
|
310
|
+
executable, arguments = tool_shortcut( config, name )
|
|
311
|
+
next if executable.nil? and arguments.empty?
|
|
489
312
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
493
|
-
msg = " > #{name}\n"
|
|
313
|
+
tool[:executable] = executable unless executable.nil?
|
|
314
|
+
tool[:arguments].concat( arguments )
|
|
494
315
|
|
|
495
|
-
|
|
496
|
-
msg += " executable: \"#{executable}\"\n"
|
|
497
|
-
end
|
|
498
|
-
|
|
499
|
-
if !args_to_add.empty?
|
|
500
|
-
msg += " arguments: " + args_to_add.map{|arg| "\"#{arg}\""}.join( ', ' ) + "\n"
|
|
501
|
-
end
|
|
502
|
-
|
|
503
|
-
msg
|
|
504
|
-
end
|
|
505
|
-
end
|
|
316
|
+
debug { shortcut_message( name, executable, arguments ) }
|
|
506
317
|
end
|
|
507
318
|
end
|
|
508
319
|
|
|
509
320
|
|
|
510
321
|
def discover_plugins(paths_hash, config)
|
|
511
|
-
|
|
512
|
-
@reportinator.generate_progress( 'Discovering all plugins' )
|
|
513
|
-
end
|
|
514
|
-
|
|
515
|
-
# Rake-based plugins
|
|
516
|
-
@rake_plugins = @configurator_plugins.find_rake_plugins( config, paths_hash )
|
|
517
|
-
if !@configurator_plugins.rake_plugins.empty?
|
|
518
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
519
|
-
" > Rake plugins: " + @configurator_plugins.rake_plugins.map{|p| p[:plugin]}.join( ', ' )
|
|
520
|
-
end
|
|
521
|
-
end
|
|
322
|
+
progress( 'Discovering all plugins' )
|
|
522
323
|
|
|
523
|
-
|
|
324
|
+
@rake_plugins = @configurator_plugins.find_rake_plugins( config, paths_hash )
|
|
524
325
|
@programmatic_plugins = @configurator_plugins.find_programmatic_plugins( config, paths_hash )
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
end
|
|
530
|
-
|
|
531
|
-
# Config plugins
|
|
532
|
-
@configurator_plugins.find_config_plugins( config, paths_hash )
|
|
533
|
-
if !@configurator_plugins.config_plugins.empty?
|
|
534
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
535
|
-
" > Config plugins: " + @configurator_plugins.config_plugins.map{|p| p[:plugin]}.join( ', ' )
|
|
536
|
-
end
|
|
326
|
+
config_plugins = @configurator_plugins.find_config_plugins( config, paths_hash )
|
|
327
|
+
|
|
328
|
+
{ 'Rake' => @rake_plugins, 'Programmatic' => @programmatic_plugins, 'Config' => config_plugins }.each do |kind, plugins|
|
|
329
|
+
debug { " > #{kind} plugins: " + plugins.map { |plugin| plugin[:plugin] }.join( ', ' ) } unless plugins.empty?
|
|
537
330
|
end
|
|
538
331
|
end
|
|
539
332
|
|
|
@@ -547,82 +340,27 @@ class Configurator
|
|
|
547
340
|
end
|
|
548
341
|
|
|
549
342
|
|
|
343
|
+
# A plugin's configuration merges into the project's like a project file
|
|
550
344
|
def merge_config_plugins(config)
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
# Merge plugin configuration values (like Ceedling project file)
|
|
554
|
-
@configurator_plugins.config_plugins.each do |hash|
|
|
555
|
-
_config = begin
|
|
556
|
-
@yaml_wrapper.load( hash[:path] )
|
|
557
|
-
rescue YamlLoadException => e
|
|
558
|
-
raise YamlLoadException.new(
|
|
559
|
-
reason: e.reason, source: e.source, original_error: e.original_error,
|
|
560
|
-
message: "Could not load configuration from plugin '#{hash[:plugin]}' ⏩️ #{e.message}"
|
|
561
|
-
)
|
|
562
|
-
end
|
|
345
|
+
@configurator_plugins.config_plugins.each do |plugin|
|
|
346
|
+
plugin_config = load_plugin_yaml( plugin[:path], "Could not load configuration from plugin '#{plugin[:plugin]}'" )
|
|
563
347
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
end
|
|
567
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
568
|
-
_config.to_s
|
|
569
|
-
end
|
|
570
|
-
|
|
571
|
-
# Special handling for plugin paths
|
|
572
|
-
if (_config.include?( :paths ))
|
|
573
|
-
_config[:paths].update( _config[:paths] ) do |k,v|
|
|
574
|
-
plugin_path = hash[:path].match( /(.*)[\/]config[\/]\w+\.yml/ )[1]
|
|
575
|
-
v.map {|vv| File.expand_path( vv.gsub!( /\$PLUGIN_PATH/, plugin_path) ) }
|
|
576
|
-
end
|
|
577
|
-
end
|
|
348
|
+
progress( "Merging configuration from plugin #{plugin[:plugin]}" )
|
|
349
|
+
debug { plugin_config.to_s }
|
|
578
350
|
|
|
579
|
-
|
|
351
|
+
resolve_plugin_paths( plugin_config, plugin[:path] )
|
|
352
|
+
config.deep_merge( plugin_config )
|
|
580
353
|
end
|
|
581
354
|
end
|
|
582
355
|
|
|
583
356
|
|
|
584
|
-
#
|
|
585
|
-
# (Each entry within the :environment array is a hash)
|
|
357
|
+
# Each :environment entry is a single-pair hash: a variable name and its value
|
|
586
358
|
def eval_environment_variables(config)
|
|
587
359
|
return if config[:environment].nil?
|
|
588
360
|
|
|
589
|
-
|
|
590
|
-
@reportinator.generate_progress( 'Processing environment variables' )
|
|
591
|
-
end
|
|
592
|
-
|
|
593
|
-
config[:environment].each do |hash|
|
|
594
|
-
key = hash.keys[0] # Get first (should be only) environment variable entry
|
|
595
|
-
value = hash[key] # Get associated value
|
|
596
|
-
items = []
|
|
597
|
-
|
|
598
|
-
# Special case handling for :path environment variable entry
|
|
599
|
-
# File::PATH_SEPARATOR => ':' (Unix-ish) or ';' (Windows)
|
|
600
|
-
interstitial = ((key == :path) ? File::PATH_SEPARATOR : ' ')
|
|
601
|
-
|
|
602
|
-
# Create an array container for the value of this entry
|
|
603
|
-
# - If the value is an array, get it
|
|
604
|
-
# - Otherwise, place value in a single item array
|
|
605
|
-
items = ((value.class == Array) ? hash[key] : [value])
|
|
606
|
-
|
|
607
|
-
# Process value array
|
|
608
|
-
items.each do |item|
|
|
609
|
-
# Process each item for Ruby string replacement
|
|
610
|
-
if item.is_a? String
|
|
611
|
-
item.replace( @ruby_expandinator.expand( item, source: ":environment ↳ #{key}" ) )
|
|
612
|
-
end
|
|
613
|
-
end
|
|
361
|
+
progress( 'Processing environment variables' )
|
|
614
362
|
|
|
615
|
-
|
|
616
|
-
# - With path separator if the key was :path
|
|
617
|
-
# - With space otherwise
|
|
618
|
-
hash[key] = items.join( interstitial )
|
|
619
|
-
|
|
620
|
-
# Set the environment variable for our session
|
|
621
|
-
@system_wrapper.env_set( key.to_s.upcase, hash[key] )
|
|
622
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
623
|
-
" - #{key.to_s.upcase}: \"#{hash[key]}\""
|
|
624
|
-
end
|
|
625
|
-
end
|
|
363
|
+
config[:environment].each { |entry| eval_environment_variable( entry ) }
|
|
626
364
|
end
|
|
627
365
|
|
|
628
366
|
|
|
@@ -630,24 +368,12 @@ class Configurator
|
|
|
630
368
|
def eval_paths(config)
|
|
631
369
|
# :plugins ↳ :load_paths already handled
|
|
632
370
|
|
|
633
|
-
|
|
634
|
-
@reportinator.generate_progress( 'Processing path entries and expanding any string replacements' )
|
|
635
|
-
end
|
|
371
|
+
progress( 'Processing path entries and expanding any string replacements' )
|
|
636
372
|
|
|
637
373
|
eval_path_entries( config[:project][:build_root], source: ":project ↳ :build_root" )
|
|
638
374
|
eval_path_entries( config[:release_build][:artifacts], source: ":release_build ↳ :artifacts" )
|
|
639
375
|
|
|
640
|
-
|
|
641
|
-
# :paths sub-entries (e.g. :test) could be a single string -> make array
|
|
642
|
-
reform_path_entries_as_lists( config[:paths], entry, paths )
|
|
643
|
-
eval_path_entries( paths, source: ":paths ↳ #{entry}" )
|
|
644
|
-
end
|
|
645
|
-
|
|
646
|
-
config[:files].each_pair do |entry, files|
|
|
647
|
-
# :files sub-entries (e.g. :test) could be a single string -> make array
|
|
648
|
-
reform_path_entries_as_lists( config[:files], entry, files )
|
|
649
|
-
eval_path_entries( files, source: ":files ↳ #{entry}" )
|
|
650
|
-
end
|
|
376
|
+
[:paths, :files].each { |section| eval_path_section( config, section ) }
|
|
651
377
|
|
|
652
378
|
# All other paths at secondary hash key level processed by convention (`_path`):
|
|
653
379
|
# ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are evaluated
|
|
@@ -657,9 +383,7 @@ class Configurator
|
|
|
657
383
|
|
|
658
384
|
# Handle any Ruby string replacement for :flags string arrays
|
|
659
385
|
def eval_flags(config)
|
|
660
|
-
|
|
661
|
-
@reportinator.generate_progress( 'Expanding any string replacements in :flags entries' )
|
|
662
|
-
end
|
|
386
|
+
progress( 'Expanding any string replacements in :flags entries' )
|
|
663
387
|
|
|
664
388
|
# Descend down to array of command line flags strings regardless of depth in config block
|
|
665
389
|
traverse_hash_eval_string_arrays( config[:flags], source: ":flags" )
|
|
@@ -668,9 +392,7 @@ class Configurator
|
|
|
668
392
|
|
|
669
393
|
# Handle any Ruby string replacement for :defines string arrays
|
|
670
394
|
def eval_defines(config)
|
|
671
|
-
|
|
672
|
-
@reportinator.generate_progress( 'Expanding any string replacements in :defines entries' )
|
|
673
|
-
end
|
|
395
|
+
progress( 'Expanding any string replacements in :defines entries' )
|
|
674
396
|
|
|
675
397
|
# Descend down to array of #define strings regardless of depth in config block
|
|
676
398
|
traverse_hash_eval_string_arrays( config[:defines], source: ":defines" )
|
|
@@ -678,93 +400,27 @@ class Configurator
|
|
|
678
400
|
|
|
679
401
|
|
|
680
402
|
def standardize_paths(config)
|
|
681
|
-
|
|
682
|
-
@reportinator.generate_progress( 'Standardizing all paths' )
|
|
683
|
-
end
|
|
403
|
+
progress( 'Standardizing all paths' )
|
|
684
404
|
|
|
685
|
-
|
|
686
|
-
# that don't follow the _path/_paths key convention — handle them explicitly.
|
|
687
|
-
# :release_build may be absent in minimal configs; guard prevents NoMethodError.
|
|
688
|
-
paths = [config[:project][:build_root]]
|
|
689
|
-
if config[:release_build]
|
|
690
|
-
paths << config[:release_build][:artifacts]
|
|
691
|
-
else
|
|
692
|
-
@loginator.log(
|
|
693
|
-
":release_build section absent from config ➡️ skipping :artifacts path standardization.",
|
|
694
|
-
Verbosity::COMPLAIN,
|
|
695
|
-
LogLabels::NOTICE
|
|
696
|
-
)
|
|
697
|
-
end
|
|
405
|
+
standalone_paths( config ).flatten.each { |path| FilePathUtils::standardize_in_place( path ) }
|
|
698
406
|
|
|
699
|
-
paths.
|
|
700
|
-
|
|
701
|
-
config[:paths].each_pair do |collection, paths|
|
|
702
|
-
# Flatten to handle single strings or nested arrays; reject nils (non-String passthrough
|
|
703
|
-
# from standardize) and empty strings left after stripping whitespace-only entries.
|
|
704
|
-
config[:paths][collection] = [paths].flatten
|
|
705
|
-
.map { |path| FilePathUtils::standardize_in_place( path ) }
|
|
706
|
-
.reject { |path| path.nil? || (path.is_a?( String ) && path.empty?) }
|
|
707
|
-
end
|
|
708
|
-
|
|
709
|
-
config[:files].each_pair do |collection, files|
|
|
710
|
-
# Same sanitization as :paths — replace array to remove any nil or empty entries
|
|
711
|
-
# produced by standardize on non-String or whitespace-only values.
|
|
712
|
-
config[:files][collection] = [files].flatten
|
|
713
|
-
.map { |path| FilePathUtils::standardize_in_place( path ) }
|
|
714
|
-
.reject { |path| path.nil? || (path.is_a?( String ) && path.empty?) }
|
|
715
|
-
end
|
|
407
|
+
[:paths, :files].each { |section| standardize_path_section( config[section] ) }
|
|
716
408
|
|
|
717
|
-
config[:tools].
|
|
409
|
+
config[:tools].each_value { |tool| FilePathUtils::standardize_in_place( tool[:executable] ) if tool.include?( :executable ) }
|
|
718
410
|
|
|
719
|
-
|
|
720
|
-
# ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are standardized
|
|
721
|
-
config.each_pair do |_, child|
|
|
722
|
-
collect_path_list( child ).each { |path| FilePathUtils::standardize_in_place( path ) }
|
|
723
|
-
end
|
|
411
|
+
standardize_convention_paths( config )
|
|
724
412
|
end
|
|
725
413
|
|
|
726
414
|
|
|
415
|
+
# Every validation runs, so every problem is reported, before configuration fails
|
|
727
416
|
def validate_essential(config)
|
|
728
|
-
|
|
729
|
-
blotter = true
|
|
730
|
-
|
|
731
|
-
blotter &= @configurator_setup.validate_required_sections( config )
|
|
732
|
-
blotter &= @configurator_setup.validate_required_section_values( config )
|
|
733
|
-
|
|
734
|
-
# Configuration sections can reference environment variables that are evaluated early on.
|
|
735
|
-
# So, we validate :environment early as an essential section.
|
|
736
|
-
blotter &= @configurator_setup.validate_environment_vars( config )
|
|
737
|
-
|
|
738
|
-
if !blotter
|
|
739
|
-
raise CeedlingException.new("Ceedling configuration failed validation")
|
|
740
|
-
end
|
|
417
|
+
fail_unless_valid( ESSENTIAL_VALIDATIONS.map { |validation| @configurator_setup.public_send( validation, config ) } )
|
|
741
418
|
end
|
|
742
419
|
|
|
743
420
|
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
blotter &= @configurator_setup.validate_paths( config )
|
|
748
|
-
blotter &= @configurator_setup.validate_tools( config )
|
|
749
|
-
blotter &= @configurator_setup.validate_test_runner_generation(
|
|
750
|
-
config,
|
|
751
|
-
app_cfg[:include_test_case],
|
|
752
|
-
app_cfg[:exclude_test_case]
|
|
753
|
-
)
|
|
754
|
-
blotter &= @configurator_setup.validate_defines( config )
|
|
755
|
-
blotter &= @configurator_setup.validate_flags( config )
|
|
756
|
-
blotter &= @configurator_setup.validate_test_preprocessor( config )
|
|
757
|
-
blotter &= @configurator_setup.validate_backtrace( config )
|
|
758
|
-
blotter &= @configurator_setup.validate_threads( config )
|
|
759
|
-
blotter &= @configurator_setup.validate_partials( config )
|
|
760
|
-
blotter &= @configurator_setup.validate_plugins( config )
|
|
761
|
-
|
|
762
|
-
# Informational notices
|
|
763
|
-
@configurator_setup.warnings_for_problematic_configs( config )
|
|
764
|
-
|
|
765
|
-
if !blotter
|
|
766
|
-
raise CeedlingException.new( "Ceedling configuration failed validation" )
|
|
767
|
-
end
|
|
421
|
+
# Every validation runs, so every problem is reported, before configuration fails
|
|
422
|
+
def validate_final(config)
|
|
423
|
+
fail_unless_valid( FINAL_VALIDATIONS.map { |validation| @configurator_setup.public_send( validation, config ) } )
|
|
768
424
|
end
|
|
769
425
|
|
|
770
426
|
|
|
@@ -773,29 +429,24 @@ class Configurator
|
|
|
773
429
|
flattened_config = @configurator_builder.flattenify( config )
|
|
774
430
|
|
|
775
431
|
@configurator_setup.build_project_config( ceedling_lib_path, logging_path, flattened_config )
|
|
776
|
-
|
|
777
432
|
@configurator_setup.build_directory_structure( flattened_config )
|
|
778
433
|
|
|
779
434
|
# Copy Unity, CMock, CException into vendor directory within build directory
|
|
780
|
-
@configurator_setup.vendor_frameworks_and_support_files(
|
|
781
|
-
|
|
435
|
+
@configurator_setup.vendor_frameworks_and_support_files(
|
|
436
|
+
ceedling_lib_path, flattened_config, test_build: @test_build_tasks == true, release_build: @release_build_tasks == true
|
|
437
|
+
)
|
|
782
438
|
@configurator_setup.build_project_collections( flattened_config )
|
|
783
439
|
|
|
784
440
|
@project_config_hash = flattened_config.clone
|
|
785
|
-
|
|
786
|
-
@configurator_setup.build_constants_and_accessors( flattened_config, binding() )
|
|
441
|
+
@configurator_setup.build_constants_and_accessors( flattened_config, self )
|
|
787
442
|
|
|
788
443
|
# Top-level keys disappear when we flatten, so create global constants & accessors to any specified keys
|
|
789
|
-
keys
|
|
790
|
-
hash = { key => config[key] }
|
|
791
|
-
@configurator_setup.build_constants_and_accessors( hash, binding() )
|
|
792
|
-
end
|
|
444
|
+
build_section_constants( config, keys )
|
|
793
445
|
end
|
|
794
446
|
|
|
795
447
|
|
|
796
448
|
def redefine_element(elem, value)
|
|
797
|
-
|
|
798
|
-
elem = elem.to_sym if elem.class != Symbol
|
|
449
|
+
elem = elem.to_sym
|
|
799
450
|
|
|
800
451
|
# Ensure element already exists
|
|
801
452
|
if not @project_config_hash.include?(elem)
|
|
@@ -823,21 +474,16 @@ class Configurator
|
|
|
823
474
|
@project_config_hash.deep_merge!( config_more_flattened )
|
|
824
475
|
|
|
825
476
|
# create more constants and accessors
|
|
826
|
-
@configurator_setup.build_constants_and_accessors(config_more_flattened,
|
|
477
|
+
@configurator_setup.build_constants_and_accessors(config_more_flattened, self)
|
|
827
478
|
|
|
828
479
|
# recreate constants & update accessors with new merged, base values
|
|
829
|
-
config_more.keys
|
|
830
|
-
hash = { key => config_base[key] }
|
|
831
|
-
@configurator_setup.build_constants_and_accessors(hash, binding())
|
|
832
|
-
end
|
|
480
|
+
build_section_constants( config_base, config_more.keys )
|
|
833
481
|
end
|
|
834
482
|
|
|
835
483
|
|
|
836
484
|
def insert_rake_plugins(plugins)
|
|
837
485
|
plugins.each do |hash|
|
|
838
|
-
|
|
839
|
-
@reportinator.generate_progress( "Adding plugin #{hash[:plugin]} to Rake load list" )
|
|
840
|
-
end
|
|
486
|
+
progress( "Adding plugin #{hash[:plugin]} to Rake load list" )
|
|
841
487
|
|
|
842
488
|
@project_config_hash[:project_rakefile_component_files] << hash[:path]
|
|
843
489
|
end
|
|
@@ -847,36 +493,230 @@ class Configurator
|
|
|
847
493
|
|
|
848
494
|
private
|
|
849
495
|
|
|
850
|
-
def
|
|
851
|
-
|
|
496
|
+
def progress(message)
|
|
497
|
+
@loginator.lazy( Verbosity::OBNOXIOUS ) { @reportinator.generate_progress( message ) }
|
|
852
498
|
end
|
|
853
499
|
|
|
500
|
+
def debug(&message)
|
|
501
|
+
@loginator.lazy( Verbosity::DEBUG, &message )
|
|
502
|
+
end
|
|
854
503
|
|
|
855
|
-
def
|
|
856
|
-
|
|
504
|
+
def fail_unless_valid(results)
|
|
505
|
+
raise CeedlingException.new( "Ceedling configuration failed validation" ) unless results.all?
|
|
506
|
+
end
|
|
857
507
|
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
508
|
+
def log_notice(message)
|
|
509
|
+
@loginator.log( message, Verbosity::COMPLAIN, LogLabels::NOTICE )
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
# Probes the configured C preprocessor with the Unity header, which is always available,
|
|
513
|
+
# self-contained, and needs no include paths
|
|
514
|
+
def directives_only_supported?(config, tool_executor)
|
|
515
|
+
probe_tool = {
|
|
516
|
+
executable: config[:tools][:test_file_directives_only_preprocessor][:executable],
|
|
517
|
+
name: 'directives_only_probe',
|
|
518
|
+
arguments: DIRECTIVES_ONLY_PROBE_ARGUMENTS
|
|
519
|
+
}
|
|
520
|
+
command = tool_executor.build_command_line( probe_tool, [], File.join( CEEDLING_VENDOR, UNITY_LIB_PATH, UNITY_H_FILE ) )
|
|
521
|
+
|
|
522
|
+
# A failed probe means no support, so it must not raise
|
|
523
|
+
command[:options][:boom] = false
|
|
524
|
+
results = tool_executor.exec( command )
|
|
525
|
+
|
|
526
|
+
# Clang and some older GCC emit a warning (not an error) when -fdirectives-only is unsupported
|
|
527
|
+
return !(results[:output].match?( /warning[^\n]+-fdirectives-only/ ) || tool_executor.failed?( results ))
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
# config[:project] is guaranteed to exist / validated to exist but may not include the
|
|
531
|
+
# settings read here. config[:test_build] and config[:release_build] are optional.
|
|
532
|
+
def needed_tools_defaults(config)
|
|
533
|
+
release = setting( config, :project, :release_build )
|
|
534
|
+
|
|
535
|
+
return [
|
|
536
|
+
[DEFAULT_TOOLS_TEST, true],
|
|
537
|
+
[DEFAULT_TOOLS_TEST_PREPROCESSORS, setting( config, :project, :use_test_preprocessor ) != :none],
|
|
538
|
+
[DEFAULT_TOOLS_TEST_ASSEMBLER, setting( config, :test_build, :use_assembly )],
|
|
539
|
+
[DEFAULT_TOOLS_TEST_GDB_BACKTRACE, setting( config, :project, :use_backtrace ) == :gdb],
|
|
540
|
+
[DEFAULT_TOOLS_RELEASE, release],
|
|
541
|
+
[DEFAULT_TOOLS_RELEASE_ASSEMBLER, release && setting( config, :release_build, :use_assembly )]
|
|
542
|
+
].select { |_, needed| needed }.map( &:first )
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
# A setting from the configuration, or Ceedling's default when the configuration lacks it
|
|
546
|
+
def setting(config, *keys)
|
|
547
|
+
value, _ = @config_walkinator.fetch_value( *keys, hash:config, default: DEFAULT_CEEDLING_PROJECT_CONFIG.dig( *keys ) )
|
|
548
|
+
return value
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
# Loads a plugin's YAML, naming the plugin in any failure
|
|
552
|
+
def load_plugin_yaml(path, failure)
|
|
553
|
+
return @yaml_wrapper.load( path )
|
|
554
|
+
rescue YamlLoadException => e
|
|
555
|
+
raise YamlLoadException.new(
|
|
556
|
+
reason: e.reason, source: e.source, original_error: e.original_error,
|
|
557
|
+
message: "#{failure} ⏩️ #{e.message}"
|
|
558
|
+
)
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
def merge_plugin_defaults(kind, defaults_by_plugin, default_config)
|
|
562
|
+
return if defaults_by_plugin.empty?
|
|
563
|
+
|
|
564
|
+
progress( "Collecting Plugin #{kind} defaults" )
|
|
565
|
+
|
|
566
|
+
defaults_by_plugin.each do |plugin, defaults|
|
|
567
|
+
debug { " - #{plugin} >> #{defaults}" }
|
|
568
|
+
default_config.deep_merge( defaults )
|
|
862
569
|
end
|
|
863
|
-
|
|
864
|
-
return paths.flatten()
|
|
865
570
|
end
|
|
866
571
|
|
|
572
|
+
def prepare_cmock_config(cmock)
|
|
573
|
+
# Plugins housekeeping
|
|
574
|
+
cmock[:plugins].map! { |plugin| plugin.to_sym() }.uniq!
|
|
867
575
|
|
|
868
|
-
|
|
869
|
-
paths = []
|
|
576
|
+
include_unity_helpers( cmock )
|
|
870
577
|
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
578
|
+
# Add mocking prefix symbol for all test compilation
|
|
579
|
+
cmock[:defines] << "CMOCK_MOCK_PREFIX=#{cmock[:mock_prefix]}"
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
# A Unity helper path may be a single string. Each helper's header is included in every mock.
|
|
583
|
+
def include_unity_helpers(cmock)
|
|
584
|
+
cmock[:unity_helper_path] = [cmock[:unity_helper_path]] if cmock[:unity_helper_path].is_a?( String )
|
|
585
|
+
cmock[:includes].concat( cmock[:unity_helper_path].map { |path| File.basename( path ) } ).uniq!
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
def copy_runner_options(config, runner)
|
|
589
|
+
RUNNER_CMOCK_OPTIONS.each { |option| runner[option] = config[:cmock][option] }
|
|
590
|
+
RUNNER_UNITY_OPTIONS.each { |option| runner[option] = config[:unity][option] }
|
|
591
|
+
runner[:defines] += config[:unity][:defines]
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
def force_cmdline_args(runner, reason)
|
|
595
|
+
return unless runner[:cmdline_args] == false
|
|
596
|
+
|
|
597
|
+
runner[:cmdline_args] = true
|
|
598
|
+
log_notice( "Enabled :test_runner ↳ :cmdline_args because #{reason}." )
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
def test_case_filters?
|
|
602
|
+
return !(@include_test_case.to_s.empty? && @exclude_test_case.to_s.empty?)
|
|
603
|
+
end
|
|
604
|
+
|
|
605
|
+
def populate_tool(name, tool)
|
|
606
|
+
raise CeedlingException.new( "Expected configuration for tool :#{name} is a Hash but found #{tool.class}" ) unless tool.is_a?( Hash )
|
|
607
|
+
|
|
608
|
+
# Populate name if not given
|
|
609
|
+
ToolExecutor.default_name!( tool, name.to_s )
|
|
610
|
+
|
|
611
|
+
# Populate $stderr redirect option
|
|
612
|
+
tool[:stderr_redirect] = StdErrRedirect::NONE if (tool[:stderr_redirect].nil?)
|
|
613
|
+
|
|
614
|
+
# Populate optional option to control verification of executable in search paths
|
|
615
|
+
tool[:optional] = false if (tool[:optional].nil?)
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
# The executable and arguments a tool's :tools_<name> shortcut gives, if any
|
|
619
|
+
def tool_shortcut(config, name)
|
|
620
|
+
shortcut = :"tools_#{name}"
|
|
621
|
+
|
|
622
|
+
executable, _ = @config_walkinator.fetch_value( shortcut, :executable, hash:config )
|
|
623
|
+
arguments, _ = @config_walkinator.fetch_value( shortcut, :arguments, hash:config, default: [] )
|
|
624
|
+
|
|
625
|
+
return executable, arguments
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
def shortcut_message(name, executable, arguments)
|
|
629
|
+
message = " > #{name}\n"
|
|
630
|
+
message += " executable: \"#{executable}\"\n" unless executable.nil?
|
|
631
|
+
message += " arguments: " + arguments.map { |arg| "\"#{arg}\"" }.join( ', ' ) + "\n" unless arguments.empty?
|
|
632
|
+
return message
|
|
633
|
+
end
|
|
634
|
+
|
|
635
|
+
# A plugin's :paths entries are expanded. $PLUGIN_PATH in one names the plugin's own directory.
|
|
636
|
+
def resolve_plugin_paths(plugin_config, plugin_config_path)
|
|
637
|
+
return unless plugin_config.include?( :paths )
|
|
638
|
+
|
|
639
|
+
plugin_path = plugin_config_path.match( /(.*)[\/]config[\/]\w+\.yml/ )[1]
|
|
640
|
+
plugin_config[:paths].transform_values! do |paths|
|
|
641
|
+
paths.map { |path| File.expand_path( path.gsub( /\$PLUGIN_PATH/, plugin_path ) ) }
|
|
876
642
|
end
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
# The value, a string or list of strings, is expanded and joined into one string. A PATH
|
|
646
|
+
# list, however its name is written, joins with the platform path separator, ':' or ';',
|
|
647
|
+
# and any other list with spaces. The variable is set in the environment by its name upcased.
|
|
648
|
+
def eval_environment_variable(entry)
|
|
649
|
+
name, value = entry.first
|
|
650
|
+
items = expand_environment_items( name, value.is_a?( Array ) ? value : [value] )
|
|
651
|
+
entry[name] = items.join( name.to_s.casecmp?( 'path' ) ? File::PATH_SEPARATOR : ' ' )
|
|
652
|
+
|
|
653
|
+
@system_wrapper.env_set( name.to_s.upcase, entry[name] )
|
|
654
|
+
debug { " - #{name.to_s.upcase}: \"#{entry[name]}\"" }
|
|
655
|
+
end
|
|
877
656
|
|
|
657
|
+
def expand_environment_items(name, items)
|
|
658
|
+
items.each { |item| item.replace( @ruby_expandinator.expand( item, source: ":environment ↳ #{name}" ) ) if item.is_a?( String ) }
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
def eval_path_section(config, section)
|
|
662
|
+
config[section].each_pair do |entry, paths|
|
|
663
|
+
# Sub-entries (e.g. :test) could be a single string -> make array
|
|
664
|
+
reform_path_entries_as_lists( config[section], entry, paths )
|
|
665
|
+
eval_path_entries( paths, source: ":#{section} ↳ #{entry}" )
|
|
666
|
+
end
|
|
667
|
+
end
|
|
668
|
+
|
|
669
|
+
# :project ↳ :build_root and :release_build ↳ :artifacts are individual paths that don't
|
|
670
|
+
# follow the _path/_paths key convention. :release_build may be absent in minimal configs.
|
|
671
|
+
def standalone_paths(config)
|
|
672
|
+
return [ config[:project][:build_root], config[:release_build][:artifacts] ] if config[:release_build]
|
|
673
|
+
|
|
674
|
+
log_notice( ":release_build section absent from config ➡️ skipping :artifacts path standardization." )
|
|
675
|
+
return [ config[:project][:build_root] ]
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
# Each entry becomes a list, without the nil or empty entries standardizing leaves of a
|
|
679
|
+
# non-String or whitespace-only value
|
|
680
|
+
def standardize_path_section(section)
|
|
681
|
+
section.transform_values! do |paths|
|
|
682
|
+
[paths].flatten
|
|
683
|
+
.map { |path| FilePathUtils::standardize_in_place( path ) }
|
|
684
|
+
.reject { |path| path.nil? || (path.is_a?( String ) && path.empty?) }
|
|
685
|
+
end
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
# All other paths at secondary hash key level processed by convention (`_path`):
|
|
689
|
+
# ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are standardized
|
|
690
|
+
def standardize_convention_paths(config)
|
|
691
|
+
config.each_value { |child| collect_path_list( child ).each { |path| FilePathUtils::standardize_in_place( path ) } }
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
def build_section_constants(config, keys)
|
|
695
|
+
keys.each { |key| @configurator_setup.build_constants_and_accessors( { key => config[key] }, self ) }
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
def reform_path_entries_as_lists( container, entry, value )
|
|
699
|
+
container[entry] = [value] if value.is_a?( String )
|
|
700
|
+
end
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
def collect_path_list( container )
|
|
704
|
+
return [] unless container.is_a?( Hash )
|
|
705
|
+
|
|
706
|
+
return container.select { |key, _| key.to_s =~ /_path(s)?$/ }.values.flatten
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
def eval_path_entries( container, source: )
|
|
711
|
+
paths = case container
|
|
712
|
+
when Array then container.flatten
|
|
713
|
+
when String then [container]
|
|
714
|
+
else []
|
|
715
|
+
end
|
|
716
|
+
|
|
717
|
+
# An unset path setting has nothing to expand
|
|
878
718
|
paths.each do |path|
|
|
879
|
-
path.replace( @ruby_expandinator.expand( path, source: source ) )
|
|
719
|
+
path.replace( @ruby_expandinator.expand( path, source: source ) ) if path.is_a?( String )
|
|
880
720
|
end
|
|
881
721
|
end
|
|
882
722
|
|
|
@@ -902,4 +742,3 @@ class Configurator
|
|
|
902
742
|
end
|
|
903
743
|
|
|
904
744
|
end
|
|
905
|
-
|