ceedling 1.2.0 → 1.2.2
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/GIT_COMMIT_SHA +1 -1
- data/README.md +57 -58
- data/Rakefile +5 -3
- data/assets/features/ceedling +1 -1
- data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_typo.c +14 -0
- data/assets/fixtures/tests_with_duplicate_test_names/test_foo.c +21 -0
- data/bin/actionator.rb +6 -12
- data/bin/app_cfg.rb +35 -1
- data/bin/ceedling +13 -3
- data/bin/cli.rb +25 -6
- data/bin/cli_handler.rb +119 -73
- data/bin/cli_helper.rb +56 -78
- data/bin/installation_selector.rb +81 -0
- data/bin/launchinator.rb +69 -0
- data/bin/mixin_resolvinator.rb +26 -36
- data/bin/objects.yml +13 -0
- data/bin/path_validator.rb +25 -29
- data/bin/versionator.rb +47 -48
- data/ceedling.gemspec +19 -15
- data/docs/BreakingChanges.md +70 -1
- data/docs/Changelog.md +84 -3
- data/docs/KnownIssues.md +90 -4
- data/docs/ReleaseNotes.md +13 -0
- data/docs/overrides/main.html +11 -8
- data/lib/ceedling/build_log_writer.rb +33 -0
- data/lib/ceedling/config/build_root_policy.rb +70 -0
- data/lib/ceedling/config/configurator.rb +19 -18
- data/lib/ceedling/config/configurator_builder.rb +58 -28
- data/lib/ceedling/config/configurator_paths_validator.rb +179 -0
- data/lib/ceedling/config/configurator_plugins.rb +1 -1
- data/lib/ceedling/config/configurator_setup.rb +39 -41
- data/lib/ceedling/config/configurator_validator.rb +1 -110
- data/lib/ceedling/defaults.rb +4 -4
- data/lib/ceedling/dependencies/README.md +18 -16
- data/lib/ceedling/dependencies/dependency_cache_store.rb +20 -3
- data/lib/ceedling/dependencies/dependency_hasher.rb +35 -1
- data/lib/ceedling/filename_extension.rb +7 -1
- data/lib/ceedling/filesystem/FILE_TREE.md +253 -0
- data/lib/ceedling/filesystem/PATH_HANDLING.md +304 -0
- data/lib/ceedling/filesystem/README.md +41 -0
- data/lib/ceedling/filesystem/build_subpath.rb +102 -0
- data/lib/ceedling/filesystem/destination_collision.rb +25 -0
- data/lib/ceedling/{file_finder.rb → filesystem/file_finder.rb} +159 -104
- data/lib/ceedling/{file_finder_helper.rb → filesystem/file_finder_helper.rb} +36 -31
- data/lib/ceedling/filesystem/file_path_collection_utils.rb +183 -0
- data/lib/ceedling/{file_path_utils.rb → filesystem/file_path_utils.rb} +108 -97
- data/lib/ceedling/{file_system_wrapper.rb → filesystem/file_system_wrapper.rb} +6 -5
- data/lib/ceedling/filesystem/file_tree.rb +241 -0
- data/lib/ceedling/{file_wrapper.rb → filesystem/file_wrapper.rb} +65 -28
- data/lib/ceedling/filesystem/path_exclusions.rb +30 -0
- data/lib/ceedling/{path_matcher.rb → filesystem/path_matcher.rb} +27 -23
- data/lib/ceedling/{path_mirror.rb → filesystem/path_mirror.rb} +19 -18
- data/lib/ceedling/filesystem/path_spellings.rb +55 -0
- data/lib/ceedling/filesystem/project_paths.rb +184 -0
- data/lib/ceedling/filesystem/working_dir.rb +40 -0
- data/lib/ceedling/generators/generator.rb +5 -6
- data/lib/ceedling/generators/generator_partials.rb +1 -1
- data/lib/ceedling/generators/generator_test_results_backtrace.rb +7 -7
- data/lib/ceedling/handoff.rb +121 -0
- data/lib/ceedling/includes/include_factory.rb +3 -3
- data/lib/ceedling/includes/include_pathinator.rb +67 -10
- data/lib/ceedling/includes/includes.rb +1 -1
- data/lib/ceedling/installation.rb +92 -0
- data/lib/ceedling/library_resolver.rb +99 -0
- data/lib/ceedling/objects.yml +23 -2
- data/lib/ceedling/partials/partializer.rb +4 -4
- data/lib/ceedling/partials/partializer_config.rb +3 -1
- data/lib/ceedling/plugins/report_log_writer_plugin.rb +3 -5
- data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +1 -1
- data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +1 -1
- data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +1 -1
- data/lib/ceedling/rake_app/rakefile_component_resolver.rb +10 -17
- data/lib/ceedling/rake_app/test_task_name.rb +29 -0
- data/lib/ceedling/rakefile.rb +16 -1
- data/lib/ceedling/rakefiles/base/tasks_base.rake +1 -1
- data/lib/ceedling/rakefiles/release/rules_release.rake +4 -7
- data/lib/ceedling/rakefiles/tests/rules_tests.rake +3 -20
- data/lib/ceedling/rakefiles/tests/rules_tests_generate.rake +4 -30
- data/lib/ceedling/release_invoker/release_build_executor.rb +33 -44
- data/lib/ceedling/release_invoker/release_build_planner.rb +14 -6
- data/lib/ceedling/reportinator.rb +3 -4
- data/lib/ceedling/setupinator.rb +95 -87
- data/lib/ceedling/test_context_extractor.rb +5 -1
- data/lib/ceedling/test_invoker/PIPELINE.md +9 -7
- data/lib/ceedling/test_invoker/mock_locator.rb +60 -2
- data/lib/ceedling/test_invoker/partials_manager.rb +12 -0
- data/lib/ceedling/test_invoker/standin_headerinator.rb +22 -13
- data/lib/ceedling/test_invoker/test_build_executor.rb +42 -41
- data/lib/ceedling/test_invoker/test_build_planner.rb +37 -18
- data/lib/ceedling/test_invoker/test_build_setup.rb +17 -12
- data/lib/ceedling/test_invoker/test_build_validations.rb +16 -31
- data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +1 -1
- data/lib/ceedling/test_invoker/test_invoker.rb +6 -1
- data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +1 -1
- data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +40 -20
- data/lib/ceedling/tool_executor.rb +9 -3
- data/lib/ceedling/yaml_wrapper.rb +3 -2
- data/lib/version.rb +1 -1
- data/plugins/bullseye/bullseye.rake +6 -9
- data/plugins/bullseye/config/defaults_bullseye.rb +1 -1
- data/plugins/bullseye/lib/bullseye.rb +9 -7
- data/plugins/cppcheck/config/defaults_cppcheck.rb +1 -1
- data/plugins/dependencies/config/defaults.yml +6 -6
- data/plugins/dependencies/dependencies.rake +4 -1
- data/plugins/dependencies/lib/dependencies.rb +18 -8
- data/plugins/dependencies/lib/dependency_spec.rb +17 -5
- data/plugins/fff/lib/fff.rb +45 -39
- data/plugins/fff/spec/fff_cmock_wrapper_spec.rb +128 -0
- data/plugins/gcov/config/defaults_gcov.rb +1 -1
- data/plugins/gcov/gcov.rake +6 -9
- data/plugins/gcov/lib/console_reportinator.rb +4 -18
- data/plugins/gcov/lib/gcov.rb +9 -2
- data/plugins/gcov/lib/gcovr_reportinator.rb +8 -40
- data/plugins/gcov/lib/gcovr_thresholds.rb +74 -0
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +1 -1
- data/plugins/module_generator/lib/module_generator.rb +3 -3
- data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +53 -80
- data/plugins/sanitize/lib/sanitize_records.rb +3 -6
- data/plugins/sanitize/sanitize.rake +6 -6
- data/plugins/valgrind/lib/valgrind.rb +14 -7
- data/plugins/valgrind/valgrind.rake +6 -6
- data/site-local/404.html +6 -20
- 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 +6 -20
- data/site-local/configuration/global-collections.html +6 -20
- data/site-local/configuration/index.html +6 -20
- data/site-local/configuration/loading.html +6 -20
- data/site-local/configuration/mixins.html +10 -24
- data/site-local/configuration/parallel-builds.html +6 -20
- data/site-local/configuration/project-file.html +8 -22
- data/site-local/configuration/reference/cexception.html +6 -20
- data/site-local/configuration/reference/cmock.html +8 -21
- data/site-local/configuration/reference/defines.html +16 -30
- data/site-local/configuration/reference/environment.html +10 -24
- data/site-local/configuration/reference/extension.html +6 -20
- data/site-local/configuration/reference/files.html +22 -30
- data/site-local/configuration/reference/flags.html +13 -27
- data/site-local/configuration/reference/index.html +6 -20
- data/site-local/configuration/reference/libraries.html +27 -23
- data/site-local/configuration/reference/mixins.html +6 -20
- data/site-local/configuration/reference/partials.html +6 -20
- data/site-local/configuration/reference/paths.html +38 -29
- data/site-local/configuration/reference/plugins.html +6 -20
- data/site-local/configuration/reference/project.html +32 -36
- data/site-local/configuration/reference/release-build.html +8 -20
- data/site-local/configuration/reference/test-build.html +6 -20
- data/site-local/configuration/reference/test-runner.html +6 -20
- data/site-local/configuration/reference/tools.html +27 -32
- data/site-local/configuration/reference/unity.html +6 -20
- data/site-local/configuration/which-ceedling.html +383 -37
- data/site-local/development/index.html +6 -20
- data/site-local/development/plugins/configuration.html +6 -20
- data/site-local/development/plugins/index.html +6 -20
- data/site-local/development/plugins/plugin-subclass.html +54 -68
- data/site-local/development/plugins/rake-tasks.html +8 -22
- data/site-local/development/releases.html +84 -29
- data/site-local/development/workflow.html +62 -71
- data/site-local/getting-started/builds.html +8 -20
- data/site-local/getting-started/command-line.html +62 -24
- data/site-local/getting-started/example-projects/cipher-quest.html +6 -20
- data/site-local/getting-started/example-projects/index.html +6 -20
- data/site-local/getting-started/example-projects/temp-sensor.html +6 -20
- data/site-local/getting-started/example-projects/wondrous-forest.html +6 -20
- data/site-local/getting-started/index.html +6 -20
- data/site-local/getting-started/installation.html +6 -20
- data/site-local/getting-started/quick-start.html +6 -20
- data/site-local/help.html +6 -20
- data/site-local/index.html +11 -24
- data/site-local/overview/build-system.html +6 -20
- data/site-local/overview/index.html +6 -20
- data/site-local/overview/test-environments.html +6 -20
- data/site-local/overview/tools-and-frameworks.html +6 -20
- data/site-local/plugins/beep.html +6 -20
- data/site-local/plugins/bullseye/index.html +13 -24
- data/site-local/plugins/bullseye/licensing.html +14 -28
- data/site-local/plugins/command-hooks.html +8 -22
- data/site-local/plugins/compile-commands-json-db.html +6 -20
- data/site-local/plugins/cppcheck.html +8 -22
- data/site-local/plugins/dependencies.html +16 -27
- data/site-local/plugins/fff.html +49 -32
- data/site-local/plugins/gcov/examples.html +7 -21
- data/site-local/plugins/gcov/gcovr.html +22 -33
- data/site-local/plugins/gcov/index.html +6 -20
- data/site-local/plugins/gcov/overview.html +9 -20
- data/site-local/plugins/gcov/reportgenerator.html +9 -23
- data/site-local/plugins/gcov/reporting.html +6 -20
- data/site-local/plugins/gcov/setup.html +8 -21
- data/site-local/plugins/gcov/tool-versions.html +6 -20
- data/site-local/plugins/gcov/troubleshooting.html +10 -24
- data/site-local/plugins/index.html +6 -20
- data/site-local/plugins/module-generator.html +21 -35
- data/site-local/plugins/report-build-warnings-log.html +53 -67
- data/site-local/plugins/report-tests-gtestlike-stdout.html +6 -20
- data/site-local/plugins/report-tests-ide-stdout.html +43 -57
- data/site-local/plugins/report-tests-log-factory.html +50 -64
- data/site-local/plugins/report-tests-pretty-stdout.html +7 -21
- data/site-local/plugins/report-tests-raw-output-log.html +9 -21
- data/site-local/plugins/report-tests-teamcity-stdout.html +20 -31
- data/site-local/plugins/sanitize.html +56 -65
- data/site-local/plugins/valgrind.html +49 -58
- data/site-local/project/index.html +6 -20
- data/site-local/project/release-history.html +6 -20
- data/site-local/project/sbom.html +6 -20
- data/site-local/project/upgrade.html +9 -20
- data/site-local/reference/build-directives.html +6 -20
- data/site-local/reference/command-line.html +15 -22
- data/site-local/reference/environment-vars.html +6 -20
- data/site-local/reference/gcov-plugin.html +6 -20
- data/site-local/reference/global-collections.html +6 -20
- data/site-local/reference/index.html +6 -20
- data/site-local/reference/partials-macros.html +6 -20
- data/site-local/reference/project-configuration.html +6 -20
- data/site-local/sitemap.xml.gz +0 -0
- data/site-local/snapshot/examples/cipher_quest/index.html +16 -30
- data/site-local/snapshot/examples/temp_sensor/index.html +8 -22
- data/site-local/snapshot/examples/wondrous_forest/index.html +6 -20
- data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +1 -1
- data/site-local/snapshot/plugins/gcov/config/defaults_gcov.rb +1 -1
- data/site-local/testing-guide/build-directives.html +14 -28
- data/site-local/testing-guide/conventions.html +66 -27
- data/site-local/testing-guide/frameworks.html +11 -25
- data/site-local/testing-guide/index.html +6 -20
- data/site-local/testing-guide/partials/configuration.html +8 -22
- data/site-local/testing-guide/partials/conventions.html +8 -22
- data/site-local/testing-guide/partials/directives.html +16 -30
- data/site-local/testing-guide/partials/example.html +14 -28
- data/site-local/testing-guide/partials/index.html +6 -20
- data/site-local/testing-guide/partials/overview.html +6 -20
- data/site-local/testing-guide/partials/variables.html +11 -25
- data/site-local/testing-guide/test-cases.html +13 -27
- data/site-local/testing-guide/test-sample.html +12 -26
- data/site-local/testing-guide/test-suite-anatomy.html +6 -20
- data/spec/integration/actionator_file_operations_spec.rb +91 -1
- data/spec/integration/compile_commands_json_db_spec.rb +1 -1
- data/spec/integration/configurator_pipeline_spec.rb +10 -0
- data/spec/integration/configurator_validation_spec.rb +1 -1
- data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +26 -0
- data/spec/integration/dependencies/dependency_tracker_core_spec.rb +62 -0
- data/spec/integration/launcher_handoff_spec.rb +297 -0
- data/spec/integration/mixin_loading_spec.rb +1 -1
- data/spec/integration/module_generator_spec.rb +3 -3
- data/spec/integration/nested_test_artifacts_spec.rb +99 -0
- data/spec/integration/partials_module_resolution_spec.rb +7 -4
- data/spec/integration/path_intake_scenarios_spec.rb +101 -0
- data/spec/integration/path_scenarios_spec.rb +322 -0
- data/spec/integration/quote_include_isolator_spec.rb +1 -1
- data/spec/integration/rake_task_registry_plugins_spec.rb +95 -0
- data/spec/integration/report_build_warnings_log_spec.rb +1 -1
- data/spec/integration/report_tests_log_factory_spec.rb +1 -1
- data/spec/integration/test_executable_manifest_spec.rb +1 -1
- data/spec/integration/test_includes_extractinator_spec.rb +2 -1
- data/spec/integration/test_naming_spec.rb +198 -0
- data/spec/integration/test_source_file_checks_spec.rb +166 -0
- data/spec/integration/tool_validator_spec.rb +1 -1
- data/spec/integration/upgrade_docs_spec.rb +84 -0
- data/spec/integration/vendor_copy_transient_io_retry_spec.rb +192 -75
- data/spec/support/file_tree_helper.rb +88 -0
- data/spec/support/integration/configurator_integration_helper.rb +10 -7
- data/spec/support/integration/dependency_tracker_integration_helper.rb +1 -1
- data/spec/support/integration/partials_generation_integration_helper.rb +2 -2
- data/spec/support/integration/path_scenario_harness.rb +173 -0
- data/spec/support/integration/spec_integration_helper.rb +1 -1
- data/spec/support/integration/test_includes_harness.rb +13 -2
- data/spec/support/spec_helper.rb +2 -0
- data/spec/support/system/spec_system_helper.rb +7 -6
- data/spec/support/system/system_context.rb +21 -3
- data/spec/support/working_dir_tracking.rb +49 -0
- data/spec/system/build_output_mirroring_spec.rb +2 -2
- data/spec/system/conditional_mock_includes_spec.rb +1 -1
- data/spec/system/delta_builds_spec.rb +137 -11
- data/spec/system/gcov_deployment_spec.rb +1 -0
- data/spec/system/header_include_path_validation_spec.rb +4 -4
- data/spec/system/launcher_handoff_spec.rb +82 -0
- data/spec/system/mock_include_folders_spec.rb +91 -0
- data/spec/system/parent_directory_reference_spec.rb +5 -3
- data/spec/system/path_handling_probes_spec.rb +192 -0
- data/spec/system/preprocessing_parameterized_tests_spec.rb +1 -1
- data/spec/system/rake_release_task_path_disambiguation_spec.rb +6 -6
- data/spec/system/rake_test_task_path_disambiguation_spec.rb +85 -0
- data/spec/system/special_path_characters_spec.rb +86 -0
- data/spec/system/support/common_test_cases.rb +23 -21
- data/spec/system/support/gcov_common_test_cases.rb +37 -9
- data/spec/system/support/sanitize_common_test_cases.rb +2 -2
- data/spec/system/support/valgrind_common_test_cases.rb +12 -12
- data/spec/system/test_pipeline_stop_points_spec.rb +4 -4
- data/spec/system/test_runner_system_include_spec.rb +1 -1
- data/spec/system/test_source_file_directive_spec.rb +34 -5
- data/spec/units/bin/actionator_spec.rb +14 -17
- data/spec/units/bin/app_cfg_spec.rb +47 -0
- data/spec/units/bin/cli_handler_spec.rb +284 -7
- data/spec/units/bin/cli_helper_spec.rb +126 -45
- data/spec/units/bin/installation_selector_spec.rb +114 -0
- data/spec/units/bin/launchinator_spec.rb +171 -0
- data/spec/units/bin/path_validator_spec.rb +10 -0
- data/spec/units/bin/versionator_spec.rb +38 -6
- data/spec/units/build_log_writer_spec.rb +57 -0
- data/spec/units/config/build_root_policy_spec.rb +61 -0
- data/spec/units/config/configurator_builder_spec.rb +37 -6
- data/spec/units/config/configurator_paths_validator_spec.rb +292 -0
- data/spec/units/config/configurator_setup_spec.rb +65 -103
- data/spec/units/config/configurator_spec.rb +37 -6
- data/spec/units/config/configurator_validator_spec.rb +1 -172
- data/spec/units/default_tools_quoting_spec.rb +83 -0
- data/spec/units/dependencies/dependency_cache_store_spec.rb +33 -2
- data/spec/units/dependencies/dependency_debug_tree_spec.rb +1 -1
- data/spec/units/dependencies/dependency_hasher_spec.rb +42 -1
- data/spec/units/dependencies/dependency_path_normalizer_spec.rb +1 -1
- data/spec/units/dependencies/dependency_tracker_spec.rb +3 -1
- data/spec/units/filename_extension_spec.rb +11 -0
- data/spec/units/filesystem/build_subpath_spec.rb +122 -0
- data/spec/units/filesystem/destination_collision_spec.rb +30 -0
- data/spec/units/{file_finder_helper_spec.rb → filesystem/file_finder_helper_spec.rb} +46 -1
- data/spec/units/{file_finder_spec.rb → filesystem/file_finder_spec.rb} +188 -22
- data/spec/units/{file_path_collection_utils_spec.rb → filesystem/file_path_collection_utils_spec.rb} +181 -1
- data/spec/units/{file_path_utils_spec.rb → filesystem/file_path_utils_spec.rb} +204 -87
- data/spec/units/filesystem/file_system_wrapper_spec.rb +33 -0
- data/spec/units/filesystem/file_tree_spec.rb +511 -0
- data/spec/units/filesystem/file_tree_windows_spec.rb +78 -0
- data/spec/units/{file_wrapper_spec.rb → filesystem/file_wrapper_spec.rb} +154 -32
- data/spec/units/{path_matcher_spec.rb → filesystem/path_matcher_spec.rb} +12 -1
- data/spec/units/{path_mirror_spec.rb → filesystem/path_mirror_spec.rb} +32 -4
- data/spec/units/filesystem/project_paths_spec.rb +147 -0
- data/spec/units/filesystem/working_dir_spec.rb +71 -0
- data/spec/units/generators/generator_spec.rb +12 -6
- data/spec/units/generators/generator_test_results_backtrace_spec.rb +50 -46
- data/spec/units/generators/generator_test_results_spec.rb +1 -1
- data/spec/units/handoff_spec.rb +205 -0
- data/spec/units/includes/include_factory_spec.rb +3 -3
- data/spec/units/includes/include_pathinator_spec.rb +46 -0
- data/spec/units/installation_spec.rb +228 -0
- data/spec/units/library_resolver_spec.rb +157 -0
- data/spec/units/mock_locator_spec.rb +76 -1
- data/spec/units/partials/partializer_config_spec.rb +7 -0
- data/spec/units/partials/partializer_spec.rb +1 -0
- data/spec/units/partials_manager_spec.rb +17 -0
- data/spec/units/plugins/bullseye_spec.rb +15 -2
- data/spec/units/plugins/console_reportinator_spec.rb +18 -20
- data/spec/units/plugins/dependencies_spec.rb +33 -7
- data/spec/units/plugins/dependency_spec_spec.rb +17 -0
- data/spec/units/plugins/gcov_spec.rb +28 -3
- data/spec/units/plugins/gcovr_reportinator_spec.rb +19 -47
- data/spec/units/plugins/gcovr_thresholds_spec.rb +95 -0
- data/spec/units/plugins/module_generator_spec.rb +5 -5
- data/spec/units/plugins/report_build_warnings_log_spec.rb +3 -3
- data/spec/units/plugins/report_log_writer_plugin_spec.rb +10 -1
- data/spec/units/plugins/report_tests_raw_output_log_spec.rb +13 -2
- data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +77 -3
- data/spec/units/plugins/reportgenerator_reportinator_spec.rb +1 -1
- data/spec/units/plugins/sanitize_records_spec.rb +3 -1
- data/spec/units/plugins/sanitize_spec.rb +1 -1
- data/spec/units/plugins/valgrind_spec.rb +23 -8
- data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +1 -1
- data/spec/units/rake_app/rakefile_component_resolver_spec.rb +21 -0
- data/spec/units/rake_app/test_task_name_spec.rb +47 -0
- data/spec/units/release_build_executor_spec.rb +53 -14
- data/spec/units/release_build_planner_spec.rb +15 -3
- data/spec/units/reportinator_spec.rb +5 -5
- data/spec/units/standin_headerinator_spec.rb +31 -1
- data/spec/units/test_build_executor_spec.rb +107 -5
- data/spec/units/test_build_planner_spec.rb +104 -2
- data/spec/units/test_build_setup_spec.rb +96 -12
- data/spec/units/test_context_extractor_spec.rb +25 -0
- data/spec/units/test_file_preprocessinator_spec.rb +17 -1
- data/spec/units/test_includes_extractinator_spec.rb +5 -1
- data/spec/units/test_invoker/objects_wiring_spec.rb +6 -3
- data/spec/units/test_invoker_spec.rb +14 -1
- data/spec/units/test_source_file_directive_resolver_spec.rb +38 -7
- data/spec/units/tool_executor_spec.rb +26 -0
- data/spec/units/yaml_wrapper_spec.rb +11 -0
- metadata +122 -33
- data/lib/ceedling/file_path_collection_utils.rb +0 -164
- 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
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
# =========================================================================
|
|
7
7
|
|
|
8
8
|
require 'spec_helper'
|
|
9
|
-
require 'ceedling/file_path_utils'
|
|
10
|
-
require 'ceedling/file_wrapper'
|
|
9
|
+
require 'ceedling/filesystem/file_path_utils'
|
|
10
|
+
require 'ceedling/filesystem/file_wrapper'
|
|
11
11
|
require 'ceedling/filename_extension'
|
|
12
12
|
|
|
13
13
|
describe FilePathUtils do
|
|
@@ -37,6 +37,12 @@ describe FilePathUtils do
|
|
|
37
37
|
expect(result).to match_array(['a'])
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
# The path handling audit around GH #1370: `..` holds `../sib` but not `../../far/x`
|
|
41
|
+
it 'keeps a path above the project that no other path holds' do
|
|
42
|
+
result = FilePathUtils.collapse_to_common_parents(['..', '../../far/x', '../sib'])
|
|
43
|
+
expect(result).to match_array(['..', '../../far/x'])
|
|
44
|
+
end
|
|
45
|
+
|
|
40
46
|
it 'handles deeply nested redundant paths' do
|
|
41
47
|
result = FilePathUtils.collapse_to_common_parents(['src', 'src/a/b/c', 'lib'])
|
|
42
48
|
expect(result).to match_array(['src', 'lib'])
|
|
@@ -78,6 +84,11 @@ describe FilePathUtils do
|
|
|
78
84
|
expect( FilePathUtils.standardize_in_place( 'foo/bar/baz' ) ).to eq( 'foo/bar/baz' )
|
|
79
85
|
end
|
|
80
86
|
|
|
87
|
+
# GH #1370 audit (G21)
|
|
88
|
+
it 'reads `~` as the home directory' do
|
|
89
|
+
expect( FilePathUtils.standardize_in_place( +'~/inc' ) ).to eq( File.join( Dir.home, 'inc' ) )
|
|
90
|
+
end
|
|
91
|
+
|
|
81
92
|
it 'returns nil unchanged for a nil argument' do
|
|
82
93
|
expect( FilePathUtils.standardize_in_place( nil ) ).to be_nil
|
|
83
94
|
end
|
|
@@ -365,25 +376,25 @@ describe FilePathUtils do
|
|
|
365
376
|
.to eq('build/test/runners/test_foo_runner.c')
|
|
366
377
|
end
|
|
367
378
|
|
|
368
|
-
it 'forms a
|
|
369
|
-
expect( @fpu.form_runner_filepath_from_test('
|
|
379
|
+
it 'forms a runner filepath in the runners directory itself for a test at the project root' do
|
|
380
|
+
expect( @fpu.form_runner_filepath_from_test('test_foo.c', name: 'test_foo') )
|
|
370
381
|
.to eq('build/test/runners/test_foo_runner.c')
|
|
371
382
|
end
|
|
372
383
|
|
|
373
|
-
it '
|
|
374
|
-
expect( @fpu.form_runner_filepath_from_test('test/unit/test_foo.c', name: 'unit/test_foo') )
|
|
375
|
-
.to eq('build/test/runners/unit/test_foo_runner.c')
|
|
384
|
+
it 'places the runner beneath the directories of the test\'s name, distinguishing same-named tests' do
|
|
385
|
+
expect( @fpu.form_runner_filepath_from_test('test/unit/test_foo.c', name: 'test/unit/test_foo') )
|
|
386
|
+
.to eq('build/test/runners/test/unit/test_foo_runner.c')
|
|
376
387
|
|
|
377
|
-
expect( @fpu.form_runner_filepath_from_test('test/integration/test_foo.c', name: 'integration/test_foo') )
|
|
378
|
-
.to eq('build/test/runners/integration/test_foo_runner.c')
|
|
388
|
+
expect( @fpu.form_runner_filepath_from_test('test/integration/test_foo.c', name: 'test/integration/test_foo') )
|
|
389
|
+
.to eq('build/test/runners/test/integration/test_foo_runner.c')
|
|
379
390
|
end
|
|
380
391
|
|
|
381
|
-
it 'forms
|
|
392
|
+
it 'forms the runners directory itself for a test at the project root' do
|
|
382
393
|
expect( @fpu.form_test_runners_path('test_foo') ).to eq('build/test/runners')
|
|
383
394
|
end
|
|
384
395
|
|
|
385
|
-
it 'forms the runner directory
|
|
386
|
-
expect( @fpu.form_test_runners_path('unit/test_foo') ).to eq('build/test/runners/unit')
|
|
396
|
+
it 'forms the runner directory beneath the directories of the test\'s name' do
|
|
397
|
+
expect( @fpu.form_test_runners_path('test/unit/test_foo') ).to eq('build/test/runners/test/unit')
|
|
387
398
|
end
|
|
388
399
|
end
|
|
389
400
|
|
|
@@ -449,12 +460,54 @@ describe FilePathUtils do
|
|
|
449
460
|
.to eq('build/gcov/dependencies/AdcCalc.d')
|
|
450
461
|
end
|
|
451
462
|
|
|
463
|
+
# A context's own objects, outside any test, are placed by their sources' paths too
|
|
464
|
+
it 'follows a context\'s own object below its output root when no test identity is given' do
|
|
465
|
+
expect( @fpu.form_test_dependencies_filepath('build/gcov/out/src/a/util.o', context: :gcov) )
|
|
466
|
+
.to eq('build/gcov/dependencies/src/a/util.d')
|
|
467
|
+
end
|
|
468
|
+
|
|
452
469
|
it 'forms the list filepath directly alongside the object, wherever it was mirrored to' do
|
|
453
470
|
expect( @fpu.form_test_build_list_filepath('build/test/out/TestFoo/calculators/AdcCalc.o') )
|
|
454
471
|
.to eq('build/test/out/TestFoo/calculators/AdcCalc.lst')
|
|
455
472
|
end
|
|
456
473
|
end
|
|
457
474
|
|
|
475
|
+
describe '#form_test_object_filepath' do
|
|
476
|
+
before(:each) do
|
|
477
|
+
@configurator = double('configurator')
|
|
478
|
+
@file_wrapper = double('file_wrapper')
|
|
479
|
+
allow(@file_wrapper).to receive(:check_path_length)
|
|
480
|
+
@fpu = described_class.new({
|
|
481
|
+
:configurator => @configurator,
|
|
482
|
+
:file_wrapper => @file_wrapper
|
|
483
|
+
})
|
|
484
|
+
|
|
485
|
+
allow(@configurator).to receive(:project_build_root).and_return('build')
|
|
486
|
+
allow(@configurator).to receive(:extension_object).and_return( FilenameExtension.new('.o') )
|
|
487
|
+
allow(@configurator).to receive(:project_use_partials).and_return( true )
|
|
488
|
+
allow(@configurator).to receive(:project_use_mocks).and_return( true )
|
|
489
|
+
allow(@configurator).to receive(:project_test_partials_path).and_return('build/test/partials')
|
|
490
|
+
allow(@configurator).to receive(:cmock_mock_path).and_return('build/test/mocks')
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
it 'places a test\'s object where its build does, by the source\'s path from the project root' do
|
|
494
|
+
expect( @fpu.form_test_object_filepath('src/a/util.c', name: 'test/test_util', context: :gcov) )
|
|
495
|
+
.to eq('build/gcov/out/test/test_util/src/a/util.o')
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
# Untested sources compile outside any test, so same-named ones keep apart only by path
|
|
499
|
+
it 'places a context\'s own objects apart, by their sources\' paths, when no test is named' do
|
|
500
|
+
expect( @fpu.form_test_object_filepath('src/a/util.c', context: :gcov) ).to eq('build/gcov/out/src/a/util.o')
|
|
501
|
+
expect( @fpu.form_test_object_filepath('src/b/util.c', context: :gcov) ).to eq('build/gcov/out/src/b/util.o')
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
it 'places a test\'s generated Partial below its own subdirectory, as its build does' do
|
|
505
|
+
expect(
|
|
506
|
+
@fpu.form_test_object_filepath('build/test/partials/test/test_util/drv/ceedling_partial_util_impl.c', name: 'test/test_util', context: :gcov)
|
|
507
|
+
).to eq('build/gcov/out/test/test_util/drv/ceedling_partial_util_impl.o')
|
|
508
|
+
end
|
|
509
|
+
end
|
|
510
|
+
|
|
458
511
|
describe '#form_test_preprocess_build_directives_path, #form_test_build_directives_cache_filepath, #form_preprocessed_source_files_cache_filepath' do
|
|
459
512
|
before(:each) do
|
|
460
513
|
@configurator = double('configurator')
|
|
@@ -497,19 +550,28 @@ describe FilePathUtils do
|
|
|
497
550
|
})
|
|
498
551
|
|
|
499
552
|
allow(@configurator).to receive(:project_release_build_output_path).and_return('build/release/out')
|
|
553
|
+
allow(@configurator).to receive(:project_build_root).and_return('build')
|
|
500
554
|
allow(@configurator).to receive(:extension_object).and_return( FilenameExtension.new('.o') )
|
|
501
|
-
allow(@configurator).to receive(:paths_source).and_return( ['drivers'] )
|
|
502
555
|
end
|
|
503
556
|
|
|
504
|
-
it '
|
|
505
|
-
objects = @fpu.form_release_build_objects_filelist( ['drivers/foo/bar.c', 'drivers/baz/bar.c'] )
|
|
506
|
-
expect( objects ).to
|
|
507
|
-
expect( objects ).to include('build/release/out/baz/bar.o')
|
|
557
|
+
it 'places each object by its source\'s path from the project root, distinguishing same-named sources' do
|
|
558
|
+
objects = @fpu.form_release_build_objects_filelist( ['drivers/foo/bar.c', 'drivers/baz/bar.c', 'lib/bar.c'] )
|
|
559
|
+
expect( objects ).to eq(['build/release/out/drivers/foo/bar.o', 'build/release/out/drivers/baz/bar.o', 'build/release/out/lib/bar.o'])
|
|
508
560
|
end
|
|
509
561
|
|
|
510
|
-
it '
|
|
511
|
-
objects = @fpu.form_release_build_objects_filelist( ['
|
|
512
|
-
expect( objects ).to eq(['build/release/out/
|
|
562
|
+
it 'places a source above the project root below the output root' do
|
|
563
|
+
objects = @fpu.form_release_build_objects_filelist( ['../shared/src/crc.c'] )
|
|
564
|
+
expect( objects ).to eq(['build/release/out/_up_/shared/src/crc.o'])
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
it 'leaves a source below the build root flat' do
|
|
568
|
+
objects = @fpu.form_release_build_objects_filelist( ['build/vendor/c_exception/lib/CException.c'] )
|
|
569
|
+
expect( objects ).to eq(['build/release/out/CException.o'])
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
it 'refuses two sources that would build to one object, naming both' do
|
|
573
|
+
expect { @fpu.form_release_build_objects_filelist( ['build/vendor/c_exception/lib/CException.c', 'CException.c'] ) }
|
|
574
|
+
.to raise_error( CeedlingException, /`build\/vendor\/c_exception\/lib\/CException.c` and `CException.c`.*`build\/release\/out\/CException.o`/ )
|
|
513
575
|
end
|
|
514
576
|
end
|
|
515
577
|
|
|
@@ -526,21 +588,16 @@ describe FilePathUtils do
|
|
|
526
588
|
})
|
|
527
589
|
|
|
528
590
|
allow(@configurator).to receive(:project_release_dependencies_path).and_return('build/release/dependencies')
|
|
591
|
+
allow(@configurator).to receive(:project_build_root).and_return('build')
|
|
529
592
|
allow(@configurator).to receive(:extension_dependencies).and_return( FilenameExtension.new('.d') )
|
|
530
|
-
allow(@configurator).to receive(:paths_source).and_return( ['drivers'] )
|
|
531
593
|
end
|
|
532
594
|
|
|
533
|
-
it '
|
|
595
|
+
it 'places each dependency file the same way as its corresponding object' do
|
|
534
596
|
deps = @fpu.form_release_dependencies_filelist( ['drivers/foo/bar.c', 'drivers/baz/bar.c'] )
|
|
535
|
-
expect( deps ).to
|
|
536
|
-
expect( deps ).to include('build/release/dependencies/baz/bar.d')
|
|
597
|
+
expect( deps ).to eq(['build/release/dependencies/drivers/foo/bar.d', 'build/release/dependencies/drivers/baz/bar.d'])
|
|
537
598
|
end
|
|
538
599
|
end
|
|
539
600
|
|
|
540
|
-
# Every preprocessed artifact for a test lands below that test's own subdirectory.
|
|
541
|
-
# That alone kept artifacts apart while a test had at most one source of any given
|
|
542
|
-
# basename. Two same-basename sources in one test overwrite each other, so the
|
|
543
|
-
# source's own namespace below its configured root is mirrored as well.
|
|
544
601
|
# A mock's generated files sit below its test's mock root, in the subdirectory mirroring
|
|
545
602
|
# whatever it mocks. Two places need that directory -- the stage that compiles the mock
|
|
546
603
|
# and the stage that generates it -- and they must agree, or a mock is compiled from a
|
|
@@ -580,46 +637,35 @@ describe FilePathUtils do
|
|
|
580
637
|
|
|
581
638
|
allow(@configurator).to receive(:project_test_preprocess_files_path).and_return('build/test/preprocess/files')
|
|
582
639
|
allow(@configurator).to receive(:project_test_preprocess_includes_path).and_return('build/test/preprocess/includes')
|
|
583
|
-
allow(@configurator).to receive(:
|
|
584
|
-
allow(@configurator).to receive(:paths_include).and_return( ['include/**'] )
|
|
585
|
-
allow(@configurator).to receive(:paths_support).and_return( [] )
|
|
586
|
-
allow(@configurator).to receive(:paths_test).and_return( ['test/**'] )
|
|
640
|
+
allow(@configurator).to receive(:project_build_root).and_return('build')
|
|
587
641
|
allow(@configurator).to receive(:project_use_partials).and_return( true )
|
|
588
642
|
allow(@configurator).to receive(:project_use_mocks).and_return( true )
|
|
589
643
|
allow(@configurator).to receive(:project_test_partials_path).and_return('build/test/partials')
|
|
590
644
|
allow(@configurator).to receive(:cmock_mock_path).and_return('build/test/mocks')
|
|
591
645
|
end
|
|
592
646
|
|
|
593
|
-
#
|
|
594
|
-
#
|
|
595
|
-
it '
|
|
596
|
-
expect( @fpu.form_preprocessed_file_filepath('src/foo.c', 'test_foo') )
|
|
597
|
-
.to eq('build/test/preprocess/files/test_foo/foo.c')
|
|
598
|
-
expect( @fpu.form_preprocessed_file_full_expansion_filepath('src/foo.c', 'test_foo') )
|
|
599
|
-
.to eq('build/test/preprocess/files/test_foo/full_expansion/foo.c')
|
|
600
|
-
expect( @fpu.form_preprocessed_file_raw_directives_only_filepath('src/foo.c', 'test_foo') )
|
|
601
|
-
.to eq('build/test/preprocess/files/test_foo/directives_only/raw/foo.c')
|
|
602
|
-
expect( @fpu.form_preprocessed_file_compacted_directives_only_filepath('src/foo.c', 'test_foo') )
|
|
603
|
-
.to eq('build/test/preprocess/files/test_foo/directives_only/foo.c')
|
|
604
|
-
expect( @fpu.form_preprocessed_file_fallback_expansion_filepath('src/foo.c', 'test_foo') )
|
|
605
|
-
.to eq('build/test/preprocess/files/test_foo/fallback_expansion/foo.c')
|
|
606
|
-
expect( @fpu.form_preprocessed_includes_list_filepath('src/foo.c', 'test_foo') )
|
|
607
|
-
.to eq('build/test/preprocess/includes/test_foo/foo.c.yml')
|
|
608
|
-
end
|
|
609
|
-
|
|
610
|
-
it 'mirrors a nested source below the test subdirectory' do
|
|
647
|
+
# Each artifact of a test sits below the test's own subdirectory, at its file's path
|
|
648
|
+
# from the project root, so two same-named files in one test never share one
|
|
649
|
+
it 'places a file by its path from the project root below the test subdirectory' do
|
|
611
650
|
expect( @fpu.form_preprocessed_file_filepath('src/drivers/uart/config.c', 'test_both') )
|
|
612
|
-
.to eq('build/test/preprocess/files/test_both/drivers/uart/config.c')
|
|
651
|
+
.to eq('build/test/preprocess/files/test_both/src/drivers/uart/config.c')
|
|
613
652
|
expect( @fpu.form_preprocessed_file_full_expansion_filepath('src/drivers/uart/config.c', 'test_both') )
|
|
614
|
-
.to eq('build/test/preprocess/files/test_both/full_expansion/drivers/uart/config.c')
|
|
653
|
+
.to eq('build/test/preprocess/files/test_both/full_expansion/src/drivers/uart/config.c')
|
|
615
654
|
expect( @fpu.form_preprocessed_file_raw_directives_only_filepath('src/drivers/uart/config.c', 'test_both') )
|
|
616
|
-
.to eq('build/test/preprocess/files/test_both/directives_only/raw/drivers/uart/config.c')
|
|
655
|
+
.to eq('build/test/preprocess/files/test_both/directives_only/raw/src/drivers/uart/config.c')
|
|
617
656
|
expect( @fpu.form_preprocessed_file_compacted_directives_only_filepath('src/drivers/uart/config.c', 'test_both') )
|
|
618
|
-
.to eq('build/test/preprocess/files/test_both/directives_only/drivers/uart/config.c')
|
|
657
|
+
.to eq('build/test/preprocess/files/test_both/directives_only/src/drivers/uart/config.c')
|
|
619
658
|
expect( @fpu.form_preprocessed_file_fallback_expansion_filepath('src/drivers/uart/config.c', 'test_both') )
|
|
620
|
-
.to eq('build/test/preprocess/files/test_both/fallback_expansion/drivers/uart/config.c')
|
|
659
|
+
.to eq('build/test/preprocess/files/test_both/fallback_expansion/src/drivers/uart/config.c')
|
|
621
660
|
expect( @fpu.form_preprocessed_includes_list_filepath('src/drivers/uart/config.c', 'test_both') )
|
|
622
|
-
.to eq('build/test/preprocess/includes/test_both/drivers/uart/config.c.yml')
|
|
661
|
+
.to eq('build/test/preprocess/includes/test_both/src/drivers/uart/config.c.yml')
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
it 'keeps a header far above the project below the test subdirectory' do
|
|
665
|
+
far = File.expand_path( '../../far/inc/sdk.h' )
|
|
666
|
+
expect( @fpu.form_preprocessed_file_filepath( far, 'test_both' ) )
|
|
667
|
+
.to eq( File.join( 'build/test/preprocess/files/test_both', BuildSubpath.of_directory( File.dirname( far ) ), 'sdk.h' ) )
|
|
668
|
+
expect( BuildSubpath.of_directory( File.dirname( far ) ) ).to_not include( '..' )
|
|
623
669
|
end
|
|
624
670
|
|
|
625
671
|
# The defect itself: two sources sharing a basename in one test.
|
|
@@ -641,9 +687,9 @@ describe FilePathUtils do
|
|
|
641
687
|
@fpu.form_preprocessed_includes_list_filepath('src/drivers/uart/config.c', 'test_both')
|
|
642
688
|
end
|
|
643
689
|
|
|
644
|
-
it '
|
|
690
|
+
it 'places a header by its path from the project root' do
|
|
645
691
|
expect( @fpu.form_preprocessed_file_filepath('include/drivers/uart/config.h', 'test_both') )
|
|
646
|
-
.to eq('build/test/preprocess/files/test_both/drivers/uart/config.h')
|
|
692
|
+
.to eq('build/test/preprocess/files/test_both/include/drivers/uart/config.h')
|
|
647
693
|
end
|
|
648
694
|
|
|
649
695
|
# A generated Partial or mock sits below its own test's generated root rather than a
|
|
@@ -676,9 +722,7 @@ describe FilePathUtils do
|
|
|
676
722
|
).to eq('build/test/preprocess/files/test_both/drivers/spi/mock_config.h')
|
|
677
723
|
end
|
|
678
724
|
|
|
679
|
-
|
|
680
|
-
# artifact stays where it has always been.
|
|
681
|
-
it 'keeps a generated file flat' do
|
|
725
|
+
it 'keeps a generated file directly in its test root flat' do
|
|
682
726
|
expect( @fpu.form_preprocessed_file_filepath('build/test/mocks/test_both/Mockconfig.h', 'test_both') )
|
|
683
727
|
.to eq('build/test/preprocess/files/test_both/Mockconfig.h')
|
|
684
728
|
end
|
|
@@ -697,27 +741,42 @@ describe FilePathUtils do
|
|
|
697
741
|
})
|
|
698
742
|
|
|
699
743
|
allow(@configurator).to receive(:extension_object).and_return( FilenameExtension.new('.o') )
|
|
700
|
-
allow(@configurator).to receive(:
|
|
701
|
-
allow(@configurator).to receive(:paths_support).and_return( ['support'] )
|
|
744
|
+
allow(@configurator).to receive(:project_build_root).and_return('build')
|
|
702
745
|
end
|
|
703
746
|
|
|
704
|
-
it '
|
|
747
|
+
it 'places a test, module-under-test or support source by its path from the project root' do
|
|
705
748
|
objects = @fpu.form_test_build_objects_filelist(
|
|
706
|
-
'build/test/out/TestFoo', ['drivers/foo/bar.c', 'drivers/baz/bar.c']
|
|
749
|
+
'build/test/out/TestFoo', ['test/TestFoo.c', 'drivers/foo/bar.c', 'drivers/baz/bar.c', 'support/qux.c']
|
|
707
750
|
)
|
|
708
|
-
expect( objects ).to
|
|
709
|
-
|
|
751
|
+
expect( objects ).to eq([
|
|
752
|
+
'build/test/out/TestFoo/test/TestFoo.o',
|
|
753
|
+
'build/test/out/TestFoo/drivers/foo/bar.o',
|
|
754
|
+
'build/test/out/TestFoo/drivers/baz/bar.o',
|
|
755
|
+
'build/test/out/TestFoo/support/qux.o'
|
|
756
|
+
])
|
|
710
757
|
end
|
|
711
758
|
|
|
712
|
-
|
|
759
|
+
# A source collected by one spelling and configured by another is still one source
|
|
760
|
+
it 'builds one file named by two spellings once, as no collision' do
|
|
713
761
|
objects = @fpu.form_test_build_objects_filelist(
|
|
714
|
-
'build/test/out/TestFoo', ['test/
|
|
762
|
+
'build/test/out/TestFoo', ['test/support/helper.c', './test/support/helper.c', 'build/vendor/c_exception/lib/CException.c', './build/vendor/c_exception/lib/CException.c']
|
|
715
763
|
)
|
|
716
|
-
expect( objects ).to eq([
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
764
|
+
expect( objects ).to eq(['build/test/out/TestFoo/test/support/helper.o', 'build/test/out/TestFoo/CException.o'])
|
|
765
|
+
end
|
|
766
|
+
|
|
767
|
+
# A source far from the project gains a directory for each level its path climbs, which
|
|
768
|
+
# can reach Windows' path length limit
|
|
769
|
+
it 'checks the length of each object\'s whole path, once' do
|
|
770
|
+
expect(@file_wrapper).to receive(:check_path_length).with( 'build/test/out/TestFoo/_up_/_up_/far/src/x.o', origin: 'FilePathUtils#build_filepath' ).once
|
|
771
|
+
|
|
772
|
+
2.times { @fpu.form_test_build_objects_filelist( 'build/test/out/TestFoo', ['../../far/src/x.c'] ) }
|
|
773
|
+
end
|
|
774
|
+
|
|
775
|
+
it 'leaves a runner or vendored framework source below the build root flat' do
|
|
776
|
+
objects = @fpu.form_test_build_objects_filelist(
|
|
777
|
+
'build/test/out/TestFoo', ['build/test/runners/TestFoo_runner.c', 'build/vendor/unity/src/unity.c']
|
|
778
|
+
)
|
|
779
|
+
expect( objects ).to eq(['build/test/out/TestFoo/TestFoo_runner.o', 'build/test/out/TestFoo/unity.o'])
|
|
721
780
|
end
|
|
722
781
|
|
|
723
782
|
# Generated Partial sources sit below their own build root, not a configured source
|
|
@@ -739,7 +798,7 @@ describe FilePathUtils do
|
|
|
739
798
|
])
|
|
740
799
|
end
|
|
741
800
|
|
|
742
|
-
it 'leaves
|
|
801
|
+
it 'leaves a generated source flat when its root is not supplied' do
|
|
743
802
|
objects = @fpu.form_test_build_objects_filelist(
|
|
744
803
|
'build/test/out/TestFoo',
|
|
745
804
|
['build/test/partials/TestFoo/drivers/uart/ceedling_partial_config_impl.c']
|
|
@@ -762,20 +821,82 @@ describe FilePathUtils do
|
|
|
762
821
|
})
|
|
763
822
|
|
|
764
823
|
allow(@configurator).to receive(:extension_testpass).and_return( FilenameExtension.new('.pass') )
|
|
765
|
-
allow(@configurator).to receive(:
|
|
824
|
+
allow(@configurator).to receive(:project_build_root).and_return( 'build' )
|
|
825
|
+
allow(@file_wrapper).to receive(:check_path_length)
|
|
766
826
|
end
|
|
767
827
|
|
|
768
|
-
it 'mirrors each expected results file beneath the same test
|
|
828
|
+
it 'mirrors each expected results file beneath the same test name its own build directory uses' do
|
|
769
829
|
results = @fpu.form_pass_results_filelist(
|
|
770
830
|
'build/test/results', ['test/unit/test_foo.c', 'test/integration/test_foo.c']
|
|
771
831
|
)
|
|
772
|
-
expect( results ).to include('build/test/results/unit/test_foo.pass')
|
|
773
|
-
expect( results ).to include('build/test/results/integration/test_foo.pass')
|
|
832
|
+
expect( results ).to include('build/test/results/test/unit/test_foo.pass')
|
|
833
|
+
expect( results ).to include('build/test/results/test/integration/test_foo.pass')
|
|
774
834
|
end
|
|
775
835
|
|
|
776
|
-
it '
|
|
836
|
+
it 'places a test at its root beneath that root, as its name does' do
|
|
777
837
|
results = @fpu.form_pass_results_filelist('build/test/results', ['test/test_bar.c'])
|
|
778
|
-
expect( results ).to eq(['build/test/results/test_bar.pass'])
|
|
838
|
+
expect( results ).to eq(['build/test/results/test/test_bar.pass'])
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
# GH #1364: same-named tests at a root and below it, and under two roots
|
|
842
|
+
it 'gives same-named tests distinct results files' do
|
|
843
|
+
tests = ['test/test_calc.c', 'test/unit/test_calc.c', 'extra/unit/test_calc.c']
|
|
844
|
+
results = @fpu.form_pass_results_filelist( 'build/test/results', tests )
|
|
845
|
+
expect( results.uniq.size ).to eq(3)
|
|
846
|
+
end
|
|
847
|
+
|
|
848
|
+
it 'agrees with the results path each test is given' do
|
|
849
|
+
['test/test_calc.c', 'test/unit/test_calc.c', '../shared/test/test_s.c'].each do |test|
|
|
850
|
+
name = @fpu.form_test_name( test )
|
|
851
|
+
expected = @fpu.form_pass_results_filepath( @fpu.form_test_results_path( name, context: 'test' ), test )
|
|
852
|
+
expect( @fpu.form_pass_results_filelist( 'build/test/results', [test] ) ).to eq([expected])
|
|
853
|
+
end
|
|
854
|
+
end
|
|
855
|
+
end
|
|
856
|
+
|
|
857
|
+
describe '#form_test_name' do
|
|
858
|
+
before(:each) do
|
|
859
|
+
@fpu = described_class.new({ :configurator => double('configurator'), :file_wrapper => double('file_wrapper') })
|
|
860
|
+
end
|
|
861
|
+
|
|
862
|
+
it 'names a test by its path from the project root, without its extension' do
|
|
863
|
+
expect( @fpu.form_test_name( 'test/test_calc.c' ) ).to eq('test/test_calc')
|
|
864
|
+
expect( @fpu.form_test_name( 'test/unit/test_calc.c' ) ).to eq('test/unit/test_calc')
|
|
865
|
+
end
|
|
866
|
+
|
|
867
|
+
# GH #1364: the same layout under two roots and a :files test outside every root
|
|
868
|
+
it 'keeps the root, so same-named tests under different roots get different names' do
|
|
869
|
+
names = ['test/foo/test_x.c', 'extra/foo/test_x.c', 'other/test_x.c'].map { |test| @fpu.form_test_name( test ) }
|
|
870
|
+
expect( names ).to eq(['test/foo/test_x', 'extra/foo/test_x', 'other/test_x'])
|
|
871
|
+
end
|
|
872
|
+
|
|
873
|
+
it 'gives one name however the path is written' do
|
|
874
|
+
expect( @fpu.form_test_name( './test/unit/test_calc.c' ) ).to eq('test/unit/test_calc')
|
|
875
|
+
expect( @fpu.form_test_name( 'test\\unit\\test_calc.c' ) ).to eq('test/unit/test_calc')
|
|
876
|
+
expect( @fpu.form_test_name( File.join( Dir.pwd, 'test/unit/test_calc.c' ) ) ).to eq('test/unit/test_calc')
|
|
877
|
+
end
|
|
878
|
+
|
|
879
|
+
it 'keeps a test outside the project inside the build directory' do
|
|
880
|
+
expect( @fpu.form_test_name( '../shared/test/unit/test_s.c' ) ).to eq('_up_/shared/test/unit/test_s')
|
|
881
|
+
expect( @fpu.form_test_name( '../../other/test_o.c' ) ).to eq('_up_/_up_/other/test_o')
|
|
882
|
+
end
|
|
883
|
+
|
|
884
|
+
it 'names an absolute path outside the project by its path from the project' do
|
|
885
|
+
outside = File.join( File.dirname( Dir.pwd ), 'shared', 'test', 'test_s.c' )
|
|
886
|
+
expect( @fpu.form_test_name( outside ) ).to eq('_up_/shared/test/test_s')
|
|
887
|
+
end
|
|
888
|
+
|
|
889
|
+
# A drive other than the working directory's, which on Windows may itself be C: or D:
|
|
890
|
+
it 'places a test on another Windows drive beneath its drive letter' do
|
|
891
|
+
drive = Dir.pwd.match?( /\A[Qq]:/ ) ? 'R' : 'Q'
|
|
892
|
+
|
|
893
|
+
expect( @fpu.form_test_name( "#{drive}:/work/test/test_x.c" ) ).to eq("_abs_/#{drive}/work/test/test_x")
|
|
894
|
+
expect( @fpu.form_test_name( "#{drive}:\\work\\test\\test_x.c" ) ).to eq("_abs_/#{drive}/work/test/test_x")
|
|
895
|
+
end
|
|
896
|
+
|
|
897
|
+
it 'names a test on the working directory\'s own Windows drive by its relative path', if: Dir.pwd.match?( /\A[A-Za-z]:/ ) do
|
|
898
|
+
inside = File.join( Dir.pwd, 'test', 'test_x.c' ).tr( '/', '\\' )
|
|
899
|
+
expect( @fpu.form_test_name( inside ) ).to eq('test/test_x')
|
|
779
900
|
end
|
|
780
901
|
end
|
|
781
902
|
|
|
@@ -790,19 +911,15 @@ describe FilePathUtils do
|
|
|
790
911
|
})
|
|
791
912
|
|
|
792
913
|
allow(@configurator).to receive(:project_test_preprocess_includes_path).and_return('build/test/preprocess/includes')
|
|
793
|
-
|
|
914
|
+
allow(@configurator).to receive(:project_build_root).and_return('build')
|
|
794
915
|
allow(@configurator).to receive(:project_use_partials).and_return( false )
|
|
795
916
|
allow(@configurator).to receive(:project_use_mocks).and_return( false )
|
|
796
|
-
allow(@configurator).to receive(:paths_source).and_return( [] )
|
|
797
|
-
allow(@configurator).to receive(:paths_support).and_return( [] )
|
|
798
|
-
allow(@configurator).to receive(:paths_include).and_return( [] )
|
|
799
|
-
allow(@configurator).to receive(:paths_test).and_return( ['test'] )
|
|
800
917
|
end
|
|
801
918
|
|
|
802
919
|
it 'uses the fixed internal .yml extension regardless of a project-configured :extension ↳ :yaml setting' do
|
|
803
920
|
expect(@configurator).to_not receive(:extension_yaml)
|
|
804
921
|
expect( @fpu.form_preprocessed_includes_list_filepath('test/TestFoo.c', 'TestFoo') )
|
|
805
|
-
.to eq('build/test/preprocess/includes/TestFoo/TestFoo.c.yml')
|
|
922
|
+
.to eq('build/test/preprocess/includes/TestFoo/test/TestFoo.c.yml')
|
|
806
923
|
end
|
|
807
924
|
end
|
|
808
925
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# =========================================================================
|
|
2
|
+
# Ceedling - Test-Centered Build System for C
|
|
3
|
+
# ThrowTheSwitch.org
|
|
4
|
+
# Copyright (c) 2010-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
# =========================================================================
|
|
7
|
+
|
|
8
|
+
require 'spec_helper'
|
|
9
|
+
require 'tmpdir'
|
|
10
|
+
require 'fileutils'
|
|
11
|
+
require 'ceedling/filesystem/file_system_wrapper'
|
|
12
|
+
require 'ceedling/filesystem/working_dir'
|
|
13
|
+
|
|
14
|
+
describe FileSystemWrapper do
|
|
15
|
+
around(:each) do |example|
|
|
16
|
+
Dir.mktmpdir do |dir|
|
|
17
|
+
@ws = File.realpath( dir )
|
|
18
|
+
FileUtils.mkdir_p( File.join( @ws, 'app/dep' ) )
|
|
19
|
+
Dir.chdir( File.join( @ws, 'app' ) ) { WorkingDirTracking.untracked { example.run } }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# A plugin can change directory through this object, and paths it resolves inside must
|
|
24
|
+
# resolve against the directory it changed to
|
|
25
|
+
it 'changes directory for the block as WorkingDir.chdir does' do
|
|
26
|
+
WorkingDir.path
|
|
27
|
+
|
|
28
|
+
inside = described_class.new.cd( 'dep' ) { WorkingDir.path }
|
|
29
|
+
|
|
30
|
+
expect(inside).to eq( File.join( @ws, 'app/dep' ) )
|
|
31
|
+
expect(WorkingDir.path).to eq( File.join( @ws, 'app' ) )
|
|
32
|
+
end
|
|
33
|
+
end
|