ceedling 1.1.9 → 1.2.0
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 +53 -30
- data/Rakefile +768 -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 +7 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +89 -57
- data/bin/cli_helper.rb +90 -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 +39 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +86 -4
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +32 -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 +366 -530
- 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 +343 -610
- 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 +245 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +202 -75
- 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 +93 -25
- 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 +218 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +272 -117
- 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/rakefile.rb +2 -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/rakefiles/tests/rules_tests.rake +43 -0
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +80 -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 +9 -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 +783 -415
- 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 +70 -107
- 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 +12 -8
- 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 +33 -11
- data/site-local/404.html +248 -14
- data/site-local/configuration/environment-vars.html +248 -14
- data/site-local/configuration/global-collections.html +248 -19
- data/site-local/configuration/index.html +249 -15
- data/site-local/configuration/loading.html +260 -22
- data/site-local/configuration/mixins.html +252 -17
- data/site-local/configuration/parallel-builds.html +248 -14
- data/site-local/configuration/project-file.html +275 -30
- data/site-local/configuration/reference/cexception.html +255 -20
- data/site-local/configuration/reference/cmock.html +281 -14
- data/site-local/configuration/reference/defines.html +262 -19
- data/site-local/configuration/reference/environment.html +251 -17
- data/site-local/configuration/reference/extension.html +361 -16
- data/site-local/configuration/reference/files.html +262 -14
- data/site-local/configuration/reference/flags.html +270 -19
- data/site-local/configuration/reference/index.html +248 -14
- data/site-local/configuration/reference/libraries.html +248 -14
- data/site-local/configuration/reference/mixins.html +248 -14
- data/site-local/configuration/reference/partials.html +249 -19
- data/site-local/configuration/reference/paths.html +275 -15
- data/site-local/configuration/reference/plugins.html +248 -14
- data/site-local/configuration/reference/project.html +291 -14
- data/site-local/configuration/reference/release-build.html +256 -14
- data/site-local/configuration/reference/test-build.html +290 -24
- data/site-local/configuration/reference/test-runner.html +288 -17
- data/site-local/configuration/reference/tools.html +254 -14
- data/site-local/configuration/reference/unity.html +280 -15
- data/site-local/configuration/which-ceedling.html +248 -14
- data/site-local/development/index.html +261 -14
- data/site-local/development/plugins/configuration.html +269 -17
- data/site-local/development/plugins/index.html +267 -15
- data/site-local/development/plugins/plugin-subclass.html +906 -154
- data/site-local/development/plugins/rake-tasks.html +276 -14
- data/site-local/development/releases.html +4708 -0
- data/site-local/development/workflow.html +1030 -51
- data/site-local/getting-started/builds.html +4607 -0
- data/site-local/getting-started/command-line.html +418 -34
- data/site-local/getting-started/example-projects/cipher-quest.html +248 -14
- data/site-local/getting-started/example-projects/index.html +249 -15
- data/site-local/getting-started/example-projects/temp-sensor.html +248 -14
- data/site-local/getting-started/example-projects/wondrous-forest.html +248 -14
- data/site-local/getting-started/index.html +255 -14
- data/site-local/getting-started/installation.html +258 -22
- data/site-local/getting-started/quick-start.html +251 -15
- data/site-local/help.html +255 -14
- data/site-local/index.html +292 -22
- data/site-local/overview/build-system.html +249 -15
- data/site-local/overview/index.html +248 -14
- data/site-local/overview/test-environments.html +257 -14
- data/site-local/overview/tools-and-frameworks.html +248 -14
- data/site-local/plugins/beep.html +251 -14
- data/site-local/plugins/bullseye/index.html +5079 -0
- data/site-local/plugins/bullseye/licensing.html +4840 -0
- data/site-local/plugins/command-hooks.html +265 -27
- data/site-local/plugins/compile-commands-json-db.html +256 -17
- data/site-local/plugins/cppcheck.html +1081 -262
- data/site-local/plugins/dependencies.html +934 -242
- data/site-local/plugins/fff.html +297 -16
- data/site-local/plugins/gcov/examples.html +251 -14
- data/site-local/plugins/gcov/gcovr.html +686 -31
- data/site-local/plugins/gcov/index.html +251 -14
- data/site-local/plugins/gcov/overview.html +259 -18
- data/site-local/plugins/gcov/reportgenerator.html +563 -28
- data/site-local/plugins/gcov/reporting.html +348 -100
- data/site-local/plugins/gcov/setup.html +253 -15
- data/site-local/plugins/gcov/tool-versions.html +301 -19
- data/site-local/plugins/gcov/troubleshooting.html +273 -36
- data/site-local/plugins/index.html +294 -36
- data/site-local/plugins/module-generator.html +779 -195
- data/site-local/plugins/report-build-warnings-log.html +578 -33
- data/site-local/plugins/report-tests-gtestlike-stdout.html +467 -84
- data/site-local/plugins/report-tests-ide-stdout.html +654 -51
- data/site-local/plugins/report-tests-log-factory.html +337 -70
- data/site-local/plugins/report-tests-pretty-stdout.html +251 -14
- data/site-local/plugins/report-tests-raw-output-log.html +251 -14
- data/site-local/plugins/report-tests-teamcity-stdout.html +251 -14
- data/site-local/plugins/sanitize.html +5332 -0
- data/site-local/plugins/valgrind.html +416 -26
- data/site-local/{plugins/bullseye.html → project/index.html} +297 -217
- data/site-local/project/release-history.html +251 -17
- data/site-local/project/sbom.html +4726 -0
- data/site-local/project/upgrade.html +250 -16
- data/site-local/reference/build-directives.html +257 -14
- data/site-local/reference/command-line.html +373 -16
- data/site-local/reference/environment-vars.html +248 -14
- data/site-local/reference/gcov-plugin.html +492 -18
- data/site-local/reference/global-collections.html +249 -15
- data/site-local/reference/index.html +248 -14
- data/site-local/reference/partials-macros.html +258 -14
- data/site-local/reference/project-configuration.html +248 -14
- data/site-local/sitemap.xml.gz +0 -0
- data/site-local/snapshot/assets/{project.yml → features/project.yml} +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +248 -14
- data/site-local/snapshot/examples/temp_sensor/index.html +248 -14
- data/site-local/snapshot/examples/wondrous_forest/index.html +265 -25
- 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 +332 -22
- data/site-local/testing-guide/conventions.html +678 -153
- data/site-local/testing-guide/frameworks.html +248 -14
- data/site-local/testing-guide/index.html +248 -21
- data/site-local/testing-guide/partials/configuration.html +248 -14
- data/site-local/testing-guide/partials/conventions.html +316 -17
- data/site-local/testing-guide/partials/directives.html +456 -48
- data/site-local/testing-guide/partials/example.html +248 -14
- data/site-local/testing-guide/partials/index.html +255 -14
- data/site-local/testing-guide/partials/overview.html +248 -14
- data/site-local/testing-guide/partials/variables.html +248 -14
- data/site-local/testing-guide/test-cases.html +248 -14
- data/site-local/testing-guide/test-sample.html +248 -14
- data/site-local/testing-guide/test-suite-anatomy.html +248 -14
- 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 +180 -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 +244 -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/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 +130 -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 +159 -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 +90 -0
- data/spec/units/bin/cli_handler_spec.rb +204 -0
- data/spec/units/bin/cli_helper_spec.rb +238 -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 +706 -6
- data/spec/units/config/configurator_spec.rb +952 -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 +447 -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 +366 -77
- 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 +474 -36
- 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/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 +1653 -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 +770 -285
- 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 -50
- 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 -412
- 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 -140
- 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/assets/project.yml +0 -404
- 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/rules_tests.rake +0 -40
- 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/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,35 @@ 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
|
|
21
20
|
|
|
22
21
|
constructor :configurator_setup, :configurator_builder, :configurator_plugins, :config_walkinator, :yaml_wrapper, :system_wrapper, :loginator, :reportinator, :ruby_expandinator
|
|
23
22
|
|
|
23
|
+
# Validations of the sections everything else depends on. Configuration can reference
|
|
24
|
+
# environment variables that are evaluated early, so :environment is among them.
|
|
25
|
+
ESSENTIAL_VALIDATIONS = [:validate_required_sections, :validate_required_section_values, :validate_environment_vars].freeze
|
|
26
|
+
|
|
27
|
+
# Validations of the completed configuration
|
|
28
|
+
FINAL_VALIDATIONS = [
|
|
29
|
+
:validate_paths, :validate_tools, :validate_defines, :validate_flags, :validate_line_markers,
|
|
30
|
+
:validate_test_preprocessor, :validate_backtrace, :validate_threads, :validate_partials, :validate_plugins
|
|
31
|
+
].freeze
|
|
32
|
+
|
|
33
|
+
# CMock and Unity options that test runner generation also reads
|
|
34
|
+
RUNNER_CMOCK_OPTIONS = [:mock_prefix, :mock_suffix, :mock_name_include_folder, :enforce_strict_ordering].freeze
|
|
35
|
+
RUNNER_UNITY_OPTIONS = [:use_param_tests, :shuffle_tests].freeze
|
|
36
|
+
|
|
37
|
+
# A minimal subset of the directives-only preprocessor tool: no defines, no include paths,
|
|
38
|
+
# and output to stdout, so no platform-specific null device. It is enough to detect
|
|
39
|
+
# -fdirectives-only support by a warning or exit code.
|
|
40
|
+
DIRECTIVES_ONLY_PROBE_ARGUMENTS = ['-E', '-fdirectives-only', '-x c', "\"${1}\""].freeze
|
|
41
|
+
|
|
24
42
|
def setup()
|
|
25
43
|
# Cmock config reference to provide to CMock for mock generation
|
|
26
44
|
@cmock_config = {} # Default empty hash, replaced by reference below
|
|
@@ -28,8 +46,13 @@ class Configurator
|
|
|
28
46
|
# Runner config reference to provide to runner generation
|
|
29
47
|
@runner_config = {} # Default empty hash, replaced by reference below
|
|
30
48
|
|
|
31
|
-
#
|
|
32
|
-
|
|
49
|
+
# Unity config reference. The flattened project_config_hash holds no :unity section to read back.
|
|
50
|
+
@unity_config = {} # Default empty hash, replaced by reference below
|
|
51
|
+
|
|
52
|
+
# Partials config reference, for the same reason. Dependency-tracker meta hashes it whole.
|
|
53
|
+
@partials_config = {} # Default empty hash, replaced by reference below
|
|
54
|
+
|
|
55
|
+
# Accessors built from configuration read this
|
|
33
56
|
@project_config_hash = {}
|
|
34
57
|
|
|
35
58
|
@programmatic_plugins = []
|
|
@@ -39,34 +62,35 @@ class Configurator
|
|
|
39
62
|
@sanity_checks = TestResultsSanityChecks::NORMAL
|
|
40
63
|
end
|
|
41
64
|
|
|
65
|
+
# What startup learned of gdb backtraces (see ConfiguratorSetup#gdb_backtrace_state)
|
|
66
|
+
def gdb_backtrace_state
|
|
67
|
+
return @configurator_setup.gdb_backtrace_state
|
|
68
|
+
end
|
|
69
|
+
|
|
42
70
|
# Override to prevent exception handling from walking & stringifying the object variables.
|
|
43
71
|
# Object variables are gigantic and produce a flood of output.
|
|
44
72
|
def inspect
|
|
45
|
-
|
|
46
|
-
return this.class.name
|
|
73
|
+
return self.class.name
|
|
47
74
|
end
|
|
48
75
|
|
|
49
76
|
def replace_flattened_config(config)
|
|
50
77
|
@project_config_hash.merge!(config)
|
|
51
|
-
@configurator_setup.build_constants_and_accessors(@project_config_hash,
|
|
78
|
+
@configurator_setup.build_constants_and_accessors(@project_config_hash, self)
|
|
52
79
|
end
|
|
53
80
|
|
|
54
81
|
|
|
55
82
|
# Set up essential flattened config related to verbosity.
|
|
56
83
|
# We do this because early config validation failures may need access to verbosity,
|
|
57
84
|
# but the accessors won't be available until after configuration is validated.
|
|
58
|
-
|
|
59
|
-
|
|
85
|
+
# PROJECT_VERBOSITY and PROJECT_DEBUG are set by command line processing.
|
|
86
|
+
def set_verbosity()
|
|
87
|
+
debug = !!defined?(PROJECT_DEBUG) && PROJECT_DEBUG
|
|
88
|
+
define_singleton_method( :project_debug ) { debug }
|
|
60
89
|
|
|
61
|
-
if
|
|
62
|
-
eval("def project_debug() return true end", binding())
|
|
63
|
-
else
|
|
64
|
-
eval("def project_debug() return false end", binding())
|
|
65
|
-
end
|
|
90
|
+
return if !defined?(PROJECT_VERBOSITY)
|
|
66
91
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
end
|
|
92
|
+
verbosity = PROJECT_VERBOSITY
|
|
93
|
+
define_singleton_method( :project_verbosity ) { verbosity }
|
|
70
94
|
end
|
|
71
95
|
|
|
72
96
|
|
|
@@ -80,125 +104,33 @@ class Configurator
|
|
|
80
104
|
# If partials enabled, enable full test preprocessing
|
|
81
105
|
config[:project][:use_test_preprocessor] = :all
|
|
82
106
|
@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
107
|
end
|
|
102
108
|
|
|
103
109
|
|
|
110
|
+
# Directives-only preprocessing is available only when preprocessing is on, fallback
|
|
111
|
+
# is not forced, and the configured C preprocessor supports -fdirectives-only
|
|
104
112
|
def resolve_directives_only_preprocessing(config, tool_executor)
|
|
105
|
-
# Nothing to probe if preprocessing is disabled
|
|
106
|
-
preprocessing = config[:project][:use_test_preprocessor]
|
|
107
113
|
config[:test_build][:preprocess_directives_only_available] = false
|
|
108
|
-
return if preprocessing == :none
|
|
109
114
|
|
|
110
|
-
|
|
115
|
+
return if config[:project][:use_test_preprocessor] == :none
|
|
116
|
+
|
|
111
117
|
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
|
|
118
|
+
return log_notice( "Forcing best-effort fallback preprocessing in place of directives-only (:test_build ↳ :preprocess_force_fallback is enabled)." )
|
|
118
119
|
end
|
|
119
120
|
|
|
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
|
|
121
|
+
if !directives_only_supported?( config, tool_executor )
|
|
122
|
+
return log_notice( "Preprocessor lacks -fdirectives-only support ➡️ Ceedling will use best-effort fallback preprocessing." )
|
|
155
123
|
end
|
|
124
|
+
|
|
125
|
+
config[:test_build][:preprocess_directives_only_available] = true
|
|
156
126
|
end
|
|
157
127
|
|
|
158
128
|
|
|
159
|
-
# The default tools
|
|
129
|
+
# The default tools a build needs are merged into the default config hash
|
|
160
130
|
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
|
-
)
|
|
131
|
+
progress( 'Collecting default tool configurations' )
|
|
178
132
|
|
|
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)
|
|
133
|
+
needed_tools_defaults( config ).each { |defaults| default_config.deep_merge( defaults.deep_clone() ) }
|
|
202
134
|
end
|
|
203
135
|
|
|
204
136
|
|
|
@@ -206,9 +138,7 @@ class Configurator
|
|
|
206
138
|
# Cmock has its own internal defaults handling, but we need to set these specific values
|
|
207
139
|
# so they're guaranteed values and present for the Ceedling environment to access
|
|
208
140
|
|
|
209
|
-
|
|
210
|
-
@reportinator.generate_progress( 'Collecting CMock defaults' )
|
|
211
|
-
end
|
|
141
|
+
progress( 'Collecting CMock defaults' )
|
|
212
142
|
|
|
213
143
|
# Begin populating defaults with CMock defaults as set by Ceedling
|
|
214
144
|
default_cmock = default_config[:cmock]
|
|
@@ -237,52 +167,14 @@ class Configurator
|
|
|
237
167
|
end
|
|
238
168
|
|
|
239
169
|
|
|
170
|
+
# Plugin YAML defaults merge before plugin Ruby defaults. Neither replaces a value already present.
|
|
240
171
|
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 )
|
|
172
|
+
yaml_defaults = @configurator_plugins.find_plugin_yml_defaults( config, paths_hash ).to_h do |plugin, path|
|
|
173
|
+
[plugin, load_plugin_yaml( path, "Could not load default configuration for plugin '#{plugin}'" )]
|
|
270
174
|
end
|
|
271
175
|
|
|
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
|
|
176
|
+
merge_plugin_defaults( 'YAML', yaml_defaults, default_config )
|
|
177
|
+
merge_plugin_defaults( 'Ruby hash', @configurator_plugins.find_plugin_hash_defaults( config, paths_hash ), default_config )
|
|
286
178
|
end
|
|
287
179
|
|
|
288
180
|
|
|
@@ -291,118 +183,82 @@ class Configurator
|
|
|
291
183
|
config.deep_merge( runtime_config )
|
|
292
184
|
end
|
|
293
185
|
|
|
294
|
-
|
|
186
|
+
|
|
295
187
|
def populate_with_defaults( config_hash, defaults_hash )
|
|
296
|
-
|
|
297
|
-
@reportinator.generate_progress( 'Populating project configuration with collected default values' )
|
|
298
|
-
end
|
|
188
|
+
progress( 'Populating project configuration with collected default values' )
|
|
299
189
|
|
|
300
190
|
@configurator_builder.populate_with_defaults( config_hash, defaults_hash )
|
|
191
|
+
|
|
192
|
+
# Every :extension value is settled the moment defaults are merged in, well before
|
|
193
|
+
# validation or flattening ever look at it, so nothing downstream ever has to wonder
|
|
194
|
+
# whether a given :extension entry is a bare String or already a FilenameExtension.
|
|
195
|
+
@configurator_builder.normalize_filename_extensions( config_hash )
|
|
301
196
|
end
|
|
302
197
|
|
|
303
198
|
|
|
199
|
+
# Parameterized tests need Unity's test case and variadic macro support
|
|
304
200
|
def populate_unity_config(config)
|
|
305
|
-
|
|
306
|
-
@reportinator.generate_progress( 'Processing Unity configuration' )
|
|
307
|
-
end
|
|
201
|
+
progress( 'Processing Unity configuration' )
|
|
308
202
|
|
|
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
|
|
203
|
+
# Save Unity config reference
|
|
204
|
+
@unity_config = config[:unity]
|
|
318
205
|
|
|
206
|
+
config[:unity][:defines].concat( ['UNITY_SUPPORT_TEST_CASES', 'UNITY_SUPPORT_VARIADIC_MACROS'] ) if config[:unity][:use_param_tests]
|
|
319
207
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
@cmock_config = config[:cmock]
|
|
208
|
+
debug { "Unity configuration >> #{config[:unity]}" }
|
|
209
|
+
end
|
|
323
210
|
|
|
324
|
-
cmock = config[:cmock]
|
|
325
211
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
end
|
|
331
|
-
return
|
|
332
|
-
end
|
|
212
|
+
def populate_partials_config(config)
|
|
213
|
+
# Save Partials config reference. Unlike Unity, CMock, and the test runner, nothing
|
|
214
|
+
# derives values from or into this section.
|
|
215
|
+
@partials_config = config[:partials]
|
|
333
216
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
end
|
|
217
|
+
debug { "Partials configuration >> #{config[:partials]}" }
|
|
218
|
+
end
|
|
337
219
|
|
|
338
|
-
# Plugins housekeeping
|
|
339
|
-
cmock[:plugins].map! { |plugin| plugin.to_sym() }
|
|
340
|
-
cmock[:plugins].uniq!
|
|
341
220
|
|
|
342
|
-
|
|
343
|
-
|
|
221
|
+
# CMock needs no preparation when mocks are off
|
|
222
|
+
def populate_cmock_config(config)
|
|
223
|
+
# Save CMock config reference
|
|
224
|
+
@cmock_config = config[:cmock]
|
|
344
225
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
226
|
+
if config[:project][:use_mocks]
|
|
227
|
+
progress( 'Processing CMock configuration' )
|
|
228
|
+
prepare_cmock_config( config[:cmock] )
|
|
348
229
|
end
|
|
349
230
|
|
|
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
|
|
231
|
+
debug { "CMock configuration >> #{config[:cmock]}" }
|
|
358
232
|
end
|
|
359
233
|
|
|
360
234
|
|
|
361
235
|
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]
|
|
236
|
+
progress( 'Populating test runner generation settings' )
|
|
367
237
|
|
|
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
|
|
238
|
+
runner = config[:test_runner]
|
|
375
239
|
|
|
376
|
-
#
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
240
|
+
# Backtraces rerun test cases by name, and command line filters select them, both
|
|
241
|
+
# through runner command line arguments
|
|
242
|
+
force_cmdline_args( runner, ':project ↳ :use_backtrace is enabled' ) if config[:project][:use_backtrace] != :none
|
|
243
|
+
force_cmdline_args( runner, 'command line test case filters are in use' ) if test_case_filters?
|
|
380
244
|
|
|
381
|
-
|
|
382
|
-
config[:test_runner][:defines] += config[:unity][:defines]
|
|
383
|
-
config[:test_runner][:use_param_tests] = config[:unity][:use_param_tests]
|
|
245
|
+
copy_runner_options( config, runner )
|
|
384
246
|
|
|
385
|
-
@runner_config =
|
|
247
|
+
@runner_config = runner
|
|
386
248
|
|
|
387
|
-
|
|
388
|
-
"Test Runner configuration >> #{config[:test_runner]}"
|
|
389
|
-
end
|
|
249
|
+
debug { "Test Runner configuration >> #{runner}" }
|
|
390
250
|
end
|
|
391
251
|
|
|
392
252
|
|
|
393
253
|
def populate_exceptions_config(config)
|
|
394
254
|
# Automagically set exception handling if CMock is configured for it
|
|
395
255
|
if config[:cmock][:plugins] && config[:cmock][:plugins].include?(:cexception)
|
|
396
|
-
|
|
397
|
-
@reportinator.generate_progress( 'Enabling CException use based on CMock plugins settings' )
|
|
398
|
-
end
|
|
256
|
+
progress( 'Enabling CException use based on CMock plugins settings' )
|
|
399
257
|
|
|
400
258
|
config[:project][:use_exceptions] = true
|
|
401
259
|
end
|
|
402
260
|
|
|
403
|
-
|
|
404
|
-
"CException configuration >> #{config[:cexception]}"
|
|
405
|
-
end
|
|
261
|
+
debug { "CException configuration >> #{config[:cexception]}" }
|
|
406
262
|
end
|
|
407
263
|
|
|
408
264
|
|
|
@@ -420,120 +276,56 @@ class Configurator
|
|
|
420
276
|
end
|
|
421
277
|
|
|
422
278
|
|
|
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
|
|
279
|
+
def get_unity_config
|
|
280
|
+
# Clone for the same reason as get_runner_config/get_cmock_config above.
|
|
281
|
+
return @unity_config.clone
|
|
282
|
+
end
|
|
432
283
|
|
|
433
|
-
config[:tools].each_key do |name|
|
|
434
|
-
tool = config[:tools][name]
|
|
435
284
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
285
|
+
def get_partials_config
|
|
286
|
+
# Clone for the same reason as get_runner_config/get_cmock_config above.
|
|
287
|
+
return @partials_config.clone
|
|
288
|
+
end
|
|
439
289
|
|
|
440
|
-
# Populate name if not given
|
|
441
|
-
ToolExecutor.default_name!( tool, name.to_s )
|
|
442
290
|
|
|
443
|
-
|
|
444
|
-
|
|
291
|
+
# Fills in each tool's missing name, $stderr redirect, and optional flag
|
|
292
|
+
def populate_tools_config(config)
|
|
293
|
+
progress( 'Populating tool definition settings and expanding any string replacements' )
|
|
445
294
|
|
|
446
|
-
|
|
447
|
-
tool[:optional] = false if (tool[:optional].nil?)
|
|
448
|
-
end
|
|
295
|
+
config[:tools].each { |name, tool| populate_tool( name, tool ) }
|
|
449
296
|
end
|
|
450
297
|
|
|
451
298
|
|
|
452
|
-
#
|
|
453
|
-
#
|
|
454
|
-
# - Redefine executable
|
|
299
|
+
# A tool definition shortcut, :tools_<name>, may redefine the tool's executable and add
|
|
300
|
+
# arguments to it
|
|
455
301
|
#
|
|
456
302
|
# :tools_<name>
|
|
457
303
|
# :arguments: [...]
|
|
458
304
|
# :executable: '...'
|
|
459
305
|
def populate_tools_shortcuts(config)
|
|
460
|
-
|
|
461
|
-
@reportinator.generate_progress( 'Processing tool definition shortcuts' )
|
|
462
|
-
end
|
|
306
|
+
progress( 'Processing tool definition shortcuts' )
|
|
463
307
|
|
|
464
|
-
prefix = 'tools_'
|
|
465
308
|
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
|
|
309
|
+
executable, arguments = tool_shortcut( config, name )
|
|
310
|
+
next if executable.nil? and arguments.empty?
|
|
489
311
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
@loginator.lazy( Verbosity::DEBUG ) do
|
|
493
|
-
msg = " > #{name}\n"
|
|
312
|
+
tool[:executable] = executable unless executable.nil?
|
|
313
|
+
tool[:arguments].concat( arguments )
|
|
494
314
|
|
|
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
|
|
315
|
+
debug { shortcut_message( name, executable, arguments ) }
|
|
506
316
|
end
|
|
507
317
|
end
|
|
508
318
|
|
|
509
319
|
|
|
510
320
|
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
|
|
321
|
+
progress( 'Discovering all plugins' )
|
|
522
322
|
|
|
523
|
-
|
|
323
|
+
@rake_plugins = @configurator_plugins.find_rake_plugins( config, paths_hash )
|
|
524
324
|
@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
|
|
325
|
+
config_plugins = @configurator_plugins.find_config_plugins( config, paths_hash )
|
|
326
|
+
|
|
327
|
+
{ 'Rake' => @rake_plugins, 'Programmatic' => @programmatic_plugins, 'Config' => config_plugins }.each do |kind, plugins|
|
|
328
|
+
debug { " > #{kind} plugins: " + plugins.map { |plugin| plugin[:plugin] }.join( ', ' ) } unless plugins.empty?
|
|
537
329
|
end
|
|
538
330
|
end
|
|
539
331
|
|
|
@@ -547,82 +339,27 @@ class Configurator
|
|
|
547
339
|
end
|
|
548
340
|
|
|
549
341
|
|
|
342
|
+
# A plugin's configuration merges into the project's like a project file
|
|
550
343
|
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
|
|
344
|
+
@configurator_plugins.config_plugins.each do |plugin|
|
|
345
|
+
plugin_config = load_plugin_yaml( plugin[:path], "Could not load configuration from plugin '#{plugin[:plugin]}'" )
|
|
563
346
|
|
|
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
|
|
347
|
+
progress( "Merging configuration from plugin #{plugin[:plugin]}" )
|
|
348
|
+
debug { plugin_config.to_s }
|
|
578
349
|
|
|
579
|
-
|
|
350
|
+
resolve_plugin_paths( plugin_config, plugin[:path] )
|
|
351
|
+
config.deep_merge( plugin_config )
|
|
580
352
|
end
|
|
581
353
|
end
|
|
582
354
|
|
|
583
355
|
|
|
584
|
-
#
|
|
585
|
-
# (Each entry within the :environment array is a hash)
|
|
356
|
+
# Each :environment entry is a single-pair hash: a variable name and its value
|
|
586
357
|
def eval_environment_variables(config)
|
|
587
358
|
return if config[:environment].nil?
|
|
588
359
|
|
|
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
|
|
360
|
+
progress( 'Processing environment variables' )
|
|
614
361
|
|
|
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
|
|
362
|
+
config[:environment].each { |entry| eval_environment_variable( entry ) }
|
|
626
363
|
end
|
|
627
364
|
|
|
628
365
|
|
|
@@ -630,24 +367,12 @@ class Configurator
|
|
|
630
367
|
def eval_paths(config)
|
|
631
368
|
# :plugins ↳ :load_paths already handled
|
|
632
369
|
|
|
633
|
-
|
|
634
|
-
@reportinator.generate_progress( 'Processing path entries and expanding any string replacements' )
|
|
635
|
-
end
|
|
370
|
+
progress( 'Processing path entries and expanding any string replacements' )
|
|
636
371
|
|
|
637
372
|
eval_path_entries( config[:project][:build_root], source: ":project ↳ :build_root" )
|
|
638
373
|
eval_path_entries( config[:release_build][:artifacts], source: ":release_build ↳ :artifacts" )
|
|
639
374
|
|
|
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
|
|
375
|
+
[:paths, :files].each { |section| eval_path_section( config, section ) }
|
|
651
376
|
|
|
652
377
|
# All other paths at secondary hash key level processed by convention (`_path`):
|
|
653
378
|
# ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are evaluated
|
|
@@ -657,9 +382,7 @@ class Configurator
|
|
|
657
382
|
|
|
658
383
|
# Handle any Ruby string replacement for :flags string arrays
|
|
659
384
|
def eval_flags(config)
|
|
660
|
-
|
|
661
|
-
@reportinator.generate_progress( 'Expanding any string replacements in :flags entries' )
|
|
662
|
-
end
|
|
385
|
+
progress( 'Expanding any string replacements in :flags entries' )
|
|
663
386
|
|
|
664
387
|
# Descend down to array of command line flags strings regardless of depth in config block
|
|
665
388
|
traverse_hash_eval_string_arrays( config[:flags], source: ":flags" )
|
|
@@ -668,9 +391,7 @@ class Configurator
|
|
|
668
391
|
|
|
669
392
|
# Handle any Ruby string replacement for :defines string arrays
|
|
670
393
|
def eval_defines(config)
|
|
671
|
-
|
|
672
|
-
@reportinator.generate_progress( 'Expanding any string replacements in :defines entries' )
|
|
673
|
-
end
|
|
394
|
+
progress( 'Expanding any string replacements in :defines entries' )
|
|
674
395
|
|
|
675
396
|
# Descend down to array of #define strings regardless of depth in config block
|
|
676
397
|
traverse_hash_eval_string_arrays( config[:defines], source: ":defines" )
|
|
@@ -678,93 +399,27 @@ class Configurator
|
|
|
678
399
|
|
|
679
400
|
|
|
680
401
|
def standardize_paths(config)
|
|
681
|
-
|
|
682
|
-
@reportinator.generate_progress( 'Standardizing all paths' )
|
|
683
|
-
end
|
|
402
|
+
progress( 'Standardizing all paths' )
|
|
684
403
|
|
|
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
|
|
404
|
+
standalone_paths( config ).flatten.each { |path| FilePathUtils::standardize_in_place( path ) }
|
|
698
405
|
|
|
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
|
|
406
|
+
[:paths, :files].each { |section| standardize_path_section( config[section] ) }
|
|
716
407
|
|
|
717
|
-
config[:tools].
|
|
408
|
+
config[:tools].each_value { |tool| FilePathUtils::standardize_in_place( tool[:executable] ) if tool.include?( :executable ) }
|
|
718
409
|
|
|
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
|
|
410
|
+
standardize_convention_paths( config )
|
|
724
411
|
end
|
|
725
412
|
|
|
726
413
|
|
|
414
|
+
# Every validation runs, so every problem is reported, before configuration fails
|
|
727
415
|
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
|
|
416
|
+
fail_unless_valid( ESSENTIAL_VALIDATIONS.map { |validation| @configurator_setup.public_send( validation, config ) } )
|
|
741
417
|
end
|
|
742
418
|
|
|
743
419
|
|
|
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
|
|
420
|
+
# Every validation runs, so every problem is reported, before configuration fails
|
|
421
|
+
def validate_final(config)
|
|
422
|
+
fail_unless_valid( FINAL_VALIDATIONS.map { |validation| @configurator_setup.public_send( validation, config ) } )
|
|
768
423
|
end
|
|
769
424
|
|
|
770
425
|
|
|
@@ -773,29 +428,22 @@ class Configurator
|
|
|
773
428
|
flattened_config = @configurator_builder.flattenify( config )
|
|
774
429
|
|
|
775
430
|
@configurator_setup.build_project_config( ceedling_lib_path, logging_path, flattened_config )
|
|
776
|
-
|
|
777
431
|
@configurator_setup.build_directory_structure( flattened_config )
|
|
778
432
|
|
|
779
433
|
# Copy Unity, CMock, CException into vendor directory within build directory
|
|
780
434
|
@configurator_setup.vendor_frameworks_and_support_files( ceedling_lib_path, flattened_config )
|
|
781
|
-
|
|
782
435
|
@configurator_setup.build_project_collections( flattened_config )
|
|
783
436
|
|
|
784
437
|
@project_config_hash = flattened_config.clone
|
|
785
|
-
|
|
786
|
-
@configurator_setup.build_constants_and_accessors( flattened_config, binding() )
|
|
438
|
+
@configurator_setup.build_constants_and_accessors( flattened_config, self )
|
|
787
439
|
|
|
788
440
|
# 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
|
|
441
|
+
build_section_constants( config, keys )
|
|
793
442
|
end
|
|
794
443
|
|
|
795
444
|
|
|
796
445
|
def redefine_element(elem, value)
|
|
797
|
-
|
|
798
|
-
elem = elem.to_sym if elem.class != Symbol
|
|
446
|
+
elem = elem.to_sym
|
|
799
447
|
|
|
800
448
|
# Ensure element already exists
|
|
801
449
|
if not @project_config_hash.include?(elem)
|
|
@@ -823,21 +471,16 @@ class Configurator
|
|
|
823
471
|
@project_config_hash.deep_merge!( config_more_flattened )
|
|
824
472
|
|
|
825
473
|
# create more constants and accessors
|
|
826
|
-
@configurator_setup.build_constants_and_accessors(config_more_flattened,
|
|
474
|
+
@configurator_setup.build_constants_and_accessors(config_more_flattened, self)
|
|
827
475
|
|
|
828
476
|
# 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
|
|
477
|
+
build_section_constants( config_base, config_more.keys )
|
|
833
478
|
end
|
|
834
479
|
|
|
835
480
|
|
|
836
481
|
def insert_rake_plugins(plugins)
|
|
837
482
|
plugins.each do |hash|
|
|
838
|
-
|
|
839
|
-
@reportinator.generate_progress( "Adding plugin #{hash[:plugin]} to Rake load list" )
|
|
840
|
-
end
|
|
483
|
+
progress( "Adding plugin #{hash[:plugin]} to Rake load list" )
|
|
841
484
|
|
|
842
485
|
@project_config_hash[:project_rakefile_component_files] << hash[:path]
|
|
843
486
|
end
|
|
@@ -847,36 +490,230 @@ class Configurator
|
|
|
847
490
|
|
|
848
491
|
private
|
|
849
492
|
|
|
850
|
-
def
|
|
851
|
-
|
|
493
|
+
def progress(message)
|
|
494
|
+
@loginator.lazy( Verbosity::OBNOXIOUS ) { @reportinator.generate_progress( message ) }
|
|
852
495
|
end
|
|
853
496
|
|
|
497
|
+
def debug(&message)
|
|
498
|
+
@loginator.lazy( Verbosity::DEBUG, &message )
|
|
499
|
+
end
|
|
854
500
|
|
|
855
|
-
def
|
|
856
|
-
|
|
501
|
+
def fail_unless_valid(results)
|
|
502
|
+
raise CeedlingException.new( "Ceedling configuration failed validation" ) unless results.all?
|
|
503
|
+
end
|
|
857
504
|
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
505
|
+
def log_notice(message)
|
|
506
|
+
@loginator.log( message, Verbosity::COMPLAIN, LogLabels::NOTICE )
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
# Probes the configured C preprocessor with the Unity header, which is always available,
|
|
510
|
+
# self-contained, and needs no include paths
|
|
511
|
+
def directives_only_supported?(config, tool_executor)
|
|
512
|
+
probe_tool = {
|
|
513
|
+
executable: config[:tools][:test_file_directives_only_preprocessor][:executable],
|
|
514
|
+
name: 'directives_only_probe',
|
|
515
|
+
arguments: DIRECTIVES_ONLY_PROBE_ARGUMENTS
|
|
516
|
+
}
|
|
517
|
+
command = tool_executor.build_command_line( probe_tool, [], File.join( CEEDLING_VENDOR, UNITY_LIB_PATH, UNITY_H_FILE ) )
|
|
518
|
+
|
|
519
|
+
# A failed probe means no support, so it must not raise
|
|
520
|
+
command[:options][:boom] = false
|
|
521
|
+
results = tool_executor.exec( command )
|
|
522
|
+
|
|
523
|
+
# Clang and some older GCC emit a warning (not an error) when -fdirectives-only is unsupported
|
|
524
|
+
return !(results[:output].match?( /warning[^\n]+-fdirectives-only/ ) || tool_executor.failed?( results ))
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
# config[:project] is guaranteed to exist / validated to exist but may not include the
|
|
528
|
+
# settings read here. config[:test_build] and config[:release_build] are optional.
|
|
529
|
+
def needed_tools_defaults(config)
|
|
530
|
+
release = setting( config, :project, :release_build )
|
|
531
|
+
|
|
532
|
+
return [
|
|
533
|
+
[DEFAULT_TOOLS_TEST, true],
|
|
534
|
+
[DEFAULT_TOOLS_TEST_PREPROCESSORS, setting( config, :project, :use_test_preprocessor ) != :none],
|
|
535
|
+
[DEFAULT_TOOLS_TEST_ASSEMBLER, setting( config, :test_build, :use_assembly )],
|
|
536
|
+
[DEFAULT_TOOLS_TEST_GDB_BACKTRACE, setting( config, :project, :use_backtrace ) == :gdb],
|
|
537
|
+
[DEFAULT_TOOLS_RELEASE, release],
|
|
538
|
+
[DEFAULT_TOOLS_RELEASE_ASSEMBLER, release && setting( config, :release_build, :use_assembly )]
|
|
539
|
+
].select { |_, needed| needed }.map( &:first )
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
# A setting from the configuration, or Ceedling's default when the configuration lacks it
|
|
543
|
+
def setting(config, *keys)
|
|
544
|
+
value, _ = @config_walkinator.fetch_value( *keys, hash:config, default: DEFAULT_CEEDLING_PROJECT_CONFIG.dig( *keys ) )
|
|
545
|
+
return value
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
# Loads a plugin's YAML, naming the plugin in any failure
|
|
549
|
+
def load_plugin_yaml(path, failure)
|
|
550
|
+
return @yaml_wrapper.load( path )
|
|
551
|
+
rescue YamlLoadException => e
|
|
552
|
+
raise YamlLoadException.new(
|
|
553
|
+
reason: e.reason, source: e.source, original_error: e.original_error,
|
|
554
|
+
message: "#{failure} ⏩️ #{e.message}"
|
|
555
|
+
)
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
def merge_plugin_defaults(kind, defaults_by_plugin, default_config)
|
|
559
|
+
return if defaults_by_plugin.empty?
|
|
560
|
+
|
|
561
|
+
progress( "Collecting Plugin #{kind} defaults" )
|
|
562
|
+
|
|
563
|
+
defaults_by_plugin.each do |plugin, defaults|
|
|
564
|
+
debug { " - #{plugin} >> #{defaults}" }
|
|
565
|
+
default_config.deep_merge( defaults )
|
|
862
566
|
end
|
|
863
|
-
|
|
864
|
-
return paths.flatten()
|
|
865
567
|
end
|
|
866
568
|
|
|
569
|
+
def prepare_cmock_config(cmock)
|
|
570
|
+
# Plugins housekeeping
|
|
571
|
+
cmock[:plugins].map! { |plugin| plugin.to_sym() }.uniq!
|
|
867
572
|
|
|
868
|
-
|
|
869
|
-
paths = []
|
|
573
|
+
include_unity_helpers( cmock )
|
|
870
574
|
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
575
|
+
# Add mocking prefix symbol for all test compilation
|
|
576
|
+
cmock[:defines] << "CMOCK_MOCK_PREFIX=#{cmock[:mock_prefix]}"
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
# A Unity helper path may be a single string. Each helper's header is included in every mock.
|
|
580
|
+
def include_unity_helpers(cmock)
|
|
581
|
+
cmock[:unity_helper_path] = [cmock[:unity_helper_path]] if cmock[:unity_helper_path].is_a?( String )
|
|
582
|
+
cmock[:includes].concat( cmock[:unity_helper_path].map { |path| File.basename( path ) } ).uniq!
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
def copy_runner_options(config, runner)
|
|
586
|
+
RUNNER_CMOCK_OPTIONS.each { |option| runner[option] = config[:cmock][option] }
|
|
587
|
+
RUNNER_UNITY_OPTIONS.each { |option| runner[option] = config[:unity][option] }
|
|
588
|
+
runner[:defines] += config[:unity][:defines]
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
def force_cmdline_args(runner, reason)
|
|
592
|
+
return unless runner[:cmdline_args] == false
|
|
593
|
+
|
|
594
|
+
runner[:cmdline_args] = true
|
|
595
|
+
log_notice( "Enabled :test_runner ↳ :cmdline_args because #{reason}." )
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def test_case_filters?
|
|
599
|
+
return !(@include_test_case.to_s.empty? && @exclude_test_case.to_s.empty?)
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
def populate_tool(name, tool)
|
|
603
|
+
raise CeedlingException.new( "Expected configuration for tool :#{name} is a Hash but found #{tool.class}" ) unless tool.is_a?( Hash )
|
|
604
|
+
|
|
605
|
+
# Populate name if not given
|
|
606
|
+
ToolExecutor.default_name!( tool, name.to_s )
|
|
607
|
+
|
|
608
|
+
# Populate $stderr redirect option
|
|
609
|
+
tool[:stderr_redirect] = StdErrRedirect::NONE if (tool[:stderr_redirect].nil?)
|
|
610
|
+
|
|
611
|
+
# Populate optional option to control verification of executable in search paths
|
|
612
|
+
tool[:optional] = false if (tool[:optional].nil?)
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
# The executable and arguments a tool's :tools_<name> shortcut gives, if any
|
|
616
|
+
def tool_shortcut(config, name)
|
|
617
|
+
shortcut = :"tools_#{name}"
|
|
618
|
+
|
|
619
|
+
executable, _ = @config_walkinator.fetch_value( shortcut, :executable, hash:config )
|
|
620
|
+
arguments, _ = @config_walkinator.fetch_value( shortcut, :arguments, hash:config, default: [] )
|
|
621
|
+
|
|
622
|
+
return executable, arguments
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
def shortcut_message(name, executable, arguments)
|
|
626
|
+
message = " > #{name}\n"
|
|
627
|
+
message += " executable: \"#{executable}\"\n" unless executable.nil?
|
|
628
|
+
message += " arguments: " + arguments.map { |arg| "\"#{arg}\"" }.join( ', ' ) + "\n" unless arguments.empty?
|
|
629
|
+
return message
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
# A plugin's :paths entries are expanded. $PLUGIN_PATH in one names the plugin's own directory.
|
|
633
|
+
def resolve_plugin_paths(plugin_config, plugin_config_path)
|
|
634
|
+
return unless plugin_config.include?( :paths )
|
|
635
|
+
|
|
636
|
+
plugin_path = plugin_config_path.match( /(.*)[\/]config[\/]\w+\.yml/ )[1]
|
|
637
|
+
plugin_config[:paths].transform_values! do |paths|
|
|
638
|
+
paths.map { |path| File.expand_path( path.gsub( /\$PLUGIN_PATH/, plugin_path ) ) }
|
|
876
639
|
end
|
|
640
|
+
end
|
|
641
|
+
|
|
642
|
+
# The value, a string or list of strings, is expanded and joined into one string. A PATH
|
|
643
|
+
# list, however its name is written, joins with the platform path separator, ':' or ';',
|
|
644
|
+
# and any other list with spaces. The variable is set in the environment by its name upcased.
|
|
645
|
+
def eval_environment_variable(entry)
|
|
646
|
+
name, value = entry.first
|
|
647
|
+
items = expand_environment_items( name, value.is_a?( Array ) ? value : [value] )
|
|
648
|
+
entry[name] = items.join( name.to_s.casecmp?( 'path' ) ? File::PATH_SEPARATOR : ' ' )
|
|
649
|
+
|
|
650
|
+
@system_wrapper.env_set( name.to_s.upcase, entry[name] )
|
|
651
|
+
debug { " - #{name.to_s.upcase}: \"#{entry[name]}\"" }
|
|
652
|
+
end
|
|
877
653
|
|
|
654
|
+
def expand_environment_items(name, items)
|
|
655
|
+
items.each { |item| item.replace( @ruby_expandinator.expand( item, source: ":environment ↳ #{name}" ) ) if item.is_a?( String ) }
|
|
656
|
+
end
|
|
657
|
+
|
|
658
|
+
def eval_path_section(config, section)
|
|
659
|
+
config[section].each_pair do |entry, paths|
|
|
660
|
+
# Sub-entries (e.g. :test) could be a single string -> make array
|
|
661
|
+
reform_path_entries_as_lists( config[section], entry, paths )
|
|
662
|
+
eval_path_entries( paths, source: ":#{section} ↳ #{entry}" )
|
|
663
|
+
end
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
# :project ↳ :build_root and :release_build ↳ :artifacts are individual paths that don't
|
|
667
|
+
# follow the _path/_paths key convention. :release_build may be absent in minimal configs.
|
|
668
|
+
def standalone_paths(config)
|
|
669
|
+
return [ config[:project][:build_root], config[:release_build][:artifacts] ] if config[:release_build]
|
|
670
|
+
|
|
671
|
+
log_notice( ":release_build section absent from config ➡️ skipping :artifacts path standardization." )
|
|
672
|
+
return [ config[:project][:build_root] ]
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
# Each entry becomes a list, without the nil or empty entries standardizing leaves of a
|
|
676
|
+
# non-String or whitespace-only value
|
|
677
|
+
def standardize_path_section(section)
|
|
678
|
+
section.transform_values! do |paths|
|
|
679
|
+
[paths].flatten
|
|
680
|
+
.map { |path| FilePathUtils::standardize_in_place( path ) }
|
|
681
|
+
.reject { |path| path.nil? || (path.is_a?( String ) && path.empty?) }
|
|
682
|
+
end
|
|
683
|
+
end
|
|
684
|
+
|
|
685
|
+
# All other paths at secondary hash key level processed by convention (`_path`):
|
|
686
|
+
# ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are standardized
|
|
687
|
+
def standardize_convention_paths(config)
|
|
688
|
+
config.each_value { |child| collect_path_list( child ).each { |path| FilePathUtils::standardize_in_place( path ) } }
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
def build_section_constants(config, keys)
|
|
692
|
+
keys.each { |key| @configurator_setup.build_constants_and_accessors( { key => config[key] }, self ) }
|
|
693
|
+
end
|
|
694
|
+
|
|
695
|
+
def reform_path_entries_as_lists( container, entry, value )
|
|
696
|
+
container[entry] = [value] if value.is_a?( String )
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
def collect_path_list( container )
|
|
701
|
+
return [] unless container.is_a?( Hash )
|
|
702
|
+
|
|
703
|
+
return container.select { |key, _| key.to_s =~ /_path(s)?$/ }.values.flatten
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
def eval_path_entries( container, source: )
|
|
708
|
+
paths = case container
|
|
709
|
+
when Array then container.flatten
|
|
710
|
+
when String then [container]
|
|
711
|
+
else []
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
# An unset path setting has nothing to expand
|
|
878
715
|
paths.each do |path|
|
|
879
|
-
path.replace( @ruby_expandinator.expand( path, source: source ) )
|
|
716
|
+
path.replace( @ruby_expandinator.expand( path, source: source ) ) if path.is_a?( String )
|
|
880
717
|
end
|
|
881
718
|
end
|
|
882
719
|
|
|
@@ -902,4 +739,3 @@ class Configurator
|
|
|
902
739
|
end
|
|
903
740
|
|
|
904
741
|
end
|
|
905
|
-
|