ceedling 1.1.10 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +3 -0
- data/.simplecov +73 -0
- data/GIT_COMMIT_SHA +1 -1
- data/Gemfile +84 -8
- data/Gemfile.lock +38 -8
- data/README.md +64 -45
- data/Rakefile +769 -16
- data/assets/{project.yml → features/project.yml} +4 -1
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.c +24 -0
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.h +14 -0
- data/assets/fixtures/bullseye_branch_coverage/test/test_branchy.c +18 -0
- data/assets/fixtures/cppcheck_findings/findings.c +23 -0
- data/assets/fixtures/cppcheck_findings/findings.h +13 -0
- data/assets/fixtures/header_include_path_validation/alt_drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/bar.h +6 -0
- data/assets/fixtures/header_include_path_validation/drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/other_inc/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/test_ambiguous_mock.c +15 -0
- data/assets/fixtures/header_include_path_validation/test_bare_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_mock_path.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_vanilla_path.c +10 -0
- data/assets/fixtures/header_include_path_validation/test_include_outranks_test_include_path.c +16 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock_ambiguous.c +14 -0
- data/assets/fixtures/header_include_path_validation/test_test_include_path_outranks_include.c +17 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/gamma/dup_gamma.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_alpha.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_bare.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_beta.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_override.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive_noop.c +16 -0
- data/assets/fixtures/parent_directory_references/alpha/extra.c +4 -0
- data/assets/fixtures/parent_directory_references/common/helper.c +6 -0
- data/assets/fixtures/parent_directory_references/common/helper.h +6 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_include.c +10 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_source.c +16 -0
- data/assets/fixtures/plain_inline_module.h +9 -0
- data/assets/fixtures/same_named_modules/include/drivers/spi/config.h +6 -0
- data/assets/fixtures/same_named_modules/include/drivers/uart/config.h +6 -0
- data/assets/fixtures/same_named_modules/src/drivers/spi/config.c +8 -0
- data/assets/fixtures/same_named_modules/src/drivers/uart/config.c +10 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs.c +26 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked.c +20 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked_traditional.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_both_modules.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_bare.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_partial_only.c +20 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/main.c +11 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_baz_bar.c +10 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_both_bars.c +12 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_foo_bar.c +10 -0
- data/assets/{test_example_file_boom.c → fixtures/test_nosanitize_boom.c} +9 -0
- data/assets/{test_example_file_crash_assert.c → fixtures/test_nosanitize_crash_assert.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv.c → fixtures/test_nosanitize_crash_sigsegv.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv_with_param.c → fixtures/test_nosanitize_crash_sigsegv_with_param.c} +8 -0
- data/assets/fixtures/test_nosanitize_heap_buffer_overflow.c +31 -0
- data/assets/fixtures/test_nosanitize_leak.c +34 -0
- data/assets/fixtures/test_nosanitize_two_findings.c +36 -0
- data/assets/{test_example_file_ub_shift_overflow.c → fixtures/test_nosanitize_ub_shift_overflow.c} +9 -0
- data/assets/fixtures/test_plain_inline_module.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/alpha/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/beta/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_alpha.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_ambiguous.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_beta.c +15 -0
- data/assets/fixtures/tests_with_conditional_includes/src/feature_extra2.h +13 -0
- data/assets/fixtures/tests_with_conditional_includes/src/macro_target_extra.h +13 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.c +19 -3
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.h +1 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.c +17 -1
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget.c +12 -4
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget_feature.c +8 -5
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/FeatureConfig.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Gpt.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModuleConfig.h +17 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart1.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart2.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/drivers/widget.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01.c +21 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01_legacy.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_02.c +31 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_FeatureConfig.c +15 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_reader.c +13 -0
- data/assets/fixtures/tests_with_duplicate_test_names/integration/test_foo.c +21 -0
- data/assets/fixtures/tests_with_duplicate_test_names/unit/test_foo.c +21 -0
- data/assets/fixtures/tests_with_fallback_conditionals/src/conditional_module.c +28 -0
- data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/test/test_conditionals.c +8 -1
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_lower.s +2 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_upper.S +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.c +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.h +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/test/test_counter_module.c +27 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/app/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/drivers/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.c +30 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/shared/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/test/test_sensor.c +32 -0
- data/bin/actionator.rb +234 -0
- data/bin/app_cfg.rb +28 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +96 -58
- data/bin/cli_helper.rb +95 -49
- data/bin/cli_options_transform.rb +22 -0
- data/bin/{configinator.rb → composinator.rb} +39 -32
- data/bin/mixin_resolvinator.rb +124 -0
- data/bin/mixin_standardizer.rb +31 -61
- data/bin/mixinator.rb +27 -29
- data/bin/mixins.rb +0 -5
- data/bin/objects.yml +20 -7
- data/bin/path_validator.rb +6 -5
- data/bin/projectinator.rb +51 -142
- data/bin/rake_patches.rb +36 -2
- data/bin/recursive_merger.rb +7 -1
- data/bin/versionator.rb +2 -3
- data/ceedling.gemspec +83 -12
- data/docs/BreakingChanges.md +46 -2
- data/docs/CONTRIBUTING.md +45 -29
- data/docs/CeedlingPullRequestChecklist.md +10 -9
- data/docs/Changelog.md +337 -37
- data/docs/KnownIssues.md +30 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +46 -2
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +35 -0
- data/examples/temp_sensor/mixin/add_bullseye.yml +19 -0
- data/examples/wondrous_forest/README.md +3 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.c +21 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.h +14 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.c +23 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.h +14 -0
- data/examples/wondrous_forest/test/TestCalibration.c +39 -0
- data/lib/ceedling/batchinator.rb +81 -22
- data/lib/ceedling/c_extractor/README.md +61 -0
- data/lib/ceedling/c_extractor/c_extractor.rb +33 -2
- data/lib/ceedling/c_extractor/c_extractor_code_text.rb +18 -10
- data/lib/ceedling/c_extractor/c_extractor_constants.rb +10 -10
- data/lib/ceedling/c_extractor/c_extractor_declarations.rb +14 -14
- data/lib/ceedling/c_extractor/c_extractor_functions.rb +10 -13
- data/lib/ceedling/c_extractor/c_extractor_preprocessing.rb +77 -0
- data/lib/ceedling/c_extractor/c_extractor_types.rb +8 -5
- data/lib/ceedling/ceedling.h +33 -0
- data/lib/ceedling/config/config_matchinator.rb +36 -13
- data/lib/ceedling/config/configurator.rb +370 -531
- data/lib/ceedling/config/configurator_builder.rb +253 -365
- data/lib/ceedling/config/configurator_plugins.rb +68 -102
- data/lib/ceedling/config/configurator_setup.rb +360 -616
- data/lib/ceedling/config/configurator_validator.rb +114 -142
- data/lib/ceedling/config/line_marker_suppressors.rb +67 -0
- data/lib/ceedling/constants.rb +60 -6
- data/lib/ceedling/defaults.rb +28 -14
- data/lib/ceedling/defineinator.rb +9 -4
- data/lib/ceedling/dependencies/README.md +69 -0
- data/lib/ceedling/dependencies/dependency_cache_store.rb +160 -0
- data/lib/ceedling/dependencies/dependency_debug_tree.rb +129 -0
- data/lib/ceedling/dependencies/dependency_differ.rb +127 -0
- data/lib/ceedling/dependencies/dependency_hasher.rb +94 -0
- data/lib/ceedling/dependencies/dependency_path_normalizer.rb +80 -0
- data/lib/ceedling/dependencies/dependency_tracker.rb +405 -0
- data/lib/ceedling/dependencies/dependinator.rb +65 -0
- data/lib/ceedling/dependencies/gcc_dependency_parser.rb +86 -0
- data/lib/ceedling/encodinator.rb +23 -11
- data/lib/ceedling/file_finder.rb +373 -89
- data/lib/ceedling/file_finder_helper.rb +44 -33
- data/lib/ceedling/file_path_collection_utils.rb +17 -4
- data/lib/ceedling/file_path_utils.rb +310 -52
- data/lib/ceedling/file_wrapper.rb +275 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +192 -70
- data/lib/ceedling/generators/generator_helper.rb +116 -69
- data/lib/ceedling/generators/generator_mocks.rb +13 -8
- data/lib/ceedling/generators/generator_partials.rb +47 -15
- data/lib/ceedling/generators/generator_test_results.rb +29 -17
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +199 -107
- data/lib/ceedling/generators/generator_test_results_sanity_checker.rb +1 -1
- data/lib/ceedling/includes/include_factory.rb +21 -6
- data/lib/ceedling/includes/include_pathinator.rb +40 -4
- data/lib/ceedling/includes/includes.rb +215 -61
- data/lib/ceedling/loginator.rb +13 -4
- data/lib/ceedling/objects.yml +216 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +118 -26
- data/lib/ceedling/partials/partializer_config.rb +141 -8
- data/lib/ceedling/partials/partializer_helper.rb +88 -2
- data/lib/ceedling/partials/partializer_utils.rb +1 -1
- data/lib/ceedling/partials/partials.rb +4 -4
- data/lib/ceedling/path_matcher.rb +163 -0
- data/lib/ceedling/path_mirror.rb +73 -0
- data/lib/ceedling/plugins/plugin.rb +1 -1
- data/lib/ceedling/plugins/plugin_manager.rb +31 -15
- data/lib/ceedling/plugins/plugin_manager_helper.rb +5 -1
- data/lib/ceedling/plugins/plugin_reportinator.rb +36 -7
- data/lib/ceedling/plugins/plugin_reportinator_helper.rb +3 -3
- data/lib/ceedling/plugins/report_log_writer_plugin.rb +66 -0
- data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +18 -5
- data/lib/ceedling/preprocess/README.md +135 -120
- data/lib/ceedling/preprocess/c_comment_scanner.rb +9 -7
- data/lib/ceedling/preprocess/c_preprocessor_conditionals.rb +27 -10
- data/lib/ceedling/preprocess/preprocessinator.rb +253 -217
- data/lib/ceedling/preprocess/preprocessinator_bare_includes_extractor.rb +7 -10
- data/lib/ceedling/preprocess/preprocessinator_code_finder.rb +8 -6
- data/lib/ceedling/preprocess/preprocessinator_comment_stripper.rb +5 -3
- data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +86 -82
- data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +182 -163
- data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +174 -8
- data/lib/ceedling/preprocess/preprocessinator_reconstructor.rb +41 -20
- data/lib/ceedling/quote_include_isolator.rb +129 -0
- data/lib/ceedling/rake_app/rake_task_registry.rb +9 -9
- data/lib/ceedling/rake_app/rake_wrapper.rb +0 -13
- data/lib/ceedling/rake_app/rakefile_component_resolver.rb +24 -12
- data/lib/ceedling/rake_app/test_task_name.rb +29 -0
- data/lib/ceedling/rakefile.rb +3 -1
- data/lib/ceedling/{tasks_base.rake → rakefiles/base/tasks_base.rake} +1 -1
- data/lib/ceedling/{tasks_filesystem.rake → rakefiles/base/tasks_filesystem.rake} +3 -0
- data/lib/ceedling/rakefiles/release/rules_release.rake +52 -0
- data/lib/ceedling/{erb_wrapper.rb → rakefiles/release/tasks_release.rake} +5 -8
- data/lib/ceedling/{rules_tests.rake → rakefiles/tests/rules_tests.rake} +4 -18
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +54 -0
- data/lib/ceedling/{tasks_tests.rake → rakefiles/tests/tasks_tests.rake} +11 -20
- data/lib/ceedling/rakefiles/tests/tasks_tests_generate.rake +55 -0
- data/lib/ceedling/release_invoker/README.md +35 -0
- data/lib/ceedling/release_invoker/release_build_executor.rb +263 -0
- data/lib/ceedling/release_invoker/release_build_planner.rb +80 -0
- data/lib/ceedling/release_invoker/release_invoker.rb +78 -0
- data/lib/ceedling/release_invoker/release_invoker_types.rb +40 -0
- data/lib/ceedling/reportinator.rb +18 -2
- data/lib/ceedling/ruby_expandinator.rb +40 -1
- data/lib/ceedling/setupinator.rb +13 -3
- data/lib/ceedling/system_wrapper.rb +17 -0
- data/lib/ceedling/templateinator.rb +146 -0
- data/lib/ceedling/test_context_extractor.rb +59 -28
- data/lib/ceedling/test_invoker/HEADER_COLLISIONS.md +41 -0
- data/lib/ceedling/test_invoker/PIPELINE.md +142 -0
- data/lib/ceedling/test_invoker/README.md +6 -0
- data/lib/ceedling/test_invoker/mock_locator.rb +49 -0
- data/lib/ceedling/test_invoker/partials_manager.rb +426 -0
- data/lib/ceedling/test_invoker/standin_headerinator.rb +136 -0
- data/lib/ceedling/test_invoker/test_bare_includes_extractinator.rb +117 -0
- data/lib/ceedling/test_invoker/test_build_executor.rb +800 -429
- data/lib/ceedling/test_invoker/test_build_planner.rb +175 -70
- data/lib/ceedling/test_invoker/test_build_setup.rb +132 -241
- data/lib/ceedling/test_invoker/test_build_validations.rb +102 -0
- data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +148 -0
- data/lib/ceedling/test_invoker/test_includes_extractinator.rb +34 -0
- data/lib/ceedling/test_invoker/test_includes_preprocessinator.rb +118 -0
- data/lib/ceedling/test_invoker/test_includes_reconcilinator.rb +149 -0
- data/lib/ceedling/test_invoker/test_invoker.rb +16 -183
- data/lib/ceedling/test_invoker/test_invoker_types.rb +85 -16
- data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +121 -0
- data/lib/ceedling/test_invoker/test_pipeline_manager.rb +303 -0
- data/lib/ceedling/test_invoker/test_runner_generatinator.rb +105 -0
- data/lib/ceedling/test_invoker/test_search_paths.rb +73 -0
- data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +78 -0
- data/lib/ceedling/tool_executor.rb +42 -13
- data/lib/ceedling/tool_executor_helper.rb +1 -1
- data/lib/ceedling/tool_validator.rb +124 -123
- data/lib/ceedling/yaml_wrapper.rb +5 -3
- data/lib/version.rb +19 -2
- data/mkdocs.prerelease.yml +42 -0
- data/mkdocs.yml +10 -2
- data/plugins/bullseye/bullseye.rake +71 -111
- data/plugins/bullseye/config/defaults.yml +12 -54
- data/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/plugins/bullseye/lib/bullseye.rb +511 -120
- data/plugins/bullseye/lib/bullseye_constants.rb +100 -0
- data/plugins/command_hooks/lib/command_hooks.rb +117 -199
- data/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb +72 -27
- data/plugins/cppcheck/config/defaults.yml +6 -1
- data/plugins/cppcheck/config/defaults_cppcheck.rb +5 -1
- data/plugins/cppcheck/cppcheck.rake +7 -1
- data/plugins/cppcheck/lib/cppcheck.rb +175 -26
- data/plugins/cppcheck/lib/cppcheck_constants.rb +12 -0
- data/plugins/cppcheck/lib/cppcheck_reports.rb +5 -1
- data/plugins/dependencies/Rakefile +14 -2
- data/plugins/dependencies/config/defaults.yml +9 -6
- data/plugins/dependencies/dependencies.rake +46 -76
- data/plugins/dependencies/example/boss/project.yml +1 -1
- data/plugins/dependencies/example/supervisor/project.yml +1 -1
- data/plugins/dependencies/example/version.tar.gzip +0 -0
- data/plugins/dependencies/lib/dependencies.rb +232 -427
- data/plugins/dependencies/lib/dependency_commands.rb +72 -0
- data/plugins/dependencies/lib/dependency_environment.rb +57 -0
- data/plugins/dependencies/lib/dependency_spec.rb +145 -0
- data/plugins/fff/.rspec +1 -0
- data/plugins/fff/Rakefile +14 -2
- data/plugins/fff/examples/fff_example/project.yml +1 -1
- data/plugins/fff/lib/fff.rb +30 -9
- data/plugins/fff/lib/fff_mock_generator.rb +142 -128
- data/plugins/fff/spec/fff_mock_header_generator_spec.rb +15 -0
- data/plugins/fff/spec/fff_mock_source_generator_spec.rb +14 -0
- data/plugins/fff/spec/spec_helper.rb +45 -0
- data/plugins/fff/src/fff_unity_helper.h +5 -0
- data/plugins/fff/vendor/fff/fakegen.rb +5 -4
- data/plugins/fff/vendor/fff/fff.h +4 -4
- data/plugins/gcov/config/defaults.yml +5 -0
- data/plugins/gcov/gcov.rake +16 -15
- data/plugins/gcov/lib/console_reportinator.rb +140 -20
- data/plugins/gcov/lib/gcov.rb +155 -60
- data/plugins/gcov/lib/gcov_constants.rb +4 -7
- data/plugins/gcov/lib/gcov_reportinator.rb +90 -0
- data/plugins/gcov/lib/gcov_types.rb +62 -1
- data/plugins/gcov/lib/gcovr_reportinator.rb +255 -213
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +122 -44
- data/plugins/module_generator/Rakefile +4 -4
- data/plugins/module_generator/config/module_generator.yml +0 -1
- data/plugins/module_generator/example/project.yml +1 -1
- data/plugins/module_generator/lib/module_generator.rb +117 -87
- data/plugins/module_generator/lib/module_generator_options.rb +150 -0
- data/plugins/module_generator/lib/module_generator_project.rb +45 -0
- data/plugins/module_generator/lib/module_generator_request.rb +83 -0
- data/plugins/module_generator/lib/module_generator_test_file.rb +68 -0
- data/plugins/module_generator/lib/module_generator_unity.rb +24 -0
- data/plugins/module_generator/module_generator.rake +24 -46
- data/plugins/report_build_warnings_log/config/defaults.yml +4 -1
- data/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb +47 -55
- data/plugins/report_build_warnings_log/lib/warning_collector.rb +140 -0
- data/plugins/report_build_warnings_log/lib/warning_reports.rb +135 -0
- data/plugins/report_tests_gtestlike_stdout/assets/test_results.template +3 -0
- data/{spec/units/configurator_builder_spec.rb → plugins/report_tests_gtestlike_stdout/config/defaults.yml} +6 -10
- data/plugins/report_tests_gtestlike_stdout/lib/gtestlike_report.rb +168 -0
- data/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb +25 -1
- data/plugins/report_tests_ide_stdout/assets/test_results.template +50 -0
- data/plugins/report_tests_ide_stdout/config/defaults.yml +13 -0
- data/plugins/report_tests_ide_stdout/lib/ide_report_lines.rb +103 -0
- data/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb +12 -4
- data/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb +33 -51
- data/plugins/report_tests_log_factory/lib/html_tests_reporter.rb +286 -295
- data/plugins/report_tests_log_factory/lib/json_tests_reporter.rb +22 -35
- data/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb +91 -133
- data/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb +72 -86
- data/plugins/report_tests_log_factory/lib/tests_reporter.rb +31 -12
- data/plugins/report_tests_pretty_stdout/assets/{template.erb → test_results.template} +8 -8
- data/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb +18 -48
- data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +13 -2
- data/plugins/sanitize/config/defaults.yml +44 -0
- data/plugins/sanitize/config/defaults_sanitize.rb +20 -0
- data/plugins/sanitize/lib/sanitize.rb +174 -0
- data/plugins/sanitize/lib/sanitize_config.rb +110 -0
- data/plugins/sanitize/lib/sanitize_constants.rb +13 -0
- data/plugins/sanitize/lib/sanitize_findings.rb +85 -0
- data/plugins/sanitize/lib/sanitize_records.rb +115 -0
- data/plugins/sanitize/lib/sanitize_reports.rb +135 -0
- data/plugins/sanitize/sanitize.rake +108 -0
- data/plugins/valgrind/config/defaults.yml +7 -1
- data/plugins/valgrind/config/defaults_valgrind.rb +6 -1
- data/plugins/valgrind/lib/valgrind.rb +202 -39
- data/plugins/valgrind/lib/valgrind_constants.rb +4 -0
- data/plugins/valgrind/lib/valgrind_report.rb +52 -0
- data/plugins/valgrind/valgrind.rake +37 -15
- data/site-local/404.html +239 -19
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js → bundle.c21346df.min.js} +3 -3
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js.map → bundle.c21346df.min.js.map} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js → search.a7633da7.min.js} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js.map → search.a7633da7.min.js.map} +1 -1
- data/site-local/assets/stylesheets/main.57a0d79d.min.css +6 -0
- data/site-local/assets/stylesheets/main.57a0d79d.min.css.map +1 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css +4 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css.map +1 -0
- data/site-local/configuration/environment-vars.html +239 -19
- data/site-local/configuration/global-collections.html +239 -24
- data/site-local/configuration/index.html +240 -20
- data/site-local/configuration/loading.html +251 -27
- data/site-local/configuration/mixins.html +247 -26
- data/site-local/configuration/parallel-builds.html +239 -19
- data/site-local/configuration/project-file.html +268 -37
- data/site-local/configuration/reference/cexception.html +246 -25
- data/site-local/configuration/reference/cmock.html +272 -19
- data/site-local/configuration/reference/defines.html +263 -34
- data/site-local/configuration/reference/environment.html +246 -26
- data/site-local/configuration/reference/extension.html +352 -21
- data/site-local/configuration/reference/files.html +258 -24
- data/site-local/configuration/reference/flags.html +268 -31
- data/site-local/configuration/reference/index.html +239 -19
- data/site-local/configuration/reference/libraries.html +239 -19
- data/site-local/configuration/reference/mixins.html +239 -19
- data/site-local/configuration/reference/partials.html +240 -24
- data/site-local/configuration/reference/paths.html +269 -23
- data/site-local/configuration/reference/plugins.html +239 -19
- data/site-local/configuration/reference/project.html +292 -29
- data/site-local/configuration/reference/release-build.html +247 -19
- data/site-local/configuration/reference/test-build.html +281 -29
- data/site-local/configuration/reference/test-runner.html +279 -22
- data/site-local/configuration/reference/tools.html +257 -31
- data/site-local/configuration/reference/unity.html +271 -20
- data/site-local/configuration/which-ceedling.html +239 -19
- data/site-local/development/index.html +245 -19
- data/site-local/development/plugins/configuration.html +260 -22
- data/site-local/development/plugins/index.html +258 -20
- data/site-local/development/plugins/plugin-subclass.html +912 -174
- data/site-local/development/plugins/rake-tasks.html +269 -21
- data/site-local/development/releases.html +4759 -0
- data/site-local/development/workflow.html +1023 -58
- data/site-local/getting-started/builds.html +4593 -0
- data/site-local/getting-started/command-line.html +409 -39
- data/site-local/getting-started/example-projects/cipher-quest.html +239 -19
- data/site-local/getting-started/example-projects/index.html +240 -20
- data/site-local/getting-started/example-projects/temp-sensor.html +239 -19
- data/site-local/getting-started/example-projects/wondrous-forest.html +239 -19
- data/site-local/getting-started/index.html +246 -19
- data/site-local/getting-started/installation.html +249 -27
- data/site-local/getting-started/quick-start.html +242 -20
- data/site-local/help.html +246 -19
- data/site-local/index.html +284 -27
- data/site-local/overview/build-system.html +240 -20
- data/site-local/overview/index.html +239 -19
- data/site-local/overview/test-environments.html +248 -19
- data/site-local/overview/tools-and-frameworks.html +239 -19
- data/site-local/plugins/beep.html +242 -19
- data/site-local/plugins/bullseye/index.html +5068 -0
- data/site-local/plugins/bullseye/licensing.html +4826 -0
- data/site-local/plugins/command-hooks.html +258 -34
- data/site-local/plugins/compile-commands-json-db.html +247 -22
- data/site-local/plugins/cppcheck.html +1073 -268
- data/site-local/plugins/dependencies.html +927 -249
- data/site-local/plugins/fff.html +288 -21
- data/site-local/plugins/gcov/examples.html +243 -20
- data/site-local/plugins/gcov/gcovr.html +559 -71
- data/site-local/plugins/gcov/index.html +242 -19
- data/site-local/plugins/gcov/overview.html +253 -23
- data/site-local/plugins/gcov/reportgenerator.html +380 -46
- data/site-local/plugins/gcov/reporting.html +339 -105
- data/site-local/plugins/gcov/setup.html +244 -20
- data/site-local/plugins/gcov/tool-versions.html +292 -24
- data/site-local/plugins/gcov/troubleshooting.html +265 -42
- data/site-local/plugins/index.html +285 -41
- data/site-local/plugins/module-generator.html +770 -200
- data/site-local/plugins/report-build-warnings-log.html +569 -38
- data/site-local/plugins/report-tests-gtestlike-stdout.html +458 -89
- data/site-local/plugins/report-tests-ide-stdout.html +645 -56
- data/site-local/plugins/report-tests-log-factory.html +364 -111
- data/site-local/plugins/report-tests-pretty-stdout.html +243 -20
- data/site-local/plugins/report-tests-raw-output-log.html +242 -19
- data/site-local/plugins/report-tests-teamcity-stdout.html +252 -29
- data/site-local/plugins/sanitize.html +5322 -0
- data/site-local/plugins/valgrind.html +414 -34
- data/site-local/{plugins/bullseye.html → project/index.html} +288 -222
- data/site-local/project/release-history.html +242 -22
- data/site-local/project/sbom.html +4712 -0
- data/site-local/project/upgrade.html +241 -21
- data/site-local/reference/build-directives.html +248 -19
- data/site-local/reference/command-line.html +364 -21
- data/site-local/reference/environment-vars.html +239 -19
- data/site-local/reference/gcov-plugin.html +483 -23
- data/site-local/reference/global-collections.html +240 -20
- data/site-local/reference/index.html +239 -19
- data/site-local/reference/partials-macros.html +249 -19
- data/site-local/reference/project-configuration.html +239 -19
- data/site-local/sitemap.xml.gz +0 -0
- data/{docs/mkdocs/snapshot/assets → site-local/snapshot/assets/features}/project.yml +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +249 -29
- data/site-local/snapshot/examples/temp_sensor/index.html +241 -21
- data/site-local/snapshot/examples/wondrous_forest/index.html +256 -30
- data/site-local/snapshot/plugins/bullseye/config/defaults.yml +24 -0
- data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/site-local/snapshot/plugins/gcov/config/defaults.yml +5 -0
- data/site-local/testing-guide/build-directives.html +331 -35
- data/site-local/testing-guide/conventions.html +671 -160
- data/site-local/testing-guide/frameworks.html +244 -24
- data/site-local/testing-guide/index.html +239 -26
- data/site-local/testing-guide/partials/configuration.html +241 -21
- data/site-local/testing-guide/partials/conventions.html +308 -23
- data/site-local/testing-guide/partials/directives.html +452 -58
- data/site-local/testing-guide/partials/example.html +247 -27
- data/site-local/testing-guide/partials/index.html +246 -19
- data/site-local/testing-guide/partials/overview.html +239 -19
- data/site-local/testing-guide/partials/variables.html +244 -24
- data/site-local/testing-guide/test-cases.html +246 -26
- data/site-local/testing-guide/test-sample.html +245 -25
- data/site-local/testing-guide/test-suite-anatomy.html +239 -19
- data/spec/integration/actionator_file_operations_spec.rb +287 -0
- data/spec/integration/analysis_tool_output_spec.rb +204 -0
- data/spec/{units/c_extractor/c_extractor_integration_spec.rb → integration/c_extractor_composition_spec.rb} +196 -17
- data/spec/integration/command_hooks_plugin_spec.rb +152 -0
- data/spec/integration/compile_commands_json_db_spec.rb +76 -0
- data/spec/integration/configurator_pipeline_spec.rb +190 -0
- data/spec/integration/configurator_plugins_spec.rb +122 -0
- data/spec/integration/configurator_validation_spec.rb +98 -0
- data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +396 -0
- data/spec/integration/dependencies/dependency_tracker_core_spec.rb +284 -0
- data/spec/integration/dependencies/dependency_tracker_diagnose_spec.rb +224 -0
- data/spec/integration/dependencies/dependency_tracker_filename_handling_spec.rb +118 -0
- data/spec/integration/dependencies/dependency_tracker_gcc_deps_spec.rb +199 -0
- data/spec/integration/dependencies/dependency_tracker_pruning_spec.rb +167 -0
- data/spec/integration/dependencies_plugin_spec.rb +473 -0
- data/spec/integration/erb_dependency_removed_spec.rb +167 -0
- data/spec/integration/includes_extraction_spec.rb +612 -0
- data/spec/integration/mixin_loading_spec.rb +414 -0
- data/spec/integration/module_generator_spec.rb +436 -0
- data/spec/integration/partials_fallback_preprocessing_spec.rb +316 -0
- data/spec/integration/partials_header_composition_spec.rb +889 -0
- data/spec/integration/partials_module_resolution_spec.rb +372 -0
- data/spec/integration/partials_symbol_linkage_spec.rb +371 -0
- data/spec/integration/preprocessing_transient_io_retry_spec.rb +135 -0
- data/spec/integration/quote_include_isolator_spec.rb +167 -0
- data/spec/integration/rake_task_registry_plugins_spec.rb +95 -0
- data/spec/integration/report_build_warnings_log_spec.rb +170 -0
- data/spec/integration/report_tests_log_factory_spec.rb +100 -0
- data/spec/integration/sanitizer_exclusions_spec.rb +126 -0
- data/spec/integration/system_harness_sanitizers_spec.rb +104 -0
- data/spec/integration/test_build_parallel_barrier_spec.rb +89 -0
- data/spec/integration/test_executable_manifest_spec.rb +118 -0
- data/spec/integration/test_includes_extractinator_spec.rb +293 -0
- data/spec/integration/tool_executor_spec.rb +224 -0
- data/spec/integration/tool_validator_spec.rb +133 -0
- data/spec/integration/vendor_copy_transient_io_retry_spec.rb +178 -0
- data/spec/manual/stress_test.rb +1 -1
- data/spec/support/config_yaml_helper.rb +17 -0
- data/spec/support/fixtures/sanitizer_reports/clang_asan_heap.txt +45 -0
- data/spec/support/fixtures/sanitizer_reports/clang_ubsan_shift.txt +5 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_heap.txt +47 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_leak.txt +10 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_segv.txt +6 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_ubsan_shift.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__all_pass.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_branches_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_functions_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_none.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__empty.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__gcov_context.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__mixed_all.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_matching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_multiline.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_nonmatching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_with_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__stdout_only.txt +6 -0
- data/spec/support/fixtures/templates/ide__all_pass.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_branches_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_functions_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_none.txt +10 -0
- data/spec/support/fixtures/templates/ide__empty.txt +8 -0
- data/spec/support/fixtures/templates/ide__gcov_context.txt +28 -0
- data/spec/support/fixtures/templates/ide__mixed_all.txt +29 -0
- data/spec/support/fixtures/templates/ide__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/ide__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__stdout_only.txt +16 -0
- data/spec/support/fixtures/templates/pretty__all_pass.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_branches_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_functions_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_none.txt +8 -0
- data/spec/support/fixtures/templates/pretty__empty.txt +6 -0
- data/spec/support/fixtures/templates/pretty__gcov_context.txt +31 -0
- data/spec/support/fixtures/templates/pretty__mixed_all.txt +35 -0
- data/spec/support/fixtures/templates/pretty__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/pretty__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__stdout_only.txt +15 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.log +51 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.xml +182 -0
- data/spec/support/include_guard_helper.rb +20 -0
- data/spec/support/integration/configurator_integration_helper.rb +162 -0
- data/spec/support/integration/dependency_tracker_integration_helper.rb +136 -0
- data/spec/support/integration/partials_generation_integration_helper.rb +726 -0
- data/spec/support/integration/spec_integration_helper.rb +285 -0
- data/spec/support/integration/test_includes_harness.rb +259 -0
- data/spec/support/integration/tool_executor_integration_helper.rb +55 -0
- data/spec/support/spec_helper.rb +41 -0
- data/spec/support/system/sanitizers/asan_ubsan.yml +82 -0
- data/spec/support/system/sanitizers/asan_ubsan_leaks.yml +57 -0
- data/spec/support/system/simplecov_boot.rb +66 -0
- data/spec/support/system/spec_system_helper.rb +376 -16
- data/spec/support/system/system_context.rb +181 -59
- data/spec/support/template_render_cases.rb +166 -0
- data/spec/system/bracket_path_handling_spec.rb +175 -0
- data/spec/system/build_output_mirroring_spec.rb +89 -0
- data/spec/system/build_recovery_spec.rb +382 -0
- data/spec/system/bullseye_deployment_spec.rb +102 -0
- data/spec/system/cli_surface_spec.rb +245 -0
- data/spec/system/command_hooks_spec.rb +117 -0
- data/spec/system/conditional_include_macro_visibility_spec.rb +32 -124
- data/spec/system/conditional_mock_includes_spec.rb +181 -0
- data/spec/system/cppcheck_deployment_spec.rb +26 -8
- data/spec/system/delta_builds_spec.rb +751 -0
- data/spec/system/deployment_as_gem_spec.rb +7 -0
- data/spec/system/deployment_as_vendor_spec.rb +29 -145
- data/spec/system/dumpconfig_spec.rb +137 -0
- data/spec/system/encoding_stress_spec.rb +7 -4
- data/spec/system/example_cipher_quest_spec.rb +25 -100
- data/spec/system/example_temp_sensor_spec.rb +30 -172
- data/spec/system/example_wondrous_forest_spec.rb +25 -62
- data/spec/system/extension_multiple_values_spec.rb +75 -0
- data/spec/system/files_paths_reporting_spec.rb +154 -0
- data/spec/system/gcov_deployment_spec.rb +72 -3
- data/spec/system/header_include_path_validation_spec.rb +222 -0
- data/spec/system/implicit_source_header_correspondence_disambiguation_spec.rb +100 -0
- data/spec/system/include_path_reconciliation_spec.rb +64 -0
- data/spec/system/mixin_ordering_spec.rb +30 -415
- data/spec/system/mocks_partials_configuration_validation_spec.rb +126 -0
- data/spec/system/parent_directory_reference_spec.rb +114 -0
- data/spec/system/partials_module_disambiguation_spec.rb +143 -0
- data/spec/system/pinned_thread_count_spec.rb +102 -0
- data/spec/system/plugin_delta_builds_spec.rb +179 -0
- data/spec/system/preprocessing_encoding_spec.rb +87 -4
- data/spec/system/preprocessing_fallback_conditionals_spec.rb +19 -25
- data/spec/system/preprocessing_parameterized_tests_spec.rb +2 -2
- data/spec/system/rake_release_task_path_disambiguation_spec.rb +97 -0
- data/spec/system/rake_test_task_path_disambiguation_spec.rb +118 -0
- data/spec/system/report_and_tooling_plugins_spec.rb +327 -0
- data/spec/system/ruby_replacement_spec.rb +1 -1
- data/spec/system/same_named_modules_spec.rb +115 -0
- data/spec/system/sanitize_deployment_spec.rb +64 -0
- data/spec/system/shuffle_tests_spec.rb +139 -0
- data/spec/system/sibling_header_collision_spec.rb +620 -0
- data/spec/system/subdir_include_preservation_spec.rb +63 -0
- data/spec/system/support/bullseye_common_test_cases.rb +369 -0
- data/spec/system/support/bullseye_helpers.rb +70 -0
- data/spec/system/support/common_test_cases.rb +167 -43
- data/spec/system/support/cppcheck_common_test_cases.rb +80 -0
- data/spec/system/support/cppcheck_helpers.rb +10 -8
- data/spec/system/support/gcov_common_test_cases.rb +173 -37
- data/spec/system/support/gcov_helpers.rb +3 -3
- data/spec/system/support/gcov_partials_test_cases.rb +48 -2
- data/spec/system/support/sanitize_common_test_cases.rb +222 -0
- data/spec/system/support/sanitize_helpers.rb +27 -0
- data/spec/system/support/valgrind_common_test_cases.rb +116 -16
- data/spec/system/support/valgrind_helpers.rb +3 -4
- data/spec/system/test_pipeline_stop_points_spec.rb +160 -0
- data/spec/system/test_runner_system_include_spec.rb +19 -41
- data/spec/system/test_source_file_directive_spec.rb +235 -0
- data/spec/system/upgrade_as_vendor_spec.rb +25 -46
- data/spec/system/valgrind_deployment_spec.rb +41 -0
- data/spec/units/batchinator_spec.rb +314 -0
- data/spec/units/bin/actionator_spec.rb +412 -0
- data/spec/units/bin/app_cfg_spec.rb +100 -0
- data/spec/units/bin/cli_handler_spec.rb +205 -0
- data/spec/units/bin/cli_helper_spec.rb +248 -10
- data/spec/units/bin/cli_options_transform_spec.rb +49 -0
- data/spec/units/bin/composinator_spec.rb +236 -0
- data/spec/units/bin/{projectinator_mixin_spec.rb → mixin_resolvinator_spec.rb} +122 -83
- data/spec/units/bin/mixin_standardizer_spec.rb +4 -3
- data/spec/units/bin/mixinator_spec.rb +58 -22
- data/spec/units/bin/path_validator_spec.rb +112 -0
- data/spec/units/bin/projectinator_spec.rb +223 -0
- data/spec/units/bin/rake_patches_spec.rb +52 -0
- data/spec/units/bin/recursive_merger_spec.rb +22 -0
- data/spec/units/bin/versionator_spec.rb +104 -0
- data/spec/units/c_extractor/c_extractor_code_text_spec.rb +4 -4
- data/spec/units/c_extractor/c_extractor_declarations_spec.rb +70 -0
- data/spec/units/c_extractor/c_extractor_functions_spec.rb +75 -1
- data/spec/units/c_extractor/c_extractor_preprocessing_spec.rb +158 -0
- data/spec/units/c_extractor/c_extractor_spec.rb +236 -6
- data/spec/units/ceedling/templateinator_golden_spec.rb +84 -0
- data/spec/units/ceedling/templateinator_spec.rb +188 -0
- data/spec/units/config/configurator_builder_spec.rb +444 -0
- data/spec/units/config/configurator_plugins_spec.rb +160 -0
- data/spec/units/config/configurator_setup_spec.rb +724 -6
- data/spec/units/config/configurator_spec.rb +961 -0
- data/spec/units/config/configurator_validator_spec.rb +259 -0
- data/spec/units/config/line_marker_suppressors_spec.rb +89 -0
- data/spec/units/config_matchinator_spec.rb +103 -0
- data/spec/units/defineinator_spec.rb +158 -0
- data/spec/units/dependencies/dependency_cache_store_spec.rb +364 -0
- data/spec/units/dependencies/dependency_debug_tree_spec.rb +189 -0
- data/spec/units/dependencies/dependency_differ_spec.rb +139 -0
- data/spec/units/dependencies/dependency_hasher_spec.rb +141 -0
- data/spec/units/dependencies/dependency_path_normalizer_spec.rb +111 -0
- data/spec/units/dependencies/dependency_tracker_spec.rb +905 -0
- data/spec/units/dependencies/dependinator_spec.rb +99 -0
- data/spec/units/dependencies/gcc_dependency_parser_spec.rb +152 -0
- data/spec/units/encodinator_spec.rb +92 -0
- data/spec/units/file_finder_helper_spec.rb +99 -15
- data/spec/units/file_finder_spec.rb +495 -0
- data/spec/units/file_path_collection_utils_spec.rb +9 -0
- data/spec/units/file_path_utils_spec.rb +736 -0
- data/spec/units/file_wrapper_spec.rb +486 -0
- data/spec/units/filename_extension_spec.rb +120 -0
- data/spec/units/flaginator_spec.rb +114 -0
- data/spec/units/generators/generator_helper_spec.rb +113 -0
- data/spec/units/generators/generator_mocks_spec.rb +131 -0
- data/spec/units/generators/generator_partials_spec.rb +336 -160
- data/spec/units/generators/generator_spec.rb +317 -0
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +169 -9
- data/spec/units/generators/generator_test_results_sanity_checker_spec.rb +14 -6
- data/spec/units/generators/generator_test_results_spec.rb +65 -8
- data/spec/units/generators/generator_test_runner_spec.rb +1 -1
- data/spec/units/includes/include_factory_spec.rb +53 -0
- data/spec/units/includes/include_pathinator_spec.rb +269 -0
- data/spec/units/includes/include_spec.rb +8 -4
- data/spec/units/includes/includes_spec.rb +326 -18
- data/spec/units/mock_locator_spec.rb +74 -0
- data/spec/units/parsing_parcels_spec.rb +65 -0
- data/spec/units/partials/partializer_config_spec.rb +284 -18
- data/spec/units/partials/partializer_helper_spec.rb +122 -0
- data/spec/units/partials/partializer_spec.rb +346 -71
- data/spec/units/partials/partializer_utils_spec.rb +4 -4
- data/spec/units/partials_manager_spec.rb +539 -0
- data/spec/units/path_matcher_spec.rb +193 -0
- data/spec/units/path_mirror_spec.rb +103 -0
- data/spec/units/plugin_manager_spec.rb +77 -0
- data/spec/units/plugin_reportinator_spec.rb +78 -3
- data/spec/units/plugins/bullseye_spec.rb +1068 -0
- data/spec/units/plugins/command_hooks_spec.rb +157 -0
- data/spec/units/plugins/compile_commands_json_db_spec.rb +145 -0
- data/spec/units/plugins/console_reportinator_spec.rb +370 -0
- data/spec/units/plugins/cppcheck_spec.rb +330 -4
- data/spec/units/plugins/cppunit_tests_reporter_spec.rb +118 -0
- data/spec/units/plugins/dependencies_spec.rb +295 -0
- data/spec/units/plugins/dependency_commands_spec.rb +83 -0
- data/spec/units/plugins/dependency_environment_spec.rb +64 -0
- data/spec/units/plugins/dependency_spec_spec.rb +170 -0
- data/spec/units/plugins/gcov_reportinator_spec.rb +272 -0
- data/spec/units/plugins/gcov_spec.rb +521 -0
- data/spec/units/plugins/gcovr_reportinator_spec.rb +795 -0
- data/spec/units/plugins/gtestlike_report_spec.rb +363 -0
- data/spec/units/plugins/html_tests_reporter_spec.rb +158 -0
- data/spec/units/plugins/ide_report_lines_spec.rb +229 -0
- data/spec/units/plugins/json_tests_reporter_spec.rb +87 -0
- data/spec/units/plugins/junit_tests_reporter_spec.rb +237 -0
- data/spec/units/plugins/module_generator_options_spec.rb +185 -0
- data/spec/units/plugins/module_generator_project_spec.rb +55 -0
- data/spec/units/plugins/module_generator_request_spec.rb +107 -0
- data/spec/units/plugins/module_generator_spec.rb +214 -0
- data/spec/units/plugins/module_generator_test_file_spec.rb +102 -0
- data/spec/units/plugins/module_generator_unity_spec.rb +37 -0
- data/spec/units/plugins/report_build_warnings_log_spec.rb +199 -0
- data/spec/units/plugins/report_log_writer_plugin_spec.rb +94 -0
- data/spec/units/plugins/report_tests_gtestlike_stdout_spec.rb +274 -0
- data/spec/units/plugins/report_tests_ide_stdout_spec.rb +140 -0
- data/spec/units/plugins/report_tests_log_factory_spec.rb +210 -0
- data/spec/units/plugins/report_tests_pretty_stdout_spec.rb +83 -0
- data/spec/units/plugins/report_tests_raw_output_log_spec.rb +98 -0
- data/spec/units/plugins/report_tests_stdout_plugin_spec.rb +145 -0
- data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +121 -0
- data/spec/units/plugins/reportgenerator_reportinator_spec.rb +410 -0
- data/spec/units/plugins/sanitize_config_spec.rb +119 -0
- data/spec/units/plugins/sanitize_findings_spec.rb +69 -0
- data/spec/units/plugins/sanitize_records_spec.rb +114 -0
- data/spec/units/plugins/sanitize_reports_spec.rb +84 -0
- data/spec/units/plugins/sanitize_spec.rb +300 -0
- data/spec/units/plugins/tests_reporter_spec.rb +89 -0
- data/spec/units/plugins/valgrind_spec.rb +560 -0
- data/spec/units/plugins/warning_collector_spec.rb +185 -0
- data/spec/units/plugins/warning_reports_spec.rb +150 -0
- data/spec/units/preprocess/c_comment_scanner_spec.rb +17 -17
- data/spec/units/preprocess/c_preprocessor_conditionals_spec.rb +94 -0
- data/spec/units/preprocess/preprocessinator_bare_includes_extractor_spec.rb +73 -0
- data/spec/units/preprocess/preprocessinator_code_finder_spec.rb +35 -16
- data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +129 -48
- data/spec/units/preprocess/preprocessinator_file_assembler_spec.rb +292 -9
- data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +294 -16
- data/spec/units/preprocess/preprocessinator_line_marker_includes_extractor_spec.rb +356 -6
- data/spec/units/preprocess/preprocessinator_reconstructor_spec.rb +58 -4
- data/spec/units/preprocess/preprocessinator_spec.rb +693 -5
- data/spec/units/quote_include_isolator_spec.rb +176 -0
- data/spec/units/rake_app/rake_invocation_tracker_spec.rb +94 -0
- data/spec/units/rake_app/rake_task_registry_spec.rb +263 -0
- data/spec/units/rake_app/rake_utils_spec.rb +54 -0
- data/spec/units/rake_app/rake_wrapper_spec.rb +64 -0
- data/spec/units/rake_app/rakefile_component_resolver_spec.rb +182 -0
- data/spec/units/rake_app/test_task_name_spec.rb +47 -0
- data/spec/units/release_build_executor_spec.rb +404 -0
- data/spec/units/release_build_planner_spec.rb +144 -0
- data/spec/units/release_invoker_spec.rb +127 -0
- data/spec/units/reportinator_spec.rb +35 -0
- data/spec/units/ruby_expandinator_spec.rb +36 -0
- data/spec/units/standin_headerinator_spec.rb +168 -0
- data/spec/units/system_wrapper_spec.rb +16 -0
- data/spec/units/test_build_executor_spec.rb +1693 -8
- data/spec/units/test_build_planner_spec.rb +878 -0
- data/spec/units/test_build_setup_spec.rb +583 -0
- data/spec/units/test_context_extractor_spec.rb +51 -3
- data/spec/units/test_file_preprocessinator_spec.rb +206 -0
- data/spec/units/test_includes_extractinator_spec.rb +764 -0
- data/spec/units/test_invoker/objects_wiring_spec.rb +31 -0
- data/spec/units/test_invoker_spec.rb +147 -0
- data/spec/units/test_invoker_types_spec.rb +182 -0
- data/spec/units/test_pipeline_helpers_spec.rb +100 -0
- data/spec/units/test_pipeline_manager_spec.rb +415 -0
- data/spec/units/test_runner_generatinator_spec.rb +215 -0
- data/spec/units/test_runner_manager_spec.rb +70 -0
- data/spec/units/test_search_paths_spec.rb +84 -0
- data/spec/units/test_source_file_directive_resolver_spec.rb +239 -0
- data/spec/units/tool_executor_helper_spec.rb +1 -1
- data/spec/units/tool_executor_spec.rb +571 -2
- data/spec/units/tool_validator_spec.rb +303 -24
- data/spec/units/version_spec.rb +74 -0
- data/spec/units/yaml_wrapper_spec.rb +4 -1
- data/vendor/cmock/docs/CMock_Summary.md +11 -0
- data/vendor/cmock/lib/cmock_config.rb +1 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +31 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +8 -2
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +2 -2
- data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +7 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +4 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
- data/vendor/cmock/vendor/unity/test/Makefile +9 -2
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/cmock/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/cmock/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +78 -0
- data/vendor/cmock/vendor/unity/test/tests/test_unity_test_summary.rb +58 -0
- data/vendor/diy/lib/diy/factory.rb +5 -4
- data/vendor/diy/lib/diy.rb +5 -4
- data/vendor/diy/sample_code/car.rb +5 -4
- data/vendor/diy/sample_code/chassis.rb +5 -4
- data/vendor/diy/sample_code/diy_example.rb +5 -4
- data/vendor/diy/sample_code/engine.rb +5 -4
- data/vendor/diy/sample_code/objects.yml +5 -4
- data/vendor/diy/test/constructor.rb +5 -4
- data/vendor/diy/test/diy_test.rb +5 -4
- data/vendor/diy/test/factory_test.rb +5 -4
- data/vendor/diy/test/files/broken_construction.yml +5 -4
- data/vendor/diy/test/files/cat/cat.rb +5 -4
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -4
- data/vendor/diy/test/files/cat/heritage.rb +5 -4
- data/vendor/diy/test/files/cat/needs_input.yml +5 -4
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +5 -4
- data/vendor/diy/test/files/dog/dog_model.rb +5 -4
- data/vendor/diy/test/files/dog/dog_presenter.rb +5 -4
- data/vendor/diy/test/files/dog/dog_view.rb +5 -4
- data/vendor/diy/test/files/dog/file_resolver.rb +5 -4
- data/vendor/diy/test/files/dog/other_thing.rb +5 -4
- data/vendor/diy/test/files/dog/simple.yml +5 -4
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +5 -4
- data/vendor/diy/test/files/donkey/foo.rb +5 -4
- data/vendor/diy/test/files/factory/beef.rb +5 -4
- data/vendor/diy/test/files/factory/dog.rb +5 -4
- data/vendor/diy/test/files/factory/factory.yml +5 -4
- data/vendor/diy/test/files/factory/farm/llama.rb +5 -4
- data/vendor/diy/test/files/factory/farm/pork.rb +5 -4
- data/vendor/diy/test/files/factory/kitten.rb +5 -4
- data/vendor/diy/test/files/fud/objects.yml +5 -4
- data/vendor/diy/test/files/fud/toy.rb +5 -4
- data/vendor/diy/test/files/functions/attached_things_builder.rb +5 -4
- data/vendor/diy/test/files/functions/invalid_method.yml +5 -4
- data/vendor/diy/test/files/functions/method_extractor.rb +5 -4
- data/vendor/diy/test/files/functions/nonsingleton_objects.yml +5 -4
- data/vendor/diy/test/files/functions/objects.yml +5 -4
- data/vendor/diy/test/files/functions/thing.rb +5 -4
- data/vendor/diy/test/files/functions/thing_builder.rb +5 -4
- data/vendor/diy/test/files/functions/things_builder.rb +5 -4
- data/vendor/diy/test/files/gnu/objects.yml +5 -4
- data/vendor/diy/test/files/gnu/thinger.rb +5 -4
- data/vendor/diy/test/files/goat/base.rb +5 -4
- data/vendor/diy/test/files/goat/can.rb +5 -4
- data/vendor/diy/test/files/goat/goat.rb +5 -4
- data/vendor/diy/test/files/goat/objects.yml +5 -4
- data/vendor/diy/test/files/goat/paper.rb +5 -4
- data/vendor/diy/test/files/goat/plane.rb +5 -4
- data/vendor/diy/test/files/goat/shirt.rb +5 -4
- data/vendor/diy/test/files/goat/wings.rb +5 -4
- data/vendor/diy/test/files/horse/holder_thing.rb +5 -4
- data/vendor/diy/test/files/horse/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/animal/bird.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/cat.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +5 -4
- data/vendor/diy/test/files/namespace/bad_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/class_name_combine.yml +5 -4
- data/vendor/diy/test/files/namespace/no_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/road.rb +5 -4
- data/vendor/diy/test/files/namespace/sky.rb +5 -4
- data/vendor/diy/test/files/namespace/subcontext.yml +5 -4
- data/vendor/diy/test/files/non_singleton/air.rb +5 -4
- data/vendor/diy/test/files/non_singleton/fat_cat.rb +5 -4
- data/vendor/diy/test/files/non_singleton/objects.yml +5 -4
- data/vendor/diy/test/files/non_singleton/pig.rb +5 -4
- data/vendor/diy/test/files/non_singleton/thread_spinner.rb +5 -4
- data/vendor/diy/test/files/non_singleton/tick.rb +5 -4
- data/vendor/diy/test/files/non_singleton/yard.rb +5 -4
- data/vendor/diy/test/files/yak/core_model.rb +5 -4
- data/vendor/diy/test/files/yak/core_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/core_view.rb +5 -4
- data/vendor/diy/test/files/yak/data_source.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_model.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_view.rb +5 -4
- data/vendor/diy/test/files/yak/giant_squid.rb +5 -4
- data/vendor/diy/test/files/yak/krill.rb +5 -4
- data/vendor/diy/test/files/yak/my_objects.yml +5 -4
- data/vendor/diy/test/files/yak/sub_sub_context_test.yml +5 -4
- data/vendor/diy/test/test_helper.rb +5 -4
- data/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/unity/auto/generate_test_runner.rb +5 -1
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/unity/test/tests/test_generate_test_runner.rb +29 -0
- metadata +783 -295
- data/assets/tests_with_fallback_conditionals/src/conditional_module.c +0 -18
- data/bin/actions_wrapper.rb +0 -51
- data/docs/mkdocs/assets/images/ceedling-logo-circle.png +0 -0
- data/docs/mkdocs/assets/images/ceedling.svg +0 -90
- data/docs/mkdocs/assets/images/favicon.png +0 -0
- data/docs/mkdocs/assets/stylesheets/admonitions.css +0 -152
- data/docs/mkdocs/assets/stylesheets/fixes-local.css +0 -15
- data/docs/mkdocs/assets/stylesheets/styling.css +0 -102
- data/docs/mkdocs/configuration/environment-vars.md +0 -14
- data/docs/mkdocs/configuration/global-collections.md +0 -156
- data/docs/mkdocs/configuration/index.md +0 -75
- data/docs/mkdocs/configuration/loading.md +0 -89
- data/docs/mkdocs/configuration/mixins.md +0 -607
- data/docs/mkdocs/configuration/parallel-builds.md +0 -97
- data/docs/mkdocs/configuration/project-file.md +0 -216
- data/docs/mkdocs/configuration/reference/cexception.md +0 -35
- data/docs/mkdocs/configuration/reference/cmock.md +0 -106
- data/docs/mkdocs/configuration/reference/defines.md +0 -352
- data/docs/mkdocs/configuration/reference/environment.md +0 -55
- data/docs/mkdocs/configuration/reference/extension.md +0 -63
- data/docs/mkdocs/configuration/reference/files.md +0 -154
- data/docs/mkdocs/configuration/reference/flags.md +0 -296
- data/docs/mkdocs/configuration/reference/index.md +0 -176
- data/docs/mkdocs/configuration/reference/libraries.md +0 -82
- data/docs/mkdocs/configuration/reference/mixins.md +0 -24
- data/docs/mkdocs/configuration/reference/partials.md +0 -38
- data/docs/mkdocs/configuration/reference/paths.md +0 -276
- data/docs/mkdocs/configuration/reference/plugins.md +0 -60
- data/docs/mkdocs/configuration/reference/project.md +0 -333
- data/docs/mkdocs/configuration/reference/release-build.md +0 -62
- data/docs/mkdocs/configuration/reference/test-build.md +0 -55
- data/docs/mkdocs/configuration/reference/test-runner.md +0 -61
- data/docs/mkdocs/configuration/reference/tools.md +0 -457
- data/docs/mkdocs/configuration/reference/unity.md +0 -49
- data/docs/mkdocs/configuration/which-ceedling.md +0 -77
- data/docs/mkdocs/development/index.md +0 -61
- data/docs/mkdocs/development/plugins/configuration.md +0 -164
- data/docs/mkdocs/development/plugins/index.md +0 -84
- data/docs/mkdocs/development/plugins/plugin-subclass.md +0 -513
- data/docs/mkdocs/development/plugins/rake-tasks.md +0 -54
- data/docs/mkdocs/development/workflow.md +0 -284
- data/docs/mkdocs/getting-started/command-line.md +0 -477
- data/docs/mkdocs/getting-started/example-projects/cipher-quest.md +0 -65
- data/docs/mkdocs/getting-started/example-projects/index.md +0 -49
- data/docs/mkdocs/getting-started/example-projects/temp-sensor.md +0 -60
- data/docs/mkdocs/getting-started/example-projects/wondrous-forest.md +0 -45
- data/docs/mkdocs/getting-started/index.md +0 -41
- data/docs/mkdocs/getting-started/installation.md +0 -179
- data/docs/mkdocs/getting-started/quick-start.md +0 -86
- data/docs/mkdocs/help.md +0 -49
- data/docs/mkdocs/index.md +0 -222
- data/docs/mkdocs/overview/build-system.md +0 -115
- data/docs/mkdocs/overview/index.md +0 -29
- data/docs/mkdocs/overview/test-environments.md +0 -33
- data/docs/mkdocs/overview/tools-and-frameworks.md +0 -115
- data/docs/mkdocs/plugins/beep.md +0 -134
- data/docs/mkdocs/plugins/bullseye.md +0 -83
- data/docs/mkdocs/plugins/command-hooks.md +0 -268
- data/docs/mkdocs/plugins/compile-commands-json-db.md +0 -42
- data/docs/mkdocs/plugins/cppcheck.md +0 -377
- data/docs/mkdocs/plugins/dependencies.md +0 -310
- data/docs/mkdocs/plugins/fff.md +0 -247
- data/docs/mkdocs/plugins/gcov/examples.md +0 -92
- data/docs/mkdocs/plugins/gcov/gcovr.md +0 -526
- data/docs/mkdocs/plugins/gcov/index.md +0 -74
- data/docs/mkdocs/plugins/gcov/overview.md +0 -145
- data/docs/mkdocs/plugins/gcov/reportgenerator.md +0 -246
- data/docs/mkdocs/plugins/gcov/reporting.md +0 -147
- data/docs/mkdocs/plugins/gcov/setup.md +0 -232
- data/docs/mkdocs/plugins/gcov/tool-versions.md +0 -60
- data/docs/mkdocs/plugins/gcov/troubleshooting.md +0 -78
- data/docs/mkdocs/plugins/index.md +0 -261
- data/docs/mkdocs/plugins/module-generator.md +0 -267
- data/docs/mkdocs/plugins/report-build-warnings-log.md +0 -42
- data/docs/mkdocs/plugins/report-tests-gtestlike-stdout.md +0 -98
- data/docs/mkdocs/plugins/report-tests-ide-stdout.md +0 -63
- data/docs/mkdocs/plugins/report-tests-log-factory.md +0 -454
- data/docs/mkdocs/plugins/report-tests-pretty-stdout.md +0 -56
- data/docs/mkdocs/plugins/report-tests-raw-output-log.md +0 -52
- data/docs/mkdocs/plugins/report-tests-teamcity-stdout.md +0 -96
- data/docs/mkdocs/plugins/sample_html_report.png +0 -0
- data/docs/mkdocs/plugins/valgrind.md +0 -198
- data/docs/mkdocs/project/release-history.md +0 -61
- data/docs/mkdocs/project/upgrade.md +0 -85
- data/docs/mkdocs/reference/build-directives.md +0 -37
- data/docs/mkdocs/reference/command-line.md +0 -323
- data/docs/mkdocs/reference/environment-vars.md +0 -60
- data/docs/mkdocs/reference/gcov-plugin.md +0 -600
- data/docs/mkdocs/reference/global-collections.md +0 -160
- data/docs/mkdocs/reference/index.md +0 -65
- data/docs/mkdocs/reference/partials-macros.md +0 -79
- data/docs/mkdocs/reference/project-configuration.md +0 -46
- data/docs/mkdocs/snapshot/examples/cipher_quest/README.md +0 -210
- data/docs/mkdocs/snapshot/examples/temp_sensor/README.md +0 -283
- data/docs/mkdocs/snapshot/examples/wondrous_forest/README.md +0 -92
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -32
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults_gcov.rb +0 -136
- data/docs/mkdocs/snapshot.yml +0 -20
- data/docs/mkdocs/testing-guide/build-directives.md +0 -153
- data/docs/mkdocs/testing-guide/conventions.md +0 -616
- data/docs/mkdocs/testing-guide/frameworks.md +0 -192
- data/docs/mkdocs/testing-guide/index.md +0 -80
- data/docs/mkdocs/testing-guide/partials/configuration.md +0 -67
- data/docs/mkdocs/testing-guide/partials/conventions.md +0 -68
- data/docs/mkdocs/testing-guide/partials/directives.md +0 -212
- data/docs/mkdocs/testing-guide/partials/example.md +0 -149
- data/docs/mkdocs/testing-guide/partials/index.md +0 -88
- data/docs/mkdocs/testing-guide/partials/overview.md +0 -81
- data/docs/mkdocs/testing-guide/partials/variables.md +0 -244
- data/docs/mkdocs/testing-guide/test-cases.md +0 -194
- data/docs/mkdocs/testing-guide/test-sample.md +0 -94
- data/docs/mkdocs/testing-guide/test-suite-anatomy.md +0 -58
- data/lib/ceedling/cacheinator.rb +0 -53
- data/lib/ceedling/cacheinator_helper.rb +0 -60
- data/lib/ceedling/dependinator.rb +0 -31
- data/lib/ceedling/makefile.rb +0 -52
- data/lib/ceedling/release_invoker.rb +0 -112
- data/lib/ceedling/rules_release.rake +0 -109
- data/lib/ceedling/tasks_release.rake +0 -36
- data/plugins/fff/vendor/fff/Makefile +0 -10
- data/plugins/fff/vendor/fff/buildandtest +0 -15
- data/plugins/fff/vendor/fff/examples/Makefile +0 -7
- data/plugins/fff/vendor/fff/examples/driver_testing/Makefile +0 -64
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.c +0 -32
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.h +0 -21
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp +0 -58
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp +0 -70
- data/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h +0 -25
- data/plugins/fff/vendor/fff/examples/driver_testing/registers.h +0 -23
- data/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h +0 -27
- data/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt +0 -25
- data/plugins/fff/vendor/fff/examples/embedded_ui/Makefile +0 -67
- data/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h +0 -31
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.c +0 -56
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.h +0 -22
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c +0 -191
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp +0 -144
- data/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c +0 -42
- data/plugins/fff/vendor/fff/gtest/Makefile +0 -22
- data/plugins/fff/vendor/fff/gtest/gtest-all.cc +0 -9118
- data/plugins/fff/vendor/fff/gtest/gtest-main.cc +0 -6
- data/plugins/fff/vendor/fff/gtest/gtest.h +0 -19547
- data/plugins/fff/vendor/fff/test/Makefile +0 -81
- data/plugins/fff/vendor/fff/test/c_test_framework.h +0 -25
- data/plugins/fff/vendor/fff/test/fff_test_c.c +0 -116
- data/plugins/fff/vendor/fff/test/fff_test_cpp.cpp +0 -53
- data/plugins/fff/vendor/fff/test/fff_test_global_c.c +0 -84
- data/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp +0 -31
- data/plugins/fff/vendor/fff/test/global_fakes.c +0 -21
- data/plugins/fff/vendor/fff/test/global_fakes.h +0 -47
- data/plugins/fff/vendor/fff/test/test_cases.include +0 -276
- data/plugins/report_tests_gtestlike_stdout/assets/template.erb +0 -83
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css +0 -1
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css.map +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
- data/site-local/snapshot/assets/project.yml +0 -404
- data/spec/system/partials_types_header_spec.rb +0 -166
- data/spec/units/configurator_spec.rb +0 -232
- /data/assets/{ceedling → features/ceedling} +0 -0
- /data/assets/{ceedling.cmd → features/ceedling.cmd} +0 -0
- /data/assets/{default_gitignore → features/default_gitignore} +0 -0
- /data/assets/{broken_uncovered_file.c → fixtures/broken_uncovered_file.c} +0 -0
- /data/assets/{example_file.c → fixtures/example_file.c} +0 -0
- /data/assets/{example_file.h → fixtures/example_file.h} +0 -0
- /data/assets/{example_file_call.c → fixtures/example_file_call.c} +0 -0
- /data/assets/{example_file_call.h → fixtures/example_file_call.h} +0 -0
- /data/assets/{example_file_with_statics.c → fixtures/example_file_with_statics.c} +0 -0
- /data/assets/{example_file_with_stdio.c → fixtures/example_file_with_stdio.c} +0 -0
- /data/assets/{example_file_with_stdio.h → fixtures/example_file_with_stdio.h} +0 -0
- /data/assets/{fake_crash_test_fixture.rb → fixtures/fake_crash_test_fixture.rb} +0 -0
- /data/assets/{partial_all_module.h → fixtures/partial_all_module.h} +0 -0
- /data/assets/{run_with_ubsan.rb → fixtures/run_with_ubsan.rb} +0 -0
- /data/assets/{same_dir_pairing_module.c → fixtures/same_dir_pairing_module.c} +0 -0
- /data/assets/{same_dir_pairing_module.h → fixtures/same_dir_pairing_module.h} +0 -0
- /data/assets/{same_dir_pairing_module_func.h → fixtures/same_dir_pairing_module_func.h} +0 -0
- /data/assets/{same_dir_pairing_other.c → fixtures/same_dir_pairing_other.c} +0 -0
- /data/assets/{same_dir_pairing_other.h → fixtures/same_dir_pairing_other.h} +0 -0
- /data/assets/{test_example_file.c → fixtures/test_example_file.c} +0 -0
- /data/assets/{test_example_file_2.c → fixtures/test_example_file_2.c} +0 -0
- /data/assets/{test_example_file_source_include.c → fixtures/test_example_file_source_include.c} +0 -0
- /data/assets/{test_example_file_success.c → fixtures/test_example_file_success.c} +0 -0
- /data/assets/{test_example_file_unity_printf.c → fixtures/test_example_file_unity_printf.c} +0 -0
- /data/assets/{test_example_file_verbose.c → fixtures/test_example_file_verbose.c} +0 -0
- /data/assets/{test_example_file_with_mock.c → fixtures/test_example_file_with_mock.c} +0 -0
- /data/assets/{test_example_file_with_stdio.c → fixtures/test_example_file_with_stdio.c} +0 -0
- /data/assets/{test_example_with_parameterized_tests.c → fixtures/test_example_with_parameterized_tests.c} +0 -0
- /data/assets/{test_partial_all_module.c → fixtures/test_partial_all_module.c} +0 -0
- /data/assets/{test_same_dir_pairing.c → fixtures/test_same_dir_pairing.c} +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_config.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/local_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_wrapper.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/project_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware_special.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.h +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder_partial.c +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/conditional_module.h +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/optional_dep.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_decorators.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareC.c +0 -0
- /data/assets/{uncovered_example_file.c → fixtures/uncovered_example_file.c} +0 -0
- /data/plugins/bullseye/assets/{template.erb → coverage.template} +0 -0
|
@@ -0,0 +1,726 @@
|
|
|
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
|
+
# Drives Partial generation directly and compiles the result, skipping the test build.
|
|
9
|
+
#
|
|
10
|
+
# A full `ceedling test:` run costs seconds per case and buries the generated files under
|
|
11
|
+
# mock generation, runner generation, linking, and execution. None of that bears on how a
|
|
12
|
+
# Partial's content is composed. This harness runs the real components that do, then hands
|
|
13
|
+
# the output to a real compiler.
|
|
14
|
+
#
|
|
15
|
+
# Preprocessing is part of what it runs, and that matters more than it looks. Partials never
|
|
16
|
+
# sees a module's original text. `Partializer#extract_module_contents` calls
|
|
17
|
+
# `CExtractor#from_file` against what `Preprocessinator#preprocess_partial_*_preserve_macros`
|
|
18
|
+
# reconstituted, so conditionals are already resolved, comments are gone, every line
|
|
19
|
+
# belonging to an included header has been discarded, and the file has been rebuilt from the
|
|
20
|
+
# survivors plus a reconciled include list. A harness fed original source would report
|
|
21
|
+
# defects that preprocessing already prevents.
|
|
22
|
+
#
|
|
23
|
+
# `mode:` selects which preprocessing path runs, and it is always a caller's choice rather
|
|
24
|
+
# than something inferred from the toolchain. Fallback is a real production path -- it is
|
|
25
|
+
# what runs wherever `-fdirectives-only` is unavailable -- and it resolves strictly less than
|
|
26
|
+
# the accurate path does, so it needs coverage everywhere rather than only where a weak
|
|
27
|
+
# toolchain happens to force it.
|
|
28
|
+
#
|
|
29
|
+
# Real objects throughout, with doubles only where a collaborator is consulted for
|
|
30
|
+
# configuration rather than behavior. The extractor construction mirrors
|
|
31
|
+
# c_extractor_composition_spec.rb, which already proves that wiring.
|
|
32
|
+
#
|
|
33
|
+
# Includes are supplied by the caller. They stand in for the reconciled list the preprocessor
|
|
34
|
+
# stage produces, which in production reaches the generators as
|
|
35
|
+
# `config.source.includes + config.header.includes`. Stating them per case is also what makes
|
|
36
|
+
# include ordering testable.
|
|
37
|
+
|
|
38
|
+
require 'fileutils'
|
|
39
|
+
require 'tmpdir'
|
|
40
|
+
require 'open3'
|
|
41
|
+
|
|
42
|
+
require 'ceedling/c_extractor/c_extractor'
|
|
43
|
+
require 'ceedling/c_extractor/c_extractor_code_text'
|
|
44
|
+
require 'ceedling/c_extractor/c_extractor_functions'
|
|
45
|
+
require 'ceedling/c_extractor/c_extractor_declarations'
|
|
46
|
+
require 'ceedling/c_extractor/c_extractor_preprocessing'
|
|
47
|
+
require 'ceedling/c_extractor/c_extractor_definitions'
|
|
48
|
+
require 'ceedling/generators/generator_partials'
|
|
49
|
+
require 'ceedling/partials/partializer'
|
|
50
|
+
require 'ceedling/partials/partializer_helper'
|
|
51
|
+
require 'ceedling/partials/partializer_utils'
|
|
52
|
+
require 'ceedling/partials/partializer_config'
|
|
53
|
+
require 'ceedling/partials/partials'
|
|
54
|
+
require 'ceedling/preprocess/preprocessinator_reconstructor'
|
|
55
|
+
require 'ceedling/preprocess/preprocessinator_comment_stripper'
|
|
56
|
+
require 'ceedling/preprocess/c_comment_scanner'
|
|
57
|
+
require 'ceedling/preprocess/preprocessinator_file_assembler'
|
|
58
|
+
require 'ceedling/parsing_parcels'
|
|
59
|
+
require 'ceedling/file_path_utils'
|
|
60
|
+
require 'ceedling/file_wrapper'
|
|
61
|
+
require 'ceedling/includes/includes'
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# Structs and errors the harness hands back, namespaced so they do not collide with the
|
|
65
|
+
# production types they stand next to.
|
|
66
|
+
module PartialsGeneration
|
|
67
|
+
|
|
68
|
+
# What a case gets back. `types_h` is nil when the module defines no types, matching
|
|
69
|
+
# GeneratorPartials#generate_types returning nil for that case. `pp_header` and `pp_source`
|
|
70
|
+
# are the reconstituted files the extractor actually parsed, which is where to look when a
|
|
71
|
+
# generated file is missing something the original module had.
|
|
72
|
+
Result = Struct.new(
|
|
73
|
+
:dir, :module_name, :mode,
|
|
74
|
+
:types_h, :impl_h, :impl_c, :interface_h,
|
|
75
|
+
:pp_header, :pp_source,
|
|
76
|
+
keyword_init: true
|
|
77
|
+
) do
|
|
78
|
+
# Generated file contents by role, so the accessors below read one way for any of them.
|
|
79
|
+
# A case naming a file Partials did not generate gets nil rather than a confusing empty
|
|
80
|
+
# result -- that distinction is itself worth asserting.
|
|
81
|
+
def content(file)
|
|
82
|
+
case file
|
|
83
|
+
when :types_h then types_h
|
|
84
|
+
when :impl_h then impl_h
|
|
85
|
+
when :impl_c then impl_c
|
|
86
|
+
when :interface_h then interface_h
|
|
87
|
+
else raise ArgumentError, "unknown generated file '#{file}'"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Include directives in emitted order, as a plain Array of String. Absence assertions
|
|
92
|
+
# need the same shape presence assertions use, so every accessor here returns a flat
|
|
93
|
+
# Array a case can match with `include` / `not_to include`.
|
|
94
|
+
def includes(file)
|
|
95
|
+
content( file ).to_s.lines.grep(/^\s*#include/).map( &:strip )
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Macro names defined in a generated file, without their values. A case asserting a
|
|
99
|
+
# guard-spoof cares that the name is defined, not what it expands to.
|
|
100
|
+
def defines(file)
|
|
101
|
+
content( file ).to_s.lines.filter_map do |line|
|
|
102
|
+
match = line.match(/^\s*#\s*define\s+([A-Za-z_]\w*)/)
|
|
103
|
+
match && match[1]
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Names a generated file establishes as types -- typedef names and aggregate tags.
|
|
108
|
+
# Catches a type emitted twice or emitted into the wrong file, neither of which an
|
|
109
|
+
# include-list assertion sees.
|
|
110
|
+
def type_names(file)
|
|
111
|
+
text = content( file ).to_s
|
|
112
|
+
typedef_names( text ) + text.scan(/\b(?:struct|union|enum)\s+([A-Za-z_]\w*)\s*\{/).flatten
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Declarator name of every typedef in the text. A fixture-grade extractor, not a C
|
|
116
|
+
# parser: it tracks brace depth so an aggregate body's own semicolons cannot end the
|
|
117
|
+
# statement early, then reads the name off the declarator.
|
|
118
|
+
def typedef_names(text)
|
|
119
|
+
text.to_enum( :scan, /\btypedef\b/ ).map do
|
|
120
|
+
statement = typedef_statement( text, Regexp.last_match.end( 0 ) )
|
|
121
|
+
declarator_name( statement )
|
|
122
|
+
end.compact
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Text between `typedef` and its terminating semicolon at brace depth zero.
|
|
126
|
+
def typedef_statement(text, from)
|
|
127
|
+
depth = 0
|
|
128
|
+
index = from
|
|
129
|
+
|
|
130
|
+
while index < text.length
|
|
131
|
+
case text[index]
|
|
132
|
+
when '{' then depth += 1
|
|
133
|
+
when '}' then depth -= 1
|
|
134
|
+
when ';' then break if depth.zero?
|
|
135
|
+
end
|
|
136
|
+
index += 1
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
text[from...index].to_s
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# A function-pointer typedef carries its name inside `(* … )`, so that shape is read
|
|
143
|
+
# first. Otherwise the name is the last identifier once array dimensions are removed.
|
|
144
|
+
def declarator_name(statement)
|
|
145
|
+
pointer = statement.match(/\(\s*\*+\s*([A-Za-z_]\w*)\s*\)/)
|
|
146
|
+
return pointer[1] if pointer
|
|
147
|
+
|
|
148
|
+
statement.gsub(/\[[^\]]*\]/, ' ').scan(/[A-Za-z_]\w*/).last
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Position of an include within a generated file, or nil when absent. Ordering is only
|
|
152
|
+
# meaningful against another position, so cases compare two of these rather than
|
|
153
|
+
# asserting an absolute index.
|
|
154
|
+
def include_index(file, fragment)
|
|
155
|
+
includes( file ).index { |line| line.include?( fragment ) }
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Position of a #define among the emitted lines of a generated file. Measured in source
|
|
159
|
+
# lines rather than among the defines alone, so it is directly comparable with
|
|
160
|
+
# line_index below and therefore with an include's own line.
|
|
161
|
+
def define_index(file, macro)
|
|
162
|
+
line_index( file, /^\s*#\s*define\s+#{Regexp.escape( macro )}\b/ )
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Position of the first line matching a pattern, or nil. The common currency for every
|
|
166
|
+
# ordering assertion that spans two kinds of content -- a #define against an #include,
|
|
167
|
+
# say, which cannot be compared within either one's own list.
|
|
168
|
+
def line_index(file, pattern)
|
|
169
|
+
content( file ).to_s.lines.index { |line| line.match?( pattern ) }
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Named conveniences for the three files cases reach for most.
|
|
173
|
+
def impl_h_includes = includes( :impl_h )
|
|
174
|
+
def types_h_includes = includes( :types_h )
|
|
175
|
+
def interface_h_includes = includes( :interface_h )
|
|
176
|
+
|
|
177
|
+
def impl_h_index(fragment) = include_index( :impl_h, fragment )
|
|
178
|
+
def interface_h_index(fragment) = include_index( :interface_h, fragment )
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# A compile or link attempt. `ok` is the only thing most cases assert; `stderr` explains a
|
|
182
|
+
# failure without the case having to parse it.
|
|
183
|
+
Compilation = Struct.new( :ok, :stderr, :command, keyword_init: true ) do
|
|
184
|
+
def first_error
|
|
185
|
+
stderr.to_s.lines.find { |line| line =~ /error:/ }&.strip
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# A linker diagnostic carries no "error:" prefix, so cases asserting a link failure
|
|
189
|
+
# match on the message itself.
|
|
190
|
+
def first_diagnostic
|
|
191
|
+
stderr.to_s.lines.reject { |line| line.strip.empty? }.first&.strip
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Raised when the accurate preprocessing pass fails outright. Production falls back to a
|
|
196
|
+
# text scan here; a case that cannot preprocess is a broken case, so the harness refuses
|
|
197
|
+
# rather than silently measuring a different path than the one asked for.
|
|
198
|
+
class PreprocessFailure < StandardError; end
|
|
199
|
+
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
module PartialsGenerationHelpers
|
|
204
|
+
|
|
205
|
+
# Generates a Partial from in-memory C and returns the generated files' contents.
|
|
206
|
+
#
|
|
207
|
+
# `header_includes` and `source_includes` are include spellings; `<name>` marks a system
|
|
208
|
+
# header and anything else a user header, matching what reconciliation hands the assembler.
|
|
209
|
+
# `extra` writes additional headers into the working directory, where the preprocessor and
|
|
210
|
+
# the later compile resolve them. `partials` defaults to empty: this module is partialized,
|
|
211
|
+
# which the remap methods handle from `name:` alone. The hash names *other* partialized
|
|
212
|
+
# modules, whose includes get removed or redirected.
|
|
213
|
+
def generate_partial(
|
|
214
|
+
module_name:,
|
|
215
|
+
header: '',
|
|
216
|
+
source: '',
|
|
217
|
+
header_includes: [],
|
|
218
|
+
source_includes: [],
|
|
219
|
+
extra: {},
|
|
220
|
+
partials: {},
|
|
221
|
+
defines: [],
|
|
222
|
+
mode: :accurate,
|
|
223
|
+
tests_expose: PartializerConfig::DEDUCT,
|
|
224
|
+
mocks_expose: PartializerConfig::DEDUCT,
|
|
225
|
+
dir: nil
|
|
226
|
+
)
|
|
227
|
+
# A caller supplies `dir` to generate two modules into one working directory, which is
|
|
228
|
+
# what a link across two partialized modules needs.
|
|
229
|
+
dir ||= Dir.mktmpdir( 'partials-generation-' )
|
|
230
|
+
|
|
231
|
+
File.write( File.join( dir, "#{module_name}.h" ), header )
|
|
232
|
+
File.write( File.join( dir, "#{module_name}.c" ), source )
|
|
233
|
+
extra.each { |name, text| File.write( File.join( dir, name ), text ) }
|
|
234
|
+
|
|
235
|
+
pp_header = reconstitute_partial_file(
|
|
236
|
+
dir: dir, filename: "#{module_name}.h", kind: :header,
|
|
237
|
+
includes: header_includes, defines: defines, mode: mode
|
|
238
|
+
)
|
|
239
|
+
pp_source = reconstitute_partial_file(
|
|
240
|
+
dir: dir, filename: "#{module_name}.c", kind: :source,
|
|
241
|
+
includes: source_includes, defines: defines, mode: mode
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
c_module = extract_c( pp_header ) + extract_c( pp_source )
|
|
245
|
+
|
|
246
|
+
generator = build_partials_generator
|
|
247
|
+
partializer = build_partializer
|
|
248
|
+
|
|
249
|
+
# Function-scoped statics are promoted to module scope before generation, the way
|
|
250
|
+
# Partializer#extract_module_contents does it. Promotion is what puts a name that was
|
|
251
|
+
# private to one function into link-time resolution, so a linkage case cannot see its
|
|
252
|
+
# own subject without this step. Line-number association is deliberately skipped: it
|
|
253
|
+
# only sets `#line` attribution, which no assertion here depends on.
|
|
254
|
+
promoted = partials_helper.extract_function_scope_static_vars(
|
|
255
|
+
c_module.function_definitions,
|
|
256
|
+
name: 'PartialsGenerationTest', module_name: module_name, file_type: 'source'
|
|
257
|
+
)
|
|
258
|
+
c_module.variable_declarations.concat( promoted )
|
|
259
|
+
c_module.element_sequence.concat( promoted ) unless promoted.empty?
|
|
260
|
+
|
|
261
|
+
# Generated-file boilerplate carried in from the reconstituted files is stripped before
|
|
262
|
+
# generation, exactly as PartialsManager#stage_generate_partials does. Skipping this
|
|
263
|
+
# leaves synthetic include guards in the extracted macros and misreports what a real
|
|
264
|
+
# build would emit.
|
|
265
|
+
partializer.sanitize( c_module )
|
|
266
|
+
|
|
267
|
+
# Header list first, then source list -- the order partials_manager uses when it
|
|
268
|
+
# concatenates the two before remapping.
|
|
269
|
+
raw_includes = partial_include_objects( source_includes + header_includes )
|
|
270
|
+
|
|
271
|
+
# DEDUCT with no subtractions is what TEST_PARTIAL_ALL_MODULE resolves to -- every function
|
|
272
|
+
# exposed. The two sides are separate because a module is routinely tested at one visibility
|
|
273
|
+
# and mocked at another, which splits its own content across two generated files. Visibility
|
|
274
|
+
# filtering has its own thorough unit coverage, so a case states the exposure it wants rather
|
|
275
|
+
# than re-proving the filter.
|
|
276
|
+
config = PartializerConfig::Config.new(
|
|
277
|
+
module: module_name,
|
|
278
|
+
tests: PartializerConfig::PartialFunctions.new( type: tests_expose ),
|
|
279
|
+
mocks: PartializerConfig::PartialFunctions.new( type: mocks_expose ),
|
|
280
|
+
header: Partials::ConfigFileInfo.new( filepath: File.join( dir, "#{module_name}.h" ) ),
|
|
281
|
+
source: Partials::ConfigFileInfo.new( filepath: File.join( dir, "#{module_name}.c" ) )
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
# Production hands the remaps the whole test file's partials hash, which includes the module
|
|
285
|
+
# being generated. That entry is what tells the source remap to carry this module's own
|
|
286
|
+
# interface header, so omitting it hides a real behavior.
|
|
287
|
+
all_partials = partials.merge( module_name => config )
|
|
288
|
+
|
|
289
|
+
# Partials refuses a module whose shape fallback preprocessing cannot resolve, rather than
|
|
290
|
+
# generating from a guess and leaving a compiler to report something arcane later. Routed
|
|
291
|
+
# through validate_config so the refusal happens exactly where production puts it: before
|
|
292
|
+
# generation, not after.
|
|
293
|
+
partializer.validate_config(
|
|
294
|
+
c_module: c_module, config: config, name: 'PartialsGenerationTest',
|
|
295
|
+
fallback: mode == :fallback
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
implementation = partializer.extract_implementation_functions(
|
|
299
|
+
test: 'PartialsGenerationTest', partial: module_name,
|
|
300
|
+
definitions: c_module.function_definitions, config: config
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
interface = partializer.extract_interface_functions(
|
|
304
|
+
test: 'PartialsGenerationTest', partial: module_name,
|
|
305
|
+
definitions: c_module.function_definitions,
|
|
306
|
+
declarations: c_module.function_declarations, config: config
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
# The types header carries its own dependencies and its own guard-spoof, so both are
|
|
310
|
+
# computed here the way partials_manager does and handed to the generator.
|
|
311
|
+
types_includes = partializer.remap_types_header_includes(
|
|
312
|
+
name: module_name, includes: raw_includes, partials: all_partials
|
|
313
|
+
)
|
|
314
|
+
include_guard = partializer.extract_module_include_guard( config.header.filepath )
|
|
315
|
+
|
|
316
|
+
types_h_name = generator.generate_types(
|
|
317
|
+
name: module_name, c_module: c_module, output_path: dir,
|
|
318
|
+
includes: types_includes, include_guard: include_guard
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
header_list = partializer.remap_implementation_header_includes(
|
|
322
|
+
name: module_name, includes: raw_includes, partials: all_partials,
|
|
323
|
+
types_header: types_h_name
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
source_list = partializer.remap_implementation_source_includes(
|
|
327
|
+
name: module_name, includes: raw_includes, partials: all_partials
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
interface_list = partializer.remap_interface_header_includes(
|
|
331
|
+
name: module_name, includes: raw_includes, partials: all_partials,
|
|
332
|
+
types_header: types_h_name
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
generator.generate_implementation(
|
|
336
|
+
test: 'PartialsGenerationTest',
|
|
337
|
+
name: module_name,
|
|
338
|
+
function_definitions: implementation || [],
|
|
339
|
+
source_includes: source_list,
|
|
340
|
+
header_includes: header_list,
|
|
341
|
+
c_module: c_module,
|
|
342
|
+
output_path: dir,
|
|
343
|
+
include_guard: include_guard
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
# The mockable interface header is what CMock mocks in place of the real module header,
|
|
347
|
+
# and it carries the same types header the implementation header does. Both land in one
|
|
348
|
+
# translation unit when a module is tested and mocked in the same test file.
|
|
349
|
+
generator.generate_interface(
|
|
350
|
+
test: 'PartialsGenerationTest',
|
|
351
|
+
name: module_name,
|
|
352
|
+
function_declarations: interface || [],
|
|
353
|
+
includes: interface_list,
|
|
354
|
+
c_module: c_module,
|
|
355
|
+
output_path: dir,
|
|
356
|
+
include_guard: include_guard
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
PartialsGeneration::Result.new(
|
|
360
|
+
dir: dir,
|
|
361
|
+
module_name: module_name,
|
|
362
|
+
mode: mode,
|
|
363
|
+
types_h: read_generated( dir, types_h_name ),
|
|
364
|
+
impl_h: read_generated( dir, "ceedling_partial_#{module_name}_impl.h" ),
|
|
365
|
+
impl_c: read_generated( dir, "ceedling_partial_#{module_name}_impl.c" ),
|
|
366
|
+
interface_h: read_generated( dir, "ceedling_partial_#{module_name}_interface.h" ),
|
|
367
|
+
pp_header: pp_header,
|
|
368
|
+
pp_source: pp_source
|
|
369
|
+
)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# Reproduces what Preprocessinator#preprocess_partial_{header,source}_file_preserve_macros
|
|
373
|
+
# leaves on disk for the extractor to read, in the same steps and with the same
|
|
374
|
+
# collaborators.
|
|
375
|
+
#
|
|
376
|
+
# The accurate path runs real GCC, which resolves every conditional and follows every
|
|
377
|
+
# include while leaving macro directives as written. The fallback path never runs a
|
|
378
|
+
# compiler: it scans the file's own text, tracking conditionals approximately, which is
|
|
379
|
+
# why it resolves less and why Partials needs to refuse some shapes outright under it.
|
|
380
|
+
def reconstitute_partial_file(dir:, filename:, kind:, includes:, defines: [], mode: :accurate)
|
|
381
|
+
path = File.join( dir, filename )
|
|
382
|
+
|
|
383
|
+
contents, extras =
|
|
384
|
+
case mode
|
|
385
|
+
when :accurate then reconstitute_accurate( dir: dir, path: path, defines: defines )
|
|
386
|
+
when :fallback then reconstitute_fallback( path: path, defines: defines )
|
|
387
|
+
else raise ArgumentError, "unknown preprocessing mode '#{mode}'"
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
assembled = File.join( dir, "preprocessed_#{filename}" )
|
|
391
|
+
include_list = partial_include_objects( includes )
|
|
392
|
+
|
|
393
|
+
if kind == :header
|
|
394
|
+
partials_file_assembler.assemble_preprocessed_header_file(
|
|
395
|
+
filepath: filename, preprocessed_filepath: assembled,
|
|
396
|
+
contents: contents, extras: extras, includes: include_list
|
|
397
|
+
)
|
|
398
|
+
else
|
|
399
|
+
partials_file_assembler.assemble_preprocessed_code_file(
|
|
400
|
+
filename: filename, preprocessed_filepath: assembled,
|
|
401
|
+
contents: contents, extras: extras, includes: include_list
|
|
402
|
+
)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
File.read( assembled, encoding: 'UTF-8' )
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
# Only lines belonging to this file survive the reconstructor; a type arriving from an
|
|
409
|
+
# included header is discarded here, which is why an extracted type can reference
|
|
410
|
+
# something no generated file declares.
|
|
411
|
+
def reconstitute_accurate(dir:, path:, defines: [])
|
|
412
|
+
raw = "#{path}.directives_only"
|
|
413
|
+
|
|
414
|
+
# Defines reach both passes, as they do in production. Without this a case pairing
|
|
415
|
+
# `defines:` with accurate mode would silently measure the undefined configuration instead.
|
|
416
|
+
flags = defines.map { |name| "-D#{name}" }.join( ' ' )
|
|
417
|
+
|
|
418
|
+
command = "#{partials_compiler} -E -fdirectives-only #{flags} -I#{dir} -x c #{path} -o #{raw}".squeeze( ' ' )
|
|
419
|
+
_out, stderr, status = Open3.capture3( command )
|
|
420
|
+
raise PartialsGeneration::PreprocessFailure, "#{command}\n#{stderr}" unless status.success?
|
|
421
|
+
|
|
422
|
+
partials_comment_stripper.strip_file( raw )
|
|
423
|
+
|
|
424
|
+
contents = File.open( raw, 'rb' ) do |file|
|
|
425
|
+
partials_reconstructor.extract_file_as_array_from_expansion( file, path )
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
[contents, []]
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
# Fallback strips every directive line out of the content, so the macros and pragmas the
|
|
432
|
+
# extractor still needs are recovered separately and reinserted as assembler extras. That
|
|
433
|
+
# second pass is what keeps a type's array-size macro visible when no compiler ran.
|
|
434
|
+
def reconstitute_fallback(path:, defines: [])
|
|
435
|
+
contents = partials_file_assembler.collect_file_contents_fallback(
|
|
436
|
+
source_filepath: path, defines: defines
|
|
437
|
+
)
|
|
438
|
+
extras = partials_file_assembler.collect_macros_and_pragmas_fallback(
|
|
439
|
+
source_filepath: path, defines: defines
|
|
440
|
+
)
|
|
441
|
+
|
|
442
|
+
[contents, extras]
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
# ---- compilation -------------------------------------------------------------
|
|
446
|
+
|
|
447
|
+
# Compiles a translation unit that includes the generated implementation header, the way a
|
|
448
|
+
# generated test runner would. Syntax-only: this probes declarations and ordering, not code
|
|
449
|
+
# generation.
|
|
450
|
+
def compile_partial(result, prelude: '')
|
|
451
|
+
probe = File.join( result.dir, "probe_#{result.module_name}_impl.c" )
|
|
452
|
+
File.write( probe, "#{prelude}#include \"ceedling_partial_#{result.module_name}_impl.h\"\nint main(void) { return 0; }\n" )
|
|
453
|
+
|
|
454
|
+
syntax_only( result, probe )
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
# Compiles a translation unit including both generated headers at once, which is the shape
|
|
458
|
+
# a module tested and mocked in the same test file produces. The implementation header
|
|
459
|
+
# arrives directly; the interface header arrives the way CMock's generated mock brings it.
|
|
460
|
+
def compile_both_headers(result)
|
|
461
|
+
probe = File.join( result.dir, "probe_#{result.module_name}_both.c" )
|
|
462
|
+
File.write( probe, <<~C )
|
|
463
|
+
#include "ceedling_partial_#{result.module_name}_impl.h"
|
|
464
|
+
#include "ceedling_partial_#{result.module_name}_interface.h"
|
|
465
|
+
int main(void) { return 0; }
|
|
466
|
+
C
|
|
467
|
+
|
|
468
|
+
syntax_only( result, probe )
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
# Compiles the types header entirely on its own, which is the question of whether that
|
|
472
|
+
# header is self-contained. Nothing else is included first.
|
|
473
|
+
def compile_types_header_alone(result)
|
|
474
|
+
probe = File.join( result.dir, 'probe_types_alone.c' )
|
|
475
|
+
File.write( probe, "#include \"ceedling_partial_#{result.module_name}_types.h\"\nint main(void) { return 0; }\n" )
|
|
476
|
+
|
|
477
|
+
syntax_only( result, probe )
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
def syntax_only(result, probe)
|
|
481
|
+
command = "#{partials_compiler} -fsyntax-only -I#{result.dir} #{probe}"
|
|
482
|
+
_out, stderr, status = Open3.capture3( command )
|
|
483
|
+
|
|
484
|
+
PartialsGeneration::Compilation.new( ok: status.success?, stderr: stderr, command: command )
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
# ---- linking -----------------------------------------------------------------
|
|
488
|
+
#
|
|
489
|
+
# A syntax-only check reaches missing declarations and conflicting types. It cannot reach
|
|
490
|
+
# the two failure modes that matter most to a feature built on copying and mutating
|
|
491
|
+
# symbols: a definition that went missing, and two definitions colliding. Only a real
|
|
492
|
+
# object file and a real link surface `undefined reference to` and `multiple definition
|
|
493
|
+
# of`, so stripping `static` from a file-scope variable -- which turns a module-private
|
|
494
|
+
# name into one that participates in link-time resolution -- is testable only here.
|
|
495
|
+
|
|
496
|
+
# Compiles one result's generated implementation source to a real object file.
|
|
497
|
+
def compile_objects(result)
|
|
498
|
+
object = File.join( result.dir, "ceedling_partial_#{result.module_name}_impl.o" )
|
|
499
|
+
source = File.join( result.dir, "ceedling_partial_#{result.module_name}_impl.c" )
|
|
500
|
+
|
|
501
|
+
command = "#{partials_compiler} -c -I#{result.dir} #{source} -o #{object}"
|
|
502
|
+
_out, stderr, status = Open3.capture3( command )
|
|
503
|
+
|
|
504
|
+
PartialsGeneration::Compilation.new( ok: status.success?, stderr: stderr, command: command )
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
# Links one or more results' generated implementations against a stand-in test translation
|
|
508
|
+
# unit. The stand-in takes the address of each named symbol so the linker has to resolve
|
|
509
|
+
# it; a symbol that merely compiles is not proof the definition survived.
|
|
510
|
+
def link_partials(results, references: [])
|
|
511
|
+
results = Array( results )
|
|
512
|
+
dir = results.first.dir
|
|
513
|
+
|
|
514
|
+
headers = results.map { |r| "#include \"ceedling_partial_#{r.module_name}_impl.h\"" }
|
|
515
|
+
body =
|
|
516
|
+
if references.empty?
|
|
517
|
+
' return 0;'
|
|
518
|
+
else
|
|
519
|
+
refs = references.map { |symbol| "(const void*)&#{symbol}" }.join( ", " )
|
|
520
|
+
" const void* refs[] = { #{refs} };\n return refs[0] == 0;"
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
probe = File.join( dir, "probe_link_#{results.map( &:module_name ).join( '_' )}.c" )
|
|
524
|
+
File.write( probe, "#{headers.join( "\n" )}\nint main(void) {\n#{body}\n}\n" )
|
|
525
|
+
|
|
526
|
+
sources = results.map { |r| File.join( r.dir, "ceedling_partial_#{r.module_name}_impl.c" ) }
|
|
527
|
+
includes = results.map( &:dir ).uniq.map { |d| "-I#{d}" }.join( ' ' )
|
|
528
|
+
output = File.join( dir, "probe_link_#{results.map( &:module_name ).join( '_' )}" )
|
|
529
|
+
|
|
530
|
+
command = "#{partials_compiler} #{includes} #{probe} #{sources.join( ' ' )} -o #{output}"
|
|
531
|
+
_out, stderr, status = Open3.capture3( command )
|
|
532
|
+
|
|
533
|
+
PartialsGeneration::Compilation.new( ok: status.success?, stderr: stderr, command: command )
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
def link_partial(result, references: [])
|
|
537
|
+
link_partials( [result], references: references )
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
# A `partials:` entry for some *other* partialized module in the same test file. The remap
|
|
541
|
+
# methods read `mocks.type` to decide between dropping that module's include and redirecting
|
|
542
|
+
# it to the module's generated interface header, so a case has to say which it is.
|
|
543
|
+
def other_partial(module_name, mocked: false)
|
|
544
|
+
{
|
|
545
|
+
module_name => PartializerConfig::Config.new(
|
|
546
|
+
module: module_name,
|
|
547
|
+
tests: PartializerConfig::PartialFunctions.new( type: PartializerConfig::DEDUCT ),
|
|
548
|
+
mocks: PartializerConfig::PartialFunctions.new(
|
|
549
|
+
type: mocked ? PartializerConfig::DEDUCT : nil
|
|
550
|
+
)
|
|
551
|
+
)
|
|
552
|
+
}
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
# A working directory shared by two generated modules, for cases where a collision between
|
|
556
|
+
# them is the subject. Cleaned up by the caller through cleanup_dir.
|
|
557
|
+
def shared_partials_dir
|
|
558
|
+
Dir.mktmpdir( 'partials-generation-shared-' )
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
def cleanup_dir(dir)
|
|
562
|
+
FileUtils.rm_rf( dir ) if dir
|
|
563
|
+
end
|
|
564
|
+
|
|
565
|
+
def cleanup_partial(result)
|
|
566
|
+
FileUtils.rm_rf( result.dir ) if result&.dir
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
def partials_compiler
|
|
570
|
+
ENV.fetch( 'PARTIALS_GENERATION_CC', 'gcc' )
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
# ---- construction -------------------------------------------------------------
|
|
574
|
+
|
|
575
|
+
# `<name>` is a system header, everything else a user header -- the distinction
|
|
576
|
+
# reconciliation draws, and the one that decides how each renders.
|
|
577
|
+
def partial_include_objects(names)
|
|
578
|
+
names.map do |name|
|
|
579
|
+
if name.start_with?( '<' ) && name.end_with?( '>' )
|
|
580
|
+
SystemInclude.new( name[1..-2] )
|
|
581
|
+
else
|
|
582
|
+
UserInclude.new( name )
|
|
583
|
+
end
|
|
584
|
+
end
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
def extract_c(content)
|
|
588
|
+
code_text = CExtractorCodeText.new
|
|
589
|
+
declarations = CExtractorDeclarations.new({ c_extractor_code_text: code_text })
|
|
590
|
+
functions = CExtractorFunctions.new({ c_extractor_code_text: code_text })
|
|
591
|
+
preprocessing = CExtractorPreprocessing.new({ c_extractor_code_text: code_text })
|
|
592
|
+
definitions = CExtractorDefinitions.new({ c_extractor_code_text: code_text })
|
|
593
|
+
declarations.setup()
|
|
594
|
+
functions.setup()
|
|
595
|
+
|
|
596
|
+
extractor = CExtractor.new(
|
|
597
|
+
{
|
|
598
|
+
c_extractor_code_text: code_text,
|
|
599
|
+
c_extractor_functions: functions,
|
|
600
|
+
c_extractor_declarations: declarations,
|
|
601
|
+
c_extractor_preprocessing: preprocessing,
|
|
602
|
+
c_extractor_definitions: definitions,
|
|
603
|
+
# Bare double so #respond_to? is false and CExtractor uses its own default buffer
|
|
604
|
+
# length, as c_extractor_composition_spec.rb does.
|
|
605
|
+
configurator: RSpec::Mocks::Double.new( 'Configurator' ),
|
|
606
|
+
loginator: RSpec::Mocks::Double.new( 'Loginator' ).as_null_object,
|
|
607
|
+
file_wrapper: RSpec::Mocks::Double.new( 'FileWrapper' ).as_null_object
|
|
608
|
+
}
|
|
609
|
+
)
|
|
610
|
+
extractor.setup()
|
|
611
|
+
extractor.from_string( content: content )
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
def build_partials_generator
|
|
615
|
+
GeneratorPartials.new(
|
|
616
|
+
{
|
|
617
|
+
file_wrapper: partials_file_wrapper,
|
|
618
|
+
file_path_utils: partials_file_path_utils,
|
|
619
|
+
loginator: partials_null_loginator
|
|
620
|
+
}
|
|
621
|
+
)
|
|
622
|
+
end
|
|
623
|
+
|
|
624
|
+
# Include remapping, #sanitize, and function extraction all run for real, so the helper is
|
|
625
|
+
# real too. File discovery and configuration are the only doubled collaborators.
|
|
626
|
+
def build_partializer
|
|
627
|
+
Partializer.new(
|
|
628
|
+
{
|
|
629
|
+
configurator: RSpec::Mocks::Double.new( 'Configurator' ).as_null_object,
|
|
630
|
+
partializer_helper: partials_helper,
|
|
631
|
+
file_finder: RSpec::Mocks::Double.new( 'FileFinder' ).as_null_object,
|
|
632
|
+
c_extractor: RSpec::Mocks::Double.new( 'CExtractor' ).as_null_object,
|
|
633
|
+
file_path_utils: partials_file_path_utils,
|
|
634
|
+
preprocessinator_reconstructor: partials_reconstructor,
|
|
635
|
+
file_wrapper: partials_file_wrapper,
|
|
636
|
+
reportinator: RSpec::Mocks::Double.new( 'Reportinator' ).as_null_object,
|
|
637
|
+
loginator: partials_null_loginator
|
|
638
|
+
}
|
|
639
|
+
)
|
|
640
|
+
end
|
|
641
|
+
|
|
642
|
+
# One instance per case, memoized so the promotion pass and the extraction passes share
|
|
643
|
+
# state. The code finder stays doubled: it serves only line-number association, which this
|
|
644
|
+
# harness skips. Wiring mirrors partializer_helper_spec.rb's own end-to-end context.
|
|
645
|
+
def partials_helper
|
|
646
|
+
@partials_helper ||= PartializerHelper.new(
|
|
647
|
+
{
|
|
648
|
+
partializer_utils: PartializerUtils.new(
|
|
649
|
+
{
|
|
650
|
+
preprocessinator_code_finder: RSpec::Mocks::Double.new( 'CodeFinder' ).as_null_object,
|
|
651
|
+
loginator: partials_null_loginator
|
|
652
|
+
}
|
|
653
|
+
),
|
|
654
|
+
c_extractor: RSpec::Mocks::Double.new( 'CExtractor' ).as_null_object,
|
|
655
|
+
c_extractor_declarations: CExtractorDeclarations.new(
|
|
656
|
+
{ c_extractor_code_text: CExtractorCodeText.new }
|
|
657
|
+
).tap( &:setup ),
|
|
658
|
+
file_path_utils: partials_file_path_utils,
|
|
659
|
+
parsing_parcels: ParsingParcels.new,
|
|
660
|
+
loginator: partials_null_loginator
|
|
661
|
+
}
|
|
662
|
+
).tap( &:setup )
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
def partials_reconstructor
|
|
666
|
+
PreprocessinatorReconstructor.new(
|
|
667
|
+
{ parsing_parcels: ParsingParcels.new, file_wrapper: partials_file_wrapper }
|
|
668
|
+
)
|
|
669
|
+
end
|
|
670
|
+
|
|
671
|
+
def partials_comment_stripper
|
|
672
|
+
PreprocessinatorCommentStripper.new(
|
|
673
|
+
{ c_comment_scanner: CCommentScanner.new, file_wrapper: partials_file_wrapper }
|
|
674
|
+
)
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
# Of the eight collaborators, the assemble and fallback-collect methods used here consult
|
|
678
|
+
# only the reconstructor, the file wrapper, and parsing parcels; the rest serve collection
|
|
679
|
+
# methods the harness drives itself.
|
|
680
|
+
def partials_file_assembler
|
|
681
|
+
PreprocessinatorFileAssembler.new(
|
|
682
|
+
{
|
|
683
|
+
preprocessinator_reconstructor: partials_reconstructor,
|
|
684
|
+
configurator: RSpec::Mocks::Double.new( 'Configurator' ).as_null_object,
|
|
685
|
+
tool_executor: RSpec::Mocks::Double.new( 'ToolExecutor' ).as_null_object,
|
|
686
|
+
file_path_utils: partials_file_path_utils,
|
|
687
|
+
file_wrapper: partials_file_wrapper,
|
|
688
|
+
parsing_parcels: ParsingParcels.new,
|
|
689
|
+
loginator: partials_null_loginator,
|
|
690
|
+
reportinator: RSpec::Mocks::Double.new( 'Reportinator' ).as_null_object
|
|
691
|
+
}
|
|
692
|
+
)
|
|
693
|
+
end
|
|
694
|
+
|
|
695
|
+
def partials_file_wrapper
|
|
696
|
+
FileWrapper.new( loginator: partials_null_loginator, verbosinator: partials_null_verbosinator )
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
def partials_file_path_utils
|
|
700
|
+
FilePathUtils.new(
|
|
701
|
+
configurator: RSpec::Mocks::Double.new( 'Configurator' ).as_null_object,
|
|
702
|
+
file_wrapper: partials_file_wrapper
|
|
703
|
+
)
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
def partials_null_loginator
|
|
707
|
+
RSpec::Mocks::Double.new( 'Loginator' ).as_null_object
|
|
708
|
+
end
|
|
709
|
+
|
|
710
|
+
def partials_null_verbosinator
|
|
711
|
+
RSpec::Mocks::Double.new( 'Verbosinator' ).as_null_object
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
def read_generated(dir, name)
|
|
715
|
+
return nil if name.nil?
|
|
716
|
+
|
|
717
|
+
path = File.join( dir, name )
|
|
718
|
+
File.exist?( path ) ? File.read( path, encoding: 'UTF-8' ) : nil
|
|
719
|
+
end
|
|
720
|
+
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
RSpec.configure do |config|
|
|
725
|
+
config.include PartialsGenerationHelpers
|
|
726
|
+
end
|