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
|
@@ -8,21 +8,60 @@
|
|
|
8
8
|
module TestInvokerTypes
|
|
9
9
|
|
|
10
10
|
# Partial build metadata for one test: config map plus accumulated output module names.
|
|
11
|
-
TestablePartials = Struct.new(:configs, :tests, :mocks, keyword_init: true)
|
|
11
|
+
TestablePartials = Struct.new(:configs, :tests, :mocks, keyword_init: true) unless const_defined?(:TestablePartials, false)
|
|
12
12
|
|
|
13
13
|
# Carries all mutable state across the pipeline stages.
|
|
14
14
|
PipelineState = Struct.new(
|
|
15
15
|
:tests, # Array of test filepaths (input to stage 1)
|
|
16
16
|
:testables, # Hash<Symbol, Testable> — accumulated across all stages
|
|
17
17
|
:context,
|
|
18
|
-
:options,
|
|
19
|
-
:partials_headers, #
|
|
20
|
-
:partials_sources, #
|
|
21
|
-
:mocks_list, #
|
|
22
|
-
:objects_list, #
|
|
18
|
+
:options, # Array<Symbol> — pipeline-control flags (see TestPipelineManager)
|
|
19
|
+
:partials_headers, # Array<PartialWork> — produced by T1; consumed by stages 6 & 7
|
|
20
|
+
:partials_sources, # Array<PartialWork> — produced by T1; consumed by stages 6 & 7
|
|
21
|
+
:mocks_list, # Array<MockWork> — produced by T2; consumed by stages 9 & 10
|
|
22
|
+
:objects_list, # Array<ObjectWork> — produced by T3; consumed by stage 15
|
|
23
23
|
:lock, # Mutex for thread-safe testable writes
|
|
24
24
|
keyword_init: true
|
|
25
|
-
)
|
|
25
|
+
) do
|
|
26
|
+
def initialize(**kwargs)
|
|
27
|
+
kwargs[:options] ||= []
|
|
28
|
+
super(**kwargs)
|
|
29
|
+
end
|
|
30
|
+
end unless const_defined?(:PipelineState, false)
|
|
31
|
+
|
|
32
|
+
# A resolved mock: its own header's real, resolved location (`source`, also
|
|
33
|
+
# duplicated onto `filepath`), the mirrored subdirectory it lives in below
|
|
34
|
+
# this test's mock root (`path`), whichever of the two the compiler should
|
|
35
|
+
# actually read (`input` -- the raw header or its preprocessed output,
|
|
36
|
+
# depending on whether mock preprocessing is enabled), and whether this
|
|
37
|
+
# mock is Ceedling's own generated Partial content rather than a mock of a
|
|
38
|
+
# real header (`partial`). `include_path` is the #include as the test wrote
|
|
39
|
+
# it. It names the mock for CMock and the runner alike.
|
|
40
|
+
MockDetails = Struct.new(:name, :filepath, :path, :source, :input, :partial, :include_path, keyword_init: true) unless const_defined?(:MockDetails, false)
|
|
41
|
+
|
|
42
|
+
# A test's generated Unity runner: the C file to be compiled (`output_filepath`)
|
|
43
|
+
# and the (possibly preprocessed) test file it was generated from (`input_filepath`).
|
|
44
|
+
RunnerInfo = Struct.new(:output_filepath, :input_filepath, keyword_init: true) unless const_defined?(:RunnerInfo, false)
|
|
45
|
+
|
|
46
|
+
# One partial header or source file's own preprocessing work, flattened out of its
|
|
47
|
+
# owning testable for parallel processing (T1). `preprocessed_target` and `stale` are
|
|
48
|
+
# unset until the corresponding stage settles this target's staleness.
|
|
49
|
+
PartialWork = Struct.new(
|
|
50
|
+
:config, :testable, :directives_only_filepath, :preprocessed_target, :stale,
|
|
51
|
+
keyword_init: true
|
|
52
|
+
) unless const_defined?(:PartialWork, false)
|
|
53
|
+
|
|
54
|
+
# One mock's own preprocessing/generation work, flattened out of its owning testable
|
|
55
|
+
# for parallel processing (T2). `details` is this mock's own MockDetails; `preprocessed_target`
|
|
56
|
+
# and `stale` are unset until the corresponding stage settles this target's staleness.
|
|
57
|
+
MockWork = Struct.new(
|
|
58
|
+
:name, :details, :testable, :directives_only_filepath, :preprocessed_target, :stale,
|
|
59
|
+
keyword_init: true
|
|
60
|
+
) unless const_defined?(:MockWork, false)
|
|
61
|
+
|
|
62
|
+
# One object file's own compile work, flattened out of its owning testable's object
|
|
63
|
+
# list for parallel processing (T3) -- `test` names which testable it came back to.
|
|
64
|
+
ObjectWork = Struct.new(:test, :obj, keyword_init: true) unless const_defined?(:ObjectWork, false)
|
|
26
65
|
|
|
27
66
|
# Named record replacing the raw hash per test file. Fields are populated
|
|
28
67
|
# across multiple stages; nil fields are valid until their stage sets them.
|
|
@@ -30,27 +69,57 @@ module TestInvokerTypes
|
|
|
30
69
|
:filepath, :name,
|
|
31
70
|
:paths, # Hash — build/results/mocks/partials/preprocess paths
|
|
32
71
|
:preprocess, # Hash — preprocessing scratch state
|
|
72
|
+
:mock_search_paths, # Array — each mocked header's own mirrored
|
|
73
|
+
# directory below this test's mock root, folded
|
|
74
|
+
# into search_paths so a mock is still findable
|
|
75
|
+
# by however little path its own #include wrote
|
|
33
76
|
:search_paths,
|
|
34
77
|
:compile_flags, :preprocess_flags, :assembler_flags, :link_flags,
|
|
35
78
|
:compile_defines, :preprocess_defines,
|
|
36
|
-
:runner, #
|
|
37
|
-
:mocks, # Hash — mock name →
|
|
79
|
+
:runner, # RunnerInfo
|
|
80
|
+
:mocks, # Hash — mock name (Symbol) → MockDetails
|
|
38
81
|
:partials, # TestablePartials — configs map + tests/mocks module name lists
|
|
39
|
-
:sources, :frameworks, :core, :objects, :executable,
|
|
40
|
-
:
|
|
82
|
+
:sources, :frameworks, :core, :objects, :executable, :results_pass,
|
|
83
|
+
:executable_rebuilt, # Boolean — set by stage 16, read by stage 17 to decide
|
|
84
|
+
# whether to run the fixture. Carried on the struct rather
|
|
85
|
+
# than re-querying the dependency tracker in stage 17: by
|
|
86
|
+
# then the executable has already been marked fresh (if it
|
|
87
|
+
# was rebuilt), so a fresh staleness query would always
|
|
88
|
+
# answer false regardless of what actually happened.
|
|
89
|
+
:isolated_headers_path, # String — set by stage 15's own sibling-header isolation
|
|
90
|
+
# (TestBuildExecutor#isolate_sibling_headers) the first time
|
|
91
|
+
# this test's own file compile finds a real header sharing a
|
|
92
|
+
# directory with a mocked/Partialized header. Scoped to this
|
|
93
|
+
# one test's whole build rather than any single object, so
|
|
94
|
+
# every object compiled afterward sees the same corrected
|
|
95
|
+
# search paths; nil until (if ever) that happens, and read
|
|
96
|
+
# once more at the very end of stage 15 to know what to clean up.
|
|
41
97
|
keyword_init: true
|
|
42
98
|
) do
|
|
43
99
|
def initialize(**kwargs)
|
|
44
|
-
kwargs[:partials]
|
|
100
|
+
kwargs[:partials] ||= TestablePartials.new(configs: {}, tests: [], mocks: [])
|
|
101
|
+
kwargs[:mock_search_paths] ||= []
|
|
45
102
|
super(**kwargs)
|
|
46
103
|
end
|
|
47
|
-
end
|
|
104
|
+
end unless const_defined?(:Testable, false)
|
|
48
105
|
|
|
49
106
|
# Describes one pipeline step — either a named build_step or a silent transform.
|
|
50
|
-
|
|
51
|
-
|
|
107
|
+
# `condition` gates whether this stage's feature is in play at all for the project
|
|
108
|
+
# (e.g. Partials or mocking enabled) -- when false, the stage is skipped in total
|
|
109
|
+
# silence, exactly as if it didn't exist. `empty_condition` (nil for most stages)
|
|
110
|
+
# gates a narrower case: the feature IS enabled, but this particular run happens to
|
|
111
|
+
# have none of that stage's kind of work to do -- when true, the stage's heading and
|
|
112
|
+
# body are both skipped, but `empty_notice` is logged at OBNOXIOUS so a verbose run
|
|
113
|
+
# can still see that the stage was considered and correctly found nothing to do,
|
|
114
|
+
# distinct from the feature being off project-wide.
|
|
115
|
+
Stage = Struct.new(:name, :heading, :condition, :empty_condition, :empty_notice, :transform, :body, keyword_init: true) do
|
|
116
|
+
def enabled?(state)
|
|
52
117
|
condition.nil? || condition.call(state)
|
|
53
118
|
end
|
|
54
|
-
|
|
119
|
+
|
|
120
|
+
def empty?(state)
|
|
121
|
+
!empty_condition.nil? && empty_condition.call(state)
|
|
122
|
+
end
|
|
123
|
+
end unless const_defined?(:Stage, false)
|
|
55
124
|
|
|
56
125
|
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/path_mirror'
|
|
9
|
+
|
|
10
|
+
# Small helpers shared by more than one test pipeline stage class. Relies on
|
|
11
|
+
# `@reportinator`/`@loginator` already being present via whichever including
|
|
12
|
+
# class's own constructor DI provides them, the same way TestInvokerTypes is
|
|
13
|
+
# mixed in without any DI wiring of its own.
|
|
14
|
+
module TestPipelineHelpers
|
|
15
|
+
|
|
16
|
+
# States, in one line, how many targets a build step left untouched because nothing
|
|
17
|
+
# about their antecedents changed -- silence would otherwise read as the step doing
|
|
18
|
+
# nothing at all, indistinguishable from a misconfigured or broken stage.
|
|
19
|
+
def log_skip_summary(task:, count:, noun:, reason: "nothing changed")
|
|
20
|
+
msg = @reportinator.generate_skip_summary( task: task, count: count, noun: noun, reason: reason )
|
|
21
|
+
@loginator.log( msg ) unless msg.nil?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Logs a step of a test's build, naming the test and its file
|
|
25
|
+
def log_module_progress(operation, testable, verbosity = Verbosity::NORMAL, label = LogLabels::AUTO)
|
|
26
|
+
msg = @reportinator.generate_module_progress(
|
|
27
|
+
operation: operation,
|
|
28
|
+
module_name: testable.name,
|
|
29
|
+
filename: File.basename( testable.filepath )
|
|
30
|
+
)
|
|
31
|
+
@loginator.log( msg, verbosity, label )
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Ceedling's own vendor headers/sources (Unity, CMock, CException, the generated
|
|
35
|
+
# ceedling.h) live outside every configured :test/:source/:support/:include root, so
|
|
36
|
+
# any preprocessor invocation resolving a test's own #includes needs this path handed
|
|
37
|
+
# to it directly alongside those configured roots, or it would never find them.
|
|
38
|
+
def vendor_search_paths()
|
|
39
|
+
[@configurator.project_build_vendor_ceedling_path]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# A dependency-tracker target's staleness is only as accurate as the meta it's
|
|
43
|
+
# registered with -- flags, defines, and search paths all affect a preprocess or
|
|
44
|
+
# compile target's actual output, so all three ride along as meta everywhere a
|
|
45
|
+
# target derived from any of them is registered.
|
|
46
|
+
#
|
|
47
|
+
# `tools:` carries the config for whichever :tools entry (or entries) actually
|
|
48
|
+
# ran to produce this target -- a repointed :executable, an added argument, a
|
|
49
|
+
# changed :name or :optional/:stderr_redirect setting should all invalidate the
|
|
50
|
+
# target the same as a changed flag would, even though none of those live in
|
|
51
|
+
# `flags`. Defaults to an empty list for a caller with no shell tool of its own.
|
|
52
|
+
#
|
|
53
|
+
# `preprocess_force_fallback:` defaults to this run's actual
|
|
54
|
+
# :test_build ↳ :preprocess_force_fallback setting, so every ordinary caller
|
|
55
|
+
# picks it up without having to ask for it explicitly -- toggling that setting
|
|
56
|
+
# between runs, with nothing else changed, should still invalidate whatever a
|
|
57
|
+
# preprocessing pass produced.
|
|
58
|
+
#
|
|
59
|
+
# `partials:` is left out of the returned hash entirely when not given, so a
|
|
60
|
+
# caller with nothing to do with Partials never carries a meaningless `nil`.
|
|
61
|
+
def dependency_meta(flags:, defines:, search_paths:, tools: [], preprocess_force_fallback: @configurator.test_build_preprocess_force_fallback, partials: nil)
|
|
62
|
+
meta = { flags: flags, defines: defines, search_paths: search_paths, tools: tools, preprocess_force_fallback: preprocess_force_fallback }
|
|
63
|
+
meta[:partials] = partials unless partials.nil?
|
|
64
|
+
meta
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Registers the project files a preprocessor's output entered as `target`'s
|
|
68
|
+
# dependencies, as a compile registers its .d file. Files below the build root, such as
|
|
69
|
+
# stand-ins and generated mocks, derive from those project files and would only ever
|
|
70
|
+
# look changed. Relies on `@preprocessinator` and `@dependinator`.
|
|
71
|
+
def register_preprocessed_dependencies(target, output)
|
|
72
|
+
build_root = File.join( @configurator.project_build_root, '' )
|
|
73
|
+
files = @preprocessinator.preprocessed_dependencies( preprocessed_filepath: output )
|
|
74
|
+
|
|
75
|
+
@dependinator.register( target, files: files.reject { |file| file.start_with?( build_root ) } )
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# A preprocessing pass falls back to plain, non-directives-only handling either when
|
|
79
|
+
# directives-only support isn't available at all for this toolchain, or when this
|
|
80
|
+
# particular target's own directives-only output failed to generate (see
|
|
81
|
+
# generate_directives_only_output) despite support existing project-wide.
|
|
82
|
+
def directives_only_fallback?(directives_only, directives_only_filepath)
|
|
83
|
+
!directives_only or directives_only_filepath.nil?
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# A Partial mock is Ceedling's own generated content, identifiable by its own naming
|
|
87
|
+
# convention rather than by any real header it corresponds to (it has none).
|
|
88
|
+
def mock_partial?(include)
|
|
89
|
+
include.filename.start_with?( @configurator.cmock_mock_prefix + PARTIAL_FILENAME_PREFIX )
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# A Partial's own module name doubles as its generated source file's basename, so an
|
|
93
|
+
# object list built from #include-derived sources can end up carrying an object for a
|
|
94
|
+
# module that a Partial has already taken over -- this removes those, leaving the
|
|
95
|
+
# Partial's own separately-generated source as the module's only linked object.
|
|
96
|
+
#
|
|
97
|
+
# The original module's own source is still compiled like every other source in the
|
|
98
|
+
# test's compile list (stage 15) -- only its membership among the objects handed to the
|
|
99
|
+
# linker (TestBuildExecutor#stage_build_executables, stage 16) is trimmed, right before
|
|
100
|
+
# linking. Compiling it unconditionally keeps that source's own dependency tracking (and,
|
|
101
|
+
# under coverage profiling -- gcov, Bullseye -- its #line-directive mapping of a Partial's
|
|
102
|
+
# generated code back to the original module's own lines) working the same way it does for
|
|
103
|
+
# every other source, rather than carving out a special case for whether the result of
|
|
104
|
+
# compiling it is ever actually linked.
|
|
105
|
+
# A Partialized module's own object must not reach the link, since the generated
|
|
106
|
+
# Partial already carries that module's functions.
|
|
107
|
+
#
|
|
108
|
+
# An object's path mirrors its source's own directory below the configured roots, so
|
|
109
|
+
# a module is matched by the end of that path. Matching on basename alone would also
|
|
110
|
+
# take a same-named module's object from another directory, dropping a module the
|
|
111
|
+
# test never Partialized and losing its functions from the link.
|
|
112
|
+
def remove_partials_source_objects(objects, configs)
|
|
113
|
+
queries = configs.keys.map { |_module| PathMirror.path_segments( _module ) }
|
|
114
|
+
|
|
115
|
+
objects.delete_if do |filepath|
|
|
116
|
+
segments = PathMirror.path_segments( filepath.ext( '' ) )
|
|
117
|
+
queries.any? { |query| segments.last( query.length ) == query }
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/constants'
|
|
9
|
+
require 'ceedling/exceptions'
|
|
10
|
+
require 'ceedling/test_invoker/test_invoker_types'
|
|
11
|
+
|
|
12
|
+
# Owns the test-build pipeline's shape: what stages exist, in what order, and
|
|
13
|
+
# which of `state.options` gates each one. `TestInvoker` owns everything
|
|
14
|
+
# around a run (state setup, dependency-cache lifecycle, plugin hooks,
|
|
15
|
+
# top-level error handling); this class owns the run itself.
|
|
16
|
+
class TestPipelineManager
|
|
17
|
+
|
|
18
|
+
include TestInvokerTypes
|
|
19
|
+
|
|
20
|
+
constructor(
|
|
21
|
+
:test_build_setup,
|
|
22
|
+
:test_includes_extractinator,
|
|
23
|
+
:test_build_planner,
|
|
24
|
+
:partials_manager,
|
|
25
|
+
:test_build_executor,
|
|
26
|
+
:test_file_preprocessinator,
|
|
27
|
+
:test_runner_generatinator,
|
|
28
|
+
:configurator,
|
|
29
|
+
:batchinator,
|
|
30
|
+
:loginator,
|
|
31
|
+
:reportinator
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# `options:` (an Array of Symbols; see `TestInvoker#setup_and_invoke`) is a flat
|
|
35
|
+
# collection of independent pipeline-control flags. Recognized symbols:
|
|
36
|
+
#
|
|
37
|
+
# :mocking — Stop the pipeline after stage 10 (Mocking). Skips
|
|
38
|
+
# stages 11-17 (test-file preprocessing, runner details/
|
|
39
|
+
# generation, artifact determination, object compilation,
|
|
40
|
+
# linking, execution).
|
|
41
|
+
# :test_runner — Stop the pipeline after stage 13 (Test Runners). Skips
|
|
42
|
+
# stages 14-17 (artifact determination, object compilation,
|
|
43
|
+
# linking, execution).
|
|
44
|
+
# :build_only — Skip stage 17 (Executing) only. Compile and link test
|
|
45
|
+
# executables but do not run them.
|
|
46
|
+
# :sources_only — Skip stages 15-17 (Building Objects, Building Test
|
|
47
|
+
# Executables, Executing). Runs only context-extraction/
|
|
48
|
+
# metadata stages 1-14, enough to populate each testable's
|
|
49
|
+
# `.sources` -- i.e. no compiler, linker, or test fixture
|
|
50
|
+
# is invoked.
|
|
51
|
+
# :refresh_dependencies — Read by `TestInvoker`, not by any stage here. Included
|
|
52
|
+
# for completeness: permits the dependency cache to prune
|
|
53
|
+
# entries for targets this run didn't touch.
|
|
54
|
+
#
|
|
55
|
+
# `:mocking`, `:test_runner`, `:sources_only`, and `:build_only` each name a single,
|
|
56
|
+
# different point at which the pipeline stops -- supplying more than one at once is
|
|
57
|
+
# ambiguous and rejected by `validate_stop_point_options!` below.
|
|
58
|
+
STOP_POINT_OPTIONS = %i[mocking test_runner sources_only build_only].freeze unless const_defined?(:STOP_POINT_OPTIONS, false)
|
|
59
|
+
|
|
60
|
+
# Read alongside STOP_POINT_OPTIONS above -- named per stop point so a mocks-only or
|
|
61
|
+
# runners-only run's quieter console output (fewer stage headings, no pass/fail
|
|
62
|
+
# summary) is never mistaken for a truncated or broken full test build.
|
|
63
|
+
STOP_POINT_ANNOUNCEMENTS = {
|
|
64
|
+
mocking: "Generating mocks only -- no test runners, compiling, linking, or running.",
|
|
65
|
+
test_runner: "Generating mocks and test runners only -- no compiling, linking, or running.",
|
|
66
|
+
build_only: "Building test executables only -- not running them.",
|
|
67
|
+
sources_only: "Determining test sources only -- no generating, compiling, linking, or running.",
|
|
68
|
+
}.freeze unless const_defined?(:STOP_POINT_ANNOUNCEMENTS, false)
|
|
69
|
+
|
|
70
|
+
# Read alongside STOP_POINT_ANNOUNCEMENTS above -- header text for each stop point's
|
|
71
|
+
# own final completion banner (see announce_completion), so a mocks-only or
|
|
72
|
+
# runners-only run ends with a clear, deliberate signal of its own, the same way a
|
|
73
|
+
# full test run ends with its own "OVERALL TEST SUMMARY" banner.
|
|
74
|
+
STOP_POINT_BANNERS = {
|
|
75
|
+
mocking: 'MOCKS GENERATED',
|
|
76
|
+
test_runner: 'MOCKS & TEST RUNNERS GENERATED',
|
|
77
|
+
build_only: 'TEST EXECUTABLES BUILT',
|
|
78
|
+
sources_only: 'TEST SOURCES DETERMINED',
|
|
79
|
+
}.freeze unless const_defined?(:STOP_POINT_BANNERS, false)
|
|
80
|
+
|
|
81
|
+
# Validates `state.options`, then builds and runs the stage sequence against `state`.
|
|
82
|
+
def run(state)
|
|
83
|
+
validate_stop_point_options!( state.options )
|
|
84
|
+
announce_run_scope( state.options )
|
|
85
|
+
|
|
86
|
+
build_stage_sequence().each do |stage|
|
|
87
|
+
next unless stage.enabled?( state )
|
|
88
|
+
|
|
89
|
+
if stage.empty?( state )
|
|
90
|
+
@loginator.log( "#{stage.name}: #{stage.empty_notice}", Verbosity::OBNOXIOUS )
|
|
91
|
+
next
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
if stage.transform
|
|
95
|
+
stage.body.call( state )
|
|
96
|
+
else
|
|
97
|
+
@batchinator.build_step( stage.name, heading: stage.heading ) do
|
|
98
|
+
stage.body.call( state )
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
announce_completion( state.options )
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
def validate_stop_point_options!(options)
|
|
109
|
+
conflicts = STOP_POINT_OPTIONS.select { |key| options.include?( key ) }
|
|
110
|
+
return if conflicts.size <= 1
|
|
111
|
+
|
|
112
|
+
named = conflicts.map { |key| ":#{key}" }.join(', ')
|
|
113
|
+
raise CeedlingException.new(
|
|
114
|
+
"Pipeline options #{named} each stop the test-build pipeline at a different " \
|
|
115
|
+
"point -- specify at most one of #{STOP_POINT_OPTIONS.map { |k| ":#{k}" }.join(', ')}."
|
|
116
|
+
)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Silent for an ordinary full test build (no stop-point option present) -- only a
|
|
120
|
+
# partial run announces itself, so the announcement's mere presence is itself the
|
|
121
|
+
# signal something less than a full build is happening.
|
|
122
|
+
def announce_run_scope(options)
|
|
123
|
+
stop_point = STOP_POINT_OPTIONS.find { |key| options.include?( key ) }
|
|
124
|
+
return if stop_point.nil?
|
|
125
|
+
|
|
126
|
+
@loginator.log( STOP_POINT_ANNOUNCEMENTS[stop_point], Verbosity::NORMAL, LogLabels::NOTICE )
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# A specific final step, mirroring how a full test run's own "OVERALL TEST SUMMARY"
|
|
130
|
+
# banner is generated (ReportTestsStdoutPlugin, via this identical
|
|
131
|
+
# Reportinator#generate_banner) -- silent for a full test build, whose own
|
|
132
|
+
# results banner covers that case through its own, separate mechanism.
|
|
133
|
+
def announce_completion(options)
|
|
134
|
+
stop_point = STOP_POINT_OPTIONS.find { |key| options.include?( key ) }
|
|
135
|
+
return if stop_point.nil?
|
|
136
|
+
|
|
137
|
+
header = @loginator.decorate( STOP_POINT_BANNERS[stop_point], LogLabels::BUILT )
|
|
138
|
+
banner = @reportinator.generate_banner( header )
|
|
139
|
+
@loginator.log( "\n" + banner, Verbosity::NORMAL, LogLabels::NONE )
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def build_stage_sequence
|
|
143
|
+
use_preprocessing = -> (_s) { @configurator.project_use_test_preprocessor_tests }
|
|
144
|
+
use_partials = -> (_s) { @configurator.project_use_partials }
|
|
145
|
+
use_mocks = -> (_s) { @configurator.project_use_mocks }
|
|
146
|
+
use_mocks_preproc = -> (_s) { @configurator.project_use_mocks && @configurator.project_use_test_preprocessor_mocks }
|
|
147
|
+
not_mocking = -> (s) { !s.options.include?(:mocking) } # skip stages 11-17 (stop after stage 10)
|
|
148
|
+
not_test_runner = -> (s) { !s.options.include?(:test_runner) } # skip stages 14-17 (stop after stage 13)
|
|
149
|
+
not_build_only = -> (s) { !s.options.include?(:build_only) } # skip stage 17 only
|
|
150
|
+
not_sources_only = -> (s) { !s.options.include?(:sources_only) } # skip stages 15-17
|
|
151
|
+
|
|
152
|
+
[
|
|
153
|
+
# Stage 1
|
|
154
|
+
stage("Preparing Build Paths",
|
|
155
|
+
heading: false,
|
|
156
|
+
body: ->(s) { @test_build_setup.stage_prepare_build_paths(s) }
|
|
157
|
+
),
|
|
158
|
+
|
|
159
|
+
# Stage 2
|
|
160
|
+
stage("Collecting Essential Test Context",
|
|
161
|
+
body: ->(s) { @test_build_setup.stage_collect_test_context(s) }
|
|
162
|
+
),
|
|
163
|
+
|
|
164
|
+
# Stage 3
|
|
165
|
+
stage("Ingesting Test Configurations",
|
|
166
|
+
body: ->(s) { @test_build_setup.stage_ingest_configurations(s) }
|
|
167
|
+
),
|
|
168
|
+
|
|
169
|
+
# Stage 4
|
|
170
|
+
stage("Collecting More Test Context",
|
|
171
|
+
condition: use_preprocessing,
|
|
172
|
+
body: ->(s) { @test_includes_extractinator.stage_collect_preprocessor_context(s) }
|
|
173
|
+
),
|
|
174
|
+
|
|
175
|
+
# Stage 5
|
|
176
|
+
stage("Determining Files to Be Generated",
|
|
177
|
+
heading: false,
|
|
178
|
+
body: ->(s) { @test_build_planner.stage_determine_files(s) }
|
|
179
|
+
),
|
|
180
|
+
|
|
181
|
+
# Transform 1: Prepare partials parallel processing
|
|
182
|
+
stage(transform: true,
|
|
183
|
+
condition: use_partials,
|
|
184
|
+
body: ->(s) { @test_build_planner.stage_flatten_partials_lists(s) }
|
|
185
|
+
),
|
|
186
|
+
|
|
187
|
+
# Stage 6
|
|
188
|
+
stage("Preprocessing for Testing & Mocking Partials",
|
|
189
|
+
condition: use_partials,
|
|
190
|
+
empty_condition: ->(s) { s.partials_headers.empty? },
|
|
191
|
+
empty_notice: "no Partials to process",
|
|
192
|
+
body: ->(s) { @partials_manager.stage_preprocess_partial_headers(s) }
|
|
193
|
+
),
|
|
194
|
+
|
|
195
|
+
# Stage 7
|
|
196
|
+
stage("Preprocessing for Testing Partials",
|
|
197
|
+
condition: use_partials,
|
|
198
|
+
empty_condition: ->(s) { s.partials_sources.empty? },
|
|
199
|
+
empty_notice: "no Partials to process",
|
|
200
|
+
body: ->(s) { @partials_manager.stage_preprocess_partial_sources(s) }
|
|
201
|
+
),
|
|
202
|
+
|
|
203
|
+
# Stage 8
|
|
204
|
+
stage("Partials",
|
|
205
|
+
condition: use_partials,
|
|
206
|
+
empty_condition: ->(s) { s.partials_headers.empty? && s.partials_sources.empty? },
|
|
207
|
+
empty_notice: "no Partials to generate",
|
|
208
|
+
body: ->(s) { @partials_manager.stage_generate_partials(s) }
|
|
209
|
+
),
|
|
210
|
+
|
|
211
|
+
# Transform 2: Prepare mocks for parallel processing
|
|
212
|
+
stage(transform: true,
|
|
213
|
+
condition: use_mocks,
|
|
214
|
+
body: ->(s) { @test_build_planner.stage_flatten_mocks_list(s) }
|
|
215
|
+
),
|
|
216
|
+
|
|
217
|
+
# Stage 9
|
|
218
|
+
stage("Preprocessing for Mocks",
|
|
219
|
+
condition: use_mocks_preproc,
|
|
220
|
+
empty_condition: ->(s) { s.mocks_list.empty? },
|
|
221
|
+
empty_notice: "no mocks to process",
|
|
222
|
+
body: ->(s) { @test_build_executor.stage_preprocess_mocks(s) }
|
|
223
|
+
),
|
|
224
|
+
|
|
225
|
+
# Stage 10 — the :mocking stop point runs through here, then halts.
|
|
226
|
+
stage("Mocking",
|
|
227
|
+
condition: use_mocks,
|
|
228
|
+
empty_condition: ->(s) { s.mocks_list.empty? },
|
|
229
|
+
empty_notice: "no mocks to generate",
|
|
230
|
+
body: ->(s) { @test_build_executor.stage_generate_mocks(s) }
|
|
231
|
+
),
|
|
232
|
+
|
|
233
|
+
# Stage 11 — skipped under :mocking.
|
|
234
|
+
stage("Preprocessing Test Files",
|
|
235
|
+
condition: ->(s) { use_preprocessing.call(s) && not_mocking.call(s) },
|
|
236
|
+
body: ->(s) { @test_file_preprocessinator.preprocess(s) }
|
|
237
|
+
),
|
|
238
|
+
|
|
239
|
+
# Stage 12 — skipped under :mocking.
|
|
240
|
+
stage("Collecting Test Runner Details",
|
|
241
|
+
condition: ->(s) { use_preprocessing.call(s) && not_mocking.call(s) },
|
|
242
|
+
body: ->(s) { @test_runner_generatinator.collect_details(s) }
|
|
243
|
+
),
|
|
244
|
+
|
|
245
|
+
# Stage 13 — skipped under :mocking. The :test_runner stop point runs
|
|
246
|
+
# through here, then halts.
|
|
247
|
+
stage("Test Runners",
|
|
248
|
+
condition: not_mocking,
|
|
249
|
+
body: ->(s) { @test_runner_generatinator.generate(s) }
|
|
250
|
+
),
|
|
251
|
+
|
|
252
|
+
# Stage 14 — skipped under :mocking or :test_runner.
|
|
253
|
+
stage("Determining Artifacts to Be Built",
|
|
254
|
+
heading: false,
|
|
255
|
+
condition: ->(s) { not_mocking.call(s) && not_test_runner.call(s) },
|
|
256
|
+
body: ->(s) { @test_build_planner.stage_determine_artifacts(s) }
|
|
257
|
+
),
|
|
258
|
+
|
|
259
|
+
# Transform 3: Prepare objects for parallel processing — skipped under
|
|
260
|
+
# :mocking or :test_runner.
|
|
261
|
+
stage(transform: true,
|
|
262
|
+
condition: ->(s) { not_mocking.call(s) && not_test_runner.call(s) },
|
|
263
|
+
body: ->(s) { @test_build_planner.stage_flatten_objects_list(s) }
|
|
264
|
+
),
|
|
265
|
+
|
|
266
|
+
# Stage 15 — skipped under :mocking, :test_runner, or :sources_only
|
|
267
|
+
# (no object compilation needed to determine which sources a test references).
|
|
268
|
+
stage("Building Objects",
|
|
269
|
+
condition: ->(s) { not_mocking.call(s) && not_test_runner.call(s) && not_sources_only.call(s) },
|
|
270
|
+
body: ->(s) { @test_build_executor.stage_build_objects(s) }
|
|
271
|
+
),
|
|
272
|
+
|
|
273
|
+
# Stage 16 — skipped under :mocking, :test_runner, or :sources_only
|
|
274
|
+
# (no linking needed either).
|
|
275
|
+
stage("Building Test Executables",
|
|
276
|
+
condition: ->(s) { not_mocking.call(s) && not_test_runner.call(s) && not_sources_only.call(s) },
|
|
277
|
+
body: ->(s) { @test_build_executor.stage_build_executables(s) }
|
|
278
|
+
),
|
|
279
|
+
|
|
280
|
+
# Stage 17 — skipped under :mocking, :test_runner, :build_only, or :sources_only.
|
|
281
|
+
stage("Executing",
|
|
282
|
+
condition: ->(s) {
|
|
283
|
+
not_mocking.call(s) && not_test_runner.call(s) &&
|
|
284
|
+
not_build_only.call(s) && not_sources_only.call(s)
|
|
285
|
+
},
|
|
286
|
+
body: ->(s) { @test_build_executor.stage_execute(s) }
|
|
287
|
+
),
|
|
288
|
+
]
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def stage(name = nil, heading: true, condition: nil, empty_condition: nil, empty_notice: nil, transform: false, body:)
|
|
292
|
+
Stage.new(
|
|
293
|
+
name: name,
|
|
294
|
+
heading: heading,
|
|
295
|
+
condition: condition,
|
|
296
|
+
empty_condition: empty_condition,
|
|
297
|
+
empty_notice: empty_notice,
|
|
298
|
+
transform: transform,
|
|
299
|
+
body: body
|
|
300
|
+
)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'ceedling/constants'
|
|
9
|
+
require 'ceedling/test_invoker/test_pipeline_helpers'
|
|
10
|
+
|
|
11
|
+
# Stages 12 and 13: each test's Unity runner. Stage 12 parses test case names from the
|
|
12
|
+
# preprocessed test file, and stage 13 generates the runner from them and the test's
|
|
13
|
+
# mock and include lists.
|
|
14
|
+
#
|
|
15
|
+
# Both stages check the one runner target, registered the same way. Test case names
|
|
16
|
+
# exist only to feed the runner, so stage 12 does nothing when the runner is current.
|
|
17
|
+
# Registration accumulates, and only stage 13 marks the target fresh.
|
|
18
|
+
#
|
|
19
|
+
# The runner depends on what it is generated from: the test file, the input file its
|
|
20
|
+
# test case names are parsed from (the preprocessed test file, with test preprocessing),
|
|
21
|
+
# and the test's mock and include lists. Those lists come from stage 4's reconciliation
|
|
22
|
+
# with test preprocessing, so they can change while the test file doesn't, as when a
|
|
23
|
+
# header's macro decides which mocks a test has.
|
|
24
|
+
class TestRunnerGeneratinator
|
|
25
|
+
|
|
26
|
+
include TestPipelineHelpers
|
|
27
|
+
|
|
28
|
+
constructor(
|
|
29
|
+
:configurator,
|
|
30
|
+
:loginator,
|
|
31
|
+
:reportinator,
|
|
32
|
+
:batchinator,
|
|
33
|
+
:generator,
|
|
34
|
+
:test_context_extractor,
|
|
35
|
+
:dependinator
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
def setup()
|
|
39
|
+
@context_extractor = @test_context_extractor
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Stage 12
|
|
43
|
+
def collect_details(state)
|
|
44
|
+
each_stale( state, task: "test case name parsing", noun: "test files", skip: 'Skipping test case name parsing for' ) do |testable|
|
|
45
|
+
log_module_progress( 'Parsing test case names', testable )
|
|
46
|
+
@context_extractor.collect_test_runner_details( testable.filepath, testable.runner.input_filepath )
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Stage 13
|
|
51
|
+
def generate(state)
|
|
52
|
+
each_stale( state, task: "test runner generation", noun: "test runners", skip: 'Skipping test runner generation for' ) do |testable|
|
|
53
|
+
generate_runner( state, testable )
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
# Yields each test whose runner is stale, logging each one skipped and a summary
|
|
60
|
+
def each_stale(state, task:, noun:, skip:)
|
|
61
|
+
skipped = 0
|
|
62
|
+
|
|
63
|
+
@batchinator.exec( workload: :compile, things: state.testables ) do |_, testable|
|
|
64
|
+
next yield( testable ) if stale?( testable )
|
|
65
|
+
|
|
66
|
+
log_module_progress( skip, testable, Verbosity::OBNOXIOUS )
|
|
67
|
+
state.lock.synchronize { skipped += 1 }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
log_skip_summary( task: task, count: skipped, noun: noun )
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def stale?(testable)
|
|
74
|
+
files = [testable.filepath, testable.runner.input_filepath].uniq
|
|
75
|
+
@dependinator.register( testable.runner.output_filepath, files: files, meta: runner_meta( testable ) )
|
|
76
|
+
return @dependinator.stale?( testable.runner.output_filepath )
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def generate_runner(state, testable)
|
|
80
|
+
@generator.generate_test_runner(
|
|
81
|
+
context: state.context,
|
|
82
|
+
mocks: @context_extractor.lookup_mock_header_includes_list( testable.filepath ),
|
|
83
|
+
includes: @context_extractor.lookup_nonmock_header_includes_list( testable.filepath ),
|
|
84
|
+
test_filepath: testable.filepath,
|
|
85
|
+
input_filepath: testable.runner.input_filepath,
|
|
86
|
+
runner_filepath: testable.runner.output_filepath
|
|
87
|
+
)
|
|
88
|
+
@dependinator.mark_fresh( testable.runner.output_filepath )
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# The real runner and Unity configuration, not project_config_hash's flattened
|
|
92
|
+
# sections, which never hold :test_runner or :unity. Whether test files are
|
|
93
|
+
# preprocessed decides where test case names come from, so toggling it alone must
|
|
94
|
+
# invalidate the runner. The mock and include lists are the runner's #includes.
|
|
95
|
+
def runner_meta(testable)
|
|
96
|
+
return {
|
|
97
|
+
test_runner: @configurator.get_runner_config,
|
|
98
|
+
unity: @configurator.get_unity_config,
|
|
99
|
+
test_preprocessor_tests: @configurator.project_use_test_preprocessor_tests,
|
|
100
|
+
mocks: @context_extractor.lookup_mock_header_includes_list( testable.filepath ).map( &:filepath ),
|
|
101
|
+
includes: @context_extractor.lookup_nonmock_header_includes_list( testable.filepath ).map( &:filepath )
|
|
102
|
+
}
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|