opal-rspec 0.8.0.alpha3 → 1.0.0.alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +7 -7
- data/.gitmodules +6 -0
- data/CHANGELOG.md +16 -1
- data/Gemfile +13 -0
- data/README.md +63 -59
- data/diff-lcs/spec/files_to_exclude.txt +1 -0
- data/diff-lcs/spec/requires.rb +4 -0
- data/diff-lcs/upstream/.autotest +5 -0
- data/diff-lcs/upstream/.fasterer.yml +3 -0
- data/{stubs/diff/lcs.rb → diff-lcs/upstream/.gemtest} +0 -0
- data/diff-lcs/upstream/.github/workflows/ci.yml +64 -0
- data/diff-lcs/upstream/.github/workflows/codeql-analysis.yml +70 -0
- data/diff-lcs/upstream/.gitignore +20 -0
- data/diff-lcs/upstream/.hoerc +52 -0
- data/diff-lcs/upstream/.rspec +1 -0
- data/diff-lcs/upstream/.standard.yml +6 -0
- data/diff-lcs/upstream/Code-of-Conduct.md +74 -0
- data/diff-lcs/upstream/Contributing.md +119 -0
- data/diff-lcs/upstream/Gemfile +28 -0
- data/diff-lcs/upstream/History.md +407 -0
- data/diff-lcs/upstream/License.md +41 -0
- data/diff-lcs/upstream/Manifest.txt +59 -0
- data/diff-lcs/upstream/README.rdoc +84 -0
- data/diff-lcs/upstream/Rakefile +127 -0
- data/diff-lcs/upstream/bin/htmldiff +35 -0
- data/diff-lcs/upstream/bin/ldiff +9 -0
- data/diff-lcs/upstream/diff-lcs.gemspec +48 -0
- data/diff-lcs/upstream/docs/COPYING.txt +339 -0
- data/diff-lcs/upstream/docs/artistic.txt +127 -0
- data/diff-lcs/upstream/lib/diff/lcs/array.rb +7 -0
- data/diff-lcs/upstream/lib/diff/lcs/backports.rb +9 -0
- data/diff-lcs/upstream/lib/diff/lcs/block.rb +37 -0
- data/diff-lcs/upstream/lib/diff/lcs/callbacks.rb +327 -0
- data/diff-lcs/upstream/lib/diff/lcs/change.rb +174 -0
- data/diff-lcs/upstream/lib/diff/lcs/htmldiff.rb +158 -0
- data/diff-lcs/upstream/lib/diff/lcs/hunk.rb +363 -0
- data/diff-lcs/upstream/lib/diff/lcs/internals.rb +308 -0
- data/diff-lcs/upstream/lib/diff/lcs/ldiff.rb +173 -0
- data/diff-lcs/upstream/lib/diff/lcs/string.rb +5 -0
- data/diff-lcs/upstream/lib/diff/lcs.rb +741 -0
- data/diff-lcs/upstream/lib/diff-lcs.rb +3 -0
- data/diff-lcs/upstream/spec/change_spec.rb +89 -0
- data/diff-lcs/upstream/spec/diff_spec.rb +51 -0
- data/diff-lcs/upstream/spec/fixtures/aX +1 -0
- data/diff-lcs/upstream/spec/fixtures/bXaX +1 -0
- data/diff-lcs/upstream/spec/fixtures/ds1.csv +50 -0
- data/diff-lcs/upstream/spec/fixtures/ds2.csv +51 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff +4 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-c +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-e +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-f +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-u +5 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef +4 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-c +15 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-e +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-f +3 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-u +9 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2 +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-c +20 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-d +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-e +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-f +7 -0
- data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-u +16 -0
- data/diff-lcs/upstream/spec/fixtures/new-chef +4 -0
- data/diff-lcs/upstream/spec/fixtures/new-chef2 +17 -0
- data/diff-lcs/upstream/spec/fixtures/old-chef +4 -0
- data/diff-lcs/upstream/spec/fixtures/old-chef2 +14 -0
- data/diff-lcs/upstream/spec/hunk_spec.rb +83 -0
- data/diff-lcs/upstream/spec/issues_spec.rb +160 -0
- data/diff-lcs/upstream/spec/lcs_spec.rb +56 -0
- data/diff-lcs/upstream/spec/ldiff_spec.rb +89 -0
- data/diff-lcs/upstream/spec/patch_spec.rb +416 -0
- data/diff-lcs/upstream/spec/sdiff_spec.rb +216 -0
- data/diff-lcs/upstream/spec/spec_helper.rb +376 -0
- data/diff-lcs/upstream/spec/traverse_balanced_spec.rb +312 -0
- data/diff-lcs/upstream/spec/traverse_sequences_spec.rb +137 -0
- data/lib/opal/rspec/runner.rb +11 -0
- data/lib/opal/rspec/sprockets.rb +6 -0
- data/lib/opal/rspec/version.rb +1 -1
- data/lib/opal/rspec.rb +1 -2
- data/lib-opal/opal/rspec/async/configuration.rb +39 -0
- data/lib-opal/opal/rspec/async/example.rb +80 -168
- data/lib-opal/opal/rspec/async/example_group.rb +71 -81
- data/lib-opal/opal/rspec/async/hooks.rb +98 -8
- data/lib-opal/opal/rspec/async/memoized_helpers.rb +32 -0
- data/lib-opal/opal/rspec/async/reporter.rb +6 -3
- data/lib-opal/opal/rspec/async/runner.rb +33 -24
- data/lib-opal/opal/rspec/async.rb +4 -1
- data/lib-opal/opal/rspec/browser.rb +0 -8
- data/lib-opal/opal/rspec/browser_early.rb +5 -0
- data/lib-opal/opal/rspec/fixes/diff-lcs/hunk.rb +164 -0
- data/lib-opal/opal/rspec/fixes/diff-lcs/lcs.rb +112 -0
- data/lib-opal/opal/rspec/fixes/diff-lcs.rb +2 -0
- data/lib-opal/opal/rspec/fixes/opal.rb +4 -17
- data/lib-opal/opal/rspec/fixes/rspec/core/example_status_persister.rb +11 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/deprecation_formatter.rb +3 -12
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/exception_presenter.rb +28 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/loader.rb +0 -32
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/snippet_extractor.rb +17 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/syntax_highlighter.rb +17 -0
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters.rb +3 -4
- data/lib-opal/opal/rspec/fixes/rspec/core/metadata.rb +24 -8
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications/examples_notification.rb +3 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications.rb +0 -2
- data/lib-opal/opal/rspec/fixes/rspec/core.rb +1 -2
- data/lib-opal/opal/rspec/fixes/rspec/expectations.rb +0 -1
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/base_matcher.rb +26 -0
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in.rb +1 -3
- data/lib-opal/opal/rspec/fixes/rspec/matchers/expecteds_for_multiple_diffs.rb +13 -0
- data/lib-opal/opal/rspec/fixes/rspec/matchers.rb +1 -1
- data/lib-opal/opal/rspec/fixes/rspec/mocks/error_generator.rb +26 -10
- data/lib-opal/opal/rspec/fixes/rspec/mocks/proxy.rb +19 -0
- data/lib-opal/opal/rspec/fixes/rspec/mocks.rb +1 -3
- data/lib-opal/opal/rspec/fixes/rspec/support/differ.rb +29 -0
- data/lib-opal/opal/rspec/fixes/rspec/support/encoded_string.rb +9 -5
- data/lib-opal/opal/rspec/fixes/rspec/support/ruby_features.rb +22 -0
- data/lib-opal/opal/rspec/fixes/rspec/support/source.rb +15 -0
- data/lib-opal/opal/rspec/fixes/rspec/support.rb +3 -3
- data/lib-opal/opal/rspec/fixes/rspec.rb +0 -1
- data/lib-opal/opal/rspec/fixes.rb +1 -0
- data/lib-opal/opal/rspec/formatter/document_io.rb +1 -1
- data/lib-opal/opal/rspec/formatter/html_printer.rb +1 -1
- data/lib-opal/opal/rspec/pre_require_fixes.rb +1 -5
- data/lib-opal/opal/rspec/requires.rb +32 -19
- data/lib-opal/opal/rspec/sprockets_runner.rb.erb +1 -0
- data/lib-opal/opal/rspec.rb +3 -0
- data/opal-rspec.gemspec +1 -1
- data/rspec/upstream/.document +1 -1
- data/rspec/upstream/.github/FUNDING.yml +5 -0
- data/rspec/upstream/.gitignore +1 -0
- data/rspec/upstream/LICENSE.md +27 -0
- data/rspec/upstream/README.md +26 -26
- data/rspec/upstream/Rakefile +1 -1
- data/rspec/upstream/certs/rspec.pem +32 -20
- data/rspec/upstream/certs/samphippen.asc +18 -0
- data/rspec/upstream/code_of_conduct.md +59 -0
- data/rspec/upstream/lib/rspec/version.rb +1 -1
- data/rspec/upstream/rspec.gemspec +7 -2
- data/rspec-core/upstream/.document +1 -1
- data/rspec-core/upstream/.github/FUNDING.yml +5 -0
- data/rspec-core/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-core/upstream/.gitignore +2 -0
- data/rspec-core/upstream/.rspec +1 -0
- data/rspec-core/upstream/.rubocop.yml +64 -12
- data/rspec-core/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-core/upstream/.rubocop_todo.yml +1031 -0
- data/rspec-core/upstream/.yardopts +2 -1
- data/rspec-core/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-core/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-core/upstream/CONTRIBUTING.md +86 -0
- data/rspec-core/upstream/Changelog.md +721 -2
- data/rspec-core/upstream/DEV-README.md +2 -2
- data/rspec-core/upstream/DEVELOPMENT.md +131 -0
- data/rspec-core/upstream/Filtering.md +173 -0
- data/rspec-core/upstream/Gemfile +78 -9
- data/rspec-core/upstream/ISSUE_TEMPLATE.md +24 -0
- data/rspec-core/upstream/{License.txt → LICENSE.md} +6 -5
- data/rspec-core/upstream/README.md +165 -24
- data/rspec-core/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-core/upstream/Rakefile +1 -1
- data/rspec-core/upstream/benchmarks/allocations/1000_groups_1_example.rb +124 -0
- data/rspec-core/upstream/benchmarks/allocations/1_group_1000_examples.rb +63 -0
- data/rspec-core/upstream/benchmarks/allocations/helper.rb +30 -0
- data/rspec-core/upstream/benchmarks/allocations/running_1000_groups_1_example.rb +100 -0
- data/rspec-core/upstream/benchmarks/allocations/running_1_group_1000_examples.rb +60 -0
- data/rspec-core/upstream/benchmarks/capture_block_vs_yield.rb +208 -0
- data/rspec-core/upstream/benchmarks/flat_map_vs_inject.rb +55 -0
- data/rspec-core/upstream/benchmarks/hash_functions.rb +74 -0
- data/rspec-core/upstream/benchmarks/keys_each_vs_each_key.rb +43 -0
- data/rspec-core/upstream/benchmarks/module_inclusion_filtering.rb +89 -0
- data/rspec-core/upstream/benchmarks/precalculate_absolute_file_path_or_not.rb +29 -0
- data/rspec-core/upstream/benchmarks/shuffle_vs_sort_by_for_random_ordering.rb +131 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/helper.rb +122 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks.rb +28 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks_module_inclusions_and_shared_context_inclusions.rb +35 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_module_inclusions.rb +28 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_no_config_hooks_or_inclusions.rb +22 -0
- data/rspec-core/upstream/benchmarks/singleton_example_groups/with_shared_context_inclusions.rb +28 -0
- data/rspec-core/upstream/benchmarks/threadsafe_let_block.rb +312 -0
- data/rspec-core/upstream/cucumber.yml +7 -2
- data/rspec-core/upstream/features/.nav +5 -1
- data/rspec-core/upstream/features/README.md +2 -2
- data/rspec-core/upstream/features/clear_examples.feature +106 -0
- data/rspec-core/upstream/features/command_line/bisect.feature +178 -0
- data/rspec-core/upstream/features/command_line/example_matches_name_option.feature +131 -0
- data/rspec-core/upstream/features/command_line/example_name_option.feature +2 -0
- data/rspec-core/upstream/features/command_line/fail_fast.feature +21 -4
- data/rspec-core/upstream/features/command_line/init.feature +2 -2
- data/rspec-core/upstream/features/command_line/line_number_appended_to_path.feature +2 -2
- data/rspec-core/upstream/features/command_line/only_failures.feature +113 -0
- data/rspec-core/upstream/features/command_line/order.md +8 -1
- data/rspec-core/upstream/features/command_line/pattern_option.feature +6 -3
- data/rspec-core/upstream/features/command_line/rake_task.feature +3 -3
- data/rspec-core/upstream/features/command_line/randomization.feature +5 -2
- data/rspec-core/upstream/features/command_line/ruby.feature +6 -2
- data/rspec-core/upstream/features/command_line/tag.feature +13 -11
- data/rspec-core/upstream/features/command_line/warnings_option.feature +20 -3
- data/rspec-core/upstream/features/configuration/backtrace_exclusion_patterns.feature +45 -29
- data/rspec-core/upstream/features/configuration/color.feature +22 -0
- data/rspec-core/upstream/features/configuration/custom_settings.feature +9 -13
- data/rspec-core/upstream/features/configuration/default_path.feature +1 -1
- data/rspec-core/upstream/features/configuration/enable_global_dsl.feature +15 -1
- data/rspec-core/upstream/features/configuration/error_exit_code.feature +52 -0
- data/rspec-core/upstream/features/configuration/fail_fast.feature +42 -12
- data/rspec-core/upstream/features/configuration/fail_if_no_examples.feature +31 -0
- data/rspec-core/upstream/features/configuration/failure_exit_code.feature +26 -0
- data/rspec-core/upstream/features/configuration/overriding_global_ordering.feature +1 -1
- data/rspec-core/upstream/features/configuration/pattern.feature +1 -1
- data/rspec-core/upstream/features/configuration/profile.feature +25 -0
- data/rspec-core/upstream/features/configuration/read_options_from_file.feature +25 -19
- data/rspec-core/upstream/features/configuration/run_all_when_everything_filtered.feature +4 -0
- data/rspec-core/upstream/features/core_standalone.feature +2 -0
- data/rspec-core/upstream/features/example_groups/basic_structure.feature +1 -0
- data/rspec-core/upstream/features/example_groups/shared_context.feature +55 -5
- data/rspec-core/upstream/features/example_groups/shared_examples.feature +59 -15
- data/rspec-core/upstream/features/expectation_framework_integration/aggregating_failures.feature +602 -0
- data/rspec-core/upstream/features/expectation_framework_integration/configure_expectation_framework.feature +13 -5
- data/rspec-core/upstream/features/filtering/filter_run_when_matching.feature +75 -0
- data/rspec-core/upstream/features/formatters/configurable_colors.feature +23 -4
- data/rspec-core/upstream/features/helper_methods/let.feature +3 -0
- data/rspec-core/upstream/features/helper_methods/modules.feature +6 -0
- data/rspec-core/upstream/features/hooks/around_hooks.feature +36 -6
- data/rspec-core/upstream/features/hooks/before_and_after_hooks.feature +47 -5
- data/rspec-core/upstream/features/hooks/filtering.feature +199 -4
- data/rspec-core/upstream/features/hooks/when_first_matching_example_defined.feature +70 -0
- data/rspec-core/upstream/features/metadata/current_scope.feature +87 -0
- data/rspec-core/upstream/features/metadata/described_class.feature +12 -5
- data/rspec-core/upstream/features/metadata/user_defined.feature +3 -3
- data/rspec-core/upstream/features/mock_framework_integration/use_any_framework.feature +1 -1
- data/rspec-core/upstream/features/mock_framework_integration/use_flexmock.feature +5 -5
- data/rspec-core/upstream/features/mock_framework_integration/use_mocha.feature +5 -5
- data/rspec-core/upstream/features/mock_framework_integration/use_rr.feature +5 -5
- data/rspec-core/upstream/features/mock_framework_integration/use_rspec.feature +6 -6
- data/rspec-core/upstream/features/pending_and_skipped_examples/pending_examples.feature +8 -7
- data/rspec-core/upstream/features/pending_and_skipped_examples/skipped_examples.feature +49 -22
- data/rspec-core/upstream/features/step_definitions/additional_cli_steps.rb +142 -12
- data/rspec-core/upstream/features/step_definitions/core_standalone_steps.rb +6 -2
- data/rspec-core/upstream/features/subject/implicit_subject.feature +3 -2
- data/rspec-core/upstream/features/subject/one_liner_syntax.feature +9 -5
- data/rspec-core/upstream/features/support/diff_lcs_versions.rb +17 -0
- data/rspec-core/upstream/features/support/env.rb +20 -7
- data/rspec-core/upstream/features/support/jruby.rb +8 -0
- data/rspec-core/upstream/features/support/require_expect_syntax_in_aruba_specs.rb +6 -3
- data/rspec-core/upstream/features/support/rubinius.rb +5 -1
- data/rspec-core/upstream/features/support/ruby_27_support.rb +7 -0
- data/rspec-core/upstream/features/support/send_sigint_during_bisect.rb +21 -0
- data/rspec-core/upstream/lib/rspec/autorun.rb +1 -0
- data/rspec-core/upstream/lib/rspec/core/backtrace_formatter.rb +3 -4
- data/rspec-core/upstream/lib/rspec/core/bisect/coordinator.rb +62 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/example_minimizer.rb +173 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/fork_runner.rb +138 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/server.rb +61 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/shell_command.rb +126 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/shell_runner.rb +73 -0
- data/rspec-core/upstream/lib/rspec/core/bisect/utilities.rb +69 -0
- data/rspec-core/upstream/lib/rspec/core/configuration.rb +1157 -212
- data/rspec-core/upstream/lib/rspec/core/configuration_options.rb +82 -22
- data/rspec-core/upstream/lib/rspec/core/did_you_mean.rb +46 -0
- data/rspec-core/upstream/lib/rspec/core/drb.rb +10 -1
- data/rspec-core/upstream/lib/rspec/core/dsl.rb +10 -5
- data/rspec-core/upstream/lib/rspec/core/example.rb +271 -107
- data/rspec-core/upstream/lib/rspec/core/example_group.rb +426 -127
- data/rspec-core/upstream/lib/rspec/core/example_status_persister.rb +235 -0
- data/rspec-core/upstream/lib/rspec/core/filter_manager.rb +76 -104
- data/rspec-core/upstream/lib/rspec/core/flat_map.rb +6 -4
- data/rspec-core/upstream/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/base_formatter.rb +7 -4
- data/rspec-core/upstream/lib/rspec/core/formatters/base_text_formatter.rb +15 -16
- data/rspec-core/upstream/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/console_codes.rb +28 -16
- data/rspec-core/upstream/lib/rspec/core/formatters/deprecation_formatter.rb +14 -13
- data/rspec-core/upstream/lib/rspec/core/formatters/documentation_formatter.rb +47 -13
- data/rspec-core/upstream/lib/rspec/core/formatters/exception_presenter.rb +525 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/helpers.rb +40 -9
- data/rspec-core/upstream/lib/rspec/core/formatters/html_formatter.rb +20 -16
- data/rspec-core/upstream/lib/rspec/core/formatters/html_printer.rb +27 -18
- data/rspec-core/upstream/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/json_formatter.rb +15 -7
- data/rspec-core/upstream/lib/rspec/core/formatters/profile_formatter.rb +10 -7
- data/rspec-core/upstream/lib/rspec/core/formatters/progress_formatter.rb +1 -0
- data/rspec-core/upstream/lib/rspec/core/formatters/protocol.rb +62 -43
- data/rspec-core/upstream/lib/rspec/core/formatters/snippet_extractor.rb +115 -85
- data/rspec-core/upstream/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
- data/rspec-core/upstream/lib/rspec/core/formatters.rb +71 -32
- data/rspec-core/upstream/lib/rspec/core/hooks.rb +303 -248
- data/rspec-core/upstream/lib/rspec/core/invocations.rb +87 -0
- data/rspec-core/upstream/lib/rspec/core/memoized_helpers.rb +155 -47
- data/rspec-core/upstream/lib/rspec/core/metadata.rb +102 -41
- data/rspec-core/upstream/lib/rspec/core/metadata_filter.rb +209 -49
- data/rspec-core/upstream/lib/rspec/core/minitest_assertions_adapter.rb +5 -2
- data/rspec-core/upstream/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
- data/rspec-core/upstream/lib/rspec/core/mocking_adapters/mocha.rb +8 -8
- data/rspec-core/upstream/lib/rspec/core/notifications.rb +180 -201
- data/rspec-core/upstream/lib/rspec/core/option_parser.rb +159 -58
- data/rspec-core/upstream/lib/rspec/core/ordering.rb +40 -26
- data/rspec-core/upstream/lib/rspec/core/output_wrapper.rb +29 -0
- data/rspec-core/upstream/lib/rspec/core/pending.rb +19 -25
- data/rspec-core/upstream/lib/rspec/core/profiler.rb +34 -0
- data/rspec-core/upstream/lib/rspec/core/project_initializer/.rspec +0 -1
- data/rspec-core/upstream/lib/rspec/core/project_initializer/spec/spec_helper.rb +31 -22
- data/rspec-core/upstream/lib/rspec/core/project_initializer.rb +1 -1
- data/rspec-core/upstream/lib/rspec/core/rake_task.rb +73 -72
- data/rspec-core/upstream/lib/rspec/core/reporter.rb +134 -18
- data/rspec-core/upstream/lib/rspec/core/ruby_project.rb +13 -5
- data/rspec-core/upstream/lib/rspec/core/runner.rb +99 -45
- data/rspec-core/upstream/lib/rspec/core/sandbox.rb +37 -0
- data/rspec-core/upstream/lib/rspec/core/set.rb +54 -0
- data/rspec-core/upstream/lib/rspec/core/shared_example_group.rb +126 -37
- data/rspec-core/upstream/lib/rspec/core/shell_escape.rb +49 -0
- data/rspec-core/upstream/lib/rspec/core/test_unit_assertions_adapter.rb +3 -3
- data/rspec-core/upstream/lib/rspec/core/version.rb +1 -1
- data/rspec-core/upstream/lib/rspec/core/warnings.rb +2 -2
- data/rspec-core/upstream/lib/rspec/core/world.rb +164 -60
- data/rspec-core/upstream/lib/rspec/core.rb +64 -21
- data/rspec-core/upstream/maintenance-branch +1 -1
- data/rspec-core/upstream/rspec-core.gemspec +16 -11
- data/rspec-core/upstream/script/ci_functions.sh +73 -0
- data/rspec-core/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-core/upstream/script/cucumber.sh +8 -0
- data/rspec-core/upstream/script/custom_build_functions.sh +22 -0
- data/rspec-core/upstream/script/functions.sh +125 -89
- data/rspec-core/upstream/script/legacy_setup.sh +20 -0
- data/rspec-core/upstream/script/predicate_functions.sh +162 -0
- data/rspec-core/upstream/script/rspec_with_simplecov +6 -6
- data/rspec-core/upstream/script/run_build +14 -9
- data/rspec-core/upstream/script/run_rubocop +14 -0
- data/rspec-core/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/rspec-expectations/upstream/.document +1 -1
- data/rspec-expectations/upstream/.github/FUNDING.yml +5 -0
- data/rspec-expectations/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-expectations/upstream/.gitignore +2 -0
- data/rspec-expectations/upstream/.rubocop.yml +126 -2
- data/rspec-expectations/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-expectations/upstream/.rubocop_todo.yml +335 -0
- data/rspec-expectations/upstream/.yardopts +1 -1
- data/rspec-expectations/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-expectations/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-expectations/upstream/CONTRIBUTING.md +86 -0
- data/rspec-expectations/upstream/Changelog.md +454 -4
- data/rspec-expectations/upstream/DEV-README.md +3 -3
- data/rspec-expectations/upstream/DEVELOPMENT.md +131 -0
- data/rspec-expectations/upstream/Gemfile +77 -9
- data/rspec-expectations/upstream/ISSUE_TEMPLATE.md +24 -0
- data/{rspec-mocks/upstream/License.txt → rspec-expectations/upstream/LICENSE.md} +5 -4
- data/rspec-expectations/upstream/README.md +73 -31
- data/rspec-expectations/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-expectations/upstream/Rakefile +13 -10
- data/rspec-expectations/upstream/Should.md +13 -5
- data/rspec-expectations/upstream/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +1 -2
- data/rspec-expectations/upstream/benchmarks/caller_vs_raise_for_backtrace.rb +77 -0
- data/rspec-expectations/upstream/benchmarks/count_vs_select_size.rb +68 -0
- data/rspec-expectations/upstream/benchmarks/default_messages_as_methods_v_blocks.rb +1 -1
- data/rspec-expectations/upstream/benchmarks/gsub_vs_tr_single_character.rb +28 -0
- data/rspec-expectations/upstream/benchmarks/include_matcher.rb +249 -0
- data/rspec-expectations/upstream/benchmarks/include_v_superclass.rb +0 -1
- data/rspec-expectations/upstream/benchmarks/match_array/failing_with_duplicate_items.rb +1 -1
- data/rspec-expectations/upstream/benchmarks/output_stringio_vs_tempfile.rb +31 -0
- data/rspec-expectations/upstream/benchmarks/set_vs_array_include.rb +1 -3
- data/rspec-expectations/upstream/cucumber.yml +9 -4
- data/rspec-expectations/upstream/features/.nav +1 -0
- data/rspec-expectations/upstream/features/aggregating_failures.feature +56 -0
- data/rspec-expectations/upstream/features/built_in_matchers/README.md +3 -3
- data/rspec-expectations/upstream/features/built_in_matchers/all.feature +3 -2
- data/rspec-expectations/upstream/features/built_in_matchers/be_within.feature +1 -1
- data/rspec-expectations/upstream/features/built_in_matchers/change.feature +8 -6
- data/rspec-expectations/upstream/features/built_in_matchers/comparisons.feature +33 -1
- data/rspec-expectations/upstream/features/built_in_matchers/contain_exactly.feature +1 -0
- data/rspec-expectations/upstream/features/built_in_matchers/cover.feature +3 -3
- data/rspec-expectations/upstream/features/built_in_matchers/exist.feature +1 -1
- data/rspec-expectations/upstream/features/built_in_matchers/have_attributes.feature +1 -2
- data/rspec-expectations/upstream/features/built_in_matchers/include.feature +74 -17
- data/rspec-expectations/upstream/features/built_in_matchers/match.feature +2 -2
- data/rspec-expectations/upstream/features/built_in_matchers/output.feature +67 -4
- data/rspec-expectations/upstream/features/built_in_matchers/predicates.feature +56 -19
- data/rspec-expectations/upstream/features/built_in_matchers/raise_error.feature +16 -2
- data/rspec-expectations/upstream/features/built_in_matchers/respond_to.feature +191 -3
- data/rspec-expectations/upstream/features/built_in_matchers/satisfy.feature +17 -8
- data/rspec-expectations/upstream/features/built_in_matchers/throw_symbol.feature +1 -1
- data/rspec-expectations/upstream/features/built_in_matchers/types.feature +34 -34
- data/rspec-expectations/upstream/features/built_in_matchers/yield.feature +2 -2
- data/rspec-expectations/upstream/features/composing_matchers.feature +4 -4
- data/rspec-expectations/upstream/features/custom_matchers/define_block_matcher.feature +78 -0
- data/rspec-expectations/upstream/features/custom_matchers/define_diffable_matcher.feature +115 -3
- data/rspec-expectations/upstream/features/custom_matchers/define_matcher.feature +173 -21
- data/rspec-expectations/upstream/features/custom_matchers/define_matcher_with_fluent_interface.feature +21 -2
- data/rspec-expectations/upstream/features/define_negated_matcher.feature +2 -1
- data/rspec-expectations/upstream/features/diffing.feature +29 -1
- data/rspec-expectations/upstream/features/implicit_docstrings.feature +8 -8
- data/rspec-expectations/upstream/features/step_definitions/additional_cli_steps.rb +11 -7
- data/rspec-expectations/upstream/features/support/diff_lcs_versions.rb +25 -0
- data/rspec-expectations/upstream/features/support/disallow_certain_apis.rb +3 -3
- data/rspec-expectations/upstream/features/support/env.rb +11 -11
- data/rspec-expectations/upstream/features/support/rubinius.rb +1 -1
- data/rspec-expectations/upstream/features/support/ruby_features.rb +39 -0
- data/rspec-expectations/upstream/features/syntax_configuration.feature +9 -9
- data/rspec-expectations/upstream/features/test_frameworks/minitest.feature +69 -2
- data/rspec-expectations/upstream/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
- data/rspec-expectations/upstream/lib/rspec/expectations/configuration.rb +84 -1
- data/rspec-expectations/upstream/lib/rspec/expectations/expectation_target.rb +82 -38
- data/rspec-expectations/upstream/lib/rspec/expectations/fail_with.rb +11 -6
- data/rspec-expectations/upstream/lib/rspec/expectations/failure_aggregator.rb +212 -0
- data/rspec-expectations/upstream/lib/rspec/expectations/handler.rb +27 -12
- data/rspec-expectations/upstream/lib/rspec/expectations/minitest_integration.rb +43 -2
- data/rspec-expectations/upstream/lib/rspec/expectations/syntax.rb +5 -5
- data/rspec-expectations/upstream/lib/rspec/expectations/version.rb +1 -1
- data/rspec-expectations/upstream/lib/rspec/expectations.rb +15 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/all.rb +1 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/base_matcher.rb +77 -11
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be.rb +28 -114
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_between.rb +1 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_instance_of.rb +5 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_kind_of.rb +5 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_within.rb +4 -4
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/change.rb +168 -55
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/compound.rb +61 -29
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/contain_exactly.rb +73 -12
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/count_expectation.rb +169 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eq.rb +3 -38
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eql.rb +2 -2
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/equal.rb +3 -3
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/exist.rb +7 -3
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/has.rb +90 -24
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/have_attributes.rb +37 -7
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/include.rb +124 -23
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/match.rb +79 -2
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/operators.rb +14 -5
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/output.rb +56 -1
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/raise_error.rb +126 -29
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/respond_to.rb +118 -9
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/satisfy.rb +28 -7
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/{start_and_end_with.rb → start_or_end_with.rb} +20 -8
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/throw_symbol.rb +11 -5
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in/yield.rb +110 -155
- data/rspec-expectations/upstream/lib/rspec/matchers/built_in.rb +4 -3
- data/rspec-expectations/upstream/lib/rspec/matchers/composable.rb +23 -35
- data/rspec-expectations/upstream/lib/rspec/matchers/dsl.rb +179 -26
- data/rspec-expectations/upstream/lib/rspec/matchers/english_phrasing.rb +58 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/fail_matchers.rb +42 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/generated_descriptions.rb +1 -2
- data/rspec-expectations/upstream/lib/rspec/matchers/matcher_delegator.rb +2 -0
- data/rspec-expectations/upstream/lib/rspec/matchers/matcher_protocol.rb +72 -66
- data/rspec-expectations/upstream/lib/rspec/matchers.rb +227 -150
- data/rspec-expectations/upstream/maintenance-branch +1 -1
- data/rspec-expectations/upstream/rspec-expectations.gemspec +13 -8
- data/rspec-expectations/upstream/script/ci_functions.sh +73 -0
- data/rspec-expectations/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-expectations/upstream/script/cucumber.sh +8 -0
- data/rspec-expectations/upstream/script/functions.sh +125 -89
- data/rspec-expectations/upstream/script/legacy_setup.sh +20 -0
- data/rspec-expectations/upstream/script/predicate_functions.sh +162 -0
- data/rspec-expectations/upstream/script/run_build +14 -9
- data/rspec-expectations/upstream/script/run_rubocop +14 -0
- data/rspec-expectations/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/rspec-mocks/upstream/.document +1 -1
- data/rspec-mocks/upstream/.github/FUNDING.yml +5 -0
- data/rspec-mocks/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-mocks/upstream/.gitignore +2 -0
- data/rspec-mocks/upstream/.rubocop.yml +28 -9
- data/rspec-mocks/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-mocks/upstream/.rubocop_todo.yml +573 -0
- data/rspec-mocks/upstream/.yardopts +1 -1
- data/rspec-mocks/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-mocks/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-mocks/upstream/CONTRIBUTING.md +86 -0
- data/rspec-mocks/upstream/Changelog.md +398 -3
- data/rspec-mocks/upstream/DEV-README.md +3 -3
- data/rspec-mocks/upstream/DEVELOPMENT.md +131 -0
- data/rspec-mocks/upstream/Gemfile +77 -10
- data/rspec-mocks/upstream/ISSUE_TEMPLATE.md +24 -0
- data/{rspec-expectations/upstream/License.txt → rspec-mocks/upstream/LICENSE.md} +5 -4
- data/rspec-mocks/upstream/README.md +83 -17
- data/rspec-mocks/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-mocks/upstream/Rakefile +3 -3
- data/rspec-mocks/upstream/benchmarks/accessing_configuration_via_method_vs_cache.rb +52 -0
- data/rspec-mocks/upstream/benchmarks/allocations/1_object_1000_mocks.rb +76 -0
- data/rspec-mocks/upstream/benchmarks/allocations/helper.rb +17 -0
- data/rspec-mocks/upstream/benchmarks/each_value_v_values_each.rb +4 -5
- data/rspec-mocks/upstream/benchmarks/find_original_method_early.rb +1 -1
- data/rspec-mocks/upstream/benchmarks/method_defined_at_any_visibility.rb +3 -3
- data/rspec-mocks/upstream/benchmarks/thread_safety.rb +1 -1
- data/rspec-mocks/upstream/benchmarks/transfer_nested_constants.rb +1 -1
- data/rspec-mocks/upstream/cucumber.yml +8 -1
- data/rspec-mocks/upstream/features/.nav +2 -0
- data/rspec-mocks/upstream/features/basics/allowing_messages.feature +1 -1
- data/rspec-mocks/upstream/features/basics/expecting_messages.feature +40 -1
- data/rspec-mocks/upstream/features/basics/null_object_doubles.feature +1 -1
- data/rspec-mocks/upstream/features/basics/partial_test_doubles.feature +1 -1
- data/rspec-mocks/upstream/features/basics/scope.feature +5 -5
- data/rspec-mocks/upstream/features/basics/spies.feature +17 -30
- data/rspec-mocks/upstream/features/basics/test_doubles.feature +4 -4
- data/rspec-mocks/upstream/features/configuring_responses/README.md +2 -0
- data/rspec-mocks/upstream/features/configuring_responses/calling_the_original_implementation.feature +2 -2
- data/rspec-mocks/upstream/features/configuring_responses/mixed_responses.feature +25 -0
- data/rspec-mocks/upstream/features/configuring_responses/raising_an_error.feature +1 -0
- data/rspec-mocks/upstream/features/configuring_responses/wrapping_the_original_implementation.feature +3 -3
- data/rspec-mocks/upstream/features/configuring_responses/yielding.feature +2 -2
- data/rspec-mocks/upstream/features/mutating_constants/README.md +1 -1
- data/rspec-mocks/upstream/features/old_syntax/any_instance.feature +3 -3
- data/rspec-mocks/upstream/features/old_syntax/should_receive.feature +3 -1
- data/rspec-mocks/upstream/features/outside_rspec/any_test_framework.feature +116 -0
- data/rspec-mocks/upstream/features/outside_rspec/minitest.feature +202 -46
- data/rspec-mocks/upstream/features/outside_rspec/standalone.feature +5 -5
- data/rspec-mocks/upstream/features/setting_constraints/matching_arguments.feature +54 -27
- data/rspec-mocks/upstream/features/setting_constraints/message_order.feature +2 -2
- data/rspec-mocks/upstream/features/setting_constraints/receive_counts.feature +18 -0
- data/rspec-mocks/upstream/features/step_definitions/additional_cli_steps.rb +4 -4
- data/rspec-mocks/upstream/features/support/disallow_certain_apis.rb +3 -2
- data/rspec-mocks/upstream/features/support/env.rb +12 -12
- data/rspec-mocks/upstream/features/support/rubinius.rb +1 -1
- data/rspec-mocks/upstream/features/verifying_doubles/README.md +2 -2
- data/rspec-mocks/upstream/features/verifying_doubles/class_doubles.feature +1 -1
- data/rspec-mocks/upstream/features/verifying_doubles/dynamic_classes.feature +41 -5
- data/rspec-mocks/upstream/features/verifying_doubles/instance_doubles.feature +5 -3
- data/rspec-mocks/upstream/features/working_with_legacy_code/any_instance.feature +8 -6
- data/rspec-mocks/upstream/features/working_with_legacy_code/message_chains.feature +16 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/chain.rb +3 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expect_chain_chain.rb +1 -5
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expectation_chain.rb +7 -5
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/message_chains.rb +1 -3
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/recorder.rb +42 -14
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain.rb +13 -7
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain_chain.rb +1 -5
- data/rspec-mocks/upstream/lib/rspec/mocks/any_instance.rb +1 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/argument_list_matcher.rb +53 -10
- data/rspec-mocks/upstream/lib/rspec/mocks/argument_matchers.rb +66 -26
- data/rspec-mocks/upstream/lib/rspec/mocks/configuration.rb +59 -4
- data/rspec-mocks/upstream/lib/rspec/mocks/error_generator.rb +235 -108
- data/rspec-mocks/upstream/lib/rspec/mocks/example_methods.rb +82 -27
- data/rspec-mocks/upstream/lib/rspec/mocks/instance_method_stasher.rb +12 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/have_received.rb +30 -17
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive.rb +28 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_message_chain.rb +17 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_messages.rb +6 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/message_chain.rb +0 -4
- data/rspec-mocks/upstream/lib/rspec/mocks/message_expectation.rb +430 -304
- data/rspec-mocks/upstream/lib/rspec/mocks/method_double.rb +46 -15
- data/rspec-mocks/upstream/lib/rspec/mocks/method_reference.rb +78 -19
- data/rspec-mocks/upstream/lib/rspec/mocks/minitest_integration.rb +68 -0
- data/rspec-mocks/upstream/lib/rspec/mocks/mutate_const.rb +23 -8
- data/rspec-mocks/upstream/lib/rspec/mocks/object_reference.rb +81 -23
- data/rspec-mocks/upstream/lib/rspec/mocks/proxy.rb +135 -41
- data/rspec-mocks/upstream/lib/rspec/mocks/space.rb +33 -16
- data/rspec-mocks/upstream/lib/rspec/mocks/standalone.rb +1 -1
- data/rspec-mocks/upstream/lib/rspec/mocks/syntax.rb +18 -22
- data/rspec-mocks/upstream/lib/rspec/mocks/targets.rb +51 -24
- data/rspec-mocks/upstream/lib/rspec/mocks/test_double.rb +42 -6
- data/rspec-mocks/upstream/lib/rspec/mocks/verifying_double.rb +15 -21
- data/rspec-mocks/upstream/lib/rspec/mocks/{verifying_message_expecation.rb → verifying_message_expectation.rb} +11 -18
- data/rspec-mocks/upstream/lib/rspec/mocks/verifying_proxy.rb +60 -11
- data/rspec-mocks/upstream/lib/rspec/mocks/version.rb +1 -1
- data/rspec-mocks/upstream/lib/rspec/mocks.rb +8 -1
- data/rspec-mocks/upstream/maintenance-branch +1 -1
- data/rspec-mocks/upstream/rspec-mocks.gemspec +14 -6
- data/rspec-mocks/upstream/script/ci_functions.sh +73 -0
- data/rspec-mocks/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-mocks/upstream/script/cucumber.sh +8 -0
- data/rspec-mocks/upstream/script/functions.sh +125 -89
- data/rspec-mocks/upstream/script/legacy_setup.sh +20 -0
- data/rspec-mocks/upstream/script/predicate_functions.sh +162 -0
- data/rspec-mocks/upstream/script/run_build +14 -9
- data/rspec-mocks/upstream/script/run_rubocop +14 -0
- data/rspec-mocks/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/{stubs/diff/lcs/assertions.rb → rspec-mocks/upstream/tmp/.gitkeep} +0 -0
- data/rspec-support/upstream/.github/FUNDING.yml +5 -0
- data/rspec-support/upstream/.github/workflows/ci.yml +150 -0
- data/rspec-support/upstream/.gitignore +4 -0
- data/rspec-support/upstream/.rubocop.yml +33 -1
- data/rspec-support/upstream/.rubocop_rspec_base.yml +224 -38
- data/rspec-support/upstream/.rubocop_todo.yml +424 -0
- data/rspec-support/upstream/BUILD_DETAIL.md +149 -0
- data/rspec-support/upstream/CODE_OF_CONDUCT.md +59 -0
- data/rspec-support/upstream/CONTRIBUTING.md +86 -0
- data/rspec-support/upstream/Changelog.md +287 -0
- data/rspec-support/upstream/DEVELOPMENT.md +131 -0
- data/rspec-support/upstream/Gemfile +52 -4
- data/rspec-support/upstream/ISSUE_TEMPLATE.md +24 -0
- data/rspec-support/upstream/{LICENSE.txt → LICENSE.md} +3 -2
- data/rspec-support/upstream/README.md +29 -6
- data/rspec-support/upstream/REPORT_TEMPLATE.md +43 -0
- data/rspec-support/upstream/Rakefile +9 -5
- data/rspec-support/upstream/benchmarks/caller_vs_caller_locations.rb +19 -0
- data/rspec-support/upstream/benchmarks/caller_vs_caller_locations_vs_raise.rb +153 -0
- data/rspec-support/upstream/benchmarks/class_exec_vs_klass_exec.rb +43 -0
- data/rspec-support/upstream/benchmarks/map_hash.rb +70 -0
- data/rspec-support/upstream/benchmarks/ripper.rb +44 -0
- data/rspec-support/upstream/benchmarks/skip_frames_for_caller_filter.rb +27 -0
- data/rspec-support/upstream/lib/rspec/support/caller_filter.rb +35 -15
- data/rspec-support/upstream/lib/rspec/support/comparable_version.rb +46 -0
- data/rspec-support/upstream/lib/rspec/support/differ.rb +35 -34
- data/rspec-support/upstream/lib/rspec/support/directory_maker.rb +3 -1
- data/rspec-support/upstream/lib/rspec/support/encoded_string.rb +103 -11
- data/rspec-support/upstream/lib/rspec/support/fuzzy_matcher.rb +5 -5
- data/rspec-support/upstream/lib/rspec/support/matcher_definition.rb +11 -0
- data/rspec-support/upstream/lib/rspec/support/method_signature_verifier.rb +192 -26
- data/rspec-support/upstream/lib/rspec/support/mutex.rb +73 -0
- data/rspec-support/upstream/lib/rspec/support/object_formatter.rb +275 -0
- data/rspec-support/upstream/lib/rspec/support/recursive_const_methods.rb +1 -1
- data/rspec-support/upstream/lib/rspec/support/reentrant_mutex.rb +78 -0
- data/rspec-support/upstream/lib/rspec/support/ruby_features.rb +168 -15
- data/rspec-support/upstream/lib/rspec/support/source/location.rb +21 -0
- data/rspec-support/upstream/lib/rspec/support/source/node.rb +110 -0
- data/rspec-support/upstream/lib/rspec/support/source/token.rb +94 -0
- data/rspec-support/upstream/lib/rspec/support/source.rb +85 -0
- data/rspec-support/upstream/lib/rspec/support/spec/deprecation_helpers.rb +17 -29
- data/rspec-support/upstream/lib/rspec/support/spec/diff_helpers.rb +31 -0
- data/rspec-support/upstream/lib/rspec/support/spec/in_sub_process.rb +41 -17
- data/rspec-support/upstream/lib/rspec/support/spec/library_wide_checks.rb +150 -0
- data/rspec-support/upstream/lib/rspec/support/spec/shell_out.rb +39 -3
- data/rspec-support/upstream/lib/rspec/support/spec/stderr_splitter.rb +27 -4
- data/rspec-support/upstream/lib/rspec/support/spec/string_matcher.rb +45 -0
- data/rspec-support/upstream/lib/rspec/support/spec/with_isolated_directory.rb +5 -1
- data/rspec-support/upstream/lib/rspec/support/spec.rb +17 -7
- data/rspec-support/upstream/lib/rspec/support/version.rb +1 -1
- data/rspec-support/upstream/lib/rspec/support/warnings.rb +3 -3
- data/rspec-support/upstream/lib/rspec/support/with_keywords_when_needed.rb +33 -0
- data/rspec-support/upstream/lib/rspec/support.rb +81 -3
- data/rspec-support/upstream/maintenance-branch +1 -1
- data/rspec-support/upstream/rspec-support.gemspec +10 -4
- data/rspec-support/upstream/script/ci_functions.sh +73 -0
- data/rspec-support/upstream/script/clone_all_rspec_repos +2 -2
- data/rspec-support/upstream/script/cucumber.sh +8 -0
- data/rspec-support/upstream/script/functions.sh +125 -89
- data/rspec-support/upstream/script/legacy_setup.sh +20 -0
- data/rspec-support/upstream/script/predicate_functions.sh +162 -0
- data/rspec-support/upstream/script/run_build +14 -9
- data/rspec-support/upstream/script/run_rubocop +14 -0
- data/rspec-support/upstream/script/update_rubygems_and_install_bundler +20 -0
- data/stubs/{diff/lcs/block.rb → coderay.rb} +0 -0
- data/stubs/{diff/lcs/callbacks.rb → drb/acl.rb} +0 -0
- data/stubs/{diff/lcs/change.rb → erb/version.rb} +0 -0
- data/stubs/{diff/lcs/hunk.rb → open3.rb} +0 -0
- data/stubs/{diff/lcs/internals.rb → psych.rb} +0 -0
- data/stubs/{optparse.rb → ripper.rb} +0 -0
- data/stubs/{prettyprint.rb → thread_order.rb} +0 -0
- data/tasks/testing.rake +7 -3
- metadata +270 -61
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/opal_0.11.gemfile +0 -14
- data/gemfiles/opal_master.gemfile +0 -14
- data/lib-opal/opal/rspec/async/core_ext.rb +0 -23
- data/lib-opal/opal/rspec/async/legacy.rb +0 -49
- data/lib-opal/opal/rspec/fixes/rspec/caller_filter.rb +0 -6
- data/lib-opal/opal/rspec/fixes/rspec/core/example.rb +0 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/backtrace_formatter.rb +0 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/console_codes.rb +0 -11
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/generated_deprecation_message.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/core/formatters/json_formatter.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications/failed_example_notification.rb +0 -20
- data/lib-opal/opal/rspec/fixes/rspec/core/notifications/summary_notification.rb +0 -21
- data/lib-opal/opal/rspec/fixes/rspec/core/warnings.rb +0 -27
- data/lib-opal/opal/rspec/fixes/rspec/expectations/fail_with.rb +0 -21
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/all.rb +0 -10
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/compound.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/yield.rb +0 -21
- data/lib-opal/opal/rspec/fixes/rspec/matchers/pretty.rb +0 -15
- data/lib-opal/opal/rspec/fixes/rspec/mocks/space.rb +0 -41
- data/lib-opal/opal/rspec/fixes/rspec/mocks/test_double.rb +0 -39
- data/lib-opal/opal/rspec/fixes/rspec/mocks/verifying_double.rb +0 -29
- data/lib-opal/opal/rspec/fixes/rspec/support/recursive_const_methods.rb +0 -7
- data/lib-opal/opal/rspec/fixes/rspec/support/spec/stderr_splitter.rb +0 -13
- data/lib-opal/opal/rspec/fixes/rspec/support/spec.rb +0 -1
- data/lib-opal/opal/rspec/fixes/rspec/support/warnings.rb +0 -16
- data/rspec/upstream/License.txt +0 -24
- data/rspec-core/upstream/.travis.yml +0 -35
- data/rspec-core/upstream/benchmarks/sort_by_v_shuffle.rb +0 -83
- data/rspec-core/upstream/features/Upgrade.md +0 -352
- data/rspec-core/upstream/lib/rspec/core/backport_random.rb +0 -336
- data/rspec-expectations/upstream/.travis.yml +0 -35
- data/rspec-expectations/upstream/lib/rspec/matchers/pretty.rb +0 -77
- data/rspec-mocks/upstream/.travis.yml +0 -35
- data/rspec-support/upstream/.travis.yml +0 -35
- data/rspec-support/upstream/lib/rspec/support/os.rb +0 -18
- data/rspec-support/upstream/lib/rspec/support/spec/prevent_load_time_warnings.rb +0 -44
- data/rspec-support/upstream/lib/rspec/support/version_checker.rb +0 -53
- data/stubs/shellwords.rb +0 -0
- data/stubs/uri.rb +0 -0
- data/vendor/spec_runner.js +0 -64
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
RSpec::Support.require_rspec_support "directory_maker"
|
|
2
|
+
|
|
3
|
+
module RSpec
|
|
4
|
+
module Core
|
|
5
|
+
# Persists example ids and their statuses so that we can filter
|
|
6
|
+
# to just the ones that failed the last time they ran.
|
|
7
|
+
# @private
|
|
8
|
+
class ExampleStatusPersister
|
|
9
|
+
def self.load_from(file_name)
|
|
10
|
+
return [] unless File.exist?(file_name)
|
|
11
|
+
ExampleStatusParser.parse(File.read(file_name))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.persist(examples, file_name)
|
|
15
|
+
new(examples, file_name).persist
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def initialize(examples, file_name)
|
|
19
|
+
@examples = examples
|
|
20
|
+
@file_name = file_name
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def persist
|
|
24
|
+
RSpec::Support::DirectoryMaker.mkdir_p(File.dirname(@file_name))
|
|
25
|
+
File.open(@file_name, File::RDWR | File::CREAT) do |f|
|
|
26
|
+
# lock the file while reading / persisting to avoid a race
|
|
27
|
+
# condition where parallel or unrelated spec runs race to
|
|
28
|
+
# update the same file
|
|
29
|
+
f.flock(File::LOCK_EX)
|
|
30
|
+
unparsed_previous_runs = f.read
|
|
31
|
+
f.rewind
|
|
32
|
+
f.write(dump_statuses(unparsed_previous_runs))
|
|
33
|
+
f.flush
|
|
34
|
+
f.truncate(f.pos)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def dump_statuses(unparsed_previous_runs)
|
|
41
|
+
statuses_from_previous_runs = ExampleStatusParser.parse(unparsed_previous_runs)
|
|
42
|
+
merged_statuses = ExampleStatusMerger.merge(statuses_from_this_run, statuses_from_previous_runs)
|
|
43
|
+
ExampleStatusDumper.dump(merged_statuses)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def statuses_from_this_run
|
|
47
|
+
@examples.map do |ex|
|
|
48
|
+
result = ex.execution_result
|
|
49
|
+
|
|
50
|
+
{
|
|
51
|
+
:example_id => ex.id,
|
|
52
|
+
:status => result.status ? result.status.to_s : Configuration::UNKNOWN_STATUS,
|
|
53
|
+
:run_time => result.run_time ? Formatters::Helpers.format_duration(result.run_time) : ""
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Merges together a list of example statuses from this run
|
|
60
|
+
# and a list from previous runs (presumably loaded from disk).
|
|
61
|
+
# Each example status object is expected to be a hash with
|
|
62
|
+
# at least an `:example_id` and a `:status` key. Examples that
|
|
63
|
+
# were loaded but not executed (due to filtering, `--fail-fast`
|
|
64
|
+
# or whatever) should have a `:status` of `UNKNOWN_STATUS`.
|
|
65
|
+
#
|
|
66
|
+
# This willl produce a new list that:
|
|
67
|
+
# - Will be missing examples from previous runs that we know for sure
|
|
68
|
+
# no longer exist.
|
|
69
|
+
# - Will have the latest known status for any examples that either
|
|
70
|
+
# definitively do exist or may still exist.
|
|
71
|
+
# - Is sorted by file name and example definition order, so that
|
|
72
|
+
# the saved file is easily scannable if users want to inspect it.
|
|
73
|
+
# @private
|
|
74
|
+
class ExampleStatusMerger
|
|
75
|
+
def self.merge(this_run, from_previous_runs)
|
|
76
|
+
new(this_run, from_previous_runs).merge
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def initialize(this_run, from_previous_runs)
|
|
80
|
+
@this_run = hash_from(this_run)
|
|
81
|
+
@from_previous_runs = hash_from(from_previous_runs)
|
|
82
|
+
@file_exists_cache = Hash.new { |hash, file| hash[file] = File.exist?(file) }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def merge
|
|
86
|
+
delete_previous_examples_that_no_longer_exist
|
|
87
|
+
|
|
88
|
+
@this_run.merge(@from_previous_runs) do |_ex_id, new, old|
|
|
89
|
+
new.fetch(:status) == Configuration::UNKNOWN_STATUS ? old : new
|
|
90
|
+
end.values.sort_by(&method(:sort_value_from))
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
def hash_from(example_list)
|
|
96
|
+
example_list.inject({}) do |hash, example|
|
|
97
|
+
hash[example.fetch(:example_id)] = example
|
|
98
|
+
hash
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def delete_previous_examples_that_no_longer_exist
|
|
103
|
+
@from_previous_runs.delete_if do |ex_id, _|
|
|
104
|
+
example_must_no_longer_exist?(ex_id)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def example_must_no_longer_exist?(ex_id)
|
|
109
|
+
# Obviously, it exists if it was loaded for this spec run...
|
|
110
|
+
return false if @this_run.key?(ex_id)
|
|
111
|
+
|
|
112
|
+
spec_file = spec_file_from(ex_id)
|
|
113
|
+
|
|
114
|
+
# `this_run` includes examples that were loaded but not executed.
|
|
115
|
+
# Given that, if the spec file for this example was loaded,
|
|
116
|
+
# but the id does not still exist, it's safe to assume that
|
|
117
|
+
# the example must no longer exist.
|
|
118
|
+
return true if loaded_spec_files.include?(spec_file)
|
|
119
|
+
|
|
120
|
+
# The example may still exist as long as the file exists...
|
|
121
|
+
!@file_exists_cache[spec_file]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def loaded_spec_files
|
|
125
|
+
@loaded_spec_files ||= Set.new(@this_run.keys.map(&method(:spec_file_from)))
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def spec_file_from(ex_id)
|
|
129
|
+
ex_id.split("[").first
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def sort_value_from(example)
|
|
133
|
+
file, scoped_id = Example.parse_id(example.fetch(:example_id))
|
|
134
|
+
[file, *scoped_id.split(":").map(&method(:Integer))]
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Dumps a list of hashes in a pretty, human readable format
|
|
139
|
+
# for later parsing. The hashes are expected to have symbol
|
|
140
|
+
# keys and string values, and each hash should have the same
|
|
141
|
+
# set of keys.
|
|
142
|
+
# @private
|
|
143
|
+
class ExampleStatusDumper
|
|
144
|
+
def self.dump(examples)
|
|
145
|
+
new(examples).dump
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def initialize(examples)
|
|
149
|
+
@examples = examples
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def dump
|
|
153
|
+
return nil if @examples.empty?
|
|
154
|
+
(formatted_header_rows + formatted_value_rows).join("\n") << "\n"
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
private
|
|
158
|
+
|
|
159
|
+
def formatted_header_rows
|
|
160
|
+
@formatted_header_rows ||= begin
|
|
161
|
+
dividers = column_widths.map { |w| "-" * w }
|
|
162
|
+
[formatted_row_from(headers.map(&:to_s)), formatted_row_from(dividers)]
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def formatted_value_rows
|
|
167
|
+
@foramtted_value_rows ||= rows.map do |row|
|
|
168
|
+
formatted_row_from(row)
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def rows
|
|
173
|
+
@rows ||= @examples.map { |ex| ex.values_at(*headers) }
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def formatted_row_from(row_values)
|
|
177
|
+
padded_values = row_values.each_with_index.map do |value, index|
|
|
178
|
+
value.ljust(column_widths[index])
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
padded_values.join(" | ") << " |"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def headers
|
|
185
|
+
@headers ||= @examples.first.keys
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def column_widths
|
|
189
|
+
@column_widths ||= begin
|
|
190
|
+
value_sets = rows.transpose
|
|
191
|
+
|
|
192
|
+
headers.each_with_index.map do |header, index|
|
|
193
|
+
values = value_sets[index] << header.to_s
|
|
194
|
+
values.map(&:length).max
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Parses a string that has been previously dumped by ExampleStatusDumper.
|
|
201
|
+
# Note that this parser is a bit naive in that it does a simple split on
|
|
202
|
+
# "\n" and " | ", with no concern for handling escaping. For now, that's
|
|
203
|
+
# OK because the values we plan to persist (example id, status, and perhaps
|
|
204
|
+
# example duration) are highly unlikely to contain "\n" or " | " -- after
|
|
205
|
+
# all, who puts those in file names?
|
|
206
|
+
# @private
|
|
207
|
+
class ExampleStatusParser
|
|
208
|
+
def self.parse(string)
|
|
209
|
+
new(string).parse
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def initialize(string)
|
|
213
|
+
@header_line, _, *@row_lines = string.lines.to_a
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def parse
|
|
217
|
+
@row_lines.map { |line| parse_row(line) }
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
private
|
|
221
|
+
|
|
222
|
+
def parse_row(line)
|
|
223
|
+
Hash[headers.zip(split_line(line))]
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def headers
|
|
227
|
+
@headers ||= split_line(@header_line).grep(/\S/).map(&:to_sym)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def split_line(line)
|
|
231
|
+
line.split(/\s+\|\s+?/, -1)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
@@ -1,71 +1,6 @@
|
|
|
1
1
|
module RSpec
|
|
2
2
|
module Core
|
|
3
3
|
# @private
|
|
4
|
-
# Manages the filtering of examples and groups by matching tags declared on
|
|
5
|
-
# the command line or options files, or filters declared via
|
|
6
|
-
# `RSpec.configure`, with hash key/values submitted within example group
|
|
7
|
-
# and/or example declarations. For example, given this declaration:
|
|
8
|
-
#
|
|
9
|
-
# describe Thing, :awesome => true do
|
|
10
|
-
# it "does something" do
|
|
11
|
-
# # ...
|
|
12
|
-
# end
|
|
13
|
-
# end
|
|
14
|
-
#
|
|
15
|
-
# That group (or any other with `:awesome => true`) would be filtered in
|
|
16
|
-
# with any of the following commands:
|
|
17
|
-
#
|
|
18
|
-
# rspec --tag awesome:true
|
|
19
|
-
# rspec --tag awesome
|
|
20
|
-
# rspec -t awesome:true
|
|
21
|
-
# rspec -t awesome
|
|
22
|
-
#
|
|
23
|
-
# Prefixing the tag names with `~` negates the tags, thus excluding this group with
|
|
24
|
-
# any of:
|
|
25
|
-
#
|
|
26
|
-
# rspec --tag ~awesome:true
|
|
27
|
-
# rspec --tag ~awesome
|
|
28
|
-
# rspec -t ~awesome:true
|
|
29
|
-
# rspec -t ~awesome
|
|
30
|
-
#
|
|
31
|
-
# ## Options files and command line overrides
|
|
32
|
-
#
|
|
33
|
-
# Tag declarations can be stored in `.rspec`, `~/.rspec`, or a custom
|
|
34
|
-
# options file. This is useful for storing defaults. For example, let's
|
|
35
|
-
# say you've got some slow specs that you want to suppress most of the
|
|
36
|
-
# time. You can tag them like this:
|
|
37
|
-
#
|
|
38
|
-
# describe Something, :slow => true do
|
|
39
|
-
#
|
|
40
|
-
# And then store this in `.rspec`:
|
|
41
|
-
#
|
|
42
|
-
# --tag ~slow:true
|
|
43
|
-
#
|
|
44
|
-
# Now when you run `rspec`, that group will be excluded.
|
|
45
|
-
#
|
|
46
|
-
# ## Overriding
|
|
47
|
-
#
|
|
48
|
-
# Of course, you probably want to run them sometimes, so you can override
|
|
49
|
-
# this tag on the command line like this:
|
|
50
|
-
#
|
|
51
|
-
# rspec --tag slow:true
|
|
52
|
-
#
|
|
53
|
-
# ## RSpec.configure
|
|
54
|
-
#
|
|
55
|
-
# You can also store default tags with `RSpec.configure`. We use `tag` on
|
|
56
|
-
# the command line (and in options files like `.rspec`), but for historical
|
|
57
|
-
# reasons we use the term `filter` in `RSpec.configure:
|
|
58
|
-
#
|
|
59
|
-
# RSpec.configure do |c|
|
|
60
|
-
# c.filter_run_including :foo => :bar
|
|
61
|
-
# c.filter_run_excluding :foo => :bar
|
|
62
|
-
# end
|
|
63
|
-
#
|
|
64
|
-
# These declarations can also be overridden from the command line.
|
|
65
|
-
#
|
|
66
|
-
# @see RSpec.configure
|
|
67
|
-
# @see Configuration#filter_run_including
|
|
68
|
-
# @see Configuration#filter_run_excluding
|
|
69
4
|
class FilterManager
|
|
70
5
|
attr_reader :exclusions, :inclusions
|
|
71
6
|
|
|
@@ -81,9 +16,15 @@ module RSpec
|
|
|
81
16
|
# locations is a hash of expanded paths to arrays of line
|
|
82
17
|
# numbers to match against. e.g.
|
|
83
18
|
# { "path/to/file.rb" => [37, 42] }
|
|
84
|
-
locations
|
|
85
|
-
|
|
86
|
-
|
|
19
|
+
add_path_to_arrays_filter(:locations, File.expand_path(file_path), line_numbers)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def add_ids(rerun_path, scoped_ids)
|
|
23
|
+
# ids is a hash of relative paths to arrays of ids
|
|
24
|
+
# to match against. e.g.
|
|
25
|
+
# { "./path/to/file.rb" => ["1:1", "2:4"] }
|
|
26
|
+
rerun_path = Metadata.relative_path(File.expand_path rerun_path)
|
|
27
|
+
add_path_to_arrays_filter(:ids, rerun_path, scoped_ids)
|
|
87
28
|
end
|
|
88
29
|
|
|
89
30
|
def empty?
|
|
@@ -91,11 +32,25 @@ module RSpec
|
|
|
91
32
|
end
|
|
92
33
|
|
|
93
34
|
def prune(examples)
|
|
35
|
+
# Semantically, this is unnecessary (the filtering below will return the empty
|
|
36
|
+
# array unmodified), but for perf reasons it's worth exiting early here. Users
|
|
37
|
+
# commonly have top-level examples groups that do not have any direct examples
|
|
38
|
+
# and instead have nested groups with examples. In that kind of situation,
|
|
39
|
+
# `examples` will be empty.
|
|
40
|
+
return examples if examples.empty?
|
|
41
|
+
|
|
42
|
+
examples = prune_conditionally_filtered_examples(examples)
|
|
43
|
+
|
|
94
44
|
if inclusions.standalone?
|
|
95
|
-
|
|
96
|
-
examples.select { |e| !base_exclusions.include_example?(e) && include?(e) }
|
|
45
|
+
examples.select { |e| inclusions.include_example?(e) }
|
|
97
46
|
else
|
|
98
|
-
|
|
47
|
+
locations, ids, non_scoped_inclusions = inclusions.split_file_scoped_rules
|
|
48
|
+
|
|
49
|
+
examples.select do |ex|
|
|
50
|
+
file_scoped_include?(ex.metadata, ids, locations) do
|
|
51
|
+
!exclusions.include_example?(ex) && non_scoped_inclusions.include_example?(ex)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
99
54
|
end
|
|
100
55
|
end
|
|
101
56
|
|
|
@@ -111,10 +66,6 @@ module RSpec
|
|
|
111
66
|
exclusions.add_with_low_priority(args.last)
|
|
112
67
|
end
|
|
113
68
|
|
|
114
|
-
def exclude?(example)
|
|
115
|
-
exclusions.include_example?(example)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
69
|
def include(*args)
|
|
119
70
|
inclusions.add(args.last)
|
|
120
71
|
end
|
|
@@ -127,14 +78,42 @@ module RSpec
|
|
|
127
78
|
inclusions.add_with_low_priority(args.last)
|
|
128
79
|
end
|
|
129
80
|
|
|
130
|
-
|
|
131
|
-
|
|
81
|
+
private
|
|
82
|
+
|
|
83
|
+
def add_path_to_arrays_filter(filter_key, path, values)
|
|
84
|
+
filter = inclusions.delete(filter_key) || Hash.new { |h, k| h[k] = [] }
|
|
85
|
+
filter[path].concat(values)
|
|
86
|
+
inclusions.add(filter_key => filter)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def prune_conditionally_filtered_examples(examples)
|
|
90
|
+
examples.reject do |ex|
|
|
91
|
+
meta = ex.metadata
|
|
92
|
+
!meta.fetch(:if, true) || meta[:unless]
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# When a user specifies a particular spec location, that takes priority
|
|
97
|
+
# over any exclusion filters (such as if the spec is tagged with `:slow`
|
|
98
|
+
# and there is a `:slow => true` exclusion filter), but only for specs
|
|
99
|
+
# defined in the same file as the location filters. Excluded specs in
|
|
100
|
+
# other files should still be excluded.
|
|
101
|
+
def file_scoped_include?(ex_metadata, ids, locations)
|
|
102
|
+
no_id_filters = ids[ex_metadata[:rerun_file_path]].empty?
|
|
103
|
+
no_location_filters = locations[
|
|
104
|
+
File.expand_path(ex_metadata[:rerun_file_path])
|
|
105
|
+
].empty?
|
|
106
|
+
|
|
107
|
+
return yield if no_location_filters && no_id_filters
|
|
108
|
+
|
|
109
|
+
MetadataFilter.filter_applies?(:ids, ids, ex_metadata) ||
|
|
110
|
+
MetadataFilter.filter_applies?(:locations, locations, ex_metadata)
|
|
132
111
|
end
|
|
133
112
|
end
|
|
134
113
|
|
|
135
114
|
# @private
|
|
136
115
|
class FilterRules
|
|
137
|
-
PROC_HEX_NUMBER = /0x[0-9a-f]
|
|
116
|
+
PROC_HEX_NUMBER = /0x[0-9a-f]+@?/
|
|
138
117
|
PROJECT_DIR = File.expand_path('.')
|
|
139
118
|
|
|
140
119
|
attr_accessor :opposite
|
|
@@ -148,8 +127,8 @@ module RSpec
|
|
|
148
127
|
[exclusions, inclusions]
|
|
149
128
|
end
|
|
150
129
|
|
|
151
|
-
def initialize(
|
|
152
|
-
@rules =
|
|
130
|
+
def initialize(rules={})
|
|
131
|
+
@rules = rules
|
|
153
132
|
end
|
|
154
133
|
|
|
155
134
|
def add(updated)
|
|
@@ -194,16 +173,17 @@ module RSpec
|
|
|
194
173
|
def description
|
|
195
174
|
rules.inspect.gsub(PROC_HEX_NUMBER, '').gsub(PROJECT_DIR, '.').gsub(' (lambda)', '')
|
|
196
175
|
end
|
|
176
|
+
|
|
177
|
+
def include_example?(example)
|
|
178
|
+
MetadataFilter.apply?(:any?, @rules, example.metadata)
|
|
179
|
+
end
|
|
197
180
|
end
|
|
198
181
|
|
|
199
182
|
# @private
|
|
200
|
-
|
|
201
|
-
STANDALONE_FILTERS = [:locations, :full_description]
|
|
202
|
-
|
|
203
|
-
def add_location(locations)
|
|
204
|
-
replace_filters(:locations => locations)
|
|
205
|
-
end
|
|
183
|
+
ExclusionRules = FilterRules
|
|
206
184
|
|
|
185
|
+
# @private
|
|
186
|
+
class InclusionRules < FilterRules
|
|
207
187
|
def add(*args)
|
|
208
188
|
apply_standalone_filter(*args) || super
|
|
209
189
|
end
|
|
@@ -212,18 +192,22 @@ module RSpec
|
|
|
212
192
|
apply_standalone_filter(*args) || super
|
|
213
193
|
end
|
|
214
194
|
|
|
215
|
-
def use(*args)
|
|
216
|
-
apply_standalone_filter(*args) || super
|
|
217
|
-
end
|
|
218
|
-
|
|
219
195
|
def include_example?(example)
|
|
220
|
-
@rules.empty?
|
|
196
|
+
@rules.empty? || super
|
|
221
197
|
end
|
|
222
198
|
|
|
223
199
|
def standalone?
|
|
224
200
|
is_standalone_filter?(@rules)
|
|
225
201
|
end
|
|
226
202
|
|
|
203
|
+
def split_file_scoped_rules
|
|
204
|
+
rules_dup = @rules.dup
|
|
205
|
+
locations = rules_dup.delete(:locations) { Hash.new([]) }
|
|
206
|
+
ids = rules_dup.delete(:ids) { Hash.new([]) }
|
|
207
|
+
|
|
208
|
+
return locations, ids, self.class.new(rules_dup)
|
|
209
|
+
end
|
|
210
|
+
|
|
227
211
|
private
|
|
228
212
|
|
|
229
213
|
def apply_standalone_filter(updated)
|
|
@@ -240,19 +224,7 @@ module RSpec
|
|
|
240
224
|
end
|
|
241
225
|
|
|
242
226
|
def is_standalone_filter?(rules)
|
|
243
|
-
|
|
244
|
-
end
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
# @private
|
|
248
|
-
class ExclusionRules < FilterRules
|
|
249
|
-
CONDITIONAL_FILTERS = {
|
|
250
|
-
:if => lambda { |value| !value },
|
|
251
|
-
:unless => lambda { |value| value }
|
|
252
|
-
}.freeze
|
|
253
|
-
|
|
254
|
-
def include_example?(example)
|
|
255
|
-
example.any_apply?(@rules) || example.any_apply?(CONDITIONAL_FILTERS)
|
|
227
|
+
rules.key?(:full_description)
|
|
256
228
|
end
|
|
257
229
|
end
|
|
258
230
|
end
|
|
@@ -3,13 +3,15 @@ module RSpec
|
|
|
3
3
|
# @private
|
|
4
4
|
module FlatMap
|
|
5
5
|
if [].respond_to?(:flat_map)
|
|
6
|
-
def flat_map(array)
|
|
7
|
-
array.flat_map
|
|
6
|
+
def flat_map(array, &block)
|
|
7
|
+
array.flat_map(&block)
|
|
8
8
|
end
|
|
9
9
|
else # for 1.8.7
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
# :nocov:
|
|
11
|
+
def flat_map(array, &block)
|
|
12
|
+
array.map(&block).flatten(1)
|
|
12
13
|
end
|
|
14
|
+
# :nocov:
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
module_function :flat_map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
RSpec::Support.require_rspec_core "bisect/utilities"
|
|
2
|
+
|
|
3
|
+
module RSpec
|
|
4
|
+
module Core
|
|
5
|
+
module Formatters
|
|
6
|
+
# Contains common logic for formatters used by `--bisect` to communicate results
|
|
7
|
+
# back to the bisect runner.
|
|
8
|
+
#
|
|
9
|
+
# Subclasses must define a `notify_results(all_example_ids, failed_example_ids)`
|
|
10
|
+
# method.
|
|
11
|
+
# @private
|
|
12
|
+
class BaseBisectFormatter
|
|
13
|
+
def self.inherited(formatter)
|
|
14
|
+
Formatters.register formatter, :start_dump, :example_failed, :example_finished
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(expected_failures)
|
|
18
|
+
@all_example_ids = []
|
|
19
|
+
@failed_example_ids = []
|
|
20
|
+
@remaining_failures = expected_failures
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def example_failed(notification)
|
|
24
|
+
@failed_example_ids << notification.example.id
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def example_finished(notification)
|
|
28
|
+
@all_example_ids << notification.example.id
|
|
29
|
+
return unless @remaining_failures.include?(notification.example.id)
|
|
30
|
+
@remaining_failures.delete(notification.example.id)
|
|
31
|
+
|
|
32
|
+
status = notification.example.execution_result.status
|
|
33
|
+
return if status == :failed && !@remaining_failures.empty?
|
|
34
|
+
RSpec.world.wants_to_quit = true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def start_dump(_notification)
|
|
38
|
+
# `notify_results` is defined in the subclass
|
|
39
|
+
notify_results(Bisect::ExampleSetDescriptor.new(
|
|
40
|
+
@all_example_ids, @failed_example_ids))
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -4,13 +4,15 @@ require 'stringio'
|
|
|
4
4
|
module RSpec
|
|
5
5
|
module Core
|
|
6
6
|
module Formatters
|
|
7
|
-
# RSpec's built-in formatters are all subclasses of
|
|
7
|
+
# RSpec's built-in formatters are all subclasses of
|
|
8
|
+
# RSpec::Core::Formatters::BaseFormatter.
|
|
8
9
|
#
|
|
9
10
|
# @see RSpec::Core::Formatters::BaseTextFormatter
|
|
10
11
|
# @see RSpec::Core::Reporter
|
|
11
12
|
# @see RSpec::Core::Formatters::Protocol
|
|
12
13
|
class BaseFormatter
|
|
13
|
-
#
|
|
14
|
+
# All formatters inheriting from this formatter will receive these
|
|
15
|
+
# notifications.
|
|
14
16
|
Formatters.register self, :start, :example_group_started, :close
|
|
15
17
|
attr_accessor :example_group
|
|
16
18
|
attr_reader :output
|
|
@@ -34,7 +36,8 @@ module RSpec
|
|
|
34
36
|
|
|
35
37
|
# @api public
|
|
36
38
|
#
|
|
37
|
-
# @param notification [GroupNotification] containing example_group
|
|
39
|
+
# @param notification [GroupNotification] containing example_group
|
|
40
|
+
# subclass of `RSpec::Core::ExampleGroup`
|
|
38
41
|
# @see RSpec::Core::Formatters::Protocol#example_group_started
|
|
39
42
|
def example_group_started(notification)
|
|
40
43
|
@example_group = notification.group
|
|
@@ -42,7 +45,7 @@ module RSpec
|
|
|
42
45
|
|
|
43
46
|
# @api public
|
|
44
47
|
#
|
|
45
|
-
# @param
|
|
48
|
+
# @param _notification [NullNotification] (Ignored)
|
|
46
49
|
# @see RSpec::Core::Formatters::Protocol#close
|
|
47
50
|
def close(_notification)
|
|
48
51
|
restore_sync_output
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
RSpec::Support.require_rspec_core "formatters/base_formatter"
|
|
2
|
-
RSpec::Support.require_rspec_core "formatters/console_codes"
|
|
3
2
|
|
|
4
3
|
module RSpec
|
|
5
4
|
module Core
|
|
6
5
|
module Formatters
|
|
7
|
-
# Base for all of RSpec's built-in formatters. See
|
|
8
|
-
# to learn more about all of the
|
|
6
|
+
# Base for all of RSpec's built-in formatters. See
|
|
7
|
+
# RSpec::Core::Formatters::BaseFormatter to learn more about all of the
|
|
8
|
+
# methods called by the reporter.
|
|
9
9
|
#
|
|
10
10
|
# @see RSpec::Core::Formatters::BaseFormatter
|
|
11
11
|
# @see RSpec::Core::Reporter
|
|
@@ -13,7 +13,6 @@ module RSpec
|
|
|
13
13
|
Formatters.register self,
|
|
14
14
|
:message, :dump_summary, :dump_failures, :dump_pending, :seed
|
|
15
15
|
|
|
16
|
-
# @method message
|
|
17
16
|
# @api public
|
|
18
17
|
#
|
|
19
18
|
# Used by the reporter to send messages to the output stream.
|
|
@@ -23,7 +22,6 @@ module RSpec
|
|
|
23
22
|
output.puts notification.message
|
|
24
23
|
end
|
|
25
24
|
|
|
26
|
-
# @method dump_failures
|
|
27
25
|
# @api public
|
|
28
26
|
#
|
|
29
27
|
# Dumps detailed information about each example failure.
|
|
@@ -34,14 +32,13 @@ module RSpec
|
|
|
34
32
|
output.puts notification.fully_formatted_failed_examples
|
|
35
33
|
end
|
|
36
34
|
|
|
37
|
-
# @method dump_summary
|
|
38
35
|
# @api public
|
|
39
36
|
#
|
|
40
|
-
# This method is invoked after the dumping of examples and failures.
|
|
41
|
-
# is assigned to a corresponding attribute.
|
|
37
|
+
# This method is invoked after the dumping of examples and failures.
|
|
38
|
+
# Each parameter is assigned to a corresponding attribute.
|
|
42
39
|
#
|
|
43
|
-
# @param summary [SummaryNotification] containing duration,
|
|
44
|
-
#
|
|
40
|
+
# @param summary [SummaryNotification] containing duration,
|
|
41
|
+
# example_count, failure_count and pending_count
|
|
45
42
|
def dump_summary(summary)
|
|
46
43
|
output.puts summary.fully_formatted
|
|
47
44
|
end
|
|
@@ -60,15 +57,17 @@ module RSpec
|
|
|
60
57
|
|
|
61
58
|
# @api public
|
|
62
59
|
#
|
|
63
|
-
# Invoked at the
|
|
64
|
-
# up
|
|
60
|
+
# Invoked at the end of a suite run. Allows the formatter to do any
|
|
61
|
+
# tidying up, but be aware that formatter output streams may be used
|
|
62
|
+
# elsewhere so don't actually close them.
|
|
65
63
|
#
|
|
66
|
-
# @param
|
|
64
|
+
# @param _notification [NullNotification] (Ignored)
|
|
67
65
|
def close(_notification)
|
|
68
|
-
return
|
|
69
|
-
|
|
66
|
+
return if output.closed?
|
|
67
|
+
|
|
68
|
+
output.puts
|
|
70
69
|
|
|
71
|
-
output.
|
|
70
|
+
output.flush
|
|
72
71
|
end
|
|
73
72
|
end
|
|
74
73
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'drb/drb'
|
|
2
|
+
RSpec::Support.require_rspec_core "formatters/base_bisect_formatter"
|
|
3
|
+
|
|
4
|
+
module RSpec
|
|
5
|
+
module Core
|
|
6
|
+
module Formatters
|
|
7
|
+
# Used by `--bisect`. When it shells out and runs a portion of the suite, it uses
|
|
8
|
+
# this formatter as a means to have the status reported back to it, via DRb.
|
|
9
|
+
#
|
|
10
|
+
# Note that since DRb calls carry considerable overhead compared to normal
|
|
11
|
+
# method calls, we try to minimize the number of DRb calls for perf reasons,
|
|
12
|
+
# opting to communicate only at the start and the end of the run, rather than
|
|
13
|
+
# after each example.
|
|
14
|
+
# @private
|
|
15
|
+
class BisectDRbFormatter < BaseBisectFormatter
|
|
16
|
+
def initialize(_output)
|
|
17
|
+
drb_uri = "druby://localhost:#{RSpec.configuration.drb_port}"
|
|
18
|
+
@bisect_server = DRbObject.new_with_uri(drb_uri)
|
|
19
|
+
RSpec.configuration.files_or_directories_to_run = @bisect_server.files_or_directories_to_run
|
|
20
|
+
super(Set.new(@bisect_server.expected_failures))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def notify_results(results)
|
|
24
|
+
@bisect_server.latest_run_results = results
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|