ceedling 1.1.10 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +3 -0
- data/.simplecov +73 -0
- data/GIT_COMMIT_SHA +1 -1
- data/Gemfile +84 -8
- data/Gemfile.lock +38 -8
- data/README.md +64 -45
- data/Rakefile +769 -16
- data/assets/{project.yml → features/project.yml} +4 -1
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.c +24 -0
- data/assets/fixtures/bullseye_branch_coverage/src/branchy.h +14 -0
- data/assets/fixtures/bullseye_branch_coverage/test/test_branchy.c +18 -0
- data/assets/fixtures/cppcheck_findings/findings.c +23 -0
- data/assets/fixtures/cppcheck_findings/findings.h +13 -0
- data/assets/fixtures/header_include_path_validation/alt_drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/bar.h +6 -0
- data/assets/fixtures/header_include_path_validation/drivers/foo.h +6 -0
- data/assets/fixtures/header_include_path_validation/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/other_inc/dup.h +6 -0
- data/assets/fixtures/header_include_path_validation/test_ambiguous_mock.c +15 -0
- data/assets/fixtures/header_include_path_validation/test_bare_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_mock_path.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_bogus_vanilla_path.c +10 -0
- data/assets/fixtures/header_include_path_validation/test_include_outranks_test_include_path.c +16 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock.c +11 -0
- data/assets/fixtures/header_include_path_validation/test_pathed_mock_ambiguous.c +14 -0
- data/assets/fixtures/header_include_path_validation/test_test_include_path_outranks_include.c +17 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/alpha/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/beta/dup.h +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/gamma/dup_gamma.c +6 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_alpha.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_bare.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_beta.c +10 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_override.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive.c +19 -0
- data/assets/fixtures/implicit_source_header_correspondence/test_dup_subtractive_noop.c +16 -0
- data/assets/fixtures/parent_directory_references/alpha/extra.c +4 -0
- data/assets/fixtures/parent_directory_references/common/helper.c +6 -0
- data/assets/fixtures/parent_directory_references/common/helper.h +6 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_include.c +10 -0
- data/assets/fixtures/parent_directory_references/unit/test_dotdot_source.c +16 -0
- data/assets/fixtures/plain_inline_module.h +9 -0
- data/assets/fixtures/same_named_modules/include/drivers/spi/config.h +6 -0
- data/assets/fixtures/same_named_modules/include/drivers/uart/config.h +6 -0
- data/assets/fixtures/same_named_modules/src/drivers/spi/config.c +8 -0
- data/assets/fixtures/same_named_modules/src/drivers/uart/config.c +10 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs.c +26 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked.c +20 -0
- data/assets/fixtures/same_named_modules/test/test_both_configs_mocked_traditional.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_both_modules.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_bare.c +19 -0
- data/assets/fixtures/same_named_modules/test/test_uart_config_partial_only.c +20 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/baz/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.c +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/foo/bar.h +6 -0
- data/assets/fixtures/sources_with_duplicate_basenames/main.c +11 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_baz_bar.c +10 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_both_bars.c +12 -0
- data/assets/fixtures/sources_with_duplicate_basenames/test_foo_bar.c +10 -0
- data/assets/{test_example_file_boom.c → fixtures/test_nosanitize_boom.c} +9 -0
- data/assets/{test_example_file_crash_assert.c → fixtures/test_nosanitize_crash_assert.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv.c → fixtures/test_nosanitize_crash_sigsegv.c} +8 -0
- data/assets/{test_example_file_crash_sigsegv_with_param.c → fixtures/test_nosanitize_crash_sigsegv_with_param.c} +8 -0
- data/assets/fixtures/test_nosanitize_heap_buffer_overflow.c +31 -0
- data/assets/fixtures/test_nosanitize_leak.c +34 -0
- data/assets/fixtures/test_nosanitize_two_findings.c +36 -0
- data/assets/{test_example_file_ub_shift_overflow.c → fixtures/test_nosanitize_ub_shift_overflow.c} +9 -0
- data/assets/fixtures/test_plain_inline_module.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/alpha/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/beta/calc.c +4 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_alpha.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_ambiguous.c +15 -0
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_beta.c +15 -0
- data/assets/fixtures/tests_with_conditional_includes/src/feature_extra2.h +13 -0
- data/assets/fixtures/tests_with_conditional_includes/src/macro_target_extra.h +13 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.c +19 -3
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget.h +1 -0
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.c +17 -1
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget.c +12 -4
- data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/test/test_widget_feature.c +8 -5
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_01.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Case_02.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/FeatureConfig.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/Gpt.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModuleConfig.h +17 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart1.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/MyModulePart2.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/drivers/widget.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.c +7 -0
- data/assets/fixtures/tests_with_conditional_mocks/src/reader.h +6 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01.c +21 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_01_legacy.c +16 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_Case_02.c +31 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_FeatureConfig.c +15 -0
- data/assets/fixtures/tests_with_conditional_mocks/test/test_reader.c +13 -0
- data/assets/fixtures/tests_with_duplicate_test_names/integration/test_foo.c +21 -0
- data/assets/fixtures/tests_with_duplicate_test_names/unit/test_foo.c +21 -0
- data/assets/fixtures/tests_with_fallback_conditionals/src/conditional_module.c +28 -0
- data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/test/test_conditionals.c +8 -1
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_lower.s +2 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/asm_helper_upper.S +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.c +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/src/counter_module.h +13 -0
- data/assets/fixtures/tests_with_multiple_assembly_extensions/test/test_counter_module.c +27 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/app/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/drivers/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.c +30 -0
- data/assets/fixtures/tests_with_subdir_includes/src/module/sensor.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/src/shared/config.h +13 -0
- data/assets/fixtures/tests_with_subdir_includes/test/test_sensor.c +32 -0
- data/bin/actionator.rb +234 -0
- data/bin/app_cfg.rb +28 -0
- data/bin/cli.rb +78 -47
- data/bin/cli_handler.rb +96 -58
- data/bin/cli_helper.rb +95 -49
- data/bin/cli_options_transform.rb +22 -0
- data/bin/{configinator.rb → composinator.rb} +39 -32
- data/bin/mixin_resolvinator.rb +124 -0
- data/bin/mixin_standardizer.rb +31 -61
- data/bin/mixinator.rb +27 -29
- data/bin/mixins.rb +0 -5
- data/bin/objects.yml +20 -7
- data/bin/path_validator.rb +6 -5
- data/bin/projectinator.rb +51 -142
- data/bin/rake_patches.rb +36 -2
- data/bin/recursive_merger.rb +7 -1
- data/bin/versionator.rb +2 -3
- data/ceedling.gemspec +83 -12
- data/docs/BreakingChanges.md +46 -2
- data/docs/CONTRIBUTING.md +45 -29
- data/docs/CeedlingPullRequestChecklist.md +10 -9
- data/docs/Changelog.md +337 -37
- data/docs/KnownIssues.md +30 -4
- data/docs/ReleaseNotes.md +288 -12
- data/docs/SECURITY.md +46 -2
- data/docs/ThrowTheSwitchCodingStandard.md +21 -3
- data/docs/overrides/main.html +35 -0
- data/examples/temp_sensor/mixin/add_bullseye.yml +19 -0
- data/examples/wondrous_forest/README.md +3 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.c +21 -0
- data/examples/wondrous_forest/src/sensors/light/Calibration.h +14 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.c +23 -0
- data/examples/wondrous_forest/src/sensors/soil/Calibration.h +14 -0
- data/examples/wondrous_forest/test/TestCalibration.c +39 -0
- data/lib/ceedling/batchinator.rb +81 -22
- data/lib/ceedling/c_extractor/README.md +61 -0
- data/lib/ceedling/c_extractor/c_extractor.rb +33 -2
- data/lib/ceedling/c_extractor/c_extractor_code_text.rb +18 -10
- data/lib/ceedling/c_extractor/c_extractor_constants.rb +10 -10
- data/lib/ceedling/c_extractor/c_extractor_declarations.rb +14 -14
- data/lib/ceedling/c_extractor/c_extractor_functions.rb +10 -13
- data/lib/ceedling/c_extractor/c_extractor_preprocessing.rb +77 -0
- data/lib/ceedling/c_extractor/c_extractor_types.rb +8 -5
- data/lib/ceedling/ceedling.h +33 -0
- data/lib/ceedling/config/config_matchinator.rb +36 -13
- data/lib/ceedling/config/configurator.rb +370 -531
- data/lib/ceedling/config/configurator_builder.rb +253 -365
- data/lib/ceedling/config/configurator_plugins.rb +68 -102
- data/lib/ceedling/config/configurator_setup.rb +360 -616
- data/lib/ceedling/config/configurator_validator.rb +114 -142
- data/lib/ceedling/config/line_marker_suppressors.rb +67 -0
- data/lib/ceedling/constants.rb +60 -6
- data/lib/ceedling/defaults.rb +28 -14
- data/lib/ceedling/defineinator.rb +9 -4
- data/lib/ceedling/dependencies/README.md +69 -0
- data/lib/ceedling/dependencies/dependency_cache_store.rb +160 -0
- data/lib/ceedling/dependencies/dependency_debug_tree.rb +129 -0
- data/lib/ceedling/dependencies/dependency_differ.rb +127 -0
- data/lib/ceedling/dependencies/dependency_hasher.rb +94 -0
- data/lib/ceedling/dependencies/dependency_path_normalizer.rb +80 -0
- data/lib/ceedling/dependencies/dependency_tracker.rb +405 -0
- data/lib/ceedling/dependencies/dependinator.rb +65 -0
- data/lib/ceedling/dependencies/gcc_dependency_parser.rb +86 -0
- data/lib/ceedling/encodinator.rb +23 -11
- data/lib/ceedling/file_finder.rb +373 -89
- data/lib/ceedling/file_finder_helper.rb +44 -33
- data/lib/ceedling/file_path_collection_utils.rb +17 -4
- data/lib/ceedling/file_path_utils.rb +310 -52
- data/lib/ceedling/file_wrapper.rb +275 -8
- data/lib/ceedling/filename_extension.rb +91 -0
- data/lib/ceedling/flaginator.rb +6 -2
- data/lib/ceedling/generators/generator.rb +192 -70
- data/lib/ceedling/generators/generator_helper.rb +116 -69
- data/lib/ceedling/generators/generator_mocks.rb +13 -8
- data/lib/ceedling/generators/generator_partials.rb +47 -15
- data/lib/ceedling/generators/generator_test_results.rb +29 -17
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +199 -107
- data/lib/ceedling/generators/generator_test_results_sanity_checker.rb +1 -1
- data/lib/ceedling/includes/include_factory.rb +21 -6
- data/lib/ceedling/includes/include_pathinator.rb +40 -4
- data/lib/ceedling/includes/includes.rb +215 -61
- data/lib/ceedling/loginator.rb +13 -4
- data/lib/ceedling/objects.yml +216 -33
- data/lib/ceedling/parsing_parcels.rb +39 -13
- data/lib/ceedling/partials/README.md +53 -0
- data/lib/ceedling/partials/partializer.rb +118 -26
- data/lib/ceedling/partials/partializer_config.rb +141 -8
- data/lib/ceedling/partials/partializer_helper.rb +88 -2
- data/lib/ceedling/partials/partializer_utils.rb +1 -1
- data/lib/ceedling/partials/partials.rb +4 -4
- data/lib/ceedling/path_matcher.rb +163 -0
- data/lib/ceedling/path_mirror.rb +73 -0
- data/lib/ceedling/plugins/plugin.rb +1 -1
- data/lib/ceedling/plugins/plugin_manager.rb +31 -15
- data/lib/ceedling/plugins/plugin_manager_helper.rb +5 -1
- data/lib/ceedling/plugins/plugin_reportinator.rb +36 -7
- data/lib/ceedling/plugins/plugin_reportinator_helper.rb +3 -3
- data/lib/ceedling/plugins/report_log_writer_plugin.rb +66 -0
- data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +18 -5
- data/lib/ceedling/preprocess/README.md +135 -120
- data/lib/ceedling/preprocess/c_comment_scanner.rb +9 -7
- data/lib/ceedling/preprocess/c_preprocessor_conditionals.rb +27 -10
- data/lib/ceedling/preprocess/preprocessinator.rb +253 -217
- data/lib/ceedling/preprocess/preprocessinator_bare_includes_extractor.rb +7 -10
- data/lib/ceedling/preprocess/preprocessinator_code_finder.rb +8 -6
- data/lib/ceedling/preprocess/preprocessinator_comment_stripper.rb +5 -3
- data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +86 -82
- data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +182 -163
- data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +174 -8
- data/lib/ceedling/preprocess/preprocessinator_reconstructor.rb +41 -20
- data/lib/ceedling/quote_include_isolator.rb +129 -0
- data/lib/ceedling/rake_app/rake_task_registry.rb +9 -9
- data/lib/ceedling/rake_app/rake_wrapper.rb +0 -13
- data/lib/ceedling/rake_app/rakefile_component_resolver.rb +24 -12
- data/lib/ceedling/rake_app/test_task_name.rb +29 -0
- data/lib/ceedling/rakefile.rb +3 -1
- data/lib/ceedling/{tasks_base.rake → rakefiles/base/tasks_base.rake} +1 -1
- data/lib/ceedling/{tasks_filesystem.rake → rakefiles/base/tasks_filesystem.rake} +3 -0
- data/lib/ceedling/rakefiles/release/rules_release.rake +52 -0
- data/lib/ceedling/{erb_wrapper.rb → rakefiles/release/tasks_release.rake} +5 -8
- data/lib/ceedling/{rules_tests.rake → rakefiles/tests/rules_tests.rake} +4 -18
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +54 -0
- data/lib/ceedling/{tasks_tests.rake → rakefiles/tests/tasks_tests.rake} +11 -20
- data/lib/ceedling/rakefiles/tests/tasks_tests_generate.rake +55 -0
- data/lib/ceedling/release_invoker/README.md +35 -0
- data/lib/ceedling/release_invoker/release_build_executor.rb +263 -0
- data/lib/ceedling/release_invoker/release_build_planner.rb +80 -0
- data/lib/ceedling/release_invoker/release_invoker.rb +78 -0
- data/lib/ceedling/release_invoker/release_invoker_types.rb +40 -0
- data/lib/ceedling/reportinator.rb +18 -2
- data/lib/ceedling/ruby_expandinator.rb +40 -1
- data/lib/ceedling/setupinator.rb +13 -3
- data/lib/ceedling/system_wrapper.rb +17 -0
- data/lib/ceedling/templateinator.rb +146 -0
- data/lib/ceedling/test_context_extractor.rb +59 -28
- data/lib/ceedling/test_invoker/HEADER_COLLISIONS.md +41 -0
- data/lib/ceedling/test_invoker/PIPELINE.md +142 -0
- data/lib/ceedling/test_invoker/README.md +6 -0
- data/lib/ceedling/test_invoker/mock_locator.rb +49 -0
- data/lib/ceedling/test_invoker/partials_manager.rb +426 -0
- data/lib/ceedling/test_invoker/standin_headerinator.rb +136 -0
- data/lib/ceedling/test_invoker/test_bare_includes_extractinator.rb +117 -0
- data/lib/ceedling/test_invoker/test_build_executor.rb +800 -429
- data/lib/ceedling/test_invoker/test_build_planner.rb +175 -70
- data/lib/ceedling/test_invoker/test_build_setup.rb +132 -241
- data/lib/ceedling/test_invoker/test_build_validations.rb +102 -0
- data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +148 -0
- data/lib/ceedling/test_invoker/test_includes_extractinator.rb +34 -0
- data/lib/ceedling/test_invoker/test_includes_preprocessinator.rb +118 -0
- data/lib/ceedling/test_invoker/test_includes_reconcilinator.rb +149 -0
- data/lib/ceedling/test_invoker/test_invoker.rb +16 -183
- data/lib/ceedling/test_invoker/test_invoker_types.rb +85 -16
- data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +121 -0
- data/lib/ceedling/test_invoker/test_pipeline_manager.rb +303 -0
- data/lib/ceedling/test_invoker/test_runner_generatinator.rb +105 -0
- data/lib/ceedling/test_invoker/test_search_paths.rb +73 -0
- data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +78 -0
- data/lib/ceedling/tool_executor.rb +42 -13
- data/lib/ceedling/tool_executor_helper.rb +1 -1
- data/lib/ceedling/tool_validator.rb +124 -123
- data/lib/ceedling/yaml_wrapper.rb +5 -3
- data/lib/version.rb +19 -2
- data/mkdocs.prerelease.yml +42 -0
- data/mkdocs.yml +10 -2
- data/plugins/bullseye/bullseye.rake +71 -111
- data/plugins/bullseye/config/defaults.yml +12 -54
- data/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/plugins/bullseye/lib/bullseye.rb +511 -120
- data/plugins/bullseye/lib/bullseye_constants.rb +100 -0
- data/plugins/command_hooks/lib/command_hooks.rb +117 -199
- data/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb +72 -27
- data/plugins/cppcheck/config/defaults.yml +6 -1
- data/plugins/cppcheck/config/defaults_cppcheck.rb +5 -1
- data/plugins/cppcheck/cppcheck.rake +7 -1
- data/plugins/cppcheck/lib/cppcheck.rb +175 -26
- data/plugins/cppcheck/lib/cppcheck_constants.rb +12 -0
- data/plugins/cppcheck/lib/cppcheck_reports.rb +5 -1
- data/plugins/dependencies/Rakefile +14 -2
- data/plugins/dependencies/config/defaults.yml +9 -6
- data/plugins/dependencies/dependencies.rake +46 -76
- data/plugins/dependencies/example/boss/project.yml +1 -1
- data/plugins/dependencies/example/supervisor/project.yml +1 -1
- data/plugins/dependencies/example/version.tar.gzip +0 -0
- data/plugins/dependencies/lib/dependencies.rb +232 -427
- data/plugins/dependencies/lib/dependency_commands.rb +72 -0
- data/plugins/dependencies/lib/dependency_environment.rb +57 -0
- data/plugins/dependencies/lib/dependency_spec.rb +145 -0
- data/plugins/fff/.rspec +1 -0
- data/plugins/fff/Rakefile +14 -2
- data/plugins/fff/examples/fff_example/project.yml +1 -1
- data/plugins/fff/lib/fff.rb +30 -9
- data/plugins/fff/lib/fff_mock_generator.rb +142 -128
- data/plugins/fff/spec/fff_mock_header_generator_spec.rb +15 -0
- data/plugins/fff/spec/fff_mock_source_generator_spec.rb +14 -0
- data/plugins/fff/spec/spec_helper.rb +45 -0
- data/plugins/fff/src/fff_unity_helper.h +5 -0
- data/plugins/fff/vendor/fff/fakegen.rb +5 -4
- data/plugins/fff/vendor/fff/fff.h +4 -4
- data/plugins/gcov/config/defaults.yml +5 -0
- data/plugins/gcov/gcov.rake +16 -15
- data/plugins/gcov/lib/console_reportinator.rb +140 -20
- data/plugins/gcov/lib/gcov.rb +155 -60
- data/plugins/gcov/lib/gcov_constants.rb +4 -7
- data/plugins/gcov/lib/gcov_reportinator.rb +90 -0
- data/plugins/gcov/lib/gcov_types.rb +62 -1
- data/plugins/gcov/lib/gcovr_reportinator.rb +255 -213
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +122 -44
- data/plugins/module_generator/Rakefile +4 -4
- data/plugins/module_generator/config/module_generator.yml +0 -1
- data/plugins/module_generator/example/project.yml +1 -1
- data/plugins/module_generator/lib/module_generator.rb +117 -87
- data/plugins/module_generator/lib/module_generator_options.rb +150 -0
- data/plugins/module_generator/lib/module_generator_project.rb +45 -0
- data/plugins/module_generator/lib/module_generator_request.rb +83 -0
- data/plugins/module_generator/lib/module_generator_test_file.rb +68 -0
- data/plugins/module_generator/lib/module_generator_unity.rb +24 -0
- data/plugins/module_generator/module_generator.rake +24 -46
- data/plugins/report_build_warnings_log/config/defaults.yml +4 -1
- data/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb +47 -55
- data/plugins/report_build_warnings_log/lib/warning_collector.rb +140 -0
- data/plugins/report_build_warnings_log/lib/warning_reports.rb +135 -0
- data/plugins/report_tests_gtestlike_stdout/assets/test_results.template +3 -0
- data/{spec/units/configurator_builder_spec.rb → plugins/report_tests_gtestlike_stdout/config/defaults.yml} +6 -10
- data/plugins/report_tests_gtestlike_stdout/lib/gtestlike_report.rb +168 -0
- data/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb +25 -1
- data/plugins/report_tests_ide_stdout/assets/test_results.template +50 -0
- data/plugins/report_tests_ide_stdout/config/defaults.yml +13 -0
- data/plugins/report_tests_ide_stdout/lib/ide_report_lines.rb +103 -0
- data/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb +12 -4
- data/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb +33 -51
- data/plugins/report_tests_log_factory/lib/html_tests_reporter.rb +286 -295
- data/plugins/report_tests_log_factory/lib/json_tests_reporter.rb +22 -35
- data/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb +91 -133
- data/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb +72 -86
- data/plugins/report_tests_log_factory/lib/tests_reporter.rb +31 -12
- data/plugins/report_tests_pretty_stdout/assets/{template.erb → test_results.template} +8 -8
- data/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb +18 -48
- data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +13 -2
- data/plugins/sanitize/config/defaults.yml +44 -0
- data/plugins/sanitize/config/defaults_sanitize.rb +20 -0
- data/plugins/sanitize/lib/sanitize.rb +174 -0
- data/plugins/sanitize/lib/sanitize_config.rb +110 -0
- data/plugins/sanitize/lib/sanitize_constants.rb +13 -0
- data/plugins/sanitize/lib/sanitize_findings.rb +85 -0
- data/plugins/sanitize/lib/sanitize_records.rb +115 -0
- data/plugins/sanitize/lib/sanitize_reports.rb +135 -0
- data/plugins/sanitize/sanitize.rake +108 -0
- data/plugins/valgrind/config/defaults.yml +7 -1
- data/plugins/valgrind/config/defaults_valgrind.rb +6 -1
- data/plugins/valgrind/lib/valgrind.rb +202 -39
- data/plugins/valgrind/lib/valgrind_constants.rb +4 -0
- data/plugins/valgrind/lib/valgrind_report.rb +52 -0
- data/plugins/valgrind/valgrind.rake +37 -15
- data/site-local/404.html +239 -19
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js → bundle.c21346df.min.js} +3 -3
- data/site-local/assets/javascripts/{bundle.d7400e89.min.js.map → bundle.c21346df.min.js.map} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js → search.a7633da7.min.js} +2 -2
- data/site-local/assets/javascripts/workers/{search.2c215733.min.js.map → search.a7633da7.min.js.map} +1 -1
- data/site-local/assets/stylesheets/main.57a0d79d.min.css +6 -0
- data/site-local/assets/stylesheets/main.57a0d79d.min.css.map +1 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css +4 -0
- data/site-local/assets/stylesheets/palette.fb2fffe2.min.css.map +1 -0
- data/site-local/configuration/environment-vars.html +239 -19
- data/site-local/configuration/global-collections.html +239 -24
- data/site-local/configuration/index.html +240 -20
- data/site-local/configuration/loading.html +251 -27
- data/site-local/configuration/mixins.html +247 -26
- data/site-local/configuration/parallel-builds.html +239 -19
- data/site-local/configuration/project-file.html +268 -37
- data/site-local/configuration/reference/cexception.html +246 -25
- data/site-local/configuration/reference/cmock.html +272 -19
- data/site-local/configuration/reference/defines.html +263 -34
- data/site-local/configuration/reference/environment.html +246 -26
- data/site-local/configuration/reference/extension.html +352 -21
- data/site-local/configuration/reference/files.html +258 -24
- data/site-local/configuration/reference/flags.html +268 -31
- data/site-local/configuration/reference/index.html +239 -19
- data/site-local/configuration/reference/libraries.html +239 -19
- data/site-local/configuration/reference/mixins.html +239 -19
- data/site-local/configuration/reference/partials.html +240 -24
- data/site-local/configuration/reference/paths.html +269 -23
- data/site-local/configuration/reference/plugins.html +239 -19
- data/site-local/configuration/reference/project.html +292 -29
- data/site-local/configuration/reference/release-build.html +247 -19
- data/site-local/configuration/reference/test-build.html +281 -29
- data/site-local/configuration/reference/test-runner.html +279 -22
- data/site-local/configuration/reference/tools.html +257 -31
- data/site-local/configuration/reference/unity.html +271 -20
- data/site-local/configuration/which-ceedling.html +239 -19
- data/site-local/development/index.html +245 -19
- data/site-local/development/plugins/configuration.html +260 -22
- data/site-local/development/plugins/index.html +258 -20
- data/site-local/development/plugins/plugin-subclass.html +912 -174
- data/site-local/development/plugins/rake-tasks.html +269 -21
- data/site-local/development/releases.html +4759 -0
- data/site-local/development/workflow.html +1023 -58
- data/site-local/getting-started/builds.html +4593 -0
- data/site-local/getting-started/command-line.html +409 -39
- data/site-local/getting-started/example-projects/cipher-quest.html +239 -19
- data/site-local/getting-started/example-projects/index.html +240 -20
- data/site-local/getting-started/example-projects/temp-sensor.html +239 -19
- data/site-local/getting-started/example-projects/wondrous-forest.html +239 -19
- data/site-local/getting-started/index.html +246 -19
- data/site-local/getting-started/installation.html +249 -27
- data/site-local/getting-started/quick-start.html +242 -20
- data/site-local/help.html +246 -19
- data/site-local/index.html +284 -27
- data/site-local/overview/build-system.html +240 -20
- data/site-local/overview/index.html +239 -19
- data/site-local/overview/test-environments.html +248 -19
- data/site-local/overview/tools-and-frameworks.html +239 -19
- data/site-local/plugins/beep.html +242 -19
- data/site-local/plugins/bullseye/index.html +5068 -0
- data/site-local/plugins/bullseye/licensing.html +4826 -0
- data/site-local/plugins/command-hooks.html +258 -34
- data/site-local/plugins/compile-commands-json-db.html +247 -22
- data/site-local/plugins/cppcheck.html +1073 -268
- data/site-local/plugins/dependencies.html +927 -249
- data/site-local/plugins/fff.html +288 -21
- data/site-local/plugins/gcov/examples.html +243 -20
- data/site-local/plugins/gcov/gcovr.html +559 -71
- data/site-local/plugins/gcov/index.html +242 -19
- data/site-local/plugins/gcov/overview.html +253 -23
- data/site-local/plugins/gcov/reportgenerator.html +380 -46
- data/site-local/plugins/gcov/reporting.html +339 -105
- data/site-local/plugins/gcov/setup.html +244 -20
- data/site-local/plugins/gcov/tool-versions.html +292 -24
- data/site-local/plugins/gcov/troubleshooting.html +265 -42
- data/site-local/plugins/index.html +285 -41
- data/site-local/plugins/module-generator.html +770 -200
- data/site-local/plugins/report-build-warnings-log.html +569 -38
- data/site-local/plugins/report-tests-gtestlike-stdout.html +458 -89
- data/site-local/plugins/report-tests-ide-stdout.html +645 -56
- data/site-local/plugins/report-tests-log-factory.html +364 -111
- data/site-local/plugins/report-tests-pretty-stdout.html +243 -20
- data/site-local/plugins/report-tests-raw-output-log.html +242 -19
- data/site-local/plugins/report-tests-teamcity-stdout.html +252 -29
- data/site-local/plugins/sanitize.html +5322 -0
- data/site-local/plugins/valgrind.html +414 -34
- data/site-local/{plugins/bullseye.html → project/index.html} +288 -222
- data/site-local/project/release-history.html +242 -22
- data/site-local/project/sbom.html +4712 -0
- data/site-local/project/upgrade.html +241 -21
- data/site-local/reference/build-directives.html +248 -19
- data/site-local/reference/command-line.html +364 -21
- data/site-local/reference/environment-vars.html +239 -19
- data/site-local/reference/gcov-plugin.html +483 -23
- data/site-local/reference/global-collections.html +240 -20
- data/site-local/reference/index.html +239 -19
- data/site-local/reference/partials-macros.html +249 -19
- data/site-local/reference/project-configuration.html +239 -19
- data/site-local/sitemap.xml.gz +0 -0
- data/{docs/mkdocs/snapshot/assets → site-local/snapshot/assets/features}/project.yml +4 -1
- data/site-local/snapshot/examples/cipher_quest/index.html +249 -29
- data/site-local/snapshot/examples/temp_sensor/index.html +241 -21
- data/site-local/snapshot/examples/wondrous_forest/index.html +256 -30
- data/site-local/snapshot/plugins/bullseye/config/defaults.yml +24 -0
- data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +182 -0
- data/site-local/snapshot/plugins/gcov/config/defaults.yml +5 -0
- data/site-local/testing-guide/build-directives.html +331 -35
- data/site-local/testing-guide/conventions.html +671 -160
- data/site-local/testing-guide/frameworks.html +244 -24
- data/site-local/testing-guide/index.html +239 -26
- data/site-local/testing-guide/partials/configuration.html +241 -21
- data/site-local/testing-guide/partials/conventions.html +308 -23
- data/site-local/testing-guide/partials/directives.html +452 -58
- data/site-local/testing-guide/partials/example.html +247 -27
- data/site-local/testing-guide/partials/index.html +246 -19
- data/site-local/testing-guide/partials/overview.html +239 -19
- data/site-local/testing-guide/partials/variables.html +244 -24
- data/site-local/testing-guide/test-cases.html +246 -26
- data/site-local/testing-guide/test-sample.html +245 -25
- data/site-local/testing-guide/test-suite-anatomy.html +239 -19
- data/spec/integration/actionator_file_operations_spec.rb +287 -0
- data/spec/integration/analysis_tool_output_spec.rb +204 -0
- data/spec/{units/c_extractor/c_extractor_integration_spec.rb → integration/c_extractor_composition_spec.rb} +196 -17
- data/spec/integration/command_hooks_plugin_spec.rb +152 -0
- data/spec/integration/compile_commands_json_db_spec.rb +76 -0
- data/spec/integration/configurator_pipeline_spec.rb +190 -0
- data/spec/integration/configurator_plugins_spec.rb +122 -0
- data/spec/integration/configurator_validation_spec.rb +98 -0
- data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +396 -0
- data/spec/integration/dependencies/dependency_tracker_core_spec.rb +284 -0
- data/spec/integration/dependencies/dependency_tracker_diagnose_spec.rb +224 -0
- data/spec/integration/dependencies/dependency_tracker_filename_handling_spec.rb +118 -0
- data/spec/integration/dependencies/dependency_tracker_gcc_deps_spec.rb +199 -0
- data/spec/integration/dependencies/dependency_tracker_pruning_spec.rb +167 -0
- data/spec/integration/dependencies_plugin_spec.rb +473 -0
- data/spec/integration/erb_dependency_removed_spec.rb +167 -0
- data/spec/integration/includes_extraction_spec.rb +612 -0
- data/spec/integration/mixin_loading_spec.rb +414 -0
- data/spec/integration/module_generator_spec.rb +436 -0
- data/spec/integration/partials_fallback_preprocessing_spec.rb +316 -0
- data/spec/integration/partials_header_composition_spec.rb +889 -0
- data/spec/integration/partials_module_resolution_spec.rb +372 -0
- data/spec/integration/partials_symbol_linkage_spec.rb +371 -0
- data/spec/integration/preprocessing_transient_io_retry_spec.rb +135 -0
- data/spec/integration/quote_include_isolator_spec.rb +167 -0
- data/spec/integration/rake_task_registry_plugins_spec.rb +95 -0
- data/spec/integration/report_build_warnings_log_spec.rb +170 -0
- data/spec/integration/report_tests_log_factory_spec.rb +100 -0
- data/spec/integration/sanitizer_exclusions_spec.rb +126 -0
- data/spec/integration/system_harness_sanitizers_spec.rb +104 -0
- data/spec/integration/test_build_parallel_barrier_spec.rb +89 -0
- data/spec/integration/test_executable_manifest_spec.rb +118 -0
- data/spec/integration/test_includes_extractinator_spec.rb +293 -0
- data/spec/integration/tool_executor_spec.rb +224 -0
- data/spec/integration/tool_validator_spec.rb +133 -0
- data/spec/integration/vendor_copy_transient_io_retry_spec.rb +178 -0
- data/spec/manual/stress_test.rb +1 -1
- data/spec/support/config_yaml_helper.rb +17 -0
- data/spec/support/fixtures/sanitizer_reports/clang_asan_heap.txt +45 -0
- data/spec/support/fixtures/sanitizer_reports/clang_ubsan_shift.txt +5 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_heap.txt +47 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_leak.txt +10 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_segv.txt +6 -0
- data/spec/support/fixtures/sanitizer_reports/gcc_ubsan_shift.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__all_pass.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_branches_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_functions_only.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__coverage_none.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__empty.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__gcov_context.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__mixed_all.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_matching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_multiline.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_failure_nonmatching.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_no_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__one_ignore_with_message.txt +6 -0
- data/spec/support/fixtures/templates/bullseye__stdout_only.txt +6 -0
- data/spec/support/fixtures/templates/ide__all_pass.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_branches_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_functions_only.txt +10 -0
- data/spec/support/fixtures/templates/ide__coverage_none.txt +10 -0
- data/spec/support/fixtures/templates/ide__empty.txt +8 -0
- data/spec/support/fixtures/templates/ide__gcov_context.txt +28 -0
- data/spec/support/fixtures/templates/ide__mixed_all.txt +29 -0
- data/spec/support/fixtures/templates/ide__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/ide__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/ide__stdout_only.txt +16 -0
- data/spec/support/fixtures/templates/pretty__all_pass.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_branches_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_functions_only.txt +8 -0
- data/spec/support/fixtures/templates/pretty__coverage_none.txt +8 -0
- data/spec/support/fixtures/templates/pretty__empty.txt +6 -0
- data/spec/support/fixtures/templates/pretty__gcov_context.txt +31 -0
- data/spec/support/fixtures/templates/pretty__mixed_all.txt +35 -0
- data/spec/support/fixtures/templates/pretty__one_failure_matching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_multiline.txt +17 -0
- data/spec/support/fixtures/templates/pretty__one_failure_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_failure_nonmatching.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_no_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__one_ignore_with_message.txt +15 -0
- data/spec/support/fixtures/templates/pretty__stdout_only.txt +15 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.log +51 -0
- data/spec/support/fixtures/valgrind_reports/sigsegv.xml +182 -0
- data/spec/support/include_guard_helper.rb +20 -0
- data/spec/support/integration/configurator_integration_helper.rb +162 -0
- data/spec/support/integration/dependency_tracker_integration_helper.rb +136 -0
- data/spec/support/integration/partials_generation_integration_helper.rb +726 -0
- data/spec/support/integration/spec_integration_helper.rb +285 -0
- data/spec/support/integration/test_includes_harness.rb +259 -0
- data/spec/support/integration/tool_executor_integration_helper.rb +55 -0
- data/spec/support/spec_helper.rb +41 -0
- data/spec/support/system/sanitizers/asan_ubsan.yml +82 -0
- data/spec/support/system/sanitizers/asan_ubsan_leaks.yml +57 -0
- data/spec/support/system/simplecov_boot.rb +66 -0
- data/spec/support/system/spec_system_helper.rb +376 -16
- data/spec/support/system/system_context.rb +181 -59
- data/spec/support/template_render_cases.rb +166 -0
- data/spec/system/bracket_path_handling_spec.rb +175 -0
- data/spec/system/build_output_mirroring_spec.rb +89 -0
- data/spec/system/build_recovery_spec.rb +382 -0
- data/spec/system/bullseye_deployment_spec.rb +102 -0
- data/spec/system/cli_surface_spec.rb +245 -0
- data/spec/system/command_hooks_spec.rb +117 -0
- data/spec/system/conditional_include_macro_visibility_spec.rb +32 -124
- data/spec/system/conditional_mock_includes_spec.rb +181 -0
- data/spec/system/cppcheck_deployment_spec.rb +26 -8
- data/spec/system/delta_builds_spec.rb +751 -0
- data/spec/system/deployment_as_gem_spec.rb +7 -0
- data/spec/system/deployment_as_vendor_spec.rb +29 -145
- data/spec/system/dumpconfig_spec.rb +137 -0
- data/spec/system/encoding_stress_spec.rb +7 -4
- data/spec/system/example_cipher_quest_spec.rb +25 -100
- data/spec/system/example_temp_sensor_spec.rb +30 -172
- data/spec/system/example_wondrous_forest_spec.rb +25 -62
- data/spec/system/extension_multiple_values_spec.rb +75 -0
- data/spec/system/files_paths_reporting_spec.rb +154 -0
- data/spec/system/gcov_deployment_spec.rb +72 -3
- data/spec/system/header_include_path_validation_spec.rb +222 -0
- data/spec/system/implicit_source_header_correspondence_disambiguation_spec.rb +100 -0
- data/spec/system/include_path_reconciliation_spec.rb +64 -0
- data/spec/system/mixin_ordering_spec.rb +30 -415
- data/spec/system/mocks_partials_configuration_validation_spec.rb +126 -0
- data/spec/system/parent_directory_reference_spec.rb +114 -0
- data/spec/system/partials_module_disambiguation_spec.rb +143 -0
- data/spec/system/pinned_thread_count_spec.rb +102 -0
- data/spec/system/plugin_delta_builds_spec.rb +179 -0
- data/spec/system/preprocessing_encoding_spec.rb +87 -4
- data/spec/system/preprocessing_fallback_conditionals_spec.rb +19 -25
- data/spec/system/preprocessing_parameterized_tests_spec.rb +2 -2
- data/spec/system/rake_release_task_path_disambiguation_spec.rb +97 -0
- data/spec/system/rake_test_task_path_disambiguation_spec.rb +118 -0
- data/spec/system/report_and_tooling_plugins_spec.rb +327 -0
- data/spec/system/ruby_replacement_spec.rb +1 -1
- data/spec/system/same_named_modules_spec.rb +115 -0
- data/spec/system/sanitize_deployment_spec.rb +64 -0
- data/spec/system/shuffle_tests_spec.rb +139 -0
- data/spec/system/sibling_header_collision_spec.rb +620 -0
- data/spec/system/subdir_include_preservation_spec.rb +63 -0
- data/spec/system/support/bullseye_common_test_cases.rb +369 -0
- data/spec/system/support/bullseye_helpers.rb +70 -0
- data/spec/system/support/common_test_cases.rb +167 -43
- data/spec/system/support/cppcheck_common_test_cases.rb +80 -0
- data/spec/system/support/cppcheck_helpers.rb +10 -8
- data/spec/system/support/gcov_common_test_cases.rb +173 -37
- data/spec/system/support/gcov_helpers.rb +3 -3
- data/spec/system/support/gcov_partials_test_cases.rb +48 -2
- data/spec/system/support/sanitize_common_test_cases.rb +222 -0
- data/spec/system/support/sanitize_helpers.rb +27 -0
- data/spec/system/support/valgrind_common_test_cases.rb +116 -16
- data/spec/system/support/valgrind_helpers.rb +3 -4
- data/spec/system/test_pipeline_stop_points_spec.rb +160 -0
- data/spec/system/test_runner_system_include_spec.rb +19 -41
- data/spec/system/test_source_file_directive_spec.rb +235 -0
- data/spec/system/upgrade_as_vendor_spec.rb +25 -46
- data/spec/system/valgrind_deployment_spec.rb +41 -0
- data/spec/units/batchinator_spec.rb +314 -0
- data/spec/units/bin/actionator_spec.rb +412 -0
- data/spec/units/bin/app_cfg_spec.rb +100 -0
- data/spec/units/bin/cli_handler_spec.rb +205 -0
- data/spec/units/bin/cli_helper_spec.rb +248 -10
- data/spec/units/bin/cli_options_transform_spec.rb +49 -0
- data/spec/units/bin/composinator_spec.rb +236 -0
- data/spec/units/bin/{projectinator_mixin_spec.rb → mixin_resolvinator_spec.rb} +122 -83
- data/spec/units/bin/mixin_standardizer_spec.rb +4 -3
- data/spec/units/bin/mixinator_spec.rb +58 -22
- data/spec/units/bin/path_validator_spec.rb +112 -0
- data/spec/units/bin/projectinator_spec.rb +223 -0
- data/spec/units/bin/rake_patches_spec.rb +52 -0
- data/spec/units/bin/recursive_merger_spec.rb +22 -0
- data/spec/units/bin/versionator_spec.rb +104 -0
- data/spec/units/c_extractor/c_extractor_code_text_spec.rb +4 -4
- data/spec/units/c_extractor/c_extractor_declarations_spec.rb +70 -0
- data/spec/units/c_extractor/c_extractor_functions_spec.rb +75 -1
- data/spec/units/c_extractor/c_extractor_preprocessing_spec.rb +158 -0
- data/spec/units/c_extractor/c_extractor_spec.rb +236 -6
- data/spec/units/ceedling/templateinator_golden_spec.rb +84 -0
- data/spec/units/ceedling/templateinator_spec.rb +188 -0
- data/spec/units/config/configurator_builder_spec.rb +444 -0
- data/spec/units/config/configurator_plugins_spec.rb +160 -0
- data/spec/units/config/configurator_setup_spec.rb +724 -6
- data/spec/units/config/configurator_spec.rb +961 -0
- data/spec/units/config/configurator_validator_spec.rb +259 -0
- data/spec/units/config/line_marker_suppressors_spec.rb +89 -0
- data/spec/units/config_matchinator_spec.rb +103 -0
- data/spec/units/defineinator_spec.rb +158 -0
- data/spec/units/dependencies/dependency_cache_store_spec.rb +364 -0
- data/spec/units/dependencies/dependency_debug_tree_spec.rb +189 -0
- data/spec/units/dependencies/dependency_differ_spec.rb +139 -0
- data/spec/units/dependencies/dependency_hasher_spec.rb +141 -0
- data/spec/units/dependencies/dependency_path_normalizer_spec.rb +111 -0
- data/spec/units/dependencies/dependency_tracker_spec.rb +905 -0
- data/spec/units/dependencies/dependinator_spec.rb +99 -0
- data/spec/units/dependencies/gcc_dependency_parser_spec.rb +152 -0
- data/spec/units/encodinator_spec.rb +92 -0
- data/spec/units/file_finder_helper_spec.rb +99 -15
- data/spec/units/file_finder_spec.rb +495 -0
- data/spec/units/file_path_collection_utils_spec.rb +9 -0
- data/spec/units/file_path_utils_spec.rb +736 -0
- data/spec/units/file_wrapper_spec.rb +486 -0
- data/spec/units/filename_extension_spec.rb +120 -0
- data/spec/units/flaginator_spec.rb +114 -0
- data/spec/units/generators/generator_helper_spec.rb +113 -0
- data/spec/units/generators/generator_mocks_spec.rb +131 -0
- data/spec/units/generators/generator_partials_spec.rb +336 -160
- data/spec/units/generators/generator_spec.rb +317 -0
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +169 -9
- data/spec/units/generators/generator_test_results_sanity_checker_spec.rb +14 -6
- data/spec/units/generators/generator_test_results_spec.rb +65 -8
- data/spec/units/generators/generator_test_runner_spec.rb +1 -1
- data/spec/units/includes/include_factory_spec.rb +53 -0
- data/spec/units/includes/include_pathinator_spec.rb +269 -0
- data/spec/units/includes/include_spec.rb +8 -4
- data/spec/units/includes/includes_spec.rb +326 -18
- data/spec/units/mock_locator_spec.rb +74 -0
- data/spec/units/parsing_parcels_spec.rb +65 -0
- data/spec/units/partials/partializer_config_spec.rb +284 -18
- data/spec/units/partials/partializer_helper_spec.rb +122 -0
- data/spec/units/partials/partializer_spec.rb +346 -71
- data/spec/units/partials/partializer_utils_spec.rb +4 -4
- data/spec/units/partials_manager_spec.rb +539 -0
- data/spec/units/path_matcher_spec.rb +193 -0
- data/spec/units/path_mirror_spec.rb +103 -0
- data/spec/units/plugin_manager_spec.rb +77 -0
- data/spec/units/plugin_reportinator_spec.rb +78 -3
- data/spec/units/plugins/bullseye_spec.rb +1068 -0
- data/spec/units/plugins/command_hooks_spec.rb +157 -0
- data/spec/units/plugins/compile_commands_json_db_spec.rb +145 -0
- data/spec/units/plugins/console_reportinator_spec.rb +370 -0
- data/spec/units/plugins/cppcheck_spec.rb +330 -4
- data/spec/units/plugins/cppunit_tests_reporter_spec.rb +118 -0
- data/spec/units/plugins/dependencies_spec.rb +295 -0
- data/spec/units/plugins/dependency_commands_spec.rb +83 -0
- data/spec/units/plugins/dependency_environment_spec.rb +64 -0
- data/spec/units/plugins/dependency_spec_spec.rb +170 -0
- data/spec/units/plugins/gcov_reportinator_spec.rb +272 -0
- data/spec/units/plugins/gcov_spec.rb +521 -0
- data/spec/units/plugins/gcovr_reportinator_spec.rb +795 -0
- data/spec/units/plugins/gtestlike_report_spec.rb +363 -0
- data/spec/units/plugins/html_tests_reporter_spec.rb +158 -0
- data/spec/units/plugins/ide_report_lines_spec.rb +229 -0
- data/spec/units/plugins/json_tests_reporter_spec.rb +87 -0
- data/spec/units/plugins/junit_tests_reporter_spec.rb +237 -0
- data/spec/units/plugins/module_generator_options_spec.rb +185 -0
- data/spec/units/plugins/module_generator_project_spec.rb +55 -0
- data/spec/units/plugins/module_generator_request_spec.rb +107 -0
- data/spec/units/plugins/module_generator_spec.rb +214 -0
- data/spec/units/plugins/module_generator_test_file_spec.rb +102 -0
- data/spec/units/plugins/module_generator_unity_spec.rb +37 -0
- data/spec/units/plugins/report_build_warnings_log_spec.rb +199 -0
- data/spec/units/plugins/report_log_writer_plugin_spec.rb +94 -0
- data/spec/units/plugins/report_tests_gtestlike_stdout_spec.rb +274 -0
- data/spec/units/plugins/report_tests_ide_stdout_spec.rb +140 -0
- data/spec/units/plugins/report_tests_log_factory_spec.rb +210 -0
- data/spec/units/plugins/report_tests_pretty_stdout_spec.rb +83 -0
- data/spec/units/plugins/report_tests_raw_output_log_spec.rb +98 -0
- data/spec/units/plugins/report_tests_stdout_plugin_spec.rb +145 -0
- data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +121 -0
- data/spec/units/plugins/reportgenerator_reportinator_spec.rb +410 -0
- data/spec/units/plugins/sanitize_config_spec.rb +119 -0
- data/spec/units/plugins/sanitize_findings_spec.rb +69 -0
- data/spec/units/plugins/sanitize_records_spec.rb +114 -0
- data/spec/units/plugins/sanitize_reports_spec.rb +84 -0
- data/spec/units/plugins/sanitize_spec.rb +300 -0
- data/spec/units/plugins/tests_reporter_spec.rb +89 -0
- data/spec/units/plugins/valgrind_spec.rb +560 -0
- data/spec/units/plugins/warning_collector_spec.rb +185 -0
- data/spec/units/plugins/warning_reports_spec.rb +150 -0
- data/spec/units/preprocess/c_comment_scanner_spec.rb +17 -17
- data/spec/units/preprocess/c_preprocessor_conditionals_spec.rb +94 -0
- data/spec/units/preprocess/preprocessinator_bare_includes_extractor_spec.rb +73 -0
- data/spec/units/preprocess/preprocessinator_code_finder_spec.rb +35 -16
- data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +129 -48
- data/spec/units/preprocess/preprocessinator_file_assembler_spec.rb +292 -9
- data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +294 -16
- data/spec/units/preprocess/preprocessinator_line_marker_includes_extractor_spec.rb +356 -6
- data/spec/units/preprocess/preprocessinator_reconstructor_spec.rb +58 -4
- data/spec/units/preprocess/preprocessinator_spec.rb +693 -5
- data/spec/units/quote_include_isolator_spec.rb +176 -0
- data/spec/units/rake_app/rake_invocation_tracker_spec.rb +94 -0
- data/spec/units/rake_app/rake_task_registry_spec.rb +263 -0
- data/spec/units/rake_app/rake_utils_spec.rb +54 -0
- data/spec/units/rake_app/rake_wrapper_spec.rb +64 -0
- data/spec/units/rake_app/rakefile_component_resolver_spec.rb +182 -0
- data/spec/units/rake_app/test_task_name_spec.rb +47 -0
- data/spec/units/release_build_executor_spec.rb +404 -0
- data/spec/units/release_build_planner_spec.rb +144 -0
- data/spec/units/release_invoker_spec.rb +127 -0
- data/spec/units/reportinator_spec.rb +35 -0
- data/spec/units/ruby_expandinator_spec.rb +36 -0
- data/spec/units/standin_headerinator_spec.rb +168 -0
- data/spec/units/system_wrapper_spec.rb +16 -0
- data/spec/units/test_build_executor_spec.rb +1693 -8
- data/spec/units/test_build_planner_spec.rb +878 -0
- data/spec/units/test_build_setup_spec.rb +583 -0
- data/spec/units/test_context_extractor_spec.rb +51 -3
- data/spec/units/test_file_preprocessinator_spec.rb +206 -0
- data/spec/units/test_includes_extractinator_spec.rb +764 -0
- data/spec/units/test_invoker/objects_wiring_spec.rb +31 -0
- data/spec/units/test_invoker_spec.rb +147 -0
- data/spec/units/test_invoker_types_spec.rb +182 -0
- data/spec/units/test_pipeline_helpers_spec.rb +100 -0
- data/spec/units/test_pipeline_manager_spec.rb +415 -0
- data/spec/units/test_runner_generatinator_spec.rb +215 -0
- data/spec/units/test_runner_manager_spec.rb +70 -0
- data/spec/units/test_search_paths_spec.rb +84 -0
- data/spec/units/test_source_file_directive_resolver_spec.rb +239 -0
- data/spec/units/tool_executor_helper_spec.rb +1 -1
- data/spec/units/tool_executor_spec.rb +571 -2
- data/spec/units/tool_validator_spec.rb +303 -24
- data/spec/units/version_spec.rb +74 -0
- data/spec/units/yaml_wrapper_spec.rb +4 -1
- data/vendor/cmock/docs/CMock_Summary.md +11 -0
- data/vendor/cmock/lib/cmock_config.rb +1 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +31 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +8 -2
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +2 -2
- data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +7 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +4 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
- data/vendor/cmock/vendor/unity/test/Makefile +9 -2
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/cmock/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/cmock/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +78 -0
- data/vendor/cmock/vendor/unity/test/tests/test_unity_test_summary.rb +58 -0
- data/vendor/diy/lib/diy/factory.rb +5 -4
- data/vendor/diy/lib/diy.rb +5 -4
- data/vendor/diy/sample_code/car.rb +5 -4
- data/vendor/diy/sample_code/chassis.rb +5 -4
- data/vendor/diy/sample_code/diy_example.rb +5 -4
- data/vendor/diy/sample_code/engine.rb +5 -4
- data/vendor/diy/sample_code/objects.yml +5 -4
- data/vendor/diy/test/constructor.rb +5 -4
- data/vendor/diy/test/diy_test.rb +5 -4
- data/vendor/diy/test/factory_test.rb +5 -4
- data/vendor/diy/test/files/broken_construction.yml +5 -4
- data/vendor/diy/test/files/cat/cat.rb +5 -4
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -4
- data/vendor/diy/test/files/cat/heritage.rb +5 -4
- data/vendor/diy/test/files/cat/needs_input.yml +5 -4
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +5 -4
- data/vendor/diy/test/files/dog/dog_model.rb +5 -4
- data/vendor/diy/test/files/dog/dog_presenter.rb +5 -4
- data/vendor/diy/test/files/dog/dog_view.rb +5 -4
- data/vendor/diy/test/files/dog/file_resolver.rb +5 -4
- data/vendor/diy/test/files/dog/other_thing.rb +5 -4
- data/vendor/diy/test/files/dog/simple.yml +5 -4
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +5 -4
- data/vendor/diy/test/files/donkey/foo.rb +5 -4
- data/vendor/diy/test/files/factory/beef.rb +5 -4
- data/vendor/diy/test/files/factory/dog.rb +5 -4
- data/vendor/diy/test/files/factory/factory.yml +5 -4
- data/vendor/diy/test/files/factory/farm/llama.rb +5 -4
- data/vendor/diy/test/files/factory/farm/pork.rb +5 -4
- data/vendor/diy/test/files/factory/kitten.rb +5 -4
- data/vendor/diy/test/files/fud/objects.yml +5 -4
- data/vendor/diy/test/files/fud/toy.rb +5 -4
- data/vendor/diy/test/files/functions/attached_things_builder.rb +5 -4
- data/vendor/diy/test/files/functions/invalid_method.yml +5 -4
- data/vendor/diy/test/files/functions/method_extractor.rb +5 -4
- data/vendor/diy/test/files/functions/nonsingleton_objects.yml +5 -4
- data/vendor/diy/test/files/functions/objects.yml +5 -4
- data/vendor/diy/test/files/functions/thing.rb +5 -4
- data/vendor/diy/test/files/functions/thing_builder.rb +5 -4
- data/vendor/diy/test/files/functions/things_builder.rb +5 -4
- data/vendor/diy/test/files/gnu/objects.yml +5 -4
- data/vendor/diy/test/files/gnu/thinger.rb +5 -4
- data/vendor/diy/test/files/goat/base.rb +5 -4
- data/vendor/diy/test/files/goat/can.rb +5 -4
- data/vendor/diy/test/files/goat/goat.rb +5 -4
- data/vendor/diy/test/files/goat/objects.yml +5 -4
- data/vendor/diy/test/files/goat/paper.rb +5 -4
- data/vendor/diy/test/files/goat/plane.rb +5 -4
- data/vendor/diy/test/files/goat/shirt.rb +5 -4
- data/vendor/diy/test/files/goat/wings.rb +5 -4
- data/vendor/diy/test/files/horse/holder_thing.rb +5 -4
- data/vendor/diy/test/files/horse/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/animal/bird.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/cat.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +5 -4
- data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +5 -4
- data/vendor/diy/test/files/namespace/bad_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/class_name_combine.yml +5 -4
- data/vendor/diy/test/files/namespace/no_module_specified.yml +5 -4
- data/vendor/diy/test/files/namespace/objects.yml +5 -4
- data/vendor/diy/test/files/namespace/road.rb +5 -4
- data/vendor/diy/test/files/namespace/sky.rb +5 -4
- data/vendor/diy/test/files/namespace/subcontext.yml +5 -4
- data/vendor/diy/test/files/non_singleton/air.rb +5 -4
- data/vendor/diy/test/files/non_singleton/fat_cat.rb +5 -4
- data/vendor/diy/test/files/non_singleton/objects.yml +5 -4
- data/vendor/diy/test/files/non_singleton/pig.rb +5 -4
- data/vendor/diy/test/files/non_singleton/thread_spinner.rb +5 -4
- data/vendor/diy/test/files/non_singleton/tick.rb +5 -4
- data/vendor/diy/test/files/non_singleton/yard.rb +5 -4
- data/vendor/diy/test/files/yak/core_model.rb +5 -4
- data/vendor/diy/test/files/yak/core_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/core_view.rb +5 -4
- data/vendor/diy/test/files/yak/data_source.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_model.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_presenter.rb +5 -4
- data/vendor/diy/test/files/yak/fringe_view.rb +5 -4
- data/vendor/diy/test/files/yak/giant_squid.rb +5 -4
- data/vendor/diy/test/files/yak/krill.rb +5 -4
- data/vendor/diy/test/files/yak/my_objects.yml +5 -4
- data/vendor/diy/test/files/yak/sub_sub_context_test.yml +5 -4
- data/vendor/diy/test/test_helper.rb +5 -4
- data/vendor/unity/auto/generate_module.rb +4 -4
- data/vendor/unity/auto/generate_test_runner.rb +5 -1
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +9 -0
- data/vendor/unity/test/spec/generate_module_naming_spec.rb +38 -0
- data/vendor/unity/test/testdata/spi/MockConfig.h +19 -0
- data/vendor/unity/test/testdata/testRunnerGeneratorWithSameNamedMocks.c +42 -0
- data/vendor/unity/test/testdata/uart/MockConfig.h +19 -0
- data/vendor/unity/test/tests/test_generate_test_runner.rb +29 -0
- metadata +783 -295
- data/assets/tests_with_fallback_conditionals/src/conditional_module.c +0 -18
- data/bin/actions_wrapper.rb +0 -51
- data/docs/mkdocs/assets/images/ceedling-logo-circle.png +0 -0
- data/docs/mkdocs/assets/images/ceedling.svg +0 -90
- data/docs/mkdocs/assets/images/favicon.png +0 -0
- data/docs/mkdocs/assets/stylesheets/admonitions.css +0 -152
- data/docs/mkdocs/assets/stylesheets/fixes-local.css +0 -15
- data/docs/mkdocs/assets/stylesheets/styling.css +0 -102
- data/docs/mkdocs/configuration/environment-vars.md +0 -14
- data/docs/mkdocs/configuration/global-collections.md +0 -156
- data/docs/mkdocs/configuration/index.md +0 -75
- data/docs/mkdocs/configuration/loading.md +0 -89
- data/docs/mkdocs/configuration/mixins.md +0 -607
- data/docs/mkdocs/configuration/parallel-builds.md +0 -97
- data/docs/mkdocs/configuration/project-file.md +0 -216
- data/docs/mkdocs/configuration/reference/cexception.md +0 -35
- data/docs/mkdocs/configuration/reference/cmock.md +0 -106
- data/docs/mkdocs/configuration/reference/defines.md +0 -352
- data/docs/mkdocs/configuration/reference/environment.md +0 -55
- data/docs/mkdocs/configuration/reference/extension.md +0 -63
- data/docs/mkdocs/configuration/reference/files.md +0 -154
- data/docs/mkdocs/configuration/reference/flags.md +0 -296
- data/docs/mkdocs/configuration/reference/index.md +0 -176
- data/docs/mkdocs/configuration/reference/libraries.md +0 -82
- data/docs/mkdocs/configuration/reference/mixins.md +0 -24
- data/docs/mkdocs/configuration/reference/partials.md +0 -38
- data/docs/mkdocs/configuration/reference/paths.md +0 -276
- data/docs/mkdocs/configuration/reference/plugins.md +0 -60
- data/docs/mkdocs/configuration/reference/project.md +0 -333
- data/docs/mkdocs/configuration/reference/release-build.md +0 -62
- data/docs/mkdocs/configuration/reference/test-build.md +0 -55
- data/docs/mkdocs/configuration/reference/test-runner.md +0 -61
- data/docs/mkdocs/configuration/reference/tools.md +0 -457
- data/docs/mkdocs/configuration/reference/unity.md +0 -49
- data/docs/mkdocs/configuration/which-ceedling.md +0 -77
- data/docs/mkdocs/development/index.md +0 -61
- data/docs/mkdocs/development/plugins/configuration.md +0 -164
- data/docs/mkdocs/development/plugins/index.md +0 -84
- data/docs/mkdocs/development/plugins/plugin-subclass.md +0 -513
- data/docs/mkdocs/development/plugins/rake-tasks.md +0 -54
- data/docs/mkdocs/development/workflow.md +0 -284
- data/docs/mkdocs/getting-started/command-line.md +0 -477
- data/docs/mkdocs/getting-started/example-projects/cipher-quest.md +0 -65
- data/docs/mkdocs/getting-started/example-projects/index.md +0 -49
- data/docs/mkdocs/getting-started/example-projects/temp-sensor.md +0 -60
- data/docs/mkdocs/getting-started/example-projects/wondrous-forest.md +0 -45
- data/docs/mkdocs/getting-started/index.md +0 -41
- data/docs/mkdocs/getting-started/installation.md +0 -179
- data/docs/mkdocs/getting-started/quick-start.md +0 -86
- data/docs/mkdocs/help.md +0 -49
- data/docs/mkdocs/index.md +0 -222
- data/docs/mkdocs/overview/build-system.md +0 -115
- data/docs/mkdocs/overview/index.md +0 -29
- data/docs/mkdocs/overview/test-environments.md +0 -33
- data/docs/mkdocs/overview/tools-and-frameworks.md +0 -115
- data/docs/mkdocs/plugins/beep.md +0 -134
- data/docs/mkdocs/plugins/bullseye.md +0 -83
- data/docs/mkdocs/plugins/command-hooks.md +0 -268
- data/docs/mkdocs/plugins/compile-commands-json-db.md +0 -42
- data/docs/mkdocs/plugins/cppcheck.md +0 -377
- data/docs/mkdocs/plugins/dependencies.md +0 -310
- data/docs/mkdocs/plugins/fff.md +0 -247
- data/docs/mkdocs/plugins/gcov/examples.md +0 -92
- data/docs/mkdocs/plugins/gcov/gcovr.md +0 -526
- data/docs/mkdocs/plugins/gcov/index.md +0 -74
- data/docs/mkdocs/plugins/gcov/overview.md +0 -145
- data/docs/mkdocs/plugins/gcov/reportgenerator.md +0 -246
- data/docs/mkdocs/plugins/gcov/reporting.md +0 -147
- data/docs/mkdocs/plugins/gcov/setup.md +0 -232
- data/docs/mkdocs/plugins/gcov/tool-versions.md +0 -60
- data/docs/mkdocs/plugins/gcov/troubleshooting.md +0 -78
- data/docs/mkdocs/plugins/index.md +0 -261
- data/docs/mkdocs/plugins/module-generator.md +0 -267
- data/docs/mkdocs/plugins/report-build-warnings-log.md +0 -42
- data/docs/mkdocs/plugins/report-tests-gtestlike-stdout.md +0 -98
- data/docs/mkdocs/plugins/report-tests-ide-stdout.md +0 -63
- data/docs/mkdocs/plugins/report-tests-log-factory.md +0 -454
- data/docs/mkdocs/plugins/report-tests-pretty-stdout.md +0 -56
- data/docs/mkdocs/plugins/report-tests-raw-output-log.md +0 -52
- data/docs/mkdocs/plugins/report-tests-teamcity-stdout.md +0 -96
- data/docs/mkdocs/plugins/sample_html_report.png +0 -0
- data/docs/mkdocs/plugins/valgrind.md +0 -198
- data/docs/mkdocs/project/release-history.md +0 -61
- data/docs/mkdocs/project/upgrade.md +0 -85
- data/docs/mkdocs/reference/build-directives.md +0 -37
- data/docs/mkdocs/reference/command-line.md +0 -323
- data/docs/mkdocs/reference/environment-vars.md +0 -60
- data/docs/mkdocs/reference/gcov-plugin.md +0 -600
- data/docs/mkdocs/reference/global-collections.md +0 -160
- data/docs/mkdocs/reference/index.md +0 -65
- data/docs/mkdocs/reference/partials-macros.md +0 -79
- data/docs/mkdocs/reference/project-configuration.md +0 -46
- data/docs/mkdocs/snapshot/examples/cipher_quest/README.md +0 -210
- data/docs/mkdocs/snapshot/examples/temp_sensor/README.md +0 -283
- data/docs/mkdocs/snapshot/examples/wondrous_forest/README.md +0 -92
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -32
- data/docs/mkdocs/snapshot/plugins/gcov/config/defaults_gcov.rb +0 -136
- data/docs/mkdocs/snapshot.yml +0 -20
- data/docs/mkdocs/testing-guide/build-directives.md +0 -153
- data/docs/mkdocs/testing-guide/conventions.md +0 -616
- data/docs/mkdocs/testing-guide/frameworks.md +0 -192
- data/docs/mkdocs/testing-guide/index.md +0 -80
- data/docs/mkdocs/testing-guide/partials/configuration.md +0 -67
- data/docs/mkdocs/testing-guide/partials/conventions.md +0 -68
- data/docs/mkdocs/testing-guide/partials/directives.md +0 -212
- data/docs/mkdocs/testing-guide/partials/example.md +0 -149
- data/docs/mkdocs/testing-guide/partials/index.md +0 -88
- data/docs/mkdocs/testing-guide/partials/overview.md +0 -81
- data/docs/mkdocs/testing-guide/partials/variables.md +0 -244
- data/docs/mkdocs/testing-guide/test-cases.md +0 -194
- data/docs/mkdocs/testing-guide/test-sample.md +0 -94
- data/docs/mkdocs/testing-guide/test-suite-anatomy.md +0 -58
- data/lib/ceedling/cacheinator.rb +0 -53
- data/lib/ceedling/cacheinator_helper.rb +0 -60
- data/lib/ceedling/dependinator.rb +0 -31
- data/lib/ceedling/makefile.rb +0 -52
- data/lib/ceedling/release_invoker.rb +0 -112
- data/lib/ceedling/rules_release.rake +0 -109
- data/lib/ceedling/tasks_release.rake +0 -36
- data/plugins/fff/vendor/fff/Makefile +0 -10
- data/plugins/fff/vendor/fff/buildandtest +0 -15
- data/plugins/fff/vendor/fff/examples/Makefile +0 -7
- data/plugins/fff/vendor/fff/examples/driver_testing/Makefile +0 -64
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.c +0 -32
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.h +0 -21
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp +0 -58
- data/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp +0 -70
- data/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h +0 -25
- data/plugins/fff/vendor/fff/examples/driver_testing/registers.h +0 -23
- data/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h +0 -27
- data/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt +0 -25
- data/plugins/fff/vendor/fff/examples/embedded_ui/Makefile +0 -67
- data/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h +0 -31
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.c +0 -56
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI.h +0 -22
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c +0 -191
- data/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp +0 -144
- data/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c +0 -42
- data/plugins/fff/vendor/fff/gtest/Makefile +0 -22
- data/plugins/fff/vendor/fff/gtest/gtest-all.cc +0 -9118
- data/plugins/fff/vendor/fff/gtest/gtest-main.cc +0 -6
- data/plugins/fff/vendor/fff/gtest/gtest.h +0 -19547
- data/plugins/fff/vendor/fff/test/Makefile +0 -81
- data/plugins/fff/vendor/fff/test/c_test_framework.h +0 -25
- data/plugins/fff/vendor/fff/test/fff_test_c.c +0 -116
- data/plugins/fff/vendor/fff/test/fff_test_cpp.cpp +0 -53
- data/plugins/fff/vendor/fff/test/fff_test_global_c.c +0 -84
- data/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp +0 -31
- data/plugins/fff/vendor/fff/test/global_fakes.c +0 -21
- data/plugins/fff/vendor/fff/test/global_fakes.h +0 -47
- data/plugins/fff/vendor/fff/test/test_cases.include +0 -276
- data/plugins/report_tests_gtestlike_stdout/assets/template.erb +0 -83
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css +0 -1
- data/site-local/assets/stylesheets/main.ec1eaa64.min.css.map +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
- data/site-local/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
- data/site-local/snapshot/assets/project.yml +0 -404
- data/spec/system/partials_types_header_spec.rb +0 -166
- data/spec/units/configurator_spec.rb +0 -232
- /data/assets/{ceedling → features/ceedling} +0 -0
- /data/assets/{ceedling.cmd → features/ceedling.cmd} +0 -0
- /data/assets/{default_gitignore → features/default_gitignore} +0 -0
- /data/assets/{broken_uncovered_file.c → fixtures/broken_uncovered_file.c} +0 -0
- /data/assets/{example_file.c → fixtures/example_file.c} +0 -0
- /data/assets/{example_file.h → fixtures/example_file.h} +0 -0
- /data/assets/{example_file_call.c → fixtures/example_file_call.c} +0 -0
- /data/assets/{example_file_call.h → fixtures/example_file_call.h} +0 -0
- /data/assets/{example_file_with_statics.c → fixtures/example_file_with_statics.c} +0 -0
- /data/assets/{example_file_with_stdio.c → fixtures/example_file_with_stdio.c} +0 -0
- /data/assets/{example_file_with_stdio.h → fixtures/example_file_with_stdio.h} +0 -0
- /data/assets/{fake_crash_test_fixture.rb → fixtures/fake_crash_test_fixture.rb} +0 -0
- /data/assets/{partial_all_module.h → fixtures/partial_all_module.h} +0 -0
- /data/assets/{run_with_ubsan.rb → fixtures/run_with_ubsan.rb} +0 -0
- /data/assets/{same_dir_pairing_module.c → fixtures/same_dir_pairing_module.c} +0 -0
- /data/assets/{same_dir_pairing_module.h → fixtures/same_dir_pairing_module.h} +0 -0
- /data/assets/{same_dir_pairing_module_func.h → fixtures/same_dir_pairing_module_func.h} +0 -0
- /data/assets/{same_dir_pairing_other.c → fixtures/same_dir_pairing_other.c} +0 -0
- /data/assets/{same_dir_pairing_other.h → fixtures/same_dir_pairing_other.h} +0 -0
- /data/assets/{test_example_file.c → fixtures/test_example_file.c} +0 -0
- /data/assets/{test_example_file_2.c → fixtures/test_example_file_2.c} +0 -0
- /data/assets/{test_example_file_source_include.c → fixtures/test_example_file_source_include.c} +0 -0
- /data/assets/{test_example_file_success.c → fixtures/test_example_file_success.c} +0 -0
- /data/assets/{test_example_file_unity_printf.c → fixtures/test_example_file_unity_printf.c} +0 -0
- /data/assets/{test_example_file_verbose.c → fixtures/test_example_file_verbose.c} +0 -0
- /data/assets/{test_example_file_with_mock.c → fixtures/test_example_file_with_mock.c} +0 -0
- /data/assets/{test_example_file_with_stdio.c → fixtures/test_example_file_with_stdio.c} +0 -0
- /data/assets/{test_example_with_parameterized_tests.c → fixtures/test_example_with_parameterized_tests.c} +0 -0
- /data/assets/{test_partial_all_module.c → fixtures/test_partial_all_module.c} +0 -0
- /data/assets/{test_same_dir_pairing.c → fixtures/test_same_dir_pairing.c} +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_config.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/feature_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/local_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/nested_wrapper.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/project_flag_extra.h +0 -0
- /data/assets/{tests_with_conditional_includes → fixtures/tests_with_conditional_includes}/src/widget_feature.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/src/adc_hardware_configurator.h +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware.c +0 -0
- /data/assets/{tests_with_defines → fixtures/tests_with_defines}/test/test_adc_hardware_special.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/src/unicoder.h +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder.c +0 -0
- /data/assets/{tests_with_encoding → fixtures/tests_with_encoding}/test/test_unicoder_partial.c +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/conditional_module.h +0 -0
- /data/assets/{tests_with_fallback_conditionals → fixtures/tests_with_fallback_conditionals}/src/optional_dep.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/blanks.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/counter.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/src/decorators.h +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_blanks.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_counter.c +0 -0
- /data/assets/{tests_with_partials_coverage → fixtures/tests_with_partials_coverage}/test/test_decorators.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardwareC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorA.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorB.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/src/adc_hardware_configuratorC.h +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareA.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareB.c +0 -0
- /data/assets/{tests_with_preprocessing → fixtures/tests_with_preprocessing}/test/test_adc_hardwareC.c +0 -0
- /data/assets/{uncovered_example_file.c → fixtures/uncovered_example_file.c} +0 -0
- /data/plugins/bullseye/assets/{template.erb → coverage.template} +0 -0
|
@@ -7,33 +7,48 @@
|
|
|
7
7
|
|
|
8
8
|
require 'ceedling/constants'
|
|
9
9
|
require 'ceedling/exceptions'
|
|
10
|
-
|
|
11
|
-
# Add sort-ability to symbol so we can order keys array in hash for test-ability
|
|
12
|
-
class Symbol
|
|
13
|
-
include Comparable
|
|
14
|
-
|
|
15
|
-
def <=>(other)
|
|
16
|
-
self.to_s <=> other.to_s
|
|
17
|
-
end
|
|
18
|
-
end
|
|
10
|
+
require 'ceedling/config/line_marker_suppressors'
|
|
19
11
|
|
|
20
12
|
|
|
21
13
|
class ConfiguratorSetup
|
|
22
14
|
|
|
23
|
-
constructor :configurator_builder, :configurator_validator, :
|
|
24
|
-
|
|
15
|
+
constructor :configurator_builder, :configurator_validator, :loginator, :reportinator, :file_wrapper,
|
|
16
|
+
:system_wrapper, :tool_executor
|
|
17
|
+
|
|
18
|
+
# Path collections, in order, since each builds on those before it
|
|
19
|
+
PATH_COLLECTIONS = [
|
|
20
|
+
:expand_all_path_globs,
|
|
21
|
+
:collect_vendor_paths,
|
|
22
|
+
:collect_source_and_include_paths,
|
|
23
|
+
:collect_source_include_vendor_paths,
|
|
24
|
+
:collect_test_support_source_include_paths,
|
|
25
|
+
:collect_test_support_source_include_vendor_paths
|
|
26
|
+
].freeze
|
|
27
|
+
|
|
28
|
+
# File collections gathered after tests, assembly, and sources
|
|
29
|
+
FILE_COLLECTIONS = [
|
|
30
|
+
:collect_headers,
|
|
31
|
+
:collect_release_build_input,
|
|
32
|
+
:collect_existing_test_build_input,
|
|
33
|
+
:collect_release_artifact_extra_link_objects,
|
|
34
|
+
:collect_test_fixture_extra_link_objects,
|
|
35
|
+
:collect_vendor_framework_sources
|
|
36
|
+
].freeze
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# What startup learned of gdb backtraces: :usable, :fell_back to :simple, or :unknown
|
|
40
|
+
# when :gdb was never asked for
|
|
41
|
+
def gdb_backtrace_state
|
|
42
|
+
return @gdb_backtrace_state || :unknown
|
|
43
|
+
end
|
|
25
44
|
|
|
26
45
|
# Override to prevent exception handling from walking & stringifying the object variables.
|
|
27
46
|
# Object variables are gigantic and produce a flood of output.
|
|
28
47
|
def inspect
|
|
29
|
-
|
|
30
|
-
return this.class.name
|
|
48
|
+
return self.class.name
|
|
31
49
|
end
|
|
32
50
|
|
|
33
51
|
def build_project_config(ceedling_lib_path, logging_path, flattened_config)
|
|
34
|
-
# Housekeeping
|
|
35
|
-
@configurator_builder.cleanup( flattened_config )
|
|
36
|
-
|
|
37
52
|
# Add to hash values we build up from configuration & file system contents
|
|
38
53
|
flattened_config.merge!( @configurator_builder.set_build_paths( flattened_config, logging_path ) )
|
|
39
54
|
flattened_config.merge!( @configurator_builder.set_rakefile_components( ceedling_lib_path, flattened_config ) )
|
|
@@ -57,121 +72,70 @@ class ConfiguratorSetup
|
|
|
57
72
|
end
|
|
58
73
|
end
|
|
59
74
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# Copy backtrace debugging script into build/test directory structure.
|
|
83
|
-
# Ensure the destination exists first — it may not on a fresh build since
|
|
84
|
-
# Rake's :directories task runs later than this configuration-time setup.
|
|
85
|
-
if flattened_config[:project_use_backtrace] == :gdb
|
|
86
|
-
@file_wrapper.mkdir( flattened_config[:project_build_tests_root] )
|
|
87
|
-
@file_wrapper.cp_r(
|
|
88
|
-
File.join( ceedling_lib_path, BACKTRACE_GDB_SCRIPT_FILE ),
|
|
89
|
-
flattened_config[:project_build_tests_root]
|
|
90
|
-
)
|
|
75
|
+
# A vendor destination must be a directory, and the marker file inside it (unity.c,
|
|
76
|
+
# cmock.c, CException.c) a plain file. An interrupted run, or a second Ceedling run racing
|
|
77
|
+
# this one, can leave either as the wrong type, and the copy would then fail on every
|
|
78
|
+
# later build. The whole destination is cleared, so the copy recreates it.
|
|
79
|
+
def heal_vendor_path(path, marker_file)
|
|
80
|
+
return unless corrupted_vendor_path?( path, marker_file )
|
|
81
|
+
|
|
82
|
+
@loginator.log( "Removing corrupted vendor path (unexpected file/directory type): #{path}", Verbosity::COMPLAIN, LogLabels::NOTICE )
|
|
83
|
+
@file_wrapper.rm_rf( path )
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Brings build/vendor up to date with the frameworks and support files a build needs. Only
|
|
87
|
+
# a build does this, so a command that only reads the project leaves a concurrent build's
|
|
88
|
+
# files alone. A file that already matches its source is not written, and one that differs,
|
|
89
|
+
# such as an errant edit by hand, an IDE, or an automated agent, is replaced whole.
|
|
90
|
+
#
|
|
91
|
+
# A release build needs only CException, and that only when exceptions are enabled.
|
|
92
|
+
def vendor_frameworks_and_support_files(ceedling_lib_path, flattened_config, test_build:, release_build:)
|
|
93
|
+
frameworks_for_build( flattened_config, test_build: test_build, release_build: release_build ).each do |source, destination, marker_file|
|
|
94
|
+
heal_vendor_path( destination, marker_file )
|
|
95
|
+
@file_wrapper.sync_tree( source, destination )
|
|
91
96
|
end
|
|
92
97
|
|
|
93
|
-
|
|
94
|
-
@file_wrapper.cp_r(
|
|
95
|
-
File.join( ceedling_lib_path, CEEDLING_HEADER_FILEPATH ),
|
|
96
|
-
flattened_config[:project_build_vendor_ceedling_path]
|
|
97
|
-
) if flattened_config[:project_use_partials]
|
|
98
|
+
vendor_test_support_files( ceedling_lib_path, flattened_config ) if test_build
|
|
98
99
|
end
|
|
99
100
|
|
|
101
|
+
# Tests are collected after path collections, both to merge and to filter out of sources
|
|
100
102
|
def build_project_collections(flattened_config)
|
|
101
|
-
|
|
102
|
-
flattened_config.merge!( @configurator_builder.expand_all_path_globs( flattened_config ) )
|
|
103
|
+
PATH_COLLECTIONS.each { |collection| flattened_config.merge!( @configurator_builder.public_send( collection, flattened_config ) ) }
|
|
103
104
|
|
|
104
|
-
flattened_config.merge!( @configurator_builder.collect_vendor_paths( flattened_config ) )
|
|
105
|
-
flattened_config.merge!( @configurator_builder.collect_source_and_include_paths( flattened_config ) )
|
|
106
|
-
flattened_config.merge!( @configurator_builder.collect_source_include_vendor_paths( flattened_config ) )
|
|
107
|
-
flattened_config.merge!( @configurator_builder.collect_test_support_source_include_paths( flattened_config ) )
|
|
108
|
-
flattened_config.merge!( @configurator_builder.collect_test_support_source_include_vendor_paths( flattened_config ) )
|
|
109
|
-
|
|
110
|
-
# Collect tests: (1) To be merged (2) To filter out of sources (preventing accidental mixing of tests and source)
|
|
111
105
|
tests_collection, tests_list = @configurator_builder.collect_tests( flattened_config )
|
|
112
106
|
flattened_config.merge!( tests_collection )
|
|
113
|
-
|
|
114
107
|
flattened_config.merge!( @configurator_builder.collect_assembly( flattened_config ) )
|
|
115
108
|
flattened_config.merge!( @configurator_builder.collect_source( flattened_config, tests_list ) )
|
|
116
|
-
|
|
117
|
-
flattened_config.merge!( @configurator_builder.
|
|
118
|
-
flattened_config.merge!( @configurator_builder.collect_existing_test_build_input( flattened_config ) )
|
|
119
|
-
flattened_config.merge!( @configurator_builder.collect_release_artifact_extra_link_objects( flattened_config ) )
|
|
120
|
-
flattened_config.merge!( @configurator_builder.collect_test_fixture_extra_link_objects( flattened_config ) )
|
|
121
|
-
flattened_config.merge!( @configurator_builder.collect_vendor_framework_sources( flattened_config ) )
|
|
109
|
+
|
|
110
|
+
FILE_COLLECTIONS.each { |collection| flattened_config.merge!( @configurator_builder.public_send( collection, flattened_config ) ) }
|
|
122
111
|
|
|
123
112
|
return flattened_config
|
|
124
113
|
end
|
|
125
114
|
|
|
126
115
|
|
|
127
|
-
def build_constants_and_accessors(config,
|
|
116
|
+
def build_constants_and_accessors(config, target)
|
|
128
117
|
@configurator_builder.build_global_constants(config)
|
|
129
|
-
@configurator_builder.build_accessor_methods(config,
|
|
118
|
+
@configurator_builder.build_accessor_methods(config, target)
|
|
130
119
|
end
|
|
131
120
|
|
|
132
121
|
|
|
133
122
|
def validate_required_sections(config)
|
|
134
|
-
|
|
135
|
-
validation << @configurator_validator.exists?(config, :project)
|
|
136
|
-
validation << @configurator_validator.exists?(config, :paths)
|
|
137
|
-
|
|
138
|
-
return false if (validation.include?(false))
|
|
139
|
-
return true
|
|
123
|
+
return [:project, :paths].map { |section| @configurator_validator.exists?( config, section ) }.all?
|
|
140
124
|
end
|
|
141
125
|
|
|
142
126
|
|
|
143
127
|
def validate_required_section_values(config)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
validation << @configurator_validator.exists?(config, :paths, :test)
|
|
147
|
-
validation << @configurator_validator.exists?(config, :paths, :source)
|
|
148
|
-
|
|
149
|
-
return false if (validation.include?(false))
|
|
150
|
-
return true
|
|
128
|
+
required = [ [:project, :build_root], [:paths, :test], [:paths, :source] ]
|
|
129
|
+
return required.map { |keys| @configurator_validator.exists?( config, *keys ) }.all?
|
|
151
130
|
end
|
|
152
131
|
|
|
153
132
|
|
|
133
|
+
# Every check runs, so every problem is reported
|
|
154
134
|
def validate_paths(config)
|
|
155
|
-
valid
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
config
|
|
159
|
-
valid &= @configurator_validator.validate_filepath_simple( path, :cmock, :unity_helper_path )
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
config[:plugins][:load_paths].each do |path|
|
|
163
|
-
valid &= @configurator_validator.validate_filepath_simple( path, :plugins, :load_paths )
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
config[:paths].keys.sort.each do |key|
|
|
167
|
-
valid &= @configurator_validator.validate_path_list(config, :paths, key)
|
|
168
|
-
valid &= @configurator_validator.validate_paths_entries(config, key)
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
config[:files].keys.sort.each do |key|
|
|
172
|
-
valid &= @configurator_validator.validate_path_list(config, :files, key)
|
|
173
|
-
valid &= @configurator_validator.validate_files_entries(config, key)
|
|
174
|
-
end
|
|
135
|
+
valid = validate_simple_paths( config[:cmock][:unity_helper_path], :cmock, :unity_helper_path )
|
|
136
|
+
valid &= validate_simple_paths( config[:plugins][:load_paths], :plugins, :load_paths )
|
|
137
|
+
valid &= validate_path_section( config, :paths, :validate_paths_entries )
|
|
138
|
+
valid &= validate_path_section( config, :files, :validate_files_entries )
|
|
175
139
|
|
|
176
140
|
return valid
|
|
177
141
|
end
|
|
@@ -183,611 +147,391 @@ class ConfiguratorSetup
|
|
|
183
147
|
valid &= @configurator_validator.validate_tool( config:config, key:tool )
|
|
184
148
|
end
|
|
185
149
|
|
|
150
|
+
# A gdb that failed validation needs no probe and no fallback warning
|
|
151
|
+
validate_gdb_attach_capability( config ) if valid
|
|
152
|
+
|
|
186
153
|
return valid
|
|
187
154
|
end
|
|
188
155
|
|
|
189
|
-
|
|
190
|
-
|
|
156
|
+
# A gdb that answers `--version` may still be unable to attach to a process. macOS often
|
|
157
|
+
# revokes a Homebrew gdb's debugger entitlement, after a Homebrew upgrade, a macOS update,
|
|
158
|
+
# or a Gatekeeper or taskgated cache reset. A project using `:use_backtrace: :gdb` on such
|
|
159
|
+
# a machine falls back to `:simple` backtraces with a warning, rather than failing validation.
|
|
160
|
+
#
|
|
161
|
+
# Validating the gdb tool already proved gdb present, so where no probe runs it is usable.
|
|
162
|
+
def validate_gdb_attach_capability(config)
|
|
163
|
+
return unless config[:project][:use_backtrace] == :gdb
|
|
164
|
+
|
|
165
|
+
@gdb_backtrace_state = :usable
|
|
166
|
+
return unless @system_wrapper.macos?
|
|
167
|
+
|
|
168
|
+
# The probe runs with :boom false, so its :exit_code is not the real exit code.
|
|
169
|
+
# Success comes from the process status.
|
|
170
|
+
result = probe_gdb_attach()
|
|
171
|
+
return if result[:status]&.success?
|
|
172
|
+
|
|
173
|
+
@gdb_backtrace_state = :fell_back
|
|
174
|
+
config[:project][:use_backtrace] = :simple
|
|
175
|
+
|
|
176
|
+
walk = @reportinator.generate_config_walk( [:project, :use_backtrace] )
|
|
177
|
+
msg = "#{walk} is ':gdb' but #{gdb_attach_failure( result )}. Falling back to ':simple' for this run."
|
|
178
|
+
@loginator.log( msg, Verbosity::ERRORS, LogLabels::WARNING )
|
|
179
|
+
end
|
|
191
180
|
|
|
192
|
-
|
|
193
|
-
|
|
181
|
+
# Launches a short-lived process, attaches gdb to it, and detaches at once. A clean
|
|
182
|
+
# attach proves gdb works here, which `--version` cannot. One shell command keeps the
|
|
183
|
+
# success path fast.
|
|
184
|
+
def probe_gdb_attach()
|
|
185
|
+
command = {
|
|
186
|
+
name: 'gdb_attach_probe',
|
|
187
|
+
line: %q{sh -c 'sleep 5 & pid=$!; gdb -q --batch --pid "$pid" --eval-command detach 2>&1; rc=$?; kill "$pid" 2>/dev/null; exit $rc'},
|
|
188
|
+
options: { boom: false }
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return @tool_executor.exec( command )
|
|
192
|
+
end
|
|
194
193
|
|
|
195
|
-
# Test case filters are in use but test runner command line arguments are not enabled
|
|
196
|
-
if (test_case_filters and !cmdline_args)
|
|
197
|
-
msg = 'Test case filters cannot be used -- enable :test_runner ↳ :cmdline_args in your project configuration'
|
|
198
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
199
|
-
return false
|
|
200
|
-
end
|
|
201
194
|
|
|
202
|
-
|
|
195
|
+
# Each :defines context holds a list of symbols. :test and :preprocess may instead hold a
|
|
196
|
+
# matcher hash of test filename matchers, each naming a list of symbols.
|
|
197
|
+
#
|
|
198
|
+
# :defines:
|
|
199
|
+
# :<context>:
|
|
200
|
+
# - FOO
|
|
201
|
+
# :test:
|
|
202
|
+
# :<matcher>:
|
|
203
|
+
# - FOO
|
|
204
|
+
def validate_defines(config)
|
|
205
|
+
defines = config[:defines]
|
|
206
|
+
|
|
207
|
+
return true if defines.nil?
|
|
208
|
+
return log_invalid( ":defines must contain key / value pairs, not #{defines.class.to_s.downcase} (see docs for examples)" ) unless defines.is_a?( Hash )
|
|
209
|
+
|
|
210
|
+
matcher_contexts = matcher_contexts( config, [:test, :preprocess] )
|
|
211
|
+
|
|
212
|
+
# :use_test_definition is a setting, not a context
|
|
213
|
+
return defines.reject { |context, _| context == :use_test_definition }.map do |context, entries|
|
|
214
|
+
validate_entries( [:defines, context], entries, matcher_contexts, 'compilation symbols' )
|
|
215
|
+
end.all?
|
|
203
216
|
end
|
|
204
217
|
|
|
205
218
|
|
|
206
|
-
|
|
207
|
-
|
|
219
|
+
# Each :flags context holds operations, each a list of flags. :test operations may instead
|
|
220
|
+
# hold a matcher hash of test filename matchers, each naming a list of flags.
|
|
221
|
+
#
|
|
222
|
+
# :flags:
|
|
223
|
+
# :<context>:
|
|
224
|
+
# :<operation>:
|
|
225
|
+
# - --flag
|
|
226
|
+
# :test:
|
|
227
|
+
# :<operation>:
|
|
228
|
+
# :<matcher>:
|
|
229
|
+
# - --flag
|
|
230
|
+
def validate_flags(config)
|
|
231
|
+
flags = config[:flags]
|
|
208
232
|
|
|
209
|
-
return true if
|
|
233
|
+
return true if flags.nil?
|
|
234
|
+
return log_invalid( ":flags must contain key / value pairs, not #{flags.class.to_s.downcase} (see docs for examples)" ) unless flags.is_a?( Hash )
|
|
210
235
|
|
|
211
|
-
|
|
212
|
-
if defines.class != Hash
|
|
213
|
-
msg = ":defines must contain key / value pairs, not #{defines.class.to_s.downcase} (see docs for examples)"
|
|
214
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
215
|
-
return false
|
|
216
|
-
end
|
|
236
|
+
warn_of_release_preprocessing( flags )
|
|
217
237
|
|
|
218
|
-
|
|
238
|
+
matcher_contexts = matcher_contexts( config, [:test] )
|
|
219
239
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
# :defines:
|
|
223
|
-
# :<context>:
|
|
224
|
-
# - FOO
|
|
225
|
-
# - BAR
|
|
226
|
-
#
|
|
227
|
-
# or
|
|
228
|
-
#
|
|
229
|
-
# :defines:
|
|
230
|
-
# :test:
|
|
231
|
-
# :<matcher>:
|
|
232
|
-
# - FOO
|
|
233
|
-
# - BAR
|
|
234
|
-
# :preprocess:
|
|
235
|
-
# :<matcher>:
|
|
236
|
-
# - FOO
|
|
237
|
-
# - BAR
|
|
238
|
-
|
|
239
|
-
# These contexts support filename matchers optionally. Others can only contain simple lists
|
|
240
|
-
contexts_supporting_matchers = [:test, :preprocess]
|
|
241
|
-
contexts_supporting_matchers << :gcov if (_config && _config[:plugins] && _config[:plugins][:enabled] && _config[:plugins][:enabled].include?('gcov'))
|
|
242
|
-
|
|
243
|
-
defines.each_pair do |context, config|
|
|
244
|
-
walk = @reportinator.generate_config_walk( [:defines, context] )
|
|
245
|
-
|
|
246
|
-
# Special handling for configuration setting, not a hash context container
|
|
247
|
-
next if context == :use_test_definition
|
|
248
|
-
|
|
249
|
-
# Matcher contexts (only contexts that support matcher hashes)
|
|
250
|
-
if contexts_supporting_matchers.include? context
|
|
251
|
-
if config.class != Array and config.class != Hash
|
|
252
|
-
msg = "#{walk} entry '#{config}' must be a list or matcher, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
253
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
254
|
-
valid = false
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
# All other (simple) contexts
|
|
258
|
-
else
|
|
259
|
-
# Handle the (probably) common case of trying to use matchers for any context other than :test or :preprocess
|
|
260
|
-
if config.class == Hash
|
|
261
|
-
msg = "#{walk} entry '#{config}' must be a list; matcher hashes are only available for :test & :preprocess contexts (see docs for details)"
|
|
262
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
263
|
-
valid = false
|
|
264
|
-
# Catchall for any oddball entries
|
|
265
|
-
elsif config.class != Array
|
|
266
|
-
msg = "#{walk} entry '#{config}' must be a list, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
267
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
268
|
-
valid = false
|
|
269
|
-
end
|
|
270
|
-
end
|
|
271
|
-
end
|
|
240
|
+
return flags.map { |context, operations| validate_flags_context( context, operations, matcher_contexts ) }.all?
|
|
241
|
+
end
|
|
272
242
|
|
|
273
|
-
# Validate simple option of lists applied across an entire context of any name
|
|
274
|
-
# :defines:
|
|
275
|
-
# :<context>: # :test, :release, etc.
|
|
276
|
-
# - FOO
|
|
277
|
-
# - BAR
|
|
278
|
-
|
|
279
|
-
defines.each_pair do |context, config|
|
|
280
|
-
# Only validate lists of compilation symbols in this block (look for matchers in next block)
|
|
281
|
-
next if config.class != Array
|
|
282
|
-
|
|
283
|
-
# Handle any YAML alias referencing causing a nested array
|
|
284
|
-
config.flatten!()
|
|
285
|
-
|
|
286
|
-
# Ensure each item in list is a string
|
|
287
|
-
config.each do |symbol|
|
|
288
|
-
if symbol.class != String
|
|
289
|
-
walk = @reportinator.generate_config_walk( [:defines, context] )
|
|
290
|
-
msg = "#{walk} list entry #{symbol} must be a string, not #{symbol.class.to_s.downcase} (see docs for examples)"
|
|
291
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
292
|
-
valid = false
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
end
|
|
296
243
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
# - FOO
|
|
302
|
-
# - BAR
|
|
303
|
-
# :preprocess:
|
|
304
|
-
# :<matcher>: # Can be wildcard, substring, or regular expression in a string or symbol
|
|
305
|
-
# - FOO
|
|
306
|
-
# - BAR
|
|
307
|
-
|
|
308
|
-
contexts = [:test, :preprocess]
|
|
309
|
-
|
|
310
|
-
contexts.each do |context|
|
|
311
|
-
matchers = defines[context]
|
|
312
|
-
|
|
313
|
-
# Skip processing if context isn't present or is present but is not a matcher hash
|
|
314
|
-
next if matchers.nil? or matchers.class != Hash
|
|
315
|
-
|
|
316
|
-
# Inspect each test matcher
|
|
317
|
-
matchers.each_pair do |matcher, symbols|
|
|
318
|
-
|
|
319
|
-
walk = @reportinator.generate_config_walk( [:defines, context, matcher] )
|
|
320
|
-
|
|
321
|
-
# Ensure container associated with matcher is a list
|
|
322
|
-
if symbols.class != Array
|
|
323
|
-
msg = "#{walk} entry '#{symbols}' is not a list of compilation symbols but a #{symbols.class.to_s.downcase}"
|
|
324
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
325
|
-
valid = false
|
|
326
|
-
|
|
327
|
-
# Skip further validation if matcher value is not a list of symbols
|
|
328
|
-
next
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
# Handle any YAML alias nesting in array
|
|
332
|
-
symbols.flatten!()
|
|
333
|
-
|
|
334
|
-
# Ensure matcher itself is a Ruby symbol or string
|
|
335
|
-
if matcher.class != Symbol and matcher.class != String
|
|
336
|
-
msg = "#{walk} matcher is not a string or symbol"
|
|
337
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
338
|
-
valid = false
|
|
339
|
-
|
|
340
|
-
# Skip further validation if matcher key is not a symbol
|
|
341
|
-
next
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
walk = @reportinator.generate_config_walk( [:defines, context, matcher] )
|
|
345
|
-
|
|
346
|
-
# Ensure each item in compilation symbols list for matcher is a string
|
|
347
|
-
symbols.each do |symbol|
|
|
348
|
-
if symbol.class != String
|
|
349
|
-
msg = "#{walk} entry '#{symbol}' is not a string"
|
|
350
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
351
|
-
valid = false
|
|
352
|
-
end
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
begin
|
|
356
|
-
@configurator_validator.validate_matcher( matcher.to_s.strip() )
|
|
357
|
-
rescue Exception => ex
|
|
358
|
-
msg = "Matcher #{walk} contains #{ex.message}"
|
|
359
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
360
|
-
valid = false
|
|
361
|
-
end
|
|
244
|
+
# Test preprocessing reads the line markers -P and --no-line-commands suppress. Without
|
|
245
|
+
# test preprocessing nothing reads them, so the options are harmless there.
|
|
246
|
+
def validate_line_markers(config)
|
|
247
|
+
return true if config.dig( :project, :use_test_preprocessor ) == :none
|
|
362
248
|
|
|
363
|
-
|
|
364
|
-
|
|
249
|
+
found = LineMarkerSuppressors.in_flags( config[:flags], matcher_contexts( config, [:test] ) ) + LineMarkerSuppressors.in_tools( config )
|
|
250
|
+
found.each { |walk_keys, entry| log_error( line_markers_message( walk_keys, entry ) ) }
|
|
251
|
+
return found.empty?
|
|
252
|
+
end
|
|
365
253
|
|
|
366
|
-
|
|
254
|
+
def validate_test_preprocessor(config)
|
|
255
|
+
return validate_option( config, :use_test_preprocessor, [:none, :all, :tests, :mocks] )
|
|
367
256
|
end
|
|
368
257
|
|
|
369
258
|
|
|
370
|
-
|
|
371
|
-
|
|
259
|
+
# :environment is a list of single-pair hashes, each a variable name and a string or list of strings
|
|
260
|
+
def validate_environment_vars(config)
|
|
261
|
+
environment = config[:environment]
|
|
372
262
|
|
|
373
|
-
return true if
|
|
263
|
+
return true if environment.nil?
|
|
264
|
+
return log_invalid( ":environment must contain a list of key / value pairs, not #{environment.class.to_s.downcase} (see docs for examples)" ) unless environment.is_a?( Array )
|
|
374
265
|
|
|
375
|
-
#
|
|
376
|
-
|
|
377
|
-
msg = ":flags must contain key / value pairs, not #{flags.class.to_s.downcase} (see docs for examples)"
|
|
378
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
379
|
-
# Immediately bail out
|
|
380
|
-
return false
|
|
381
|
-
end
|
|
266
|
+
# Entries are inspected further only once every one is a key / value pair
|
|
267
|
+
return false unless validate_environment_pairs( environment )
|
|
382
268
|
|
|
383
|
-
valid =
|
|
269
|
+
valid = environment.map { |entry| validate_environment_entry( entry ) }.all?
|
|
270
|
+
return valid & validate_unique_environment_names( environment )
|
|
271
|
+
end
|
|
384
272
|
|
|
385
|
-
# Validate that each context has an operation hash
|
|
386
|
-
# :flags
|
|
387
|
-
# :<context>: # :test, :release, etc.
|
|
388
|
-
# :<operation>: # :compile, :link, etc.
|
|
389
|
-
# ...
|
|
390
273
|
|
|
391
|
-
|
|
392
|
-
|
|
274
|
+
def validate_backtrace(config)
|
|
275
|
+
return validate_option( config, :use_backtrace, [:none, :simple, :gdb] )
|
|
276
|
+
end
|
|
393
277
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
278
|
+
def validate_threads(config)
|
|
279
|
+
return [:compile_threads, :test_threads].map { |key| validate_thread_count( config, key ) }.all?
|
|
280
|
+
end
|
|
397
281
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
282
|
+
# `:max_extraction_length` multiplies 1000 characters, so `5000` reads more clearly than
|
|
283
|
+
# `5000000`. The minimum keeps that ceiling well above any ordinary C declaration or
|
|
284
|
+
# signature, and catches `1000` written to mean 1000 characters.
|
|
285
|
+
def validate_partials(config)
|
|
286
|
+
max_extraction_length = config[:partials][:max_extraction_length]
|
|
287
|
+
walk = @reportinator.generate_config_walk( [:partials, :max_extraction_length] )
|
|
401
288
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
289
|
+
return log_invalid( "#{walk} is not an integer" ) unless max_extraction_length.is_a?( Integer )
|
|
290
|
+
return log_invalid( "#{walk} must be at least 10 (10,000 characters)" ) if max_extraction_length < 10
|
|
291
|
+
return true
|
|
292
|
+
end
|
|
406
293
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
294
|
+
# Discovery records a path beneath :plugins for each enabled plugin it found, whatever
|
|
295
|
+
# kind of plugin it is
|
|
296
|
+
def validate_plugins(config)
|
|
297
|
+
missing_plugins = config[:plugins][:enabled].reject { |plugin| config[:plugins].key?( :"#{plugin}_path" ) }
|
|
411
298
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
@loginator.log( msg, Verbosity::ERRORS, LogLabels::WARNING )
|
|
299
|
+
missing_plugins.each do |plugin|
|
|
300
|
+
message = "Plugin '#{plugin}' not found in built-in or project Ruby load paths. Check load paths and plugin naming and path conventions."
|
|
301
|
+
@loginator.log( message, Verbosity::ERRORS )
|
|
416
302
|
end
|
|
417
303
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
# :flags:
|
|
421
|
-
# :<context>: # :test or :release
|
|
422
|
-
# :<operation>: # :compile, :link, or :assemble (plus :preprocess for :test context)
|
|
423
|
-
# - --flag
|
|
424
|
-
#
|
|
425
|
-
# or
|
|
426
|
-
#
|
|
427
|
-
# :flags:
|
|
428
|
-
# :test:
|
|
429
|
-
# :<operation>:
|
|
430
|
-
# :<matcher>:
|
|
431
|
-
# - --flag
|
|
432
|
-
|
|
433
|
-
# These contexts support filename matchers optionally. Others can only contain simple lists
|
|
434
|
-
contexts_supporting_matchers = [:test]
|
|
435
|
-
contexts_supporting_matchers << :gcov if (_config && _config[:plugins] && _config[:plugins][:enabled] && _config[:plugins][:enabled].include?('gcov'))
|
|
436
|
-
|
|
437
|
-
flags.each_pair do |context, operations|
|
|
438
|
-
operations.each_pair do |operation, config|
|
|
439
|
-
walk = @reportinator.generate_config_walk( [:flags, context, operation] )
|
|
440
|
-
|
|
441
|
-
if config.nil?
|
|
442
|
-
msg = "#{walk} is missing a list or matcher hash"
|
|
443
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
444
|
-
|
|
445
|
-
valid = false
|
|
446
|
-
next
|
|
447
|
-
end
|
|
448
|
-
|
|
449
|
-
# :test context operations with lists or matchers (hashes)
|
|
450
|
-
if contexts_supporting_matchers.include? context
|
|
451
|
-
if config.class != Array and config.class != Hash
|
|
452
|
-
msg = "#{walk} entry '#{config}' must be a list or matcher hash, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
453
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
454
|
-
valid = false
|
|
455
|
-
end
|
|
456
|
-
|
|
457
|
-
# Other (simple) contexts
|
|
458
|
-
else
|
|
459
|
-
# Handle the (probably) common case of trying to use matchers for operations in any context other than :test
|
|
460
|
-
if config.class == Hash
|
|
461
|
-
msg = "#{walk} entry '#{config}' must be a list; matcher hashes are only available for :test context (see docs for details)"
|
|
462
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
463
|
-
valid = false
|
|
464
|
-
# Catchall for any oddball entries
|
|
465
|
-
elsif config.class != Array
|
|
466
|
-
msg = "#{walk} entry '#{config}' must be a list, not #{config.class.to_s.downcase} (see docs for examples)"
|
|
467
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
468
|
-
valid = false
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
end
|
|
472
|
-
end
|
|
304
|
+
return missing_plugins.empty?
|
|
305
|
+
end
|
|
473
306
|
|
|
474
|
-
|
|
475
|
-
# :flags
|
|
476
|
-
# :<context>:
|
|
477
|
-
# :<operation>:
|
|
478
|
-
# - --flag
|
|
479
|
-
|
|
480
|
-
flags.each_pair do |context, operations|
|
|
481
|
-
operations.each_pair do |operation, flags|
|
|
482
|
-
|
|
483
|
-
# Only validate lists of flags in this block (look for matchers in next block)
|
|
484
|
-
next if flags.class != Array
|
|
485
|
-
|
|
486
|
-
# Handle any YAML alias referencing causing a nested array
|
|
487
|
-
flags.flatten!()
|
|
488
|
-
|
|
489
|
-
# Ensure each item in list is a string
|
|
490
|
-
flags.each do |flag|
|
|
491
|
-
if flag.class != String
|
|
492
|
-
walk = @reportinator.generate_config_walk( [:flags, context, operation] )
|
|
493
|
-
msg = "#{walk} simple list entry '#{flag}' must be a string, not #{flag.class.to_s.downcase} (see docs for examples)"
|
|
494
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
495
|
-
valid = false
|
|
496
|
-
end
|
|
497
|
-
end
|
|
498
|
-
end
|
|
499
|
-
end
|
|
307
|
+
### Private ###
|
|
500
308
|
|
|
501
|
-
|
|
502
|
-
# :flags:
|
|
503
|
-
# :test:
|
|
504
|
-
# :<operation>: # :preprocess, :compile, :assemble, :link
|
|
505
|
-
# :<matcher>: # Can be wildcard, substring, or regular expression as a Ruby string or symbol
|
|
506
|
-
# - FOO
|
|
507
|
-
# - BAR
|
|
508
|
-
|
|
509
|
-
# If there's no test context, we're done
|
|
510
|
-
test_context = flags[:test]
|
|
511
|
-
return valid if test_context.nil?
|
|
512
|
-
|
|
513
|
-
matchers_present = false
|
|
514
|
-
test_context.each_pair do |operation, matchers|
|
|
515
|
-
if matchers.class == Hash
|
|
516
|
-
matchers_present = true
|
|
517
|
-
break
|
|
518
|
-
end
|
|
519
|
-
end
|
|
309
|
+
private
|
|
520
310
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
# Inspect each :test ↳ <:operation> matcher
|
|
525
|
-
test_context.each_pair do |operation, matchers|
|
|
526
|
-
# Only validate matchers (skip simple lists of flags)
|
|
527
|
-
next if matchers.class != Hash
|
|
528
|
-
|
|
529
|
-
matchers.each_pair do |matcher, flags|
|
|
530
|
-
# Ensure matcher itself is a Ruby symbol or string
|
|
531
|
-
if matcher.class != Symbol and matcher.class != String
|
|
532
|
-
walk = @reportinator.generate_config_walk( [:flags, :test, operation] )
|
|
533
|
-
msg = "#{walk} entry '#{matcher}' is not a string or symbol"
|
|
534
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
535
|
-
valid = false
|
|
536
|
-
|
|
537
|
-
# Skip further validation if matcher key is not a string or symbol
|
|
538
|
-
next
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
walk = @reportinator.generate_config_walk( [:flags, :test, operation, matcher] )
|
|
542
|
-
|
|
543
|
-
# Ensure container associated with matcher is a list
|
|
544
|
-
if flags.class != Array
|
|
545
|
-
msg = "#{walk} entry '#{flags}' is not a list of command line flags but a #{flags.class.to_s.downcase}"
|
|
546
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
547
|
-
valid = false
|
|
548
|
-
|
|
549
|
-
# Skip further validation if matcher value is not a list of flags
|
|
550
|
-
next
|
|
551
|
-
end
|
|
552
|
-
|
|
553
|
-
# Handle any YAML alias nesting in array
|
|
554
|
-
flags.flatten!()
|
|
555
|
-
|
|
556
|
-
# Ensure each item in flags list for matcher is a string
|
|
557
|
-
flags.each do |flag|
|
|
558
|
-
if flag.class != String
|
|
559
|
-
msg = "#{walk} entry '#{flag}' is not a string"
|
|
560
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
561
|
-
valid = false
|
|
562
|
-
end
|
|
563
|
-
end
|
|
564
|
-
|
|
565
|
-
begin
|
|
566
|
-
@configurator_validator.validate_matcher( matcher.to_s.strip() )
|
|
567
|
-
rescue Exception => ex
|
|
568
|
-
msg = "Matcher #{walk} contains #{ex.message}"
|
|
569
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
570
|
-
valid = false
|
|
571
|
-
end
|
|
311
|
+
def corrupted_vendor_path?(path, marker_file)
|
|
312
|
+
marker = File.join( path, marker_file )
|
|
572
313
|
|
|
573
|
-
|
|
314
|
+
return ( @file_wrapper.exist?( path ) && !@file_wrapper.directory?( path ) ) ||
|
|
315
|
+
( @file_wrapper.exist?( marker ) && @file_wrapper.directory?( marker ) )
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# Each framework a build uses, as [vendored source, build destination, marker file]
|
|
319
|
+
def vendored_frameworks(config)
|
|
320
|
+
frameworks = [ [File.join( config[:unity_vendor_path], UNITY_LIB_PATH ), config[:project_build_vendor_unity_path], UNITY_C_FILE] ]
|
|
321
|
+
|
|
322
|
+
if config[:project_use_mocks]
|
|
323
|
+
frameworks << [File.join( config[:cmock_vendor_path], CMOCK_LIB_PATH ), config[:project_build_vendor_cmock_path], CMOCK_C_FILE]
|
|
574
324
|
end
|
|
575
325
|
|
|
576
|
-
|
|
326
|
+
if config[:project_use_exceptions]
|
|
327
|
+
frameworks << [File.join( config[:cexception_vendor_path], CEXCEPTION_LIB_PATH ), config[:project_build_vendor_cexception_path], CEXCEPTION_C_FILE]
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
return frameworks
|
|
577
331
|
end
|
|
578
332
|
|
|
333
|
+
def frameworks_for_build(config, test_build:, release_build:)
|
|
334
|
+
return vendored_frameworks( config ) if test_build
|
|
335
|
+
return vendored_frameworks( config ).select { |_, _, marker_file| marker_file == CEXCEPTION_C_FILE } if release_build
|
|
579
336
|
|
|
580
|
-
|
|
581
|
-
|
|
337
|
+
return []
|
|
338
|
+
end
|
|
582
339
|
|
|
583
|
-
|
|
340
|
+
def vendor_test_support_files(ceedling_lib_path, config)
|
|
341
|
+
copy_backtrace_script( ceedling_lib_path, config ) if config[:project_use_backtrace] == :gdb
|
|
584
342
|
|
|
585
|
-
|
|
343
|
+
return unless config[:project_use_partials]
|
|
586
344
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
msg = "#{walk} is ':#{use_test_preprocessor}' but must be one of {#{options.map{|o| ':' + o.to_s()}.join(', ')}}"
|
|
590
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
591
|
-
valid = false
|
|
592
|
-
end
|
|
345
|
+
@file_wrapper.sync_file( File.join( ceedling_lib_path, CEEDLING_HEADER_FILEPATH ), config[:project_build_vendor_ceedling_path] )
|
|
346
|
+
end
|
|
593
347
|
|
|
594
|
-
|
|
348
|
+
# The destination may not exist yet on a fresh build, since Rake creates directories
|
|
349
|
+
# after configuration
|
|
350
|
+
def copy_backtrace_script(ceedling_lib_path, flattened_config)
|
|
351
|
+
@file_wrapper.mkdir( flattened_config[:project_build_tests_root] )
|
|
352
|
+
@file_wrapper.sync_file( File.join( ceedling_lib_path, BACKTRACE_GDB_SCRIPT_FILE ), flattened_config[:project_build_tests_root] )
|
|
595
353
|
end
|
|
596
354
|
|
|
355
|
+
def validate_simple_paths(paths, *keys)
|
|
356
|
+
return paths.map { |path| @configurator_validator.validate_filepath_simple( path, *keys ) }.all?
|
|
357
|
+
end
|
|
597
358
|
|
|
598
|
-
|
|
599
|
-
|
|
359
|
+
# Each entry of :paths or :files must exist and yield what its section expects
|
|
360
|
+
def validate_path_section(config, section, entries_validation)
|
|
361
|
+
return config[section].keys.sort.map do |key|
|
|
362
|
+
@configurator_validator.validate_path_list( config, section, key ) & @configurator_validator.public_send( entries_validation, config, key )
|
|
363
|
+
end.all?
|
|
364
|
+
end
|
|
600
365
|
|
|
601
|
-
|
|
366
|
+
def gdb_attach_failure(result)
|
|
367
|
+
reason = "`gdb` could not attach to a probe process"
|
|
368
|
+
return reason + " -- this is a macOS `gdb` codesigning / trust problem" if result[:output].to_s.match?( /Unable to find Mach task port/ )
|
|
369
|
+
return reason
|
|
370
|
+
end
|
|
602
371
|
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
372
|
+
def line_markers_message(walk_keys, entry)
|
|
373
|
+
msg = "#{@reportinator.generate_config_walk( walk_keys )} entry '#{entry}' suppresses the preprocessor line markers " \
|
|
374
|
+
"test preprocessing reads to find #includes, mockable functions, and test cases. Remove it."
|
|
375
|
+
msg += " Test preprocessing uses :compile flags wherever no :preprocess flags apply." if walk_keys[2] == :compile
|
|
376
|
+
return msg
|
|
377
|
+
end
|
|
609
378
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
environment.each do |entry|
|
|
615
|
-
if entry.class != Hash
|
|
616
|
-
msg = ":environment list entry #{entry} is not a key / value pair (ex. :var: value)"
|
|
617
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
618
|
-
valid = false
|
|
619
|
-
end
|
|
620
|
-
end
|
|
379
|
+
# Build contexts that plugins declare peers of :test also support matchers
|
|
380
|
+
def matcher_contexts(config, contexts)
|
|
381
|
+
return contexts + Array( config.dig( :plugins, :test_build_contexts ) ).map( &:to_sym )
|
|
382
|
+
end
|
|
621
383
|
|
|
622
|
-
|
|
623
|
-
|
|
384
|
+
# A context's entries are a list of strings, or, in a context supporting matchers, a
|
|
385
|
+
# matcher hash. The context is the second key walked. `noun` names what the strings are.
|
|
386
|
+
def validate_entries(walk_keys, entries, matcher_contexts, noun)
|
|
387
|
+
return false unless validate_entries_form( walk_keys, entries, matcher_contexts )
|
|
388
|
+
return validate_string_list( walk_keys, entries ) if entries.is_a?( Array )
|
|
389
|
+
return validate_matchers( walk_keys, entries, noun )
|
|
390
|
+
end
|
|
624
391
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
392
|
+
def validate_entries_form(walk_keys, entries, matcher_contexts)
|
|
393
|
+
walk = @reportinator.generate_config_walk( walk_keys )
|
|
394
|
+
kind = entries.class.to_s.downcase
|
|
395
|
+
matchers = matcher_contexts.include?( walk_keys[1] )
|
|
628
396
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
633
|
-
valid = false
|
|
634
|
-
end
|
|
397
|
+
return true if entries.is_a?( Array ) or (matchers and entries.is_a?( Hash ))
|
|
398
|
+
return log_invalid( "#{walk} entry '#{entries}' must be a list or matcher hash, not #{kind} (see docs for examples)" ) if matchers
|
|
399
|
+
return log_invalid( "#{walk} entry '#{entries}' must be a list, not #{kind} (see docs for examples)" ) unless entries.is_a?( Hash )
|
|
635
400
|
|
|
636
|
-
|
|
637
|
-
|
|
401
|
+
contexts = matcher_contexts.map { |context| ":#{context}" }.join( ' & ' )
|
|
402
|
+
return log_invalid( "#{walk} entry '#{entries}' must be a list; matcher hashes are only available for #{contexts} (see docs for details)" )
|
|
403
|
+
end
|
|
638
404
|
|
|
639
|
-
|
|
640
|
-
|
|
405
|
+
# A YAML alias can nest a list, so the list is flattened in place first
|
|
406
|
+
def validate_string_list(walk_keys, list)
|
|
407
|
+
walk = @reportinator.generate_config_walk( walk_keys )
|
|
641
408
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
msg = ":environment entry '#{key}' must be a symbol or string (:#{key})"
|
|
645
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
646
|
-
valid = false
|
|
409
|
+
list.flatten!
|
|
410
|
+
non_strings = list.reject { |item| item.is_a?( String ) }
|
|
647
411
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
412
|
+
non_strings.each { |item| log_error( "#{walk} list entry '#{item}' must be a string, not #{item.class.to_s.downcase} (see docs for examples)" ) }
|
|
413
|
+
return non_strings.empty?
|
|
414
|
+
end
|
|
651
415
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
valid = false
|
|
657
|
-
end
|
|
416
|
+
# Each matcher must be a well-formed string or symbol naming a list of strings
|
|
417
|
+
def validate_matchers(walk_keys, matchers, noun)
|
|
418
|
+
return matchers.map { |matcher, list| validate_matcher_entry( walk_keys, matcher, list, noun ) }.all?
|
|
419
|
+
end
|
|
658
420
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
if item.class != String
|
|
663
|
-
msg = ":environment entry #{key} contains a list element '#{item}' (#{item.class.to_s.downcase}) that is not a string"
|
|
664
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
665
|
-
valid = false
|
|
666
|
-
end
|
|
667
|
-
end
|
|
668
|
-
end
|
|
421
|
+
def validate_matcher_entry(walk_keys, matcher, list, noun)
|
|
422
|
+
unless matcher.is_a?( Symbol ) or matcher.is_a?( String )
|
|
423
|
+
return log_invalid( "#{@reportinator.generate_config_walk( walk_keys )} matcher '#{matcher}' is not a string or symbol" )
|
|
669
424
|
end
|
|
670
425
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
msg = "Duplicate :environment entr#{dups.length() == 1 ? 'y' : 'ies'} #{dups.map{|d| ':' + d.to_s}.join( ', ' )} found"
|
|
676
|
-
@loginator.log( msg, Verbosity::ERRORS )
|
|
677
|
-
valid = false
|
|
678
|
-
end
|
|
679
|
-
|
|
680
|
-
return valid
|
|
426
|
+
walk = @reportinator.generate_config_walk( walk_keys + [matcher] )
|
|
427
|
+
return log_invalid( "#{walk} entry '#{list}' is not a list of #{noun} but a #{list.class.to_s.downcase}" ) unless list.is_a?( Array )
|
|
428
|
+
|
|
429
|
+
return valid_matcher?( matcher, walk ) & validate_matcher_list( walk, list )
|
|
681
430
|
end
|
|
682
431
|
|
|
432
|
+
# A YAML alias can nest a list, so the list is flattened in place first
|
|
433
|
+
def validate_matcher_list(walk, list)
|
|
434
|
+
list.flatten!
|
|
435
|
+
non_strings = list.reject { |item| item.is_a?( String ) }
|
|
436
|
+
non_strings.each { |item| log_error( "#{walk} entry '#{item}' is not a string" ) }
|
|
683
437
|
|
|
684
|
-
|
|
685
|
-
|
|
438
|
+
return non_strings.empty?
|
|
439
|
+
end
|
|
686
440
|
|
|
687
|
-
|
|
441
|
+
def valid_matcher?(matcher, walk)
|
|
442
|
+
@configurator_validator.validate_matcher( matcher.to_s.strip )
|
|
443
|
+
return true
|
|
444
|
+
rescue StandardError => ex
|
|
445
|
+
return log_invalid( "Matcher #{walk} contains #{ex.message}" )
|
|
446
|
+
end
|
|
688
447
|
|
|
689
|
-
|
|
448
|
+
def validate_flags_context(context, operations, matcher_contexts)
|
|
449
|
+
walk = @reportinator.generate_config_walk( [:flags, context] )
|
|
690
450
|
|
|
691
|
-
|
|
692
|
-
walk = @reportinator.generate_config_walk( [:project, :use_backtrace] )
|
|
451
|
+
return log_invalid( "#{walk} operations key / value pairs are missing" ) if operations.nil?
|
|
693
452
|
|
|
694
|
-
|
|
695
|
-
@
|
|
696
|
-
|
|
453
|
+
unless operations.is_a?( Hash )
|
|
454
|
+
example = @reportinator.generate_config_walk( [:flags, context, :compile] )
|
|
455
|
+
return log_invalid( "#{walk} context must contain :<operation> key / value pairs, not #{operations.class.to_s.downcase} '#{operations}' (ex. #{example})" )
|
|
697
456
|
end
|
|
698
457
|
|
|
699
|
-
return
|
|
458
|
+
return operations.map { |operation, entries| validate_flags_operation( [:flags, context, operation], entries, matcher_contexts ) }.all?
|
|
700
459
|
end
|
|
701
460
|
|
|
702
|
-
def
|
|
703
|
-
|
|
461
|
+
def validate_flags_operation(walk_keys, entries, matcher_contexts)
|
|
462
|
+
return log_invalid( "#{@reportinator.generate_config_walk( walk_keys )} is missing a list or matcher hash" ) if entries.nil?
|
|
463
|
+
return validate_entries( walk_keys, entries, matcher_contexts, 'command line flags' )
|
|
464
|
+
end
|
|
704
465
|
|
|
705
|
-
|
|
706
|
-
|
|
466
|
+
def warn_of_release_preprocessing(flags)
|
|
467
|
+
return unless flags[:release].is_a?( Hash ) and flags[:release][:preprocess]
|
|
707
468
|
|
|
708
|
-
walk = @reportinator.generate_config_walk( [:
|
|
469
|
+
walk = @reportinator.generate_config_walk( [:flags, :release, :preprocess] )
|
|
470
|
+
@loginator.log( "Preprocessing configured at #{walk} is only supported in the :test context", Verbosity::ERRORS, LogLabels::WARNING )
|
|
471
|
+
end
|
|
709
472
|
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
@loginator.log( "#{walk} must be greater than 0", Verbosity::ERRORS )
|
|
714
|
-
valid = false
|
|
715
|
-
end
|
|
716
|
-
when Symbol
|
|
717
|
-
if compile_threads != :auto
|
|
718
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
719
|
-
valid = false
|
|
720
|
-
end
|
|
721
|
-
else
|
|
722
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
723
|
-
valid = false
|
|
724
|
-
end
|
|
473
|
+
def validate_option(config, key, options)
|
|
474
|
+
value = config[:project][key]
|
|
475
|
+
return true if options.include?( value )
|
|
725
476
|
|
|
726
|
-
walk = @reportinator.generate_config_walk( [:project,
|
|
477
|
+
walk = @reportinator.generate_config_walk( [:project, key] )
|
|
478
|
+
return log_invalid( "#{walk} is ':#{value}' but must be one of {#{options.map { |option| ":#{option}" }.join( ', ' )}}" )
|
|
479
|
+
end
|
|
727
480
|
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
@loginator.log( "#{walk} must be greater than 0", Verbosity::ERRORS )
|
|
732
|
-
valid = false
|
|
733
|
-
end
|
|
734
|
-
when Symbol
|
|
735
|
-
if test_threads != :auto
|
|
736
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
737
|
-
valid = false
|
|
738
|
-
end
|
|
739
|
-
else
|
|
740
|
-
@loginator.log( "#{walk} is neither an integer nor :auto", Verbosity::ERRORS )
|
|
741
|
-
valid = false
|
|
742
|
-
end
|
|
481
|
+
def validate_thread_count(config, key)
|
|
482
|
+
threads = config[:project][key]
|
|
483
|
+
walk = @reportinator.generate_config_walk( [:project, key] )
|
|
743
484
|
|
|
744
|
-
return
|
|
485
|
+
return true if threads == :auto or (threads.is_a?( Integer ) and threads >= 1)
|
|
486
|
+
return log_invalid( "#{walk} must be greater than 0" ) if threads.is_a?( Integer )
|
|
487
|
+
return log_invalid( "#{walk} is neither an integer nor :auto" )
|
|
745
488
|
end
|
|
746
489
|
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
# signature, catching a value so small it would defeat the setting's own purpose (e.g.
|
|
751
|
-
# someone setting `1000` expecting "1000 characters" rather than "1000x characters").
|
|
752
|
-
def validate_partials(config)
|
|
753
|
-
valid = true
|
|
490
|
+
def validate_environment_pairs(environment)
|
|
491
|
+
non_pairs = environment.reject { |entry| entry.is_a?( Hash ) }
|
|
492
|
+
non_pairs.each { |entry| log_error( ":environment list entry #{entry} is not a key / value pair (ex. :var: value)" ) }
|
|
754
493
|
|
|
755
|
-
|
|
494
|
+
return non_pairs.empty?
|
|
495
|
+
end
|
|
756
496
|
|
|
757
|
-
|
|
497
|
+
def validate_environment_entry(entry)
|
|
498
|
+
valid = (entry.keys.length == 1) || log_invalid( ":environment entry #{entry} does not specify exactly one key (see docs for examples)" )
|
|
758
499
|
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
500
|
+
name, value = entry.first
|
|
501
|
+
return log_invalid( ":environment entry '#{name}' must be a symbol or string (:#{name})" ) unless name.is_a?( Symbol ) or name.is_a?( String )
|
|
502
|
+
|
|
503
|
+
return valid & validate_environment_value( name, value )
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
def validate_environment_value(name, value)
|
|
507
|
+
case value
|
|
508
|
+
when String then return true
|
|
509
|
+
when Array
|
|
510
|
+
non_strings = value.reject { |item| item.is_a?( String ) }
|
|
511
|
+
non_strings.each { |item| log_error( ":environment entry #{name} contains a list element '#{item}' (#{item.class.to_s.downcase}) that is not a string" ) }
|
|
512
|
+
return non_strings.empty?
|
|
768
513
|
end
|
|
769
514
|
|
|
770
|
-
return
|
|
515
|
+
return log_invalid( ":environment entry #{name} is associated with #{value.class.to_s.downcase}, not a string or list (see docs for details)" )
|
|
771
516
|
end
|
|
772
517
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
518
|
+
# Environment variable names are case-insensitive on some platforms
|
|
519
|
+
def validate_unique_environment_names(environment)
|
|
520
|
+
names = environment.map { |entry| entry.keys[0].to_s.downcase }
|
|
521
|
+
dups = names.select { |name| names.count( name ) > 1 }.uniq
|
|
522
|
+
return true if dups.empty?
|
|
778
523
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
@loginator.log( message, Verbosity::ERRORS )
|
|
782
|
-
end
|
|
524
|
+
return log_invalid( "Duplicate :environment entr#{dups.length == 1 ? 'y' : 'ies'} #{dups.map { |dup| ':' + dup }.join( ', ' )} found" )
|
|
525
|
+
end
|
|
783
526
|
|
|
784
|
-
|
|
527
|
+
def log_error(message)
|
|
528
|
+
@loginator.log( message, Verbosity::ERRORS )
|
|
785
529
|
end
|
|
786
530
|
|
|
787
|
-
#
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
531
|
+
# Logs an error and answers false, for a validation to return
|
|
532
|
+
def log_invalid(message)
|
|
533
|
+
log_error( message )
|
|
534
|
+
return false
|
|
791
535
|
end
|
|
792
536
|
|
|
793
537
|
end
|