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
|
@@ -0,0 +1,751 @@
|
|
|
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 'spec_system_helper'
|
|
9
|
+
|
|
10
|
+
# End-to-end coverage of DependencyTracker's integration into the real test-build
|
|
11
|
+
# pipeline (content-hash-based rebuild staleness -- see lib/ceedling/dependencies/).
|
|
12
|
+
# Unlike the module-level specs in spec/integration/dependencies/, these exercise the
|
|
13
|
+
# actual `ceedling` CLI against a real example project on disk, asserting on the
|
|
14
|
+
# presence/absence of "Compiling"/"Linking"/"Running" activity in real build output
|
|
15
|
+
# across a *sequence* of invocations against the *same* project directory -- proving
|
|
16
|
+
# a target was genuinely skipped, not merely that the build succeeded.
|
|
17
|
+
#
|
|
18
|
+
# Assertions anchor "Compiling"/"Linking"/"Running" matches to the start of a line
|
|
19
|
+
# (`/^Compiling /` etc.): at --verbosity=debug Ceedling's own output is large enough
|
|
20
|
+
# that these words turn up incidentally elsewhere (vendor file comments, help text,
|
|
21
|
+
# unrelated progress messages) -- an unanchored substring match produces false
|
|
22
|
+
# positives having nothing to do with an actual build step running.
|
|
23
|
+
#
|
|
24
|
+
# Each scenario appends a real, compiled-byte-changing statement to a source file
|
|
25
|
+
# rather than just touching it or adding a comment: a compiler is free to produce
|
|
26
|
+
# byte-identical output for a whitespace- or comment-only edit, so asserting on
|
|
27
|
+
# those would make these tests flaky/compiler-dependent. A `volatile int`
|
|
28
|
+
# declaration inside a function body (or a new function prototype at file scope,
|
|
29
|
+
# for header-only scenarios) is used specifically because it reliably shows up in
|
|
30
|
+
# compiled output across toolchains.
|
|
31
|
+
ceedling_system_tests do
|
|
32
|
+
before :all do
|
|
33
|
+
@c = SystemContext.new
|
|
34
|
+
@c.deploy_gem
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
after :all do
|
|
38
|
+
@c.done!
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Inserts a real statement as the first line of a test file's setUp() body --
|
|
42
|
+
# a functional change guaranteed to alter that test's compiled object, unlike
|
|
43
|
+
# a comment or whitespace-only edit. Works whether setUp()'s existing body is
|
|
44
|
+
# empty (standard Ceedling/Unity boilerplate) or not.
|
|
45
|
+
def probe_test_file!(relative_path)
|
|
46
|
+
content = read_spec_file(relative_path)
|
|
47
|
+
replaced = content.sub!(/(void setUp\(void\)\s*\{\n)/) { "#{Regexp.last_match(1)} volatile int __ceedling_delta_probe = 1;\n" }
|
|
48
|
+
raise "probe_test_file!: could not find setUp() in #{relative_path}" if replaced.nil?
|
|
49
|
+
File.write(relative_path, content)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Adds a new function prototype to a shared header, ahead of its include guard's
|
|
53
|
+
# #endif -- a real content change to the header itself (affecting every source
|
|
54
|
+
# file that #includes it) without needing a corresponding definition. Matches
|
|
55
|
+
# both a trailing `// GUARD` and `/* GUARD */` comment on the #endif line.
|
|
56
|
+
def probe_header!(relative_path)
|
|
57
|
+
content = read_spec_file(relative_path)
|
|
58
|
+
content.sub!(/#endif\s*(\/\/[^\n]*|\/\*.*?\*\/)?\s*\z/) { "void __ceedling_delta_probe(void);\n\n#{Regexp.last_match(0)}" }
|
|
59
|
+
File.write(relative_path, content)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Inserts a real statement as the first line of a named function's body in a
|
|
63
|
+
# plain source file -- the same kind of functional, compiled-byte-changing
|
|
64
|
+
# edit as probe_test_file!, but targeting an arbitrary function rather than
|
|
65
|
+
# the fixed setUp() convention.
|
|
66
|
+
def probe_source_file!(relative_path, function_name)
|
|
67
|
+
content = read_spec_file(relative_path)
|
|
68
|
+
replaced = content.sub!(/(#{Regexp.escape(function_name)}\([^)]*\)\s*\{\n)/) { "#{Regexp.last_match(1)} volatile int __ceedling_delta_probe = 1;\n" }
|
|
69
|
+
raise "probe_source_file!: could not find #{function_name}(...) in #{relative_path}" if replaced.nil?
|
|
70
|
+
File.write(relative_path, content)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe "Delta builds: incremental rebuild staleness tracking (temp_sensor)" do
|
|
74
|
+
before do
|
|
75
|
+
@c.with_context do
|
|
76
|
+
output = @c.ceedling_appcmd_exec("example temp_sensor")
|
|
77
|
+
expect(output).to match(/created/)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "skips recompiling, relinking, and rerunning everything on an immediate rebuild with no changes, but still reports every test's cached result" do
|
|
82
|
+
@c.with_context do
|
|
83
|
+
Dir.chdir "temp_sensor" do
|
|
84
|
+
baseline = @c.ceedling_build_exec("test:all")
|
|
85
|
+
expect(baseline).to match(/TESTED:\s+86/)
|
|
86
|
+
expect(baseline).to match(/PASSED:\s+86/)
|
|
87
|
+
|
|
88
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
89
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
90
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
91
|
+
expect(rebuild).to_not match(/^Running /)
|
|
92
|
+
|
|
93
|
+
# Nothing needed rebuilding, but every test's cached result is still
|
|
94
|
+
# reported in this same run's own summary -- Generator#generate_test_results
|
|
95
|
+
# reports a skipped executable's cached .pass/.fail file rather than
|
|
96
|
+
# silently omitting it from the count.
|
|
97
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
98
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
99
|
+
|
|
100
|
+
# The separate on-demand summary task, which independently re-scans
|
|
101
|
+
# all result files from disk, agrees.
|
|
102
|
+
summary = @c.ceedling_build_exec("summary")
|
|
103
|
+
expect(summary).to match(/TESTED:\s+86/)
|
|
104
|
+
expect(summary).to match(/PASSED:\s+86/)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "recompiles, relinks, and reruns only the changed test, without regenerating mocks that didn't actually change, leaving unrelated tests untouched" do
|
|
110
|
+
@c.with_context do
|
|
111
|
+
Dir.chdir "temp_sensor" do
|
|
112
|
+
@c.ceedling_build_exec("test:all")
|
|
113
|
+
|
|
114
|
+
probe_test_file!(File.join('test', 'adc', 'TestAdcModel.c'))
|
|
115
|
+
|
|
116
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
117
|
+
|
|
118
|
+
# The test file's own bare-includes cache misses (its content changed),
|
|
119
|
+
# which drives stage_collect_preprocessor_context's includes stand-in
|
|
120
|
+
# generation for this test's mocked headers -- but that stand-in step
|
|
121
|
+
# skips writing over an already-generated mock header rather than
|
|
122
|
+
# blanking it out (see TestBuildSetup#generate_test_includes_standins),
|
|
123
|
+
# so none of this test's mocks are considered stale purely from that
|
|
124
|
+
# unrelated cache miss. Only a change to the header a mock actually
|
|
125
|
+
# mocks, or to the mock's own config meta, can make it regenerate.
|
|
126
|
+
expect(rebuild).to_not match(/Generating mock for TestAdcModel::TaskScheduler\.h/)
|
|
127
|
+
expect(rebuild).to_not match(/Generating mock for TestAdcModel::TemperatureCalculator\.h/)
|
|
128
|
+
expect(rebuild).to_not match(/Generating mock for TestAdcModel::TemperatureFilter\.h/)
|
|
129
|
+
|
|
130
|
+
expect(rebuild).to match(/^Compiling TestAdcModel\.c/)
|
|
131
|
+
expect(rebuild).to match(/^Linking TestAdcModel\.out/)
|
|
132
|
+
expect(rebuild).to match(/^Running TestAdcModel\.out/)
|
|
133
|
+
|
|
134
|
+
# The full project total (86), not just the 3 belonging to the one
|
|
135
|
+
# test that actually reran -- proving the other 83 tests' cached
|
|
136
|
+
# results are correctly folded into this same run's summary
|
|
137
|
+
# alongside the freshly-executed ones, not just the rebuilt subset.
|
|
138
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
139
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
140
|
+
|
|
141
|
+
# Spot check: unrelated tests (no relationship to AdcModel or its mocks)
|
|
142
|
+
# show no compile, link, or mock-generation activity at all. (Context
|
|
143
|
+
# extraction -- "Parsing TestUsartModel.c for..." -- legitimately runs
|
|
144
|
+
# for every test every time regardless of staleness, so it's excluded
|
|
145
|
+
# from these checks by scoping to Compiling/Linking/mock-generation lines.)
|
|
146
|
+
expect(rebuild).to_not match(/^Compiling .*UsartModel/)
|
|
147
|
+
expect(rebuild).to_not match(/^Compiling .*TimerModel/)
|
|
148
|
+
expect(rebuild).to_not match(/^Linking .*Usart/)
|
|
149
|
+
expect(rebuild).to_not match(/^Linking .*Timer/)
|
|
150
|
+
expect(rebuild).to_not match(/Generating mock for TestUsartConductor/)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "recompiles every test that includes a changed shared header, but leaves unrelated tests untouched" do
|
|
156
|
+
@c.with_context do
|
|
157
|
+
Dir.chdir "temp_sensor" do
|
|
158
|
+
@c.ceedling_build_exec("test:all")
|
|
159
|
+
|
|
160
|
+
# AdcModel.h is #included directly by AdcModel.c, AdcConductor.c, and
|
|
161
|
+
# Main.c -- so TestAdcModel, TestAdcConductor, and TestMain each
|
|
162
|
+
# recompile at least one object as a result, entirely independent of
|
|
163
|
+
# any test file's own content.
|
|
164
|
+
probe_header!(File.join('src', 'AdcModel.h'))
|
|
165
|
+
|
|
166
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
167
|
+
|
|
168
|
+
expect(rebuild).to match(/^Compiling.*AdcModel\.c/)
|
|
169
|
+
expect(rebuild).to match(/^Compiling.*AdcConductor\.c/)
|
|
170
|
+
expect(rebuild).to match(/^Compiling.*Main\.c/)
|
|
171
|
+
|
|
172
|
+
# Tests with no relationship to AdcModel.h are entirely unaffected.
|
|
173
|
+
expect(rebuild).to_not match(/^Compiling.*UsartModel/)
|
|
174
|
+
expect(rebuild).to_not match(/^Compiling.*TimerModel/)
|
|
175
|
+
expect(rebuild).to_not match(/^Compiling.*TemperatureCalculator/)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it "a preprocess-only meta change (no test-file edit) triggers re-extraction without recompiling anything" do
|
|
181
|
+
@c.with_context do
|
|
182
|
+
Dir.chdir "temp_sensor" do
|
|
183
|
+
@c.ceedling_build_exec("test:all")
|
|
184
|
+
|
|
185
|
+
# A `:preprocess:`-scoped `:defines:` project.yml edit changes the
|
|
186
|
+
# *effective* preprocess defines fed into stage 4's bare-includes
|
|
187
|
+
# extraction meta, but only for the one file matching this new
|
|
188
|
+
# matcher -- every other file falls back to its own compile-time
|
|
189
|
+
# defines exactly as if the `:preprocess:` section didn't exist for
|
|
190
|
+
# it (see ConfigMatchinator#matches?'s `no_match_default`), so only
|
|
191
|
+
# TestTemperatureCalculator.c's meta actually changes here, without
|
|
192
|
+
# touching any test file's own content or compile-time defines/flags.
|
|
193
|
+
@c.merge_project_yml_for_test({
|
|
194
|
+
:defines => {
|
|
195
|
+
:preprocess => {
|
|
196
|
+
'TestTemperatureCalculator.c' => ['CEEDLING_DELTA_PROBE']
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
202
|
+
|
|
203
|
+
expect(rebuild).to match(/^Extracting #includes from TestTemperatureCalculator\.c/)
|
|
204
|
+
|
|
205
|
+
# Unrelated files' meta is untouched -- proving the no_match_default
|
|
206
|
+
# fallback, not just the matched file's own re-extraction.
|
|
207
|
+
expect(rebuild).to_not match(/^Extracting #includes from TestUsartModel/)
|
|
208
|
+
expect(rebuild).to_not match(/^Extracting #includes from TestTimerModel/)
|
|
209
|
+
expect(rebuild).to_not match(/^Extracting #includes from TestTemperatureFilter/)
|
|
210
|
+
|
|
211
|
+
# Compilation is untouched -- only preprocess-time defines changed,
|
|
212
|
+
# not compile-time defines/flags for any file.
|
|
213
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
214
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
215
|
+
expect(rebuild).to_not match(/^Running /)
|
|
216
|
+
|
|
217
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
218
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "clobber removes the dependency cache and forces a full rebuild afterward" do
|
|
224
|
+
@c.with_context do
|
|
225
|
+
Dir.chdir "temp_sensor" do
|
|
226
|
+
@c.ceedling_build_exec("test:all")
|
|
227
|
+
|
|
228
|
+
expect(Dir.glob('build/cache/.*.dep_cache.json')).not_to be_empty
|
|
229
|
+
clobber = @c.ceedling_build_exec("clobber")
|
|
230
|
+
expect(clobber).to_not match(/ERROR/)
|
|
231
|
+
expect(Dir.glob('build/cache/.*.dep_cache.json')).to be_empty
|
|
232
|
+
|
|
233
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
234
|
+
expect(rebuild).to match(/^Compiling /)
|
|
235
|
+
expect(rebuild).to match(/^Linking /)
|
|
236
|
+
expect(rebuild).to match(/^Running /)
|
|
237
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
238
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
it "a partial build (test:pattern) does not disturb the full-run cache for untouched tests" do
|
|
244
|
+
@c.with_context do
|
|
245
|
+
Dir.chdir "temp_sensor" do
|
|
246
|
+
# Only `test:all` sets the :refresh_dependencies option that permits the
|
|
247
|
+
# dependency cache to prune entries for targets it didn't see this run (see
|
|
248
|
+
# Dependinator#flush) -- a partial invocation like test:pattern must
|
|
249
|
+
# never trigger that pruning, or a subsequent full run would
|
|
250
|
+
# incorrectly treat untouched targets as needing a rebuild.
|
|
251
|
+
@c.ceedling_build_exec("test:all")
|
|
252
|
+
|
|
253
|
+
# Give the partial run something real to do -- its targets are already
|
|
254
|
+
# fresh from the baseline build above, so without a change here the
|
|
255
|
+
# partial run would trivially skip everything and this test would prove
|
|
256
|
+
# nothing about pruning safety specifically. Both files matching the
|
|
257
|
+
# [Temp] pattern are probed so the partial run has real work across its
|
|
258
|
+
# whole scope, not just a subset that's itself still fresh.
|
|
259
|
+
probe_test_file!(File.join('test', 'TestTemperatureCalculator.c'))
|
|
260
|
+
probe_test_file!(File.join('test', 'TestTemperatureFilter.c'))
|
|
261
|
+
|
|
262
|
+
partial = @c.ceedling_build_exec("test:pattern[Temp]")
|
|
263
|
+
expect(partial).to match(/^Compiling .*TemperatureCalculator/)
|
|
264
|
+
expect(partial).to match(/^Compiling .*TemperatureFilter/)
|
|
265
|
+
expect(partial).to match(/TESTED:\s+6/)
|
|
266
|
+
expect(partial).to match(/PASSED:\s+6/)
|
|
267
|
+
|
|
268
|
+
# The other 80 tests the partial run never touched must still be
|
|
269
|
+
# considered fresh -- proving the partial run's flush(prune: false)
|
|
270
|
+
# left their cache entries alone -- while still reporting all 86
|
|
271
|
+
# cached results (including the 6 the partial run just refreshed).
|
|
272
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
273
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
274
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
275
|
+
expect(rebuild).to_not match(/^Running /)
|
|
276
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
277
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# Config-only changes -- no source, header, or test file edited at all -- that
|
|
284
|
+
# should still invalidate a target because the *tool*, the preprocessing mode,
|
|
285
|
+
# or the Partials config that produced it changed. Each `:tools` edit below adds
|
|
286
|
+
# a key Ceedling itself never reads (`:ceedling_delta_probe`), so the resulting
|
|
287
|
+
# rebuild is attributable purely to the dependency tracker's own meta-hash
|
|
288
|
+
# comparison -- not to any real behavior change a different flag or executable
|
|
289
|
+
# might otherwise cause.
|
|
290
|
+
describe "Delta builds: config-only meta changes (temp_sensor)" do
|
|
291
|
+
before do
|
|
292
|
+
@c.with_context do
|
|
293
|
+
output = @c.ceedling_appcmd_exec("example temp_sensor")
|
|
294
|
+
expect(output).to match(/created/)
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
it "recompiles every object when the :tools ↳ :test_compiler configuration changes, with no source edits" do
|
|
299
|
+
@c.with_context do
|
|
300
|
+
Dir.chdir "temp_sensor" do
|
|
301
|
+
@c.ceedling_build_exec("test:all")
|
|
302
|
+
|
|
303
|
+
@c.merge_project_yml_for_test({ :tools => { :test_compiler => { :ceedling_delta_probe => true } } })
|
|
304
|
+
|
|
305
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
306
|
+
|
|
307
|
+
# Only Compiling is asserted, not Linking: the inert probe key changes
|
|
308
|
+
# no real compiler argument, so a deterministic toolchain can (and does
|
|
309
|
+
# here) produce byte-identical objects, in which case linking is
|
|
310
|
+
# correctly skipped on its own separate content-hash staleness check --
|
|
311
|
+
# the same pattern already established elsewhere in this file for a
|
|
312
|
+
# content change that doesn't alter compiled output.
|
|
313
|
+
expect(rebuild).to match(/^Compiling /)
|
|
314
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
315
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
it "reruns every test when the :tools ↳ :test_fixture configuration changes, with the executable otherwise unchanged" do
|
|
321
|
+
@c.with_context do
|
|
322
|
+
Dir.chdir "temp_sensor" do
|
|
323
|
+
@c.ceedling_build_exec("test:all")
|
|
324
|
+
|
|
325
|
+
@c.merge_project_yml_for_test({ :tools => { :test_fixture => { :ceedling_delta_probe => true } } })
|
|
326
|
+
|
|
327
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
328
|
+
|
|
329
|
+
# Nothing about the executable itself changed -- only the tool that runs
|
|
330
|
+
# it -- so compiling and linking are correctly skipped; only execution
|
|
331
|
+
# (stage 17's own new target) is invalidated.
|
|
332
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
333
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
334
|
+
expect(rebuild).to match(/^Running /)
|
|
335
|
+
|
|
336
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
337
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
it "re-extracts #includes for every test file when :test_build ↳ :preprocess_force_fallback toggles" do
|
|
343
|
+
@c.with_context do
|
|
344
|
+
Dir.chdir "temp_sensor" do
|
|
345
|
+
@c.ceedling_build_exec("test:all")
|
|
346
|
+
|
|
347
|
+
# Unlike the single-file :preprocess: ↳ :defines matcher scenario above,
|
|
348
|
+
# this setting has no per-file scope at all -- toggling it changes every
|
|
349
|
+
# preprocessing target's meta project-wide, so re-extraction isn't
|
|
350
|
+
# limited to one matched file. Forcing fallback is also a real
|
|
351
|
+
# procedural switch, not merely a meta-tracked value -- its best-effort
|
|
352
|
+
# reconciliation can find a different #include set than directives-only
|
|
353
|
+
# output does on a real project, so (unlike the :tools scenarios above)
|
|
354
|
+
# compiling is deliberately left unasserted here rather than claimed to
|
|
355
|
+
# be absent.
|
|
356
|
+
@c.merge_project_yml_for_test({ :test_build => { :preprocess_force_fallback => true } })
|
|
357
|
+
|
|
358
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
359
|
+
|
|
360
|
+
expect(rebuild).to match(/^Extracting #includes from TestAdcModel\.c/)
|
|
361
|
+
expect(rebuild).to match(/^Extracting #includes from TestUsartModel\.c/)
|
|
362
|
+
expect(rebuild).to match(/^Extracting #includes from TestTimerModel\.c/)
|
|
363
|
+
expect(rebuild).to match(/WARNING: Reconciling #includes from best-effort fallback preprocessing for/)
|
|
364
|
+
|
|
365
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
366
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# Every other scenario in this file uses a project whose tests all pass -- stage
|
|
373
|
+
# 17's own fixture-tool tracking (see the config-only meta changes above) targets
|
|
374
|
+
# a dedicated marker file specifically because the test's outcome-dependent result
|
|
375
|
+
# file (.pass on success, .fail on failure) is not guaranteed to exist either way,
|
|
376
|
+
# and a persistently *failing* test is exactly the case that would have exposed a
|
|
377
|
+
# target keyed on the wrong one of those two -- crashing outright if marked fresh
|
|
378
|
+
# while genuinely missing, or reporting permanent, incorrect staleness if `stale?`
|
|
379
|
+
# checked for a path that only exists on the *other* outcome.
|
|
380
|
+
describe "Delta builds: repeated builds of a persistently failing test" do
|
|
381
|
+
before { @proj_name = unique_proj_name("delta_fail") }
|
|
382
|
+
|
|
383
|
+
def deploy_failing_test!
|
|
384
|
+
@c.ceedling_appcmd_exec("new #{@proj_name}")
|
|
385
|
+
|
|
386
|
+
Dir.chdir @proj_name do
|
|
387
|
+
FileUtils.cp test_asset_path("example_file.h"), 'src/'
|
|
388
|
+
FileUtils.cp test_asset_path("example_file.c"), 'src/'
|
|
389
|
+
FileUtils.cp test_asset_path("test_example_file.c"), 'test/'
|
|
390
|
+
end
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
it "does not crash, and correctly skips recompiling/relinking/rerunning, on a rebuild of a failing test left unchanged" do
|
|
394
|
+
@c.with_context do
|
|
395
|
+
deploy_failing_test!
|
|
396
|
+
|
|
397
|
+
Dir.chdir @proj_name do
|
|
398
|
+
baseline = @c.ceedling_build_exec("test:all")
|
|
399
|
+
expect(baseline).to_not match(/EXCEPTION/)
|
|
400
|
+
expect(baseline).to match(/FAILED:\s+[1-9]/)
|
|
401
|
+
|
|
402
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
403
|
+
expect(rebuild).to_not match(/EXCEPTION/)
|
|
404
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
405
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
406
|
+
expect(rebuild).to_not match(/^Running /)
|
|
407
|
+
expect(rebuild).to match(/FAILED:\s+[1-9]/)
|
|
408
|
+
end
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
it "reruns a persistently failing test's fixture when :tools ↳ :test_fixture configuration changes, with nothing else changed" do
|
|
413
|
+
@c.with_context do
|
|
414
|
+
deploy_failing_test!
|
|
415
|
+
|
|
416
|
+
Dir.chdir @proj_name do
|
|
417
|
+
@c.ceedling_build_exec("test:all")
|
|
418
|
+
|
|
419
|
+
@c.merge_project_yml_for_test({ :tools => { :test_fixture => { :ceedling_delta_probe => true } } })
|
|
420
|
+
|
|
421
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
422
|
+
expect(rebuild).to_not match(/EXCEPTION/)
|
|
423
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
424
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
425
|
+
expect(rebuild).to match(/^Running /)
|
|
426
|
+
expect(rebuild).to match(/FAILED:\s+[1-9]/)
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
# :unity ↳ :shuffle_tests decides test-case execution order at runtime, inside
|
|
433
|
+
# the compiled executable's own main() -- not at compile or link time. So an
|
|
434
|
+
# executable delta builds correctly judge unchanged (same source, same flags,
|
|
435
|
+
# same generated runner) still needs to actually run again for shuffling to do
|
|
436
|
+
# anything at all; otherwise the previous run's cached result is reported
|
|
437
|
+
# forever and the shuffled order is never realized. --force-test-rerun is the
|
|
438
|
+
# same override, available on demand independent of shuffling.
|
|
439
|
+
describe "Delta builds: forcing test re-execution despite no changes (temp_sensor)" do
|
|
440
|
+
before do
|
|
441
|
+
@c.with_context do
|
|
442
|
+
output = @c.ceedling_appcmd_exec("example temp_sensor")
|
|
443
|
+
expect(output).to match(/created/)
|
|
444
|
+
end
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
it "--force-test-rerun reruns test executables and reports fresh results on an otherwise-unchanged rebuild" do
|
|
448
|
+
@c.with_context do
|
|
449
|
+
Dir.chdir "temp_sensor" do
|
|
450
|
+
@c.ceedling_build_exec("test:all")
|
|
451
|
+
|
|
452
|
+
rebuild = @c.ceedling_build_exec("test:all", "--force-test-rerun")
|
|
453
|
+
|
|
454
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
455
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
456
|
+
expect(rebuild).to match(/^Running /)
|
|
457
|
+
|
|
458
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
459
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
it ":unity ↳ :shuffle_tests automatically reruns test executables on an otherwise-unchanged rebuild" do
|
|
465
|
+
@c.with_context do
|
|
466
|
+
Dir.chdir "temp_sensor" do
|
|
467
|
+
settings = { :unity => { :shuffle_tests => true } }
|
|
468
|
+
@c.merge_project_yml_for_test(settings)
|
|
469
|
+
|
|
470
|
+
@c.ceedling_build_exec("test:all")
|
|
471
|
+
|
|
472
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
473
|
+
|
|
474
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
475
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
476
|
+
expect(rebuild).to match(/^Running /)
|
|
477
|
+
|
|
478
|
+
expect(rebuild).to match(/TESTED:\s+86/)
|
|
479
|
+
expect(rebuild).to match(/PASSED:\s+86/)
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
end
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
# Partials preprocessing (stages 6-8) gates its directives-only/preserve-macros/
|
|
486
|
+
# full-expansion passes on their own DependencyTracker targets, one per partial
|
|
487
|
+
# header and one per partial source -- separate from (and in addition to) the
|
|
488
|
+
# object-compile staleness every test already has. wondrous_forest exercises
|
|
489
|
+
# both an implementation-only partial (SoilMoisture, no interface) and an
|
|
490
|
+
# implementation+interface partial (ForestMonitor), so this project also proves
|
|
491
|
+
# that distinction survives an untouched rebuild.
|
|
492
|
+
describe "Delta builds: incremental rebuild staleness tracking (wondrous_forest, Partials)" do
|
|
493
|
+
before do
|
|
494
|
+
@c.with_context do
|
|
495
|
+
output = @c.ceedling_appcmd_exec("example wondrous_forest")
|
|
496
|
+
expect(output).to match(/created/)
|
|
497
|
+
end
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
it "skips recompiling, relinking, rerunning, and regenerating any partial or mock on an immediate rebuild with no changes" do
|
|
501
|
+
@c.with_context do
|
|
502
|
+
Dir.chdir "wondrous_forest" do
|
|
503
|
+
baseline = @c.ceedling_build_exec("test:all")
|
|
504
|
+
expect(baseline).to match(/TESTED:\s+71/)
|
|
505
|
+
expect(baseline).to match(/PASSED:\s+71/)
|
|
506
|
+
|
|
507
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
508
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
509
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
510
|
+
expect(rebuild).to_not match(/^Running /)
|
|
511
|
+
expect(rebuild).to_not match(/Generating mock for/)
|
|
512
|
+
expect(rebuild).to_not match(/Generating shared Partial types for/)
|
|
513
|
+
expect(rebuild).to_not match(/Generating Partial implementation for/)
|
|
514
|
+
expect(rebuild).to_not match(/Generating Partial mockable interface for/)
|
|
515
|
+
|
|
516
|
+
expect(rebuild).to match(/TESTED:\s+71/)
|
|
517
|
+
expect(rebuild).to match(/PASSED:\s+71/)
|
|
518
|
+
end
|
|
519
|
+
end
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
it "reprocesses only the changed partial's source, leaving its header, other partials, and unrelated tests untouched" do
|
|
523
|
+
@c.with_context do
|
|
524
|
+
Dir.chdir "wondrous_forest" do
|
|
525
|
+
@c.ceedling_build_exec("test:all")
|
|
526
|
+
|
|
527
|
+
probe_source_file!(File.join('src', 'SoilMoisture.c'), 'SoilMoisture_Init')
|
|
528
|
+
|
|
529
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
530
|
+
|
|
531
|
+
expect(rebuild).to match(/^Compiling TestSoilMoisture::SoilMoisture\.c/)
|
|
532
|
+
expect(rebuild).to match(/^Linking TestSoilMoisture\.out/)
|
|
533
|
+
expect(rebuild).to match(/^Running TestSoilMoisture\.out/)
|
|
534
|
+
|
|
535
|
+
# Other partials -- implementation-only (EventQueue) and
|
|
536
|
+
# implementation+interface (ForestMonitor) alike -- show no activity.
|
|
537
|
+
expect(rebuild).to_not match(/^Compiling.*EventQueue/)
|
|
538
|
+
expect(rebuild).to_not match(/^Compiling.*ForestMonitor/)
|
|
539
|
+
expect(rebuild).to_not match(/^Linking TestEventQueue/)
|
|
540
|
+
expect(rebuild).to_not match(/^Linking TestForestMonitor/)
|
|
541
|
+
|
|
542
|
+
expect(rebuild).to match(/TESTED:\s+71/)
|
|
543
|
+
expect(rebuild).to match(/PASSED:\s+71/)
|
|
544
|
+
end
|
|
545
|
+
end
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
it "reprocesses only the changed partial's header, leaving its source, other partials, and unrelated tests untouched" do
|
|
549
|
+
@c.with_context do
|
|
550
|
+
Dir.chdir "wondrous_forest" do
|
|
551
|
+
@c.ceedling_build_exec("test:all")
|
|
552
|
+
|
|
553
|
+
# ForestMonitor.c #includes ForestMonitor.h directly, so this also
|
|
554
|
+
# exercises the pre-existing shared-header compile staleness path
|
|
555
|
+
# (proving it's unaffected by Partials' own separate DependencyTracker
|
|
556
|
+
# targets for the header/source preprocessing passes) alongside the
|
|
557
|
+
# header partial-preprocessing target itself. As with the equivalent
|
|
558
|
+
# temp_sensor scenario above, only Compiling is asserted here -- a
|
|
559
|
+
# bare added prototype with no call site can compile to an object
|
|
560
|
+
# identical to the prior one, in which case linking is correctly
|
|
561
|
+
# skipped on its own separate content-hash staleness check.
|
|
562
|
+
probe_header!(File.join('src', 'ForestMonitor.h'))
|
|
563
|
+
|
|
564
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
565
|
+
|
|
566
|
+
expect(rebuild).to match(/^Compiling TestForestMonitor::ForestMonitor\.c/)
|
|
567
|
+
|
|
568
|
+
expect(rebuild).to_not match(/^Compiling.*SoilMoisture/)
|
|
569
|
+
expect(rebuild).to_not match(/^Compiling.*TemperatureSensor/)
|
|
570
|
+
expect(rebuild).to_not match(/^Linking TestSoilMoisture/)
|
|
571
|
+
expect(rebuild).to_not match(/^Linking TestTemperatureSensor/)
|
|
572
|
+
|
|
573
|
+
expect(rebuild).to match(/TESTED:\s+71/)
|
|
574
|
+
expect(rebuild).to match(/PASSED:\s+71/)
|
|
575
|
+
end
|
|
576
|
+
end
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
it "a preprocess-only meta change (no file edit) triggers re-extraction across partials without recompiling anything" do
|
|
580
|
+
@c.with_context do
|
|
581
|
+
Dir.chdir "wondrous_forest" do
|
|
582
|
+
@c.ceedling_build_exec("test:all")
|
|
583
|
+
|
|
584
|
+
# As with the equivalent temp_sensor scenario above, introducing a
|
|
585
|
+
# Hash-shaped :preprocess: defines section changes effective
|
|
586
|
+
# preprocess defines meta only for the one file matching it -- every
|
|
587
|
+
# other file falls back to its own compile-time defines (see
|
|
588
|
+
# ConfigMatchinator#matches?'s `no_match_default`), so only
|
|
589
|
+
# TestSoilMoisture.c's bare-includes extraction goes stale here.
|
|
590
|
+
# Partials' own required macro symbol (CEEDLING_PARTIALS_PREFIX) is
|
|
591
|
+
# delivered unconditionally by TestBuildSetup#framework_defines
|
|
592
|
+
# regardless of this section, so it's unaffected either way.
|
|
593
|
+
@c.merge_project_yml_for_test({
|
|
594
|
+
:defines => {
|
|
595
|
+
:preprocess => {
|
|
596
|
+
'TestSoilMoisture.c' => ['CEEDLING_DELTA_PROBE']
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
})
|
|
600
|
+
|
|
601
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
602
|
+
|
|
603
|
+
expect(rebuild).to match(/^Extracting #includes from TestSoilMoisture\.c/)
|
|
604
|
+
|
|
605
|
+
# Unrelated files' meta is untouched -- proving the no_match_default
|
|
606
|
+
# fallback, not just the matched file's own re-extraction.
|
|
607
|
+
expect(rebuild).to_not match(/^Extracting #includes from TestEventQueue/)
|
|
608
|
+
expect(rebuild).to_not match(/^Extracting #includes from TestUartDriver/)
|
|
609
|
+
|
|
610
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
611
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
612
|
+
expect(rebuild).to_not match(/^Running /)
|
|
613
|
+
|
|
614
|
+
expect(rebuild).to match(/TESTED:\s+71/)
|
|
615
|
+
expect(rebuild).to match(/PASSED:\s+71/)
|
|
616
|
+
end
|
|
617
|
+
end
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
it "reprocesses and regenerates every partial when the :partials configuration changes, with no file edits" do
|
|
621
|
+
@c.with_context do
|
|
622
|
+
Dir.chdir "wondrous_forest" do
|
|
623
|
+
@c.ceedling_build_exec("test:all")
|
|
624
|
+
|
|
625
|
+
# Unlike the :preprocess: ↳ :defines matcher above, :partials has no
|
|
626
|
+
# per-file scope -- it applies uniformly, so both the
|
|
627
|
+
# implementation-only partial (SoilMoisture) and the
|
|
628
|
+
# implementation+interface partial (ForestMonitor) reprocess and
|
|
629
|
+
# regenerate.
|
|
630
|
+
@c.merge_project_yml_for_test({ :partials => { :max_extraction_length => 6000 } })
|
|
631
|
+
|
|
632
|
+
rebuild = @c.ceedling_build_exec("test:all")
|
|
633
|
+
|
|
634
|
+
expect(rebuild).to match(/Preprocessing partial (header|source) for TestSoilMoisture/)
|
|
635
|
+
expect(rebuild).to match(/Preprocessing partial (header|source) for TestForestMonitor/)
|
|
636
|
+
expect(rebuild).to match(/Generating Partial implementation for TestSoilMoisture/)
|
|
637
|
+
expect(rebuild).to match(/Generating Partial implementation for TestForestMonitor/)
|
|
638
|
+
expect(rebuild).to match(/Generating Partial mockable interface for TestForestMonitor/)
|
|
639
|
+
|
|
640
|
+
expect(rebuild).to match(/TESTED:\s+71/)
|
|
641
|
+
expect(rebuild).to match(/PASSED:\s+71/)
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
end
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
# cipher_quest is the only example project with :release_build: TRUE. Its release
|
|
648
|
+
# build normally needs a --mixin to supply :defines ↳ :release (feature symbols
|
|
649
|
+
# main.c's conditional compilation requires) -- these scenarios instead merge
|
|
650
|
+
# those defines directly into project.yml, matching this file's own established
|
|
651
|
+
# pattern elsewhere, so they don't depend on mixin flags at all.
|
|
652
|
+
describe "Delta builds: incremental rebuild staleness tracking (cipher_quest, Release)" do
|
|
653
|
+
before do
|
|
654
|
+
@c.with_context do
|
|
655
|
+
output = @c.ceedling_appcmd_exec("example cipher_quest")
|
|
656
|
+
expect(output).to match(/created/)
|
|
657
|
+
end
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
# Merges :defines ↳ :release directly into cipher_quest's project.yml, standing
|
|
661
|
+
# in for the --mixin flag the example otherwise expects -- must run inside the
|
|
662
|
+
# project directory, so each `it` calls this itself rather than sharing a
|
|
663
|
+
# `before` (project.yml doesn't exist until the project directory is entered).
|
|
664
|
+
def enable_release_features!
|
|
665
|
+
@c.merge_project_yml_for_test({
|
|
666
|
+
:defines => {
|
|
667
|
+
:release => ['CIPHER_ROT13', 'CIPHER_CAESAR', 'ANALYZER_ENABLED']
|
|
668
|
+
}
|
|
669
|
+
})
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
it "skips recompiling and relinking on an immediate rebuild with no changes" do
|
|
673
|
+
@c.with_context do
|
|
674
|
+
Dir.chdir "cipher_quest" do
|
|
675
|
+
enable_release_features!
|
|
676
|
+
|
|
677
|
+
baseline = @c.ceedling_build_exec("release")
|
|
678
|
+
expect(baseline).to_not match(/ERROR/)
|
|
679
|
+
|
|
680
|
+
rebuild = @c.ceedling_build_exec("release")
|
|
681
|
+
expect(rebuild).to_not match(/^Compiling /)
|
|
682
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
683
|
+
end
|
|
684
|
+
end
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
it "recompiles and relinks only the object whose source changed" do
|
|
688
|
+
@c.with_context do
|
|
689
|
+
Dir.chdir "cipher_quest" do
|
|
690
|
+
enable_release_features!
|
|
691
|
+
@c.ceedling_build_exec("release")
|
|
692
|
+
|
|
693
|
+
probe_source_file!(File.join('src', 'cipher.c'), 'cipher_rot13')
|
|
694
|
+
|
|
695
|
+
rebuild = @c.ceedling_build_exec("release")
|
|
696
|
+
|
|
697
|
+
expect(rebuild).to match(/^Compiling cipher\.c/)
|
|
698
|
+
expect(rebuild).to match(/^Linking /)
|
|
699
|
+
|
|
700
|
+
expect(rebuild).to_not match(/^Compiling analyzer\.c/)
|
|
701
|
+
expect(rebuild).to_not match(/^Compiling text_utils\.c/)
|
|
702
|
+
expect(rebuild).to_not match(/^Compiling main\.c/)
|
|
703
|
+
end
|
|
704
|
+
end
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
it "recompiles every object whose source #includes a changed header, via .d-file-derived transitive tracking, leaving unrelated objects untouched" do
|
|
708
|
+
@c.with_context do
|
|
709
|
+
Dir.chdir "cipher_quest" do
|
|
710
|
+
enable_release_features!
|
|
711
|
+
@c.ceedling_build_exec("release")
|
|
712
|
+
|
|
713
|
+
# analyzer.h is #included by both analyzer.c and main.c, so both
|
|
714
|
+
# objects' registered dependencies -- populated from each object's own
|
|
715
|
+
# `.d` file, discovered by gcc's -MMD -MF during its prior compile --
|
|
716
|
+
# include analyzer.h; its content hash changing makes both objects
|
|
717
|
+
# stale, independent of either .c file's own content. Only Compiling
|
|
718
|
+
# is asserted (not Linking): a bare added prototype with no call site
|
|
719
|
+
# can compile to an object identical to the prior one, in which case
|
|
720
|
+
# linking is correctly skipped on its own separate content-hash
|
|
721
|
+
# staleness check.
|
|
722
|
+
probe_header!(File.join('src', 'analyzer.h'))
|
|
723
|
+
|
|
724
|
+
rebuild = @c.ceedling_build_exec("release")
|
|
725
|
+
|
|
726
|
+
expect(rebuild).to match(/^Compiling analyzer\.c/)
|
|
727
|
+
expect(rebuild).to match(/^Compiling main\.c/)
|
|
728
|
+
|
|
729
|
+
expect(rebuild).to_not match(/^Compiling cipher\.c/)
|
|
730
|
+
expect(rebuild).to_not match(/^Compiling text_utils\.c/)
|
|
731
|
+
end
|
|
732
|
+
end
|
|
733
|
+
end
|
|
734
|
+
|
|
735
|
+
it "release:compile:<file> rebuilds only that object and does not link" do
|
|
736
|
+
@c.with_context do
|
|
737
|
+
Dir.chdir "cipher_quest" do
|
|
738
|
+
enable_release_features!
|
|
739
|
+
@c.ceedling_build_exec("release")
|
|
740
|
+
|
|
741
|
+
probe_source_file!(File.join('src', 'cipher.c'), 'cipher_rot13')
|
|
742
|
+
|
|
743
|
+
rebuild = @c.ceedling_build_exec("release:compile:cipher.c")
|
|
744
|
+
|
|
745
|
+
expect(rebuild).to match(/^Compiling cipher\.c/)
|
|
746
|
+
expect(rebuild).to_not match(/^Linking /)
|
|
747
|
+
end
|
|
748
|
+
end
|
|
749
|
+
end
|
|
750
|
+
end
|
|
751
|
+
end
|