opal-rspec 0.8.0.alpha3 → 1.0.0.alpha1
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/.github/workflows/build.yml +7 -7
- data/.gitmodules +6 -0
- data/CHANGELOG.md +16 -1
- data/Gemfile +13 -0
- data/README.md +63 -59
- data/diff-lcs/spec/files_to_exclude.txt +1 -0
- data/diff-lcs/spec/requires.rb +4 -0
- data/diff-lcs/upstream/.autotest +5 -0
- data/diff-lcs/upstream/.fasterer.yml +3 -0
- data/{stubs/diff/lcs.rb → diff-lcs/upstream/.gemtest} +0 -0
- data/diff-lcs/upstream/.github/workflows/ci.yml +64 -0
- data/diff-lcs/upstream/.github/workflows/codeql-analysis.yml +70 -0
- data/diff-lcs/upstream/.gitignore +20 -0
- data/diff-lcs/upstream/.hoerc +52 -0
- data/diff-lcs/upstream/.rspec +1 -0
- data/diff-lcs/upstream/.standard.yml +6 -0
- data/diff-lcs/upstream/Code-of-Conduct.md +74 -0
- data/diff-lcs/upstream/Contributing.md +119 -0
- data/diff-lcs/upstream/Gemfile +28 -0
- data/diff-lcs/upstream/History.md +407 -0
- data/diff-lcs/upstream/License.md +41 -0
- data/diff-lcs/upstream/Manifest.txt +59 -0
- data/diff-lcs/upstream/README.rdoc +84 -0
- data/diff-lcs/upstream/Rakefile +127 -0
- data/diff-lcs/upstream/bin/htmldiff +35 -0
- data/diff-lcs/upstream/bin/ldiff +9 -0
- data/diff-lcs/upstream/diff-lcs.gemspec +48 -0
- data/diff-lcs/upstream/docs/COPYING.txt +339 -0
- data/diff-lcs/upstream/docs/artistic.txt +127 -0
- data/diff-lcs/upstream/lib/diff/lcs/array.rb +7 -0
- data/diff-lcs/upstream/lib/diff/lcs/backports.rb +9 -0
- data/diff-lcs/upstream/lib/diff/lcs/block.rb +37 -0
- data/diff-lcs/upstream/lib/diff/lcs/callbacks.rb +327 -0
- data/diff-lcs/upstream/lib/diff/lcs/change.rb +174 -0
- data/diff-lcs/upstream/lib/diff/lcs/htmldiff.rb +158 -0
- data/diff-lcs/upstream/lib/diff/lcs/hunk.rb +363 -0
- data/diff-lcs/upstream/lib/diff/lcs/internals.rb +308 -0
- data/diff-lcs/upstream/lib/diff/lcs/ldiff.rb +173 -0
- data/diff-lcs/upstream/lib/diff/lcs/string.rb +5 -0
- data/diff-lcs/upstream/lib/diff/lcs.rb +741 -0
- data/diff-lcs/upstream/lib/diff-lcs.rb +3 -0
- data/diff-lcs/upstream/spec/change_spec.rb +89 -0
- data/diff-lcs/upstream/spec/diff_spec.rb +51 -0
- data/diff-lcs/upstream/spec/fixtures/aX +1 -0
- data/diff-lcs/upstream/spec/fixtures/bXaX +1 -0
- data/diff-lcs/upstream/spec/fixtures/ds1.csv +50 -0
- data/diff-lcs/upstream/spec/fixtures/ds2.csv +51 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff +4 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-c +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-e +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-f +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-u +5 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef +4 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-c +15 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-e +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-f +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-u +9 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2 +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-c +20 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-d +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-e +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-f +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-u +16 -0
- data/diff-lcs/upstream/spec/fixtures/new-chef +4 -0
- data/diff-lcs/upstream/spec/fixtures/new-chef2 +17 -0
- data/diff-lcs/upstream/spec/fixtures/old-chef +4 -0
- data/diff-lcs/upstream/spec/fixtures/old-chef2 +14 -0
- data/diff-lcs/upstream/spec/hunk_spec.rb +83 -0
- data/diff-lcs/upstream/spec/issues_spec.rb +160 -0
- data/diff-lcs/upstream/spec/lcs_spec.rb +56 -0
- data/diff-lcs/upstream/spec/ldiff_spec.rb +89 -0
- data/diff-lcs/upstream/spec/patch_spec.rb +416 -0
- data/diff-lcs/upstream/spec/sdiff_spec.rb +216 -0
- data/diff-lcs/upstream/spec/spec_helper.rb +376 -0
- data/diff-lcs/upstream/spec/traverse_balanced_spec.rb +312 -0
- data/diff-lcs/upstream/spec/traverse_sequences_spec.rb +137 -0
- data/lib/opal/rspec/runner.rb +11 -0
- data/lib/opal/rspec/sprockets.rb +6 -0
- data/lib/opal/rspec/version.rb +1 -1
- data/lib/opal/rspec.rb +1 -2
- data/lib-opal/opal/rspec/async/configuration.rb +39 -0
- data/lib-opal/opal/rspec/async/example.rb +80 -168
- data/lib-opal/opal/rspec/async/example_group.rb +71 -81
- data/lib-opal/opal/rspec/async/hooks.rb +98 -8
- data/lib-opal/opal/rspec/async/memoized_helpers.rb +32 -0
- data/lib-opal/opal/rspec/async/reporter.rb +6 -3
- data/lib-opal/opal/rspec/async/runner.rb +33 -24
- data/lib-opal/opal/rspec/async.rb +4 -1
- data/lib-opal/opal/rspec/browser.rb +0 -8
- data/lib-opal/opal/rspec/browser_early.rb +5 -0
- data/lib-opal/opal/rspec/fixes/diff-lcs/hunk.rb +164 -0
- data/lib-opal/opal/rspec/fixes/diff-lcs/lcs.rb +112 -0
- data/lib-opal/opal/rspec/fixes/diff-lcs.rb +2 -0
- data/lib-opal/opal/rspec/fixes/opal.rb +4 -17
- data/lib-opal/opal/rspec/fixes/rspec/core/example_status_persister.rb +11 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/deprecation_formatter.rb +3 -12
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/exception_presenter.rb +28 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/loader.rb +0 -32
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/snippet_extractor.rb +17 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/syntax_highlighter.rb +17 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters.rb +3 -4
- data/lib-opal/opal/rspec/fixes/rspec/core/metadata.rb +24 -8
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications/examples_notification.rb +3 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications.rb +0 -2
- data/lib-opal/opal/rspec/fixes/rspec/core.rb +1 -2
- data/lib-opal/opal/rspec/fixes/rspec/expectations.rb +0 -1
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/base_matcher.rb +26 -0
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in.rb +1 -3
- data/lib-opal/opal/rspec/fixes/rspec/matchers/expecteds_for_multiple_diffs.rb +13 -0
- data/lib-opal/opal/rspec/fixes/rspec/matchers.rb +1 -1
- data/lib-opal/opal/rspec/fixes/rspec/mocks/error_generator.rb +26 -10
- data/lib-opal/opal/rspec/fixes/rspec/mocks/proxy.rb +19 -0
- data/lib-opal/opal/rspec/fixes/rspec/mocks.rb +1 -3
- data/lib-opal/opal/rspec/fixes/rspec/support/differ.rb +29 -0
- data/lib-opal/opal/rspec/fixes/rspec/support/encoded_string.rb +9 -5
- data/lib-opal/opal/rspec/fixes/rspec/support/ruby_features.rb +22 -0
- data/lib-opal/opal/rspec/fixes/rspec/support/source.rb +15 -0
- data/lib-opal/opal/rspec/fixes/rspec/support.rb +3 -3
- data/lib-opal/opal/rspec/fixes/rspec.rb +0 -1
- data/lib-opal/opal/rspec/fixes.rb +1 -0
- data/lib-opal/opal/rspec/formatter/document_io.rb +1 -1
- data/lib-opal/opal/rspec/formatter/html_printer.rb +1 -1
- data/lib-opal/opal/rspec/pre_require_fixes.rb +1 -5
- data/lib-opal/opal/rspec/requires.rb +32 -19
- data/lib-opal/opal/rspec/sprockets_runner.rb.erb +1 -0
- data/lib-opal/opal/rspec.rb +3 -0
- data/opal-rspec.gemspec +1 -1
- data/rspec/upstream/.document +1 -1
- data/rspec/upstream/.github/FUNDING.yml +5 -0
- data/rspec/upstream/.gitignore +1 -0
- data/rspec/upstream/LICENSE.md +27 -0
- data/rspec/upstream/README.md +26 -26
- data/rspec/upstream/Rakefile +1 -1
- data/rspec/upstream/certs/rspec.pem +32 -20
- data/rspec/upstream/certs/samphippen.asc +18 -0
- data/rspec/upstream/code_of_conduct.md +59 -0
- data/rspec/upstream/lib/rspec/version.rb +1 -1
- data/rspec/upstream/rspec.gemspec +7 -2
- data/rspec-core/upstream/.document +1 -1
- data/rspec-core/upstream/.github/FUNDING.yml +5 -0
- data/rspec-core/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-core/upstream/.gitignore +2 -0
- data/rspec-core/upstream/.rspec +1 -0
- data/rspec-core/upstream/.rubocop.yml +64 -12
- data/rspec-core/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-core/upstream/.rubocop_todo.yml +1031 -0
- data/rspec-core/upstream/.yardopts +2 -1
- data/rspec-core/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-core/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-core/upstream/CONTRIBUTING.md +86 -0
- data/rspec-core/upstream/Changelog.md +721 -2
- data/rspec-core/upstream/DEV-README.md +2 -2
- data/rspec-core/upstream/DEVELOPMENT.md +131 -0
- data/rspec-core/upstream/Filtering.md +173 -0
- data/rspec-core/upstream/Gemfile +78 -9
- data/rspec-core/upstream/ISSUE_TEMPLATE.md +24 -0
- data/rspec-core/upstream/{License.txt → LICENSE.md} +6 -5
- data/rspec-core/upstream/README.md +165 -24
- data/rspec-core/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-core/upstream/Rakefile +1 -1
- data/rspec-core/upstream/benchmarks/allocations/1000_groups_1_example.rb +124 -0
- data/rspec-core/upstream/benchmarks/allocations/1_group_1000_examples.rb +63 -0
- data/rspec-core/upstream/benchmarks/allocations/helper.rb +30 -0
- data/rspec-core/upstream/benchmarks/allocations/running_1000_groups_1_example.rb +100 -0
- data/rspec-core/upstream/benchmarks/allocations/running_1_group_1000_examples.rb +60 -0
- data/rspec-core/upstream/benchmarks/capture_block_vs_yield.rb +208 -0
- data/rspec-core/upstream/benchmarks/flat_map_vs_inject.rb +55 -0
- data/rspec-core/upstream/benchmarks/hash_functions.rb +74 -0
- data/rspec-core/upstream/benchmarks/keys_each_vs_each_key.rb +43 -0
- data/rspec-core/upstream/benchmarks/module_inclusion_filtering.rb +89 -0
- data/rspec-core/upstream/benchmarks/precalculate_absolute_file_path_or_not.rb +29 -0
- data/rspec-core/upstream/benchmarks/shuffle_vs_sort_by_for_random_ordering.rb +131 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/helper.rb +122 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks.rb +28 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks_module_inclusions_and_shared_context_inclusions.rb +35 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_module_inclusions.rb +28 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_no_config_hooks_or_inclusions.rb +22 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_shared_context_inclusions.rb +28 -0
- data/rspec-core/upstream/benchmarks/threadsafe_let_block.rb +312 -0
- data/rspec-core/upstream/cucumber.yml +7 -2
- data/rspec-core/upstream/features/.nav +5 -1
- data/rspec-core/upstream/features/README.md +2 -2
- data/rspec-core/upstream/features/clear_examples.feature +106 -0
- data/rspec-core/upstream/features/command_line/bisect.feature +178 -0
- data/rspec-core/upstream/features/command_line/example_matches_name_option.feature +131 -0
- data/rspec-core/upstream/features/command_line/example_name_option.feature +2 -0
- data/rspec-core/upstream/features/command_line/fail_fast.feature +21 -4
- data/rspec-core/upstream/features/command_line/init.feature +2 -2
- data/rspec-core/upstream/features/command_line/line_number_appended_to_path.feature +2 -2
- data/rspec-core/upstream/features/command_line/only_failures.feature +113 -0
- data/rspec-core/upstream/features/command_line/order.md +8 -1
- data/rspec-core/upstream/features/command_line/pattern_option.feature +6 -3
- data/rspec-core/upstream/features/command_line/rake_task.feature +3 -3
- data/rspec-core/upstream/features/command_line/randomization.feature +5 -2
- data/rspec-core/upstream/features/command_line/ruby.feature +6 -2
- data/rspec-core/upstream/features/command_line/tag.feature +13 -11
- data/rspec-core/upstream/features/command_line/warnings_option.feature +20 -3
- data/rspec-core/upstream/features/configuration/backtrace_exclusion_patterns.feature +45 -29
- data/rspec-core/upstream/features/configuration/color.feature +22 -0
- data/rspec-core/upstream/features/configuration/custom_settings.feature +9 -13
- data/rspec-core/upstream/features/configuration/default_path.feature +1 -1
- data/rspec-core/upstream/features/configuration/enable_global_dsl.feature +15 -1
- data/rspec-core/upstream/features/configuration/error_exit_code.feature +52 -0
- data/rspec-core/upstream/features/configuration/fail_fast.feature +42 -12
- data/rspec-core/upstream/features/configuration/fail_if_no_examples.feature +31 -0
- data/rspec-core/upstream/features/configuration/failure_exit_code.feature +26 -0
- data/rspec-core/upstream/features/configuration/overriding_global_ordering.feature +1 -1
- data/rspec-core/upstream/features/configuration/pattern.feature +1 -1
- data/rspec-core/upstream/features/configuration/profile.feature +25 -0
- data/rspec-core/upstream/features/configuration/read_options_from_file.feature +25 -19
- data/rspec-core/upstream/features/configuration/run_all_when_everything_filtered.feature +4 -0
- data/rspec-core/upstream/features/core_standalone.feature +2 -0
- data/rspec-core/upstream/features/example_groups/basic_structure.feature +1 -0
- data/rspec-core/upstream/features/example_groups/shared_context.feature +55 -5
- data/rspec-core/upstream/features/example_groups/shared_examples.feature +59 -15
- data/rspec-core/upstream/features/expectation_framework_integration/aggregating_failures.feature +602 -0
- data/rspec-core/upstream/features/expectation_framework_integration/configure_expectation_framework.feature +13 -5
- data/rspec-core/upstream/features/filtering/filter_run_when_matching.feature +75 -0
- data/rspec-core/upstream/features/formatters/configurable_colors.feature +23 -4
- data/rspec-core/upstream/features/helper_methods/let.feature +3 -0
- data/rspec-core/upstream/features/helper_methods/modules.feature +6 -0
- data/rspec-core/upstream/features/hooks/around_hooks.feature +36 -6
- data/rspec-core/upstream/features/hooks/before_and_after_hooks.feature +47 -5
- data/rspec-core/upstream/features/hooks/filtering.feature +199 -4
- data/rspec-core/upstream/features/hooks/when_first_matching_example_defined.feature +70 -0
- data/rspec-core/upstream/features/metadata/current_scope.feature +87 -0
- data/rspec-core/upstream/features/metadata/described_class.feature +12 -5
- data/rspec-core/upstream/features/metadata/user_defined.feature +3 -3
- data/rspec-core/upstream/features/mock_framework_integration/use_any_framework.feature +1 -1
- data/rspec-core/upstream/features/mock_framework_integration/use_flexmock.feature +5 -5
- data/rspec-core/upstream/features/mock_framework_integration/use_mocha.feature +5 -5
- data/rspec-core/upstream/features/mock_framework_integration/use_rr.feature +5 -5
- data/rspec-core/upstream/features/mock_framework_integration/use_rspec.feature +6 -6
- data/rspec-core/upstream/features/pending_and_skipped_examples/pending_examples.feature +8 -7
- data/rspec-core/upstream/features/pending_and_skipped_examples/skipped_examples.feature +49 -22
- data/rspec-core/upstream/features/step_definitions/additional_cli_steps.rb +142 -12
- data/rspec-core/upstream/features/step_definitions/core_standalone_steps.rb +6 -2
- data/rspec-core/upstream/features/subject/implicit_subject.feature +3 -2
- data/rspec-core/upstream/features/subject/one_liner_syntax.feature +9 -5
- data/rspec-core/upstream/features/support/diff_lcs_versions.rb +17 -0
- data/rspec-core/upstream/features/support/env.rb +20 -7
- data/rspec-core/upstream/features/support/jruby.rb +8 -0
- data/rspec-core/upstream/features/support/require_expect_syntax_in_aruba_specs.rb +6 -3
- data/rspec-core/upstream/features/support/rubinius.rb +5 -1
- data/rspec-core/upstream/features/support/ruby_27_support.rb +7 -0
- data/rspec-core/upstream/features/support/send_sigint_during_bisect.rb +21 -0
- data/rspec-core/upstream/lib/rspec/autorun.rb +1 -0
- data/rspec-core/upstream/lib/rspec/core/backtrace_formatter.rb +3 -4
- data/rspec-core/upstream/lib/rspec/core/bisect/coordinator.rb +62 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/example_minimizer.rb +173 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/fork_runner.rb +138 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/server.rb +61 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/shell_command.rb +126 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/shell_runner.rb +73 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/utilities.rb +69 -0
- data/rspec-core/upstream/lib/rspec/core/configuration.rb +1157 -212
- data/rspec-core/upstream/lib/rspec/core/configuration_options.rb +82 -22
- data/rspec-core/upstream/lib/rspec/core/did_you_mean.rb +46 -0
- data/rspec-core/upstream/lib/rspec/core/drb.rb +10 -1
- data/rspec-core/upstream/lib/rspec/core/dsl.rb +10 -5
- data/rspec-core/upstream/lib/rspec/core/example.rb +271 -107
- data/rspec-core/upstream/lib/rspec/core/example_group.rb +426 -127
- data/rspec-core/upstream/lib/rspec/core/example_status_persister.rb +235 -0
- data/rspec-core/upstream/lib/rspec/core/filter_manager.rb +76 -104
- data/rspec-core/upstream/lib/rspec/core/flat_map.rb +6 -4
- data/rspec-core/upstream/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/base_formatter.rb +7 -4
- data/rspec-core/upstream/lib/rspec/core/formatters/base_text_formatter.rb +15 -16
- data/rspec-core/upstream/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/console_codes.rb +28 -16
- data/rspec-core/upstream/lib/rspec/core/formatters/deprecation_formatter.rb +14 -13
- data/rspec-core/upstream/lib/rspec/core/formatters/documentation_formatter.rb +47 -13
- data/rspec-core/upstream/lib/rspec/core/formatters/exception_presenter.rb +525 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/helpers.rb +40 -9
- data/rspec-core/upstream/lib/rspec/core/formatters/html_formatter.rb +20 -16
- data/rspec-core/upstream/lib/rspec/core/formatters/html_printer.rb +27 -18
- data/rspec-core/upstream/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/json_formatter.rb +15 -7
- data/rspec-core/upstream/lib/rspec/core/formatters/profile_formatter.rb +10 -7
- data/rspec-core/upstream/lib/rspec/core/formatters/progress_formatter.rb +1 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/protocol.rb +62 -43
- data/rspec-core/upstream/lib/rspec/core/formatters/snippet_extractor.rb +115 -85
- data/rspec-core/upstream/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
- data/rspec-core/upstream/lib/rspec/core/formatters.rb +71 -32
- data/rspec-core/upstream/lib/rspec/core/hooks.rb +303 -248
- data/rspec-core/upstream/lib/rspec/core/invocations.rb +87 -0
- data/rspec-core/upstream/lib/rspec/core/memoized_helpers.rb +155 -47
- data/rspec-core/upstream/lib/rspec/core/metadata.rb +102 -41
- data/rspec-core/upstream/lib/rspec/core/metadata_filter.rb +209 -49
- data/rspec-core/upstream/lib/rspec/core/minitest_assertions_adapter.rb +5 -2
- data/rspec-core/upstream/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
- data/rspec-core/upstream/lib/rspec/core/mocking_adapters/mocha.rb +8 -8
- data/rspec-core/upstream/lib/rspec/core/notifications.rb +180 -201
- data/rspec-core/upstream/lib/rspec/core/option_parser.rb +159 -58
- data/rspec-core/upstream/lib/rspec/core/ordering.rb +40 -26
- data/rspec-core/upstream/lib/rspec/core/output_wrapper.rb +29 -0
- data/rspec-core/upstream/lib/rspec/core/pending.rb +19 -25
- data/rspec-core/upstream/lib/rspec/core/profiler.rb +34 -0
- data/rspec-core/upstream/lib/rspec/core/project_initializer/.rspec +0 -1
- data/rspec-core/upstream/lib/rspec/core/project_initializer/spec/spec_helper.rb +31 -22
- data/rspec-core/upstream/lib/rspec/core/project_initializer.rb +1 -1
- data/rspec-core/upstream/lib/rspec/core/rake_task.rb +73 -72
- data/rspec-core/upstream/lib/rspec/core/reporter.rb +134 -18
- data/rspec-core/upstream/lib/rspec/core/ruby_project.rb +13 -5
- data/rspec-core/upstream/lib/rspec/core/runner.rb +99 -45
- data/rspec-core/upstream/lib/rspec/core/sandbox.rb +37 -0
- data/rspec-core/upstream/lib/rspec/core/set.rb +54 -0
- data/rspec-core/upstream/lib/rspec/core/shared_example_group.rb +126 -37
- data/rspec-core/upstream/lib/rspec/core/shell_escape.rb +49 -0
- data/rspec-core/upstream/lib/rspec/core/test_unit_assertions_adapter.rb +3 -3
- data/rspec-core/upstream/lib/rspec/core/version.rb +1 -1
- data/rspec-core/upstream/lib/rspec/core/warnings.rb +2 -2
- data/rspec-core/upstream/lib/rspec/core/world.rb +164 -60
- data/rspec-core/upstream/lib/rspec/core.rb +64 -21
- data/rspec-core/upstream/maintenance-branch +1 -1
- data/rspec-core/upstream/rspec-core.gemspec +16 -11
- data/rspec-core/upstream/script/ci_functions.sh +73 -0
- data/rspec-core/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-core/upstream/script/cucumber.sh +8 -0
- data/rspec-core/upstream/script/custom_build_functions.sh +22 -0
- data/rspec-core/upstream/script/functions.sh +125 -89
- data/rspec-core/upstream/script/legacy_setup.sh +20 -0
- data/rspec-core/upstream/script/predicate_functions.sh +162 -0
- data/rspec-core/upstream/script/rspec_with_simplecov +6 -6
- data/rspec-core/upstream/script/run_build +14 -9
- data/rspec-core/upstream/script/run_rubocop +14 -0
- data/rspec-core/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/rspec-expectations/upstream/.document +1 -1
- data/rspec-expectations/upstream/.github/FUNDING.yml +5 -0
- data/rspec-expectations/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-expectations/upstream/.gitignore +2 -0
- data/rspec-expectations/upstream/.rubocop.yml +126 -2
- data/rspec-expectations/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-expectations/upstream/.rubocop_todo.yml +335 -0
- data/rspec-expectations/upstream/.yardopts +1 -1
- data/rspec-expectations/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-expectations/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-expectations/upstream/CONTRIBUTING.md +86 -0
- data/rspec-expectations/upstream/Changelog.md +454 -4
- data/rspec-expectations/upstream/DEV-README.md +3 -3
- data/rspec-expectations/upstream/DEVELOPMENT.md +131 -0
- data/rspec-expectations/upstream/Gemfile +77 -9
- data/rspec-expectations/upstream/ISSUE_TEMPLATE.md +24 -0
- data/{rspec-mocks/upstream/License.txt → rspec-expectations/upstream/LICENSE.md} +5 -4
- data/rspec-expectations/upstream/README.md +73 -31
- data/rspec-expectations/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-expectations/upstream/Rakefile +13 -10
- data/rspec-expectations/upstream/Should.md +13 -5
- data/rspec-expectations/upstream/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +1 -2
- data/rspec-expectations/upstream/benchmarks/caller_vs_raise_for_backtrace.rb +77 -0
- data/rspec-expectations/upstream/benchmarks/count_vs_select_size.rb +68 -0
- data/rspec-expectations/upstream/benchmarks/default_messages_as_methods_v_blocks.rb +1 -1
- data/rspec-expectations/upstream/benchmarks/gsub_vs_tr_single_character.rb +28 -0
- data/rspec-expectations/upstream/benchmarks/include_matcher.rb +249 -0
- data/rspec-expectations/upstream/benchmarks/include_v_superclass.rb +0 -1
- data/rspec-expectations/upstream/benchmarks/match_array/failing_with_duplicate_items.rb +1 -1
- data/rspec-expectations/upstream/benchmarks/output_stringio_vs_tempfile.rb +31 -0
- data/rspec-expectations/upstream/benchmarks/set_vs_array_include.rb +1 -3
- data/rspec-expectations/upstream/cucumber.yml +9 -4
- data/rspec-expectations/upstream/features/.nav +1 -0
- data/rspec-expectations/upstream/features/aggregating_failures.feature +56 -0
- data/rspec-expectations/upstream/features/built_in_matchers/README.md +3 -3
- data/rspec-expectations/upstream/features/built_in_matchers/all.feature +3 -2
- data/rspec-expectations/upstream/features/built_in_matchers/be_within.feature +1 -1
- data/rspec-expectations/upstream/features/built_in_matchers/change.feature +8 -6
- data/rspec-expectations/upstream/features/built_in_matchers/comparisons.feature +33 -1
- data/rspec-expectations/upstream/features/built_in_matchers/contain_exactly.feature +1 -0
- data/rspec-expectations/upstream/features/built_in_matchers/cover.feature +3 -3
- data/rspec-expectations/upstream/features/built_in_matchers/exist.feature +1 -1
- data/rspec-expectations/upstream/features/built_in_matchers/have_attributes.feature +1 -2
- data/rspec-expectations/upstream/features/built_in_matchers/include.feature +74 -17
- data/rspec-expectations/upstream/features/built_in_matchers/match.feature +2 -2
- data/rspec-expectations/upstream/features/built_in_matchers/output.feature +67 -4
- data/rspec-expectations/upstream/features/built_in_matchers/predicates.feature +56 -19
- data/rspec-expectations/upstream/features/built_in_matchers/raise_error.feature +16 -2
- data/rspec-expectations/upstream/features/built_in_matchers/respond_to.feature +191 -3
- data/rspec-expectations/upstream/features/built_in_matchers/satisfy.feature +17 -8
- data/rspec-expectations/upstream/features/built_in_matchers/throw_symbol.feature +1 -1
- data/rspec-expectations/upstream/features/built_in_matchers/types.feature +34 -34
- data/rspec-expectations/upstream/features/built_in_matchers/yield.feature +2 -2
- data/rspec-expectations/upstream/features/composing_matchers.feature +4 -4
- data/rspec-expectations/upstream/features/custom_matchers/define_block_matcher.feature +78 -0
- data/rspec-expectations/upstream/features/custom_matchers/define_diffable_matcher.feature +115 -3
- data/rspec-expectations/upstream/features/custom_matchers/define_matcher.feature +173 -21
- data/rspec-expectations/upstream/features/custom_matchers/define_matcher_with_fluent_interface.feature +21 -2
- data/rspec-expectations/upstream/features/define_negated_matcher.feature +2 -1
- data/rspec-expectations/upstream/features/diffing.feature +29 -1
- data/rspec-expectations/upstream/features/implicit_docstrings.feature +8 -8
- data/rspec-expectations/upstream/features/step_definitions/additional_cli_steps.rb +11 -7
- data/rspec-expectations/upstream/features/support/diff_lcs_versions.rb +25 -0
- data/rspec-expectations/upstream/features/support/disallow_certain_apis.rb +3 -3
- data/rspec-expectations/upstream/features/support/env.rb +11 -11
- data/rspec-expectations/upstream/features/support/rubinius.rb +1 -1
- data/rspec-expectations/upstream/features/support/ruby_features.rb +39 -0
- data/rspec-expectations/upstream/features/syntax_configuration.feature +9 -9
- data/rspec-expectations/upstream/features/test_frameworks/minitest.feature +69 -2
- data/rspec-expectations/upstream/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
- data/rspec-expectations/upstream/lib/rspec/expectations/configuration.rb +84 -1
- data/rspec-expectations/upstream/lib/rspec/expectations/expectation_target.rb +82 -38
- data/rspec-expectations/upstream/lib/rspec/expectations/fail_with.rb +11 -6
- data/rspec-expectations/upstream/lib/rspec/expectations/failure_aggregator.rb +212 -0
- data/rspec-expectations/upstream/lib/rspec/expectations/handler.rb +27 -12
- data/rspec-expectations/upstream/lib/rspec/expectations/minitest_integration.rb +43 -2
- data/rspec-expectations/upstream/lib/rspec/expectations/syntax.rb +5 -5
- data/rspec-expectations/upstream/lib/rspec/expectations/version.rb +1 -1
- data/rspec-expectations/upstream/lib/rspec/expectations.rb +15 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/all.rb +1 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/base_matcher.rb +77 -11
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be.rb +28 -114
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_between.rb +1 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_instance_of.rb +5 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_kind_of.rb +5 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_within.rb +4 -4
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/change.rb +168 -55
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/compound.rb +61 -29
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/contain_exactly.rb +73 -12
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/count_expectation.rb +169 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eq.rb +3 -38
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eql.rb +2 -2
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/equal.rb +3 -3
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/exist.rb +7 -3
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/has.rb +90 -24
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/have_attributes.rb +37 -7
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/include.rb +124 -23
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/match.rb +79 -2
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/operators.rb +14 -5
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/output.rb +56 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/raise_error.rb +126 -29
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/respond_to.rb +118 -9
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/satisfy.rb +28 -7
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/{start_and_end_with.rb → start_or_end_with.rb} +20 -8
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/throw_symbol.rb +11 -5
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/yield.rb +110 -155
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in.rb +4 -3
- data/rspec-expectations/upstream/lib/rspec/matchers/composable.rb +23 -35
- data/rspec-expectations/upstream/lib/rspec/matchers/dsl.rb +179 -26
- data/rspec-expectations/upstream/lib/rspec/matchers/english_phrasing.rb +58 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/fail_matchers.rb +42 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/generated_descriptions.rb +1 -2
- data/rspec-expectations/upstream/lib/rspec/matchers/matcher_delegator.rb +2 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/matcher_protocol.rb +72 -66
- data/rspec-expectations/upstream/lib/rspec/matchers.rb +227 -150
- data/rspec-expectations/upstream/maintenance-branch +1 -1
- data/rspec-expectations/upstream/rspec-expectations.gemspec +13 -8
- data/rspec-expectations/upstream/script/ci_functions.sh +73 -0
- data/rspec-expectations/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-expectations/upstream/script/cucumber.sh +8 -0
- data/rspec-expectations/upstream/script/functions.sh +125 -89
- data/rspec-expectations/upstream/script/legacy_setup.sh +20 -0
- data/rspec-expectations/upstream/script/predicate_functions.sh +162 -0
- data/rspec-expectations/upstream/script/run_build +14 -9
- data/rspec-expectations/upstream/script/run_rubocop +14 -0
- data/rspec-expectations/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/rspec-mocks/upstream/.document +1 -1
- data/rspec-mocks/upstream/.github/FUNDING.yml +5 -0
- data/rspec-mocks/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-mocks/upstream/.gitignore +2 -0
- data/rspec-mocks/upstream/.rubocop.yml +28 -9
- data/rspec-mocks/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-mocks/upstream/.rubocop_todo.yml +573 -0
- data/rspec-mocks/upstream/.yardopts +1 -1
- data/rspec-mocks/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-mocks/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-mocks/upstream/CONTRIBUTING.md +86 -0
- data/rspec-mocks/upstream/Changelog.md +398 -3
- data/rspec-mocks/upstream/DEV-README.md +3 -3
- data/rspec-mocks/upstream/DEVELOPMENT.md +131 -0
- data/rspec-mocks/upstream/Gemfile +77 -10
- data/rspec-mocks/upstream/ISSUE_TEMPLATE.md +24 -0
- data/{rspec-expectations/upstream/License.txt → rspec-mocks/upstream/LICENSE.md} +5 -4
- data/rspec-mocks/upstream/README.md +83 -17
- data/rspec-mocks/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-mocks/upstream/Rakefile +3 -3
- data/rspec-mocks/upstream/benchmarks/accessing_configuration_via_method_vs_cache.rb +52 -0
- data/rspec-mocks/upstream/benchmarks/allocations/1_object_1000_mocks.rb +76 -0
- data/rspec-mocks/upstream/benchmarks/allocations/helper.rb +17 -0
- data/rspec-mocks/upstream/benchmarks/each_value_v_values_each.rb +4 -5
- data/rspec-mocks/upstream/benchmarks/find_original_method_early.rb +1 -1
- data/rspec-mocks/upstream/benchmarks/method_defined_at_any_visibility.rb +3 -3
- data/rspec-mocks/upstream/benchmarks/thread_safety.rb +1 -1
- data/rspec-mocks/upstream/benchmarks/transfer_nested_constants.rb +1 -1
- data/rspec-mocks/upstream/cucumber.yml +8 -1
- data/rspec-mocks/upstream/features/.nav +2 -0
- data/rspec-mocks/upstream/features/basics/allowing_messages.feature +1 -1
- data/rspec-mocks/upstream/features/basics/expecting_messages.feature +40 -1
- data/rspec-mocks/upstream/features/basics/null_object_doubles.feature +1 -1
- data/rspec-mocks/upstream/features/basics/partial_test_doubles.feature +1 -1
- data/rspec-mocks/upstream/features/basics/scope.feature +5 -5
- data/rspec-mocks/upstream/features/basics/spies.feature +17 -30
- data/rspec-mocks/upstream/features/basics/test_doubles.feature +4 -4
- data/rspec-mocks/upstream/features/configuring_responses/README.md +2 -0
- data/rspec-mocks/upstream/features/configuring_responses/calling_the_original_implementation.feature +2 -2
- data/rspec-mocks/upstream/features/configuring_responses/mixed_responses.feature +25 -0
- data/rspec-mocks/upstream/features/configuring_responses/raising_an_error.feature +1 -0
- data/rspec-mocks/upstream/features/configuring_responses/wrapping_the_original_implementation.feature +3 -3
- data/rspec-mocks/upstream/features/configuring_responses/yielding.feature +2 -2
- data/rspec-mocks/upstream/features/mutating_constants/README.md +1 -1
- data/rspec-mocks/upstream/features/old_syntax/any_instance.feature +3 -3
- data/rspec-mocks/upstream/features/old_syntax/should_receive.feature +3 -1
- data/rspec-mocks/upstream/features/outside_rspec/any_test_framework.feature +116 -0
- data/rspec-mocks/upstream/features/outside_rspec/minitest.feature +202 -46
- data/rspec-mocks/upstream/features/outside_rspec/standalone.feature +5 -5
- data/rspec-mocks/upstream/features/setting_constraints/matching_arguments.feature +54 -27
- data/rspec-mocks/upstream/features/setting_constraints/message_order.feature +2 -2
- data/rspec-mocks/upstream/features/setting_constraints/receive_counts.feature +18 -0
- data/rspec-mocks/upstream/features/step_definitions/additional_cli_steps.rb +4 -4
- data/rspec-mocks/upstream/features/support/disallow_certain_apis.rb +3 -2
- data/rspec-mocks/upstream/features/support/env.rb +12 -12
- data/rspec-mocks/upstream/features/support/rubinius.rb +1 -1
- data/rspec-mocks/upstream/features/verifying_doubles/README.md +2 -2
- data/rspec-mocks/upstream/features/verifying_doubles/class_doubles.feature +1 -1
- data/rspec-mocks/upstream/features/verifying_doubles/dynamic_classes.feature +41 -5
- data/rspec-mocks/upstream/features/verifying_doubles/instance_doubles.feature +5 -3
- data/rspec-mocks/upstream/features/working_with_legacy_code/any_instance.feature +8 -6
- data/rspec-mocks/upstream/features/working_with_legacy_code/message_chains.feature +16 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/chain.rb +3 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expect_chain_chain.rb +1 -5
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expectation_chain.rb +7 -5
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/message_chains.rb +1 -3
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/recorder.rb +42 -14
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain.rb +13 -7
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain_chain.rb +1 -5
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance.rb +1 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/argument_list_matcher.rb +53 -10
- data/rspec-mocks/upstream/lib/rspec/mocks/argument_matchers.rb +66 -26
- data/rspec-mocks/upstream/lib/rspec/mocks/configuration.rb +59 -4
- data/rspec-mocks/upstream/lib/rspec/mocks/error_generator.rb +235 -108
- data/rspec-mocks/upstream/lib/rspec/mocks/example_methods.rb +82 -27
- data/rspec-mocks/upstream/lib/rspec/mocks/instance_method_stasher.rb +12 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/have_received.rb +30 -17
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive.rb +28 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_message_chain.rb +17 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_messages.rb +6 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/message_chain.rb +0 -4
- data/rspec-mocks/upstream/lib/rspec/mocks/message_expectation.rb +430 -304
- data/rspec-mocks/upstream/lib/rspec/mocks/method_double.rb +46 -15
- data/rspec-mocks/upstream/lib/rspec/mocks/method_reference.rb +78 -19
- data/rspec-mocks/upstream/lib/rspec/mocks/minitest_integration.rb +68 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/mutate_const.rb +23 -8
- data/rspec-mocks/upstream/lib/rspec/mocks/object_reference.rb +81 -23
- data/rspec-mocks/upstream/lib/rspec/mocks/proxy.rb +135 -41
- data/rspec-mocks/upstream/lib/rspec/mocks/space.rb +33 -16
- data/rspec-mocks/upstream/lib/rspec/mocks/standalone.rb +1 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/syntax.rb +18 -22
- data/rspec-mocks/upstream/lib/rspec/mocks/targets.rb +51 -24
- data/rspec-mocks/upstream/lib/rspec/mocks/test_double.rb +42 -6
- data/rspec-mocks/upstream/lib/rspec/mocks/verifying_double.rb +15 -21
- data/rspec-mocks/upstream/lib/rspec/mocks/{verifying_message_expecation.rb → verifying_message_expectation.rb} +11 -18
- data/rspec-mocks/upstream/lib/rspec/mocks/verifying_proxy.rb +60 -11
- data/rspec-mocks/upstream/lib/rspec/mocks/version.rb +1 -1
- data/rspec-mocks/upstream/lib/rspec/mocks.rb +8 -1
- data/rspec-mocks/upstream/maintenance-branch +1 -1
- data/rspec-mocks/upstream/rspec-mocks.gemspec +14 -6
- data/rspec-mocks/upstream/script/ci_functions.sh +73 -0
- data/rspec-mocks/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-mocks/upstream/script/cucumber.sh +8 -0
- data/rspec-mocks/upstream/script/functions.sh +125 -89
- data/rspec-mocks/upstream/script/legacy_setup.sh +20 -0
- data/rspec-mocks/upstream/script/predicate_functions.sh +162 -0
- data/rspec-mocks/upstream/script/run_build +14 -9
- data/rspec-mocks/upstream/script/run_rubocop +14 -0
- data/rspec-mocks/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/{stubs/diff/lcs/assertions.rb → rspec-mocks/upstream/tmp/.gitkeep} +0 -0
- data/rspec-support/upstream/.github/FUNDING.yml +5 -0
- data/rspec-support/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-support/upstream/.gitignore +4 -0
- data/rspec-support/upstream/.rubocop.yml +33 -1
- data/rspec-support/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-support/upstream/.rubocop_todo.yml +424 -0
- data/rspec-support/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-support/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-support/upstream/CONTRIBUTING.md +86 -0
- data/rspec-support/upstream/Changelog.md +287 -0
- data/rspec-support/upstream/DEVELOPMENT.md +131 -0
- data/rspec-support/upstream/Gemfile +52 -4
- data/rspec-support/upstream/ISSUE_TEMPLATE.md +24 -0
- data/rspec-support/upstream/{LICENSE.txt → LICENSE.md} +3 -2
- data/rspec-support/upstream/README.md +29 -6
- data/rspec-support/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-support/upstream/Rakefile +9 -5
- data/rspec-support/upstream/benchmarks/caller_vs_caller_locations.rb +19 -0
- data/rspec-support/upstream/benchmarks/caller_vs_caller_locations_vs_raise.rb +153 -0
- data/rspec-support/upstream/benchmarks/class_exec_vs_klass_exec.rb +43 -0
- data/rspec-support/upstream/benchmarks/map_hash.rb +70 -0
- data/rspec-support/upstream/benchmarks/ripper.rb +44 -0
- data/rspec-support/upstream/benchmarks/skip_frames_for_caller_filter.rb +27 -0
- data/rspec-support/upstream/lib/rspec/support/caller_filter.rb +35 -15
- data/rspec-support/upstream/lib/rspec/support/comparable_version.rb +46 -0
- data/rspec-support/upstream/lib/rspec/support/differ.rb +35 -34
- data/rspec-support/upstream/lib/rspec/support/directory_maker.rb +3 -1
- data/rspec-support/upstream/lib/rspec/support/encoded_string.rb +103 -11
- data/rspec-support/upstream/lib/rspec/support/fuzzy_matcher.rb +5 -5
- data/rspec-support/upstream/lib/rspec/support/matcher_definition.rb +11 -0
- data/rspec-support/upstream/lib/rspec/support/method_signature_verifier.rb +192 -26
- data/rspec-support/upstream/lib/rspec/support/mutex.rb +73 -0
- data/rspec-support/upstream/lib/rspec/support/object_formatter.rb +275 -0
- data/rspec-support/upstream/lib/rspec/support/recursive_const_methods.rb +1 -1
- data/rspec-support/upstream/lib/rspec/support/reentrant_mutex.rb +78 -0
- data/rspec-support/upstream/lib/rspec/support/ruby_features.rb +168 -15
- data/rspec-support/upstream/lib/rspec/support/source/location.rb +21 -0
- data/rspec-support/upstream/lib/rspec/support/source/node.rb +110 -0
- data/rspec-support/upstream/lib/rspec/support/source/token.rb +94 -0
- data/rspec-support/upstream/lib/rspec/support/source.rb +85 -0
- data/rspec-support/upstream/lib/rspec/support/spec/deprecation_helpers.rb +17 -29
- data/rspec-support/upstream/lib/rspec/support/spec/diff_helpers.rb +31 -0
- data/rspec-support/upstream/lib/rspec/support/spec/in_sub_process.rb +41 -17
- data/rspec-support/upstream/lib/rspec/support/spec/library_wide_checks.rb +150 -0
- data/rspec-support/upstream/lib/rspec/support/spec/shell_out.rb +39 -3
- data/rspec-support/upstream/lib/rspec/support/spec/stderr_splitter.rb +27 -4
- data/rspec-support/upstream/lib/rspec/support/spec/string_matcher.rb +45 -0
- data/rspec-support/upstream/lib/rspec/support/spec/with_isolated_directory.rb +5 -1
- data/rspec-support/upstream/lib/rspec/support/spec.rb +17 -7
- data/rspec-support/upstream/lib/rspec/support/version.rb +1 -1
- data/rspec-support/upstream/lib/rspec/support/warnings.rb +3 -3
- data/rspec-support/upstream/lib/rspec/support/with_keywords_when_needed.rb +33 -0
- data/rspec-support/upstream/lib/rspec/support.rb +81 -3
- data/rspec-support/upstream/maintenance-branch +1 -1
- data/rspec-support/upstream/rspec-support.gemspec +10 -4
- data/rspec-support/upstream/script/ci_functions.sh +73 -0
- data/rspec-support/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-support/upstream/script/cucumber.sh +8 -0
- data/rspec-support/upstream/script/functions.sh +125 -89
- data/rspec-support/upstream/script/legacy_setup.sh +20 -0
- data/rspec-support/upstream/script/predicate_functions.sh +162 -0
- data/rspec-support/upstream/script/run_build +14 -9
- data/rspec-support/upstream/script/run_rubocop +14 -0
- data/rspec-support/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/stubs/{diff/lcs/block.rb → coderay.rb} +0 -0
- data/stubs/{diff/lcs/callbacks.rb → drb/acl.rb} +0 -0
- data/stubs/{diff/lcs/change.rb → erb/version.rb} +0 -0
- data/stubs/{diff/lcs/hunk.rb → open3.rb} +0 -0
- data/stubs/{diff/lcs/internals.rb → psych.rb} +0 -0
- data/stubs/{optparse.rb → ripper.rb} +0 -0
- data/stubs/{prettyprint.rb → thread_order.rb} +0 -0
- data/tasks/testing.rake +7 -3
- metadata +270 -61
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/opal_0.11.gemfile +0 -14
- data/gemfiles/opal_master.gemfile +0 -14
- data/lib-opal/opal/rspec/async/core_ext.rb +0 -23
- data/lib-opal/opal/rspec/async/legacy.rb +0 -49
- data/lib-opal/opal/rspec/fixes/rspec/caller_filter.rb +0 -6
- data/lib-opal/opal/rspec/fixes/rspec/core/example.rb +0 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/backtrace_formatter.rb +0 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/console_codes.rb +0 -11
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/generated_deprecation_message.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/json_formatter.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications/failed_example_notification.rb +0 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications/summary_notification.rb +0 -21
- data/lib-opal/opal/rspec/fixes/rspec/core/warnings.rb +0 -27
- data/lib-opal/opal/rspec/fixes/rspec/expectations/fail_with.rb +0 -21
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/all.rb +0 -10
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/compound.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/yield.rb +0 -21
- data/lib-opal/opal/rspec/fixes/rspec/matchers/pretty.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/mocks/space.rb +0 -41
- data/lib-opal/opal/rspec/fixes/rspec/mocks/test_double.rb +0 -39
- data/lib-opal/opal/rspec/fixes/rspec/mocks/verifying_double.rb +0 -29
- data/lib-opal/opal/rspec/fixes/rspec/support/recursive_const_methods.rb +0 -7
- data/lib-opal/opal/rspec/fixes/rspec/support/spec/stderr_splitter.rb +0 -13
- data/lib-opal/opal/rspec/fixes/rspec/support/spec.rb +0 -1
- data/lib-opal/opal/rspec/fixes/rspec/support/warnings.rb +0 -16
- data/rspec/upstream/License.txt +0 -24
- data/rspec-core/upstream/.travis.yml +0 -35
- data/rspec-core/upstream/benchmarks/sort_by_v_shuffle.rb +0 -83
- data/rspec-core/upstream/features/Upgrade.md +0 -352
- data/rspec-core/upstream/lib/rspec/core/backport_random.rb +0 -336
- data/rspec-expectations/upstream/.travis.yml +0 -35
- data/rspec-expectations/upstream/lib/rspec/matchers/pretty.rb +0 -77
- data/rspec-mocks/upstream/.travis.yml +0 -35
- data/rspec-support/upstream/.travis.yml +0 -35
- data/rspec-support/upstream/lib/rspec/support/os.rb +0 -18
- data/rspec-support/upstream/lib/rspec/support/spec/prevent_load_time_warnings.rb +0 -44
- data/rspec-support/upstream/lib/rspec/support/version_checker.rb +0 -53
- data/stubs/shellwords.rb +0 -0
- data/stubs/uri.rb +0 -0
- data/vendor/spec_runner.js +0 -64
|
@@ -7,7 +7,7 @@ module RSpec
|
|
|
7
7
|
# In addition to metadata that is used internally, this also stores
|
|
8
8
|
# user-supplied metadata, e.g.
|
|
9
9
|
#
|
|
10
|
-
# describe Something, :type => :ui do
|
|
10
|
+
# RSpec.describe Something, :type => :ui do
|
|
11
11
|
# it "does something", :slow => true do
|
|
12
12
|
# # ...
|
|
13
13
|
# end
|
|
@@ -25,28 +25,51 @@ module RSpec
|
|
|
25
25
|
# @see Configuration#filter_run_including
|
|
26
26
|
# @see Configuration#filter_run_excluding
|
|
27
27
|
module Metadata
|
|
28
|
+
# Matches strings either at the beginning of the input or prefixed with a
|
|
29
|
+
# whitespace, containing the current path, either postfixed with the
|
|
30
|
+
# separator, or at the end of the string. Match groups are the character
|
|
31
|
+
# before and the character after the string if any.
|
|
32
|
+
#
|
|
33
|
+
# http://rubular.com/r/fT0gmX6VJX
|
|
34
|
+
# http://rubular.com/r/duOrD4i3wb
|
|
35
|
+
# http://rubular.com/r/sbAMHFrOx1
|
|
36
|
+
def self.relative_path_regex
|
|
37
|
+
@relative_path_regex ||= /(\A|\s)#{File.expand_path('.')}(#{File::SEPARATOR}|\s|\Z)/
|
|
38
|
+
end
|
|
39
|
+
|
|
28
40
|
# @api private
|
|
29
41
|
#
|
|
30
42
|
# @param line [String] current code line
|
|
31
43
|
# @return [String] relative path to line
|
|
32
44
|
def self.relative_path(line)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
# http://rubular.com/r/fT0gmX6VJX
|
|
38
|
-
# http://rubular.com/r/duOrD4i3wb
|
|
39
|
-
# http://rubular.com/r/sbAMHFrOx1
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
regex = /(\A|\s)#{File.expand_path('.')}(#{File::SEPARATOR}|\s|\Z)/
|
|
43
|
-
|
|
44
|
-
line = line.sub(regex, "\\1.\\2")
|
|
45
|
-
line = line.sub(/\A([^:]+:\d+)$/, '\\1')
|
|
46
|
-
return nil if line == '-e:1'
|
|
45
|
+
line = line.sub(relative_path_regex, "\\1.\\2".freeze)
|
|
46
|
+
line = line.sub(/\A([^:]+:\d+)$/, '\\1'.freeze)
|
|
47
|
+
return nil if line == '-e:1'.freeze
|
|
47
48
|
line
|
|
48
49
|
rescue SecurityError
|
|
50
|
+
# :nocov:
|
|
49
51
|
nil
|
|
52
|
+
# :nocov:
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @private
|
|
56
|
+
# Iteratively walks up from the given metadata through all
|
|
57
|
+
# example group ancestors, yielding each metadata hash along the way.
|
|
58
|
+
def self.ascending(metadata)
|
|
59
|
+
yield metadata
|
|
60
|
+
return unless (group_metadata = metadata.fetch(:example_group) { metadata[:parent_example_group] })
|
|
61
|
+
|
|
62
|
+
loop do
|
|
63
|
+
yield group_metadata
|
|
64
|
+
break unless (group_metadata = group_metadata[:parent_example_group])
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @private
|
|
69
|
+
# Returns an enumerator that iteratively walks up the given metadata through all
|
|
70
|
+
# example group ancestors, yielding each metadata hash along the way.
|
|
71
|
+
def self.ascend(metadata)
|
|
72
|
+
enum_for(:ascending, metadata)
|
|
50
73
|
end
|
|
51
74
|
|
|
52
75
|
# @private
|
|
@@ -68,9 +91,24 @@ module RSpec
|
|
|
68
91
|
end
|
|
69
92
|
|
|
70
93
|
# @private
|
|
71
|
-
def self.
|
|
72
|
-
return
|
|
73
|
-
|
|
94
|
+
def self.deep_hash_dup(object)
|
|
95
|
+
return object.dup if Array === object
|
|
96
|
+
return object unless Hash === object
|
|
97
|
+
|
|
98
|
+
object.inject(object.dup) do |duplicate, (key, value)|
|
|
99
|
+
duplicate[key] = deep_hash_dup(value)
|
|
100
|
+
duplicate
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# @private
|
|
105
|
+
def self.id_from(metadata)
|
|
106
|
+
"#{metadata[:rerun_file_path]}[#{metadata[:scoped_id]}]"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @private
|
|
110
|
+
def self.location_tuple_from(metadata)
|
|
111
|
+
[metadata[:absolute_file_path], metadata[:line_number]]
|
|
74
112
|
end
|
|
75
113
|
|
|
76
114
|
# @private
|
|
@@ -79,9 +117,10 @@ module RSpec
|
|
|
79
117
|
class HashPopulator
|
|
80
118
|
attr_reader :metadata, :user_metadata, :description_args, :block
|
|
81
119
|
|
|
82
|
-
def initialize(metadata, user_metadata, description_args, block)
|
|
120
|
+
def initialize(metadata, user_metadata, index_provider, description_args, block)
|
|
83
121
|
@metadata = metadata
|
|
84
122
|
@user_metadata = user_metadata
|
|
123
|
+
@index_provider = index_provider
|
|
85
124
|
@description_args = description_args
|
|
86
125
|
@block = block
|
|
87
126
|
end
|
|
@@ -89,7 +128,6 @@ module RSpec
|
|
|
89
128
|
def populate
|
|
90
129
|
ensure_valid_user_keys
|
|
91
130
|
|
|
92
|
-
metadata[:execution_result] = Example::ExecutionResult.new
|
|
93
131
|
metadata[:block] = block
|
|
94
132
|
metadata[:description_args] = description_args
|
|
95
133
|
metadata[:description] = build_description_from(*metadata[:description_args])
|
|
@@ -98,7 +136,6 @@ module RSpec
|
|
|
98
136
|
|
|
99
137
|
populate_location_attributes
|
|
100
138
|
metadata.update(user_metadata)
|
|
101
|
-
RSpec.configuration.apply_derived_metadata_to(metadata)
|
|
102
139
|
end
|
|
103
140
|
|
|
104
141
|
private
|
|
@@ -114,10 +151,14 @@ module RSpec
|
|
|
114
151
|
file_path_and_line_number_from(caller)
|
|
115
152
|
end
|
|
116
153
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
metadata[:
|
|
120
|
-
metadata[:
|
|
154
|
+
relative_file_path = Metadata.relative_path(file_path)
|
|
155
|
+
absolute_file_path = File.expand_path(relative_file_path)
|
|
156
|
+
metadata[:file_path] = relative_file_path
|
|
157
|
+
metadata[:line_number] = line_number.to_i
|
|
158
|
+
metadata[:location] = "#{relative_file_path}:#{line_number}"
|
|
159
|
+
metadata[:absolute_file_path] = absolute_file_path
|
|
160
|
+
metadata[:rerun_file_path] ||= relative_file_path
|
|
161
|
+
metadata[:scoped_id] = build_scoped_id_for(absolute_file_path)
|
|
121
162
|
end
|
|
122
163
|
|
|
123
164
|
def file_path_and_line_number_from(backtrace)
|
|
@@ -127,17 +168,24 @@ module RSpec
|
|
|
127
168
|
end
|
|
128
169
|
|
|
129
170
|
def description_separator(parent_part, child_part)
|
|
130
|
-
if parent_part.is_a?(Module) &&
|
|
131
|
-
''
|
|
171
|
+
if parent_part.is_a?(Module) && /^(?:#|::|\.)/.match(child_part.to_s)
|
|
172
|
+
''.freeze
|
|
132
173
|
else
|
|
133
|
-
' '
|
|
174
|
+
' '.freeze
|
|
134
175
|
end
|
|
135
176
|
end
|
|
136
177
|
|
|
137
178
|
def build_description_from(parent_description=nil, my_description=nil)
|
|
138
179
|
return parent_description.to_s unless my_description
|
|
180
|
+
return my_description.to_s if parent_description.to_s == ''
|
|
139
181
|
separator = description_separator(parent_description, my_description)
|
|
140
|
-
parent_description.to_s + separator
|
|
182
|
+
(parent_description.to_s + separator) << my_description.to_s
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def build_scoped_id_for(file_path)
|
|
186
|
+
index = @index_provider.call(file_path).to_s
|
|
187
|
+
parent_scoped_id = metadata.fetch(:scoped_id) { return index }
|
|
188
|
+
"#{parent_scoped_id}:#{index}"
|
|
141
189
|
end
|
|
142
190
|
|
|
143
191
|
def ensure_valid_user_keys
|
|
@@ -163,17 +211,20 @@ module RSpec
|
|
|
163
211
|
|
|
164
212
|
# @private
|
|
165
213
|
class ExampleHash < HashPopulator
|
|
166
|
-
def self.create(group_metadata, user_metadata, description, block)
|
|
214
|
+
def self.create(group_metadata, user_metadata, index_provider, description, block)
|
|
167
215
|
example_metadata = group_metadata.dup
|
|
168
216
|
group_metadata = Hash.new(&ExampleGroupHash.backwards_compatibility_default_proc do |hash|
|
|
169
217
|
hash[:parent_example_group]
|
|
170
218
|
end)
|
|
171
219
|
group_metadata.update(example_metadata)
|
|
172
220
|
|
|
221
|
+
example_metadata[:execution_result] = Example::ExecutionResult.new
|
|
173
222
|
example_metadata[:example_group] = group_metadata
|
|
223
|
+
example_metadata[:shared_group_inclusion_backtrace] = SharedExampleGroupInclusionStackFrame.current_backtrace
|
|
174
224
|
example_metadata.delete(:parent_example_group)
|
|
175
225
|
|
|
176
|
-
|
|
226
|
+
description_args = description.nil? ? [] : [description]
|
|
227
|
+
hash = new(example_metadata, user_metadata, index_provider, description_args, block)
|
|
177
228
|
hash.populate
|
|
178
229
|
hash.metadata
|
|
179
230
|
end
|
|
@@ -194,7 +245,7 @@ module RSpec
|
|
|
194
245
|
|
|
195
246
|
# @private
|
|
196
247
|
class ExampleGroupHash < HashPopulator
|
|
197
|
-
def self.create(parent_group_metadata, user_metadata, *args, &block)
|
|
248
|
+
def self.create(parent_group_metadata, user_metadata, example_group_index, *args, &block)
|
|
198
249
|
group_metadata = hash_with_backwards_compatibility_default_proc
|
|
199
250
|
|
|
200
251
|
if parent_group_metadata
|
|
@@ -202,7 +253,7 @@ module RSpec
|
|
|
202
253
|
group_metadata[:parent_example_group] = parent_group_metadata
|
|
203
254
|
end
|
|
204
255
|
|
|
205
|
-
hash = new(group_metadata, user_metadata, args, block)
|
|
256
|
+
hash = new(group_metadata, user_metadata, example_group_index, args, block)
|
|
206
257
|
hash.populate
|
|
207
258
|
hash.metadata
|
|
208
259
|
end
|
|
@@ -215,17 +266,19 @@ module RSpec
|
|
|
215
266
|
Proc.new do |hash, key|
|
|
216
267
|
case key
|
|
217
268
|
when :example_group
|
|
218
|
-
# We commonly get here when rspec-core is applying a previously
|
|
219
|
-
# filter rule, such as when a gem configures:
|
|
269
|
+
# We commonly get here when rspec-core is applying a previously
|
|
270
|
+
# configured filter rule, such as when a gem configures:
|
|
220
271
|
#
|
|
221
272
|
# RSpec.configure do |c|
|
|
222
273
|
# c.include MyGemHelpers, :example_group => { :file_path => /spec\/my_gem_specs/ }
|
|
223
274
|
# end
|
|
224
275
|
#
|
|
225
|
-
# It's confusing for a user to get a deprecation at this point in
|
|
226
|
-
# we issue a deprecation from the config APIs
|
|
227
|
-
#
|
|
228
|
-
|
|
276
|
+
# It's confusing for a user to get a deprecation at this point in
|
|
277
|
+
# the code, so instead we issue a deprecation from the config APIs
|
|
278
|
+
# that take a metadata hash, and MetadataFilter sets this thread
|
|
279
|
+
# local to silence the warning here since it would be so
|
|
280
|
+
# confusing.
|
|
281
|
+
unless RSpec::Support.thread_local_data[:silence_metadata_example_group_deprecations]
|
|
229
282
|
RSpec.deprecate("The `:example_group` key in an example group's metadata hash",
|
|
230
283
|
:replacement => "the example group's hash directly for the " \
|
|
231
284
|
"computed keys and `:parent_example_group` to access the parent " \
|
|
@@ -271,14 +324,21 @@ module RSpec
|
|
|
271
324
|
# @private
|
|
272
325
|
RESERVED_KEYS = [
|
|
273
326
|
:description,
|
|
327
|
+
:description_args,
|
|
328
|
+
:described_class,
|
|
274
329
|
:example_group,
|
|
275
330
|
:parent_example_group,
|
|
276
331
|
:execution_result,
|
|
332
|
+
:last_run_status,
|
|
277
333
|
:file_path,
|
|
334
|
+
:absolute_file_path,
|
|
335
|
+
:rerun_file_path,
|
|
278
336
|
:full_description,
|
|
279
337
|
:line_number,
|
|
280
338
|
:location,
|
|
281
|
-
:
|
|
339
|
+
:scoped_id,
|
|
340
|
+
:block,
|
|
341
|
+
:shared_group_inclusion_backtrace
|
|
282
342
|
]
|
|
283
343
|
end
|
|
284
344
|
|
|
@@ -405,7 +465,8 @@ module RSpec
|
|
|
405
465
|
# `metadata[:example_group][:described_class]` when you use
|
|
406
466
|
# anonymous controller specs) such that changes are written
|
|
407
467
|
# back to the top-level metadata hash.
|
|
408
|
-
# * Exposes the parent group metadata as
|
|
468
|
+
# * Exposes the parent group metadata as
|
|
469
|
+
# `[:example_group][:example_group]`.
|
|
409
470
|
class LegacyExampleGroupHash
|
|
410
471
|
include HashImitatable
|
|
411
472
|
|
|
@@ -8,37 +8,33 @@ module RSpec
|
|
|
8
8
|
module MetadataFilter
|
|
9
9
|
class << self
|
|
10
10
|
# @private
|
|
11
|
-
def
|
|
12
|
-
filters.
|
|
11
|
+
def apply?(predicate, filters, metadata)
|
|
12
|
+
filters.__send__(predicate) { |k, v| filter_applies?(k, v, metadata) }
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
# @private
|
|
16
|
-
def
|
|
17
|
-
|
|
16
|
+
def filter_applies?(key, filter_value, metadata)
|
|
17
|
+
silence_metadata_example_group_deprecations do
|
|
18
|
+
return location_filter_applies?(filter_value, metadata) if key == :locations
|
|
19
|
+
return id_filter_applies?(filter_value, metadata) if key == :ids
|
|
20
|
+
return filters_apply?(key, filter_value, metadata) if Hash === filter_value
|
|
21
|
+
|
|
22
|
+
meta_value = metadata.fetch(key) { return false }
|
|
23
|
+
|
|
24
|
+
return true if TrueClass === filter_value && meta_value
|
|
25
|
+
return proc_filter_applies?(key, filter_value, metadata) if Proc === filter_value
|
|
26
|
+
return filter_applies_to_any_value?(key, filter_value, metadata) if Array === meta_value
|
|
27
|
+
|
|
28
|
+
filter_value === meta_value || filter_value.to_s == meta_value.to_s
|
|
29
|
+
end
|
|
18
30
|
end
|
|
19
31
|
|
|
20
32
|
# @private
|
|
21
|
-
def
|
|
22
|
-
silence_metadata_example_group_deprecations
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return false unless metadata.key?(key)
|
|
28
|
-
|
|
29
|
-
case value
|
|
30
|
-
when Regexp
|
|
31
|
-
metadata[key] =~ value
|
|
32
|
-
when Proc
|
|
33
|
-
case value.arity
|
|
34
|
-
when 0 then value.call
|
|
35
|
-
when 2 then value.call(metadata[key], metadata)
|
|
36
|
-
else value.call(metadata[key])
|
|
37
|
-
end
|
|
38
|
-
else
|
|
39
|
-
metadata[key].to_s == value.to_s
|
|
40
|
-
end
|
|
41
|
-
end
|
|
33
|
+
def silence_metadata_example_group_deprecations
|
|
34
|
+
RSpec::Support.thread_local_data[:silence_metadata_example_group_deprecations] = true
|
|
35
|
+
yield
|
|
36
|
+
ensure
|
|
37
|
+
RSpec::Support.thread_local_data.delete(:silence_metadata_example_group_deprecations)
|
|
42
38
|
end
|
|
43
39
|
|
|
44
40
|
private
|
|
@@ -47,26 +43,31 @@ module RSpec
|
|
|
47
43
|
metadata[key].any? { |v| filter_applies?(key, v, key => value) }
|
|
48
44
|
end
|
|
49
45
|
|
|
50
|
-
def
|
|
51
|
-
|
|
52
|
-
line_number = example_group_declaration_line(locations, metadata)
|
|
53
|
-
line_number ? line_number_filter_applies?(line_number, metadata) : true
|
|
54
|
-
end
|
|
46
|
+
def id_filter_applies?(rerun_paths_to_scoped_ids, metadata)
|
|
47
|
+
scoped_ids = rerun_paths_to_scoped_ids.fetch(metadata[:rerun_file_path]) { return false }
|
|
55
48
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
Metadata.ascend(metadata).any? do |meta|
|
|
50
|
+
scoped_ids.include?(meta[:scoped_id])
|
|
51
|
+
end
|
|
59
52
|
end
|
|
60
53
|
|
|
61
|
-
def
|
|
62
|
-
|
|
63
|
-
|
|
54
|
+
def location_filter_applies?(locations, metadata)
|
|
55
|
+
Metadata.ascend(metadata).any? do |meta|
|
|
56
|
+
file_path = meta[:absolute_file_path]
|
|
57
|
+
line_num = meta[:line_number]
|
|
58
|
+
|
|
59
|
+
locations[file_path].any? do |filter_line_num|
|
|
60
|
+
line_num == RSpec.world.preceding_declaration_line(file_path, filter_line_num)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
64
63
|
end
|
|
65
64
|
|
|
66
|
-
def
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
def proc_filter_applies?(key, proc, metadata)
|
|
66
|
+
case proc.arity
|
|
67
|
+
when 0 then proc.call
|
|
68
|
+
when 2 then proc.call(metadata[key], metadata)
|
|
69
|
+
else proc.call(metadata[key])
|
|
70
|
+
end
|
|
70
71
|
end
|
|
71
72
|
|
|
72
73
|
def filters_apply?(key, value, metadata)
|
|
@@ -74,20 +75,179 @@ module RSpec
|
|
|
74
75
|
return false unless Hash === subhash || HashImitatable === subhash
|
|
75
76
|
value.all? { |k, v| filter_applies?(k, v, subhash) }
|
|
76
77
|
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Tracks a collection of filterable items (e.g. modules, hooks, etc)
|
|
82
|
+
# and provides an optimized API to get the applicable items for the
|
|
83
|
+
# metadata of an example or example group.
|
|
84
|
+
#
|
|
85
|
+
# There are two implementations, optimized for different uses.
|
|
86
|
+
# @private
|
|
87
|
+
module FilterableItemRepository
|
|
88
|
+
# This implementation is simple, and is optimized for frequent
|
|
89
|
+
# updates but rare queries. `append` and `prepend` do no extra
|
|
90
|
+
# processing, and no internal memoization is done, since this
|
|
91
|
+
# is not optimized for queries.
|
|
92
|
+
#
|
|
93
|
+
# This is ideal for use by a example or example group, which may
|
|
94
|
+
# be updated multiple times with globally configured hooks, etc,
|
|
95
|
+
# but will not be queried frequently by other examples or examle
|
|
96
|
+
# groups.
|
|
97
|
+
# @private
|
|
98
|
+
class UpdateOptimized
|
|
99
|
+
attr_reader :items_and_filters
|
|
100
|
+
|
|
101
|
+
def initialize(applies_predicate)
|
|
102
|
+
@applies_predicate = applies_predicate
|
|
103
|
+
@items_and_filters = []
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def append(item, metadata)
|
|
107
|
+
@items_and_filters << [item, metadata]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def prepend(item, metadata)
|
|
111
|
+
@items_and_filters.unshift [item, metadata]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def delete(item, metadata)
|
|
115
|
+
@items_and_filters.delete [item, metadata]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def items_for(request_meta)
|
|
119
|
+
@items_and_filters.each_with_object([]) do |(item, item_meta), to_return|
|
|
120
|
+
to_return << item if item_meta.empty? ||
|
|
121
|
+
MetadataFilter.apply?(@applies_predicate, item_meta, request_meta)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
unless [].respond_to?(:each_with_object) # For 1.8.7
|
|
126
|
+
# :nocov:
|
|
127
|
+
undef items_for
|
|
128
|
+
def items_for(request_meta)
|
|
129
|
+
@items_and_filters.inject([]) do |to_return, (item, item_meta)|
|
|
130
|
+
to_return << item if item_meta.empty? ||
|
|
131
|
+
MetadataFilter.apply?(@applies_predicate, item_meta, request_meta)
|
|
132
|
+
to_return
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
# :nocov:
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# This implementation is much more complex, and is optimized for
|
|
140
|
+
# rare (or hopefully no) updates once the queries start. Updates
|
|
141
|
+
# incur a cost as it has to clear the memoization and keep track
|
|
142
|
+
# of applicable keys. Queries will be O(N) the first time an item
|
|
143
|
+
# is provided with a given set of applicable metadata; subsequent
|
|
144
|
+
# queries with items with the same set of applicable metadata will
|
|
145
|
+
# be O(1) due to internal memoization.
|
|
146
|
+
#
|
|
147
|
+
# This is ideal for use by config, where filterable items (e.g. hooks)
|
|
148
|
+
# are typically added at the start of the process (e.g. in `spec_helper`)
|
|
149
|
+
# and then repeatedly queried as example groups and examples are defined.
|
|
150
|
+
# @private
|
|
151
|
+
class QueryOptimized < UpdateOptimized
|
|
152
|
+
alias find_items_for items_for
|
|
153
|
+
private :find_items_for
|
|
77
154
|
|
|
78
|
-
def
|
|
79
|
-
|
|
80
|
-
|
|
155
|
+
def initialize(applies_predicate)
|
|
156
|
+
super
|
|
157
|
+
@applicable_keys = Set.new
|
|
158
|
+
@proc_keys = Set.new
|
|
159
|
+
@memoized_lookups = Hash.new do |hash, applicable_metadata|
|
|
160
|
+
hash[applicable_metadata] = find_items_for(applicable_metadata)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def append(item, metadata)
|
|
165
|
+
super
|
|
166
|
+
handle_mutation(metadata)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def prepend(item, metadata)
|
|
170
|
+
super
|
|
171
|
+
handle_mutation(metadata)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def delete(item, metadata)
|
|
175
|
+
super
|
|
176
|
+
reconstruct_caches
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def items_for(metadata)
|
|
180
|
+
# The filtering of `metadata` to `applicable_metadata` is the key thing
|
|
181
|
+
# that makes the memoization actually useful in practice, since each
|
|
182
|
+
# example and example group have different metadata (e.g. location and
|
|
183
|
+
# description). By filtering to the metadata keys our items care about,
|
|
184
|
+
# we can ignore extra metadata keys that differ for each example/group.
|
|
185
|
+
# For example, given `config.include DBHelpers, :db`, example groups
|
|
186
|
+
# can be split into these two sets: those that are tagged with `:db` and those
|
|
187
|
+
# that are not. For each set, this method for the first group in the set is
|
|
188
|
+
# still an `O(N)` calculation, but all subsequent groups in the set will be
|
|
189
|
+
# constant time lookups when they call this method.
|
|
190
|
+
applicable_metadata = applicable_metadata_from(metadata)
|
|
191
|
+
|
|
192
|
+
if applicable_metadata.any? { |k, _| @proc_keys.include?(k) }
|
|
193
|
+
# It's unsafe to memoize lookups involving procs (since they can
|
|
194
|
+
# be non-deterministic), so we skip the memoization in this case.
|
|
195
|
+
find_items_for(applicable_metadata)
|
|
81
196
|
else
|
|
82
|
-
|
|
197
|
+
@memoized_lookups[applicable_metadata]
|
|
83
198
|
end
|
|
84
199
|
end
|
|
85
200
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
201
|
+
private
|
|
202
|
+
|
|
203
|
+
def reconstruct_caches
|
|
204
|
+
@applicable_keys.clear
|
|
205
|
+
@proc_keys.clear
|
|
206
|
+
@items_and_filters.each do |_item, metadata|
|
|
207
|
+
handle_mutation(metadata)
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def handle_mutation(metadata)
|
|
212
|
+
@applicable_keys.merge(metadata.keys)
|
|
213
|
+
@proc_keys.merge(proc_keys_from metadata)
|
|
214
|
+
@memoized_lookups.clear
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def applicable_metadata_from(metadata)
|
|
218
|
+
MetadataFilter.silence_metadata_example_group_deprecations do
|
|
219
|
+
@applicable_keys.inject({}) do |hash, key|
|
|
220
|
+
# :example_group is treated special here because...
|
|
221
|
+
# - In RSpec 2, example groups had an `:example_group` key
|
|
222
|
+
# - In RSpec 3, that key is deprecated (it was confusing!).
|
|
223
|
+
# - The key is not technically present in an example group metadata hash
|
|
224
|
+
# (and thus would fail the `metadata.key?(key)` check) but a value
|
|
225
|
+
# is provided when accessed via the hash's `default_proc`
|
|
226
|
+
# - Thus, for backwards compatibility, we have to explicitly check
|
|
227
|
+
# for `:example_group` here if it is one of the keys being used to
|
|
228
|
+
# filter.
|
|
229
|
+
hash[key] = metadata[key] if metadata.key?(key) || key == :example_group
|
|
230
|
+
hash
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def proc_keys_from(metadata)
|
|
236
|
+
metadata.each_with_object([]) do |(key, value), to_return|
|
|
237
|
+
to_return << key if Proc === value
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
unless [].respond_to?(:each_with_object) # For 1.8.7
|
|
242
|
+
# :nocov:
|
|
243
|
+
undef proc_keys_from
|
|
244
|
+
def proc_keys_from(metadata)
|
|
245
|
+
metadata.inject([]) do |to_return, (key, value)|
|
|
246
|
+
to_return << key if Proc === value
|
|
247
|
+
to_return
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
# :nocov:
|
|
91
251
|
end
|
|
92
252
|
end
|
|
93
253
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
begin
|
|
2
|
-
# Only the minitest 5.x gem includes the minitest.rb and assertions.rb files
|
|
2
|
+
# Only the minitest 5.x gem includes the minitest.rb and assertions.rb files.
|
|
3
3
|
require 'minitest'
|
|
4
4
|
require 'minitest/assertions'
|
|
5
5
|
rescue LoadError
|
|
6
|
-
# We must be using Ruby Core's MiniTest or the Minitest gem 4.x
|
|
6
|
+
# We must be using Ruby Core's MiniTest or the Minitest gem 4.x.
|
|
7
7
|
require 'minitest/unit'
|
|
8
8
|
Minitest = MiniTest
|
|
9
9
|
end
|
|
@@ -13,6 +13,9 @@ module RSpec
|
|
|
13
13
|
# @private
|
|
14
14
|
module MinitestAssertionsAdapter
|
|
15
15
|
include ::Minitest::Assertions
|
|
16
|
+
# Need to forcefully include Pending after Minitest::Assertions
|
|
17
|
+
# to make sure our own #skip method beats Minitest's.
|
|
18
|
+
include ::RSpec::Core::Pending
|
|
16
19
|
|
|
17
20
|
# Minitest 5.x requires this accessor to be available. See
|
|
18
21
|
# https://github.com/seattlerb/minitest/blob/38f0a5fcbd9c37c3f80a3eaad4ba84d3fc9947a0/lib/minitest/assertions.rb#L8
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
# hoops here.
|
|
3
3
|
#
|
|
4
4
|
# mocha >= '0.13.0':
|
|
5
|
-
# require 'mocha/api' is required
|
|
6
|
-
# require 'mocha/object' raises a LoadError b/c the file no longer exists
|
|
5
|
+
# require 'mocha/api' is required.
|
|
6
|
+
# require 'mocha/object' raises a LoadError b/c the file no longer exists.
|
|
7
7
|
# mocha < '0.13.0', >= '0.9.7'
|
|
8
|
-
# require 'mocha/api' is required
|
|
9
|
-
# require 'mocha/object' is required
|
|
8
|
+
# require 'mocha/api' is required.
|
|
9
|
+
# require 'mocha/object' is required.
|
|
10
10
|
# mocha < '0.9.7':
|
|
11
|
-
# require 'mocha/api' raises a LoadError b/c the file does not yet exist
|
|
12
|
-
# require 'mocha/standalone' is required
|
|
13
|
-
# require 'mocha/object' is required
|
|
11
|
+
# require 'mocha/api' raises a LoadError b/c the file does not yet exist.
|
|
12
|
+
# require 'mocha/standalone' is required.
|
|
13
|
+
# require 'mocha/object' is required.
|
|
14
14
|
begin
|
|
15
15
|
require 'mocha/api'
|
|
16
16
|
|
|
17
17
|
begin
|
|
18
18
|
require 'mocha/object'
|
|
19
19
|
rescue LoadError
|
|
20
|
-
# Mocha >= 0.13.0 no longer contains this file nor needs it to be loaded
|
|
20
|
+
# Mocha >= 0.13.0 no longer contains this file nor needs it to be loaded.
|
|
21
21
|
end
|
|
22
22
|
rescue LoadError
|
|
23
23
|
require 'mocha/standalone'
|