ceedling 1.1.9 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +3 -0
- data/.simplecov +73 -0
- data/GIT_COMMIT_SHA +1 -1
- data/Gemfile +84 -8
- data/Gemfile.lock +38 -8
- data/README.md +53 -30
- data/Rakefile +768 -16
- data/assets/{project.yml → features/project.yml} +4 -1
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.c +24 -0
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.h +14 -0
- data/assets/fixtures/bullseye_branch_coverage/test/test_branchy.c +18 -0
- data/assets/fixtures/cppcheck_findings/findings.c +23 -0
- data/assets/fixtures/cppcheck_findings/findings.h +13 -0
- data/assets/fixtures/header_include_path_validation/alt_drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/bar.h +6 -0
- data/assets/fixtures/header_include_path_validation/drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/other_inc/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/test_ambiguous_mock.c +15 -0
- data/assets/fixtures/header_include_path_validation/test_bare_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_mock_path.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_vanilla_path.c +10 -0
- data/assets/fixtures/header_include_path_validation/test_include_outranks_test_include_path.c +16 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock_ambiguous.c +14 -0
- data/assets/fixtures/header_include_path_validation/test_test_include_path_outranks_include.c +17 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/gamma/dup_gamma.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_alpha.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_bare.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_beta.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_override.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive_noop.c +16 -0
- data/assets/fixtures/parent_directory_references/alpha/extra.c +4 -0
- data/assets/fixtures/parent_directory_references/common/helper.c +6 -0
- data/assets/fixtures/parent_directory_references/common/helper.h +6 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_include.c +10 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_source.c +16 -0
- data/assets/fixtures/plain_inline_module.h +9 -0
- data/assets/fixtures/same_named_modules/include/drivers/spi/config.h +6 -0
- data/assets/fixtures/same_named_modules/include/drivers/uart/config.h +6 -0
- data/assets/fixtures/same_named_modules/src/drivers/spi/config.c +8 -0
- data/assets/fixtures/same_named_modules/src/drivers/uart/config.c +10 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs.c +26 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked.c +20 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked_traditional.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_both_modules.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_bare.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_partial_only.c +20 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/main.c +11 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_baz_bar.c +10 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_both_bars.c +12 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_foo_bar.c +10 -0
- data/assets/{test_example_file_boom.c → fixtures/test_nosanitize_boom.c} +9 -0
- data/assets/{test_example_file_crash_assert.c → fixtures/test_nosanitize_crash_assert.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv.c → fixtures/test_nosanitize_crash_sigsegv.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv_with_param.c → fixtures/test_nosanitize_crash_sigsegv_with_param.c} +8 -0
- data/assets/fixtures/test_nosanitize_heap_buffer_overflow.c +31 -0
- data/assets/fixtures/test_nosanitize_leak.c +34 -0
- data/assets/fixtures/test_nosanitize_two_findings.c +36 -0
- data/assets/{test_example_file_ub_shift_overflow.c → fixtures/test_nosanitize_ub_shift_overflow.c} +9 -0
- data/assets/fixtures/test_plain_inline_module.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/alpha/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/beta/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_alpha.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_ambiguous.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_beta.c +15 -0
- data/assets/fixtures/tests_with_conditional_includes/src/feature_extra2.h +13 -0
- data/assets/fixtures/tests_with_conditional_includes/src/macro_target_extra.h +13 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.c +19 -3
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.h +1 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.c +17 -1
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget.c +12 -4
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget_feature.c +8 -5
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/FeatureConfig.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Gpt.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModuleConfig.h +17 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart1.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart2.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/drivers/widget.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01.c +21 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01_legacy.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_02.c +31 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_FeatureConfig.c +15 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_reader.c +13 -0
- data/assets/fixtures/tests_with_duplicate_test_names/integration/test_foo.c +21 -0
- data/assets/fixtures/tests_with_duplicate_test_names/unit/test_foo.c +21 -0
- data/assets/fixtures/tests_with_fallback_conditionals/src/conditional_module.c +28 -0
- data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/test/test_conditionals.c +8 -1
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_lower.s +2 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_upper.S +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.c +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.h +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/test/test_counter_module.c +27 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/app/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/drivers/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.c +30 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/shared/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/test/test_sensor.c +32 -0
- data/bin/actionator.rb +234 -0
- data/bin/app_cfg.rb +7 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +89 -57
- data/bin/cli_helper.rb +90 -49
- data/bin/cli_options_transform.rb +22 -0
- data/bin/{configinator.rb → composinator.rb} +39 -32
- data/bin/mixin_resolvinator.rb +124 -0
- data/bin/mixin_standardizer.rb +31 -61
- data/bin/mixinator.rb +27 -29
- data/bin/mixins.rb +0 -5
- data/bin/objects.yml +20 -7
- data/bin/path_validator.rb +6 -5
- data/bin/projectinator.rb +51 -142
- data/bin/rake_patches.rb +36 -2
- data/bin/recursive_merger.rb +7 -1
- data/bin/versionator.rb +2 -3
- data/ceedling.gemspec +83 -12
- data/docs/BreakingChanges.md +46 -2
- data/docs/CONTRIBUTING.md +45 -29
- data/docs/CeedlingPullRequestChecklist.md +10 -9
- data/docs/Changelog.md +337 -37
- data/docs/KnownIssues.md +39 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +86 -4
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +32 -0
- data/examples/temp_sensor/mixin/add_bullseye.yml +19 -0
- data/examples/wondrous_forest/README.md +3 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.c +21 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.h +14 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.c +23 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.h +14 -0
- data/examples/wondrous_forest/test/TestCalibration.c +39 -0
- data/lib/ceedling/batchinator.rb +81 -22
- data/lib/ceedling/c_extractor/README.md +61 -0
- data/lib/ceedling/c_extractor/c_extractor.rb +33 -2
- data/lib/ceedling/c_extractor/c_extractor_code_text.rb +18 -10
- data/lib/ceedling/c_extractor/c_extractor_constants.rb +10 -10
- data/lib/ceedling/c_extractor/c_extractor_declarations.rb +14 -14
- data/lib/ceedling/c_extractor/c_extractor_functions.rb +10 -13
- data/lib/ceedling/c_extractor/c_extractor_preprocessing.rb +77 -0
- data/lib/ceedling/c_extractor/c_extractor_types.rb +8 -5
- data/lib/ceedling/ceedling.h +33 -0
- data/lib/ceedling/config/config_matchinator.rb +36 -13
- data/lib/ceedling/config/configurator.rb +366 -530
- data/lib/ceedling/config/configurator_builder.rb +253 -365
- data/lib/ceedling/config/configurator_plugins.rb +68 -102
- data/lib/ceedling/config/configurator_setup.rb +343 -610
- data/lib/ceedling/config/configurator_validator.rb +114 -142
- data/lib/ceedling/config/line_marker_suppressors.rb +67 -0
- data/lib/ceedling/constants.rb +60 -6
- data/lib/ceedling/defaults.rb +28 -14
- data/lib/ceedling/defineinator.rb +9 -4
- data/lib/ceedling/dependencies/README.md +69 -0
- data/lib/ceedling/dependencies/dependency_cache_store.rb +160 -0
- data/lib/ceedling/dependencies/dependency_debug_tree.rb +129 -0
- data/lib/ceedling/dependencies/dependency_differ.rb +127 -0
- data/lib/ceedling/dependencies/dependency_hasher.rb +94 -0
- data/lib/ceedling/dependencies/dependency_path_normalizer.rb +80 -0
- data/lib/ceedling/dependencies/dependency_tracker.rb +405 -0
- data/lib/ceedling/dependencies/dependinator.rb +65 -0
- data/lib/ceedling/dependencies/gcc_dependency_parser.rb +86 -0
- data/lib/ceedling/encodinator.rb +23 -11
- data/lib/ceedling/file_finder.rb +373 -89
- data/lib/ceedling/file_finder_helper.rb +44 -33
- data/lib/ceedling/file_path_collection_utils.rb +17 -4
- data/lib/ceedling/file_path_utils.rb +310 -52
- data/lib/ceedling/file_wrapper.rb +245 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +202 -75
- data/lib/ceedling/generators/generator_helper.rb +116 -69
- data/lib/ceedling/generators/generator_mocks.rb +13 -8
- data/lib/ceedling/generators/generator_partials.rb +93 -25
- data/lib/ceedling/generators/generator_test_results.rb +29 -17
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +199 -107
- data/lib/ceedling/generators/generator_test_results_sanity_checker.rb +1 -1
- data/lib/ceedling/includes/include_factory.rb +21 -6
- data/lib/ceedling/includes/include_pathinator.rb +40 -4
- data/lib/ceedling/includes/includes.rb +215 -61
- data/lib/ceedling/loginator.rb +13 -4
- data/lib/ceedling/objects.yml +218 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +272 -117
- data/lib/ceedling/partials/partializer_config.rb +141 -8
- data/lib/ceedling/partials/partializer_helper.rb +88 -2
- data/lib/ceedling/partials/partializer_utils.rb +1 -1
- data/lib/ceedling/partials/partials.rb +4 -4
- data/lib/ceedling/path_matcher.rb +163 -0
- data/lib/ceedling/path_mirror.rb +73 -0
- data/lib/ceedling/plugins/plugin.rb +1 -1
- data/lib/ceedling/plugins/plugin_manager.rb +31 -15
- data/lib/ceedling/plugins/plugin_manager_helper.rb +5 -1
- data/lib/ceedling/plugins/plugin_reportinator.rb +36 -7
- data/lib/ceedling/plugins/plugin_reportinator_helper.rb +3 -3
- data/lib/ceedling/plugins/report_log_writer_plugin.rb +66 -0
- data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +18 -5
- data/lib/ceedling/preprocess/README.md +135 -120
- data/lib/ceedling/preprocess/c_comment_scanner.rb +9 -7
- data/lib/ceedling/preprocess/c_preprocessor_conditionals.rb +27 -10
- data/lib/ceedling/preprocess/preprocessinator.rb +253 -217
- data/lib/ceedling/preprocess/preprocessinator_bare_includes_extractor.rb +7 -10
- data/lib/ceedling/preprocess/preprocessinator_code_finder.rb +8 -6
- data/lib/ceedling/preprocess/preprocessinator_comment_stripper.rb +5 -3
- data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +86 -82
- data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +182 -163
- data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +174 -8
- data/lib/ceedling/preprocess/preprocessinator_reconstructor.rb +41 -20
- data/lib/ceedling/quote_include_isolator.rb +129 -0
- data/lib/ceedling/rake_app/rake_task_registry.rb +9 -9
- data/lib/ceedling/rake_app/rake_wrapper.rb +0 -13
- data/lib/ceedling/rake_app/rakefile_component_resolver.rb +24 -12
- data/lib/ceedling/rakefile.rb +2 -1
- data/lib/ceedling/{tasks_base.rake → rakefiles/base/tasks_base.rake} +1 -1
- data/lib/ceedling/{tasks_filesystem.rake → rakefiles/base/tasks_filesystem.rake} +3 -0
- data/lib/ceedling/rakefiles/release/rules_release.rake +52 -0
- data/lib/ceedling/{erb_wrapper.rb → rakefiles/release/tasks_release.rake} +5 -8
- data/lib/ceedling/rakefiles/tests/rules_tests.rake +43 -0
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +80 -0
- data/lib/ceedling/{tasks_tests.rake → rakefiles/tests/tasks_tests.rake} +11 -20
- data/lib/ceedling/rakefiles/tests/tasks_tests_generate.rake +55 -0
- data/lib/ceedling/release_invoker/README.md +35 -0
- data/lib/ceedling/release_invoker/release_build_executor.rb +263 -0
- data/lib/ceedling/release_invoker/release_build_planner.rb +80 -0
- data/lib/ceedling/release_invoker/release_invoker.rb +78 -0
- data/lib/ceedling/release_invoker/release_invoker_types.rb +40 -0
- data/lib/ceedling/reportinator.rb +18 -2
- data/lib/ceedling/ruby_expandinator.rb +40 -1
- data/lib/ceedling/setupinator.rb +9 -3
- data/lib/ceedling/system_wrapper.rb +17 -0
- data/lib/ceedling/templateinator.rb +146 -0
- data/lib/ceedling/test_context_extractor.rb +59 -28
- data/lib/ceedling/test_invoker/HEADER_COLLISIONS.md +41 -0
- data/lib/ceedling/test_invoker/PIPELINE.md +142 -0
- data/lib/ceedling/test_invoker/README.md +6 -0
- data/lib/ceedling/test_invoker/mock_locator.rb +49 -0
- data/lib/ceedling/test_invoker/partials_manager.rb +426 -0
- data/lib/ceedling/test_invoker/standin_headerinator.rb +136 -0
- data/lib/ceedling/test_invoker/test_bare_includes_extractinator.rb +117 -0
- data/lib/ceedling/test_invoker/test_build_executor.rb +783 -415
- data/lib/ceedling/test_invoker/test_build_planner.rb +175 -70
- data/lib/ceedling/test_invoker/test_build_setup.rb +132 -241
- data/lib/ceedling/test_invoker/test_build_validations.rb +102 -0
- data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +148 -0
- data/lib/ceedling/test_invoker/test_includes_extractinator.rb +34 -0
- data/lib/ceedling/test_invoker/test_includes_preprocessinator.rb +118 -0
- data/lib/ceedling/test_invoker/test_includes_reconcilinator.rb +149 -0
- data/lib/ceedling/test_invoker/test_invoker.rb +16 -183
- data/lib/ceedling/test_invoker/test_invoker_types.rb +85 -16
- data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +121 -0
- data/lib/ceedling/test_invoker/test_pipeline_manager.rb +303 -0
- data/lib/ceedling/test_invoker/test_runner_generatinator.rb +105 -0
- data/lib/ceedling/test_invoker/test_search_paths.rb +73 -0
- data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +78 -0
- data/lib/ceedling/tool_executor.rb +42 -13
- data/lib/ceedling/tool_executor_helper.rb +1 -1
- data/lib/ceedling/tool_validator.rb +124 -123
- data/lib/ceedling/yaml_wrapper.rb +5 -3
- data/lib/version.rb +19 -2
- data/mkdocs.prerelease.yml +42 -0
- data/mkdocs.yml +10 -2
- data/plugins/bullseye/bullseye.rake +70 -107
- data/plugins/bullseye/config/defaults.yml +12 -54
- data/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/plugins/bullseye/lib/bullseye.rb +511 -120
- data/plugins/bullseye/lib/bullseye_constants.rb +100 -0
- data/plugins/command_hooks/lib/command_hooks.rb +117 -199
- data/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb +72 -27
- data/plugins/cppcheck/config/defaults.yml +6 -1
- data/plugins/cppcheck/config/defaults_cppcheck.rb +5 -1
- data/plugins/cppcheck/cppcheck.rake +7 -1
- data/plugins/cppcheck/lib/cppcheck.rb +175 -26
- data/plugins/cppcheck/lib/cppcheck_constants.rb +12 -0
- data/plugins/cppcheck/lib/cppcheck_reports.rb +5 -1
- data/plugins/dependencies/Rakefile +14 -2
- data/plugins/dependencies/config/defaults.yml +9 -6
- data/plugins/dependencies/dependencies.rake +46 -76
- data/plugins/dependencies/example/boss/project.yml +1 -1
- data/plugins/dependencies/example/supervisor/project.yml +1 -1
- data/plugins/dependencies/example/version.tar.gzip +0 -0
- data/plugins/dependencies/lib/dependencies.rb +232 -427
- data/plugins/dependencies/lib/dependency_commands.rb +72 -0
- data/plugins/dependencies/lib/dependency_environment.rb +57 -0
- data/plugins/dependencies/lib/dependency_spec.rb +145 -0
- data/plugins/fff/.rspec +1 -0
- data/plugins/fff/Rakefile +14 -2
- data/plugins/fff/examples/fff_example/project.yml +1 -1
- data/plugins/fff/lib/fff.rb +30 -9
- data/plugins/fff/lib/fff_mock_generator.rb +142 -128
- data/plugins/fff/spec/fff_mock_header_generator_spec.rb +15 -0
- data/plugins/fff/spec/fff_mock_source_generator_spec.rb +14 -0
- data/plugins/fff/spec/spec_helper.rb +45 -0
- data/plugins/fff/src/fff_unity_helper.h +5 -0
- data/plugins/fff/vendor/fff/fakegen.rb +5 -4
- data/plugins/fff/vendor/fff/fff.h +4 -4
- data/plugins/gcov/config/defaults.yml +5 -0
- data/plugins/gcov/gcov.rake +12 -8
- data/plugins/gcov/lib/console_reportinator.rb +140 -20
- data/plugins/gcov/lib/gcov.rb +155 -60
- data/plugins/gcov/lib/gcov_constants.rb +4 -7
- data/plugins/gcov/lib/gcov_reportinator.rb +90 -0
- data/plugins/gcov/lib/gcov_types.rb +62 -1
- data/plugins/gcov/lib/gcovr_reportinator.rb +255 -213
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +122 -44
- data/plugins/module_generator/Rakefile +4 -4
- data/plugins/module_generator/config/module_generator.yml +0 -1
- data/plugins/module_generator/example/project.yml +1 -1
- data/plugins/module_generator/lib/module_generator.rb +117 -87
- data/plugins/module_generator/lib/module_generator_options.rb +150 -0
- data/plugins/module_generator/lib/module_generator_project.rb +45 -0
- data/plugins/module_generator/lib/module_generator_request.rb +83 -0
- data/plugins/module_generator/lib/module_generator_test_file.rb +68 -0
- data/plugins/module_generator/lib/module_generator_unity.rb +24 -0
- data/plugins/module_generator/module_generator.rake +24 -46
- data/plugins/report_build_warnings_log/config/defaults.yml +4 -1
- data/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb +47 -55
- data/plugins/report_build_warnings_log/lib/warning_collector.rb +140 -0
- data/plugins/report_build_warnings_log/lib/warning_reports.rb +135 -0
- data/plugins/report_tests_gtestlike_stdout/assets/test_results.template +3 -0
- data/{spec/units/configurator_builder_spec.rb → plugins/report_tests_gtestlike_stdout/config/defaults.yml} +6 -10
- data/plugins/report_tests_gtestlike_stdout/lib/gtestlike_report.rb +168 -0
- data/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb +25 -1
- data/plugins/report_tests_ide_stdout/assets/test_results.template +50 -0
- data/plugins/report_tests_ide_stdout/config/defaults.yml +13 -0
- data/plugins/report_tests_ide_stdout/lib/ide_report_lines.rb +103 -0
- data/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb +12 -4
- data/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb +33 -51
- data/plugins/report_tests_log_factory/lib/html_tests_reporter.rb +286 -295
- data/plugins/report_tests_log_factory/lib/json_tests_reporter.rb +22 -35
- data/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb +91 -133
- data/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb +72 -86
- data/plugins/report_tests_log_factory/lib/tests_reporter.rb +31 -12
- data/plugins/report_tests_pretty_stdout/assets/{template.erb → test_results.template} +8 -8
- data/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb +18 -48
- data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +13 -2
- data/plugins/sanitize/config/defaults.yml +44 -0
- data/plugins/sanitize/config/defaults_sanitize.rb +20 -0
- data/plugins/sanitize/lib/sanitize.rb +174 -0
- data/plugins/sanitize/lib/sanitize_config.rb +110 -0
- data/plugins/sanitize/lib/sanitize_constants.rb +13 -0
- data/plugins/sanitize/lib/sanitize_findings.rb +85 -0
- data/plugins/sanitize/lib/sanitize_records.rb +115 -0
- data/plugins/sanitize/lib/sanitize_reports.rb +135 -0
- data/plugins/sanitize/sanitize.rake +108 -0
- data/plugins/valgrind/config/defaults.yml +7 -1
- data/plugins/valgrind/config/defaults_valgrind.rb +6 -1
- data/plugins/valgrind/lib/valgrind.rb +202 -39
- data/plugins/valgrind/lib/valgrind_constants.rb +4 -0
- data/plugins/valgrind/lib/valgrind_report.rb +52 -0
- data/plugins/valgrind/valgrind.rake +33 -11
- data/site-local/404.html +248 -14
- data/site-local/configuration/environment-vars.html +248 -14
- data/site-local/configuration/global-collections.html +248 -19
- data/site-local/configuration/index.html +249 -15
- data/site-local/configuration/loading.html +260 -22
- data/site-local/configuration/mixins.html +252 -17
- data/site-local/configuration/parallel-builds.html +248 -14
- data/site-local/configuration/project-file.html +275 -30
- data/site-local/configuration/reference/cexception.html +255 -20
- data/site-local/configuration/reference/cmock.html +281 -14
- data/site-local/configuration/reference/defines.html +262 -19
- data/site-local/configuration/reference/environment.html +251 -17
- data/site-local/configuration/reference/extension.html +361 -16
- data/site-local/configuration/reference/files.html +262 -14
- data/site-local/configuration/reference/flags.html +270 -19
- data/site-local/configuration/reference/index.html +248 -14
- data/site-local/configuration/reference/libraries.html +248 -14
- data/site-local/configuration/reference/mixins.html +248 -14
- data/site-local/configuration/reference/partials.html +249 -19
- data/site-local/configuration/reference/paths.html +275 -15
- data/site-local/configuration/reference/plugins.html +248 -14
- data/site-local/configuration/reference/project.html +291 -14
- data/site-local/configuration/reference/release-build.html +256 -14
- data/site-local/configuration/reference/test-build.html +290 -24
- data/site-local/configuration/reference/test-runner.html +288 -17
- data/site-local/configuration/reference/tools.html +254 -14
- data/site-local/configuration/reference/unity.html +280 -15
- data/site-local/configuration/which-ceedling.html +248 -14
- data/site-local/development/index.html +261 -14
- data/site-local/development/plugins/configuration.html +269 -17
- data/site-local/development/plugins/index.html +267 -15
- data/site-local/development/plugins/plugin-subclass.html +906 -154
- data/site-local/development/plugins/rake-tasks.html +276 -14
- data/site-local/development/releases.html +4708 -0
- data/site-local/development/workflow.html +1030 -51
- data/site-local/getting-started/builds.html +4607 -0
- data/site-local/getting-started/command-line.html +418 -34
- data/site-local/getting-started/example-projects/cipher-quest.html +248 -14
- data/site-local/getting-started/example-projects/index.html +249 -15
- data/site-local/getting-started/example-projects/temp-sensor.html +248 -14
- data/site-local/getting-started/example-projects/wondrous-forest.html +248 -14
- data/site-local/getting-started/index.html +255 -14
- data/site-local/getting-started/installation.html +258 -22
- data/site-local/getting-started/quick-start.html +251 -15
- data/site-local/help.html +255 -14
- data/site-local/index.html +292 -22
- data/site-local/overview/build-system.html +249 -15
- data/site-local/overview/index.html +248 -14
- data/site-local/overview/test-environments.html +257 -14
- data/site-local/overview/tools-and-frameworks.html +248 -14
- data/site-local/plugins/beep.html +251 -14
- data/site-local/plugins/bullseye/index.html +5079 -0
- data/site-local/plugins/bullseye/licensing.html +4840 -0
- data/site-local/plugins/command-hooks.html +265 -27
- data/site-local/plugins/compile-commands-json-db.html +256 -17
- data/site-local/plugins/cppcheck.html +1081 -262
- data/site-local/plugins/dependencies.html +934 -242
- data/site-local/plugins/fff.html +297 -16
- data/site-local/plugins/gcov/examples.html +251 -14
- data/site-local/plugins/gcov/gcovr.html +686 -31
- data/site-local/plugins/gcov/index.html +251 -14
- data/site-local/plugins/gcov/overview.html +259 -18
- data/site-local/plugins/gcov/reportgenerator.html +563 -28
- data/site-local/plugins/gcov/reporting.html +348 -100
- data/site-local/plugins/gcov/setup.html +253 -15
- data/site-local/plugins/gcov/tool-versions.html +301 -19
- data/site-local/plugins/gcov/troubleshooting.html +273 -36
- data/site-local/plugins/index.html +294 -36
- data/site-local/plugins/module-generator.html +779 -195
- data/site-local/plugins/report-build-warnings-log.html +578 -33
- data/site-local/plugins/report-tests-gtestlike-stdout.html +467 -84
- data/site-local/plugins/report-tests-ide-stdout.html +654 -51
- data/site-local/plugins/report-tests-log-factory.html +337 -70
- data/site-local/plugins/report-tests-pretty-stdout.html +251 -14
- data/site-local/plugins/report-tests-raw-output-log.html +251 -14
- data/site-local/plugins/report-tests-teamcity-stdout.html +251 -14
- data/site-local/plugins/sanitize.html +5332 -0
- data/site-local/plugins/valgrind.html +416 -26
- data/site-local/{plugins/bullseye.html → project/index.html} +297 -217
- data/site-local/project/release-history.html +251 -17
- data/site-local/project/sbom.html +4726 -0
- data/site-local/project/upgrade.html +250 -16
- data/site-local/reference/build-directives.html +257 -14
- data/site-local/reference/command-line.html +373 -16
- data/site-local/reference/environment-vars.html +248 -14
- data/site-local/reference/gcov-plugin.html +492 -18
- data/site-local/reference/global-collections.html +249 -15
- data/site-local/reference/index.html +248 -14
- data/site-local/reference/partials-macros.html +258 -14
- data/site-local/reference/project-configuration.html +248 -14
- data/site-local/sitemap.xml.gz +0 -0
- data/site-local/snapshot/assets/{project.yml → features/project.yml} +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +248 -14
- data/site-local/snapshot/examples/temp_sensor/index.html +248 -14
- data/site-local/snapshot/examples/wondrous_forest/index.html +265 -25
- data/site-local/snapshot/plugins/bullseye/config/defaults.yml +24 -0
- data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/site-local/snapshot/plugins/gcov/config/defaults.yml +5 -0
- data/site-local/testing-guide/build-directives.html +332 -22
- data/site-local/testing-guide/conventions.html +678 -153
- data/site-local/testing-guide/frameworks.html +248 -14
- data/site-local/testing-guide/index.html +248 -21
- data/site-local/testing-guide/partials/configuration.html +248 -14
- data/site-local/testing-guide/partials/conventions.html +316 -17
- data/site-local/testing-guide/partials/directives.html +456 -48
- data/site-local/testing-guide/partials/example.html +248 -14
- data/site-local/testing-guide/partials/index.html +255 -14
- data/site-local/testing-guide/partials/overview.html +248 -14
- data/site-local/testing-guide/partials/variables.html +248 -14
- data/site-local/testing-guide/test-cases.html +248 -14
- data/site-local/testing-guide/test-sample.html +248 -14
- data/site-local/testing-guide/test-suite-anatomy.html +248 -14
- data/spec/integration/actionator_file_operations_spec.rb +287 -0
- data/spec/integration/analysis_tool_output_spec.rb +204 -0
- data/spec/{units/c_extractor/c_extractor_integration_spec.rb → integration/c_extractor_composition_spec.rb} +196 -17
- data/spec/integration/command_hooks_plugin_spec.rb +152 -0
- data/spec/integration/compile_commands_json_db_spec.rb +76 -0
- data/spec/integration/configurator_pipeline_spec.rb +180 -0
- data/spec/integration/configurator_plugins_spec.rb +122 -0
- data/spec/integration/configurator_validation_spec.rb +98 -0
- data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +396 -0
- data/spec/integration/dependencies/dependency_tracker_core_spec.rb +244 -0
- data/spec/integration/dependencies/dependency_tracker_diagnose_spec.rb +224 -0
- data/spec/integration/dependencies/dependency_tracker_filename_handling_spec.rb +118 -0
- data/spec/integration/dependencies/dependency_tracker_gcc_deps_spec.rb +199 -0
- data/spec/integration/dependencies/dependency_tracker_pruning_spec.rb +167 -0
- data/spec/integration/dependencies_plugin_spec.rb +473 -0
- data/spec/integration/erb_dependency_removed_spec.rb +167 -0
- data/spec/integration/includes_extraction_spec.rb +612 -0
- data/spec/integration/mixin_loading_spec.rb +414 -0
- data/spec/integration/module_generator_spec.rb +436 -0
- data/spec/integration/partials_fallback_preprocessing_spec.rb +316 -0
- data/spec/integration/partials_header_composition_spec.rb +889 -0
- data/spec/integration/partials_module_resolution_spec.rb +372 -0
- data/spec/integration/partials_symbol_linkage_spec.rb +371 -0
- data/spec/integration/preprocessing_transient_io_retry_spec.rb +135 -0
- data/spec/integration/quote_include_isolator_spec.rb +167 -0
- data/spec/integration/report_build_warnings_log_spec.rb +170 -0
- data/spec/integration/report_tests_log_factory_spec.rb +100 -0
- data/spec/integration/sanitizer_exclusions_spec.rb +126 -0
- data/spec/integration/system_harness_sanitizers_spec.rb +104 -0
- data/spec/integration/test_build_parallel_barrier_spec.rb +89 -0
- data/spec/integration/test_executable_manifest_spec.rb +118 -0
- data/spec/integration/test_includes_extractinator_spec.rb +293 -0
- data/spec/integration/tool_executor_spec.rb +224 -0
- data/spec/integration/tool_validator_spec.rb +133 -0
- data/spec/integration/vendor_copy_transient_io_retry_spec.rb +130 -0
- data/spec/manual/stress_test.rb +1 -1
- data/spec/support/config_yaml_helper.rb +17 -0
- data/spec/support/fixtures/sanitizer_reports/clang_asan_heap.txt +45 -0
- data/spec/support/fixtures/sanitizer_reports/clang_ubsan_shift.txt +5 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_heap.txt +47 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_leak.txt +10 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_segv.txt +6 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_ubsan_shift.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__all_pass.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_branches_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_functions_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_none.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__empty.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__gcov_context.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__mixed_all.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_matching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_multiline.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_nonmatching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_with_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__stdout_only.txt +6 -0
- data/spec/support/fixtures/templates/ide__all_pass.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_branches_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_functions_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_none.txt +10 -0
- data/spec/support/fixtures/templates/ide__empty.txt +8 -0
- data/spec/support/fixtures/templates/ide__gcov_context.txt +28 -0
- data/spec/support/fixtures/templates/ide__mixed_all.txt +29 -0
- data/spec/support/fixtures/templates/ide__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/ide__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__stdout_only.txt +16 -0
- data/spec/support/fixtures/templates/pretty__all_pass.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_branches_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_functions_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_none.txt +8 -0
- data/spec/support/fixtures/templates/pretty__empty.txt +6 -0
- data/spec/support/fixtures/templates/pretty__gcov_context.txt +31 -0
- data/spec/support/fixtures/templates/pretty__mixed_all.txt +35 -0
- data/spec/support/fixtures/templates/pretty__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/pretty__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__stdout_only.txt +15 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.log +51 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.xml +182 -0
- data/spec/support/include_guard_helper.rb +20 -0
- data/spec/support/integration/configurator_integration_helper.rb +159 -0
- data/spec/support/integration/dependency_tracker_integration_helper.rb +136 -0
- data/spec/support/integration/partials_generation_integration_helper.rb +726 -0
- data/spec/support/integration/spec_integration_helper.rb +285 -0
- data/spec/support/integration/test_includes_harness.rb +259 -0
- data/spec/support/integration/tool_executor_integration_helper.rb +55 -0
- data/spec/support/spec_helper.rb +41 -0
- data/spec/support/system/sanitizers/asan_ubsan.yml +82 -0
- data/spec/support/system/sanitizers/asan_ubsan_leaks.yml +57 -0
- data/spec/support/system/simplecov_boot.rb +66 -0
- data/spec/support/system/spec_system_helper.rb +376 -16
- data/spec/support/system/system_context.rb +181 -59
- data/spec/support/template_render_cases.rb +166 -0
- data/spec/system/bracket_path_handling_spec.rb +175 -0
- data/spec/system/build_output_mirroring_spec.rb +89 -0
- data/spec/system/build_recovery_spec.rb +382 -0
- data/spec/system/bullseye_deployment_spec.rb +102 -0
- data/spec/system/cli_surface_spec.rb +245 -0
- data/spec/system/command_hooks_spec.rb +117 -0
- data/spec/system/conditional_include_macro_visibility_spec.rb +32 -124
- data/spec/system/conditional_mock_includes_spec.rb +181 -0
- data/spec/system/cppcheck_deployment_spec.rb +26 -8
- data/spec/system/delta_builds_spec.rb +751 -0
- data/spec/system/deployment_as_gem_spec.rb +7 -0
- data/spec/system/deployment_as_vendor_spec.rb +29 -145
- data/spec/system/dumpconfig_spec.rb +137 -0
- data/spec/system/encoding_stress_spec.rb +7 -4
- data/spec/system/example_cipher_quest_spec.rb +25 -100
- data/spec/system/example_temp_sensor_spec.rb +30 -172
- data/spec/system/example_wondrous_forest_spec.rb +25 -62
- data/spec/system/extension_multiple_values_spec.rb +75 -0
- data/spec/system/files_paths_reporting_spec.rb +154 -0
- data/spec/system/gcov_deployment_spec.rb +72 -3
- data/spec/system/header_include_path_validation_spec.rb +222 -0
- data/spec/system/implicit_source_header_correspondence_disambiguation_spec.rb +100 -0
- data/spec/system/include_path_reconciliation_spec.rb +64 -0
- data/spec/system/mixin_ordering_spec.rb +30 -415
- data/spec/system/mocks_partials_configuration_validation_spec.rb +126 -0
- data/spec/system/parent_directory_reference_spec.rb +114 -0
- data/spec/system/partials_module_disambiguation_spec.rb +143 -0
- data/spec/system/pinned_thread_count_spec.rb +102 -0
- data/spec/system/plugin_delta_builds_spec.rb +179 -0
- data/spec/system/preprocessing_encoding_spec.rb +87 -4
- data/spec/system/preprocessing_fallback_conditionals_spec.rb +19 -25
- data/spec/system/preprocessing_parameterized_tests_spec.rb +2 -2
- data/spec/system/rake_release_task_path_disambiguation_spec.rb +97 -0
- data/spec/system/rake_test_task_path_disambiguation_spec.rb +118 -0
- data/spec/system/report_and_tooling_plugins_spec.rb +327 -0
- data/spec/system/ruby_replacement_spec.rb +1 -1
- data/spec/system/same_named_modules_spec.rb +115 -0
- data/spec/system/sanitize_deployment_spec.rb +64 -0
- data/spec/system/shuffle_tests_spec.rb +139 -0
- data/spec/system/sibling_header_collision_spec.rb +620 -0
- data/spec/system/subdir_include_preservation_spec.rb +63 -0
- data/spec/system/support/bullseye_common_test_cases.rb +369 -0
- data/spec/system/support/bullseye_helpers.rb +70 -0
- data/spec/system/support/common_test_cases.rb +167 -43
- data/spec/system/support/cppcheck_common_test_cases.rb +80 -0
- data/spec/system/support/cppcheck_helpers.rb +10 -8
- data/spec/system/support/gcov_common_test_cases.rb +173 -37
- data/spec/system/support/gcov_helpers.rb +3 -3
- data/spec/system/support/gcov_partials_test_cases.rb +48 -2
- data/spec/system/support/sanitize_common_test_cases.rb +222 -0
- data/spec/system/support/sanitize_helpers.rb +27 -0
- data/spec/system/support/valgrind_common_test_cases.rb +116 -16
- data/spec/system/support/valgrind_helpers.rb +3 -4
- data/spec/system/test_pipeline_stop_points_spec.rb +160 -0
- data/spec/system/test_runner_system_include_spec.rb +19 -41
- data/spec/system/test_source_file_directive_spec.rb +235 -0
- data/spec/system/upgrade_as_vendor_spec.rb +25 -46
- data/spec/system/valgrind_deployment_spec.rb +41 -0
- data/spec/units/batchinator_spec.rb +314 -0
- data/spec/units/bin/actionator_spec.rb +412 -0
- data/spec/units/bin/app_cfg_spec.rb +90 -0
- data/spec/units/bin/cli_handler_spec.rb +204 -0
- data/spec/units/bin/cli_helper_spec.rb +238 -10
- data/spec/units/bin/cli_options_transform_spec.rb +49 -0
- data/spec/units/bin/composinator_spec.rb +236 -0
- data/spec/units/bin/{projectinator_mixin_spec.rb → mixin_resolvinator_spec.rb} +122 -83
- data/spec/units/bin/mixin_standardizer_spec.rb +4 -3
- data/spec/units/bin/mixinator_spec.rb +58 -22
- data/spec/units/bin/path_validator_spec.rb +112 -0
- data/spec/units/bin/projectinator_spec.rb +223 -0
- data/spec/units/bin/rake_patches_spec.rb +52 -0
- data/spec/units/bin/recursive_merger_spec.rb +22 -0
- data/spec/units/bin/versionator_spec.rb +104 -0
- data/spec/units/c_extractor/c_extractor_code_text_spec.rb +4 -4
- data/spec/units/c_extractor/c_extractor_declarations_spec.rb +70 -0
- data/spec/units/c_extractor/c_extractor_functions_spec.rb +75 -1
- data/spec/units/c_extractor/c_extractor_preprocessing_spec.rb +158 -0
- data/spec/units/c_extractor/c_extractor_spec.rb +236 -6
- data/spec/units/ceedling/templateinator_golden_spec.rb +84 -0
- data/spec/units/ceedling/templateinator_spec.rb +188 -0
- data/spec/units/config/configurator_builder_spec.rb +444 -0
- data/spec/units/config/configurator_plugins_spec.rb +160 -0
- data/spec/units/config/configurator_setup_spec.rb +706 -6
- data/spec/units/config/configurator_spec.rb +952 -0
- data/spec/units/config/configurator_validator_spec.rb +259 -0
- data/spec/units/config/line_marker_suppressors_spec.rb +89 -0
- data/spec/units/config_matchinator_spec.rb +103 -0
- data/spec/units/defineinator_spec.rb +158 -0
- data/spec/units/dependencies/dependency_cache_store_spec.rb +364 -0
- data/spec/units/dependencies/dependency_debug_tree_spec.rb +189 -0
- data/spec/units/dependencies/dependency_differ_spec.rb +139 -0
- data/spec/units/dependencies/dependency_hasher_spec.rb +141 -0
- data/spec/units/dependencies/dependency_path_normalizer_spec.rb +111 -0
- data/spec/units/dependencies/dependency_tracker_spec.rb +905 -0
- data/spec/units/dependencies/dependinator_spec.rb +99 -0
- data/spec/units/dependencies/gcc_dependency_parser_spec.rb +152 -0
- data/spec/units/encodinator_spec.rb +92 -0
- data/spec/units/file_finder_helper_spec.rb +99 -15
- data/spec/units/file_finder_spec.rb +495 -0
- data/spec/units/file_path_collection_utils_spec.rb +9 -0
- data/spec/units/file_path_utils_spec.rb +736 -0
- data/spec/units/file_wrapper_spec.rb +447 -0
- data/spec/units/filename_extension_spec.rb +120 -0
- data/spec/units/flaginator_spec.rb +114 -0
- data/spec/units/generators/generator_helper_spec.rb +113 -0
- data/spec/units/generators/generator_mocks_spec.rb +131 -0
- data/spec/units/generators/generator_partials_spec.rb +366 -77
- data/spec/units/generators/generator_spec.rb +317 -0
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +169 -9
- data/spec/units/generators/generator_test_results_sanity_checker_spec.rb +14 -6
- data/spec/units/generators/generator_test_results_spec.rb +65 -8
- data/spec/units/generators/generator_test_runner_spec.rb +1 -1
- data/spec/units/includes/include_factory_spec.rb +53 -0
- data/spec/units/includes/include_pathinator_spec.rb +269 -0
- data/spec/units/includes/include_spec.rb +8 -4
- data/spec/units/includes/includes_spec.rb +326 -18
- data/spec/units/mock_locator_spec.rb +74 -0
- data/spec/units/parsing_parcels_spec.rb +65 -0
- data/spec/units/partials/partializer_config_spec.rb +284 -18
- data/spec/units/partials/partializer_helper_spec.rb +122 -0
- data/spec/units/partials/partializer_spec.rb +474 -36
- data/spec/units/partials/partializer_utils_spec.rb +4 -4
- data/spec/units/partials_manager_spec.rb +539 -0
- data/spec/units/path_matcher_spec.rb +193 -0
- data/spec/units/path_mirror_spec.rb +103 -0
- data/spec/units/plugin_manager_spec.rb +77 -0
- data/spec/units/plugin_reportinator_spec.rb +78 -3
- data/spec/units/plugins/bullseye_spec.rb +1068 -0
- data/spec/units/plugins/command_hooks_spec.rb +157 -0
- data/spec/units/plugins/compile_commands_json_db_spec.rb +145 -0
- data/spec/units/plugins/console_reportinator_spec.rb +370 -0
- data/spec/units/plugins/cppcheck_spec.rb +330 -4
- data/spec/units/plugins/cppunit_tests_reporter_spec.rb +118 -0
- data/spec/units/plugins/dependencies_spec.rb +295 -0
- data/spec/units/plugins/dependency_commands_spec.rb +83 -0
- data/spec/units/plugins/dependency_environment_spec.rb +64 -0
- data/spec/units/plugins/dependency_spec_spec.rb +170 -0
- data/spec/units/plugins/gcov_reportinator_spec.rb +272 -0
- data/spec/units/plugins/gcov_spec.rb +521 -0
- data/spec/units/plugins/gcovr_reportinator_spec.rb +795 -0
- data/spec/units/plugins/gtestlike_report_spec.rb +363 -0
- data/spec/units/plugins/html_tests_reporter_spec.rb +158 -0
- data/spec/units/plugins/ide_report_lines_spec.rb +229 -0
- data/spec/units/plugins/json_tests_reporter_spec.rb +87 -0
- data/spec/units/plugins/junit_tests_reporter_spec.rb +237 -0
- data/spec/units/plugins/module_generator_options_spec.rb +185 -0
- data/spec/units/plugins/module_generator_project_spec.rb +55 -0
- data/spec/units/plugins/module_generator_request_spec.rb +107 -0
- data/spec/units/plugins/module_generator_spec.rb +214 -0
- data/spec/units/plugins/module_generator_test_file_spec.rb +102 -0
- data/spec/units/plugins/module_generator_unity_spec.rb +37 -0
- data/spec/units/plugins/report_build_warnings_log_spec.rb +199 -0
- data/spec/units/plugins/report_log_writer_plugin_spec.rb +94 -0
- data/spec/units/plugins/report_tests_gtestlike_stdout_spec.rb +274 -0
- data/spec/units/plugins/report_tests_ide_stdout_spec.rb +140 -0
- data/spec/units/plugins/report_tests_log_factory_spec.rb +210 -0
- data/spec/units/plugins/report_tests_pretty_stdout_spec.rb +83 -0
- data/spec/units/plugins/report_tests_raw_output_log_spec.rb +98 -0
- data/spec/units/plugins/report_tests_stdout_plugin_spec.rb +145 -0
- data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +121 -0
- data/spec/units/plugins/reportgenerator_reportinator_spec.rb +410 -0
- data/spec/units/plugins/sanitize_config_spec.rb +119 -0
- data/spec/units/plugins/sanitize_findings_spec.rb +69 -0
- data/spec/units/plugins/sanitize_records_spec.rb +114 -0
- data/spec/units/plugins/sanitize_reports_spec.rb +84 -0
- data/spec/units/plugins/sanitize_spec.rb +300 -0
- data/spec/units/plugins/tests_reporter_spec.rb +89 -0
- data/spec/units/plugins/valgrind_spec.rb +560 -0
- data/spec/units/plugins/warning_collector_spec.rb +185 -0
- data/spec/units/plugins/warning_reports_spec.rb +150 -0
- data/spec/units/preprocess/c_comment_scanner_spec.rb +17 -17
- data/spec/units/preprocess/c_preprocessor_conditionals_spec.rb +94 -0
- data/spec/units/preprocess/preprocessinator_bare_includes_extractor_spec.rb +73 -0
- data/spec/units/preprocess/preprocessinator_code_finder_spec.rb +35 -16
- data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +129 -48
- data/spec/units/preprocess/preprocessinator_file_assembler_spec.rb +292 -9
- data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +294 -16
- data/spec/units/preprocess/preprocessinator_line_marker_includes_extractor_spec.rb +356 -6
- data/spec/units/preprocess/preprocessinator_reconstructor_spec.rb +58 -4
- data/spec/units/preprocess/preprocessinator_spec.rb +693 -5
- data/spec/units/quote_include_isolator_spec.rb +176 -0
- data/spec/units/rake_app/rake_invocation_tracker_spec.rb +94 -0
- data/spec/units/rake_app/rake_task_registry_spec.rb +263 -0
- data/spec/units/rake_app/rake_utils_spec.rb +54 -0
- data/spec/units/rake_app/rake_wrapper_spec.rb +64 -0
- data/spec/units/rake_app/rakefile_component_resolver_spec.rb +182 -0
- data/spec/units/release_build_executor_spec.rb +404 -0
- data/spec/units/release_build_planner_spec.rb +144 -0
- data/spec/units/release_invoker_spec.rb +127 -0
- data/spec/units/reportinator_spec.rb +35 -0
- data/spec/units/ruby_expandinator_spec.rb +36 -0
- data/spec/units/standin_headerinator_spec.rb +168 -0
- data/spec/units/system_wrapper_spec.rb +16 -0
- data/spec/units/test_build_executor_spec.rb +1653 -8
- data/spec/units/test_build_planner_spec.rb +878 -0
- data/spec/units/test_build_setup_spec.rb +583 -0
- data/spec/units/test_context_extractor_spec.rb +51 -3
- data/spec/units/test_file_preprocessinator_spec.rb +206 -0
- data/spec/units/test_includes_extractinator_spec.rb +764 -0
- data/spec/units/test_invoker/objects_wiring_spec.rb +31 -0
- data/spec/units/test_invoker_spec.rb +147 -0
- data/spec/units/test_invoker_types_spec.rb +182 -0
- data/spec/units/test_pipeline_helpers_spec.rb +100 -0
- data/spec/units/test_pipeline_manager_spec.rb +415 -0
- data/spec/units/test_runner_generatinator_spec.rb +215 -0
- data/spec/units/test_runner_manager_spec.rb +70 -0
- data/spec/units/test_search_paths_spec.rb +84 -0
- data/spec/units/test_source_file_directive_resolver_spec.rb +239 -0
- data/spec/units/tool_executor_helper_spec.rb +1 -1
- data/spec/units/tool_executor_spec.rb +571 -2
- data/spec/units/tool_validator_spec.rb +303 -24
- data/spec/units/version_spec.rb +74 -0
- data/spec/units/yaml_wrapper_spec.rb +4 -1
- data/vendor/cmock/docs/CMock_Summary.md +11 -0
- data/vendor/cmock/lib/cmock_config.rb +1 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +31 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +8 -2
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +2 -2
- data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +7 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +4 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
- data/vendor/cmock/vendor/unity/test/Makefile +9 -2
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/cmock/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/cmock/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +78 -0
- data/vendor/cmock/vendor/unity/test/tests/test_unity_test_summary.rb +58 -0
- data/vendor/diy/lib/diy/factory.rb +5 -4
- data/vendor/diy/lib/diy.rb +5 -4
- data/vendor/diy/sample_code/car.rb +5 -4
- data/vendor/diy/sample_code/chassis.rb +5 -4
- data/vendor/diy/sample_code/diy_example.rb +5 -4
- data/vendor/diy/sample_code/engine.rb +5 -4
- data/vendor/diy/sample_code/objects.yml +5 -4
- data/vendor/diy/test/constructor.rb +5 -4
- data/vendor/diy/test/diy_test.rb +5 -4
- data/vendor/diy/test/factory_test.rb +5 -4
- data/vendor/diy/test/files/broken_construction.yml +5 -4
- data/vendor/diy/test/files/cat/cat.rb +5 -4
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -4
- data/vendor/diy/test/files/cat/heritage.rb +5 -4
- data/vendor/diy/test/files/cat/needs_input.yml +5 -4
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +5 -4
- data/vendor/diy/test/files/dog/dog_model.rb +5 -4
- data/vendor/diy/test/files/dog/dog_presenter.rb +5 -4
- data/vendor/diy/test/files/dog/dog_view.rb +5 -4
- data/vendor/diy/test/files/dog/file_resolver.rb +5 -4
- data/vendor/diy/test/files/dog/other_thing.rb +5 -4
- data/vendor/diy/test/files/dog/simple.yml +5 -4
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +5 -4
- data/vendor/diy/test/files/donkey/foo.rb +5 -4
- data/vendor/diy/test/files/factory/beef.rb +5 -4
- data/vendor/diy/test/files/factory/dog.rb +5 -4
- data/vendor/diy/test/files/factory/factory.yml +5 -4
- data/vendor/diy/test/files/factory/farm/llama.rb +5 -4
- data/vendor/diy/test/files/factory/farm/pork.rb +5 -4
- data/vendor/diy/test/files/factory/kitten.rb +5 -4
- data/vendor/diy/test/files/fud/objects.yml +5 -4
- data/vendor/diy/test/files/fud/toy.rb +5 -4
- data/vendor/diy/test/files/functions/attached_things_builder.rb +5 -4
- data/vendor/diy/test/files/functions/invalid_method.yml +5 -4
- data/vendor/diy/test/files/functions/method_extractor.rb +5 -4
- data/vendor/diy/test/files/functions/nonsingleton_objects.yml +5 -4
- data/vendor/diy/test/files/functions/objects.yml +5 -4
- data/vendor/diy/test/files/functions/thing.rb +5 -4
- data/vendor/diy/test/files/functions/thing_builder.rb +5 -4
- data/vendor/diy/test/files/functions/things_builder.rb +5 -4
- data/vendor/diy/test/files/gnu/objects.yml +5 -4
- data/vendor/diy/test/files/gnu/thinger.rb +5 -4
- data/vendor/diy/test/files/goat/base.rb +5 -4
- data/vendor/diy/test/files/goat/can.rb +5 -4
- data/vendor/diy/test/files/goat/goat.rb +5 -4
- data/vendor/diy/test/files/goat/objects.yml +5 -4
- data/vendor/diy/test/files/goat/paper.rb +5 -4
- data/vendor/diy/test/files/goat/plane.rb +5 -4
- data/vendor/diy/test/files/goat/shirt.rb +5 -4
- data/vendor/diy/test/files/goat/wings.rb +5 -4
- data/vendor/diy/test/files/horse/holder_thing.rb +5 -4
- data/vendor/diy/test/files/horse/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/animal/bird.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/cat.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +5 -4
- data/vendor/diy/test/files/namespace/bad_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/class_name_combine.yml +5 -4
- data/vendor/diy/test/files/namespace/no_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/road.rb +5 -4
- data/vendor/diy/test/files/namespace/sky.rb +5 -4
- data/vendor/diy/test/files/namespace/subcontext.yml +5 -4
- data/vendor/diy/test/files/non_singleton/air.rb +5 -4
- data/vendor/diy/test/files/non_singleton/fat_cat.rb +5 -4
- data/vendor/diy/test/files/non_singleton/objects.yml +5 -4
- data/vendor/diy/test/files/non_singleton/pig.rb +5 -4
- data/vendor/diy/test/files/non_singleton/thread_spinner.rb +5 -4
- data/vendor/diy/test/files/non_singleton/tick.rb +5 -4
- data/vendor/diy/test/files/non_singleton/yard.rb +5 -4
- data/vendor/diy/test/files/yak/core_model.rb +5 -4
- data/vendor/diy/test/files/yak/core_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/core_view.rb +5 -4
- data/vendor/diy/test/files/yak/data_source.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_model.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_view.rb +5 -4
- data/vendor/diy/test/files/yak/giant_squid.rb +5 -4
- data/vendor/diy/test/files/yak/krill.rb +5 -4
- data/vendor/diy/test/files/yak/my_objects.yml +5 -4
- data/vendor/diy/test/files/yak/sub_sub_context_test.yml +5 -4
- data/vendor/diy/test/test_helper.rb +5 -4
- data/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/unity/auto/generate_test_runner.rb +5 -1
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/unity/test/tests/test_generate_test_runner.rb +29 -0
- metadata +770 -285
- data/assets/tests_with_fallback_conditionals/src/conditional_module.c +0 -18
- data/bin/actions_wrapper.rb +0 -51
- data/docs/mkdocs/assets/images/ceedling-logo-circle.png +0 -0
- data/docs/mkdocs/assets/images/ceedling.svg +0 -90
- data/docs/mkdocs/assets/images/favicon.png +0 -0
- data/docs/mkdocs/assets/stylesheets/admonitions.css +0 -152
- data/docs/mkdocs/assets/stylesheets/fixes-local.css +0 -15
- data/docs/mkdocs/assets/stylesheets/styling.css +0 -102
- data/docs/mkdocs/configuration/environment-vars.md +0 -14
- data/docs/mkdocs/configuration/global-collections.md +0 -156
- data/docs/mkdocs/configuration/index.md +0 -75
- data/docs/mkdocs/configuration/loading.md +0 -89
- data/docs/mkdocs/configuration/mixins.md +0 -607
- data/docs/mkdocs/configuration/parallel-builds.md +0 -97
- data/docs/mkdocs/configuration/project-file.md +0 -216
- data/docs/mkdocs/configuration/reference/cexception.md +0 -35
- data/docs/mkdocs/configuration/reference/cmock.md +0 -106
- data/docs/mkdocs/configuration/reference/defines.md +0 -352
- data/docs/mkdocs/configuration/reference/environment.md +0 -55
- data/docs/mkdocs/configuration/reference/extension.md +0 -63
- data/docs/mkdocs/configuration/reference/files.md +0 -154
- data/docs/mkdocs/configuration/reference/flags.md +0 -296
- data/docs/mkdocs/configuration/reference/index.md +0 -176
- data/docs/mkdocs/configuration/reference/libraries.md +0 -82
- data/docs/mkdocs/configuration/reference/mixins.md +0 -24
- data/docs/mkdocs/configuration/reference/partials.md +0 -38
- data/docs/mkdocs/configuration/reference/paths.md +0 -276
- data/docs/mkdocs/configuration/reference/plugins.md +0 -60
- data/docs/mkdocs/configuration/reference/project.md +0 -333
- data/docs/mkdocs/configuration/reference/release-build.md +0 -62
- data/docs/mkdocs/configuration/reference/test-build.md +0 -55
- data/docs/mkdocs/configuration/reference/test-runner.md +0 -61
- data/docs/mkdocs/configuration/reference/tools.md +0 -457
- data/docs/mkdocs/configuration/reference/unity.md +0 -49
- data/docs/mkdocs/configuration/which-ceedling.md +0 -77
- data/docs/mkdocs/development/index.md +0 -50
- data/docs/mkdocs/development/plugins/configuration.md +0 -164
- data/docs/mkdocs/development/plugins/index.md +0 -84
- data/docs/mkdocs/development/plugins/plugin-subclass.md +0 -513
- data/docs/mkdocs/development/plugins/rake-tasks.md +0 -54
- data/docs/mkdocs/development/workflow.md +0 -284
- data/docs/mkdocs/getting-started/command-line.md +0 -477
- data/docs/mkdocs/getting-started/example-projects/cipher-quest.md +0 -65
- data/docs/mkdocs/getting-started/example-projects/index.md +0 -49
- data/docs/mkdocs/getting-started/example-projects/temp-sensor.md +0 -60
- data/docs/mkdocs/getting-started/example-projects/wondrous-forest.md +0 -45
- data/docs/mkdocs/getting-started/index.md +0 -41
- data/docs/mkdocs/getting-started/installation.md +0 -179
- data/docs/mkdocs/getting-started/quick-start.md +0 -86
- data/docs/mkdocs/help.md +0 -49
- data/docs/mkdocs/index.md +0 -222
- data/docs/mkdocs/overview/build-system.md +0 -115
- data/docs/mkdocs/overview/index.md +0 -29
- data/docs/mkdocs/overview/test-environments.md +0 -33
- data/docs/mkdocs/overview/tools-and-frameworks.md +0 -115
- data/docs/mkdocs/plugins/beep.md +0 -134
- data/docs/mkdocs/plugins/bullseye.md +0 -83
- data/docs/mkdocs/plugins/command-hooks.md +0 -268
- data/docs/mkdocs/plugins/compile-commands-json-db.md +0 -42
- data/docs/mkdocs/plugins/cppcheck.md +0 -377
- data/docs/mkdocs/plugins/dependencies.md +0 -310
- data/docs/mkdocs/plugins/fff.md +0 -247
- data/docs/mkdocs/plugins/gcov/examples.md +0 -92
- data/docs/mkdocs/plugins/gcov/gcovr.md +0 -412
- data/docs/mkdocs/plugins/gcov/index.md +0 -74
- data/docs/mkdocs/plugins/gcov/overview.md +0 -145
- data/docs/mkdocs/plugins/gcov/reportgenerator.md +0 -140
- data/docs/mkdocs/plugins/gcov/reporting.md +0 -147
- data/docs/mkdocs/plugins/gcov/setup.md +0 -232
- data/docs/mkdocs/plugins/gcov/tool-versions.md +0 -60
- data/docs/mkdocs/plugins/gcov/troubleshooting.md +0 -78
- data/docs/mkdocs/plugins/index.md +0 -261
- data/docs/mkdocs/plugins/module-generator.md +0 -267
- data/docs/mkdocs/plugins/report-build-warnings-log.md +0 -42
- data/docs/mkdocs/plugins/report-tests-gtestlike-stdout.md +0 -98
- data/docs/mkdocs/plugins/report-tests-ide-stdout.md +0 -63
- data/docs/mkdocs/plugins/report-tests-log-factory.md +0 -454
- data/docs/mkdocs/plugins/report-tests-pretty-stdout.md +0 -56
- data/docs/mkdocs/plugins/report-tests-raw-output-log.md +0 -52
- data/docs/mkdocs/plugins/report-tests-teamcity-stdout.md +0 -96
- data/docs/mkdocs/plugins/sample_html_report.png +0 -0
- data/docs/mkdocs/plugins/valgrind.md +0 -198
- data/docs/mkdocs/project/release-history.md +0 -61
- data/docs/mkdocs/project/upgrade.md +0 -85
- data/docs/mkdocs/reference/build-directives.md +0 -37
- data/docs/mkdocs/reference/command-line.md +0 -323
- data/docs/mkdocs/reference/environment-vars.md +0 -60
- data/docs/mkdocs/reference/gcov-plugin.md +0 -600
- data/docs/mkdocs/reference/global-collections.md +0 -160
- data/docs/mkdocs/reference/index.md +0 -65
- data/docs/mkdocs/reference/partials-macros.md +0 -79
- data/docs/mkdocs/reference/project-configuration.md +0 -46
- data/docs/mkdocs/snapshot/assets/project.yml +0 -404
- data/docs/mkdocs/snapshot/examples/cipher_quest/README.md +0 -210
- data/docs/mkdocs/snapshot/examples/temp_sensor/README.md +0 -283
- data/docs/mkdocs/snapshot/examples/wondrous_forest/README.md +0 -92
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -32
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults_gcov.rb +0 -136
- data/docs/mkdocs/snapshot.yml +0 -20
- data/docs/mkdocs/testing-guide/build-directives.md +0 -153
- data/docs/mkdocs/testing-guide/conventions.md +0 -616
- data/docs/mkdocs/testing-guide/frameworks.md +0 -192
- data/docs/mkdocs/testing-guide/index.md +0 -80
- data/docs/mkdocs/testing-guide/partials/configuration.md +0 -67
- data/docs/mkdocs/testing-guide/partials/conventions.md +0 -68
- data/docs/mkdocs/testing-guide/partials/directives.md +0 -212
- data/docs/mkdocs/testing-guide/partials/example.md +0 -149
- data/docs/mkdocs/testing-guide/partials/index.md +0 -88
- data/docs/mkdocs/testing-guide/partials/overview.md +0 -81
- data/docs/mkdocs/testing-guide/partials/variables.md +0 -244
- data/docs/mkdocs/testing-guide/test-cases.md +0 -194
- data/docs/mkdocs/testing-guide/test-sample.md +0 -94
- data/docs/mkdocs/testing-guide/test-suite-anatomy.md +0 -58
- data/lib/ceedling/cacheinator.rb +0 -53
- data/lib/ceedling/cacheinator_helper.rb +0 -60
- data/lib/ceedling/dependinator.rb +0 -31
- data/lib/ceedling/makefile.rb +0 -52
- data/lib/ceedling/release_invoker.rb +0 -112
- data/lib/ceedling/rules_release.rake +0 -109
- data/lib/ceedling/rules_tests.rake +0 -40
- data/lib/ceedling/tasks_release.rake +0 -36
- data/plugins/fff/vendor/fff/Makefile +0 -10
- data/plugins/fff/vendor/fff/buildandtest +0 -15
- data/plugins/fff/vendor/fff/examples/Makefile +0 -7
- data/plugins/fff/vendor/fff/examples/driver_testing/Makefile +0 -64
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.c +0 -32
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.h +0 -21
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp +0 -58
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp +0 -70
- data/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h +0 -25
- data/plugins/fff/vendor/fff/examples/driver_testing/registers.h +0 -23
- data/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h +0 -27
- data/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt +0 -25
- data/plugins/fff/vendor/fff/examples/embedded_ui/Makefile +0 -67
- data/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h +0 -31
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.c +0 -56
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.h +0 -22
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c +0 -191
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp +0 -144
- data/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c +0 -42
- data/plugins/fff/vendor/fff/gtest/Makefile +0 -22
- data/plugins/fff/vendor/fff/gtest/gtest-all.cc +0 -9118
- data/plugins/fff/vendor/fff/gtest/gtest-main.cc +0 -6
- data/plugins/fff/vendor/fff/gtest/gtest.h +0 -19547
- data/plugins/fff/vendor/fff/test/Makefile +0 -81
- data/plugins/fff/vendor/fff/test/c_test_framework.h +0 -25
- data/plugins/fff/vendor/fff/test/fff_test_c.c +0 -116
- data/plugins/fff/vendor/fff/test/fff_test_cpp.cpp +0 -53
- data/plugins/fff/vendor/fff/test/fff_test_global_c.c +0 -84
- data/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp +0 -31
- data/plugins/fff/vendor/fff/test/global_fakes.c +0 -21
- data/plugins/fff/vendor/fff/test/global_fakes.h +0 -47
- data/plugins/fff/vendor/fff/test/test_cases.include +0 -276
- data/plugins/report_tests_gtestlike_stdout/assets/template.erb +0 -83
- data/spec/units/configurator_spec.rb +0 -232
- /data/assets/{ceedling → features/ceedling} +0 -0
- /data/assets/{ceedling.cmd → features/ceedling.cmd} +0 -0
- /data/assets/{default_gitignore → features/default_gitignore} +0 -0
- /data/assets/{broken_uncovered_file.c → fixtures/broken_uncovered_file.c} +0 -0
- /data/assets/{example_file.c → fixtures/example_file.c} +0 -0
- /data/assets/{example_file.h → fixtures/example_file.h} +0 -0
- /data/assets/{example_file_call.c → fixtures/example_file_call.c} +0 -0
- /data/assets/{example_file_call.h → fixtures/example_file_call.h} +0 -0
- /data/assets/{example_file_with_statics.c → fixtures/example_file_with_statics.c} +0 -0
- /data/assets/{example_file_with_stdio.c → fixtures/example_file_with_stdio.c} +0 -0
- /data/assets/{example_file_with_stdio.h → fixtures/example_file_with_stdio.h} +0 -0
- /data/assets/{fake_crash_test_fixture.rb → fixtures/fake_crash_test_fixture.rb} +0 -0
- /data/assets/{partial_all_module.h → fixtures/partial_all_module.h} +0 -0
- /data/assets/{run_with_ubsan.rb → fixtures/run_with_ubsan.rb} +0 -0
- /data/assets/{same_dir_pairing_module.c → fixtures/same_dir_pairing_module.c} +0 -0
- /data/assets/{same_dir_pairing_module.h → fixtures/same_dir_pairing_module.h} +0 -0
- /data/assets/{same_dir_pairing_module_func.h → fixtures/same_dir_pairing_module_func.h} +0 -0
- /data/assets/{same_dir_pairing_other.c → fixtures/same_dir_pairing_other.c} +0 -0
- /data/assets/{same_dir_pairing_other.h → fixtures/same_dir_pairing_other.h} +0 -0
- /data/assets/{test_example_file.c → fixtures/test_example_file.c} +0 -0
- /data/assets/{test_example_file_2.c → fixtures/test_example_file_2.c} +0 -0
- /data/assets/{test_example_file_source_include.c → fixtures/test_example_file_source_include.c} +0 -0
- /data/assets/{test_example_file_success.c → fixtures/test_example_file_success.c} +0 -0
- /data/assets/{test_example_file_unity_printf.c → fixtures/test_example_file_unity_printf.c} +0 -0
- /data/assets/{test_example_file_verbose.c → fixtures/test_example_file_verbose.c} +0 -0
- /data/assets/{test_example_file_with_mock.c → fixtures/test_example_file_with_mock.c} +0 -0
- /data/assets/{test_example_file_with_stdio.c → fixtures/test_example_file_with_stdio.c} +0 -0
- /data/assets/{test_example_with_parameterized_tests.c → fixtures/test_example_with_parameterized_tests.c} +0 -0
- /data/assets/{test_partial_all_module.c → fixtures/test_partial_all_module.c} +0 -0
- /data/assets/{test_same_dir_pairing.c → fixtures/test_same_dir_pairing.c} +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_config.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/local_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_wrapper.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/project_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware_special.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.h +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder_partial.c +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/conditional_module.h +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/optional_dep.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_decorators.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareC.c +0 -0
- /data/assets/{uncovered_example_file.c → fixtures/uncovered_example_file.c} +0 -0
- /data/plugins/bullseye/assets/{template.erb → coverage.template} +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
# Sanitizer flavor: AddressSanitizer + UndefinedBehaviorSanitizer, leak
|
|
9
|
+
# detection off.
|
|
10
|
+
#
|
|
11
|
+
# CI runs asan_ubsan_leaks, not this flavor. This one exists for triage: running
|
|
12
|
+
# it alongside separates a leak from a memory error or UB without changing
|
|
13
|
+
# anything else about the build.
|
|
14
|
+
#
|
|
15
|
+
# A Ceedling mixin the system test harness merges into every ephemeral project
|
|
16
|
+
# it builds, so that Ceedling's own generated C -- Unity runners, CMock mocks,
|
|
17
|
+
# Partials -- is exercised under dynamic analysis. Selected by
|
|
18
|
+
# CEEDLING_TEST_SANITIZERS=asan_ubsan; see SystemContext#with_context and
|
|
19
|
+
# `rake specs:system:sanitize`. A flavor is a file in this directory: adding
|
|
20
|
+
# one requires no harness change.
|
|
21
|
+
#
|
|
22
|
+
# Three things here are deliberate and not obvious:
|
|
23
|
+
#
|
|
24
|
+
# 1. The matcher is a negative lookahead because Ceedling's :flags/:defines
|
|
25
|
+
# matchers only ever *add* values (ConfigMatchinator#matches? accumulates
|
|
26
|
+
# with `+=`). There is no exclusion mechanism, so "everything except the
|
|
27
|
+
# deliberately-crashing fixtures" can only be said as a regex that fails
|
|
28
|
+
# to match them. Those fixtures carry a `nosanitize` filename segment for
|
|
29
|
+
# exactly this purpose -- it is read here, at build time, and is not
|
|
30
|
+
# decorative. spec/integration/sanitizer_exclusions_spec.rb breaks the
|
|
31
|
+
# build if one is renamed or loses its marker.
|
|
32
|
+
#
|
|
33
|
+
# 2. The \A anchor is load-bearing. Regexp#match scans forward for any
|
|
34
|
+
# position where the pattern can succeed; past the marker the lookahead is
|
|
35
|
+
# satisfied, so an unanchored pattern instruments the very files it means
|
|
36
|
+
# to skip -- silently, with no error anywhere.
|
|
37
|
+
# spec/units/config_matchinator_spec.rb pins both halves of this.
|
|
38
|
+
#
|
|
39
|
+
# 3. -fno-sanitize-recover=all is used instead of UBSAN_OPTIONS=halt_on_error
|
|
40
|
+
# (as assets/fixtures/run_with_ubsan.rb does for its own regression test).
|
|
41
|
+
# It is a compile flag, so it needs nothing to reach the test executable's
|
|
42
|
+
# environment, and it turns UB into a hard stop rather than a printed
|
|
43
|
+
# warning that still exits zero. The existing wrapper stays where it is,
|
|
44
|
+
# serving only that one test.
|
|
45
|
+
#
|
|
46
|
+
# Nothing is needed to make a finding fail the build: GeneratorHelper#test_crash?
|
|
47
|
+
# already treats both shapes a sanitizer produces -- SIGABRT, and "zero failures
|
|
48
|
+
# reported but a nonzero unsignaled exit" -- as a crashed test executable.
|
|
49
|
+
|
|
50
|
+
:flags:
|
|
51
|
+
:test:
|
|
52
|
+
:compile:
|
|
53
|
+
:/\A(?!.*nosanitize).*\z/:
|
|
54
|
+
- -fsanitize=address,undefined
|
|
55
|
+
- -fno-sanitize-recover=all
|
|
56
|
+
# Frame pointers and symbols: without them a report is bare addresses,
|
|
57
|
+
# which is useless in CI logs where there is no binary to symbolize after
|
|
58
|
+
- -fno-omit-frame-pointer
|
|
59
|
+
- -g
|
|
60
|
+
:link:
|
|
61
|
+
# ASan must be on the link line as well as every compile line
|
|
62
|
+
:/\A(?!.*nosanitize).*\z/:
|
|
63
|
+
- -fsanitize=address,undefined
|
|
64
|
+
|
|
65
|
+
:defines:
|
|
66
|
+
:test:
|
|
67
|
+
# Not consumed by any C code. Present so `ceedling dumpconfig` on a failing
|
|
68
|
+
# CI leg shows plainly whether that build was instrumented
|
|
69
|
+
:/\A(?!.*nosanitize).*\z/:
|
|
70
|
+
- CEEDLING_SANITIZERS_ACTIVE
|
|
71
|
+
|
|
72
|
+
# Runtime options for the sanitizer, exported by the harness into the
|
|
73
|
+
# environment the test executable inherits. The flavor owns these rather than
|
|
74
|
+
# the harness hard-coding them -- it is the only difference between this flavor
|
|
75
|
+
# and asan_ubsan_leaks.
|
|
76
|
+
#
|
|
77
|
+
# detect_leaks=0 is what makes this the triage flavor rather than the default.
|
|
78
|
+
# Leaks were measured clean across the whole suite -- see asan_ubsan_leaks.yml --
|
|
79
|
+
# so switching them off here buys only the ability to ask "is this finding a
|
|
80
|
+
# leak?" by elimination.
|
|
81
|
+
:sanitizer_runtime:
|
|
82
|
+
:ASAN_OPTIONS: detect_leaks=0
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
# Sanitizer flavor: AddressSanitizer + UndefinedBehaviorSanitizer, leak
|
|
9
|
+
# detection ON.
|
|
10
|
+
#
|
|
11
|
+
# Identical to asan_ubsan.yml in every flag -- LeakSanitizer ships inside ASan
|
|
12
|
+
# and is a runtime option, not a compile option. See that file for why the
|
|
13
|
+
# matcher is a negative lookahead, why \A is load-bearing, and why
|
|
14
|
+
# -fno-sanitize-recover=all is used instead of an UBSAN_OPTIONS wrapper.
|
|
15
|
+
#
|
|
16
|
+
# This is the flavor CI runs.
|
|
17
|
+
#
|
|
18
|
+
# It was not assumed safe. The concern that justified switching leaks off at
|
|
19
|
+
# first was that Unity and CMock's memory pool might leave allocations
|
|
20
|
+
# outstanding at exit, flagging nearly every executable and burying real
|
|
21
|
+
# findings. Measured in throwtheswitch/madsciencelab-plugins (GCC 14.2) rather
|
|
22
|
+
# than reasoned about: the whole system suite passes with leak detection on, 313
|
|
23
|
+
# examples, zero leak reports -- CMock's memory pool is a static array by
|
|
24
|
+
# default, not heap allocation. A deliberately leaked buffer in the same
|
|
25
|
+
# environment does fail the build, so that clean result is a measurement and not
|
|
26
|
+
# an inactive sanitizer.
|
|
27
|
+
#
|
|
28
|
+
# asan_ubsan (leaks off) is kept as a triage flavor: when a finding appears,
|
|
29
|
+
# running it separates a leak from a memory error or UB without changing
|
|
30
|
+
# anything else.
|
|
31
|
+
|
|
32
|
+
:flags:
|
|
33
|
+
:test:
|
|
34
|
+
:compile:
|
|
35
|
+
:/\A(?!.*nosanitize).*\z/:
|
|
36
|
+
- -fsanitize=address,undefined
|
|
37
|
+
- -fno-sanitize-recover=all
|
|
38
|
+
- -fno-omit-frame-pointer
|
|
39
|
+
- -g
|
|
40
|
+
:link:
|
|
41
|
+
:/\A(?!.*nosanitize).*\z/:
|
|
42
|
+
- -fsanitize=address,undefined
|
|
43
|
+
|
|
44
|
+
:defines:
|
|
45
|
+
:test:
|
|
46
|
+
:/\A(?!.*nosanitize).*\z/:
|
|
47
|
+
- CEEDLING_SANITIZERS_ACTIVE
|
|
48
|
+
|
|
49
|
+
# The one line that distinguishes this flavor from asan_ubsan.
|
|
50
|
+
#
|
|
51
|
+
# exitcode is pinned explicitly because LeakSanitizer's default nonzero exit is
|
|
52
|
+
# what Ceedling reads as a crashed test executable (GeneratorHelper#test_crash?
|
|
53
|
+
# treats "zero failures reported, nonzero unsignaled exit" as a crash). Leaving
|
|
54
|
+
# it implicit would make this flavor's pass/fail behavior depend on the
|
|
55
|
+
# toolchain's default.
|
|
56
|
+
:sanitizer_runtime:
|
|
57
|
+
:ASAN_OPTIONS: detect_leaks=1:exitcode=1
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
# Injected into each system-test child process's RUBYOPT (see SystemContext#with_context)
|
|
9
|
+
# so coverage instrumentation starts before that process's own `require`s run -- Ruby's
|
|
10
|
+
# Coverage module only sees lines loaded after it starts. RUBYOPT applies to every
|
|
11
|
+
# subprocess spawned while coverage mode is on, not just the one build/appcmd call
|
|
12
|
+
# actually being measured, so this re-checks its own gate rather than assuming it's
|
|
13
|
+
# only ever loaded when wanted.
|
|
14
|
+
#
|
|
15
|
+
# Checked for blank, not just nil: GitHub Actions' own `env:` mapping (see
|
|
16
|
+
# run-plugin-tests/action.yml) can't conditionally omit a key entirely, so a
|
|
17
|
+
# non-coverage run still sets this to an empty string rather than leaving it
|
|
18
|
+
# unset -- and an empty string is truthy in Ruby, unlike nil/false.
|
|
19
|
+
if !ENV['CEEDLING_TEST_COVERAGE_ROOT'].to_s.empty?
|
|
20
|
+
require 'simplecov'
|
|
21
|
+
|
|
22
|
+
# This process's own CWD is a throwaway deployed project directory, not this repo,
|
|
23
|
+
# so the require above's own upward-directory-search for .simplecov walks straight
|
|
24
|
+
# past the real one and finds nothing. Point root back at the real repo and load
|
|
25
|
+
# the shared config explicitly now that root is correct.
|
|
26
|
+
SimpleCov.root(ENV['CEEDLING_TEST_COVERAGE_ROOT'])
|
|
27
|
+
load File.join(ENV['CEEDLING_TEST_COVERAGE_ROOT'], '.simplecov')
|
|
28
|
+
|
|
29
|
+
# .simplecov (just loaded above) is configuration only -- this explicit
|
|
30
|
+
# call is what actually begins tracking for this process.
|
|
31
|
+
SimpleCov.start
|
|
32
|
+
|
|
33
|
+
# A unique name per process, still useful for identifying which process a given
|
|
34
|
+
# raw result file came from. PID alone isn't enough (a long run can cycle through
|
|
35
|
+
# enough child processes, each itself spawning further subprocesses for
|
|
36
|
+
# compiles/links/etc., to plausibly repeat a PID); PID plus a microsecond
|
|
37
|
+
# timestamp is.
|
|
38
|
+
name = "system-#{Process.pid}-#{Time.now.strftime('%Y%m%d%H%M%S%6N')}"
|
|
39
|
+
SimpleCov.command_name name
|
|
40
|
+
|
|
41
|
+
# Each of potentially hundreds of these child processes across a full system-test
|
|
42
|
+
# run gets its own raw resultset file under coverage/raw/ rather than sharing one
|
|
43
|
+
# -- `rake coverage:report` merges them all afterward. Sharing a single
|
|
44
|
+
# coverage/.resultset.json here would mean every process's exit re-reads,
|
|
45
|
+
# re-merges, and rewrites the *entire* accumulated file (SimpleCov::ResultMerger
|
|
46
|
+
# locks it, reads it whole, and rewrites it whole on every store, then reads and
|
|
47
|
+
# merges it whole *again* on the same call for a return value nothing here even
|
|
48
|
+
# uses) -- cost growing with every process that ran before it, compounding into a
|
|
49
|
+
# full system-test run taking dramatically longer than it should the more
|
|
50
|
+
# processes pile up. A dedicated directory per process makes each one's own
|
|
51
|
+
# store trivial (a brand-new, single-entry file), turning that growing cost back
|
|
52
|
+
# into a flat one.
|
|
53
|
+
SimpleCov.coverage_dir(File.join('coverage', 'raw', name))
|
|
54
|
+
|
|
55
|
+
# `.simplecov`'s own cover glob (backfilling files this particular process
|
|
56
|
+
# never happened to require, so they show as 0% instead of silently vanishing
|
|
57
|
+
# from the total) resolves relative to the process's actual working directory at
|
|
58
|
+
# the moment coverage is finalized, not SimpleCov.root -- SimpleCov.root only
|
|
59
|
+
# governs how already-covered files get reported, not where that glob itself
|
|
60
|
+
# looks. Left alone, that resolves against this process's own throwaway deployed
|
|
61
|
+
# project directory (still the real CWD here, unrelated to the repo), backfilling
|
|
62
|
+
# nothing. Chdir'ing into the repo just for this one call is enough to make the
|
|
63
|
+
# glob agree with SimpleCov.root above without disturbing the rest of this
|
|
64
|
+
# process's own work, which depends on staying in its own deployed directory.
|
|
65
|
+
SimpleCov.at_exit { Dir.chdir(ENV['CEEDLING_TEST_COVERAGE_ROOT']) { SimpleCov.result } }
|
|
66
|
+
end
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
require 'fileutils'
|
|
9
9
|
require 'tmpdir'
|
|
10
10
|
require 'open3'
|
|
11
|
-
|
|
11
|
+
# spec_helper pulls in the 'constructor' gem -- must load before any Ceedling
|
|
12
|
+
# class using the `constructor` class macro, e.g. ceedling/yaml_wrapper below.
|
|
12
13
|
require 'spec_helper'
|
|
14
|
+
require 'ceedling/yaml_wrapper'
|
|
13
15
|
require 'deep_merge'
|
|
14
16
|
|
|
15
17
|
require_relative 'system_test_output'
|
|
@@ -22,7 +24,7 @@ module CeedlingSystemSpecHelpers
|
|
|
22
24
|
|
|
23
25
|
# Helper method to convert method name to readable description
|
|
24
26
|
def test_case(method_name)
|
|
25
|
-
description = method_name.to_s.
|
|
27
|
+
description = method_name.to_s.tr('_', ' ').capitalize
|
|
26
28
|
it(description) { send(method_name) }
|
|
27
29
|
end
|
|
28
30
|
end
|
|
@@ -51,15 +53,15 @@ RSpec.configure do |config|
|
|
|
51
53
|
when 'all'
|
|
52
54
|
# Individual spec debug mode (and CI locale test): preserve everything for inspection.
|
|
53
55
|
$stdout.puts "\n[System Tests] Artifact preservation: ALL (pass + fail)"
|
|
54
|
-
$stdout.puts " Pass project dirs:
|
|
55
|
-
$stdout.puts " Fail project dirs:
|
|
56
|
-
$stdout.puts " Pass logs:
|
|
57
|
-
$stdout.puts " Fail logs:
|
|
56
|
+
$stdout.puts " Pass project dirs: #{SystemContext::ARTIFACTS_DIR}/proj/pass/"
|
|
57
|
+
$stdout.puts " Fail project dirs: #{SystemContext::ARTIFACTS_DIR}/proj/fail/"
|
|
58
|
+
$stdout.puts " Pass logs: #{SystemContext::ARTIFACTS_DIR}/pass.*.log"
|
|
59
|
+
$stdout.puts " Fail logs: #{SystemContext::ARTIFACTS_DIR}/fail.*.log\n\n"
|
|
58
60
|
when 'failures'
|
|
59
61
|
# CI batch debug mode: preserve only failures; passing dirs are deleted immediately.
|
|
60
62
|
$stdout.puts "\n[System Tests] Artifact preservation: FAILURES ONLY"
|
|
61
|
-
$stdout.puts " Fail project dirs:
|
|
62
|
-
$stdout.puts " Fail logs:
|
|
63
|
+
$stdout.puts " Fail project dirs: #{SystemContext::ARTIFACTS_DIR}/proj/fail/"
|
|
64
|
+
$stdout.puts " Fail logs: #{SystemContext::ARTIFACTS_DIR}/fail.*.log"
|
|
63
65
|
$stdout.puts " Passing artifacts deleted immediately.\n\n"
|
|
64
66
|
end
|
|
65
67
|
|
|
@@ -117,13 +119,17 @@ RSpec.configure do |config|
|
|
|
117
119
|
# (e.g. "s_" from "Project's" -> "Project_s_" when the cut lands mid-segment).
|
|
118
120
|
.then { |s| s.length > 120 ? s[-120..].sub(/\A[^_]*_+/, '') : s }
|
|
119
121
|
|
|
120
|
-
timestamp
|
|
122
|
+
# PID + microsecond precision, not just a second-precision timestamp -- two concurrent
|
|
123
|
+
# processes writing a log for identically-described tests in the same UTC second would
|
|
124
|
+
# otherwise silently overwrite one another. Mirrors simplecov_boot.rb's own resultset
|
|
125
|
+
# directory naming, which solves the same concurrent-writer problem for coverage data.
|
|
126
|
+
timestamp = Time.now.utc.strftime('%Y%m%dT%H%M%S%6NZ')
|
|
121
127
|
# Centralize all system test result logs so CI can upload one directory as an artifact.
|
|
122
|
-
results_dir = File.join(Dir.pwd,
|
|
128
|
+
results_dir = File.join(Dir.pwd, SystemContext::ARTIFACTS_DIR)
|
|
123
129
|
FileUtils.mkdir_p(results_dir)
|
|
124
130
|
|
|
125
131
|
result_tag = is_failure ? 'fail' : 'pass'
|
|
126
|
-
log_path = File.join(results_dir, "
|
|
132
|
+
log_path = File.join(results_dir, "#{result_tag}.#{test_name}.#{Process.pid}-#{timestamp}.log")
|
|
127
133
|
|
|
128
134
|
log_content = ""
|
|
129
135
|
log_content << "Command: `#{@c.last_cmd}`\n\n" if @c.respond_to?(:last_cmd) && !@c.last_cmd.nil?
|
|
@@ -147,7 +153,99 @@ RSpec.configure do |config|
|
|
|
147
153
|
end
|
|
148
154
|
|
|
149
155
|
def test_asset_path(asset_file_name)
|
|
150
|
-
File.join(File.dirname(__FILE__), '..', '..', '..', 'assets', asset_file_name)
|
|
156
|
+
File.join(File.dirname(__FILE__), '..', '..', '..', 'assets', 'fixtures', asset_file_name)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Reads a file a spec is inspecting -- a project source, a generated runner, a report --
|
|
160
|
+
# as UTF-8 rather than at the platform default.
|
|
161
|
+
#
|
|
162
|
+
# Ruby resolves `Encoding.default_external` once at startup from the ambient locale, and
|
|
163
|
+
# a developer machine exporting no locale resolves it to US-ASCII. A bare read of content
|
|
164
|
+
# carrying any non-ASCII byte then raises `invalid byte sequence`, which reads like a
|
|
165
|
+
# defect in whatever feature is under test rather than in the spec's own file handling.
|
|
166
|
+
# CI hides it by exporting a UTF-8 locale.
|
|
167
|
+
#
|
|
168
|
+
# Reading explicitly rather than forcing the process default is deliberate: the
|
|
169
|
+
# encoding-stress spec asserts that default is *not* UTF-8 and that a naive read of a
|
|
170
|
+
# non-ASCII fixture still raises, which is the condition it exists to stress.
|
|
171
|
+
def read_spec_file(path)
|
|
172
|
+
File.read( path, encoding: 'UTF-8' )
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def readlines_spec_file(path)
|
|
176
|
+
File.readlines( path, encoding: 'UTF-8' )
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Collapses the `@c.with_context { Dir.chdir(@proj_name) { ... } }` triple-nesting
|
|
180
|
+
# repeated at nearly every before-hook and example body across the path/name
|
|
181
|
+
# disambiguation specs (spec/system/*_disambiguation*, *_path*, etc.) into one call.
|
|
182
|
+
# `@c`/`@proj_name` are instance state set by the "a fresh ceedling gem project"
|
|
183
|
+
# shared context below -- any spec using this helper needs that context (or
|
|
184
|
+
# equivalent) included first.
|
|
185
|
+
def in_project(&block)
|
|
186
|
+
@c.with_context { Dir.chdir(@proj_name, &block) }
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Copies test_asset_path(fixture_relative_path) into dest_dir (created if it doesn't
|
|
190
|
+
# already exist) -- collapses the FileUtils.mkdir_p + FileUtils.cp test_asset_path(...)
|
|
191
|
+
# pair repeated identically across every fixture-loading before-hook in the
|
|
192
|
+
# test_asset_path-based specs in this same cluster.
|
|
193
|
+
def copy_fixture(fixture_relative_path, dest_dir)
|
|
194
|
+
FileUtils.mkdir_p(dest_dir)
|
|
195
|
+
FileUtils.cp(test_asset_path(fixture_relative_path), dest_dir)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Copies the alpha/dup.{h,c} + beta/dup.{h,c} fixture pair -- two identically-shaped
|
|
199
|
+
# header+source pairs in different directories -- into the current example's project.
|
|
200
|
+
# Shared by implicit_source_header_correspondence_disambiguation_spec.rb and
|
|
201
|
+
# test_source_file_directive_spec.rb, which both build scenarios around this same
|
|
202
|
+
# same-basename ambiguity (previously a byte-for-byte duplicate private method in
|
|
203
|
+
# both files).
|
|
204
|
+
def copy_duplicate_dup_pairs
|
|
205
|
+
in_project do
|
|
206
|
+
copy_fixture("implicit_source_header_correspondence/alpha/dup.h", 'src/alpha')
|
|
207
|
+
copy_fixture("implicit_source_header_correspondence/alpha/dup.c", 'src/alpha')
|
|
208
|
+
copy_fixture("implicit_source_header_correspondence/beta/dup.h", 'src/beta')
|
|
209
|
+
copy_fixture("implicit_source_header_correspondence/beta/dup.c", 'src/beta')
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# Lays down the same-named module fixture, mirroring issue #1311's own project shape
|
|
214
|
+
# -- one include root, namespaced headers, and a source tree that mirrors it.
|
|
215
|
+
# `drivers` names which of the two same-basename modules to copy, so a caller can
|
|
216
|
+
# stage one module for an unambiguous build or both for an ambiguous one.
|
|
217
|
+
#
|
|
218
|
+
# The include root is added because a `ceedling new` project has none. It is recursive
|
|
219
|
+
# so the namespaced headers below it are actually collected. A non-recursive entry
|
|
220
|
+
# collects none of them and no module resolves.
|
|
221
|
+
#
|
|
222
|
+
# `partials` and `preprocess` are the two settings that change how same-named modules
|
|
223
|
+
# are handled, so each caller states what it is exercising.
|
|
224
|
+
def copy_same_named_modules(*drivers, partials: false, preprocess: nil)
|
|
225
|
+
in_project do
|
|
226
|
+
drivers.each do |driver|
|
|
227
|
+
copy_fixture("same_named_modules/include/drivers/#{driver}/config.h", "include/drivers/#{driver}")
|
|
228
|
+
copy_fixture("same_named_modules/src/drivers/#{driver}/config.c", "src/drivers/#{driver}")
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
project = { :use_partials => partials }
|
|
232
|
+
project[:use_test_preprocessor] = preprocess unless preprocess.nil?
|
|
233
|
+
|
|
234
|
+
@c.merge_project_yml_for_test(
|
|
235
|
+
:project => project,
|
|
236
|
+
:paths => { :include => ['include/**'] }
|
|
237
|
+
)
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Partials enable preprocessing of their own accord, so callers exercising Partials
|
|
242
|
+
# need name only the modules.
|
|
243
|
+
def copy_same_named_partial_modules(*drivers)
|
|
244
|
+
copy_same_named_modules( *drivers, partials: true )
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def feature_asset_path(asset_file_name)
|
|
248
|
+
File.join(File.dirname(__FILE__), '..', '..', '..', 'assets', 'features', asset_file_name)
|
|
151
249
|
end
|
|
152
250
|
|
|
153
251
|
# `ceedling new`/`upgrade` only populates a project's docs/ceedling/ by copying this
|
|
@@ -171,8 +269,8 @@ def unique_proj_name(prefix)
|
|
|
171
269
|
end
|
|
172
270
|
|
|
173
271
|
def convert_slashes(path)
|
|
174
|
-
if
|
|
175
|
-
path.
|
|
272
|
+
if /mingw|win32/.match?(RUBY_PLATFORM.downcase)
|
|
273
|
+
path.tr("/","\\")
|
|
176
274
|
else
|
|
177
275
|
path
|
|
178
276
|
end
|
|
@@ -188,14 +286,122 @@ rescue
|
|
|
188
286
|
false
|
|
189
287
|
end
|
|
190
288
|
|
|
289
|
+
# True when `gcc` honours `-fdirectives-only` without complaint. Older Apple Clang releases
|
|
290
|
+
# (the `gcc` alias on macOS) ignore the flag with a warning naming it, which is exactly when
|
|
291
|
+
# Ceedling falls back to text scanning for a whole run (Configurator#resolve_directives_only_preprocessing).
|
|
292
|
+
# The integration tier keeps its own copy so it need not load this helper.
|
|
293
|
+
def directives_only_supported?
|
|
294
|
+
out, status = Open3.capture2e('gcc -E -fdirectives-only -x c -', stdin_data: "\n")
|
|
295
|
+
status.success? && !out.match?(/warning[^\n]+-fdirectives-only/)
|
|
296
|
+
rescue StandardError
|
|
297
|
+
false
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
# Probed versions, keyed by tool. Each tool is asked once per process: these shell out,
|
|
301
|
+
# and the answer cannot change mid-run.
|
|
302
|
+
TOOL_VERSIONS = {}
|
|
303
|
+
|
|
304
|
+
# The gcov plugin gates features on tool versions two ways, and a system test exercising a
|
|
305
|
+
# gated feature has to agree with whichever applies or it tests nothing:
|
|
306
|
+
#
|
|
307
|
+
# - A gate that *raises*. Configuring the feature on too old a tool breaks the build by
|
|
308
|
+
# design, so a test asserting success fails for a correct reason. Loud.
|
|
309
|
+
# - A `:min_version` arg-table entry that *silently omits* the flag. The build succeeds
|
|
310
|
+
# and the feature simply did not happen, so a test can pass while asserting nothing.
|
|
311
|
+
# Quiet, and the more dangerous of the two.
|
|
312
|
+
#
|
|
313
|
+
# Either way the version has to be known, hence these probes rather than the presence-only
|
|
314
|
+
# ones above.
|
|
315
|
+
|
|
316
|
+
# A tool's version as [major, minor], or nil when the tool is absent, fails to run, or
|
|
317
|
+
# prints something the pattern cannot read. All three mean the same thing to a caller:
|
|
318
|
+
# this machine cannot answer for that tool, so gate on it rather than guess.
|
|
319
|
+
def tool_version(key, cmd, pattern)
|
|
320
|
+
return TOOL_VERSIONS[key] if TOOL_VERSIONS.key?( key )
|
|
321
|
+
|
|
322
|
+
TOOL_VERSIONS[key] =
|
|
323
|
+
begin
|
|
324
|
+
output = `#{cmd}`
|
|
325
|
+
match = ($?.exitstatus == 0) ? output.match( pattern ) : nil
|
|
326
|
+
match.nil? ? nil : [match[1].to_i, match[2].to_i]
|
|
327
|
+
rescue
|
|
328
|
+
nil
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def gcovr_version
|
|
333
|
+
tool_version( :gcovr, 'gcovr --version 2>&1', /gcovr\s+(\d+)\.(\d+)/ )
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# Deliberately the same pattern the plugin itself uses to read a GCC version, so this
|
|
337
|
+
# agrees with the plugin about what counts as a readable `gcc`. A platform whose `gcc` is
|
|
338
|
+
# really Clang behind a compatibility shim (macOS) prints something this cannot read, and
|
|
339
|
+
# nil is the correct answer there: the plugin would raise on it too.
|
|
340
|
+
def gcc_version
|
|
341
|
+
tool_version( :gcc, 'gcc --version 2>&1', /^gcc(?:\.exe)?\s+.*\s+(\d+)\.(\d+)\.\d+/ )
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# True when `version` is at least `minimum`, both [major, minor]. A nil version is never
|
|
345
|
+
# sufficient.
|
|
346
|
+
def tool_version_at_least?(version, minimum)
|
|
347
|
+
return false if version.nil?
|
|
348
|
+
|
|
349
|
+
return (version <=> minimum) >= 0
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def version_label(version)
|
|
353
|
+
version.nil? ? 'unreadable' : version.join('.')
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# `gdb --version` answers on a machine where gdb cannot actually attach to a
|
|
357
|
+
# process -- macOS revokes a Homebrew gdb's debugger entitlement often enough (a
|
|
358
|
+
# Homebrew upgrade, a macOS system update, a Gatekeeper/taskgated cache reset) that
|
|
359
|
+
# trusting `--version` alone would let these system tests run under a gdb that can
|
|
360
|
+
# never do real work, producing confusing failures instead of a clean skip. A
|
|
361
|
+
# short-lived real process and a minimal attach/detach proves gdb can actually do
|
|
362
|
+
# the job -- the same real-probe shape as `ConfiguratorSetup#probe_gdb_attach` in
|
|
363
|
+
# `lib/ceedling` (a separate implementation: that one is shipped library code, this
|
|
364
|
+
# is spec-only support code). Linux/macOS only, matching `ubsan_available?` below --
|
|
365
|
+
# gdb system tests are already gated off Windows entirely.
|
|
366
|
+
def gdb_real_attach_succeeds?
|
|
367
|
+
tool_available?(
|
|
368
|
+
%q{sh -c 'sleep 5 & pid=$!; gdb -q --batch --pid "$pid" --eval-command detach 2>&1; rc=$?; kill "$pid" 2>/dev/null; exit $rc'}
|
|
369
|
+
)
|
|
370
|
+
end
|
|
371
|
+
|
|
191
372
|
def gdb_available?
|
|
192
|
-
|
|
373
|
+
return false unless RUBY_PLATFORM.downcase.match?(/linux|darwin/)
|
|
374
|
+
return false unless tool_available?('gdb --version 2>&1')
|
|
375
|
+
|
|
376
|
+
gdb_real_attach_succeeds?
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
# True when gdb is installed but confirmed unable to attach to a process --
|
|
380
|
+
# the exact condition ConfiguratorSetup#validate_gdb_attach_capability detects
|
|
381
|
+
# and downgrades :use_backtrace from :gdb to :simple for. macOS-only, matching
|
|
382
|
+
# that production check's own platform gate: a hobbled Linux gdb wouldn't
|
|
383
|
+
# trigger the fallback at all, so there'd be nothing here to exercise.
|
|
384
|
+
def gdb_installed_but_unusable?
|
|
385
|
+
return false unless RUBY_PLATFORM.downcase.include?('darwin')
|
|
386
|
+
return false unless tool_available?('gdb --version 2>&1')
|
|
387
|
+
|
|
388
|
+
!gdb_real_attach_succeeds?
|
|
193
389
|
end
|
|
194
390
|
|
|
195
391
|
def valgrind_available?
|
|
196
392
|
tool_available?('valgrind --version 2>&1')
|
|
197
393
|
end
|
|
198
394
|
|
|
395
|
+
def cppcheck_available?
|
|
396
|
+
tool_available?('cppcheck --version 2>&1')
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def bullseye_available?
|
|
400
|
+
# covc has no --version flag (unrecognized options always exit non-zero,
|
|
401
|
+
# licensed or not) — --help is the cheapest licensed command that succeeds.
|
|
402
|
+
tool_available?('covc --help 2>&1')
|
|
403
|
+
end
|
|
404
|
+
|
|
199
405
|
# Real UBSan support is Linux-specific in practice for this test suite -- macOS's
|
|
200
406
|
# system `gcc` is really Clang under a compatibility shim with different sanitizer
|
|
201
407
|
# runtime behavior, and MinGW gcc on Windows doesn't ship the sanitizer runtime at
|
|
@@ -211,13 +417,66 @@ def ubsan_available?
|
|
|
211
417
|
end
|
|
212
418
|
end
|
|
213
419
|
|
|
420
|
+
# The sanitize plugin runs where the compiler builds and links ASan and UBSan programs
|
|
421
|
+
# that then run: Linux with GCC or Clang, and macOS with Apple Clang. The program is run
|
|
422
|
+
# as well as built, since a runtime missing at load time only shows then.
|
|
423
|
+
def sanitizers_available?
|
|
424
|
+
return false if RUBY_PLATFORM.downcase.match?( /mswin|mingw|msys|cygwin/ )
|
|
425
|
+
|
|
426
|
+
Dir.mktmpdir do |dir|
|
|
427
|
+
source = File.join(dir, 'sanitizers_check.c')
|
|
428
|
+
binary = File.join(dir, 'sanitizers_check')
|
|
429
|
+
File.write(source, "int main(void) { return 0; }\n")
|
|
430
|
+
tool_available?(%(gcc -fsanitize=address,undefined -o "#{binary}" "#{source}" 2>&1 && "#{binary}"))
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
# LeakSanitizer is not supported on macOS
|
|
435
|
+
def leak_detection_available?
|
|
436
|
+
return RUBY_PLATFORM.downcase.include?('linux') && sanitizers_available?
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
# Collapses the before(:all)/after(:all) SystemContext setup/teardown pair plus the
|
|
440
|
+
# `ceedling new` scaffold call -- identical across every "Deployed as a gem" spec in
|
|
441
|
+
# the path/name disambiguation cluster -- into one `include_context` line. `proj_prefix`
|
|
442
|
+
# feeds `unique_proj_name`, matching each file's own former hardcoded prefix string.
|
|
443
|
+
RSpec.shared_context "a fresh ceedling gem project" do |proj_prefix|
|
|
444
|
+
before :all do
|
|
445
|
+
@c = SystemContext.new
|
|
446
|
+
@c.deploy_gem
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
after :all do
|
|
450
|
+
@c.done!
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
before { @proj_name = unique_proj_name(proj_prefix) }
|
|
454
|
+
|
|
455
|
+
# Not in_project -- the project directory doesn't exist until this call creates
|
|
456
|
+
# it, so there's nothing yet to Dir.chdir into. Every subsequent step (fixture
|
|
457
|
+
# loading, build/test invocations) uses in_project as normal.
|
|
458
|
+
before { @c.with_context { @c.ceedling_appcmd_exec("new #{@proj_name}") } }
|
|
459
|
+
end
|
|
460
|
+
|
|
214
461
|
RSpec.shared_context "requires gdb" do
|
|
215
462
|
before :all do
|
|
216
463
|
@gdb_available = gdb_available?
|
|
217
464
|
end
|
|
218
465
|
|
|
219
466
|
before do
|
|
220
|
-
skip "gdb is not installed
|
|
467
|
+
skip "gdb is not installed, not in PATH, or cannot attach to a process " \
|
|
468
|
+
"(e.g. a macOS codesigning trust problem -- see taskgated(8))" unless @gdb_available
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
RSpec.shared_context "requires a hobbled gdb" do
|
|
473
|
+
before :all do
|
|
474
|
+
@gdb_hobbled = gdb_installed_but_unusable?
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
before do
|
|
478
|
+
skip "gdb is fully functional, not installed, or this isn't macOS " \
|
|
479
|
+
"(the only platform Ceedling currently auto-detects this on)" unless @gdb_hobbled
|
|
221
480
|
end
|
|
222
481
|
end
|
|
223
482
|
|
|
@@ -231,6 +490,67 @@ RSpec.shared_context "requires valgrind" do
|
|
|
231
490
|
end
|
|
232
491
|
end
|
|
233
492
|
|
|
493
|
+
RSpec.shared_context "requires cppcheck" do
|
|
494
|
+
before :all do
|
|
495
|
+
@cppcheck_available = cppcheck_available?
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
before do
|
|
499
|
+
skip "cppcheck is not installed or not in PATH" unless @cppcheck_available
|
|
500
|
+
end
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
RSpec.shared_context "requires bullseye" do
|
|
504
|
+
before :all do
|
|
505
|
+
@bullseye_available = bullseye_available?
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
before do
|
|
509
|
+
skip "Bullseye (covc) is not installed, licensed, or not in PATH" unless @bullseye_available
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
# Takes the minimum this group needs, as [major, minor]. Presence alone is not enough for
|
|
514
|
+
# a group exercising a version-gated gcov feature: on too old a gcovr the plugin either
|
|
515
|
+
# breaks the build by design or quietly drops the flag, and either way the group is not
|
|
516
|
+
# testing what it claims.
|
|
517
|
+
#
|
|
518
|
+
# include_context "requires gcovr", [7, 0]
|
|
519
|
+
#
|
|
520
|
+
# Pass nothing to require presence alone.
|
|
521
|
+
RSpec.shared_context "requires gcovr" do |minimum = nil|
|
|
522
|
+
before :all do
|
|
523
|
+
@gcovr_version = gcovr_version
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
before do
|
|
527
|
+
if @gcovr_version.nil?
|
|
528
|
+
skip "gcovr is not installed, not in PATH, or its version could not be read"
|
|
529
|
+
elsif !minimum.nil? && !tool_version_at_least?( @gcovr_version, minimum )
|
|
530
|
+
skip "gcovr #{minimum.join('.')} or higher is required for this feature " \
|
|
531
|
+
"(found #{version_label( @gcovr_version )})"
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
# As "requires gcovr", for a feature gated on the compiler's own version rather than the
|
|
537
|
+
# report tool's. A platform whose `gcc` is really Clang prints a version this cannot read,
|
|
538
|
+
# which skips -- the plugin would refuse such a toolchain too.
|
|
539
|
+
RSpec.shared_context "requires gcc" do |minimum = nil|
|
|
540
|
+
before :all do
|
|
541
|
+
@gcc_version = gcc_version
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
before do
|
|
545
|
+
if @gcc_version.nil?
|
|
546
|
+
skip "gcc is not installed, not in PATH, or is not a real GCC whose version can be read"
|
|
547
|
+
elsif !minimum.nil? && !tool_version_at_least?( @gcc_version, minimum )
|
|
548
|
+
skip "gcc #{minimum.join('.')} or higher is required for this feature " \
|
|
549
|
+
"(found #{version_label( @gcc_version )})"
|
|
550
|
+
end
|
|
551
|
+
end
|
|
552
|
+
end
|
|
553
|
+
|
|
234
554
|
RSpec.shared_context "requires gcc with UBSan" do
|
|
235
555
|
before :all do
|
|
236
556
|
@ubsan_available = ubsan_available?
|
|
@@ -240,3 +560,43 @@ RSpec.shared_context "requires gcc with UBSan" do
|
|
|
240
560
|
skip "gcc UBSan support not available (Linux + gcc -fsanitize=undefined required)" unless @ubsan_available
|
|
241
561
|
end
|
|
242
562
|
end
|
|
563
|
+
|
|
564
|
+
RSpec.shared_context "requires sanitizers" do
|
|
565
|
+
before :all do
|
|
566
|
+
@sanitizers_available = sanitizers_available?
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
before do
|
|
570
|
+
skip "ASan and UBSan not available (Linux or macOS with gcc -fsanitize=address,undefined required)" unless @sanitizers_available
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
RSpec.shared_context "requires leak detection" do
|
|
575
|
+
before :all do
|
|
576
|
+
@leak_detection_available = leak_detection_available?
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
before do
|
|
580
|
+
skip "LeakSanitizer not available (Linux with gcc -fsanitize=address required)" unless @leak_detection_available
|
|
581
|
+
end
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
# Disables ASan+UBSan instrumentation for the examples that include it, rather
|
|
585
|
+
# than skipping them -- which is why this is deliberately not named "requires
|
|
586
|
+
# ...", unlike every shared context above. The examples still run; they just run
|
|
587
|
+
# uninstrumented on the instrumented CI leg.
|
|
588
|
+
#
|
|
589
|
+
# Opting out is mandatory for correctness, not tidiness. The sanitizer mixins
|
|
590
|
+
# configure :flags ↳ :test, and lib/ceedling/test_invoker/test_build_setup.rb
|
|
591
|
+
# falls back to the :test context for any plugin context that defines no flags of
|
|
592
|
+
# its own -- so a :gcov, :bullseye, or :valgrind build inherits them whether or
|
|
593
|
+
# not that was intended.
|
|
594
|
+
#
|
|
595
|
+
# Toggled per example, so an opted-out spec file leaves the rest of the suite
|
|
596
|
+
# instrumented. The flag lives on SystemContext itself (class level) because
|
|
597
|
+
# specs construct their SystemContext in before(:all) while this pair runs in
|
|
598
|
+
# before/after(:each); see SystemContext.sanitizers_disabled=.
|
|
599
|
+
RSpec.shared_context "cannot be sanitized" do
|
|
600
|
+
before { SystemContext.sanitizers_disabled = true }
|
|
601
|
+
after { SystemContext.sanitizers_disabled = false }
|
|
602
|
+
end
|