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,16 +1,19 @@
|
|
|
1
1
|
Feature: `include` matcher
|
|
2
2
|
|
|
3
|
-
Use the include matcher to specify that a collection includes one or more expected objects.
|
|
4
|
-
This works on any object that responds to #include? (such as a string or array):
|
|
3
|
+
Use the `include` matcher to specify that a collection includes one or more expected objects. It succeeds if any object of the given collection passes the specified matcher. This works on any object that responds to `#include?` (such as a string or array):
|
|
5
4
|
|
|
6
5
|
```ruby
|
|
7
6
|
expect("a string").to include("a")
|
|
8
|
-
expect("a string").to include(
|
|
7
|
+
expect("a string").to include(/a|str/).twice
|
|
9
8
|
expect("a string").to include("str", "g")
|
|
10
9
|
expect("a string").not_to include("foo")
|
|
11
10
|
|
|
12
11
|
expect([1, 2]).to include(1)
|
|
13
12
|
expect([1, 2]).to include(1, 2)
|
|
13
|
+
expect([1, 2]).to include(a_kind_of(Integer))
|
|
14
|
+
expect([1, 2]).to include(be_odd.and be < 10 )
|
|
15
|
+
expect([1, 2]).to include(be_odd)
|
|
16
|
+
expect([1, 2]).to include(be < 10).at_least(2).times
|
|
14
17
|
expect([1, 2]).not_to include(17)
|
|
15
18
|
```
|
|
16
19
|
|
|
@@ -21,6 +24,8 @@ Feature: `include` matcher
|
|
|
21
24
|
expect(:a => 1, :b => 2).to include(:a, :b)
|
|
22
25
|
expect(:a => 1, :b => 2).to include(:a => 1)
|
|
23
26
|
expect(:a => 1, :b => 2).to include(:b => 2, :a => 1)
|
|
27
|
+
expect(:a => 1, :b => 2).to include(match(/b/) => 2)
|
|
28
|
+
expect(:a => 1, :b => 2).to include(match(/b/) => be_even)
|
|
24
29
|
expect(:a => 1, :b => 2).not_to include(:c)
|
|
25
30
|
expect(:a => 1, :b => 2).not_to include(:a => 2)
|
|
26
31
|
expect(:a => 1, :b => 2).not_to include(:c => 3)
|
|
@@ -35,11 +40,17 @@ Feature: `include` matcher
|
|
|
35
40
|
it { is_expected.to include(7) }
|
|
36
41
|
it { is_expected.to include(1, 7) }
|
|
37
42
|
it { is_expected.to include(1, 3, 7) }
|
|
43
|
+
it { is_expected.to include(a_kind_of(Integer)) }
|
|
44
|
+
it { is_expected.to include(be_odd.and be < 10) }
|
|
45
|
+
it { is_expected.to include(be_odd).at_least(:twice) }
|
|
46
|
+
it { is_expected.not_to include(be_even) }
|
|
38
47
|
it { is_expected.not_to include(17) }
|
|
39
48
|
it { is_expected.not_to include(43, 100) }
|
|
40
49
|
|
|
41
50
|
# deliberate failures
|
|
42
51
|
it { is_expected.to include(4) }
|
|
52
|
+
it { is_expected.to include(be_even) }
|
|
53
|
+
it { is_expected.to include(be_odd).at_most(2).times }
|
|
43
54
|
it { is_expected.not_to include(1) }
|
|
44
55
|
it { is_expected.not_to include(3) }
|
|
45
56
|
it { is_expected.not_to include(7) }
|
|
@@ -52,14 +63,16 @@ Feature: `include` matcher
|
|
|
52
63
|
"""
|
|
53
64
|
When I run `rspec array_include_matcher_spec.rb`
|
|
54
65
|
Then the output should contain all of these:
|
|
55
|
-
|
|
|
56
|
-
| expected [1, 3, 7] to include 4
|
|
57
|
-
| expected [1, 3, 7]
|
|
58
|
-
| expected [1, 3, 7]
|
|
59
|
-
| expected [1, 3, 7] not to include
|
|
60
|
-
| expected [1, 3, 7] not to include
|
|
61
|
-
| expected [1, 3, 7] to include
|
|
62
|
-
| expected [1, 3, 7] not to include 1 and
|
|
66
|
+
| 20 examples, 9 failures |
|
|
67
|
+
| expected [1, 3, 7] to include 4 |
|
|
68
|
+
| expected [1, 3, 7] to include (be even) |
|
|
69
|
+
| expected [1, 3, 7] to include (be odd) at most twice but it is included 3 times |
|
|
70
|
+
| expected [1, 3, 7] not to include 1 |
|
|
71
|
+
| expected [1, 3, 7] not to include 3 |
|
|
72
|
+
| expected [1, 3, 7] not to include 7 |
|
|
73
|
+
| expected [1, 3, 7] not to include 1, 3, and 7 |
|
|
74
|
+
| expected [1, 3, 7] to include 9 |
|
|
75
|
+
| expected [1, 3, 7] not to include 1 |
|
|
63
76
|
|
|
64
77
|
Scenario: string usage
|
|
65
78
|
Given a file named "string_include_matcher_spec.rb" with:
|
|
@@ -67,23 +80,26 @@ Feature: `include` matcher
|
|
|
67
80
|
RSpec.describe "a string" do
|
|
68
81
|
it { is_expected.to include("str") }
|
|
69
82
|
it { is_expected.to include("a", "str", "ng") }
|
|
83
|
+
it { is_expected.to include(/a|str/).twice }
|
|
70
84
|
it { is_expected.not_to include("foo") }
|
|
71
85
|
it { is_expected.not_to include("foo", "bar") }
|
|
72
86
|
|
|
73
87
|
# deliberate failures
|
|
74
88
|
it { is_expected.to include("foo") }
|
|
75
89
|
it { is_expected.not_to include("str") }
|
|
90
|
+
it { is_expected.to include("str").at_least(:twice) }
|
|
76
91
|
it { is_expected.to include("str", "foo") }
|
|
77
92
|
it { is_expected.not_to include("str", "foo") }
|
|
78
93
|
end
|
|
79
94
|
"""
|
|
80
95
|
When I run `rspec string_include_matcher_spec.rb`
|
|
81
96
|
Then the output should contain all of these:
|
|
82
|
-
|
|
|
83
|
-
| expected "a string" to include "foo"
|
|
84
|
-
| expected "a string" not to include "str"
|
|
85
|
-
| expected "a string" to include "str"
|
|
86
|
-
| expected "a string"
|
|
97
|
+
| 10 examples, 5 failures |
|
|
98
|
+
| expected "a string" to include "foo" |
|
|
99
|
+
| expected "a string" not to include "str" |
|
|
100
|
+
| expected "a string" to include "str" at least twice but it is included once |
|
|
101
|
+
| expected "a string" to include "foo" |
|
|
102
|
+
| expected "a string" not to include "str" |
|
|
87
103
|
|
|
88
104
|
Scenario: hash usage
|
|
89
105
|
Given a file named "hash_include_matcher_spec.rb" with:
|
|
@@ -119,5 +135,46 @@ Feature: `include` matcher
|
|
|
119
135
|
end
|
|
120
136
|
"""
|
|
121
137
|
When I run `rspec hash_include_matcher_spec.rb`
|
|
122
|
-
Then the output should contain
|
|
138
|
+
Then the output should contain all of these:
|
|
139
|
+
| 22 examples, 13 failures |
|
|
140
|
+
| expected {:a => 7, :b => 5} not to include :a |
|
|
141
|
+
| expected {:a => 7, :b => 5} not to include :b and :a |
|
|
142
|
+
| expected {:a => 7, :b => 5} not to include {:a => 7} |
|
|
143
|
+
| expected {:a => 7, :b => 5} not to include {:a => 7, :b => 5} |
|
|
144
|
+
| expected {:a => 7, :b => 5} to include :c |
|
|
145
|
+
| expected {:a => 7, :b => 5} to include :c and :d |
|
|
146
|
+
| expected {:a => 7, :b => 5} to include {:d => 2} |
|
|
147
|
+
| expected {:a => 7, :b => 5} to include {:a => 5} |
|
|
148
|
+
| expected {:a => 7, :b => 5} to include {:a => 5, :b => 7} |
|
|
149
|
+
| expected {:a => 7, :b => 5} to include :d |
|
|
150
|
+
| expected {:a => 7, :b => 5} not to include :a |
|
|
151
|
+
| expected {:a => 7, :b => 5} to include {:d => 3} |
|
|
152
|
+
| expected {:a => 7, :b => 5} not to include {:a => 7} |
|
|
153
|
+
|
|
154
|
+
Scenario: counts usage
|
|
155
|
+
Given a file named "include_matcher_with_counts_spec.rb" with:
|
|
156
|
+
"""ruby
|
|
157
|
+
RSpec.describe [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] do
|
|
158
|
+
it { is_expected.to include(:b => 2).exactly(1).times }
|
|
159
|
+
it { is_expected.to include(:b => 2).once }
|
|
160
|
+
it { is_expected.to include(have_key(:a)).twice }
|
|
161
|
+
it { is_expected.to include(have_key(:c)).at_least(2).times }
|
|
162
|
+
it { is_expected.to include(have_key(:a)).at_least(:once) }
|
|
163
|
+
it { is_expected.to include(have_key(:c)).at_least(:twice) }
|
|
164
|
+
it { is_expected.to include(have_key(:d)).at_most(:once) }
|
|
165
|
+
it { is_expected.to include(have_key(:b)).at_most(:twice) }
|
|
123
166
|
|
|
167
|
+
# deliberate failures
|
|
168
|
+
it { is_expected.not_to include(have_key(:b)).once }
|
|
169
|
+
it { is_expected.not_to include(have_key(:a)).twice }
|
|
170
|
+
it { is_expected.not_to include(have_key(:c)).at_least(2).times }
|
|
171
|
+
it { is_expected.not_to include(have_key(:d)).at_most(:once) }
|
|
172
|
+
end
|
|
173
|
+
"""
|
|
174
|
+
When I run `rspec include_matcher_with_counts_spec.rb`
|
|
175
|
+
Then the output should contain all of these:
|
|
176
|
+
| 12 examples, 4 failures |
|
|
177
|
+
| expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :b) once |
|
|
178
|
+
| expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :a) twice |
|
|
179
|
+
| expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :c) at least twice |
|
|
180
|
+
| expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :d) at most once |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Feature: `match` matcher
|
|
2
2
|
|
|
3
|
-
The match matcher calls `#match` on the object, passing if `#match` returns a truthy (not
|
|
4
|
-
`false` or `nil`) value.
|
|
3
|
+
The `match` matcher calls `#match` on the object, passing if `#match` returns a truthy (not
|
|
4
|
+
`false` or `nil`) value. `Regexp` and `String` both provide a `#match` method.
|
|
5
5
|
|
|
6
6
|
```ruby
|
|
7
7
|
expect("a string").to match(/str/) # passes
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
Feature: `output` matcher
|
|
2
2
|
|
|
3
|
-
The `output` matcher provides a way to assert that the has emitted content to either
|
|
3
|
+
The `output` matcher provides a way to assert that the block has emitted content to either
|
|
4
4
|
`$stdout` or `$stderr`.
|
|
5
5
|
|
|
6
6
|
With no arg, passes if the block outputs `to_stdout` or `to_stderr`. With a string, passes
|
|
7
7
|
if the blocks outputs that specific string `to_stdout` or `to_stderr`. With a regexp or
|
|
8
8
|
matcher, passes if the blocks outputs a string `to_stdout` or `to_stderr` that matches.
|
|
9
9
|
|
|
10
|
-
Note:
|
|
11
|
-
to intercept stream output that explicitly uses `STDOUT`/`STDERR` or that
|
|
12
|
-
to `$stdout`/`$stderr` that was stored before the matcher is used.
|
|
10
|
+
Note: `to_stdout` and `to_stderr` work by temporarily replacing `$stdout` or `$stderr`, so
|
|
11
|
+
they're not able to intercept stream output that explicitly uses `STDOUT`/`STDERR` or that
|
|
12
|
+
uses a reference to `$stdout`/`$stderr` that was stored before the matcher is used.
|
|
13
|
+
|
|
14
|
+
To capture output from any spawned subprocess as well, use `to_stdout_from_any_process`
|
|
15
|
+
or `to_stderr_from_any_process`. Output from any process that inherits the main process's
|
|
16
|
+
corresponding standard stream will be captured.
|
|
17
|
+
|
|
18
|
+
Note: `to_stdout_from_any_process` and `to_stderr_from_any_process` use tempfiles to
|
|
19
|
+
capture output, and are thus significantly (~30x) slower than `to_stdout` and `to_stderr`.
|
|
13
20
|
|
|
14
21
|
Scenario: output_to_stdout matcher
|
|
15
22
|
Given a file named "output_to_stdout_spec.rb" with:
|
|
@@ -66,3 +73,59 @@ Feature: `output` matcher
|
|
|
66
73
|
| expected block to output "bar" to stderr, but output "foo\n" |
|
|
67
74
|
| expected block to output "foo" to stderr, but output nothing |
|
|
68
75
|
| expected block to output /bar/ to stderr, but output "foo\n" |
|
|
76
|
+
|
|
77
|
+
Scenario: output_to_stdout_from_any_process matcher
|
|
78
|
+
Given a file named "output_to_stdout_from_any_process_spec.rb" with:
|
|
79
|
+
"""ruby
|
|
80
|
+
RSpec.describe "output.to_stdout_from_any_process matcher" do
|
|
81
|
+
specify { expect { system('printf foo') }.to output.to_stdout_from_any_process }
|
|
82
|
+
specify { expect { system('printf foo') }.to output("foo").to_stdout_from_any_process }
|
|
83
|
+
specify { expect { system('printf foo') }.to output(/foo/).to_stdout_from_any_process }
|
|
84
|
+
specify { expect { }.to_not output.to_stdout_from_any_process }
|
|
85
|
+
specify { expect { system('printf foo') }.to_not output("bar").to_stdout_from_any_process }
|
|
86
|
+
specify { expect { system('printf foo') }.to_not output(/bar/).to_stdout_from_any_process }
|
|
87
|
+
|
|
88
|
+
# deliberate failures
|
|
89
|
+
specify { expect { }.to output.to_stdout_from_any_process }
|
|
90
|
+
specify { expect { }.to output('foo').to_stdout_from_any_process }
|
|
91
|
+
specify { expect { system('printf foo') }.to_not output.to_stdout_from_any_process }
|
|
92
|
+
specify { expect { system('printf foo') }.to output('bar').to_stdout_from_any_process }
|
|
93
|
+
specify { expect { system('printf foo') }.to output(/bar/).to_stdout_from_any_process }
|
|
94
|
+
end
|
|
95
|
+
"""
|
|
96
|
+
When I run `rspec output_to_stdout_from_any_process_spec.rb`
|
|
97
|
+
Then the output should contain all of these:
|
|
98
|
+
| 11 examples, 5 failures |
|
|
99
|
+
| expected block to output to stdout, but did not |
|
|
100
|
+
| expected block to not output to stdout, but output "foo" |
|
|
101
|
+
| expected block to output "bar" to stdout, but output "foo" |
|
|
102
|
+
| expected block to output "foo" to stdout, but output nothing |
|
|
103
|
+
| expected block to output /bar/ to stdout, but output "foo" |
|
|
104
|
+
|
|
105
|
+
Scenario: output_to_stderr_from_any_process matcher
|
|
106
|
+
Given a file named "output_to_stderr_from_any_process_spec.rb" with:
|
|
107
|
+
"""ruby
|
|
108
|
+
RSpec.describe "output.to_stderr_from_any_process matcher" do
|
|
109
|
+
specify { expect { system('printf foo 1>&2') }.to output.to_stderr_from_any_process }
|
|
110
|
+
specify { expect { system('printf foo 1>&2') }.to output("foo").to_stderr_from_any_process }
|
|
111
|
+
specify { expect { system('printf foo 1>&2') }.to output(/foo/).to_stderr_from_any_process }
|
|
112
|
+
specify { expect { }.to_not output.to_stderr_from_any_process }
|
|
113
|
+
specify { expect { system('printf foo 1>&2') }.to_not output("bar").to_stderr_from_any_process }
|
|
114
|
+
specify { expect { system('printf foo 1>&2') }.to_not output(/bar/).to_stderr_from_any_process }
|
|
115
|
+
|
|
116
|
+
# deliberate failures
|
|
117
|
+
specify { expect { }.to output.to_stderr_from_any_process }
|
|
118
|
+
specify { expect { }.to output('foo').to_stderr_from_any_process }
|
|
119
|
+
specify { expect { system('printf foo 1>&2') }.to_not output.to_stderr_from_any_process }
|
|
120
|
+
specify { expect { system('printf foo 1>&2') }.to output('bar').to_stderr_from_any_process }
|
|
121
|
+
specify { expect { system('printf foo 1>&2') }.to output(/bar/).to_stderr_from_any_process }
|
|
122
|
+
end
|
|
123
|
+
"""
|
|
124
|
+
When I run `rspec output_to_stderr_from_any_process_spec.rb`
|
|
125
|
+
Then the output should contain all of these:
|
|
126
|
+
| 11 examples, 5 failures |
|
|
127
|
+
| expected block to output to stderr, but did not |
|
|
128
|
+
| expected block to not output to stderr, but output "foo" |
|
|
129
|
+
| expected block to output "bar" to stderr, but output "foo" |
|
|
130
|
+
| expected block to output "foo" to stderr, but output nothing |
|
|
131
|
+
| expected block to output /bar/ to stderr, but output "foo" |
|
|
@@ -39,7 +39,7 @@ Feature: Predicate matchers
|
|
|
39
39
|
|
|
40
40
|
In either case, RSpec provides nice, clear error messages, such as:
|
|
41
41
|
|
|
42
|
-
`expected zero? to
|
|
42
|
+
`expected zero? to be truthy, got false`
|
|
43
43
|
|
|
44
44
|
Calling private methods will also fail:
|
|
45
45
|
|
|
@@ -47,7 +47,7 @@ Feature: Predicate matchers
|
|
|
47
47
|
|
|
48
48
|
Any arguments passed to the matcher will be passed on to the predicate method.
|
|
49
49
|
|
|
50
|
-
Scenario: should be_zero (based on
|
|
50
|
+
Scenario: should be_zero (based on Integer#zero?)
|
|
51
51
|
Given a file named "should_be_zero_spec.rb" with:
|
|
52
52
|
"""ruby
|
|
53
53
|
RSpec.describe 0 do
|
|
@@ -60,7 +60,7 @@ Feature: Predicate matchers
|
|
|
60
60
|
"""
|
|
61
61
|
When I run `rspec should_be_zero_spec.rb`
|
|
62
62
|
Then the output should contain "2 examples, 1 failure"
|
|
63
|
-
And the output should contain "expected `7.zero?` to
|
|
63
|
+
And the output should contain "expected `7.zero?` to be truthy, got false"
|
|
64
64
|
|
|
65
65
|
Scenario: should_not be_empty (based on Array#empty?)
|
|
66
66
|
Given a file named "should_not_be_empty_spec.rb" with:
|
|
@@ -75,7 +75,7 @@ Feature: Predicate matchers
|
|
|
75
75
|
"""
|
|
76
76
|
When I run `rspec should_not_be_empty_spec.rb`
|
|
77
77
|
Then the output should contain "2 examples, 1 failure"
|
|
78
|
-
And the output should contain "expected `[].empty?` to
|
|
78
|
+
And the output should contain "expected `[].empty?` to be falsey, got true"
|
|
79
79
|
|
|
80
80
|
Scenario: should have_key (based on Hash#has_key?)
|
|
81
81
|
Given a file named "should_have_key_spec.rb" with:
|
|
@@ -88,37 +88,38 @@ Feature: Predicate matchers
|
|
|
88
88
|
"""
|
|
89
89
|
When I run `rspec should_have_key_spec.rb`
|
|
90
90
|
Then the output should contain "2 examples, 1 failure"
|
|
91
|
-
And the output should contain "expected
|
|
91
|
+
And the output should contain "expected `{:foo=>7}.has_key?(:bar)` to be truthy, got false"
|
|
92
92
|
|
|
93
93
|
Scenario: should_not have_all_string_keys (based on custom #has_all_string_keys? method)
|
|
94
94
|
Given a file named "should_not_have_all_string_keys_spec.rb" with:
|
|
95
95
|
"""ruby
|
|
96
|
-
class
|
|
97
|
-
def
|
|
98
|
-
|
|
96
|
+
class Float
|
|
97
|
+
def has_decimals?
|
|
98
|
+
round != self
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
-
RSpec.describe
|
|
103
|
-
context 'with
|
|
104
|
-
subject {
|
|
105
|
-
|
|
102
|
+
RSpec.describe Float do
|
|
103
|
+
context 'with decimals' do
|
|
104
|
+
subject { 4.2 }
|
|
105
|
+
|
|
106
|
+
it { is_expected.to have_decimals }
|
|
106
107
|
end
|
|
107
108
|
|
|
108
|
-
context 'with
|
|
109
|
-
subject {
|
|
110
|
-
it { is_expected.
|
|
109
|
+
context 'with no decimals' do
|
|
110
|
+
subject { 42.0 }
|
|
111
|
+
it { is_expected.to have_decimals } # deliberate failure
|
|
111
112
|
end
|
|
112
113
|
end
|
|
113
114
|
"""
|
|
114
115
|
When I run `rspec should_not_have_all_string_keys_spec.rb`
|
|
115
116
|
Then the output should contain "2 examples, 1 failure"
|
|
116
|
-
And the output should contain "expected
|
|
117
|
+
And the output should contain "expected `42.0.has_decimals?` to be truthy, got false"
|
|
117
118
|
|
|
118
119
|
Scenario: matcher arguments are passed on to the predicate method
|
|
119
120
|
Given a file named "predicate_matcher_argument_spec.rb" with:
|
|
120
121
|
"""ruby
|
|
121
|
-
class
|
|
122
|
+
class Integer
|
|
122
123
|
def multiple_of?(x)
|
|
123
124
|
(self % x).zero?
|
|
124
125
|
end
|
|
@@ -135,8 +136,44 @@ Feature: Predicate matchers
|
|
|
135
136
|
"""
|
|
136
137
|
When I run `rspec predicate_matcher_argument_spec.rb`
|
|
137
138
|
Then the output should contain "4 examples, 2 failures"
|
|
138
|
-
And the output should contain "expected `12.multiple_of?(4)` to
|
|
139
|
-
And the output should contain "expected `12.multiple_of?(5)` to
|
|
139
|
+
And the output should contain "expected `12.multiple_of?(4)` to be falsey, got true"
|
|
140
|
+
And the output should contain "expected `12.multiple_of?(5)` to be truthy, got false"
|
|
141
|
+
|
|
142
|
+
Scenario: the config `strict_predicate_matchers` impacts matching of results other than `true` and `false`
|
|
143
|
+
Given a file named "strict_or_not.rb" with:
|
|
144
|
+
"""ruby
|
|
145
|
+
class StrangeResult
|
|
146
|
+
def has_strange_result?
|
|
147
|
+
42
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
RSpec.describe StrangeResult do
|
|
152
|
+
subject { StrangeResult.new }
|
|
153
|
+
|
|
154
|
+
before do
|
|
155
|
+
RSpec.configure do |config|
|
|
156
|
+
config.expect_with :rspec do |expectations|
|
|
157
|
+
expectations.strict_predicate_matchers = strict
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
context 'with non-strict matchers (default)' do
|
|
163
|
+
let(:strict) { false }
|
|
164
|
+
it { is_expected.to have_strange_result }
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
context 'with strict matchers' do
|
|
168
|
+
let(:strict) { true }
|
|
169
|
+
# deliberate failure
|
|
170
|
+
it { is_expected.to have_strange_result }
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
"""
|
|
174
|
+
When I run `rspec strict_or_not.rb`
|
|
175
|
+
Then the output should contain "2 examples, 1 failure"
|
|
176
|
+
And the output should contain "has_strange_result?` to return true, got 42"
|
|
140
177
|
|
|
141
178
|
Scenario: calling private method with be_predicate causes error
|
|
142
179
|
Given a file named "attempting_to_match_private_method_spec.rb" with:
|
|
@@ -26,6 +26,7 @@ Feature: `raise_error` matcher
|
|
|
26
26
|
expect { raise "oops" }.to raise_error(/op/)
|
|
27
27
|
expect { raise "oops" }.to raise_error(RuntimeError, "oops")
|
|
28
28
|
expect { raise "oops" }.to raise_error(RuntimeError, /op/)
|
|
29
|
+
expect { raise "oops" }.to raise_error(an_instance_of(RuntimeError).and having_attributes(message: "oops"))
|
|
29
30
|
```
|
|
30
31
|
|
|
31
32
|
Scenario: expect any error
|
|
@@ -91,7 +92,7 @@ Feature: `raise_error` matcher
|
|
|
91
92
|
When I run `rspec example_spec.rb`
|
|
92
93
|
Then the example should pass
|
|
93
94
|
|
|
94
|
-
Scenario: match
|
|
95
|
+
Scenario: match class + message with string
|
|
95
96
|
Given a file named "example_spec.rb" with:
|
|
96
97
|
"""ruby
|
|
97
98
|
RSpec.describe "matching error message with string" do
|
|
@@ -104,7 +105,7 @@ Feature: `raise_error` matcher
|
|
|
104
105
|
When I run `rspec example_spec.rb`
|
|
105
106
|
Then the example should pass
|
|
106
107
|
|
|
107
|
-
Scenario: match
|
|
108
|
+
Scenario: match class + message with regexp
|
|
108
109
|
Given a file named "example_spec.rb" with:
|
|
109
110
|
"""ruby
|
|
110
111
|
RSpec.describe "matching error message with regex" do
|
|
@@ -131,6 +132,19 @@ Feature: `raise_error` matcher
|
|
|
131
132
|
When I run `rspec example_spec`
|
|
132
133
|
Then the example should pass
|
|
133
134
|
|
|
135
|
+
Scenario: set expectations on error object with chained matchers
|
|
136
|
+
Given a file named "example_spec" with:
|
|
137
|
+
"""
|
|
138
|
+
RSpec.describe "composing matchers" do
|
|
139
|
+
it "raises StandardError" do
|
|
140
|
+
expect { raise StandardError, "my message" }.
|
|
141
|
+
to raise_error(an_instance_of(StandardError).and having_attributes({"message" => "my message"}))
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
"""
|
|
145
|
+
When I run `rspec example_spec`
|
|
146
|
+
Then the example should pass
|
|
147
|
+
|
|
134
148
|
Scenario: expect no error at all
|
|
135
149
|
Given a file named "example_spec" with:
|
|
136
150
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Feature: `respond_to` matcher
|
|
2
2
|
|
|
3
|
-
Use the respond_to matcher to specify details of an object's interface.
|
|
3
|
+
Use the `respond_to` matcher to specify details of an object's interface. In its most basic form:
|
|
4
4
|
|
|
5
5
|
```ruby
|
|
6
6
|
expect(obj).to respond_to(:foo) # pass if obj.respond_to?(:foo)
|
|
@@ -19,10 +19,21 @@ Feature: `respond_to` matcher
|
|
|
19
19
|
```ruby
|
|
20
20
|
expect(obj).to respond_to(:foo).with(1).argument
|
|
21
21
|
expect(obj).to respond_to(:bar).with(2).arguments
|
|
22
|
+
expect(obj).to respond_to(:baz).with(1..2).arguments
|
|
23
|
+
expect(obj).to respond_to(:xyz).with_unlimited_arguments
|
|
22
24
|
```
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
If your Ruby version supports keyword arguments, you can specify a list of keywords accepted
|
|
27
|
+
by the method.
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
expect(obj).to respond_to(:foo).with_keywords(:ichi, :ni)
|
|
31
|
+
expect(obj).to respond_to(:bar).with(2).arguments.and_keywords(:san, :yon)
|
|
32
|
+
expect(obj).to respond_to(:baz).with_arbitrary_keywords
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Note that this matcher relies entirely upon `#respond_to?`. If an object dynamically responds
|
|
36
|
+
to a message via `#method_missing`, but does not indicate this via `#respond_to?`, then this
|
|
26
37
|
matcher will give you false results.
|
|
27
38
|
|
|
28
39
|
Scenario: basic usage
|
|
@@ -81,3 +92,180 @@ Feature: `respond_to` matcher
|
|
|
81
92
|
| expected 7 not to respond to :zero? with 0 arguments |
|
|
82
93
|
| expected 7 to respond to :between? with 7 arguments |
|
|
83
94
|
| expected 7 not to respond to :between? with 2 arguments |
|
|
95
|
+
|
|
96
|
+
@skip-when-splat-args-unsupported
|
|
97
|
+
Scenario: specify arguments range
|
|
98
|
+
Given a file named "respond_to_matcher_argument_range_checking_spec.rb" with:
|
|
99
|
+
"""ruby
|
|
100
|
+
class MyClass
|
|
101
|
+
def build(name, options = {})
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def inspect
|
|
105
|
+
'my_object'
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
RSpec.describe MyClass do
|
|
110
|
+
it { is_expected.to respond_to(:build).with(1..2).arguments }
|
|
111
|
+
it { is_expected.not_to respond_to(:build).with(0..1).arguments }
|
|
112
|
+
it { is_expected.not_to respond_to(:build).with(2..3).arguments }
|
|
113
|
+
it { is_expected.not_to respond_to(:build).with(0..3).arguments }
|
|
114
|
+
|
|
115
|
+
# deliberate failures
|
|
116
|
+
it { is_expected.not_to respond_to(:build).with(1..2).arguments }
|
|
117
|
+
it { is_expected.to respond_to(:build).with(0..1).arguments }
|
|
118
|
+
it { is_expected.to respond_to(:build).with(2..3).arguments }
|
|
119
|
+
it { is_expected.to respond_to(:build).with(0..3).arguments }
|
|
120
|
+
end
|
|
121
|
+
"""
|
|
122
|
+
When I run `rspec respond_to_matcher_argument_range_checking_spec.rb`
|
|
123
|
+
Then the output should contain all of these:
|
|
124
|
+
| 8 examples, 4 failures |
|
|
125
|
+
| expected my_object not to respond to :build with 1..2 arguments |
|
|
126
|
+
| expected my_object to respond to :build with 0..1 arguments |
|
|
127
|
+
| expected my_object to respond to :build with 2..3 arguments |
|
|
128
|
+
| expected my_object to respond to :build with 0..3 arguments |
|
|
129
|
+
|
|
130
|
+
@skip-when-splat-args-unsupported
|
|
131
|
+
Scenario: specify unlimited arguments
|
|
132
|
+
Given a file named "respond_to_matcher_unlimited_argument_checking_spec.rb" with:
|
|
133
|
+
"""ruby
|
|
134
|
+
class MyClass
|
|
135
|
+
def greet(message = 'Hello', *people)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def hail(person)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def inspect
|
|
142
|
+
'my_object'
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
RSpec.describe MyClass do
|
|
147
|
+
it { is_expected.to respond_to(:greet).with_unlimited_arguments }
|
|
148
|
+
it { is_expected.to respond_to(:greet).with(1).argument.and_unlimited_arguments }
|
|
149
|
+
it { is_expected.not_to respond_to(:hail).with_unlimited_arguments }
|
|
150
|
+
it { is_expected.not_to respond_to(:hail).with(1).argument.and_unlimited_arguments }
|
|
151
|
+
|
|
152
|
+
# deliberate failures
|
|
153
|
+
it { is_expected.not_to respond_to(:greet).with_unlimited_arguments }
|
|
154
|
+
it { is_expected.not_to respond_to(:greet).with(1).argument.and_unlimited_arguments }
|
|
155
|
+
it { is_expected.to respond_to(:hail).with_unlimited_arguments }
|
|
156
|
+
it { is_expected.to respond_to(:hail).with(1).argument.and_unlimited_arguments }
|
|
157
|
+
end
|
|
158
|
+
"""
|
|
159
|
+
When I run `rspec respond_to_matcher_unlimited_argument_checking_spec.rb`
|
|
160
|
+
Then the output should contain all of these:
|
|
161
|
+
| 8 examples, 4 failures |
|
|
162
|
+
| expected my_object not to respond to :greet with unlimited arguments |
|
|
163
|
+
| expected my_object not to respond to :greet with 1 argument and unlimited arguments |
|
|
164
|
+
| expected my_object to respond to :hail with unlimited arguments |
|
|
165
|
+
| expected my_object to respond to :hail with 1 argument and unlimited arguments |
|
|
166
|
+
|
|
167
|
+
@skip-when-keyword-args-unsupported
|
|
168
|
+
Scenario: specify keywords
|
|
169
|
+
Given a file named "respond_to_matcher_keyword_checking_spec.rb" with:
|
|
170
|
+
"""ruby
|
|
171
|
+
class MyClass
|
|
172
|
+
def find(name = 'id', limit: 1_000, offset: 0)
|
|
173
|
+
[]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def inspect
|
|
177
|
+
'my_object'
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
RSpec.describe MyClass do
|
|
182
|
+
it { is_expected.to respond_to(:find).with_keywords(:limit, :offset) }
|
|
183
|
+
it { is_expected.to respond_to(:find).with(1).argument.and_keywords(:limit, :offset) }
|
|
184
|
+
|
|
185
|
+
it { is_expected.not_to respond_to(:find).with_keywords(:limit, :offset, :page) }
|
|
186
|
+
it { is_expected.not_to respond_to(:find).with(1).argument.and_keywords(:limit, :offset, :page) }
|
|
187
|
+
|
|
188
|
+
# deliberate failures
|
|
189
|
+
it { is_expected.to respond_to(:find).with_keywords(:limit, :offset, :page) }
|
|
190
|
+
it { is_expected.to respond_to(:find).with(1).argument.and_keywords(:limit, :offset, :page) }
|
|
191
|
+
|
|
192
|
+
it { is_expected.not_to respond_to(:find).with_keywords(:limit, :offset) }
|
|
193
|
+
it { is_expected.not_to respond_to(:find).with(1).argument.and_keywords(:limit, :offset) }
|
|
194
|
+
end
|
|
195
|
+
"""
|
|
196
|
+
When I run `rspec respond_to_matcher_keyword_checking_spec.rb`
|
|
197
|
+
Then the output should contain all of these:
|
|
198
|
+
| 8 examples, 4 failures |
|
|
199
|
+
| expected my_object to respond to :find with keywords :limit, :offset, and :page |
|
|
200
|
+
| expected my_object to respond to :find with 1 argument and keywords :limit, :offset, and :page |
|
|
201
|
+
| expected my_object not to respond to :find with keywords :limit and :offset |
|
|
202
|
+
| expected my_object not to respond to :find with 1 argument and keywords :limit and :offset |
|
|
203
|
+
|
|
204
|
+
@skip-when-keyword-args-unsupported
|
|
205
|
+
Scenario: specify any keywords
|
|
206
|
+
Given a file named "respond_to_matcher_any_keywords_checking_spec.rb" with:
|
|
207
|
+
"""ruby
|
|
208
|
+
class MyClass
|
|
209
|
+
def build(name: 'object', **opts)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def create(name: 'object', type: String)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def inspect
|
|
216
|
+
'my_object'
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
RSpec.describe MyClass do
|
|
221
|
+
it { is_expected.to respond_to(:build).with_any_keywords }
|
|
222
|
+
it { is_expected.to respond_to(:build).with_keywords(:name).and_any_keywords }
|
|
223
|
+
it { is_expected.not_to respond_to(:create).with_any_keywords }
|
|
224
|
+
it { is_expected.not_to respond_to(:create).with_keywords(:name).and_any_keywords }
|
|
225
|
+
|
|
226
|
+
# deliberate failures
|
|
227
|
+
it { is_expected.not_to respond_to(:build).with_any_keywords }
|
|
228
|
+
it { is_expected.not_to respond_to(:build).with_keywords(:name).and_any_keywords }
|
|
229
|
+
it { is_expected.to respond_to(:create).with_any_keywords }
|
|
230
|
+
it { is_expected.to respond_to(:create).with_keywords(:name).and_any_keywords }
|
|
231
|
+
end
|
|
232
|
+
"""
|
|
233
|
+
When I run `rspec respond_to_matcher_any_keywords_checking_spec.rb`
|
|
234
|
+
Then the output should contain all of these:
|
|
235
|
+
| 8 examples, 4 failures |
|
|
236
|
+
| expected my_object not to respond to :build with any keywords |
|
|
237
|
+
| expected my_object not to respond to :build with keyword :name and any keywords |
|
|
238
|
+
| expected my_object to respond to :create with any keywords |
|
|
239
|
+
| expected my_object to respond to :create with keyword :name and any keywords |
|
|
240
|
+
|
|
241
|
+
@skip-when-required-keyword-args-unsupported
|
|
242
|
+
Scenario: specify required keywords
|
|
243
|
+
Given a file named "respond_to_matcher_required_keyword_checking_spec.rb" with:
|
|
244
|
+
"""ruby
|
|
245
|
+
class MyClass
|
|
246
|
+
def plant(seed:, fertilizer: nil, water: 'daily')
|
|
247
|
+
[]
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def inspect
|
|
251
|
+
'my_object'
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
RSpec.describe MyClass do
|
|
256
|
+
it { is_expected.to respond_to(:plant).with_keywords(:seed) }
|
|
257
|
+
it { is_expected.to respond_to(:plant).with_keywords(:seed, :fertilizer, :water) }
|
|
258
|
+
it { is_expected.not_to respond_to(:plant).with_keywords(:fertilizer, :water) }
|
|
259
|
+
|
|
260
|
+
# deliberate failures
|
|
261
|
+
it { is_expected.not_to respond_to(:plant).with_keywords(:seed) }
|
|
262
|
+
it { is_expected.not_to respond_to(:plant).with_keywords(:seed, :fertilizer, :water) }
|
|
263
|
+
it { is_expected.to respond_to(:plant).with_keywords(:fertilizer, :water) }
|
|
264
|
+
end
|
|
265
|
+
"""
|
|
266
|
+
When I run `rspec respond_to_matcher_required_keyword_checking_spec.rb`
|
|
267
|
+
Then the output should contain all of these:
|
|
268
|
+
| 6 examples, 3 failures |
|
|
269
|
+
| expected my_object not to respond to :plant with keyword :seed |
|
|
270
|
+
| expected my_object not to respond to :plant with keywords :seed, :fertilizer, and :water |
|
|
271
|
+
| expected my_object to respond to :plant with keywords :fertilizer and :water |
|