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
|
@@ -1,80 +1,236 @@
|
|
|
1
1
|
Feature: Integrate with Minitest
|
|
2
2
|
|
|
3
|
-
rspec-mocks
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* Include `RSpec::Mocks::ExampleMethods` in your test context. This provides rspec-mocks' API.
|
|
8
|
-
* Call `RSpec::Mocks.setup` before a test begins.
|
|
9
|
-
* Call `RSpec::Mocks.verify` after a test completes to verify message expectations. Note
|
|
10
|
-
that this step is optional; rspec-core, for example, skips this when an example has already failed.
|
|
11
|
-
* Call `RSpec::Mocks.teardown` after a test completes (and after `verify`) to cleanup. This
|
|
12
|
-
_must_ be called, even if an error has occurred, so it generally goes in an `ensure` clause.
|
|
13
|
-
|
|
14
|
-
Scenario: Use rspec-mocks with Minitest
|
|
15
|
-
Given a file named "test/test_helper.rb" with:
|
|
3
|
+
To use rspec-mocks with minitest, simply require `rspec/mocks/minitest_integration`.
|
|
4
|
+
|
|
5
|
+
Scenario: Use rspec-mocks with Minitest::Test
|
|
6
|
+
Given a file named "test/rspec_mocks_test.rb" with:
|
|
16
7
|
"""ruby
|
|
17
8
|
require 'minitest/autorun'
|
|
18
|
-
require 'rspec/mocks'
|
|
9
|
+
require 'rspec/mocks/minitest_integration'
|
|
10
|
+
|
|
11
|
+
class RSpecMocksTest < Minitest::Test
|
|
12
|
+
def test_passing_positive_expectation
|
|
13
|
+
dbl = double
|
|
14
|
+
expect(dbl).to receive(:message)
|
|
15
|
+
dbl.message
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_failing_positive_expectation
|
|
19
|
+
dbl = double
|
|
20
|
+
expect(dbl).to receive(:message)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_passing_negative_expectation
|
|
24
|
+
dbl = double
|
|
25
|
+
expect(dbl).to_not receive(:message)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_failing_negative_expectation
|
|
29
|
+
dbl = double
|
|
30
|
+
expect(dbl).to_not receive(:message)
|
|
31
|
+
dbl.message
|
|
32
|
+
end
|
|
19
33
|
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
def test_passing_positive_spy_expectation
|
|
35
|
+
bond = spy
|
|
36
|
+
bond.james
|
|
37
|
+
expect(bond).to have_received(:james)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_failing_positive_spy_expectation
|
|
41
|
+
bond = spy
|
|
42
|
+
expect(bond).to have_received(:james)
|
|
43
|
+
end
|
|
22
44
|
|
|
23
|
-
def
|
|
24
|
-
|
|
25
|
-
|
|
45
|
+
def test_passing_negative_spy_expectation
|
|
46
|
+
bond = spy
|
|
47
|
+
expect(bond).not_to have_received(:james)
|
|
26
48
|
end
|
|
27
49
|
|
|
28
|
-
def
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
::RSpec::Mocks.teardown
|
|
50
|
+
def test_failing_negative_spy_expectation
|
|
51
|
+
bond = spy
|
|
52
|
+
bond.james
|
|
53
|
+
expect(bond).not_to have_received(:james)
|
|
33
54
|
end
|
|
34
55
|
end
|
|
56
|
+
"""
|
|
57
|
+
When I run `ruby test/rspec_mocks_test.rb --seed 0`
|
|
58
|
+
Then it should fail with the following output:
|
|
59
|
+
| 1) Failure: |
|
|
60
|
+
| RSpecMocksTest#test_failing_positive_expectation |
|
|
61
|
+
| (Double (anonymous)).message(*(any args)) |
|
|
62
|
+
| expected: 1 time with any arguments |
|
|
63
|
+
| received: 0 times with any arguments |
|
|
64
|
+
| |
|
|
65
|
+
| 2) Failure: |
|
|
66
|
+
| RSpecMocksTest#test_failing_negative_expectation |
|
|
67
|
+
| (Double (anonymous)).message(no args) |
|
|
68
|
+
| expected: 0 times with any arguments |
|
|
69
|
+
| received: 1 time |
|
|
70
|
+
| |
|
|
71
|
+
| 3) Failure: |
|
|
72
|
+
| RSpecMocksTest#test_failing_positive_spy_expectation |
|
|
73
|
+
| (Double (anonymous)).james(*(any args)) |
|
|
74
|
+
| expected: 1 time with any arguments |
|
|
75
|
+
| received: 0 times with any arguments |
|
|
76
|
+
| |
|
|
77
|
+
| 4) Failure: |
|
|
78
|
+
| RSpecMocksTest#test_failing_negative_spy_expectation |
|
|
79
|
+
| (Double (anonymous)).james(no args) |
|
|
80
|
+
| expected: 0 times with any arguments |
|
|
81
|
+
| received: 1 time |
|
|
82
|
+
| |
|
|
83
|
+
| 8 runs, 0 assertions, 4 failures, 0 errors, 0 skips |
|
|
84
|
+
|
|
85
|
+
Scenario: Use rspec-mocks with Minitest::Spec
|
|
86
|
+
Given a file named "spec/rspec_mocks_spec.rb" with:
|
|
87
|
+
"""ruby
|
|
88
|
+
require 'minitest/autorun'
|
|
89
|
+
require 'minitest/spec'
|
|
90
|
+
require 'rspec/mocks/minitest_integration'
|
|
35
91
|
|
|
36
|
-
Minitest
|
|
92
|
+
describe "Minitest Spec integration" do
|
|
93
|
+
it 'passes a positive expectation' do
|
|
94
|
+
dbl = double
|
|
95
|
+
expect(dbl).to receive(:message)
|
|
96
|
+
dbl.message
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'fails a positive expectation' do
|
|
100
|
+
dbl = double
|
|
101
|
+
expect(dbl).to receive(:message)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it 'passes a negative expectation (using to_not)' do
|
|
105
|
+
dbl = double
|
|
106
|
+
expect(dbl).to_not receive(:message)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'fails a negative expectation (using not_to)' do
|
|
110
|
+
dbl = double
|
|
111
|
+
expect(dbl).not_to receive(:message)
|
|
112
|
+
dbl.message
|
|
113
|
+
end
|
|
114
|
+
end
|
|
37
115
|
"""
|
|
38
|
-
|
|
116
|
+
When I run `ruby spec/rspec_mocks_spec.rb --seed 0`
|
|
117
|
+
Then it should fail with the following output:
|
|
118
|
+
| 1) Failure: |
|
|
119
|
+
| Minitest Spec integration#test_0002_fails a positive expectation |
|
|
120
|
+
| (Double (anonymous)).message(*(any args)) |
|
|
121
|
+
| expected: 1 time with any arguments |
|
|
122
|
+
| received: 0 times with any arguments |
|
|
123
|
+
| |
|
|
124
|
+
| 2) Failure: |
|
|
125
|
+
| Minitest Spec integration#test_0004_fails a negative expectation (using not_to) |
|
|
126
|
+
| (Double (anonymous)).message(no args) |
|
|
127
|
+
| expected: 0 times with any arguments |
|
|
128
|
+
| received: 1 time |
|
|
129
|
+
| |
|
|
130
|
+
| 4 runs, 4 assertions, 2 failures, 0 errors, 0 skips |
|
|
131
|
+
|
|
132
|
+
Scenario: Load rspec-mocks before rspec-expectations, with Minitest::Spec
|
|
133
|
+
Given a file named "spec/rspec_mocks_spec.rb" with:
|
|
39
134
|
"""ruby
|
|
40
|
-
require '
|
|
135
|
+
require 'minitest/autorun'
|
|
136
|
+
require 'minitest/spec'
|
|
137
|
+
require 'rspec/mocks/minitest_integration'
|
|
138
|
+
require 'rspec/expectations/minitest_integration'
|
|
41
139
|
|
|
42
|
-
|
|
43
|
-
|
|
140
|
+
describe "Minitest Spec integration" do
|
|
141
|
+
it 'passes a positive expectation' do
|
|
44
142
|
dbl = double
|
|
45
143
|
expect(dbl).to receive(:message)
|
|
46
144
|
dbl.message
|
|
47
145
|
end
|
|
48
146
|
|
|
49
|
-
|
|
147
|
+
it 'fails a positive expectation' do
|
|
50
148
|
dbl = double
|
|
51
149
|
expect(dbl).to receive(:message)
|
|
52
150
|
end
|
|
53
151
|
|
|
54
|
-
|
|
152
|
+
it 'passes a negative expectation (using to_not)' do
|
|
55
153
|
dbl = double
|
|
56
154
|
expect(dbl).to_not receive(:message)
|
|
57
155
|
end
|
|
58
156
|
|
|
59
|
-
|
|
157
|
+
it 'fails a negative expectation (using not_to)' do
|
|
158
|
+
dbl = double
|
|
159
|
+
expect(dbl).not_to receive(:message)
|
|
160
|
+
dbl.message
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it 'can use both minitest and rspec expectations' do
|
|
164
|
+
expect(1 + 3).must_equal 4
|
|
165
|
+
expect(1 + 3).to eq 4
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
"""
|
|
169
|
+
When I run `ruby spec/rspec_mocks_spec.rb --seed 0`
|
|
170
|
+
Then it should fail with the following output:
|
|
171
|
+
| 1) Failure: |
|
|
172
|
+
| Minitest Spec integration#test_0002_fails a positive expectation |
|
|
173
|
+
| (Double (anonymous)).message(*(any args)) |
|
|
174
|
+
| expected: 1 time with any arguments |
|
|
175
|
+
| received: 0 times with any arguments |
|
|
176
|
+
| |
|
|
177
|
+
| 2) Failure: |
|
|
178
|
+
| Minitest Spec integration#test_0004_fails a negative expectation (using not_to) |
|
|
179
|
+
| (Double (anonymous)).message(no args) |
|
|
180
|
+
| expected: 0 times with any arguments |
|
|
181
|
+
| received: 1 time |
|
|
182
|
+
| |
|
|
183
|
+
| 5 runs, 6 assertions, 2 failures, 0 errors, 0 skips |
|
|
184
|
+
|
|
185
|
+
Scenario: Load rspec-mocks after rspec-expectations, with Minitest::Spec
|
|
186
|
+
Given a file named "spec/rspec_mocks_spec.rb" with:
|
|
187
|
+
"""ruby
|
|
188
|
+
require 'minitest/autorun'
|
|
189
|
+
require 'minitest/spec'
|
|
190
|
+
require 'rspec/expectations/minitest_integration'
|
|
191
|
+
require 'rspec/mocks/minitest_integration'
|
|
192
|
+
|
|
193
|
+
describe "Minitest Spec integration" do
|
|
194
|
+
it 'passes a positive expectation' do
|
|
195
|
+
dbl = double
|
|
196
|
+
expect(dbl).to receive(:message)
|
|
197
|
+
dbl.message
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'fails a positive expectation' do
|
|
201
|
+
dbl = double
|
|
202
|
+
expect(dbl).to receive(:message)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it 'passes a negative expectation (using to_not)' do
|
|
60
206
|
dbl = double
|
|
61
207
|
expect(dbl).to_not receive(:message)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'fails a negative expectation (using not_to)' do
|
|
211
|
+
dbl = double
|
|
212
|
+
expect(dbl).not_to receive(:message)
|
|
62
213
|
dbl.message
|
|
63
214
|
end
|
|
215
|
+
|
|
216
|
+
it 'can use both minitest and rspec expectations' do
|
|
217
|
+
expect(1 + 3).must_equal 4
|
|
218
|
+
expect(1 + 3).to eq 4
|
|
219
|
+
end
|
|
64
220
|
end
|
|
65
221
|
"""
|
|
66
|
-
When I run `ruby
|
|
222
|
+
When I run `ruby spec/rspec_mocks_spec.rb --seed 0`
|
|
67
223
|
Then it should fail with the following output:
|
|
68
|
-
| 1)
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
| expected:
|
|
72
|
-
| received:
|
|
73
|
-
|
|
|
74
|
-
| 2)
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
| expected:
|
|
78
|
-
| received:
|
|
79
|
-
|
|
|
80
|
-
|
|
|
224
|
+
| 1) Failure: |
|
|
225
|
+
| Minitest Spec integration#test_0002_fails a positive expectation |
|
|
226
|
+
| (Double (anonymous)).message(*(any args)) |
|
|
227
|
+
| expected: 1 time with any arguments |
|
|
228
|
+
| received: 0 times with any arguments |
|
|
229
|
+
| |
|
|
230
|
+
| 2) Failure: |
|
|
231
|
+
| Minitest Spec integration#test_0004_fails a negative expectation (using not_to) |
|
|
232
|
+
| (Double (anonymous)).message(no args) |
|
|
233
|
+
| expected: 0 times with any arguments |
|
|
234
|
+
| received: 1 time |
|
|
235
|
+
| |
|
|
236
|
+
| 5 runs, 6 assertions, 2 failures, 0 errors, 0 skips |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Feature: Standalone
|
|
2
2
|
|
|
3
3
|
`require "rspec/mocks/standalone"` to expose the API at the top level (e.g. `main`) outside
|
|
4
|
-
the RSpec environment
|
|
4
|
+
the RSpec environment in a REPL like IRB or in a one-off script.
|
|
5
5
|
|
|
6
6
|
Scenario: Allow a message outside RSpec
|
|
7
7
|
Given a file named "example.rb" with:
|
|
@@ -27,7 +27,7 @@ Feature: Standalone
|
|
|
27
27
|
"""
|
|
28
28
|
When I run `ruby example.rb`
|
|
29
29
|
Then it should fail with the following output:
|
|
30
|
-
| (Double "greeter").say_hi(any args)
|
|
31
|
-
| RSpec::Mocks::MockExpectationError
|
|
32
|
-
| expected: 1 time with any arguments
|
|
33
|
-
| received: 0 times with any arguments
|
|
30
|
+
| (Double "greeter").say_hi(*(any args)) |
|
|
31
|
+
| RSpec::Mocks::MockExpectationError |
|
|
32
|
+
| expected: 1 time with any arguments |
|
|
33
|
+
| received: 0 times with any arguments |
|
|
@@ -4,21 +4,23 @@ Feature: Matching arguments
|
|
|
4
4
|
will only be satisfied when called with matching arguments. A canned response for an
|
|
5
5
|
[allowed message](../basics/allowing-messages) will only be used when the arguments match.
|
|
6
6
|
|
|
7
|
-
| To match... | ...use an expression like:
|
|
8
|
-
| --------------------------------------------------- |
|
|
9
|
-
| Literal arguments | `with(1, true)`
|
|
10
|
-
| Anything that supports case equality (`===`) | `with(/bar/)`
|
|
11
|
-
| Any list of args | `with(any_args)`
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
| A
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
| An
|
|
21
|
-
|
|
|
7
|
+
| To match... | ...use an expression like: | ...which matches calls like: |
|
|
8
|
+
| --------------------------------------------------- | --------------------------------- | ------------------------------------- |
|
|
9
|
+
| Literal arguments | `with(1, true)` | `foo(1, true)` |
|
|
10
|
+
| Anything that supports case equality (`===`) | `with(/bar/)` | `foo("barn")` |
|
|
11
|
+
| Any list of args | `with(any_args)` | `foo()`<br>`foo(1)`<br>`foo(:bar, 2)` |
|
|
12
|
+
| Any sublist of args (like an arg splat) | `with(1, any_args)` | `foo(1)`<br>`foo(1, :bar, :bazz)` |
|
|
13
|
+
| An empty list of args | `with(no_args)` | `foo()` |
|
|
14
|
+
| Anything for a given positional arg | `with(3, anything)` | `foo(3, nil)`<br>`foo(3, :bar)` |
|
|
15
|
+
| Against an interface | `with(duck_type(:each))` | `foo([])` |
|
|
16
|
+
| A boolean | `with(3, boolean)` | `foo(3, true)`<br>`foo(3, false)` |
|
|
17
|
+
| A subset of a hash | `with(hash_including(:a => 1))` | `foo(:a => 1, :b => 2)` |
|
|
18
|
+
| An excluded subset of a hash | `with(hash_excluding(:a => 1))` | `foo(:b => 2)` |
|
|
19
|
+
| A subset of an array | `with(array_including(:a, :b))` | `foo([:a, :b, :c])` |
|
|
20
|
+
| An instance of a specific class | `with(instance_of(Integer))` | `foo(3)` |
|
|
21
|
+
| An object with a given module in its ancestors list | `with(kind_of(Numeric))` | `foo(3)` |
|
|
22
|
+
| An object with matching attributes | `with(having_attributes(:a => 1))` | `foo(:a => 1, :b => 2)` |
|
|
23
|
+
| Any RSpec matcher | `with(<matcher>)` | `foo(<object that matches>)` |
|
|
22
24
|
|
|
23
25
|
Scenario: Basic example
|
|
24
26
|
Given a file named "basic_example_spec.rb" with:
|
|
@@ -38,12 +40,37 @@ Feature: Matching arguments
|
|
|
38
40
|
"""
|
|
39
41
|
When I run `rspec basic_example_spec.rb`
|
|
40
42
|
Then it should fail with the following output:
|
|
41
|
-
| 2 examples, 1 failure
|
|
42
|
-
|
|
|
43
|
-
| Failure/Error: dbl.foo(1, nil, "other")
|
|
44
|
-
| Double received :foo with unexpected arguments |
|
|
45
|
-
| expected: (1, anything, /bar/)
|
|
46
|
-
| got: (1, nil, "other")
|
|
43
|
+
| 2 examples, 1 failure |
|
|
44
|
+
| |
|
|
45
|
+
| Failure/Error: dbl.foo(1, nil, "other") |
|
|
46
|
+
| #<Double (anonymous)> received :foo with unexpected arguments |
|
|
47
|
+
| expected: (1, anything, /bar/) |
|
|
48
|
+
| got: (1, nil, "other") |
|
|
49
|
+
|
|
50
|
+
Scenario: Using a RSpec matcher
|
|
51
|
+
Given a file named "rspec_matcher_spec.rb" with:
|
|
52
|
+
"""ruby
|
|
53
|
+
RSpec.describe "Using a RSpec matcher" do
|
|
54
|
+
let(:dbl) { double }
|
|
55
|
+
before { expect(dbl).to receive(:foo).with(a_collection_containing_exactly(1, 2)) }
|
|
56
|
+
|
|
57
|
+
it "passes when the args match" do
|
|
58
|
+
dbl.foo([2, 1])
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "fails when the args do not match" do
|
|
62
|
+
dbl.foo([1, 3])
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
"""
|
|
66
|
+
When I run `rspec rspec_matcher_spec.rb`
|
|
67
|
+
Then it should fail with the following output:
|
|
68
|
+
| 2 examples, 1 failure |
|
|
69
|
+
| |
|
|
70
|
+
| Failure/Error: dbl.foo([1, 3]) |
|
|
71
|
+
| #<Double (anonymous)> received :foo with unexpected arguments |
|
|
72
|
+
| expected: (a collection containing exactly 1 and 2) |
|
|
73
|
+
| got: ([1, 3]) |
|
|
47
74
|
|
|
48
75
|
Scenario: Using a custom matcher
|
|
49
76
|
Given a file named "custom_matcher_spec.rb" with:
|
|
@@ -67,12 +94,12 @@ Feature: Matching arguments
|
|
|
67
94
|
"""
|
|
68
95
|
When I run `rspec custom_matcher_spec.rb`
|
|
69
96
|
Then it should fail with the following output:
|
|
70
|
-
| 2 examples, 1 failure
|
|
71
|
-
|
|
|
72
|
-
| Failure/Error: dbl.foo(13)
|
|
73
|
-
| Double received :foo with unexpected arguments |
|
|
74
|
-
| expected: (a multiple of 3)
|
|
75
|
-
| got: (13)
|
|
97
|
+
| 2 examples, 1 failure |
|
|
98
|
+
| |
|
|
99
|
+
| Failure/Error: dbl.foo(13) |
|
|
100
|
+
| #<Double (anonymous)> received :foo with unexpected arguments |
|
|
101
|
+
| expected: (a multiple of 3) |
|
|
102
|
+
| got: (13) |
|
|
76
103
|
|
|
77
104
|
Scenario: Responding differently based on the arguments
|
|
78
105
|
Given a file named "responding_differently_spec.rb" with:
|
|
@@ -56,8 +56,8 @@ Feature: Message Order
|
|
|
56
56
|
Then the examples should all fail, producing the following output:
|
|
57
57
|
| 1) Constraining order fails when messages are received out of order on one collaborator |
|
|
58
58
|
| Failure/Error: collaborator_1.step_2 |
|
|
59
|
-
| Double "Collaborator 1" received :step_2 out of order
|
|
59
|
+
| #<Double "Collaborator 1"> received :step_2 out of order |
|
|
60
60
|
| |
|
|
61
61
|
| 2) Constraining order fails when messages are received out of order between collaborators |
|
|
62
62
|
| Failure/Error: collaborator_2.step_2 |
|
|
63
|
-
| Double "Collaborator 2" received :step_2 out of order
|
|
63
|
+
| #<Double "Collaborator 2"> received :step_2 out of order |
|
|
@@ -5,12 +5,15 @@ Feature: Receive Counts
|
|
|
5
5
|
|
|
6
6
|
* `expect(...).to receive(...).once`
|
|
7
7
|
* `expect(...).to receive(...).twice`
|
|
8
|
+
* `expect(...).to receive(...).exactly(n).time`
|
|
8
9
|
* `expect(...).to receive(...).exactly(n).times`
|
|
9
10
|
* `expect(...).to receive(...).at_least(:once)`
|
|
10
11
|
* `expect(...).to receive(...).at_least(:twice)`
|
|
12
|
+
* `expect(...).to receive(...).at_least(n).time`
|
|
11
13
|
* `expect(...).to receive(...).at_least(n).times`
|
|
12
14
|
* `expect(...).to receive(...).at_most(:once)`
|
|
13
15
|
* `expect(...).to receive(...).at_most(:twice)`
|
|
16
|
+
* `expect(...).to receive(...).at_most(n).time`
|
|
14
17
|
* `expect(...).to receive(...).at_most(n).times`
|
|
15
18
|
|
|
16
19
|
If you don't specify an expected receive count, it defaults to `once`.
|
|
@@ -49,6 +52,11 @@ Feature: Receive Counts
|
|
|
49
52
|
account.open
|
|
50
53
|
end
|
|
51
54
|
|
|
55
|
+
example "exactly(n).time" do
|
|
56
|
+
expect(logger).to receive(:account_opened).exactly(1).time
|
|
57
|
+
account.open
|
|
58
|
+
end
|
|
59
|
+
|
|
52
60
|
example "exactly(n).times" do
|
|
53
61
|
expect(logger).to receive(:account_opened).exactly(3).times
|
|
54
62
|
account.open
|
|
@@ -69,6 +77,11 @@ Feature: Receive Counts
|
|
|
69
77
|
account.open
|
|
70
78
|
end
|
|
71
79
|
|
|
80
|
+
example "at_least(n).time" do
|
|
81
|
+
expect(logger).to receive(:account_opened).at_least(1).time
|
|
82
|
+
account.open
|
|
83
|
+
end
|
|
84
|
+
|
|
72
85
|
example "at_least(n).times" do
|
|
73
86
|
expect(logger).to receive(:account_opened).at_least(3).times
|
|
74
87
|
account.open
|
|
@@ -86,6 +99,11 @@ Feature: Receive Counts
|
|
|
86
99
|
account.open
|
|
87
100
|
end
|
|
88
101
|
|
|
102
|
+
example "at_most(n).time" do
|
|
103
|
+
expect(logger).to receive(:account_opened).at_most(1).time
|
|
104
|
+
account.open
|
|
105
|
+
end
|
|
106
|
+
|
|
89
107
|
example "at_most(n).times" do
|
|
90
108
|
expect(logger).to receive(:account_opened).at_most(3).times
|
|
91
109
|
account.open
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Then /^the example(?:s)? should(?: all)? pass$/ do
|
|
2
|
-
step %q
|
|
3
|
-
step %q
|
|
2
|
+
step %q(the output should contain "0 failures")
|
|
3
|
+
step %q(the exit status should be 0)
|
|
4
4
|
end
|
|
5
5
|
|
|
6
6
|
Then /^the examples should all fail, producing the following output:$/ do |table|
|
|
7
|
-
step %q
|
|
7
|
+
step %q(the exit status should be 1)
|
|
8
8
|
examples, failures = all_output.match(/(\d+) examples?, (\d+) failures?/).captures.map(&:to_i)
|
|
9
9
|
|
|
10
10
|
expect(examples).to be > 0
|
|
@@ -15,7 +15,7 @@ Then /^the examples should all fail, producing the following output:$/ do |table
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
Then /^it should fail with the following output:$/ do |table|
|
|
18
|
-
step %q
|
|
18
|
+
step %q(the exit status should be 1)
|
|
19
19
|
lines = table.raw.flatten.reject(&:empty?)
|
|
20
20
|
expect(all_output).to include(*lines)
|
|
21
21
|
end
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
if defined?(Cucumber)
|
|
5
5
|
require 'shellwords'
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
tag = !defined?(::RUBY_ENGINE_VERSION) || (::RUBY_ENGINE_VERSION < '2.0.0') ? '~@allow-old-syntax' : 'not @allow-old-syntax'
|
|
7
|
+
Before(tag) do
|
|
8
|
+
set_environment_variable('SPEC_OPTS', "-r#{Shellwords.escape(__FILE__)}")
|
|
8
9
|
end
|
|
9
10
|
else
|
|
10
11
|
module DisallowOneLinerShould
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
require 'aruba/cucumber'
|
|
2
2
|
require 'rspec/expectations'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
if RUBY_PLATFORM =~ /java/ || defined?(Rubinius)
|
|
6
|
-
|
|
4
|
+
Aruba.configure do |config|
|
|
5
|
+
if RUBY_PLATFORM =~ /java/ || defined?(Rubinius) || (defined?(RUBY_ENGINE) && RUBY_ENGINE == 'truffleruby')
|
|
6
|
+
config.exit_timeout = 60
|
|
7
7
|
else
|
|
8
|
-
|
|
8
|
+
config.exit_timeout = 5
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
Before do
|
|
13
|
+
if RUBY_PLATFORM == 'java'
|
|
14
|
+
# disable JIT since these processes are so short lived
|
|
15
|
+
set_environment_variable('JRUBY_OPTS', "-X-C #{ENV['JRUBY_OPTS']}")
|
|
15
16
|
end
|
|
16
|
-
end if RUBY_PLATFORM == 'java'
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
if defined?(Rubinius)
|
|
19
|
+
# disable JIT since these processes are so short lived
|
|
20
|
+
set_environment_variable('RBXOPT', "-Xint=true #{ENV['RBXOPT']}")
|
|
21
21
|
end
|
|
22
|
-
end
|
|
22
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Required until https://github.com/rubinius/rubinius/issues/2430 is resolved
|
|
2
2
|
ENV['RBXOPT'] = "#{ENV["RBXOPT"]} -Xcompiler.no_rbc"
|
|
3
3
|
|
|
4
|
-
Around "@unsupported-on-rbx" do |
|
|
4
|
+
Around "@unsupported-on-rbx" do |_scenario, block|
|
|
5
5
|
block.call unless defined?(Rubinius)
|
|
6
6
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Verifying doubles are a stricter alternative to [normal doubles](./basics/test-doubles) that provide guarantees about
|
|
2
2
|
what is being verified. When using verifying doubles, RSpec will check that the methods
|
|
3
3
|
being stubbed are actually present on the underlying object if it is available. Prefer using
|
|
4
|
-
|
|
4
|
+
verifying doubles over normal doubles.
|
|
5
5
|
|
|
6
6
|
No checking will happen if the underlying object or class is not defined, but when run with
|
|
7
7
|
it present (either as a full spec run or by explicitly preloading collaborators) a failure will be
|
|
@@ -10,4 +10,4 @@ number of arguments.
|
|
|
10
10
|
|
|
11
11
|
This dual approach allows you to move very quickly and test components in isolation, while
|
|
12
12
|
giving you confidence that your doubles are not a complete fiction. Testing in isolation is
|
|
13
|
-
optional but
|
|
13
|
+
optional but recommended for classes that do not depend on third-party components.
|
|
@@ -67,4 +67,4 @@ Feature: Using a class double
|
|
|
67
67
|
"""
|
|
68
68
|
When I run `rspec spec/user_spec.rb`
|
|
69
69
|
Then the output should contain "1 example, 1 failure"
|
|
70
|
-
And the output should contain "ConsoleNotifier does not implement:"
|
|
70
|
+
And the output should contain "the ConsoleNotifier class does not implement the class method:"
|
|
@@ -2,13 +2,16 @@ Feature: Dynamic classes
|
|
|
2
2
|
|
|
3
3
|
Verifying instance doubles do not support methods which the class reports to not exist
|
|
4
4
|
since an actual instance of the class would be required to verify against. This is commonly
|
|
5
|
-
the case when `method_missing` is used.
|
|
6
|
-
methods from database columns.
|
|
5
|
+
the case when `method_missing` is used.
|
|
7
6
|
|
|
8
7
|
There are a few ways to work around this. If the object has already been loaded you may
|
|
9
|
-
consider using an [`object_double`](./using-an-object-double), but that cannot work if you
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
consider using an [`object_double`](./using-an-object-double), but that cannot work if you are testing in isolation.
|
|
9
|
+
Alternatively you could implement the methods directly (calling `super` to return the `method_missing` definition).
|
|
10
|
+
|
|
11
|
+
Some of these classes may have methods to define these methods on the objects at runtime.
|
|
12
|
+
(For example, `ActiveRecord` does this to define methods from database columns.) For these
|
|
13
|
+
cases we provide an API which can be used to customise verifying doubles on creation. We
|
|
14
|
+
use this ourselves in `rspec-rails` to set up some niceties for you.
|
|
12
15
|
|
|
13
16
|
These types of methods are supported at class level (with `class_double`) however, since
|
|
14
17
|
`respond_to?` can be queried directly on the class.
|
|
@@ -30,6 +33,12 @@ Feature: Dynamic classes
|
|
|
30
33
|
super
|
|
31
34
|
end
|
|
32
35
|
end
|
|
36
|
+
|
|
37
|
+
def self.define_attribute_methods
|
|
38
|
+
COLUMNS.each do |name|
|
|
39
|
+
define_method(name) { instance_variable_get("@#{name}") }
|
|
40
|
+
end
|
|
41
|
+
end
|
|
33
42
|
end
|
|
34
43
|
"""
|
|
35
44
|
|
|
@@ -71,3 +80,30 @@ Feature: Dynamic classes
|
|
|
71
80
|
|
|
72
81
|
When I run `rspec spec/user_spec.rb`
|
|
73
82
|
Then the examples should all pass
|
|
83
|
+
|
|
84
|
+
Scenario: workaround using callback
|
|
85
|
+
|
|
86
|
+
Given a file named "lib/user.rb" with:
|
|
87
|
+
"""ruby
|
|
88
|
+
require 'fake_active_record'
|
|
89
|
+
|
|
90
|
+
class User < FakeActiveRecord
|
|
91
|
+
end
|
|
92
|
+
"""
|
|
93
|
+
And a file named "spec/fake_record_helper.rb" with:
|
|
94
|
+
"""ruby
|
|
95
|
+
RSpec.configuration.mock_with(:rspec) do |config|
|
|
96
|
+
config.before_verifying_doubles do |reference|
|
|
97
|
+
reference.target.define_attribute_methods
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
#
|
|
101
|
+
# or you can use:
|
|
102
|
+
#
|
|
103
|
+
# RSpec::Mocks.configuration.before_verifying_doubles do |reference|
|
|
104
|
+
# reference.target.define_attribute_methods
|
|
105
|
+
# end
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
When I run `rspec -r fake_record_helper spec/user_spec.rb`
|
|
109
|
+
Then the examples should all pass
|