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
|
@@ -7,33 +7,48 @@
|
|
|
7
7
|
|
|
8
8
|
require 'ceedling/constants'
|
|
9
9
|
require 'ceedling/exceptions'
|
|
10
|
-
|
|
11
|
-
# Add sort-ability to symbol so we can order keys array in hash for test-ability
|
|
12
|
-
class Symbol
|
|
13
|
-
include Comparable
|
|
14
|
-
|
|
15
|
-
def <=>(other)
|
|
16
|
-
self.to_s <=> other.to_s
|
|
17
|
-
end
|
|
18
|
-
end
|
|
10
|
+
require 'ceedling/config/line_marker_suppressors'
|
|
19
11
|
|
|
20
12
|
|
|
21
13
|
class ConfiguratorSetup
|
|
22
14
|
|
|
23
|
-
constructor :configurator_builder, :configurator_validator, :
|
|
24
|
-
|
|
15
|
+
constructor :configurator_builder, :configurator_validator, :loginator, :reportinator, :file_wrapper,
|
|
16
|
+
:system_wrapper, :tool_executor
|
|
17
|
+
|
|
18
|
+
# Path collections, in order, since each builds on those before it
|
|
19
|
+
PATH_COLLECTIONS = [
|
|
20
|
+
:expand_all_path_globs,
|
|
21
|
+
:collect_vendor_paths,
|
|
22
|
+
:collect_source_and_include_paths,
|
|
23
|
+
:collect_source_include_vendor_paths,
|
|
24
|
+
:collect_test_support_source_include_paths,
|
|
25
|
+
:collect_test_support_source_include_vendor_paths
|
|
26
|
+
].freeze
|
|
27
|
+
|
|
28
|
+
# File collections gathered after tests, assembly, and sources
|
|
29
|
+
FILE_COLLECTIONS = [
|
|
30
|
+
:collect_headers,
|
|
31
|
+
:collect_release_build_input,
|
|
32
|
+
:collect_existing_test_build_input,
|
|
33
|
+
:collect_release_artifact_extra_link_objects,
|
|
34
|
+
:collect_test_fixture_extra_link_objects,
|
|
35
|
+
:collect_vendor_framework_sources
|
|
36
|
+
].freeze
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# What startup learned of gdb backtraces: :usable, :fell_back to :simple, or :unknown
|
|
40
|
+
# when :gdb was never asked for
|
|
41
|
+
def gdb_backtrace_state
|
|
42
|
+
return @gdb_backtrace_state || :unknown
|
|
43
|
+
end
|
|
25
44
|
|
|
26
45
|
# Override to prevent exception handling from walking & stringifying the object variables.
|
|
27
46
|
# Object variables are gigantic and produce a flood of output.
|
|
28
47
|
def inspect
|
|
29
|
-
|
|
30
|
-
return this.class.name
|
|
48
|
+
return self.class.name
|
|
31
49
|
end
|
|
32
50
|
|
|
33
51
|
def build_project_config(ceedling_lib_path, logging_path, flattened_config)
|
|
34
|
-
# Housekeeping
|
|
35
|
-
@configurator_builder.cleanup( flattened_config )
|
|
36
|
-
|
|
37
52
|
# Add to hash values we build up from configuration & file system contents
|
|
38
53
|
flattened_config.merge!( @configurator_builder.set_build_paths( flattened_config, logging_path ) )
|
|
39
54
|
flattened_config.merge!( @configurator_builder.set_rakefile_components( ceedling_lib_path, flattened_config ) )
|
|
@@ -57,39 +72,29 @@ class ConfiguratorSetup
|
|
|
57
72
|
end
|
|
58
73
|
end
|
|
59
74
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
)
|
|
75
|
+
# A vendor destination must be a directory, and the marker file inside it (unity.c,
|
|
76
|
+
# cmock.c, CException.c) a plain file. An interrupted run, or a second Ceedling run racing
|
|
77
|
+
# this one, can leave either as the wrong type, and the copy would then fail on every
|
|
78
|
+
# later build. The whole destination is cleared, so the copy recreates it.
|
|
79
|
+
def heal_vendor_path(path, marker_file)
|
|
80
|
+
return unless corrupted_vendor_path?( path, marker_file )
|
|
67
81
|
|
|
68
|
-
|
|
69
|
-
@file_wrapper.
|
|
70
|
-
|
|
71
|
-
File.join( flattened_config[:cmock_vendor_path], CMOCK_LIB_PATH, '/.' ),
|
|
72
|
-
flattened_config[:project_build_vendor_cmock_path]
|
|
73
|
-
) if flattened_config[:project_use_mocks]
|
|
82
|
+
@loginator.log( "Removing corrupted vendor path (unexpected file/directory type): #{path}", Verbosity::COMPLAIN, LogLabels::NOTICE )
|
|
83
|
+
@file_wrapper.rm_rf( path )
|
|
84
|
+
end
|
|
74
85
|
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
# Copies the frameworks a build uses into build/vendor, and the support files its
|
|
87
|
+
# features need. Copies always, every run. An errant edit beneath build/vendor/, by hand,
|
|
88
|
+
# an IDE, or an automated agent, is overwritten from the canonical source by the next build.
|
|
89
|
+
def vendor_frameworks_and_support_files(ceedling_lib_path, flattened_config)
|
|
90
|
+
vendored_frameworks( flattened_config ).each do |source, destination, marker_file|
|
|
91
|
+
heal_vendor_path( destination, marker_file )
|
|
77
92
|
# '/.' to cause cp_r to copy directory contents
|
|
78
|
-
File.join(
|
|
79
|
-
flattened_config[:project_build_vendor_cexception_path]
|
|
80
|
-
) if flattened_config[:project_use_exceptions]
|
|
81
|
-
|
|
82
|
-
# Copy backtrace debugging script into build/test directory structure.
|
|
83
|
-
# Ensure the destination exists first — it may not on a fresh build since
|
|
84
|
-
# Rake's :directories task runs later than this configuration-time setup.
|
|
85
|
-
if flattened_config[:project_use_backtrace] == :gdb
|
|
86
|
-
@file_wrapper.mkdir( flattened_config[:project_build_tests_root] )
|
|
87
|
-
@file_wrapper.cp_r(
|
|
88
|
-
File.join( ceedling_lib_path, BACKTRACE_GDB_SCRIPT_FILE ),
|
|
89
|
-
flattened_config[:project_build_tests_root]
|
|
90
|
-
)
|
|
93
|
+
@file_wrapper.cp_r_with_retry( File.join( source, '/.' ), destination )
|
|
91
94
|
end
|
|
92
95
|
|
|
96
|
+
copy_backtrace_script( ceedling_lib_path, flattened_config ) if flattened_config[:project_use_backtrace] == :gdb
|
|
97
|
+
|
|
93
98
|
# Copy supporting partials code into build/vendor directory structure
|
|
94
99
|
@file_wrapper.cp_r(
|
|
95
100
|
File.join( ceedling_lib_path, CEEDLING_HEADER_FILEPATH ),
|
|
@@ -97,81 +102,44 @@ class ConfiguratorSetup
|
|
|
97
102
|
) if flattened_config[:project_use_partials]
|
|
98
103
|
end
|
|
99
104
|
|
|
105
|
+
# Tests are collected after path collections, both to merge and to filter out of sources
|
|
100
106
|
def build_project_collections(flattened_config)
|
|
101
|
-
|
|
102
|
-
flattened_config.merge!( @configurator_builder.expand_all_path_globs( flattened_config ) )
|
|
103
|
-
|
|
104
|
-
flattened_config.merge!( @configurator_builder.collect_vendor_paths( flattened_config ) )
|
|
105
|
-
flattened_config.merge!( @configurator_builder.collect_source_and_include_paths( flattened_config ) )
|
|
106
|
-
flattened_config.merge!( @configurator_builder.collect_source_include_vendor_paths( flattened_config ) )
|
|
107
|
-
flattened_config.merge!( @configurator_builder.collect_test_support_source_include_paths( flattened_config ) )
|
|
108
|
-
flattened_config.merge!( @configurator_builder.collect_test_support_source_include_vendor_paths( flattened_config ) )
|
|
107
|
+
PATH_COLLECTIONS.each { |collection| flattened_config.merge!( @configurator_builder.public_send( collection, flattened_config ) ) }
|
|
109
108
|
|
|
110
|
-
# Collect tests: (1) To be merged (2) To filter out of sources (preventing accidental mixing of tests and source)
|
|
111
109
|
tests_collection, tests_list = @configurator_builder.collect_tests( flattened_config )
|
|
112
110
|
flattened_config.merge!( tests_collection )
|
|
113
|
-
|
|
114
111
|
flattened_config.merge!( @configurator_builder.collect_assembly( flattened_config ) )
|
|
115
112
|
flattened_config.merge!( @configurator_builder.collect_source( flattened_config, tests_list ) )
|
|
116
|
-
|
|
117
|
-
flattened_config.merge!( @configurator_builder.
|
|
118
|
-
flattened_config.merge!( @configurator_builder.collect_existing_test_build_input( flattened_config ) )
|
|
119
|
-
flattened_config.merge!( @configurator_builder.collect_release_artifact_extra_link_objects( flattened_config ) )
|
|
120
|
-
flattened_config.merge!( @configurator_builder.collect_test_fixture_extra_link_objects( flattened_config ) )
|
|
121
|
-
flattened_config.merge!( @configurator_builder.collect_vendor_framework_sources( flattened_config ) )
|
|
113
|
+
|
|
114
|
+
FILE_COLLECTIONS.each { |collection| flattened_config.merge!( @configurator_builder.public_send( collection, flattened_config ) ) }
|
|
122
115
|
|
|
123
116
|
return flattened_config
|
|
124
117
|
end
|
|
125
118
|
|
|
126
119
|
|
|
127
|
-
def build_constants_and_accessors(config,
|
|
120
|
+
def build_constants_and_accessors(config, target)
|
|
128
121
|
@configurator_builder.build_global_constants(config)
|
|
129
|
-
@configurator_builder.build_accessor_methods(config,
|
|
122
|
+
@configurator_builder.build_accessor_methods(config, target)
|
|
130
123
|
end
|
|
131
124
|
|
|
132
125
|
|
|
133
126
|
def validate_required_sections(config)
|
|
134
|
-
|
|
135
|
-
validation << @configurator_validator.exists?(config, :project)
|
|
136
|
-
validation << @configurator_validator.exists?(config, :paths)
|
|
137
|
-
|
|
138
|
-
return false if (validation.include?(false))
|
|
139
|
-
return true
|
|
127
|
+
return [:project, :paths].map { |section| @configurator_validator.exists?( config, section ) }.all?
|
|
140
128
|
end
|
|
141
129
|
|
|
142
130
|
|
|
143
131
|
def validate_required_section_values(config)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
validation << @configurator_validator.exists?(config, :paths, :test)
|
|
147
|
-
validation << @configurator_validator.exists?(config, :paths, :source)
|
|
148
|
-
|
|
149
|
-
return false if (validation.include?(false))
|
|
150
|
-
return true
|
|
132
|
+
required = [ [:project, :build_root], [:paths, :test], [:paths, :source] ]
|
|
133
|
+
return required.map { |keys| @configurator_validator.exists?( config, *keys ) }.all?
|
|
151
134
|
end
|
|
152
135
|
|
|
153
136
|
|
|
137
|
+
# Every check runs, so every problem is reported
|
|
154
138
|
def validate_paths(config)
|
|
155
|
-
valid
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
config
|
|
159
|
-
valid &= @configurator_validator.validate_filepath_simple( path, :cmock, :unity_helper_path )
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
config[:plugins][:load_paths].each do |path|
|
|
163
|
-
valid &= @configurator_validator.validate_filepath_simple( path, :plugins, :load_paths )
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
config[:paths].keys.sort.each do |key|
|
|
167
|
-
valid &= @configurator_validator.validate_path_list(config, :paths, key)
|
|
168
|
-
valid &= @configurator_validator.validate_paths_entries(config, key)
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
config[:files].keys.sort.each do |key|
|
|
172
|
-
valid &= @configurator_validator.validate_path_list(config, :files, key)
|
|
173
|
-
valid &= @configurator_validator.validate_files_entries(config, key)
|
|
174
|
-
end
|
|
139
|
+
valid = validate_simple_paths( config[:cmock][:unity_helper_path], :cmock, :unity_helper_path )
|
|
140
|
+
valid &= validate_simple_paths( config[:plugins][:load_paths], :plugins, :load_paths )
|
|
141
|
+
valid &= validate_path_section( config, :paths, :validate_paths_entries )
|
|
142
|
+
valid &= validate_path_section( config, :files, :validate_files_entries )
|
|
175
143
|
|
|
176
144
|
return valid
|
|
177
145
|
end
|
|
@@ -183,611 +151,376 @@ class ConfiguratorSetup
|
|
|
183
151
|
valid &= @configurator_validator.validate_tool( config:config, key:tool )
|
|
184
152
|
end
|
|
185
153
|
|
|
154
|
+
# A gdb that failed validation needs no probe and no fallback warning
|
|
155
|
+
validate_gdb_attach_capability( config ) if valid
|
|
156
|
+
|
|
186
157
|
return valid
|
|
187
158
|
end
|
|
188
159
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
160
|
+
# A gdb that answers `--version` may still be unable to attach to a process. macOS often
|
|
161
|
+
# revokes a Homebrew gdb's debugger entitlement, after a Homebrew upgrade, a macOS update,
|
|
162
|
+
# or a Gatekeeper or taskgated cache reset. A project using `:use_backtrace: :gdb` on such
|
|
163
|
+
# a machine falls back to `:simple` backtraces with a warning, rather than failing validation.
|
|
164
|
+
#
|
|
165
|
+
# Validating the gdb tool already proved gdb present, so where no probe runs it is usable.
|
|
166
|
+
def validate_gdb_attach_capability(config)
|
|
167
|
+
return unless config[:project][:use_backtrace] == :gdb
|
|
168
|
+
|
|
169
|
+
@gdb_backtrace_state = :usable
|
|
170
|
+
return unless @system_wrapper.macos?
|
|
171
|
+
|
|
172
|
+
# The probe runs with :boom false, so its :exit_code is not the real exit code.
|
|
173
|
+
# Success comes from the process status.
|
|
174
|
+
result = probe_gdb_attach()
|
|
175
|
+
return if result[:status]&.success?
|
|
176
|
+
|
|
177
|
+
@gdb_backtrace_state = :fell_back
|
|
178
|
+
config[:project][:use_backtrace] = :simple
|
|
179
|
+
|
|
180
|
+
walk = @reportinator.generate_config_walk( [:project, :use_backtrace] )
|
|
181
|
+
msg = "#{walk} is ':gdb' but #{gdb_attach_failure( result )}. Falling back to ':simple' for this run."
|
|
182
|
+
@loginator.log( msg, Verbosity::ERRORS, LogLabels::WARNING )
|
|
183
|
+
end
|
|
201
184
|
|
|
202
|
-
|
|
185
|
+
# Launches a short-lived process, attaches gdb to it, and detaches at once. A clean
|
|
186
|
+
# attach proves gdb works here, which `--version` cannot. One shell command keeps the
|
|
187
|
+
# success path fast.
|
|
188
|
+
def probe_gdb_attach()
|
|
189
|
+
command = {
|
|
190
|
+
name: 'gdb_attach_probe',
|
|
191
|
+
line: %q{sh -c 'sleep 5 & pid=$!; gdb -q --batch --pid "$pid" --eval-command detach 2>&1; rc=$?; kill "$pid" 2>/dev/null; exit $rc'},
|
|
192
|
+
options: { boom: false }
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return @tool_executor.exec( command )
|
|
203
196
|
end
|
|
204
197
|
|
|
205
198
|
|
|
206
|
-
|
|
207
|
-
|
|
199
|
+
# Each :defines context holds a list of symbols. :test and :preprocess may instead hold a
|
|
200
|
+
# matcher hash of test filename matchers, each naming a list of symbols.
|
|
201
|
+
#
|
|
202
|
+
# :defines:
|
|
203
|
+
# :<context>:
|
|
204
|
+
# - FOO
|
|
205
|
+
# :test:
|
|
206
|
+
# :<matcher>:
|
|
207
|
+
# - FOO
|
|
208
|
+
def validate_defines(config)
|
|
209
|
+
defines = config[:defines]
|
|
208
210
|
|
|
209
211
|
return true if defines.nil?
|
|
212
|
+
return log_invalid( ":defines must contain key / value pairs, not #{defines.class.to_s.downcase} (see docs for examples)" ) unless defines.is_a?( Hash )
|
|
210
213
|
|
|
211
|
-
|
|
212
|
-
if defines.class != Hash
|
|
213
|
-
msg = ":defines must contain key / value pairs, not #{defines.class.to_s.downcase} (see docs for examples)"
|
|
214
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
215
|
-
return false
|
|
216
|
-
end
|
|
214
|
+
matcher_contexts = matcher_contexts( config, [:test, :preprocess] )
|
|
217
215
|
|
|
218
|
-
|
|
216
|
+
# :use_test_definition is a setting, not a context
|
|
217
|
+
return defines.reject { |context, _| context == :use_test_definition }.map do |context, entries|
|
|
218
|
+
validate_entries( [:defines, context], entries, matcher_contexts, 'compilation symbols' )
|
|
219
|
+
end.all?
|
|
220
|
+
end
|
|
219
221
|
|
|
220
|
-
# Validate that each context contains only a list of symbols or a matcher hash for :test / :preprocess context
|
|
221
|
-
#
|
|
222
|
-
# :defines:
|
|
223
|
-
# :<context>:
|
|
224
|
-
# - FOO
|
|
225
|
-
# - BAR
|
|
226
|
-
#
|
|
227
|
-
# or
|
|
228
|
-
#
|
|
229
|
-
# :defines:
|
|
230
|
-
# :test:
|
|
231
|
-
# :<matcher>:
|
|
232
|
-
# - FOO
|
|
233
|
-
# - BAR
|
|
234
|
-
# :preprocess:
|
|
235
|
-
# :<matcher>:
|
|
236
|
-
# - FOO
|
|
237
|
-
# - BAR
|
|
238
|
-
|
|
239
|
-
# These contexts support filename matchers optionally. Others can only contain simple lists
|
|
240
|
-
contexts_supporting_matchers = [:test, :preprocess]
|
|
241
|
-
contexts_supporting_matchers << :gcov if (_config && _config[:plugins] && _config[:plugins][:enabled] && _config[:plugins][:enabled].include?('gcov'))
|
|
242
|
-
|
|
243
|
-
defines.each_pair do |context, config|
|
|
244
|
-
walk = @reportinator.generate_config_walk( [:defines, context] )
|
|
245
|
-
|
|
246
|
-
# Special handling for configuration setting, not a hash context container
|
|
247
|
-
next if context == :use_test_definition
|
|
248
|
-
|
|
249
|
-
# Matcher contexts (only contexts that support matcher hashes)
|
|
250
|
-
if contexts_supporting_matchers.include? context
|
|
251
|
-
if config.class != Array and config.class != Hash
|
|
252
|
-
msg = "#{walk} entry '#{config}' must be a list or matcher, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
253
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
254
|
-
valid = false
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
# All other (simple) contexts
|
|
258
|
-
else
|
|
259
|
-
# Handle the (probably) common case of trying to use matchers for any context other than :test or :preprocess
|
|
260
|
-
if config.class == Hash
|
|
261
|
-
msg = "#{walk} entry '#{config}' must be a list; matcher hashes are only available for :test & :preprocess contexts (see docs for details)"
|
|
262
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
263
|
-
valid = false
|
|
264
|
-
# Catchall for any oddball entries
|
|
265
|
-
elsif config.class != Array
|
|
266
|
-
msg = "#{walk} entry '#{config}' must be a list, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
267
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
268
|
-
valid = false
|
|
269
|
-
end
|
|
270
|
-
end
|
|
271
|
-
end
|
|
272
222
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
# Ensure each item in list is a string
|
|
287
|
-
config.each do |symbol|
|
|
288
|
-
if symbol.class != String
|
|
289
|
-
walk = @reportinator.generate_config_walk( [:defines, context] )
|
|
290
|
-
msg = "#{walk} list entry #{symbol} must be a string, not #{symbol.class.to_s.downcase} (see docs for examples)"
|
|
291
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
292
|
-
valid = false
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
end
|
|
223
|
+
# Each :flags context holds operations, each a list of flags. :test operations may instead
|
|
224
|
+
# hold a matcher hash of test filename matchers, each naming a list of flags.
|
|
225
|
+
#
|
|
226
|
+
# :flags:
|
|
227
|
+
# :<context>:
|
|
228
|
+
# :<operation>:
|
|
229
|
+
# - --flag
|
|
230
|
+
# :test:
|
|
231
|
+
# :<operation>:
|
|
232
|
+
# :<matcher>:
|
|
233
|
+
# - --flag
|
|
234
|
+
def validate_flags(config)
|
|
235
|
+
flags = config[:flags]
|
|
296
236
|
|
|
297
|
-
|
|
298
|
-
#
|
|
299
|
-
# :test:
|
|
300
|
-
# :<matcher>: # Can be wildcard, substring, or regular expression in a string or symbol
|
|
301
|
-
# - FOO
|
|
302
|
-
# - BAR
|
|
303
|
-
# :preprocess:
|
|
304
|
-
# :<matcher>: # Can be wildcard, substring, or regular expression in a string or symbol
|
|
305
|
-
# - FOO
|
|
306
|
-
# - BAR
|
|
307
|
-
|
|
308
|
-
contexts = [:test, :preprocess]
|
|
309
|
-
|
|
310
|
-
contexts.each do |context|
|
|
311
|
-
matchers = defines[context]
|
|
312
|
-
|
|
313
|
-
# Skip processing if context isn't present or is present but is not a matcher hash
|
|
314
|
-
next if matchers.nil? or matchers.class != Hash
|
|
315
|
-
|
|
316
|
-
# Inspect each test matcher
|
|
317
|
-
matchers.each_pair do |matcher, symbols|
|
|
318
|
-
|
|
319
|
-
walk = @reportinator.generate_config_walk( [:defines, context, matcher] )
|
|
320
|
-
|
|
321
|
-
# Ensure container associated with matcher is a list
|
|
322
|
-
if symbols.class != Array
|
|
323
|
-
msg = "#{walk} entry '#{symbols}' is not a list of compilation symbols but a #{symbols.class.to_s.downcase}"
|
|
324
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
325
|
-
valid = false
|
|
326
|
-
|
|
327
|
-
# Skip further validation if matcher value is not a list of symbols
|
|
328
|
-
next
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
# Handle any YAML alias nesting in array
|
|
332
|
-
symbols.flatten!()
|
|
333
|
-
|
|
334
|
-
# Ensure matcher itself is a Ruby symbol or string
|
|
335
|
-
if matcher.class != Symbol and matcher.class != String
|
|
336
|
-
msg = "#{walk} matcher is not a string or symbol"
|
|
337
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
338
|
-
valid = false
|
|
339
|
-
|
|
340
|
-
# Skip further validation if matcher key is not a symbol
|
|
341
|
-
next
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
walk = @reportinator.generate_config_walk( [:defines, context, matcher] )
|
|
345
|
-
|
|
346
|
-
# Ensure each item in compilation symbols list for matcher is a string
|
|
347
|
-
symbols.each do |symbol|
|
|
348
|
-
if symbol.class != String
|
|
349
|
-
msg = "#{walk} entry '#{symbol}' is not a string"
|
|
350
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
351
|
-
valid = false
|
|
352
|
-
end
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
begin
|
|
356
|
-
@configurator_validator.validate_matcher( matcher.to_s.strip() )
|
|
357
|
-
rescue Exception => ex
|
|
358
|
-
msg = "Matcher #{walk} contains #{ex.message}"
|
|
359
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
360
|
-
valid = false
|
|
361
|
-
end
|
|
237
|
+
return true if flags.nil?
|
|
238
|
+
return log_invalid( ":flags must contain key / value pairs, not #{flags.class.to_s.downcase} (see docs for examples)" ) unless flags.is_a?( Hash )
|
|
362
239
|
|
|
363
|
-
|
|
364
|
-
end
|
|
240
|
+
warn_of_release_preprocessing( flags )
|
|
365
241
|
|
|
366
|
-
|
|
242
|
+
matcher_contexts = matcher_contexts( config, [:test] )
|
|
243
|
+
|
|
244
|
+
return flags.map { |context, operations| validate_flags_context( context, operations, matcher_contexts ) }.all?
|
|
367
245
|
end
|
|
368
246
|
|
|
369
247
|
|
|
370
|
-
|
|
371
|
-
|
|
248
|
+
# Test preprocessing reads the line markers -P and --no-line-commands suppress. Without
|
|
249
|
+
# test preprocessing nothing reads them, so the options are harmless there.
|
|
250
|
+
def validate_line_markers(config)
|
|
251
|
+
return true if config.dig( :project, :use_test_preprocessor ) == :none
|
|
372
252
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
msg = ":flags must contain key / value pairs, not #{flags.class.to_s.downcase} (see docs for examples)"
|
|
378
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
379
|
-
# Immediately bail out
|
|
380
|
-
return false
|
|
381
|
-
end
|
|
253
|
+
found = LineMarkerSuppressors.in_flags( config[:flags], matcher_contexts( config, [:test] ) ) + LineMarkerSuppressors.in_tools( config )
|
|
254
|
+
found.each { |walk_keys, entry| log_error( line_markers_message( walk_keys, entry ) ) }
|
|
255
|
+
return found.empty?
|
|
256
|
+
end
|
|
382
257
|
|
|
383
|
-
|
|
258
|
+
def validate_test_preprocessor(config)
|
|
259
|
+
return validate_option( config, :use_test_preprocessor, [:none, :all, :tests, :mocks] )
|
|
260
|
+
end
|
|
384
261
|
|
|
385
|
-
# Validate that each context has an operation hash
|
|
386
|
-
# :flags
|
|
387
|
-
# :<context>: # :test, :release, etc.
|
|
388
|
-
# :<operation>: # :compile, :link, etc.
|
|
389
|
-
# ...
|
|
390
262
|
|
|
391
|
-
|
|
392
|
-
|
|
263
|
+
# :environment is a list of single-pair hashes, each a variable name and a string or list of strings
|
|
264
|
+
def validate_environment_vars(config)
|
|
265
|
+
environment = config[:environment]
|
|
393
266
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
267
|
+
return true if environment.nil?
|
|
268
|
+
return log_invalid( ":environment must contain a list of key / value pairs, not #{environment.class.to_s.downcase} (see docs for examples)" ) unless environment.is_a?( Array )
|
|
397
269
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
end
|
|
270
|
+
# Entries are inspected further only once every one is a key / value pair
|
|
271
|
+
return false unless validate_environment_pairs( environment )
|
|
401
272
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
273
|
+
valid = environment.map { |entry| validate_environment_entry( entry ) }.all?
|
|
274
|
+
return valid & validate_unique_environment_names( environment )
|
|
275
|
+
end
|
|
406
276
|
|
|
407
|
-
# Immediately bail out
|
|
408
|
-
return false
|
|
409
|
-
end
|
|
410
|
-
end
|
|
411
277
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
@loginator.log( msg, Verbosity::ERRORS, LogLabels::WARNING )
|
|
416
|
-
end
|
|
278
|
+
def validate_backtrace(config)
|
|
279
|
+
return validate_option( config, :use_backtrace, [:none, :simple, :gdb] )
|
|
280
|
+
end
|
|
417
281
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
# :<context>: # :test or :release
|
|
422
|
-
# :<operation>: # :compile, :link, or :assemble (plus :preprocess for :test context)
|
|
423
|
-
# - --flag
|
|
424
|
-
#
|
|
425
|
-
# or
|
|
426
|
-
#
|
|
427
|
-
# :flags:
|
|
428
|
-
# :test:
|
|
429
|
-
# :<operation>:
|
|
430
|
-
# :<matcher>:
|
|
431
|
-
# - --flag
|
|
432
|
-
|
|
433
|
-
# These contexts support filename matchers optionally. Others can only contain simple lists
|
|
434
|
-
contexts_supporting_matchers = [:test]
|
|
435
|
-
contexts_supporting_matchers << :gcov if (_config && _config[:plugins] && _config[:plugins][:enabled] && _config[:plugins][:enabled].include?('gcov'))
|
|
436
|
-
|
|
437
|
-
flags.each_pair do |context, operations|
|
|
438
|
-
operations.each_pair do |operation, config|
|
|
439
|
-
walk = @reportinator.generate_config_walk( [:flags, context, operation] )
|
|
440
|
-
|
|
441
|
-
if config.nil?
|
|
442
|
-
msg = "#{walk} is missing a list or matcher hash"
|
|
443
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
444
|
-
|
|
445
|
-
valid = false
|
|
446
|
-
next
|
|
447
|
-
end
|
|
448
|
-
|
|
449
|
-
# :test context operations with lists or matchers (hashes)
|
|
450
|
-
if contexts_supporting_matchers.include? context
|
|
451
|
-
if config.class != Array and config.class != Hash
|
|
452
|
-
msg = "#{walk} entry '#{config}' must be a list or matcher hash, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
453
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
454
|
-
valid = false
|
|
455
|
-
end
|
|
456
|
-
|
|
457
|
-
# Other (simple) contexts
|
|
458
|
-
else
|
|
459
|
-
# Handle the (probably) common case of trying to use matchers for operations in any context other than :test
|
|
460
|
-
if config.class == Hash
|
|
461
|
-
msg = "#{walk} entry '#{config}' must be a list; matcher hashes are only available for :test context (see docs for details)"
|
|
462
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
463
|
-
valid = false
|
|
464
|
-
# Catchall for any oddball entries
|
|
465
|
-
elsif config.class != Array
|
|
466
|
-
msg = "#{walk} entry '#{config}' must be a list, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
467
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
468
|
-
valid = false
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
end
|
|
472
|
-
end
|
|
282
|
+
def validate_threads(config)
|
|
283
|
+
return [:compile_threads, :test_threads].map { |key| validate_thread_count( config, key ) }.all?
|
|
284
|
+
end
|
|
473
285
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
flags.each_pair do |context, operations|
|
|
481
|
-
operations.each_pair do |operation, flags|
|
|
482
|
-
|
|
483
|
-
# Only validate lists of flags in this block (look for matchers in next block)
|
|
484
|
-
next if flags.class != Array
|
|
485
|
-
|
|
486
|
-
# Handle any YAML alias referencing causing a nested array
|
|
487
|
-
flags.flatten!()
|
|
488
|
-
|
|
489
|
-
# Ensure each item in list is a string
|
|
490
|
-
flags.each do |flag|
|
|
491
|
-
if flag.class != String
|
|
492
|
-
walk = @reportinator.generate_config_walk( [:flags, context, operation] )
|
|
493
|
-
msg = "#{walk} simple list entry '#{flag}' must be a string, not #{flag.class.to_s.downcase} (see docs for examples)"
|
|
494
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
495
|
-
valid = false
|
|
496
|
-
end
|
|
497
|
-
end
|
|
498
|
-
end
|
|
499
|
-
end
|
|
286
|
+
# `:max_extraction_length` multiplies 1000 characters, so `5000` reads more clearly than
|
|
287
|
+
# `5000000`. The minimum keeps that ceiling well above any ordinary C declaration or
|
|
288
|
+
# signature, and catches `1000` written to mean 1000 characters.
|
|
289
|
+
def validate_partials(config)
|
|
290
|
+
max_extraction_length = config[:partials][:max_extraction_length]
|
|
291
|
+
walk = @reportinator.generate_config_walk( [:partials, :max_extraction_length] )
|
|
500
292
|
|
|
501
|
-
#
|
|
502
|
-
#
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
# :<matcher>: # Can be wildcard, substring, or regular expression as a Ruby string or symbol
|
|
506
|
-
# - FOO
|
|
507
|
-
# - BAR
|
|
508
|
-
|
|
509
|
-
# If there's no test context, we're done
|
|
510
|
-
test_context = flags[:test]
|
|
511
|
-
return valid if test_context.nil?
|
|
512
|
-
|
|
513
|
-
matchers_present = false
|
|
514
|
-
test_context.each_pair do |operation, matchers|
|
|
515
|
-
if matchers.class == Hash
|
|
516
|
-
matchers_present = true
|
|
517
|
-
break
|
|
518
|
-
end
|
|
519
|
-
end
|
|
293
|
+
return log_invalid( "#{walk} is not an integer" ) unless max_extraction_length.is_a?( Integer )
|
|
294
|
+
return log_invalid( "#{walk} must be at least 10 (10,000 characters)" ) if max_extraction_length < 10
|
|
295
|
+
return true
|
|
296
|
+
end
|
|
520
297
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
test_context.each_pair do |operation, matchers|
|
|
526
|
-
# Only validate matchers (skip simple lists of flags)
|
|
527
|
-
next if matchers.class != Hash
|
|
528
|
-
|
|
529
|
-
matchers.each_pair do |matcher, flags|
|
|
530
|
-
# Ensure matcher itself is a Ruby symbol or string
|
|
531
|
-
if matcher.class != Symbol and matcher.class != String
|
|
532
|
-
walk = @reportinator.generate_config_walk( [:flags, :test, operation] )
|
|
533
|
-
msg = "#{walk} entry '#{matcher}' is not a string or symbol"
|
|
534
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
535
|
-
valid = false
|
|
536
|
-
|
|
537
|
-
# Skip further validation if matcher key is not a string or symbol
|
|
538
|
-
next
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
walk = @reportinator.generate_config_walk( [:flags, :test, operation, matcher] )
|
|
542
|
-
|
|
543
|
-
# Ensure container associated with matcher is a list
|
|
544
|
-
if flags.class != Array
|
|
545
|
-
msg = "#{walk} entry '#{flags}' is not a list of command line flags but a #{flags.class.to_s.downcase}"
|
|
546
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
547
|
-
valid = false
|
|
548
|
-
|
|
549
|
-
# Skip further validation if matcher value is not a list of flags
|
|
550
|
-
next
|
|
551
|
-
end
|
|
552
|
-
|
|
553
|
-
# Handle any YAML alias nesting in array
|
|
554
|
-
flags.flatten!()
|
|
555
|
-
|
|
556
|
-
# Ensure each item in flags list for matcher is a string
|
|
557
|
-
flags.each do |flag|
|
|
558
|
-
if flag.class != String
|
|
559
|
-
msg = "#{walk} entry '#{flag}' is not a string"
|
|
560
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
561
|
-
valid = false
|
|
562
|
-
end
|
|
563
|
-
end
|
|
564
|
-
|
|
565
|
-
begin
|
|
566
|
-
@configurator_validator.validate_matcher( matcher.to_s.strip() )
|
|
567
|
-
rescue Exception => ex
|
|
568
|
-
msg = "Matcher #{walk} contains #{ex.message}"
|
|
569
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
570
|
-
valid = false
|
|
571
|
-
end
|
|
298
|
+
# Discovery records a path beneath :plugins for each enabled plugin it found, whatever
|
|
299
|
+
# kind of plugin it is
|
|
300
|
+
def validate_plugins(config)
|
|
301
|
+
missing_plugins = config[:plugins][:enabled].reject { |plugin| config[:plugins].key?( :"#{plugin}_path" ) }
|
|
572
302
|
|
|
573
|
-
|
|
303
|
+
missing_plugins.each do |plugin|
|
|
304
|
+
message = "Plugin '#{plugin}' not found in built-in or project Ruby load paths. Check load paths and plugin naming and path conventions."
|
|
305
|
+
@loginator.log( message, Verbosity::ERRORS )
|
|
574
306
|
end
|
|
575
307
|
|
|
576
|
-
return
|
|
308
|
+
return missing_plugins.empty?
|
|
577
309
|
end
|
|
578
310
|
|
|
311
|
+
### Private ###
|
|
579
312
|
|
|
580
|
-
|
|
581
|
-
valid = true
|
|
313
|
+
private
|
|
582
314
|
|
|
583
|
-
|
|
315
|
+
def corrupted_vendor_path?(path, marker_file)
|
|
316
|
+
marker = File.join( path, marker_file )
|
|
584
317
|
|
|
585
|
-
|
|
318
|
+
return ( @file_wrapper.exist?( path ) && !@file_wrapper.directory?( path ) ) ||
|
|
319
|
+
( @file_wrapper.exist?( marker ) && @file_wrapper.directory?( marker ) )
|
|
320
|
+
end
|
|
586
321
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
322
|
+
# Each framework a build uses, as [vendored source, build destination, marker file]
|
|
323
|
+
def vendored_frameworks(config)
|
|
324
|
+
frameworks = [ [File.join( config[:unity_vendor_path], UNITY_LIB_PATH ), config[:project_build_vendor_unity_path], UNITY_C_FILE] ]
|
|
325
|
+
|
|
326
|
+
if config[:project_use_mocks]
|
|
327
|
+
frameworks << [File.join( config[:cmock_vendor_path], CMOCK_LIB_PATH ), config[:project_build_vendor_cmock_path], CMOCK_C_FILE]
|
|
592
328
|
end
|
|
593
329
|
|
|
594
|
-
|
|
330
|
+
if config[:project_use_exceptions]
|
|
331
|
+
frameworks << [File.join( config[:cexception_vendor_path], CEXCEPTION_LIB_PATH ), config[:project_build_vendor_cexception_path], CEXCEPTION_C_FILE]
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
return frameworks
|
|
595
335
|
end
|
|
596
336
|
|
|
337
|
+
# The destination may not exist yet on a fresh build, since Rake creates directories
|
|
338
|
+
# after configuration
|
|
339
|
+
def copy_backtrace_script(ceedling_lib_path, flattened_config)
|
|
340
|
+
@file_wrapper.mkdir( flattened_config[:project_build_tests_root] )
|
|
341
|
+
@file_wrapper.cp_r( File.join( ceedling_lib_path, BACKTRACE_GDB_SCRIPT_FILE ), flattened_config[:project_build_tests_root] )
|
|
342
|
+
end
|
|
597
343
|
|
|
598
|
-
def
|
|
599
|
-
|
|
344
|
+
def validate_simple_paths(paths, *keys)
|
|
345
|
+
return paths.map { |path| @configurator_validator.validate_filepath_simple( path, *keys ) }.all?
|
|
346
|
+
end
|
|
600
347
|
|
|
601
|
-
|
|
348
|
+
# Each entry of :paths or :files must exist and yield what its section expects
|
|
349
|
+
def validate_path_section(config, section, entries_validation)
|
|
350
|
+
return config[section].keys.sort.map do |key|
|
|
351
|
+
@configurator_validator.validate_path_list( config, section, key ) & @configurator_validator.public_send( entries_validation, config, key )
|
|
352
|
+
end.all?
|
|
353
|
+
end
|
|
602
354
|
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
end
|
|
355
|
+
def gdb_attach_failure(result)
|
|
356
|
+
reason = "`gdb` could not attach to a probe process"
|
|
357
|
+
return reason + " -- this is a macOS `gdb` codesigning / trust problem" if result[:output].to_s.match?( /Unable to find Mach task port/ )
|
|
358
|
+
return reason
|
|
359
|
+
end
|
|
609
360
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
msg = ":environment list entry #{entry} is not a key / value pair (ex. :var: value)"
|
|
617
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
618
|
-
valid = false
|
|
619
|
-
end
|
|
620
|
-
end
|
|
361
|
+
def line_markers_message(walk_keys, entry)
|
|
362
|
+
msg = "#{@reportinator.generate_config_walk( walk_keys )} entry '#{entry}' suppresses the preprocessor line markers " \
|
|
363
|
+
"test preprocessing reads to find #includes, mockable functions, and test cases. Remove it."
|
|
364
|
+
msg += " Test preprocessing uses :compile flags wherever no :preprocess flags apply." if walk_keys[2] == :compile
|
|
365
|
+
return msg
|
|
366
|
+
end
|
|
621
367
|
|
|
622
|
-
|
|
623
|
-
|
|
368
|
+
# Build contexts that plugins declare peers of :test also support matchers
|
|
369
|
+
def matcher_contexts(config, contexts)
|
|
370
|
+
return contexts + Array( config.dig( :plugins, :test_build_contexts ) ).map( &:to_sym )
|
|
371
|
+
end
|
|
624
372
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
373
|
+
# A context's entries are a list of strings, or, in a context supporting matchers, a
|
|
374
|
+
# matcher hash. The context is the second key walked. `noun` names what the strings are.
|
|
375
|
+
def validate_entries(walk_keys, entries, matcher_contexts, noun)
|
|
376
|
+
return false unless validate_entries_form( walk_keys, entries, matcher_contexts )
|
|
377
|
+
return validate_string_list( walk_keys, entries ) if entries.is_a?( Array )
|
|
378
|
+
return validate_matchers( walk_keys, entries, noun )
|
|
379
|
+
end
|
|
628
380
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
valid = false
|
|
634
|
-
end
|
|
381
|
+
def validate_entries_form(walk_keys, entries, matcher_contexts)
|
|
382
|
+
walk = @reportinator.generate_config_walk( walk_keys )
|
|
383
|
+
kind = entries.class.to_s.downcase
|
|
384
|
+
matchers = matcher_contexts.include?( walk_keys[1] )
|
|
635
385
|
|
|
636
|
-
|
|
637
|
-
|
|
386
|
+
return true if entries.is_a?( Array ) or (matchers and entries.is_a?( Hash ))
|
|
387
|
+
return log_invalid( "#{walk} entry '#{entries}' must be a list or matcher hash, not #{kind} (see docs for examples)" ) if matchers
|
|
388
|
+
return log_invalid( "#{walk} entry '#{entries}' must be a list, not #{kind} (see docs for examples)" ) unless entries.is_a?( Hash )
|
|
638
389
|
|
|
639
|
-
|
|
640
|
-
|
|
390
|
+
contexts = matcher_contexts.map { |context| ":#{context}" }.join( ' & ' )
|
|
391
|
+
return log_invalid( "#{walk} entry '#{entries}' must be a list; matcher hashes are only available for #{contexts} (see docs for details)" )
|
|
392
|
+
end
|
|
641
393
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
646
|
-
valid = false
|
|
394
|
+
# A YAML alias can nest a list, so the list is flattened in place first
|
|
395
|
+
def validate_string_list(walk_keys, list)
|
|
396
|
+
walk = @reportinator.generate_config_walk( walk_keys )
|
|
647
397
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
end
|
|
398
|
+
list.flatten!
|
|
399
|
+
non_strings = list.reject { |item| item.is_a?( String ) }
|
|
651
400
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
656
|
-
valid = false
|
|
657
|
-
end
|
|
401
|
+
non_strings.each { |item| log_error( "#{walk} list entry '#{item}' must be a string, not #{item.class.to_s.downcase} (see docs for examples)" ) }
|
|
402
|
+
return non_strings.empty?
|
|
403
|
+
end
|
|
658
404
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
msg = ":environment entry #{key} contains a list element '#{item}' (#{item.class.to_s.downcase}) that is not a string"
|
|
664
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
665
|
-
valid = false
|
|
666
|
-
end
|
|
667
|
-
end
|
|
668
|
-
end
|
|
669
|
-
end
|
|
405
|
+
# Each matcher must be a well-formed string or symbol naming a list of strings
|
|
406
|
+
def validate_matchers(walk_keys, matchers, noun)
|
|
407
|
+
return matchers.map { |matcher, list| validate_matcher_entry( walk_keys, matcher, list, noun ) }.all?
|
|
408
|
+
end
|
|
670
409
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
if !dups.empty?
|
|
675
|
-
msg = "Duplicate :environment entr#{dups.length() == 1 ? 'y' : 'ies'} #{dups.map{|d| ':' + d.to_s}.join( ', ' )} found"
|
|
676
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
677
|
-
valid = false
|
|
410
|
+
def validate_matcher_entry(walk_keys, matcher, list, noun)
|
|
411
|
+
unless matcher.is_a?( Symbol ) or matcher.is_a?( String )
|
|
412
|
+
return log_invalid( "#{@reportinator.generate_config_walk( walk_keys )} matcher '#{matcher}' is not a string or symbol" )
|
|
678
413
|
end
|
|
679
|
-
|
|
680
|
-
|
|
414
|
+
|
|
415
|
+
walk = @reportinator.generate_config_walk( walk_keys + [matcher] )
|
|
416
|
+
return log_invalid( "#{walk} entry '#{list}' is not a list of #{noun} but a #{list.class.to_s.downcase}" ) unless list.is_a?( Array )
|
|
417
|
+
|
|
418
|
+
return valid_matcher?( matcher, walk ) & validate_matcher_list( walk, list )
|
|
681
419
|
end
|
|
682
420
|
|
|
421
|
+
# A YAML alias can nest a list, so the list is flattened in place first
|
|
422
|
+
def validate_matcher_list(walk, list)
|
|
423
|
+
list.flatten!
|
|
424
|
+
non_strings = list.reject { |item| item.is_a?( String ) }
|
|
425
|
+
non_strings.each { |item| log_error( "#{walk} entry '#{item}' is not a string" ) }
|
|
683
426
|
|
|
684
|
-
|
|
685
|
-
|
|
427
|
+
return non_strings.empty?
|
|
428
|
+
end
|
|
686
429
|
|
|
687
|
-
|
|
430
|
+
def valid_matcher?(matcher, walk)
|
|
431
|
+
@configurator_validator.validate_matcher( matcher.to_s.strip )
|
|
432
|
+
return true
|
|
433
|
+
rescue StandardError => ex
|
|
434
|
+
return log_invalid( "Matcher #{walk} contains #{ex.message}" )
|
|
435
|
+
end
|
|
688
436
|
|
|
689
|
-
|
|
437
|
+
def validate_flags_context(context, operations, matcher_contexts)
|
|
438
|
+
walk = @reportinator.generate_config_walk( [:flags, context] )
|
|
690
439
|
|
|
691
|
-
|
|
692
|
-
walk = @reportinator.generate_config_walk( [:project, :use_backtrace] )
|
|
440
|
+
return log_invalid( "#{walk} operations key / value pairs are missing" ) if operations.nil?
|
|
693
441
|
|
|
694
|
-
|
|
695
|
-
@
|
|
696
|
-
|
|
442
|
+
unless operations.is_a?( Hash )
|
|
443
|
+
example = @reportinator.generate_config_walk( [:flags, context, :compile] )
|
|
444
|
+
return log_invalid( "#{walk} context must contain :<operation> key / value pairs, not #{operations.class.to_s.downcase} '#{operations}' (ex. #{example})" )
|
|
697
445
|
end
|
|
698
446
|
|
|
699
|
-
return
|
|
447
|
+
return operations.map { |operation, entries| validate_flags_operation( [:flags, context, operation], entries, matcher_contexts ) }.all?
|
|
700
448
|
end
|
|
701
449
|
|
|
702
|
-
def
|
|
703
|
-
|
|
450
|
+
def validate_flags_operation(walk_keys, entries, matcher_contexts)
|
|
451
|
+
return log_invalid( "#{@reportinator.generate_config_walk( walk_keys )} is missing a list or matcher hash" ) if entries.nil?
|
|
452
|
+
return validate_entries( walk_keys, entries, matcher_contexts, 'command line flags' )
|
|
453
|
+
end
|
|
704
454
|
|
|
705
|
-
|
|
706
|
-
|
|
455
|
+
def warn_of_release_preprocessing(flags)
|
|
456
|
+
return unless flags[:release].is_a?( Hash ) and flags[:release][:preprocess]
|
|
707
457
|
|
|
708
|
-
walk = @reportinator.generate_config_walk( [:
|
|
458
|
+
walk = @reportinator.generate_config_walk( [:flags, :release, :preprocess] )
|
|
459
|
+
@loginator.log( "Preprocessing configured at #{walk} is only supported in the :test context", Verbosity::ERRORS, LogLabels::WARNING )
|
|
460
|
+
end
|
|
709
461
|
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
@loginator.log( "#{walk} must be greater than 0", Verbosity::ERRORS )
|
|
714
|
-
valid = false
|
|
715
|
-
end
|
|
716
|
-
when Symbol
|
|
717
|
-
if compile_threads != :auto
|
|
718
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
719
|
-
valid = false
|
|
720
|
-
end
|
|
721
|
-
else
|
|
722
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
723
|
-
valid = false
|
|
724
|
-
end
|
|
462
|
+
def validate_option(config, key, options)
|
|
463
|
+
value = config[:project][key]
|
|
464
|
+
return true if options.include?( value )
|
|
725
465
|
|
|
726
|
-
walk = @reportinator.generate_config_walk( [:project,
|
|
466
|
+
walk = @reportinator.generate_config_walk( [:project, key] )
|
|
467
|
+
return log_invalid( "#{walk} is ':#{value}' but must be one of {#{options.map { |option| ":#{option}" }.join( ', ' )}}" )
|
|
468
|
+
end
|
|
727
469
|
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
@loginator.log( "#{walk} must be greater than 0", Verbosity::ERRORS )
|
|
732
|
-
valid = false
|
|
733
|
-
end
|
|
734
|
-
when Symbol
|
|
735
|
-
if test_threads != :auto
|
|
736
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
737
|
-
valid = false
|
|
738
|
-
end
|
|
739
|
-
else
|
|
740
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
741
|
-
valid = false
|
|
742
|
-
end
|
|
470
|
+
def validate_thread_count(config, key)
|
|
471
|
+
threads = config[:project][key]
|
|
472
|
+
walk = @reportinator.generate_config_walk( [:project, key] )
|
|
743
473
|
|
|
744
|
-
return
|
|
474
|
+
return true if threads == :auto or (threads.is_a?( Integer ) and threads >= 1)
|
|
475
|
+
return log_invalid( "#{walk} must be greater than 0" ) if threads.is_a?( Integer )
|
|
476
|
+
return log_invalid( "#{walk} is neither an integer nor :auto" )
|
|
745
477
|
end
|
|
746
478
|
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
# signature, catching a value so small it would defeat the setting's own purpose (e.g.
|
|
751
|
-
# someone setting `1000` expecting "1000 characters" rather than "1000x characters").
|
|
752
|
-
def validate_partials(config)
|
|
753
|
-
valid = true
|
|
479
|
+
def validate_environment_pairs(environment)
|
|
480
|
+
non_pairs = environment.reject { |entry| entry.is_a?( Hash ) }
|
|
481
|
+
non_pairs.each { |entry| log_error( ":environment list entry #{entry} is not a key / value pair (ex. :var: value)" ) }
|
|
754
482
|
|
|
755
|
-
|
|
483
|
+
return non_pairs.empty?
|
|
484
|
+
end
|
|
756
485
|
|
|
757
|
-
|
|
486
|
+
def validate_environment_entry(entry)
|
|
487
|
+
valid = (entry.keys.length == 1) || log_invalid( ":environment entry #{entry} does not specify exactly one key (see docs for examples)" )
|
|
758
488
|
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
489
|
+
name, value = entry.first
|
|
490
|
+
return log_invalid( ":environment entry '#{name}' must be a symbol or string (:#{name})" ) unless name.is_a?( Symbol ) or name.is_a?( String )
|
|
491
|
+
|
|
492
|
+
return valid & validate_environment_value( name, value )
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
def validate_environment_value(name, value)
|
|
496
|
+
case value
|
|
497
|
+
when String then return true
|
|
498
|
+
when Array
|
|
499
|
+
non_strings = value.reject { |item| item.is_a?( String ) }
|
|
500
|
+
non_strings.each { |item| log_error( ":environment entry #{name} contains a list element '#{item}' (#{item.class.to_s.downcase}) that is not a string" ) }
|
|
501
|
+
return non_strings.empty?
|
|
768
502
|
end
|
|
769
503
|
|
|
770
|
-
return
|
|
504
|
+
return log_invalid( ":environment entry #{name} is associated with #{value.class.to_s.downcase}, not a string or list (see docs for details)" )
|
|
771
505
|
end
|
|
772
506
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
507
|
+
# Environment variable names are case-insensitive on some platforms
|
|
508
|
+
def validate_unique_environment_names(environment)
|
|
509
|
+
names = environment.map { |entry| entry.keys[0].to_s.downcase }
|
|
510
|
+
dups = names.select { |name| names.count( name ) > 1 }.uniq
|
|
511
|
+
return true if dups.empty?
|
|
778
512
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
@loginator.log( message, Verbosity::ERRORS )
|
|
782
|
-
end
|
|
513
|
+
return log_invalid( "Duplicate :environment entr#{dups.length == 1 ? 'y' : 'ies'} #{dups.map { |dup| ':' + dup }.join( ', ' )} found" )
|
|
514
|
+
end
|
|
783
515
|
|
|
784
|
-
|
|
516
|
+
def log_error(message)
|
|
517
|
+
@loginator.log( message, Verbosity::ERRORS )
|
|
785
518
|
end
|
|
786
519
|
|
|
787
|
-
#
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
520
|
+
# Logs an error and answers false, for a validation to return
|
|
521
|
+
def log_invalid(message)
|
|
522
|
+
log_error( message )
|
|
523
|
+
return false
|
|
791
524
|
end
|
|
792
525
|
|
|
793
526
|
end
|