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,25 @@
|
|
|
1
|
-
# rspec-core [](https://github.com/rspec/rspec-core/actions) [](https://codeclimate.com/github/rspec/rspec-core)
|
|
2
2
|
|
|
3
3
|
rspec-core provides the structure for writing executable examples of how your
|
|
4
4
|
code should behave, and an `rspec` command with tools to constrain which
|
|
5
5
|
examples get run and tailor the output.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Install
|
|
8
8
|
|
|
9
9
|
gem install rspec # for rspec-core, rspec-expectations, rspec-mocks
|
|
10
10
|
gem install rspec-core # for rspec-core only
|
|
11
11
|
rspec --help
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Want to run against the `main` branch? You'll need to include the dependent
|
|
14
|
+
RSpec repos as well. Add the following to your `Gemfile`:
|
|
15
|
+
|
|
16
|
+
```ruby
|
|
17
|
+
%w[rspec rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
|
|
18
|
+
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'main'
|
|
19
|
+
end
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Basic Structure
|
|
14
23
|
|
|
15
24
|
RSpec uses the words "describe" and "it" so we can express concepts like a conversation:
|
|
16
25
|
|
|
@@ -21,6 +30,7 @@ RSpec uses the words "describe" and "it" so we can express concepts like a conve
|
|
|
21
30
|
RSpec.describe Order do
|
|
22
31
|
it "sums the prices of its line items" do
|
|
23
32
|
order = Order.new
|
|
33
|
+
|
|
24
34
|
order.add_entry(LineItem.new(:item => Item.new(
|
|
25
35
|
:price => Money.new(1.11, :USD)
|
|
26
36
|
)))
|
|
@@ -28,6 +38,7 @@ RSpec.describe Order do
|
|
|
28
38
|
:price => Money.new(2.22, :USD),
|
|
29
39
|
:quantity => 2
|
|
30
40
|
)))
|
|
41
|
+
|
|
31
42
|
expect(order.total).to eq(Money.new(5.55, :USD))
|
|
32
43
|
end
|
|
33
44
|
end
|
|
@@ -40,9 +51,9 @@ Under the hood, an example group is a class in which the block passed to
|
|
|
40
51
|
`describe` is evaluated. The blocks passed to `it` are evaluated in the
|
|
41
52
|
context of an _instance_ of that class.
|
|
42
53
|
|
|
43
|
-
##
|
|
54
|
+
## Nested Groups
|
|
44
55
|
|
|
45
|
-
You can also declare nested
|
|
56
|
+
You can also declare nested groups using the `describe` or `context`
|
|
46
57
|
methods:
|
|
47
58
|
|
|
48
59
|
```ruby
|
|
@@ -61,7 +72,10 @@ RSpec.describe Order do
|
|
|
61
72
|
end
|
|
62
73
|
```
|
|
63
74
|
|
|
64
|
-
|
|
75
|
+
Nested groups are subclasses of the outer example group class, providing
|
|
76
|
+
the inheritance semantics you'd want for free.
|
|
77
|
+
|
|
78
|
+
## Aliases
|
|
65
79
|
|
|
66
80
|
You can declare example groups using either `describe` or `context`.
|
|
67
81
|
For a top level example group, `describe` and `context` are available
|
|
@@ -72,7 +86,7 @@ patching.
|
|
|
72
86
|
You can declare examples within a group using any of `it`, `specify`, or
|
|
73
87
|
`example`.
|
|
74
88
|
|
|
75
|
-
##
|
|
89
|
+
## Shared Examples and Contexts
|
|
76
90
|
|
|
77
91
|
Declare a shared example group using `shared_examples`, and then include it
|
|
78
92
|
in any group using `include_examples`.
|
|
@@ -102,7 +116,7 @@ pretty much the same as `shared_examples` and `include_examples`, providing
|
|
|
102
116
|
more accurate naming when you share hooks, `let` declarations, helper methods,
|
|
103
117
|
etc, but no examples.
|
|
104
118
|
|
|
105
|
-
##
|
|
119
|
+
## Metadata
|
|
106
120
|
|
|
107
121
|
rspec-core stores a metadata hash with every example and group, which
|
|
108
122
|
contains their descriptions, the locations at which they were
|
|
@@ -114,7 +128,7 @@ Although you probably won't ever need this unless you are writing an
|
|
|
114
128
|
extension, you can access it from an example like this:
|
|
115
129
|
|
|
116
130
|
```ruby
|
|
117
|
-
it "does something" do
|
|
131
|
+
it "does something" do |example|
|
|
118
132
|
expect(example.metadata[:description]).to eq("does something")
|
|
119
133
|
end
|
|
120
134
|
```
|
|
@@ -153,26 +167,106 @@ RSpec.describe Hash do
|
|
|
153
167
|
end
|
|
154
168
|
```
|
|
155
169
|
|
|
156
|
-
##
|
|
170
|
+
## A Word on Scope
|
|
171
|
+
|
|
172
|
+
RSpec has two scopes:
|
|
173
|
+
|
|
174
|
+
* **Example Group**: Example groups are defined by a `describe` or
|
|
175
|
+
`context` block, which is eagerly evaluated when the spec file is
|
|
176
|
+
loaded. The block is evaluated in the context of a subclass of
|
|
177
|
+
`RSpec::Core::ExampleGroup`, or a subclass of the parent example group
|
|
178
|
+
when you're nesting them.
|
|
179
|
+
* **Example**: Examples -- typically defined by an `it` block -- and any other
|
|
180
|
+
blocks with per-example semantics -- such as a `before(:example)` hook -- are
|
|
181
|
+
evaluated in the context of
|
|
182
|
+
an _instance_ of the example group class to which the example belongs.
|
|
183
|
+
Examples are _not_ executed when the spec file is loaded; instead,
|
|
184
|
+
RSpec waits to run any examples until all spec files have been loaded,
|
|
185
|
+
at which point it can apply filtering, randomization, etc.
|
|
186
|
+
|
|
187
|
+
To make this more concrete, consider this code snippet:
|
|
188
|
+
|
|
189
|
+
``` ruby
|
|
190
|
+
RSpec.describe "Using an array as a stack" do
|
|
191
|
+
def build_stack
|
|
192
|
+
[]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
before(:example) do
|
|
196
|
+
@stack = build_stack
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it 'is initially empty' do
|
|
200
|
+
expect(@stack).to be_empty
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
context "after an item has been pushed" do
|
|
204
|
+
before(:example) do
|
|
205
|
+
@stack.push :item
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it 'allows the pushed item to be popped' do
|
|
209
|
+
expect(@stack.pop).to eq(:item)
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Under the covers, this is (roughly) equivalent to:
|
|
216
|
+
|
|
217
|
+
``` ruby
|
|
218
|
+
class UsingAnArrayAsAStack < RSpec::Core::ExampleGroup
|
|
219
|
+
def build_stack
|
|
220
|
+
[]
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def before_example_1
|
|
224
|
+
@stack = build_stack
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def it_is_initially_empty
|
|
228
|
+
expect(@stack).to be_empty
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
class AfterAnItemHasBeenPushed < self
|
|
232
|
+
def before_example_2
|
|
233
|
+
@stack.push :item
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def it_allows_the_pushed_item_to_be_popped
|
|
237
|
+
expect(@stack.pop).to eq(:item)
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
To run these examples, RSpec would (roughly) do the following:
|
|
244
|
+
|
|
245
|
+
``` ruby
|
|
246
|
+
example_1 = UsingAnArrayAsAStack.new
|
|
247
|
+
example_1.before_example_1
|
|
248
|
+
example_1.it_is_initially_empty
|
|
249
|
+
|
|
250
|
+
example_2 = UsingAnArrayAsAStack::AfterAnItemHasBeenPushed.new
|
|
251
|
+
example_2.before_example_1
|
|
252
|
+
example_2.before_example_2
|
|
253
|
+
example_2.it_allows_the_pushed_item_to_be_popped
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## The `rspec` Command
|
|
157
257
|
|
|
158
258
|
When you install the rspec-core gem, it installs the `rspec` executable,
|
|
159
259
|
which you'll use to run rspec. The `rspec` command comes with many useful
|
|
160
260
|
options.
|
|
161
261
|
Run `rspec --help` to see the complete list.
|
|
162
262
|
|
|
163
|
-
##
|
|
263
|
+
## Store Command Line Options `.rspec`
|
|
164
264
|
|
|
165
265
|
You can store command line options in a `.rspec` file in the project's root
|
|
166
266
|
directory, and the `rspec` command will read them as though you typed them on
|
|
167
267
|
the command line.
|
|
168
268
|
|
|
169
|
-
##
|
|
170
|
-
|
|
171
|
-
rspec-core no longer ships with an Autotest extension, if you require Autotest
|
|
172
|
-
integration, please use the `rspec-autotest` gem and see [rspec/rspec-autotest](https://github.com/rspec/rspec-autotest)
|
|
173
|
-
for details
|
|
174
|
-
|
|
175
|
-
## get started
|
|
269
|
+
## Get Started
|
|
176
270
|
|
|
177
271
|
Start with a simple example of behavior you expect from your system. Do
|
|
178
272
|
this before you write any implementation code:
|
|
@@ -195,13 +289,12 @@ $ rspec spec/calculator_spec.rb
|
|
|
195
289
|
./spec/calculator_spec.rb:1: uninitialized constant Calculator
|
|
196
290
|
```
|
|
197
291
|
|
|
198
|
-
|
|
292
|
+
Address the failure by defining a skeleton of the `Calculator` class:
|
|
199
293
|
|
|
200
294
|
```ruby
|
|
201
295
|
# in lib/calculator.rb
|
|
202
296
|
class Calculator
|
|
203
|
-
def add(a,b)
|
|
204
|
-
a + b
|
|
297
|
+
def add(a, b)
|
|
205
298
|
end
|
|
206
299
|
end
|
|
207
300
|
```
|
|
@@ -214,6 +307,39 @@ Be sure to require the implementation file in the spec:
|
|
|
214
307
|
require "calculator"
|
|
215
308
|
```
|
|
216
309
|
|
|
310
|
+
Now run the spec again, and watch the expectation fail:
|
|
311
|
+
|
|
312
|
+
```
|
|
313
|
+
$ rspec spec/calculator_spec.rb
|
|
314
|
+
F
|
|
315
|
+
|
|
316
|
+
Failures:
|
|
317
|
+
|
|
318
|
+
1) Calculator#add returns the sum of its arguments
|
|
319
|
+
Failure/Error: expect(Calculator.new.add(1, 2)).to eq(3)
|
|
320
|
+
|
|
321
|
+
expected: 3
|
|
322
|
+
got: nil
|
|
323
|
+
|
|
324
|
+
(compared using ==)
|
|
325
|
+
# ./spec/calcalator_spec.rb:6:in `block (3 levels) in <top (required)>'
|
|
326
|
+
|
|
327
|
+
Finished in 0.00131 seconds (files took 0.10968 seconds to load)
|
|
328
|
+
1 example, 1 failure
|
|
329
|
+
|
|
330
|
+
Failed examples:
|
|
331
|
+
|
|
332
|
+
rspec ./spec/calcalator_spec.rb:5 # Calculator#add returns the sum of its arguments
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Implement the simplest solution, by changing the definition of `Calculator#add` to:
|
|
336
|
+
|
|
337
|
+
```ruby
|
|
338
|
+
def add(a, b)
|
|
339
|
+
a + b
|
|
340
|
+
end
|
|
341
|
+
```
|
|
342
|
+
|
|
217
343
|
Now run the spec again, and watch it pass:
|
|
218
344
|
|
|
219
345
|
```
|
|
@@ -236,8 +362,23 @@ Finished in 0.000379 seconds
|
|
|
236
362
|
1 example, 0 failures
|
|
237
363
|
```
|
|
238
364
|
|
|
365
|
+
## Contributing
|
|
366
|
+
|
|
367
|
+
Once you've set up the environment, you'll need to cd into the working
|
|
368
|
+
directory of whichever repo you want to work in. From there you can run the
|
|
369
|
+
specs and cucumber features, and make patches.
|
|
370
|
+
|
|
371
|
+
NOTE: You do not need to use rspec-dev to work on a specific RSpec repo. You
|
|
372
|
+
can treat each RSpec repo as an independent project.
|
|
373
|
+
|
|
374
|
+
* [Build details](BUILD_DETAIL.md)
|
|
375
|
+
* [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
376
|
+
* [Detailed contributing guide](CONTRIBUTING.md)
|
|
377
|
+
* [Development setup guide](DEVELOPMENT.md)
|
|
378
|
+
|
|
239
379
|
## Also see
|
|
240
380
|
|
|
241
|
-
* [
|
|
242
|
-
* [
|
|
243
|
-
* [
|
|
381
|
+
* [https://github.com/rspec/rspec](https://github.com/rspec/rspec)
|
|
382
|
+
* [https://github.com/rspec/rspec-expectations](https://github.com/rspec/rspec-expectations)
|
|
383
|
+
* [https://github.com/rspec/rspec-mocks](https://github.com/rspec/rspec-mocks)
|
|
384
|
+
* [https://github.com/rspec/rspec-rails](https://github.com/rspec/rspec-rails)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!---
|
|
2
|
+
This file was generated on 2020-12-25T18:48:30+00:00 from the rspec-dev repo.
|
|
3
|
+
DO NOT modify it by hand as your changes will get lost the next time it is generated.
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
# Report template
|
|
7
|
+
|
|
8
|
+
```ruby
|
|
9
|
+
# frozen_string_literal: true
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
require "bundler/inline"
|
|
13
|
+
rescue LoadError => e
|
|
14
|
+
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
|
|
15
|
+
raise e
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
gemfile(true) do
|
|
19
|
+
source "https://rubygems.org"
|
|
20
|
+
|
|
21
|
+
gem "rspec", "3.7.0" # Activate the gem and version you are reporting the issue against.
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
puts "Ruby version is: #{RUBY_VERSION}"
|
|
25
|
+
require 'rspec/autorun'
|
|
26
|
+
|
|
27
|
+
RSpec.describe 'additions' do
|
|
28
|
+
it 'returns 2' do
|
|
29
|
+
expect(1 + 1).to eq(2)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns 1' do
|
|
33
|
+
expect(3 - 1).to eq(-1)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Simply copy the content of the appropriate template into a `.rb` file on your computer
|
|
39
|
+
and make the necessary changes to demonstrate the issue. You can execute it by running
|
|
40
|
+
`ruby rspec_report.rb` in your terminal.
|
|
41
|
+
|
|
42
|
+
You can then share your executable test case as a [gist](https://gist.github.com), or
|
|
43
|
+
simply paste the content into the issue description.
|
|
@@ -78,7 +78,7 @@ task :default => [:spec, :cucumber, :rubocop]
|
|
|
78
78
|
task :verify_private_key_present do
|
|
79
79
|
private_key = File.expand_path('~/.gem/rspec-gem-private_key.pem')
|
|
80
80
|
unless File.exist?(private_key)
|
|
81
|
-
raise "Your private key is not present. This gem should not be built without
|
|
81
|
+
raise "Your private key is not present. This gem should not be built without it."
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
require_relative "helper"
|
|
2
|
+
|
|
3
|
+
benchmark_allocations do
|
|
4
|
+
1000.times do |i|
|
|
5
|
+
RSpec.describe "group #{i}" do
|
|
6
|
+
it "has one example" do
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
__END__
|
|
13
|
+
|
|
14
|
+
Original allocations:
|
|
15
|
+
|
|
16
|
+
class_plus count
|
|
17
|
+
---------------------------------------- -----
|
|
18
|
+
String 28000
|
|
19
|
+
Array 15000
|
|
20
|
+
RubyVM::Env 9000
|
|
21
|
+
Proc 9000
|
|
22
|
+
Hash 9000
|
|
23
|
+
RSpec::Core::Hooks::HookCollection 6000
|
|
24
|
+
Array<String> 5000
|
|
25
|
+
MatchData 3000
|
|
26
|
+
Array<String,Fixnum> 2000
|
|
27
|
+
Array<Module> 2000
|
|
28
|
+
Module 2000
|
|
29
|
+
RSpec::Core::Example::ExecutionResult 2000
|
|
30
|
+
RSpec::Core::Metadata::ExampleGroupHash 1000
|
|
31
|
+
Class 1000
|
|
32
|
+
Array<Hash> 1000
|
|
33
|
+
RSpec::Core::Hooks::AroundHookCollection 1000
|
|
34
|
+
RSpec::Core::Hooks::HookCollections 1000
|
|
35
|
+
RSpec::Core::Metadata::ExampleHash 1000
|
|
36
|
+
RSpec::Core::Example 1000
|
|
37
|
+
Array<RSpec::Core::Example> 1000
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
After removing `:suite` support from `Hooks` module,
|
|
41
|
+
it cut Array and RSpec::Core::Hooks::HookCollection
|
|
42
|
+
allocations by 2000 each:
|
|
43
|
+
|
|
44
|
+
class_plus count
|
|
45
|
+
---------------------------------------- -----
|
|
46
|
+
String 28000
|
|
47
|
+
Array 13000
|
|
48
|
+
Proc 9000
|
|
49
|
+
RubyVM::Env 9000
|
|
50
|
+
Hash 9000
|
|
51
|
+
Array<String> 5000
|
|
52
|
+
RSpec::Core::Hooks::HookCollection 4000
|
|
53
|
+
MatchData 3000
|
|
54
|
+
Array<Module> 2000
|
|
55
|
+
RSpec::Core::Example::ExecutionResult 2000
|
|
56
|
+
Module 2000
|
|
57
|
+
Array<String,Fixnum> 2000
|
|
58
|
+
RSpec::Core::Hooks::HookCollections 1000
|
|
59
|
+
RSpec::Core::Example 1000
|
|
60
|
+
Array<RSpec::Core::Example> 1000
|
|
61
|
+
RSpec::Core::Metadata::ExampleHash 1000
|
|
62
|
+
RSpec::Core::Hooks::AroundHookCollection 1000
|
|
63
|
+
RSpec::Core::Metadata::ExampleGroupHash 1000
|
|
64
|
+
Class 1000
|
|
65
|
+
Array<Hash> 1000
|
|
66
|
+
|
|
67
|
+
....
|
|
68
|
+
|
|
69
|
+
Later, our allocations were:
|
|
70
|
+
|
|
71
|
+
class_plus count
|
|
72
|
+
--------------------------------------- -----
|
|
73
|
+
String 26000
|
|
74
|
+
Hash 19000
|
|
75
|
+
Array 18000
|
|
76
|
+
Set 10000
|
|
77
|
+
Proc 9000
|
|
78
|
+
RubyVM::Env 9000
|
|
79
|
+
RSpec::Core::Hooks::HookCollection 5000
|
|
80
|
+
RSpec::Core::FilterableItemRepository 5000
|
|
81
|
+
Array<String> 5000
|
|
82
|
+
MatchData 3000
|
|
83
|
+
RSpec::Core::Example::ExecutionResult 2000
|
|
84
|
+
Array<String,Fixnum> 2000
|
|
85
|
+
Module 2000
|
|
86
|
+
Array<Module> 2000
|
|
87
|
+
RSpec::Core::Metadata::ExampleGroupHash 1000
|
|
88
|
+
Class 1000
|
|
89
|
+
RSpec::Core::Metadata::ExampleHash 1000
|
|
90
|
+
RSpec::Core::Example 1000
|
|
91
|
+
Array<RSpec::Core::Example> 1000
|
|
92
|
+
Array<Hash> 1000
|
|
93
|
+
RSpec::Core::Hooks::HookCollections 1000
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
After changing the hooks implementation to lazily
|
|
97
|
+
instantiate `HookCollection` instances, it dropped
|
|
98
|
+
our allocations by:
|
|
99
|
+
- 8K hashes
|
|
100
|
+
- 10K arrays
|
|
101
|
+
- 10K sets
|
|
102
|
+
- 5K FilterableItemRepository
|
|
103
|
+
- 5K HookCollecion
|
|
104
|
+
|
|
105
|
+
class_plus count
|
|
106
|
+
--------------------------------------- -----
|
|
107
|
+
String 26000
|
|
108
|
+
Hash 11000
|
|
109
|
+
Array 8000
|
|
110
|
+
Proc 5000
|
|
111
|
+
RubyVM::Env 5000
|
|
112
|
+
Array<String> 5000
|
|
113
|
+
MatchData 3000
|
|
114
|
+
Array<Module> 2000
|
|
115
|
+
Array<String,Fixnum> 2000
|
|
116
|
+
RSpec::Core::Example::ExecutionResult 2000
|
|
117
|
+
Module 2000
|
|
118
|
+
Array<Hash> 1000
|
|
119
|
+
RSpec::Core::Metadata::ExampleGroupHash 1000
|
|
120
|
+
Class 1000
|
|
121
|
+
RSpec::Core::Metadata::ExampleHash 1000
|
|
122
|
+
RSpec::Core::Example 1000
|
|
123
|
+
Array<RSpec::Core::Example> 1000
|
|
124
|
+
RSpec::Core::Hooks::HookCollections 1000
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require_relative "helper"
|
|
2
|
+
|
|
3
|
+
benchmark_allocations do
|
|
4
|
+
RSpec.describe "one example group" do
|
|
5
|
+
1000.times do |i|
|
|
6
|
+
example "example #{i}" do
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
__END__
|
|
13
|
+
|
|
14
|
+
Original stats:
|
|
15
|
+
|
|
16
|
+
class_plus count
|
|
17
|
+
---------------------------------------- -----
|
|
18
|
+
String 22046
|
|
19
|
+
Hash 3006
|
|
20
|
+
Array<String> 3002
|
|
21
|
+
Proc 2007
|
|
22
|
+
RubyVM::Env 2007
|
|
23
|
+
Array 1013
|
|
24
|
+
Regexp 1001
|
|
25
|
+
RSpec::Core::Example::ExecutionResult 1001
|
|
26
|
+
Array<String,Fixnum> 1001
|
|
27
|
+
RSpec::Core::Example 1000
|
|
28
|
+
RSpec::Core::Metadata::ExampleHash 1000
|
|
29
|
+
RSpec::Core::Hooks::HookCollection 6
|
|
30
|
+
MatchData 4
|
|
31
|
+
Array<Module> 2
|
|
32
|
+
Module 2
|
|
33
|
+
RSpec::Core::Metadata::ExampleGroupHash 1
|
|
34
|
+
RSpec::Core::Hooks::AroundHookCollection 1
|
|
35
|
+
Class 1
|
|
36
|
+
Array<Hash> 1
|
|
37
|
+
RSpec::Core::Hooks::HookCollections 1
|
|
38
|
+
Array<RSpec::Core::Example> 1
|
|
39
|
+
|
|
40
|
+
After my fixes:
|
|
41
|
+
|
|
42
|
+
class_plus count
|
|
43
|
+
---------------------------------------- -----
|
|
44
|
+
String 6030
|
|
45
|
+
Hash 3006
|
|
46
|
+
Array<String> 3002
|
|
47
|
+
RubyVM::Env 2007
|
|
48
|
+
Proc 2007
|
|
49
|
+
Array 1013
|
|
50
|
+
RSpec::Core::Example::ExecutionResult 1001
|
|
51
|
+
Array<String,Fixnum> 1001
|
|
52
|
+
RSpec::Core::Metadata::ExampleHash 1000
|
|
53
|
+
RSpec::Core::Example 1000
|
|
54
|
+
RSpec::Core::Hooks::HookCollection 6
|
|
55
|
+
MatchData 4
|
|
56
|
+
Module 2
|
|
57
|
+
Array<Module> 2
|
|
58
|
+
RSpec::Core::Hooks::HookCollections 1
|
|
59
|
+
Array<RSpec::Core::Example> 1
|
|
60
|
+
RSpec::Core::Hooks::AroundHookCollection 1
|
|
61
|
+
RSpec::Core::Metadata::ExampleGroupHash 1
|
|
62
|
+
Class 1
|
|
63
|
+
Array<Hash> 1
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../../../lib", __FILE__)
|
|
2
|
+
require 'rspec/core'
|
|
3
|
+
require 'allocation_stats'
|
|
4
|
+
|
|
5
|
+
def benchmark_allocations(burn: 1, min_allocations: 0)
|
|
6
|
+
stats = AllocationStats.new(burn: burn).trace do
|
|
7
|
+
yield
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
columns = if ENV['DETAIL']
|
|
11
|
+
[:sourcefile, :sourceline, :class_plus]
|
|
12
|
+
else
|
|
13
|
+
[:class_plus]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
results = stats.allocations(alias_paths: true).group_by(*columns).from_pwd.sort_by_size.to_text
|
|
17
|
+
count_regex = /\s+(\d+)\z/
|
|
18
|
+
|
|
19
|
+
total_objects = results.split("\n").map { |line| line[count_regex, 1] }.compact.map { |c| Integer(c) }.inject(0, :+)
|
|
20
|
+
|
|
21
|
+
filtered = results.split("\n").select do |line|
|
|
22
|
+
count = line[count_regex, 1]
|
|
23
|
+
count.nil? || Integer(count) >= min_allocations
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
puts filtered.join("\n")
|
|
27
|
+
line_length = filtered.last.length
|
|
28
|
+
puts "-" * line_length
|
|
29
|
+
puts "Total:#{total_objects.to_s.rjust(line_length - "Total:".length)}"
|
|
30
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require_relative "helper"
|
|
2
|
+
|
|
3
|
+
1000.times do |i|
|
|
4
|
+
RSpec.describe "group #{i}" do
|
|
5
|
+
it "has one example" do
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
benchmark_allocations(burn: 0, min_allocations: 50) do
|
|
11
|
+
RSpec::Core::Runner.run([])
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
__END__
|
|
15
|
+
|
|
16
|
+
Before optimization:
|
|
17
|
+
|
|
18
|
+
class_plus count
|
|
19
|
+
----------------------------------------------------------------------------------------------- -----
|
|
20
|
+
Array<Symbol> 26021
|
|
21
|
+
String 21331
|
|
22
|
+
Array 19402
|
|
23
|
+
Array<Symbol,Proc> 6001
|
|
24
|
+
Array<RSpec::Core::Example> 6001
|
|
25
|
+
RSpec::Core::Hooks::HookCollection 4004
|
|
26
|
+
Array<Class> 4004
|
|
27
|
+
Hash 3098
|
|
28
|
+
Proc 3096
|
|
29
|
+
RubyVM::Env 3056
|
|
30
|
+
Time 2002
|
|
31
|
+
Random 2001
|
|
32
|
+
RSpec::Core::Hooks::AroundHookCollection 2000
|
|
33
|
+
RSpec::Core::Notifications::GroupNotification 2000
|
|
34
|
+
RSpec::Core::Notifications::ExampleNotification 2000
|
|
35
|
+
RSpec::Core::Hooks::GroupHookCollection 2000
|
|
36
|
+
Array<Symbol,TrueClass> 1003
|
|
37
|
+
Array<Class,Module> 1002
|
|
38
|
+
Array<TrueClass> 1002
|
|
39
|
+
RSpec::Core::Example::Procsy 1000
|
|
40
|
+
RubyVM::InstructionSequence 506
|
|
41
|
+
Array<Fixnum,FalseClass> 391
|
|
42
|
+
Array<Array> 205
|
|
43
|
+
Array<String> 52
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
After optimization, we allocate 2000 less arrays and 2000 less RSpec::Core::Hooks::HookCollection
|
|
47
|
+
instances. That's 2 less of each per example group.
|
|
48
|
+
|
|
49
|
+
class_plus count
|
|
50
|
+
----------------------------------------------------------------------------------------------- -----
|
|
51
|
+
Array<Symbol> 26021
|
|
52
|
+
String 21331
|
|
53
|
+
Array 17400
|
|
54
|
+
Array<Symbol,Proc> 6001
|
|
55
|
+
Array<RSpec::Core::Example> 6001
|
|
56
|
+
Array<Class> 4004
|
|
57
|
+
Hash 3098
|
|
58
|
+
Proc 3096
|
|
59
|
+
RubyVM::Env 3056
|
|
60
|
+
RSpec::Core::Hooks::HookCollection 2002
|
|
61
|
+
Time 2002
|
|
62
|
+
Random 2001
|
|
63
|
+
RSpec::Core::Notifications::ExampleNotification 2000
|
|
64
|
+
RSpec::Core::Notifications::GroupNotification 2000
|
|
65
|
+
RSpec::Core::Hooks::GroupHookCollection 2000
|
|
66
|
+
Array<Symbol,TrueClass> 1003
|
|
67
|
+
Array<Class,Module> 1002
|
|
68
|
+
Array<TrueClass> 1002
|
|
69
|
+
RSpec::Core::Example::Procsy 1000
|
|
70
|
+
RSpec::Core::Hooks::AroundHookCollection 1000
|
|
71
|
+
RubyVM::InstructionSequence 506
|
|
72
|
+
Array<Fixnum,FalseClass> 391
|
|
73
|
+
Array<Array> 205
|
|
74
|
+
Array<String> 52
|
|
75
|
+
|
|
76
|
+
After yet further optimization (where HookCollection instances are only created when hooks are added),
|
|
77
|
+
we've reduced allocations significantly further:
|
|
78
|
+
|
|
79
|
+
class_plus count
|
|
80
|
+
----------------------------------------------------------------------------------------------- -----
|
|
81
|
+
String 21332
|
|
82
|
+
Array 13412
|
|
83
|
+
Array<Symbol> 6021
|
|
84
|
+
Array<Symbol,Proc> 6001
|
|
85
|
+
Array<RSpec::Core::Example> 6001
|
|
86
|
+
Hash 3105
|
|
87
|
+
Array<Class> 3004
|
|
88
|
+
Proc 2101
|
|
89
|
+
RubyVM::Env 2061
|
|
90
|
+
Time 2002
|
|
91
|
+
Random 2001
|
|
92
|
+
RSpec::Core::Notifications::GroupNotification 2000
|
|
93
|
+
RSpec::Core::Notifications::ExampleNotification 2000
|
|
94
|
+
Array<Symbol,TrueClass> 1003
|
|
95
|
+
Array<Class,Module> 1002
|
|
96
|
+
Array<TrueClass> 1002
|
|
97
|
+
RubyVM::InstructionSequence 506
|
|
98
|
+
Array<Fixnum,FalseClass> 391
|
|
99
|
+
Array<Array> 208
|
|
100
|
+
Array<String> 52
|