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
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
### Subject of the issue
|
|
2
|
+
<!---
|
|
3
|
+
Describe your issue here.
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
### Your environment
|
|
7
|
+
* Ruby version:
|
|
8
|
+
* rspec-mocks version:
|
|
9
|
+
|
|
10
|
+
### Steps to reproduce
|
|
11
|
+
<!---
|
|
12
|
+
Tell us how to reproduce this issue. Please provide a working demo, you can use
|
|
13
|
+
this [templates](REPORT_TEMPLATE.md) as a base.
|
|
14
|
+
-->
|
|
15
|
+
|
|
16
|
+
### Expected behavior
|
|
17
|
+
<!---
|
|
18
|
+
Tell us what should happen.
|
|
19
|
+
-->
|
|
20
|
+
|
|
21
|
+
### Actual behavior
|
|
22
|
+
<!---
|
|
23
|
+
Tell us what happens instead.
|
|
24
|
+
-->
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
=====================
|
|
2
3
|
|
|
3
|
-
Copyright
|
|
4
|
-
Copyright
|
|
5
|
-
Copyright
|
|
4
|
+
* Copyright © 2012 David Chelimsky, Myron Marston
|
|
5
|
+
* Copyright © 2006 David Chelimsky, The RSpec Development Team
|
|
6
|
+
* Copyright © 2005 Steven Baker
|
|
6
7
|
|
|
7
8
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
8
9
|
a copy of this software and associated documentation files (the
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# RSpec Mocks [](https://github.com/rspec/rspec-mocks/actions) [](https://codeclimate.com/github/rspec/rspec-mocks)
|
|
2
2
|
rspec-mocks is a test-double framework for rspec with support for method stubs,
|
|
3
3
|
fakes, and message expectations on generated test-doubles and real objects
|
|
4
4
|
alike.
|
|
@@ -8,6 +8,29 @@ alike.
|
|
|
8
8
|
gem install rspec # for rspec-core, rspec-expectations, rspec-mocks
|
|
9
9
|
gem install rspec-mocks # for rspec-mocks only
|
|
10
10
|
|
|
11
|
+
Want to run against the `main` branch? You'll need to include the dependent
|
|
12
|
+
RSpec repos as well. Add the following to your `Gemfile`:
|
|
13
|
+
|
|
14
|
+
```ruby
|
|
15
|
+
%w[rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
|
|
16
|
+
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'main'
|
|
17
|
+
end
|
|
18
|
+
```
|
|
19
|
+
## Contributing
|
|
20
|
+
|
|
21
|
+
Once you've set up the environment, you'll need to cd into the working
|
|
22
|
+
directory of whichever repo you want to work in. From there you can run the
|
|
23
|
+
specs and cucumber features, and make patches.
|
|
24
|
+
|
|
25
|
+
NOTE: You do not need to use rspec-dev to work on a specific RSpec repo. You
|
|
26
|
+
can treat each RSpec repo as an independent project.
|
|
27
|
+
|
|
28
|
+
For information about contributing to RSpec, please refer to the following markdown files:
|
|
29
|
+
* [Build details](BUILD_DETAIL.md)
|
|
30
|
+
* [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
31
|
+
* [Detailed contributing guide](CONTRIBUTING.md)
|
|
32
|
+
* [Development setup guide](DEVELOPMENT.md)
|
|
33
|
+
|
|
11
34
|
## Test Doubles
|
|
12
35
|
|
|
13
36
|
A test double is an object that stands in for another object in your system
|
|
@@ -30,7 +53,17 @@ book = instance_double("Book", :pages => 250)
|
|
|
30
53
|
Verifying doubles have some clever tricks to enable you to both test in
|
|
31
54
|
isolation without your dependencies loaded while still being able to validate
|
|
32
55
|
them against real objects. More detail is available in [their
|
|
33
|
-
documentation](https://github.com/rspec/rspec-mocks/blob/
|
|
56
|
+
documentation](https://github.com/rspec/rspec-mocks/blob/main/features/verifying_doubles).
|
|
57
|
+
|
|
58
|
+
Verifying doubles can also accept custom identifiers, just like double(), e.g.:
|
|
59
|
+
|
|
60
|
+
```ruby
|
|
61
|
+
books = []
|
|
62
|
+
books << instance_double("Book", :rspec_book, :pages => 250)
|
|
63
|
+
books << instance_double("Book", "(Untitled)", :pages => 5000)
|
|
64
|
+
|
|
65
|
+
puts books.inspect # with names, it's clearer which were actually added
|
|
66
|
+
```
|
|
34
67
|
|
|
35
68
|
## Method Stubs
|
|
36
69
|
|
|
@@ -42,7 +75,7 @@ rspec-mocks supports 3 forms for declaring method stubs:
|
|
|
42
75
|
allow(book).to receive(:title) { "The RSpec Book" }
|
|
43
76
|
allow(book).to receive(:title).and_return("The RSpec Book")
|
|
44
77
|
allow(book).to receive_messages(
|
|
45
|
-
:title => "The RSpec Book",
|
|
78
|
+
:title => "The RSpec Book",
|
|
46
79
|
:subtitle => "Behaviour-Driven Development with RSpec, Cucumber, and Friends")
|
|
47
80
|
```
|
|
48
81
|
|
|
@@ -68,6 +101,21 @@ that iterates through them:
|
|
|
68
101
|
order.calculate_total_price(double(:price => 1.99), double(:price => 2.99))
|
|
69
102
|
```
|
|
70
103
|
|
|
104
|
+
### Stubbing a chain of methods
|
|
105
|
+
|
|
106
|
+
You can use `receive_message_chain` in place of `receive` to stub a chain of messages:
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
allow(double).to receive_message_chain("foo.bar") { :baz }
|
|
110
|
+
allow(double).to receive_message_chain(:foo, :bar => :baz)
|
|
111
|
+
allow(double).to receive_message_chain(:foo, :bar) { :baz }
|
|
112
|
+
|
|
113
|
+
# Given any of the above forms:
|
|
114
|
+
double.foo.bar # => :baz
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Chains can be arbitrarily long, which makes it quite painless to violate the Law of Demeter in violent ways, so you should consider any use of `receive_message_chain` a code smell. Even though not all code smells indicate real problems (think fluent interfaces), `receive_message_chain` still results in brittle examples. For example, if you write `allow(foo).to receive_message_chain(:bar, :baz => 37)` in a spec and then the implementation calls `foo.baz.bar`, the stub will not work.
|
|
118
|
+
|
|
71
119
|
## Consecutive return values
|
|
72
120
|
|
|
73
121
|
When a stub might be invoked more than once, you can provide additional
|
|
@@ -117,8 +165,7 @@ class_spy("Invitation") # => same as `class_double("Invitation").as_null_object`
|
|
|
117
165
|
object_spy("Invitation") # => same as `object_double("Invitation").as_null_object`
|
|
118
166
|
```
|
|
119
167
|
|
|
120
|
-
|
|
121
|
-
pattern.
|
|
168
|
+
Verifying messages received in this way implements the Test Spy pattern.
|
|
122
169
|
|
|
123
170
|
```ruby
|
|
124
171
|
invitation = spy('invitation')
|
|
@@ -138,6 +185,20 @@ expect(invitation).to have_received(:accept).with(mailer)
|
|
|
138
185
|
expect(invitation.accept).to eq(true)
|
|
139
186
|
```
|
|
140
187
|
|
|
188
|
+
Note that `have_received(...).with(...)` is unable to work properly when
|
|
189
|
+
passed arguments are mutated after the spy records the received message.
|
|
190
|
+
For example, this does not work properly:
|
|
191
|
+
|
|
192
|
+
```ruby
|
|
193
|
+
greeter = spy("greeter")
|
|
194
|
+
|
|
195
|
+
message = "Hello"
|
|
196
|
+
greeter.greet_with(message)
|
|
197
|
+
message << ", World"
|
|
198
|
+
|
|
199
|
+
expect(greeter).to have_received(:greet_with).with("Hello")
|
|
200
|
+
```
|
|
201
|
+
|
|
141
202
|
## Nomenclature
|
|
142
203
|
|
|
143
204
|
### Mock Objects and Test Stubs
|
|
@@ -196,7 +257,7 @@ expect(double).to receive(:msg).with("B", 2, 4)
|
|
|
196
257
|
## Argument Matchers
|
|
197
258
|
|
|
198
259
|
Arguments that are passed to `with` are compared with actual arguments
|
|
199
|
-
received using
|
|
260
|
+
received using ===. In cases in which you want to specify things about the
|
|
200
261
|
arguments rather than the arguments themselves, you can use any of the
|
|
201
262
|
matchers that ship with rspec-expectations. They don't all make syntactic
|
|
202
263
|
sense (they were primarily designed for use with RSpec::Expectations), but
|
|
@@ -206,8 +267,9 @@ rspec-mocks also adds some keyword Symbols that you can use to
|
|
|
206
267
|
specify certain kinds of arguments:
|
|
207
268
|
|
|
208
269
|
```ruby
|
|
209
|
-
expect(double).to receive(:msg).with(no_args
|
|
210
|
-
expect(double).to receive(:msg).with(any_args
|
|
270
|
+
expect(double).to receive(:msg).with(no_args)
|
|
271
|
+
expect(double).to receive(:msg).with(any_args)
|
|
272
|
+
expect(double).to receive(:msg).with(1, any_args) # any args acts like an arg splat and can go anywhere
|
|
211
273
|
expect(double).to receive(:msg).with(1, kind_of(Numeric), "b") #2nd argument can be any kind of Numeric
|
|
212
274
|
expect(double).to receive(:msg).with(1, boolean(), "b") #2nd argument can be true or false
|
|
213
275
|
expect(double).to receive(:msg).with(1, /abc/, "b") #2nd argument can be any String matching the submitted Regexp
|
|
@@ -223,12 +285,15 @@ expect(double).to receive(:msg).with(hash_excluding(:a => 5)) # first arg is a h
|
|
|
223
285
|
```ruby
|
|
224
286
|
expect(double).to receive(:msg).once
|
|
225
287
|
expect(double).to receive(:msg).twice
|
|
288
|
+
expect(double).to receive(:msg).exactly(n).time
|
|
226
289
|
expect(double).to receive(:msg).exactly(n).times
|
|
227
290
|
expect(double).to receive(:msg).at_least(:once)
|
|
228
291
|
expect(double).to receive(:msg).at_least(:twice)
|
|
292
|
+
expect(double).to receive(:msg).at_least(n).time
|
|
229
293
|
expect(double).to receive(:msg).at_least(n).times
|
|
230
294
|
expect(double).to receive(:msg).at_most(:once)
|
|
231
295
|
expect(double).to receive(:msg).at_most(:twice)
|
|
296
|
+
expect(double).to receive(:msg).at_most(n).time
|
|
232
297
|
expect(double).to receive(:msg).at_most(n).times
|
|
233
298
|
```
|
|
234
299
|
|
|
@@ -265,7 +330,7 @@ expect(double).to receive(:msg).and_return(value)
|
|
|
265
330
|
expect(double).to receive(:msg).exactly(3).times.and_return(value1, value2, value3)
|
|
266
331
|
# returns value1 the first time, value2 the second, etc
|
|
267
332
|
expect(double).to receive(:msg).and_raise(error)
|
|
268
|
-
# error can be an instantiated object or a class
|
|
333
|
+
# `error` can be an instantiated object (e.g. `StandardError.new(some_arg)`) or a class (e.g. `StandardError`)
|
|
269
334
|
# if it is a class, it must be instantiable with no args
|
|
270
335
|
expect(double).to receive(:msg).and_throw(:msg)
|
|
271
336
|
expect(double).to receive(:msg).and_yield(values, to, yield)
|
|
@@ -313,7 +378,7 @@ end
|
|
|
313
378
|
## Delegating to the Original Implementation
|
|
314
379
|
|
|
315
380
|
When working with a partial mock object, you may occasionally
|
|
316
|
-
want to set a message
|
|
381
|
+
want to set a message expectation without interfering with how
|
|
317
382
|
the object responds to the message. You can use `and_call_original`
|
|
318
383
|
to achieve this:
|
|
319
384
|
|
|
@@ -338,7 +403,7 @@ your code.
|
|
|
338
403
|
## Stubbing and Hiding Constants
|
|
339
404
|
|
|
340
405
|
See the [mutating constants
|
|
341
|
-
README](https://github.com/rspec/rspec-mocks/blob/
|
|
406
|
+
README](https://github.com/rspec/rspec-mocks/blob/main/features/mutating_constants/README.md)
|
|
342
407
|
for info on this feature.
|
|
343
408
|
|
|
344
409
|
## Use `before(:example)`, not `before(:context)`
|
|
@@ -366,7 +431,7 @@ general we discourage its use for a number of reasons:
|
|
|
366
431
|
|
|
367
432
|
* The `rspec-mocks` API is designed for individual object instances, but this
|
|
368
433
|
feature operates on entire classes of objects. As a result there are some
|
|
369
|
-
|
|
434
|
+
semantically confusing edge cases. For example in
|
|
370
435
|
`expect_any_instance_of(Widget).to receive(:name).twice` it isn't clear
|
|
371
436
|
whether each specific instance is expected to receive `name` twice, or if two
|
|
372
437
|
receives total are expected. (It's the former.)
|
|
@@ -384,14 +449,15 @@ There are many different viewpoints about the meaning of mocks and stubs. If
|
|
|
384
449
|
you are interested in learning more, here is some recommended reading:
|
|
385
450
|
|
|
386
451
|
* Mock Objects: http://www.mockobjects.com/
|
|
387
|
-
* Endo-Testing: http://
|
|
388
|
-
* Mock Roles, Not Objects: http://jmock.org/oopsla2004.pdf
|
|
452
|
+
* Endo-Testing: http://www.ccs.neu.edu/research/demeter/related-work/extreme-programming/MockObjectsFinal.PDF
|
|
453
|
+
* Mock Roles, Not Objects: http://www.jmock.org/oopsla2004.pdf
|
|
389
454
|
* Test Double: http://www.martinfowler.com/bliki/TestDouble.html
|
|
390
455
|
* Test Double Patterns: http://xunitpatterns.com/Test%20Double%20Patterns.html
|
|
391
456
|
* Mocks aren't stubs: http://www.martinfowler.com/articles/mocksArentStubs.html
|
|
392
457
|
|
|
393
458
|
## Also see
|
|
394
459
|
|
|
395
|
-
* [
|
|
396
|
-
* [
|
|
397
|
-
* [
|
|
460
|
+
* [https://github.com/rspec/rspec](https://github.com/rspec/rspec)
|
|
461
|
+
* [https://github.com/rspec/rspec-core](https://github.com/rspec/rspec-core)
|
|
462
|
+
* [https://github.com/rspec/rspec-expectations](https://github.com/rspec/rspec-expectations)
|
|
463
|
+
* [https://github.com/rspec/rspec-rails](https://github.com/rspec/rspec-rails)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!---
|
|
2
|
+
This file was generated on 2020-12-25T18:48:30+00:00 from the rspec-dev repo.
|
|
3
|
+
DO NOT modify it by hand as your changes will get lost the next time it is generated.
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
# Report template
|
|
7
|
+
|
|
8
|
+
```ruby
|
|
9
|
+
# frozen_string_literal: true
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
require "bundler/inline"
|
|
13
|
+
rescue LoadError => e
|
|
14
|
+
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
|
|
15
|
+
raise e
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
gemfile(true) do
|
|
19
|
+
source "https://rubygems.org"
|
|
20
|
+
|
|
21
|
+
gem "rspec", "3.7.0" # Activate the gem and version you are reporting the issue against.
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
puts "Ruby version is: #{RUBY_VERSION}"
|
|
25
|
+
require 'rspec/autorun'
|
|
26
|
+
|
|
27
|
+
RSpec.describe 'additions' do
|
|
28
|
+
it 'returns 2' do
|
|
29
|
+
expect(1 + 1).to eq(2)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns 1' do
|
|
33
|
+
expect(3 - 1).to eq(-1)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Simply copy the content of the appropriate template into a `.rb` file on your computer
|
|
39
|
+
and make the necessary changes to demonstrate the issue. You can execute it by running
|
|
40
|
+
`ruby rspec_report.rb` in your terminal.
|
|
41
|
+
|
|
42
|
+
You can then share your executable test case as a [gist](https://gist.github.com), or
|
|
43
|
+
simply paste the content into the issue description.
|
|
@@ -26,7 +26,7 @@ end
|
|
|
26
26
|
namespace :clobber do
|
|
27
27
|
desc "remove generated rbc files"
|
|
28
28
|
task :rbc do
|
|
29
|
-
Dir['**/*.rbc'].each {|f| File.delete(f)}
|
|
29
|
+
Dir['**/*.rbc'].each { |f| File.delete(f) }
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -40,7 +40,7 @@ with_changelog_in_features = lambda do |&block|
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
desc "Push docs/cukes to relishapp using the relish-client-gem"
|
|
43
|
-
task :relish, :version do |
|
|
43
|
+
task :relish, :version do |_t, args|
|
|
44
44
|
raise "rake relish[VERSION]" unless args[:version]
|
|
45
45
|
|
|
46
46
|
with_changelog_in_features.call do
|
|
@@ -65,7 +65,7 @@ task :default => [:spec, :cucumber]
|
|
|
65
65
|
task :verify_private_key_present do
|
|
66
66
|
private_key = File.expand_path('~/.gem/rspec-gem-private_key.pem')
|
|
67
67
|
unless File.exist?(private_key)
|
|
68
|
-
raise "Your private key is not present. This gem should not be built without
|
|
68
|
+
raise "Your private key is not present. This gem should not be built without it."
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'benchmark'
|
|
2
|
+
|
|
3
|
+
n = 10_000
|
|
4
|
+
|
|
5
|
+
require 'rspec/mocks'
|
|
6
|
+
|
|
7
|
+
# precache config
|
|
8
|
+
RSpec::Mocks.configuration
|
|
9
|
+
|
|
10
|
+
Benchmark.benchmark do |bm|
|
|
11
|
+
puts "#{n} times - ruby #{RUBY_VERSION}"
|
|
12
|
+
|
|
13
|
+
puts
|
|
14
|
+
puts "directly"
|
|
15
|
+
|
|
16
|
+
3.times do
|
|
17
|
+
bm.report do
|
|
18
|
+
n.times do
|
|
19
|
+
original_state = RSpec::Mocks.configuration.temporarily_suppress_partial_double_verification
|
|
20
|
+
RSpec::Mocks.configuration.temporarily_suppress_partial_double_verification = true
|
|
21
|
+
RSpec::Mocks.configuration.temporarily_suppress_partial_double_verification = original_state
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
puts
|
|
27
|
+
puts "with cached value"
|
|
28
|
+
|
|
29
|
+
3.times do
|
|
30
|
+
bm.report do
|
|
31
|
+
n.times do
|
|
32
|
+
config = RSpec::Mocks.configuration
|
|
33
|
+
original_state = config.temporarily_suppress_partial_double_verification
|
|
34
|
+
config.temporarily_suppress_partial_double_verification = true
|
|
35
|
+
config.temporarily_suppress_partial_double_verification = original_state
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
__END__
|
|
42
|
+
10000 times - ruby 2.3.1
|
|
43
|
+
|
|
44
|
+
directly
|
|
45
|
+
0.000000 0.000000 0.000000 ( 0.002654)
|
|
46
|
+
0.000000 0.000000 0.000000 ( 0.002647)
|
|
47
|
+
0.010000 0.000000 0.010000 ( 0.002645)
|
|
48
|
+
|
|
49
|
+
with cached value
|
|
50
|
+
0.000000 0.000000 0.000000 ( 0.001386)
|
|
51
|
+
0.000000 0.000000 0.000000 ( 0.001387)
|
|
52
|
+
0.000000 0.000000 0.000000 ( 0.001399)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require_relative "helper"
|
|
2
|
+
symbols = (1..1000).map { |x| :"#{x}" }
|
|
3
|
+
|
|
4
|
+
benchmark_allocations do
|
|
5
|
+
o = Object.new
|
|
6
|
+
symbols.each do |sym|
|
|
7
|
+
expect(o).to receive(sym)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
symbols.each do |sym|
|
|
11
|
+
o.send(sym)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
RSpec::Mocks.space.verify_all
|
|
15
|
+
RSpec::Mocks.space.reset_all
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
__END__
|
|
19
|
+
As of commit 9ee3e3adb529113bf1cc75cc4424d014f880dc47:
|
|
20
|
+
|
|
21
|
+
class_plus count
|
|
22
|
+
---------------------------------------------------- -----
|
|
23
|
+
Array 22003
|
|
24
|
+
Proc 3001
|
|
25
|
+
RubyVM::Env 3001
|
|
26
|
+
Array<Symbol> 2000
|
|
27
|
+
String 2000
|
|
28
|
+
Hash 1002
|
|
29
|
+
RSpec::Mocks::ExpectationTarget 1000
|
|
30
|
+
Enumerator 1000
|
|
31
|
+
RSpec::Mocks::Matchers::Receive 1000
|
|
32
|
+
Array<Fixnum> 1000
|
|
33
|
+
RSpec::Mocks::InstanceMethodStasher 1000
|
|
34
|
+
RSpec::Mocks::MethodDouble 1000
|
|
35
|
+
Array<NilClass> 1000
|
|
36
|
+
RSpec::Mocks::MessageExpectation 1000
|
|
37
|
+
Array<RSpec::Mocks::MethodDouble,Symbol> 1000
|
|
38
|
+
Array<Array> 1000
|
|
39
|
+
Array<RSpec::Mocks::ArgumentMatchers::NoArgsMatcher> 1000
|
|
40
|
+
Array<Symbol,Array,NilClass> 1000
|
|
41
|
+
RSpec::Mocks::Proxy::SpecificMessage 1000
|
|
42
|
+
RSpec::Mocks::Implementation 1000
|
|
43
|
+
Array<Class,Module> 1
|
|
44
|
+
RSpec::Mocks::PartialDoubleProxy 1
|
|
45
|
+
RSpec::Mocks::ErrorGenerator 1
|
|
46
|
+
Array<RSpec::Mocks::PartialDoubleProxy> 1
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
After PR #936:
|
|
50
|
+
|
|
51
|
+
class_plus count
|
|
52
|
+
---------------------------------------------------- -----
|
|
53
|
+
Array 21003
|
|
54
|
+
RubyVM::Env 3001
|
|
55
|
+
Proc 3001
|
|
56
|
+
String 2000
|
|
57
|
+
RSpec::Mocks::InstanceMethodStasher 1000
|
|
58
|
+
RSpec::Mocks::Matchers::Receive 1000
|
|
59
|
+
RSpec::Mocks::ExpectationTarget 1000
|
|
60
|
+
RSpec::Mocks::Implementation 1000
|
|
61
|
+
RSpec::Mocks::MessageExpectation 1000
|
|
62
|
+
RSpec::Mocks::MethodDouble 1000
|
|
63
|
+
Array<Symbol> 1000
|
|
64
|
+
Array<RSpec::Mocks::MethodDouble,Symbol> 1000
|
|
65
|
+
Array<Array> 1000
|
|
66
|
+
Enumerator 1000
|
|
67
|
+
Array<RSpec::Mocks::ArgumentMatchers::NoArgsMatcher> 1000
|
|
68
|
+
Array<Symbol,Array,NilClass> 1000
|
|
69
|
+
RSpec::Mocks::Proxy::SpecificMessage 1000
|
|
70
|
+
Array<NilClass> 1000
|
|
71
|
+
Array<Fixnum> 1000
|
|
72
|
+
Hash 2
|
|
73
|
+
RSpec::Mocks::PartialDoubleProxy 1
|
|
74
|
+
Array<RSpec::Mocks::PartialDoubleProxy> 1
|
|
75
|
+
RSpec::Mocks::ErrorGenerator 1
|
|
76
|
+
Array<Class,Module> 1
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../../../lib", __FILE__)
|
|
2
|
+
require "allocation_stats"
|
|
3
|
+
require 'rspec/mocks/standalone'
|
|
4
|
+
|
|
5
|
+
def benchmark_allocations(burn: 1)
|
|
6
|
+
stats = AllocationStats.new(:burn => burn).trace do
|
|
7
|
+
yield
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
columns = if ENV['DETAIL']
|
|
11
|
+
[:sourcefile, :sourceline, :class_plus]
|
|
12
|
+
else
|
|
13
|
+
[:class_plus]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
puts stats.allocations(:alias_paths => true).group_by(*columns).from_pwd.sort_by_size.to_text
|
|
17
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require 'benchmark'
|
|
2
2
|
|
|
3
|
-
n =
|
|
3
|
+
n = 10_000
|
|
4
4
|
|
|
5
|
-
m = 1.upto(1000).
|
|
5
|
+
m = 1.upto(1000).inject({}) { |m, i| m[i] = i; m }
|
|
6
6
|
|
|
7
7
|
Benchmark.benchmark do |bm|
|
|
8
8
|
puts "#{n} times - ruby #{RUBY_VERSION}"
|
|
@@ -13,7 +13,7 @@ Benchmark.benchmark do |bm|
|
|
|
13
13
|
3.times do
|
|
14
14
|
bm.report do
|
|
15
15
|
n.times do
|
|
16
|
-
m.each_value {
|
|
16
|
+
m.each_value {}
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -24,7 +24,7 @@ Benchmark.benchmark do |bm|
|
|
|
24
24
|
3.times do
|
|
25
25
|
bm.report do
|
|
26
26
|
n.times do
|
|
27
|
-
m.values.each{
|
|
27
|
+
m.values.each {}
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -43,7 +43,6 @@ end
|
|
|
43
43
|
# 0.910000 0.010000 0.920000 ( 0.909319)
|
|
44
44
|
# 0.910000 0.000000 0.910000 ( 0.911225)
|
|
45
45
|
|
|
46
|
-
|
|
47
46
|
# $ ruby benchmarks/values_each_v_each_value.rb
|
|
48
47
|
# 10000 times - ruby 2.0.0
|
|
49
48
|
#
|
|
@@ -4,10 +4,10 @@ n = 1_000_000
|
|
|
4
4
|
|
|
5
5
|
Foo = Class.new do
|
|
6
6
|
1.upto(n) do |i|
|
|
7
|
-
define_method(:"public_method_#{i}") {
|
|
8
|
-
define_method(:"protected_method_#{i}") {
|
|
7
|
+
define_method(:"public_method_#{i}") {}
|
|
8
|
+
define_method(:"protected_method_#{i}") {}
|
|
9
9
|
protected :"protected_method_#{i}"
|
|
10
|
-
define_method(:"private_method_#{i}") {
|
|
10
|
+
define_method(:"private_method_#{i}") {}
|
|
11
11
|
private :"protected_method_#{i}"
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
<%
|
|
2
|
+
|
|
3
|
+
USE_TILDE_TAGS = !defined?(::RUBY_ENGINE_VERSION) || (::RUBY_ENGINE_VERSION < '2.0.0')
|
|
4
|
+
NOT_WIP_TAG = USE_TILDE_TAGS ? '~@wip' : '"not @wip"'
|
|
5
|
+
|
|
6
|
+
%>
|
|
7
|
+
|
|
8
|
+
default: --require features --tags <%= NOT_WIP_TAG %> features --format progress
|
|
2
9
|
wip: --require features --tags @wip:3 --wip features
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
- throwing.feature
|
|
19
19
|
- yielding.feature
|
|
20
20
|
- calling_the_original_implementation.feature
|
|
21
|
+
- wrapping_the_original_implementation.feature
|
|
21
22
|
- block_implementation.feature
|
|
22
23
|
- setting_constraints:
|
|
23
24
|
- matching_arguments.feature
|
|
@@ -39,5 +40,6 @@
|
|
|
39
40
|
- unstub.feature
|
|
40
41
|
- outside_rspec:
|
|
41
42
|
- minitest.feature
|
|
43
|
+
- any_test_framework.feature
|
|
42
44
|
- standalone.feature
|
|
43
45
|
- Changelog
|
|
@@ -2,7 +2,7 @@ Feature: Allowing messages
|
|
|
2
2
|
|
|
3
3
|
[Test doubles](./test-doubles) are "strict" by default -- messages that have not been specifically
|
|
4
4
|
allowed or expected will trigger an error. Use `allow(...).to receive(...)` to configure
|
|
5
|
-
which messages
|
|
5
|
+
which messages the double is allowed to receive. You can also use `allow(...).to
|
|
6
6
|
receive_messages(...)` to configure allowed messages (and return values) in bulk.
|
|
7
7
|
|
|
8
8
|
Scenario: Allowed messages return nil by default
|
|
@@ -19,7 +19,8 @@ Feature: Expecting messages
|
|
|
19
19
|
"""
|
|
20
20
|
1) An unfulfilled positive message expectation triggers a failure
|
|
21
21
|
Failure/Error: expect(dbl).to receive(:foo)
|
|
22
|
-
|
|
22
|
+
|
|
23
|
+
(Double "Some Collaborator").foo(*(any args))
|
|
23
24
|
expected: 1 time with any arguments
|
|
24
25
|
received: 0 times with any arguments
|
|
25
26
|
"""
|
|
@@ -54,6 +55,7 @@ Feature: Expecting messages
|
|
|
54
55
|
"""
|
|
55
56
|
1) A negative message expectation fails when the message is received
|
|
56
57
|
Failure/Error: dbl.foo
|
|
58
|
+
|
|
57
59
|
(Double "Some Collaborator").foo(no args)
|
|
58
60
|
expected: 0 times with any arguments
|
|
59
61
|
received: 1 time
|
|
@@ -71,3 +73,40 @@ Feature: Expecting messages
|
|
|
71
73
|
"""
|
|
72
74
|
When I run `rspec negative_message_expectation_spec.rb`
|
|
73
75
|
Then the examples should all pass
|
|
76
|
+
|
|
77
|
+
Scenario: Failing positive message expectation with a custom failure message
|
|
78
|
+
Given a file named "example_spec.rb" with:
|
|
79
|
+
"""ruby
|
|
80
|
+
RSpec.describe "An unfulfilled positive message expectation" do
|
|
81
|
+
it "triggers a failure" do
|
|
82
|
+
dbl = double
|
|
83
|
+
expect(dbl).to receive(:foo), "dbl never calls :foo"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
"""
|
|
87
|
+
When I run `rspec example_spec.rb --format documentation`
|
|
88
|
+
Then the output should contain:
|
|
89
|
+
"""
|
|
90
|
+
1) An unfulfilled positive message expectation triggers a failure
|
|
91
|
+
Failure/Error: expect(dbl).to receive(:foo), "dbl never calls :foo"
|
|
92
|
+
dbl never calls :foo
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
Scenario: Failing negative message expectation with a custom failure message
|
|
96
|
+
Given a file named "example_spec.rb" with:
|
|
97
|
+
"""ruby
|
|
98
|
+
RSpec.describe "A negative message expectation" do
|
|
99
|
+
it "fails when the message is received" do
|
|
100
|
+
dbl = double
|
|
101
|
+
expect(dbl).not_to receive(:foo), "dbl called :foo but is not supposed to"
|
|
102
|
+
dbl.foo
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
"""
|
|
106
|
+
When I run `rspec example_spec.rb --format documentation`
|
|
107
|
+
Then the output should contain:
|
|
108
|
+
"""
|
|
109
|
+
1) A negative message expectation fails when the message is received
|
|
110
|
+
Failure/Error: dbl.foo
|
|
111
|
+
dbl called :foo but is not supposed to
|
|
112
|
+
"""
|
|
@@ -3,7 +3,7 @@ Feature: Null object doubles
|
|
|
3
3
|
[Test doubles](./test-doubles) are strict by default, raising errors when they receive messages that have not
|
|
4
4
|
been allowed or expected. You can chain `as_null_object` off of `double` in order to make
|
|
5
5
|
the double "loose". For any message that has not explicitly allowed or expected, the double
|
|
6
|
-
will return itself. It acts as a
|
|
6
|
+
will return itself. It acts as a black hole null object, allowing arbitrarily deep method chains.
|
|
7
7
|
|
|
8
8
|
Scenario: `as_null_object` allows arbitrarily deep message chains and returns itself
|
|
9
9
|
Given a file named "as_null_object_spec.rb" with:
|
|
@@ -19,7 +19,7 @@ Feature: Partial test doubles
|
|
|
19
19
|
expect(Person).to receive(:find) { person }
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
RSpec replaces the method we're stubbing or mocking with its own test-double
|
|
22
|
+
RSpec replaces the method we're stubbing or mocking with its own test-double like method.
|
|
23
23
|
At the end of the example, RSpec verifies any message expectations, and then restores the
|
|
24
24
|
original methods.
|
|
25
25
|
|