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
|
@@ -2,10 +2,12 @@ RSpec::Support.require_rspec_support 'recursive_const_methods'
|
|
|
2
2
|
|
|
3
3
|
module RSpec
|
|
4
4
|
module Core
|
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
|
6
|
+
|
|
5
7
|
# ExampleGroup and {Example} are the main structural elements of
|
|
6
|
-
# rspec-core.
|
|
8
|
+
# rspec-core. Consider this example:
|
|
7
9
|
#
|
|
8
|
-
# describe Thing do
|
|
10
|
+
# RSpec.describe Thing do
|
|
9
11
|
# it "does something" do
|
|
10
12
|
# end
|
|
11
13
|
# end
|
|
@@ -17,13 +19,13 @@ module RSpec
|
|
|
17
19
|
#
|
|
18
20
|
# Example group bodies (e.g. `describe` or `context` blocks) are evaluated
|
|
19
21
|
# in the context of a new subclass of ExampleGroup. Individual examples are
|
|
20
|
-
# evaluated in the context of an instance of the specific ExampleGroup
|
|
21
|
-
# to which they belong.
|
|
22
|
+
# evaluated in the context of an instance of the specific ExampleGroup
|
|
23
|
+
# subclass to which they belong.
|
|
22
24
|
#
|
|
23
25
|
# Besides the class methods defined here, there are other interesting macros
|
|
24
|
-
# defined in {Hooks}, {MemoizedHelpers::ClassMethods} and
|
|
25
|
-
# There are additional instance methods available to
|
|
26
|
-
# {MemoizedHelpers} and {Pending}.
|
|
26
|
+
# defined in {Hooks}, {MemoizedHelpers::ClassMethods} and
|
|
27
|
+
# {SharedExampleGroup}. There are additional instance methods available to
|
|
28
|
+
# your examples defined in {MemoizedHelpers} and {Pending}.
|
|
27
29
|
class ExampleGroup
|
|
28
30
|
extend Hooks
|
|
29
31
|
|
|
@@ -32,10 +34,13 @@ module RSpec
|
|
|
32
34
|
include Pending
|
|
33
35
|
extend SharedExampleGroup
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
# Define a singleton method for the singleton class (remove the method if
|
|
38
|
+
# it's already been defined).
|
|
39
|
+
# @private
|
|
40
|
+
def self.idempotently_define_singleton_method(name, &definition)
|
|
41
|
+
(class << self; self; end).module_exec do
|
|
42
|
+
remove_method(name) if method_defined?(name) && instance_method(name).owner == self
|
|
43
|
+
define_method(name, &definition)
|
|
39
44
|
end
|
|
40
45
|
end
|
|
41
46
|
|
|
@@ -44,7 +49,21 @@ module RSpec
|
|
|
44
49
|
# The [Metadata](Metadata) object associated with this group.
|
|
45
50
|
# @see Metadata
|
|
46
51
|
def self.metadata
|
|
47
|
-
@metadata
|
|
52
|
+
@metadata ||= nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Temporarily replace the provided metadata.
|
|
56
|
+
# Intended primarily to allow an example group's singleton class
|
|
57
|
+
# to return the metadata of the example that it exists for. This
|
|
58
|
+
# is necessary for shared example group inclusion to work properly
|
|
59
|
+
# with singleton example groups.
|
|
60
|
+
# @private
|
|
61
|
+
def self.with_replaced_metadata(meta)
|
|
62
|
+
orig_metadata = metadata
|
|
63
|
+
@metadata = meta
|
|
64
|
+
yield
|
|
65
|
+
ensure
|
|
66
|
+
@metadata = orig_metadata
|
|
48
67
|
end
|
|
49
68
|
|
|
50
69
|
# @private
|
|
@@ -56,7 +75,7 @@ module RSpec
|
|
|
56
75
|
# @private
|
|
57
76
|
def self.delegate_to_metadata(*names)
|
|
58
77
|
names.each do |name|
|
|
59
|
-
|
|
78
|
+
idempotently_define_singleton_method(name) { metadata.fetch(name) }
|
|
60
79
|
end
|
|
61
80
|
end
|
|
62
81
|
|
|
@@ -71,13 +90,12 @@ module RSpec
|
|
|
71
90
|
# Returns the class or module passed to the `describe` method (or alias).
|
|
72
91
|
# Returns nil if the subject is not a class or module.
|
|
73
92
|
# @example
|
|
74
|
-
# describe Thing do
|
|
93
|
+
# RSpec.describe Thing do
|
|
75
94
|
# it "does something" do
|
|
76
95
|
# described_class == Thing
|
|
77
96
|
# end
|
|
78
97
|
# end
|
|
79
98
|
#
|
|
80
|
-
#
|
|
81
99
|
def described_class
|
|
82
100
|
self.class.described_class
|
|
83
101
|
end
|
|
@@ -89,9 +107,19 @@ module RSpec
|
|
|
89
107
|
# @private
|
|
90
108
|
# @macro [attach] define_example_method
|
|
91
109
|
# @!scope class
|
|
92
|
-
# @
|
|
93
|
-
# @
|
|
94
|
-
# @
|
|
110
|
+
# @method $1
|
|
111
|
+
# @overload $1
|
|
112
|
+
# @overload $1(&example_implementation)
|
|
113
|
+
# @param example_implementation [Block] The implementation of the example.
|
|
114
|
+
# @overload $1(doc_string, *metadata)
|
|
115
|
+
# @param doc_string [String] The example's doc string.
|
|
116
|
+
# @param metadata [Array<Symbol>, Hash] Metadata for the example.
|
|
117
|
+
# Symbols will be transformed into hash entries with `true` values.
|
|
118
|
+
# @overload $1(doc_string, *metadata, &example_implementation)
|
|
119
|
+
# @param doc_string [String] The example's doc string.
|
|
120
|
+
# @param metadata [Array<Symbol>, Hash] Metadata for the example.
|
|
121
|
+
# Symbols will be transformed into hash entries with `true` values.
|
|
122
|
+
# @param example_implementation [Block] The implementation of the example.
|
|
95
123
|
# @yield [Example] the example object
|
|
96
124
|
# @example
|
|
97
125
|
# $1 do
|
|
@@ -100,22 +128,29 @@ module RSpec
|
|
|
100
128
|
# $1 "does something" do
|
|
101
129
|
# end
|
|
102
130
|
#
|
|
131
|
+
# $1 "does something", :slow, :uses_js do
|
|
132
|
+
# end
|
|
133
|
+
#
|
|
103
134
|
# $1 "does something", :with => 'additional metadata' do
|
|
104
135
|
# end
|
|
105
136
|
#
|
|
106
137
|
# $1 "does something" do |ex|
|
|
107
138
|
# # ex is the Example object that contains metadata about the example
|
|
108
139
|
# end
|
|
140
|
+
#
|
|
141
|
+
# @example
|
|
142
|
+
# $1 "does something", :slow, :load_factor => 100 do
|
|
143
|
+
# end
|
|
144
|
+
#
|
|
109
145
|
def self.define_example_method(name, extra_options={})
|
|
110
|
-
|
|
146
|
+
idempotently_define_singleton_method(name) do |*all_args, &block|
|
|
111
147
|
desc, *args = *all_args
|
|
112
148
|
|
|
113
149
|
options = Metadata.build_hash_from(args)
|
|
114
150
|
options.update(:skip => RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block
|
|
115
151
|
options.update(extra_options)
|
|
116
152
|
|
|
117
|
-
|
|
118
|
-
examples.last
|
|
153
|
+
RSpec::Core::Example.new(self, desc, options, block)
|
|
119
154
|
end
|
|
120
155
|
end
|
|
121
156
|
|
|
@@ -134,25 +169,25 @@ module RSpec
|
|
|
134
169
|
# end
|
|
135
170
|
define_example_method :specify
|
|
136
171
|
|
|
137
|
-
# Shortcut to define an example with `:focus => true
|
|
172
|
+
# Shortcut to define an example with `:focus => true`.
|
|
138
173
|
# @see example
|
|
139
174
|
define_example_method :focus, :focus => true
|
|
140
|
-
# Shortcut to define an example with `:focus => true
|
|
175
|
+
# Shortcut to define an example with `:focus => true`.
|
|
141
176
|
# @see example
|
|
142
177
|
define_example_method :fexample, :focus => true
|
|
143
|
-
# Shortcut to define an example with `:focus => true
|
|
178
|
+
# Shortcut to define an example with `:focus => true`.
|
|
144
179
|
# @see example
|
|
145
180
|
define_example_method :fit, :focus => true
|
|
146
|
-
# Shortcut to define an example with `:focus => true
|
|
181
|
+
# Shortcut to define an example with `:focus => true`.
|
|
147
182
|
# @see example
|
|
148
183
|
define_example_method :fspecify, :focus => true
|
|
149
|
-
# Shortcut to define an example with `:skip => 'Temporarily skipped with xexample'
|
|
184
|
+
# Shortcut to define an example with `:skip => 'Temporarily skipped with xexample'`.
|
|
150
185
|
# @see example
|
|
151
186
|
define_example_method :xexample, :skip => 'Temporarily skipped with xexample'
|
|
152
|
-
# Shortcut to define an example with `:skip => 'Temporarily skipped with xit'
|
|
187
|
+
# Shortcut to define an example with `:skip => 'Temporarily skipped with xit'`.
|
|
153
188
|
# @see example
|
|
154
189
|
define_example_method :xit, :skip => 'Temporarily skipped with xit'
|
|
155
|
-
# Shortcut to define an example with `:skip => 'Temporarily skipped with xspecify'
|
|
190
|
+
# Shortcut to define an example with `:skip => 'Temporarily skipped with xspecify'`.
|
|
156
191
|
# @see example
|
|
157
192
|
define_example_method :xspecify, :skip => 'Temporarily skipped with xspecify'
|
|
158
193
|
# Shortcut to define an example with `:skip => true`
|
|
@@ -167,11 +202,16 @@ module RSpec
|
|
|
167
202
|
# @!group Defining Example Groups
|
|
168
203
|
|
|
169
204
|
# @private
|
|
170
|
-
# @macro [attach]
|
|
205
|
+
# @macro [attach] define_example_group_method
|
|
171
206
|
# @!scope class
|
|
172
|
-
# @
|
|
173
|
-
# @
|
|
174
|
-
#
|
|
207
|
+
# @overload $1
|
|
208
|
+
# @overload $1(&example_group_definition)
|
|
209
|
+
# @param example_group_definition [Block] The definition of the example group.
|
|
210
|
+
# @overload $1(doc_string, *metadata, &example_implementation)
|
|
211
|
+
# @param doc_string [String] The group's doc string.
|
|
212
|
+
# @param metadata [Array<Symbol>, Hash] Metadata for the group.
|
|
213
|
+
# Symbols will be transformed into hash entries with `true` values.
|
|
214
|
+
# @param example_group_definition [Block] The definition of the example group.
|
|
175
215
|
#
|
|
176
216
|
# Generates a subclass of this example group which inherits
|
|
177
217
|
# everything except the examples themselves.
|
|
@@ -185,41 +225,50 @@ module RSpec
|
|
|
185
225
|
# do_something_before
|
|
186
226
|
# end
|
|
187
227
|
#
|
|
228
|
+
# before(:example, :clean_env) do
|
|
229
|
+
# env.clear!
|
|
230
|
+
# end
|
|
231
|
+
#
|
|
188
232
|
# let(:thing) { Thing.new }
|
|
189
233
|
#
|
|
190
234
|
# $1 "attribute (of something)" do
|
|
191
235
|
# # examples in the group get the before hook
|
|
192
236
|
# # declared above, and can access `thing`
|
|
193
237
|
# end
|
|
238
|
+
#
|
|
239
|
+
# $1 "needs additional setup", :clean_env, :implementation => JSON do
|
|
240
|
+
# # specifies that hooks with matching metadata
|
|
241
|
+
# # should be be run additionally
|
|
242
|
+
# end
|
|
194
243
|
# end
|
|
195
244
|
#
|
|
196
245
|
# @see DSL#describe
|
|
197
246
|
def self.define_example_group_method(name, metadata={})
|
|
198
|
-
|
|
199
|
-
thread_data = RSpec.
|
|
247
|
+
idempotently_define_singleton_method(name) do |*args, &example_group_block|
|
|
248
|
+
thread_data = RSpec::Support.thread_local_data
|
|
200
249
|
top_level = self == ExampleGroup
|
|
201
250
|
|
|
202
|
-
|
|
203
|
-
if
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
251
|
+
registration_collection =
|
|
252
|
+
if top_level
|
|
253
|
+
if thread_data[:in_example_group]
|
|
254
|
+
raise "Creating an isolated context from within a context is " \
|
|
255
|
+
"not allowed. Change `RSpec.#{name}` to `#{name}` or " \
|
|
256
|
+
"move this to a top-level scope."
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
thread_data[:in_example_group] = true
|
|
260
|
+
RSpec.world.example_groups
|
|
261
|
+
else
|
|
262
|
+
children
|
|
207
263
|
end
|
|
208
264
|
|
|
209
|
-
thread_data[:in_example_group] = true
|
|
210
|
-
end
|
|
211
|
-
|
|
212
265
|
begin
|
|
213
|
-
|
|
214
266
|
description = args.shift
|
|
215
267
|
combined_metadata = metadata.dup
|
|
216
268
|
combined_metadata.merge!(args.pop) if args.last.is_a? Hash
|
|
217
269
|
args << combined_metadata
|
|
218
270
|
|
|
219
|
-
subclass(self, description, args, &example_group_block)
|
|
220
|
-
children << child
|
|
221
|
-
end
|
|
222
|
-
|
|
271
|
+
subclass(self, description, args, registration_collection, &example_group_block)
|
|
223
272
|
ensure
|
|
224
273
|
thread_data.delete(:in_example_group) if top_level
|
|
225
274
|
end
|
|
@@ -230,8 +279,8 @@ module RSpec
|
|
|
230
279
|
|
|
231
280
|
define_example_group_method :example_group
|
|
232
281
|
|
|
233
|
-
# An alias of `example_group`. Generally used when grouping
|
|
234
|
-
#
|
|
282
|
+
# An alias of `example_group`. Generally used when grouping examples by a
|
|
283
|
+
# thing you are describing (e.g. an object, class or method).
|
|
235
284
|
# @see example_group
|
|
236
285
|
define_example_group_method :describe
|
|
237
286
|
|
|
@@ -266,12 +315,12 @@ module RSpec
|
|
|
266
315
|
#
|
|
267
316
|
# @see SharedExampleGroup
|
|
268
317
|
def self.define_nested_shared_group_method(new_name, report_label="it should behave like")
|
|
269
|
-
|
|
270
|
-
# Pass :caller so the :location metadata is set properly
|
|
271
|
-
#
|
|
318
|
+
idempotently_define_singleton_method(new_name) do |name, *args, &customization_block|
|
|
319
|
+
# Pass :caller so the :location metadata is set properly.
|
|
320
|
+
# Otherwise, it'll be set to the next line because that's
|
|
272
321
|
# the block's source_location.
|
|
273
|
-
group = example_group("#{report_label} #{name}", :caller => caller) do
|
|
274
|
-
find_and_eval_shared("examples", name, *args, &customization_block)
|
|
322
|
+
group = example_group("#{report_label} #{name}", :caller => (the_caller = caller)) do
|
|
323
|
+
find_and_eval_shared("examples", name, the_caller.first, *args, &customization_block)
|
|
275
324
|
end
|
|
276
325
|
group.metadata[:shared_group_name] = name
|
|
277
326
|
group
|
|
@@ -287,41 +336,65 @@ module RSpec
|
|
|
287
336
|
|
|
288
337
|
# Includes shared content mapped to `name` directly in the group in which
|
|
289
338
|
# it is declared, as opposed to `it_behaves_like`, which creates a nested
|
|
290
|
-
# group. If given a block, that block is also eval'd in the current
|
|
339
|
+
# group. If given a block, that block is also eval'd in the current
|
|
340
|
+
# context.
|
|
291
341
|
#
|
|
292
342
|
# @see SharedExampleGroup
|
|
293
343
|
def self.include_context(name, *args, &block)
|
|
294
|
-
find_and_eval_shared("context", name, *args, &block)
|
|
344
|
+
find_and_eval_shared("context", name, caller.first, *args, &block)
|
|
295
345
|
end
|
|
296
346
|
|
|
297
347
|
# Includes shared content mapped to `name` directly in the group in which
|
|
298
348
|
# it is declared, as opposed to `it_behaves_like`, which creates a nested
|
|
299
|
-
# group. If given a block, that block is also eval'd in the current
|
|
349
|
+
# group. If given a block, that block is also eval'd in the current
|
|
350
|
+
# context.
|
|
300
351
|
#
|
|
301
352
|
# @see SharedExampleGroup
|
|
302
353
|
def self.include_examples(name, *args, &block)
|
|
303
|
-
find_and_eval_shared("examples", name, *args, &block)
|
|
354
|
+
find_and_eval_shared("examples", name, caller.first, *args, &block)
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# Clear memoized values when adding/removing examples
|
|
358
|
+
# @private
|
|
359
|
+
def self.reset_memoized
|
|
360
|
+
@descendant_filtered_examples = nil
|
|
361
|
+
@_descendants = nil
|
|
362
|
+
@parent_groups = nil
|
|
363
|
+
@declaration_locations = nil
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Adds an example to the example group
|
|
367
|
+
def self.add_example(example)
|
|
368
|
+
reset_memoized
|
|
369
|
+
examples << example
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# Removes an example from the example group
|
|
373
|
+
def self.remove_example(example)
|
|
374
|
+
reset_memoized
|
|
375
|
+
examples.delete example
|
|
304
376
|
end
|
|
305
377
|
|
|
306
378
|
# @private
|
|
307
|
-
def self.find_and_eval_shared(label, name, *args, &customization_block)
|
|
308
|
-
|
|
379
|
+
def self.find_and_eval_shared(label, name, inclusion_location, *args, &customization_block)
|
|
380
|
+
shared_module = RSpec.world.shared_example_group_registry.find(parent_groups, name)
|
|
309
381
|
|
|
310
|
-
unless
|
|
382
|
+
unless shared_module
|
|
311
383
|
raise ArgumentError, "Could not find shared #{label} #{name.inspect}"
|
|
312
384
|
end
|
|
313
385
|
|
|
314
|
-
|
|
315
|
-
|
|
386
|
+
shared_module.include_in(
|
|
387
|
+
self, Metadata.relative_path(inclusion_location),
|
|
388
|
+
args, customization_block
|
|
389
|
+
)
|
|
316
390
|
end
|
|
317
391
|
|
|
318
392
|
# @!endgroup
|
|
319
393
|
|
|
320
394
|
# @private
|
|
321
|
-
def self.subclass(parent, description, args, &example_group_block)
|
|
395
|
+
def self.subclass(parent, description, args, registration_collection, &example_group_block)
|
|
322
396
|
subclass = Class.new(parent)
|
|
323
|
-
subclass.set_it_up(description,
|
|
324
|
-
ExampleGroups.assign_const(subclass)
|
|
397
|
+
subclass.set_it_up(description, args, registration_collection, &example_group_block)
|
|
325
398
|
subclass.module_exec(&example_group_block) if example_group_block
|
|
326
399
|
|
|
327
400
|
# The LetDefinitions module must be included _after_ other modules
|
|
@@ -334,26 +407,43 @@ module RSpec
|
|
|
334
407
|
end
|
|
335
408
|
|
|
336
409
|
# @private
|
|
337
|
-
def self.set_it_up(
|
|
410
|
+
def self.set_it_up(description, args, registration_collection, &example_group_block)
|
|
338
411
|
# Ruby 1.9 has a bug that can lead to infinite recursion and a
|
|
339
412
|
# SystemStackError if you include a module in a superclass after
|
|
340
413
|
# including it in a subclass: https://gist.github.com/845896
|
|
341
|
-
# To prevent this, we must include any modules in
|
|
342
|
-
# before users create example groups and have
|
|
343
|
-
# the same module in a subclass of
|
|
344
|
-
# So we need to configure example groups
|
|
414
|
+
# To prevent this, we must include any modules in
|
|
415
|
+
# RSpec::Core::ExampleGroup before users create example groups and have
|
|
416
|
+
# a chance to include the same module in a subclass of
|
|
417
|
+
# RSpec::Core::ExampleGroup. So we need to configure example groups
|
|
418
|
+
# here.
|
|
345
419
|
ensure_example_groups_are_configured
|
|
346
420
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
421
|
+
# Register the example with the group before creating the metadata hash.
|
|
422
|
+
# This is necessary since creating the metadata hash triggers
|
|
423
|
+
# `when_first_matching_example_defined` callbacks, in which users can
|
|
424
|
+
# load RSpec support code which defines hooks. For that to work, the
|
|
425
|
+
# examples and example groups must be registered at the time the
|
|
426
|
+
# support code is called or be defined afterwards.
|
|
427
|
+
# Begin defined beforehand but registered afterwards causes hooks to
|
|
428
|
+
# not be applied where they should.
|
|
429
|
+
registration_collection << self
|
|
430
|
+
|
|
431
|
+
@user_metadata = Metadata.build_hash_from(args)
|
|
350
432
|
|
|
351
433
|
@metadata = Metadata::ExampleGroupHash.create(
|
|
352
|
-
superclass_metadata, user_metadata,
|
|
434
|
+
superclass_metadata, @user_metadata,
|
|
435
|
+
superclass.method(:next_runnable_index_for),
|
|
436
|
+
description, *args, &example_group_block
|
|
353
437
|
)
|
|
354
438
|
|
|
355
|
-
|
|
356
|
-
|
|
439
|
+
config = RSpec.configuration
|
|
440
|
+
config.apply_derived_metadata_to(@metadata)
|
|
441
|
+
|
|
442
|
+
ExampleGroups.assign_const(self)
|
|
443
|
+
|
|
444
|
+
@currently_executing_a_context_hook = false
|
|
445
|
+
|
|
446
|
+
config.configure_group(self)
|
|
357
447
|
end
|
|
358
448
|
|
|
359
449
|
# @private
|
|
@@ -368,7 +458,8 @@ module RSpec
|
|
|
368
458
|
|
|
369
459
|
# @private
|
|
370
460
|
def self.descendant_filtered_examples
|
|
371
|
-
@descendant_filtered_examples ||= filtered_examples +
|
|
461
|
+
@descendant_filtered_examples ||= filtered_examples +
|
|
462
|
+
FlatMap.flat_map(children, &:descendant_filtered_examples)
|
|
372
463
|
end
|
|
373
464
|
|
|
374
465
|
# @private
|
|
@@ -376,9 +467,41 @@ module RSpec
|
|
|
376
467
|
@children ||= []
|
|
377
468
|
end
|
|
378
469
|
|
|
470
|
+
# @private
|
|
471
|
+
# Traverses the tree of groups, starting with `self`, then the children, recursively.
|
|
472
|
+
# Halts the traversal of a branch of the tree as soon as the passed block returns true.
|
|
473
|
+
# Note that siblings groups and their sub-trees will continue to be explored.
|
|
474
|
+
# This is intended to make it easy to find the top-most group that satisfies some
|
|
475
|
+
# condition.
|
|
476
|
+
def self.traverse_tree_until(&block)
|
|
477
|
+
return if yield self
|
|
478
|
+
|
|
479
|
+
children.each do |child|
|
|
480
|
+
child.traverse_tree_until(&block)
|
|
481
|
+
end
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
# @private
|
|
485
|
+
def self.next_runnable_index_for(file)
|
|
486
|
+
if self == ExampleGroup
|
|
487
|
+
# We add 1 so the ids start at 1 instead of 0. This is
|
|
488
|
+
# necessary for this branch (but not for the other one)
|
|
489
|
+
# because we register examples and groups with the
|
|
490
|
+
# `children` and `examples` collection BEFORE this
|
|
491
|
+
# method is called as part of metadata hash creation,
|
|
492
|
+
# but the example group is recorded with
|
|
493
|
+
# `RSpec.world.example_group_counts_by_spec_file` AFTER
|
|
494
|
+
# the metadata hash is created and the group is returned
|
|
495
|
+
# to the caller.
|
|
496
|
+
RSpec.world.num_example_groups_defined_in(file) + 1
|
|
497
|
+
else
|
|
498
|
+
children.count + examples.count
|
|
499
|
+
end
|
|
500
|
+
end
|
|
501
|
+
|
|
379
502
|
# @private
|
|
380
503
|
def self.descendants
|
|
381
|
-
@_descendants ||= [self] +
|
|
504
|
+
@_descendants ||= [self] + FlatMap.flat_map(children, &:descendants)
|
|
382
505
|
end
|
|
383
506
|
|
|
384
507
|
## @private
|
|
@@ -388,7 +511,7 @@ module RSpec
|
|
|
388
511
|
|
|
389
512
|
# @private
|
|
390
513
|
def self.top_level?
|
|
391
|
-
|
|
514
|
+
superclass == ExampleGroup
|
|
392
515
|
end
|
|
393
516
|
|
|
394
517
|
# @private
|
|
@@ -409,58 +532,91 @@ module RSpec
|
|
|
409
532
|
|
|
410
533
|
# @private
|
|
411
534
|
def self.store_before_context_ivars(example_group_instance)
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
example_group_instance.instance_variables.each do |ivar|
|
|
535
|
+
each_instance_variable_for_example(example_group_instance) do |ivar|
|
|
415
536
|
before_context_ivars[ivar] = example_group_instance.instance_variable_get(ivar)
|
|
416
537
|
end
|
|
417
538
|
end
|
|
418
539
|
|
|
540
|
+
# Returns true if a `before(:context)` or `after(:context)`
|
|
541
|
+
# hook is currently executing.
|
|
542
|
+
def self.currently_executing_a_context_hook?
|
|
543
|
+
@currently_executing_a_context_hook
|
|
544
|
+
end
|
|
545
|
+
|
|
419
546
|
# @private
|
|
420
547
|
def self.run_before_context_hooks(example_group_instance)
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
548
|
+
set_ivars(example_group_instance, superclass_before_context_ivars)
|
|
549
|
+
|
|
550
|
+
@currently_executing_a_context_hook = true
|
|
551
|
+
|
|
552
|
+
ContextHookMemoized::Before.isolate_for_context_hook(example_group_instance) do
|
|
553
|
+
hooks.run(:before, :context, example_group_instance)
|
|
554
|
+
end
|
|
555
|
+
ensure
|
|
556
|
+
store_before_context_ivars(example_group_instance)
|
|
557
|
+
@currently_executing_a_context_hook = false
|
|
558
|
+
end
|
|
424
559
|
|
|
425
|
-
|
|
426
|
-
|
|
560
|
+
if RUBY_VERSION.to_f >= 1.9
|
|
561
|
+
# @private
|
|
562
|
+
def self.superclass_before_context_ivars
|
|
563
|
+
superclass.before_context_ivars
|
|
564
|
+
end
|
|
565
|
+
else # 1.8.7
|
|
566
|
+
# :nocov:
|
|
567
|
+
# @private
|
|
568
|
+
def self.superclass_before_context_ivars
|
|
569
|
+
if superclass.respond_to?(:before_context_ivars)
|
|
570
|
+
superclass.before_context_ivars
|
|
571
|
+
else
|
|
572
|
+
# `self` must be the singleton class of an ExampleGroup instance.
|
|
573
|
+
# On 1.8.7, the superclass of a singleton class of an instance of A
|
|
574
|
+
# is A's singleton class. On 1.9+, it's A. On 1.8.7, the first ancestor
|
|
575
|
+
# is A, so we can mirror 1.8.7's behavior here. Note that we have to
|
|
576
|
+
# search for the first that responds to `before_context_ivars`
|
|
577
|
+
# in case a module has been included in the singleton class.
|
|
578
|
+
ancestors.find { |a| a.respond_to?(:before_context_ivars) }.before_context_ivars
|
|
427
579
|
end
|
|
428
|
-
ensure
|
|
429
|
-
store_before_context_ivars(example_group_instance)
|
|
430
580
|
end
|
|
581
|
+
# :nocov:
|
|
431
582
|
end
|
|
432
583
|
|
|
433
584
|
# @private
|
|
434
585
|
def self.run_after_context_hooks(example_group_instance)
|
|
435
|
-
return if descendant_filtered_examples.empty?
|
|
436
586
|
set_ivars(example_group_instance, before_context_ivars)
|
|
437
587
|
|
|
438
|
-
|
|
588
|
+
@currently_executing_a_context_hook = true
|
|
589
|
+
|
|
590
|
+
ContextHookMemoized::After.isolate_for_context_hook(example_group_instance) do
|
|
439
591
|
hooks.run(:after, :context, example_group_instance)
|
|
440
592
|
end
|
|
593
|
+
ensure
|
|
594
|
+
before_context_ivars.clear
|
|
595
|
+
@currently_executing_a_context_hook = false
|
|
441
596
|
end
|
|
442
597
|
|
|
443
|
-
# Runs all the examples in this group
|
|
444
|
-
def self.run(reporter)
|
|
445
|
-
if RSpec.world.wants_to_quit
|
|
446
|
-
RSpec.world.clear_remaining_example_groups if top_level?
|
|
447
|
-
return
|
|
448
|
-
end
|
|
598
|
+
# Runs all the examples in this group.
|
|
599
|
+
def self.run(reporter=RSpec::Core::NullReporter)
|
|
600
|
+
return if RSpec.world.wants_to_quit
|
|
449
601
|
reporter.example_group_started(self)
|
|
450
602
|
|
|
603
|
+
should_run_context_hooks = descendant_filtered_examples.any?
|
|
451
604
|
begin
|
|
452
|
-
|
|
605
|
+
RSpec.current_scope = :before_context_hook
|
|
606
|
+
run_before_context_hooks(new('before(:context) hook')) if should_run_context_hooks
|
|
453
607
|
result_for_this_group = run_examples(reporter)
|
|
454
608
|
results_for_descendants = ordering_strategy.order(children).map { |child| child.run(reporter) }.all?
|
|
455
609
|
result_for_this_group && results_for_descendants
|
|
456
610
|
rescue Pending::SkipDeclaredInExample => ex
|
|
457
611
|
for_filtered_examples(reporter) { |example| example.skip_with_exception(reporter, ex) }
|
|
458
|
-
|
|
459
|
-
|
|
612
|
+
true
|
|
613
|
+
rescue Support::AllExceptionsExceptOnesWeMustNotRescue => ex
|
|
460
614
|
for_filtered_examples(reporter) { |example| example.fail_with_exception(reporter, ex) }
|
|
615
|
+
RSpec.world.wants_to_quit = true if reporter.fail_fast_limit_met?
|
|
616
|
+
false
|
|
461
617
|
ensure
|
|
462
|
-
|
|
463
|
-
|
|
618
|
+
RSpec.current_scope = :after_context_hook
|
|
619
|
+
run_after_context_hooks(new('after(:context) hook')) if should_run_context_hooks
|
|
464
620
|
reporter.example_group_finished(self)
|
|
465
621
|
end
|
|
466
622
|
end
|
|
@@ -485,10 +641,12 @@ module RSpec
|
|
|
485
641
|
def self.run_examples(reporter)
|
|
486
642
|
ordering_strategy.order(filtered_examples).map do |example|
|
|
487
643
|
next if RSpec.world.wants_to_quit
|
|
488
|
-
instance = new
|
|
644
|
+
instance = new(example.inspect_output)
|
|
489
645
|
set_ivars(instance, before_context_ivars)
|
|
490
646
|
succeeded = example.run(instance, reporter)
|
|
491
|
-
|
|
647
|
+
if !succeeded && reporter.fail_fast_limit_met?
|
|
648
|
+
RSpec.world.wants_to_quit = true
|
|
649
|
+
end
|
|
492
650
|
succeeded
|
|
493
651
|
end.all?
|
|
494
652
|
end
|
|
@@ -506,37 +664,111 @@ module RSpec
|
|
|
506
664
|
end
|
|
507
665
|
|
|
508
666
|
# @private
|
|
509
|
-
def self.
|
|
510
|
-
|
|
667
|
+
def self.declaration_locations
|
|
668
|
+
@declaration_locations ||= [Metadata.location_tuple_from(metadata)] +
|
|
669
|
+
examples.map { |e| Metadata.location_tuple_from(e.metadata) } +
|
|
670
|
+
FlatMap.flat_map(children, &:declaration_locations)
|
|
671
|
+
end
|
|
672
|
+
|
|
673
|
+
# @return [String] the unique id of this example group. Pass
|
|
674
|
+
# this at the command line to re-run this exact example group.
|
|
675
|
+
def self.id
|
|
676
|
+
Metadata.id_from(metadata)
|
|
511
677
|
end
|
|
512
678
|
|
|
513
679
|
# @private
|
|
514
|
-
def self.
|
|
515
|
-
|
|
680
|
+
def self.top_level_description
|
|
681
|
+
parent_groups.last.description
|
|
516
682
|
end
|
|
517
683
|
|
|
518
684
|
# @private
|
|
519
|
-
def self.
|
|
520
|
-
|
|
685
|
+
def self.set_ivars(instance, ivars)
|
|
686
|
+
ivars.each { |name, value| instance.instance_variable_set(name, value) }
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
if RUBY_VERSION.to_f < 1.9
|
|
690
|
+
# :nocov:
|
|
691
|
+
# @private
|
|
692
|
+
INSTANCE_VARIABLE_TO_IGNORE = '@__inspect_output'.freeze
|
|
693
|
+
# :nocov:
|
|
694
|
+
else
|
|
695
|
+
# @private
|
|
696
|
+
INSTANCE_VARIABLE_TO_IGNORE = :@__inspect_output
|
|
521
697
|
end
|
|
522
698
|
|
|
523
699
|
# @private
|
|
524
|
-
def self.
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
700
|
+
def self.each_instance_variable_for_example(group)
|
|
701
|
+
group.instance_variables.each do |ivar|
|
|
702
|
+
yield ivar unless ivar == INSTANCE_VARIABLE_TO_IGNORE
|
|
703
|
+
end
|
|
528
704
|
end
|
|
529
705
|
|
|
530
706
|
# @private
|
|
531
|
-
def
|
|
532
|
-
|
|
707
|
+
def initialize(inspect_output=nil)
|
|
708
|
+
@__inspect_output = inspect_output || '(no description provided)'
|
|
709
|
+
super() # no args get passed
|
|
533
710
|
end
|
|
534
711
|
|
|
535
712
|
# @private
|
|
536
|
-
def
|
|
537
|
-
|
|
713
|
+
def inspect
|
|
714
|
+
"#<#{self.class} #{@__inspect_output}>"
|
|
715
|
+
end
|
|
716
|
+
|
|
717
|
+
unless method_defined?(:singleton_class) # for 1.8.7
|
|
718
|
+
# :nocov:
|
|
719
|
+
# @private
|
|
720
|
+
def singleton_class
|
|
721
|
+
class << self; self; end
|
|
722
|
+
end
|
|
723
|
+
# :nocov:
|
|
724
|
+
end
|
|
725
|
+
|
|
726
|
+
# @private
|
|
727
|
+
def self.update_inherited_metadata(updates)
|
|
728
|
+
metadata.update(updates) do |key, existing_group_value, new_inherited_value|
|
|
729
|
+
@user_metadata.key?(key) ? existing_group_value : new_inherited_value
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
RSpec.configuration.configure_group(self)
|
|
733
|
+
examples.each { |ex| ex.update_inherited_metadata(updates) }
|
|
734
|
+
children.each { |group| group.update_inherited_metadata(updates) }
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
# Raised when an RSpec API is called in the wrong scope, such as `before`
|
|
738
|
+
# being called from within an example rather than from within an example
|
|
739
|
+
# group block.
|
|
740
|
+
WrongScopeError = Class.new(NoMethodError)
|
|
741
|
+
|
|
742
|
+
def self.method_missing(name, *args)
|
|
743
|
+
if method_defined?(name)
|
|
744
|
+
raise WrongScopeError,
|
|
745
|
+
"`#{name}` is not available on an example group (e.g. a " \
|
|
746
|
+
"`describe` or `context` block). It is only available from " \
|
|
747
|
+
"within individual examples (e.g. `it` blocks) or from " \
|
|
748
|
+
"constructs that run in the scope of an example (e.g. " \
|
|
749
|
+
"`before`, `let`, etc)."
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
super
|
|
538
753
|
end
|
|
754
|
+
private_class_method :method_missing
|
|
755
|
+
|
|
756
|
+
private
|
|
757
|
+
|
|
758
|
+
def method_missing(name, *args)
|
|
759
|
+
if self.class.respond_to?(name)
|
|
760
|
+
raise WrongScopeError,
|
|
761
|
+
"`#{name}` is not available from within an example (e.g. an " \
|
|
762
|
+
"`it` block) or from constructs that run in the scope of an " \
|
|
763
|
+
"example (e.g. `before`, `let`, etc). It is only available " \
|
|
764
|
+
"on an example group (e.g. a `describe` or `context` block)."
|
|
765
|
+
end
|
|
766
|
+
|
|
767
|
+
super(name, *args)
|
|
768
|
+
end
|
|
769
|
+
ruby2_keywords :method_missing if respond_to?(:ruby2_keywords, true)
|
|
539
770
|
end
|
|
771
|
+
# rubocop:enable Metrics/ClassLength
|
|
540
772
|
|
|
541
773
|
# @private
|
|
542
774
|
# Unnamed example group used by `SuiteHookContext`.
|
|
@@ -545,11 +777,65 @@ module RSpec
|
|
|
545
777
|
{}
|
|
546
778
|
end
|
|
547
779
|
end
|
|
780
|
+
|
|
781
|
+
# Contains information about the inclusion site of a shared example group.
|
|
782
|
+
class SharedExampleGroupInclusionStackFrame
|
|
783
|
+
# @return [String] the name of the shared example group
|
|
784
|
+
attr_reader :shared_group_name
|
|
785
|
+
# @return [String] the location where the shared example was included
|
|
786
|
+
attr_reader :inclusion_location
|
|
787
|
+
|
|
788
|
+
# @private
|
|
789
|
+
def initialize(shared_group_name, inclusion_location)
|
|
790
|
+
@shared_group_name = shared_group_name
|
|
791
|
+
@inclusion_location = inclusion_location
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
# @return [String] The {#inclusion_location}, formatted for display by a formatter.
|
|
795
|
+
def formatted_inclusion_location
|
|
796
|
+
@formatted_inclusion_location ||= begin
|
|
797
|
+
RSpec.configuration.backtrace_formatter.backtrace_line(
|
|
798
|
+
inclusion_location.sub(/(:\d+):in .+$/, '\1')
|
|
799
|
+
)
|
|
800
|
+
end
|
|
801
|
+
end
|
|
802
|
+
|
|
803
|
+
# @return [String] Description of this stack frame, in the form used by
|
|
804
|
+
# RSpec's built-in formatters.
|
|
805
|
+
def description
|
|
806
|
+
@description ||= "Shared Example Group: #{shared_group_name.inspect} " \
|
|
807
|
+
"called from #{formatted_inclusion_location}"
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
# @private
|
|
811
|
+
def self.current_backtrace
|
|
812
|
+
shared_example_group_inclusions.reverse
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
# @private
|
|
816
|
+
def self.with_frame(name, location)
|
|
817
|
+
current_stack = shared_example_group_inclusions
|
|
818
|
+
if current_stack.any? { |frame| frame.shared_group_name == name }
|
|
819
|
+
raise ArgumentError, "can't include shared examples recursively"
|
|
820
|
+
else
|
|
821
|
+
current_stack << new(name, location)
|
|
822
|
+
yield
|
|
823
|
+
end
|
|
824
|
+
ensure
|
|
825
|
+
current_stack.pop
|
|
826
|
+
end
|
|
827
|
+
|
|
828
|
+
# @private
|
|
829
|
+
def self.shared_example_group_inclusions
|
|
830
|
+
RSpec::Support.thread_local_data[:shared_example_group_inclusions] ||= []
|
|
831
|
+
end
|
|
832
|
+
end
|
|
548
833
|
end
|
|
549
834
|
|
|
550
835
|
# @private
|
|
551
836
|
#
|
|
552
|
-
# Namespace for the example group subclasses generated by top-level
|
|
837
|
+
# Namespace for the example group subclasses generated by top-level
|
|
838
|
+
# `describe`.
|
|
553
839
|
module ExampleGroups
|
|
554
840
|
extend Support::RecursiveConstMethods
|
|
555
841
|
|
|
@@ -567,24 +853,35 @@ module RSpec
|
|
|
567
853
|
const_scope
|
|
568
854
|
end
|
|
569
855
|
|
|
856
|
+
def self.remove_all_constants
|
|
857
|
+
constants.each do |constant|
|
|
858
|
+
__send__(:remove_const, constant)
|
|
859
|
+
end
|
|
860
|
+
end
|
|
861
|
+
|
|
570
862
|
def self.base_name_for(group)
|
|
571
|
-
return "Anonymous" if group.description.empty?
|
|
863
|
+
return "Anonymous".dup if group.description.empty?
|
|
572
864
|
|
|
573
|
-
#
|
|
865
|
+
# Convert to CamelCase.
|
|
574
866
|
name = ' ' + group.description
|
|
575
|
-
name.gsub!(/[^0-9a-zA-Z]+([0-9a-zA-Z])/)
|
|
867
|
+
name.gsub!(/[^0-9a-zA-Z]+([0-9a-zA-Z])/) do
|
|
868
|
+
match = ::Regexp.last_match[1]
|
|
869
|
+
match.upcase!
|
|
870
|
+
match
|
|
871
|
+
end
|
|
576
872
|
|
|
577
|
-
name.lstrip!
|
|
578
|
-
name.gsub!(/\W/, '') # JRuby, RBX and others don't like non-ascii in const names
|
|
873
|
+
name.lstrip! # Remove leading whitespace
|
|
874
|
+
name.gsub!(/\W/, ''.freeze) # JRuby, RBX and others don't like non-ascii in const names
|
|
579
875
|
|
|
580
876
|
# Ruby requires first const letter to be A-Z. Use `Nested`
|
|
581
877
|
# as necessary to enforce that.
|
|
582
|
-
name.gsub!(/\A([^A-Z]|\z)/, 'Nested\1')
|
|
878
|
+
name.gsub!(/\A([^A-Z]|\z)/, 'Nested\1'.freeze)
|
|
583
879
|
|
|
584
880
|
name
|
|
585
881
|
end
|
|
586
882
|
|
|
587
883
|
if RUBY_VERSION == '1.9.2'
|
|
884
|
+
# :nocov:
|
|
588
885
|
class << self
|
|
589
886
|
alias _base_name_for base_name_for
|
|
590
887
|
def base_name_for(group)
|
|
@@ -592,12 +889,14 @@ module RSpec
|
|
|
592
889
|
end
|
|
593
890
|
end
|
|
594
891
|
private_class_method :_base_name_for
|
|
892
|
+
# :nocov:
|
|
595
893
|
end
|
|
596
894
|
|
|
597
895
|
def self.disambiguate(name, const_scope)
|
|
598
896
|
return name unless const_defined_on?(const_scope, name)
|
|
599
897
|
|
|
600
|
-
# Add a trailing number if needed to disambiguate from an existing
|
|
898
|
+
# Add a trailing number if needed to disambiguate from an existing
|
|
899
|
+
# constant.
|
|
601
900
|
name << "_2"
|
|
602
901
|
name.next! while const_defined_on?(const_scope, name)
|
|
603
902
|
name
|