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.
Files changed (683) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +7 -7
  3. data/.gitmodules +6 -0
  4. data/CHANGELOG.md +16 -1
  5. data/Gemfile +13 -0
  6. data/README.md +63 -59
  7. data/diff-lcs/spec/files_to_exclude.txt +1 -0
  8. data/diff-lcs/spec/requires.rb +4 -0
  9. data/diff-lcs/upstream/.autotest +5 -0
  10. data/diff-lcs/upstream/.fasterer.yml +3 -0
  11. data/{stubs/diff/lcs.rb → diff-lcs/upstream/.gemtest} +0 -0
  12. data/diff-lcs/upstream/.github/workflows/ci.yml +64 -0
  13. data/diff-lcs/upstream/.github/workflows/codeql-analysis.yml +70 -0
  14. data/diff-lcs/upstream/.gitignore +20 -0
  15. data/diff-lcs/upstream/.hoerc +52 -0
  16. data/diff-lcs/upstream/.rspec +1 -0
  17. data/diff-lcs/upstream/.standard.yml +6 -0
  18. data/diff-lcs/upstream/Code-of-Conduct.md +74 -0
  19. data/diff-lcs/upstream/Contributing.md +119 -0
  20. data/diff-lcs/upstream/Gemfile +28 -0
  21. data/diff-lcs/upstream/History.md +407 -0
  22. data/diff-lcs/upstream/License.md +41 -0
  23. data/diff-lcs/upstream/Manifest.txt +59 -0
  24. data/diff-lcs/upstream/README.rdoc +84 -0
  25. data/diff-lcs/upstream/Rakefile +127 -0
  26. data/diff-lcs/upstream/bin/htmldiff +35 -0
  27. data/diff-lcs/upstream/bin/ldiff +9 -0
  28. data/diff-lcs/upstream/diff-lcs.gemspec +48 -0
  29. data/diff-lcs/upstream/docs/COPYING.txt +339 -0
  30. data/diff-lcs/upstream/docs/artistic.txt +127 -0
  31. data/diff-lcs/upstream/lib/diff/lcs/array.rb +7 -0
  32. data/diff-lcs/upstream/lib/diff/lcs/backports.rb +9 -0
  33. data/diff-lcs/upstream/lib/diff/lcs/block.rb +37 -0
  34. data/diff-lcs/upstream/lib/diff/lcs/callbacks.rb +327 -0
  35. data/diff-lcs/upstream/lib/diff/lcs/change.rb +174 -0
  36. data/diff-lcs/upstream/lib/diff/lcs/htmldiff.rb +158 -0
  37. data/diff-lcs/upstream/lib/diff/lcs/hunk.rb +363 -0
  38. data/diff-lcs/upstream/lib/diff/lcs/internals.rb +308 -0
  39. data/diff-lcs/upstream/lib/diff/lcs/ldiff.rb +173 -0
  40. data/diff-lcs/upstream/lib/diff/lcs/string.rb +5 -0
  41. data/diff-lcs/upstream/lib/diff/lcs.rb +741 -0
  42. data/diff-lcs/upstream/lib/diff-lcs.rb +3 -0
  43. data/diff-lcs/upstream/spec/change_spec.rb +89 -0
  44. data/diff-lcs/upstream/spec/diff_spec.rb +51 -0
  45. data/diff-lcs/upstream/spec/fixtures/aX +1 -0
  46. data/diff-lcs/upstream/spec/fixtures/bXaX +1 -0
  47. data/diff-lcs/upstream/spec/fixtures/ds1.csv +50 -0
  48. data/diff-lcs/upstream/spec/fixtures/ds2.csv +51 -0
  49. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff +4 -0
  50. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-c +7 -0
  51. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-e +3 -0
  52. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-f +3 -0
  53. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-u +5 -0
  54. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef +4 -0
  55. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-c +15 -0
  56. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-e +3 -0
  57. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-f +3 -0
  58. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-u +9 -0
  59. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2 +7 -0
  60. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-c +20 -0
  61. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-d +7 -0
  62. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-e +7 -0
  63. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-f +7 -0
  64. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-u +16 -0
  65. data/diff-lcs/upstream/spec/fixtures/new-chef +4 -0
  66. data/diff-lcs/upstream/spec/fixtures/new-chef2 +17 -0
  67. data/diff-lcs/upstream/spec/fixtures/old-chef +4 -0
  68. data/diff-lcs/upstream/spec/fixtures/old-chef2 +14 -0
  69. data/diff-lcs/upstream/spec/hunk_spec.rb +83 -0
  70. data/diff-lcs/upstream/spec/issues_spec.rb +160 -0
  71. data/diff-lcs/upstream/spec/lcs_spec.rb +56 -0
  72. data/diff-lcs/upstream/spec/ldiff_spec.rb +89 -0
  73. data/diff-lcs/upstream/spec/patch_spec.rb +416 -0
  74. data/diff-lcs/upstream/spec/sdiff_spec.rb +216 -0
  75. data/diff-lcs/upstream/spec/spec_helper.rb +376 -0
  76. data/diff-lcs/upstream/spec/traverse_balanced_spec.rb +312 -0
  77. data/diff-lcs/upstream/spec/traverse_sequences_spec.rb +137 -0
  78. data/lib/opal/rspec/runner.rb +11 -0
  79. data/lib/opal/rspec/sprockets.rb +6 -0
  80. data/lib/opal/rspec/version.rb +1 -1
  81. data/lib/opal/rspec.rb +1 -2
  82. data/lib-opal/opal/rspec/async/configuration.rb +39 -0
  83. data/lib-opal/opal/rspec/async/example.rb +80 -168
  84. data/lib-opal/opal/rspec/async/example_group.rb +71 -81
  85. data/lib-opal/opal/rspec/async/hooks.rb +98 -8
  86. data/lib-opal/opal/rspec/async/memoized_helpers.rb +32 -0
  87. data/lib-opal/opal/rspec/async/reporter.rb +6 -3
  88. data/lib-opal/opal/rspec/async/runner.rb +33 -24
  89. data/lib-opal/opal/rspec/async.rb +4 -1
  90. data/lib-opal/opal/rspec/browser.rb +0 -8
  91. data/lib-opal/opal/rspec/browser_early.rb +5 -0
  92. data/lib-opal/opal/rspec/fixes/diff-lcs/hunk.rb +164 -0
  93. data/lib-opal/opal/rspec/fixes/diff-lcs/lcs.rb +112 -0
  94. data/lib-opal/opal/rspec/fixes/diff-lcs.rb +2 -0
  95. data/lib-opal/opal/rspec/fixes/opal.rb +4 -17
  96. data/lib-opal/opal/rspec/fixes/rspec/core/example_status_persister.rb +11 -0
  97. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/deprecation_formatter.rb +3 -12
  98. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/exception_presenter.rb +28 -0
  99. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/loader.rb +0 -32
  100. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/snippet_extractor.rb +17 -0
  101. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/syntax_highlighter.rb +17 -0
  102. data/lib-opal/opal/rspec/fixes/rspec/core/formatters.rb +3 -4
  103. data/lib-opal/opal/rspec/fixes/rspec/core/metadata.rb +24 -8
  104. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/examples_notification.rb +3 -20
  105. data/lib-opal/opal/rspec/fixes/rspec/core/notifications.rb +0 -2
  106. data/lib-opal/opal/rspec/fixes/rspec/core.rb +1 -2
  107. data/lib-opal/opal/rspec/fixes/rspec/expectations.rb +0 -1
  108. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/base_matcher.rb +26 -0
  109. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in.rb +1 -3
  110. data/lib-opal/opal/rspec/fixes/rspec/matchers/expecteds_for_multiple_diffs.rb +13 -0
  111. data/lib-opal/opal/rspec/fixes/rspec/matchers.rb +1 -1
  112. data/lib-opal/opal/rspec/fixes/rspec/mocks/error_generator.rb +26 -10
  113. data/lib-opal/opal/rspec/fixes/rspec/mocks/proxy.rb +19 -0
  114. data/lib-opal/opal/rspec/fixes/rspec/mocks.rb +1 -3
  115. data/lib-opal/opal/rspec/fixes/rspec/support/differ.rb +29 -0
  116. data/lib-opal/opal/rspec/fixes/rspec/support/encoded_string.rb +9 -5
  117. data/lib-opal/opal/rspec/fixes/rspec/support/ruby_features.rb +22 -0
  118. data/lib-opal/opal/rspec/fixes/rspec/support/source.rb +15 -0
  119. data/lib-opal/opal/rspec/fixes/rspec/support.rb +3 -3
  120. data/lib-opal/opal/rspec/fixes/rspec.rb +0 -1
  121. data/lib-opal/opal/rspec/fixes.rb +1 -0
  122. data/lib-opal/opal/rspec/formatter/document_io.rb +1 -1
  123. data/lib-opal/opal/rspec/formatter/html_printer.rb +1 -1
  124. data/lib-opal/opal/rspec/pre_require_fixes.rb +1 -5
  125. data/lib-opal/opal/rspec/requires.rb +32 -19
  126. data/lib-opal/opal/rspec/sprockets_runner.rb.erb +1 -0
  127. data/lib-opal/opal/rspec.rb +3 -0
  128. data/opal-rspec.gemspec +1 -1
  129. data/rspec/upstream/.document +1 -1
  130. data/rspec/upstream/.github/FUNDING.yml +5 -0
  131. data/rspec/upstream/.gitignore +1 -0
  132. data/rspec/upstream/LICENSE.md +27 -0
  133. data/rspec/upstream/README.md +26 -26
  134. data/rspec/upstream/Rakefile +1 -1
  135. data/rspec/upstream/certs/rspec.pem +32 -20
  136. data/rspec/upstream/certs/samphippen.asc +18 -0
  137. data/rspec/upstream/code_of_conduct.md +59 -0
  138. data/rspec/upstream/lib/rspec/version.rb +1 -1
  139. data/rspec/upstream/rspec.gemspec +7 -2
  140. data/rspec-core/upstream/.document +1 -1
  141. data/rspec-core/upstream/.github/FUNDING.yml +5 -0
  142. data/rspec-core/upstream/.github/workflows/ci.yml +150 -0
  143. data/rspec-core/upstream/.gitignore +2 -0
  144. data/rspec-core/upstream/.rspec +1 -0
  145. data/rspec-core/upstream/.rubocop.yml +64 -12
  146. data/rspec-core/upstream/.rubocop_rspec_base.yml +224 -38
  147. data/rspec-core/upstream/.rubocop_todo.yml +1031 -0
  148. data/rspec-core/upstream/.yardopts +2 -1
  149. data/rspec-core/upstream/BUILD_DETAIL.md +149 -0
  150. data/rspec-core/upstream/CODE_OF_CONDUCT.md +59 -0
  151. data/rspec-core/upstream/CONTRIBUTING.md +86 -0
  152. data/rspec-core/upstream/Changelog.md +721 -2
  153. data/rspec-core/upstream/DEV-README.md +2 -2
  154. data/rspec-core/upstream/DEVELOPMENT.md +131 -0
  155. data/rspec-core/upstream/Filtering.md +173 -0
  156. data/rspec-core/upstream/Gemfile +78 -9
  157. data/rspec-core/upstream/ISSUE_TEMPLATE.md +24 -0
  158. data/rspec-core/upstream/{License.txt → LICENSE.md} +6 -5
  159. data/rspec-core/upstream/README.md +165 -24
  160. data/rspec-core/upstream/REPORT_TEMPLATE.md +43 -0
  161. data/rspec-core/upstream/Rakefile +1 -1
  162. data/rspec-core/upstream/benchmarks/allocations/1000_groups_1_example.rb +124 -0
  163. data/rspec-core/upstream/benchmarks/allocations/1_group_1000_examples.rb +63 -0
  164. data/rspec-core/upstream/benchmarks/allocations/helper.rb +30 -0
  165. data/rspec-core/upstream/benchmarks/allocations/running_1000_groups_1_example.rb +100 -0
  166. data/rspec-core/upstream/benchmarks/allocations/running_1_group_1000_examples.rb +60 -0
  167. data/rspec-core/upstream/benchmarks/capture_block_vs_yield.rb +208 -0
  168. data/rspec-core/upstream/benchmarks/flat_map_vs_inject.rb +55 -0
  169. data/rspec-core/upstream/benchmarks/hash_functions.rb +74 -0
  170. data/rspec-core/upstream/benchmarks/keys_each_vs_each_key.rb +43 -0
  171. data/rspec-core/upstream/benchmarks/module_inclusion_filtering.rb +89 -0
  172. data/rspec-core/upstream/benchmarks/precalculate_absolute_file_path_or_not.rb +29 -0
  173. data/rspec-core/upstream/benchmarks/shuffle_vs_sort_by_for_random_ordering.rb +131 -0
  174. data/rspec-core/upstream/benchmarks/singleton_example_groups/helper.rb +122 -0
  175. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks.rb +28 -0
  176. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks_module_inclusions_and_shared_context_inclusions.rb +35 -0
  177. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_module_inclusions.rb +28 -0
  178. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_no_config_hooks_or_inclusions.rb +22 -0
  179. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_shared_context_inclusions.rb +28 -0
  180. data/rspec-core/upstream/benchmarks/threadsafe_let_block.rb +312 -0
  181. data/rspec-core/upstream/cucumber.yml +7 -2
  182. data/rspec-core/upstream/features/.nav +5 -1
  183. data/rspec-core/upstream/features/README.md +2 -2
  184. data/rspec-core/upstream/features/clear_examples.feature +106 -0
  185. data/rspec-core/upstream/features/command_line/bisect.feature +178 -0
  186. data/rspec-core/upstream/features/command_line/example_matches_name_option.feature +131 -0
  187. data/rspec-core/upstream/features/command_line/example_name_option.feature +2 -0
  188. data/rspec-core/upstream/features/command_line/fail_fast.feature +21 -4
  189. data/rspec-core/upstream/features/command_line/init.feature +2 -2
  190. data/rspec-core/upstream/features/command_line/line_number_appended_to_path.feature +2 -2
  191. data/rspec-core/upstream/features/command_line/only_failures.feature +113 -0
  192. data/rspec-core/upstream/features/command_line/order.md +8 -1
  193. data/rspec-core/upstream/features/command_line/pattern_option.feature +6 -3
  194. data/rspec-core/upstream/features/command_line/rake_task.feature +3 -3
  195. data/rspec-core/upstream/features/command_line/randomization.feature +5 -2
  196. data/rspec-core/upstream/features/command_line/ruby.feature +6 -2
  197. data/rspec-core/upstream/features/command_line/tag.feature +13 -11
  198. data/rspec-core/upstream/features/command_line/warnings_option.feature +20 -3
  199. data/rspec-core/upstream/features/configuration/backtrace_exclusion_patterns.feature +45 -29
  200. data/rspec-core/upstream/features/configuration/color.feature +22 -0
  201. data/rspec-core/upstream/features/configuration/custom_settings.feature +9 -13
  202. data/rspec-core/upstream/features/configuration/default_path.feature +1 -1
  203. data/rspec-core/upstream/features/configuration/enable_global_dsl.feature +15 -1
  204. data/rspec-core/upstream/features/configuration/error_exit_code.feature +52 -0
  205. data/rspec-core/upstream/features/configuration/fail_fast.feature +42 -12
  206. data/rspec-core/upstream/features/configuration/fail_if_no_examples.feature +31 -0
  207. data/rspec-core/upstream/features/configuration/failure_exit_code.feature +26 -0
  208. data/rspec-core/upstream/features/configuration/overriding_global_ordering.feature +1 -1
  209. data/rspec-core/upstream/features/configuration/pattern.feature +1 -1
  210. data/rspec-core/upstream/features/configuration/profile.feature +25 -0
  211. data/rspec-core/upstream/features/configuration/read_options_from_file.feature +25 -19
  212. data/rspec-core/upstream/features/configuration/run_all_when_everything_filtered.feature +4 -0
  213. data/rspec-core/upstream/features/core_standalone.feature +2 -0
  214. data/rspec-core/upstream/features/example_groups/basic_structure.feature +1 -0
  215. data/rspec-core/upstream/features/example_groups/shared_context.feature +55 -5
  216. data/rspec-core/upstream/features/example_groups/shared_examples.feature +59 -15
  217. data/rspec-core/upstream/features/expectation_framework_integration/aggregating_failures.feature +602 -0
  218. data/rspec-core/upstream/features/expectation_framework_integration/configure_expectation_framework.feature +13 -5
  219. data/rspec-core/upstream/features/filtering/filter_run_when_matching.feature +75 -0
  220. data/rspec-core/upstream/features/formatters/configurable_colors.feature +23 -4
  221. data/rspec-core/upstream/features/helper_methods/let.feature +3 -0
  222. data/rspec-core/upstream/features/helper_methods/modules.feature +6 -0
  223. data/rspec-core/upstream/features/hooks/around_hooks.feature +36 -6
  224. data/rspec-core/upstream/features/hooks/before_and_after_hooks.feature +47 -5
  225. data/rspec-core/upstream/features/hooks/filtering.feature +199 -4
  226. data/rspec-core/upstream/features/hooks/when_first_matching_example_defined.feature +70 -0
  227. data/rspec-core/upstream/features/metadata/current_scope.feature +87 -0
  228. data/rspec-core/upstream/features/metadata/described_class.feature +12 -5
  229. data/rspec-core/upstream/features/metadata/user_defined.feature +3 -3
  230. data/rspec-core/upstream/features/mock_framework_integration/use_any_framework.feature +1 -1
  231. data/rspec-core/upstream/features/mock_framework_integration/use_flexmock.feature +5 -5
  232. data/rspec-core/upstream/features/mock_framework_integration/use_mocha.feature +5 -5
  233. data/rspec-core/upstream/features/mock_framework_integration/use_rr.feature +5 -5
  234. data/rspec-core/upstream/features/mock_framework_integration/use_rspec.feature +6 -6
  235. data/rspec-core/upstream/features/pending_and_skipped_examples/pending_examples.feature +8 -7
  236. data/rspec-core/upstream/features/pending_and_skipped_examples/skipped_examples.feature +49 -22
  237. data/rspec-core/upstream/features/step_definitions/additional_cli_steps.rb +142 -12
  238. data/rspec-core/upstream/features/step_definitions/core_standalone_steps.rb +6 -2
  239. data/rspec-core/upstream/features/subject/implicit_subject.feature +3 -2
  240. data/rspec-core/upstream/features/subject/one_liner_syntax.feature +9 -5
  241. data/rspec-core/upstream/features/support/diff_lcs_versions.rb +17 -0
  242. data/rspec-core/upstream/features/support/env.rb +20 -7
  243. data/rspec-core/upstream/features/support/jruby.rb +8 -0
  244. data/rspec-core/upstream/features/support/require_expect_syntax_in_aruba_specs.rb +6 -3
  245. data/rspec-core/upstream/features/support/rubinius.rb +5 -1
  246. data/rspec-core/upstream/features/support/ruby_27_support.rb +7 -0
  247. data/rspec-core/upstream/features/support/send_sigint_during_bisect.rb +21 -0
  248. data/rspec-core/upstream/lib/rspec/autorun.rb +1 -0
  249. data/rspec-core/upstream/lib/rspec/core/backtrace_formatter.rb +3 -4
  250. data/rspec-core/upstream/lib/rspec/core/bisect/coordinator.rb +62 -0
  251. data/rspec-core/upstream/lib/rspec/core/bisect/example_minimizer.rb +173 -0
  252. data/rspec-core/upstream/lib/rspec/core/bisect/fork_runner.rb +138 -0
  253. data/rspec-core/upstream/lib/rspec/core/bisect/server.rb +61 -0
  254. data/rspec-core/upstream/lib/rspec/core/bisect/shell_command.rb +126 -0
  255. data/rspec-core/upstream/lib/rspec/core/bisect/shell_runner.rb +73 -0
  256. data/rspec-core/upstream/lib/rspec/core/bisect/utilities.rb +69 -0
  257. data/rspec-core/upstream/lib/rspec/core/configuration.rb +1157 -212
  258. data/rspec-core/upstream/lib/rspec/core/configuration_options.rb +82 -22
  259. data/rspec-core/upstream/lib/rspec/core/did_you_mean.rb +46 -0
  260. data/rspec-core/upstream/lib/rspec/core/drb.rb +10 -1
  261. data/rspec-core/upstream/lib/rspec/core/dsl.rb +10 -5
  262. data/rspec-core/upstream/lib/rspec/core/example.rb +271 -107
  263. data/rspec-core/upstream/lib/rspec/core/example_group.rb +426 -127
  264. data/rspec-core/upstream/lib/rspec/core/example_status_persister.rb +235 -0
  265. data/rspec-core/upstream/lib/rspec/core/filter_manager.rb +76 -104
  266. data/rspec-core/upstream/lib/rspec/core/flat_map.rb +6 -4
  267. data/rspec-core/upstream/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
  268. data/rspec-core/upstream/lib/rspec/core/formatters/base_formatter.rb +7 -4
  269. data/rspec-core/upstream/lib/rspec/core/formatters/base_text_formatter.rb +15 -16
  270. data/rspec-core/upstream/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
  271. data/rspec-core/upstream/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
  272. data/rspec-core/upstream/lib/rspec/core/formatters/console_codes.rb +28 -16
  273. data/rspec-core/upstream/lib/rspec/core/formatters/deprecation_formatter.rb +14 -13
  274. data/rspec-core/upstream/lib/rspec/core/formatters/documentation_formatter.rb +47 -13
  275. data/rspec-core/upstream/lib/rspec/core/formatters/exception_presenter.rb +525 -0
  276. data/rspec-core/upstream/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
  277. data/rspec-core/upstream/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  278. data/rspec-core/upstream/lib/rspec/core/formatters/helpers.rb +40 -9
  279. data/rspec-core/upstream/lib/rspec/core/formatters/html_formatter.rb +20 -16
  280. data/rspec-core/upstream/lib/rspec/core/formatters/html_printer.rb +27 -18
  281. data/rspec-core/upstream/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
  282. data/rspec-core/upstream/lib/rspec/core/formatters/json_formatter.rb +15 -7
  283. data/rspec-core/upstream/lib/rspec/core/formatters/profile_formatter.rb +10 -7
  284. data/rspec-core/upstream/lib/rspec/core/formatters/progress_formatter.rb +1 -0
  285. data/rspec-core/upstream/lib/rspec/core/formatters/protocol.rb +62 -43
  286. data/rspec-core/upstream/lib/rspec/core/formatters/snippet_extractor.rb +115 -85
  287. data/rspec-core/upstream/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  288. data/rspec-core/upstream/lib/rspec/core/formatters.rb +71 -32
  289. data/rspec-core/upstream/lib/rspec/core/hooks.rb +303 -248
  290. data/rspec-core/upstream/lib/rspec/core/invocations.rb +87 -0
  291. data/rspec-core/upstream/lib/rspec/core/memoized_helpers.rb +155 -47
  292. data/rspec-core/upstream/lib/rspec/core/metadata.rb +102 -41
  293. data/rspec-core/upstream/lib/rspec/core/metadata_filter.rb +209 -49
  294. data/rspec-core/upstream/lib/rspec/core/minitest_assertions_adapter.rb +5 -2
  295. data/rspec-core/upstream/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  296. data/rspec-core/upstream/lib/rspec/core/mocking_adapters/mocha.rb +8 -8
  297. data/rspec-core/upstream/lib/rspec/core/notifications.rb +180 -201
  298. data/rspec-core/upstream/lib/rspec/core/option_parser.rb +159 -58
  299. data/rspec-core/upstream/lib/rspec/core/ordering.rb +40 -26
  300. data/rspec-core/upstream/lib/rspec/core/output_wrapper.rb +29 -0
  301. data/rspec-core/upstream/lib/rspec/core/pending.rb +19 -25
  302. data/rspec-core/upstream/lib/rspec/core/profiler.rb +34 -0
  303. data/rspec-core/upstream/lib/rspec/core/project_initializer/.rspec +0 -1
  304. data/rspec-core/upstream/lib/rspec/core/project_initializer/spec/spec_helper.rb +31 -22
  305. data/rspec-core/upstream/lib/rspec/core/project_initializer.rb +1 -1
  306. data/rspec-core/upstream/lib/rspec/core/rake_task.rb +73 -72
  307. data/rspec-core/upstream/lib/rspec/core/reporter.rb +134 -18
  308. data/rspec-core/upstream/lib/rspec/core/ruby_project.rb +13 -5
  309. data/rspec-core/upstream/lib/rspec/core/runner.rb +99 -45
  310. data/rspec-core/upstream/lib/rspec/core/sandbox.rb +37 -0
  311. data/rspec-core/upstream/lib/rspec/core/set.rb +54 -0
  312. data/rspec-core/upstream/lib/rspec/core/shared_example_group.rb +126 -37
  313. data/rspec-core/upstream/lib/rspec/core/shell_escape.rb +49 -0
  314. data/rspec-core/upstream/lib/rspec/core/test_unit_assertions_adapter.rb +3 -3
  315. data/rspec-core/upstream/lib/rspec/core/version.rb +1 -1
  316. data/rspec-core/upstream/lib/rspec/core/warnings.rb +2 -2
  317. data/rspec-core/upstream/lib/rspec/core/world.rb +164 -60
  318. data/rspec-core/upstream/lib/rspec/core.rb +64 -21
  319. data/rspec-core/upstream/maintenance-branch +1 -1
  320. data/rspec-core/upstream/rspec-core.gemspec +16 -11
  321. data/rspec-core/upstream/script/ci_functions.sh +73 -0
  322. data/rspec-core/upstream/script/clone_all_rspec_repos +2 -2
  323. data/rspec-core/upstream/script/cucumber.sh +8 -0
  324. data/rspec-core/upstream/script/custom_build_functions.sh +22 -0
  325. data/rspec-core/upstream/script/functions.sh +125 -89
  326. data/rspec-core/upstream/script/legacy_setup.sh +20 -0
  327. data/rspec-core/upstream/script/predicate_functions.sh +162 -0
  328. data/rspec-core/upstream/script/rspec_with_simplecov +6 -6
  329. data/rspec-core/upstream/script/run_build +14 -9
  330. data/rspec-core/upstream/script/run_rubocop +14 -0
  331. data/rspec-core/upstream/script/update_rubygems_and_install_bundler +20 -0
  332. data/rspec-expectations/upstream/.document +1 -1
  333. data/rspec-expectations/upstream/.github/FUNDING.yml +5 -0
  334. data/rspec-expectations/upstream/.github/workflows/ci.yml +150 -0
  335. data/rspec-expectations/upstream/.gitignore +2 -0
  336. data/rspec-expectations/upstream/.rubocop.yml +126 -2
  337. data/rspec-expectations/upstream/.rubocop_rspec_base.yml +224 -38
  338. data/rspec-expectations/upstream/.rubocop_todo.yml +335 -0
  339. data/rspec-expectations/upstream/.yardopts +1 -1
  340. data/rspec-expectations/upstream/BUILD_DETAIL.md +149 -0
  341. data/rspec-expectations/upstream/CODE_OF_CONDUCT.md +59 -0
  342. data/rspec-expectations/upstream/CONTRIBUTING.md +86 -0
  343. data/rspec-expectations/upstream/Changelog.md +454 -4
  344. data/rspec-expectations/upstream/DEV-README.md +3 -3
  345. data/rspec-expectations/upstream/DEVELOPMENT.md +131 -0
  346. data/rspec-expectations/upstream/Gemfile +77 -9
  347. data/rspec-expectations/upstream/ISSUE_TEMPLATE.md +24 -0
  348. data/{rspec-mocks/upstream/License.txt → rspec-expectations/upstream/LICENSE.md} +5 -4
  349. data/rspec-expectations/upstream/README.md +73 -31
  350. data/rspec-expectations/upstream/REPORT_TEMPLATE.md +43 -0
  351. data/rspec-expectations/upstream/Rakefile +13 -10
  352. data/rspec-expectations/upstream/Should.md +13 -5
  353. data/rspec-expectations/upstream/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +1 -2
  354. data/rspec-expectations/upstream/benchmarks/caller_vs_raise_for_backtrace.rb +77 -0
  355. data/rspec-expectations/upstream/benchmarks/count_vs_select_size.rb +68 -0
  356. data/rspec-expectations/upstream/benchmarks/default_messages_as_methods_v_blocks.rb +1 -1
  357. data/rspec-expectations/upstream/benchmarks/gsub_vs_tr_single_character.rb +28 -0
  358. data/rspec-expectations/upstream/benchmarks/include_matcher.rb +249 -0
  359. data/rspec-expectations/upstream/benchmarks/include_v_superclass.rb +0 -1
  360. data/rspec-expectations/upstream/benchmarks/match_array/failing_with_duplicate_items.rb +1 -1
  361. data/rspec-expectations/upstream/benchmarks/output_stringio_vs_tempfile.rb +31 -0
  362. data/rspec-expectations/upstream/benchmarks/set_vs_array_include.rb +1 -3
  363. data/rspec-expectations/upstream/cucumber.yml +9 -4
  364. data/rspec-expectations/upstream/features/.nav +1 -0
  365. data/rspec-expectations/upstream/features/aggregating_failures.feature +56 -0
  366. data/rspec-expectations/upstream/features/built_in_matchers/README.md +3 -3
  367. data/rspec-expectations/upstream/features/built_in_matchers/all.feature +3 -2
  368. data/rspec-expectations/upstream/features/built_in_matchers/be_within.feature +1 -1
  369. data/rspec-expectations/upstream/features/built_in_matchers/change.feature +8 -6
  370. data/rspec-expectations/upstream/features/built_in_matchers/comparisons.feature +33 -1
  371. data/rspec-expectations/upstream/features/built_in_matchers/contain_exactly.feature +1 -0
  372. data/rspec-expectations/upstream/features/built_in_matchers/cover.feature +3 -3
  373. data/rspec-expectations/upstream/features/built_in_matchers/exist.feature +1 -1
  374. data/rspec-expectations/upstream/features/built_in_matchers/have_attributes.feature +1 -2
  375. data/rspec-expectations/upstream/features/built_in_matchers/include.feature +74 -17
  376. data/rspec-expectations/upstream/features/built_in_matchers/match.feature +2 -2
  377. data/rspec-expectations/upstream/features/built_in_matchers/output.feature +67 -4
  378. data/rspec-expectations/upstream/features/built_in_matchers/predicates.feature +56 -19
  379. data/rspec-expectations/upstream/features/built_in_matchers/raise_error.feature +16 -2
  380. data/rspec-expectations/upstream/features/built_in_matchers/respond_to.feature +191 -3
  381. data/rspec-expectations/upstream/features/built_in_matchers/satisfy.feature +17 -8
  382. data/rspec-expectations/upstream/features/built_in_matchers/throw_symbol.feature +1 -1
  383. data/rspec-expectations/upstream/features/built_in_matchers/types.feature +34 -34
  384. data/rspec-expectations/upstream/features/built_in_matchers/yield.feature +2 -2
  385. data/rspec-expectations/upstream/features/composing_matchers.feature +4 -4
  386. data/rspec-expectations/upstream/features/custom_matchers/define_block_matcher.feature +78 -0
  387. data/rspec-expectations/upstream/features/custom_matchers/define_diffable_matcher.feature +115 -3
  388. data/rspec-expectations/upstream/features/custom_matchers/define_matcher.feature +173 -21
  389. data/rspec-expectations/upstream/features/custom_matchers/define_matcher_with_fluent_interface.feature +21 -2
  390. data/rspec-expectations/upstream/features/define_negated_matcher.feature +2 -1
  391. data/rspec-expectations/upstream/features/diffing.feature +29 -1
  392. data/rspec-expectations/upstream/features/implicit_docstrings.feature +8 -8
  393. data/rspec-expectations/upstream/features/step_definitions/additional_cli_steps.rb +11 -7
  394. data/rspec-expectations/upstream/features/support/diff_lcs_versions.rb +25 -0
  395. data/rspec-expectations/upstream/features/support/disallow_certain_apis.rb +3 -3
  396. data/rspec-expectations/upstream/features/support/env.rb +11 -11
  397. data/rspec-expectations/upstream/features/support/rubinius.rb +1 -1
  398. data/rspec-expectations/upstream/features/support/ruby_features.rb +39 -0
  399. data/rspec-expectations/upstream/features/syntax_configuration.feature +9 -9
  400. data/rspec-expectations/upstream/features/test_frameworks/minitest.feature +69 -2
  401. data/rspec-expectations/upstream/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  402. data/rspec-expectations/upstream/lib/rspec/expectations/configuration.rb +84 -1
  403. data/rspec-expectations/upstream/lib/rspec/expectations/expectation_target.rb +82 -38
  404. data/rspec-expectations/upstream/lib/rspec/expectations/fail_with.rb +11 -6
  405. data/rspec-expectations/upstream/lib/rspec/expectations/failure_aggregator.rb +212 -0
  406. data/rspec-expectations/upstream/lib/rspec/expectations/handler.rb +27 -12
  407. data/rspec-expectations/upstream/lib/rspec/expectations/minitest_integration.rb +43 -2
  408. data/rspec-expectations/upstream/lib/rspec/expectations/syntax.rb +5 -5
  409. data/rspec-expectations/upstream/lib/rspec/expectations/version.rb +1 -1
  410. data/rspec-expectations/upstream/lib/rspec/expectations.rb +15 -1
  411. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/all.rb +1 -0
  412. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/base_matcher.rb +77 -11
  413. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be.rb +28 -114
  414. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_between.rb +1 -1
  415. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_instance_of.rb +5 -1
  416. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_kind_of.rb +5 -1
  417. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_within.rb +4 -4
  418. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/change.rb +168 -55
  419. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/compound.rb +61 -29
  420. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/contain_exactly.rb +73 -12
  421. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/count_expectation.rb +169 -0
  422. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eq.rb +3 -38
  423. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eql.rb +2 -2
  424. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/equal.rb +3 -3
  425. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/exist.rb +7 -3
  426. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/has.rb +90 -24
  427. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/have_attributes.rb +37 -7
  428. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/include.rb +124 -23
  429. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/match.rb +79 -2
  430. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/operators.rb +14 -5
  431. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/output.rb +56 -1
  432. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/raise_error.rb +126 -29
  433. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/respond_to.rb +118 -9
  434. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/satisfy.rb +28 -7
  435. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/{start_and_end_with.rb → start_or_end_with.rb} +20 -8
  436. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/throw_symbol.rb +11 -5
  437. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/yield.rb +110 -155
  438. data/rspec-expectations/upstream/lib/rspec/matchers/built_in.rb +4 -3
  439. data/rspec-expectations/upstream/lib/rspec/matchers/composable.rb +23 -35
  440. data/rspec-expectations/upstream/lib/rspec/matchers/dsl.rb +179 -26
  441. data/rspec-expectations/upstream/lib/rspec/matchers/english_phrasing.rb +58 -0
  442. data/rspec-expectations/upstream/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
  443. data/rspec-expectations/upstream/lib/rspec/matchers/fail_matchers.rb +42 -0
  444. data/rspec-expectations/upstream/lib/rspec/matchers/generated_descriptions.rb +1 -2
  445. data/rspec-expectations/upstream/lib/rspec/matchers/matcher_delegator.rb +2 -0
  446. data/rspec-expectations/upstream/lib/rspec/matchers/matcher_protocol.rb +72 -66
  447. data/rspec-expectations/upstream/lib/rspec/matchers.rb +227 -150
  448. data/rspec-expectations/upstream/maintenance-branch +1 -1
  449. data/rspec-expectations/upstream/rspec-expectations.gemspec +13 -8
  450. data/rspec-expectations/upstream/script/ci_functions.sh +73 -0
  451. data/rspec-expectations/upstream/script/clone_all_rspec_repos +2 -2
  452. data/rspec-expectations/upstream/script/cucumber.sh +8 -0
  453. data/rspec-expectations/upstream/script/functions.sh +125 -89
  454. data/rspec-expectations/upstream/script/legacy_setup.sh +20 -0
  455. data/rspec-expectations/upstream/script/predicate_functions.sh +162 -0
  456. data/rspec-expectations/upstream/script/run_build +14 -9
  457. data/rspec-expectations/upstream/script/run_rubocop +14 -0
  458. data/rspec-expectations/upstream/script/update_rubygems_and_install_bundler +20 -0
  459. data/rspec-mocks/upstream/.document +1 -1
  460. data/rspec-mocks/upstream/.github/FUNDING.yml +5 -0
  461. data/rspec-mocks/upstream/.github/workflows/ci.yml +150 -0
  462. data/rspec-mocks/upstream/.gitignore +2 -0
  463. data/rspec-mocks/upstream/.rubocop.yml +28 -9
  464. data/rspec-mocks/upstream/.rubocop_rspec_base.yml +224 -38
  465. data/rspec-mocks/upstream/.rubocop_todo.yml +573 -0
  466. data/rspec-mocks/upstream/.yardopts +1 -1
  467. data/rspec-mocks/upstream/BUILD_DETAIL.md +149 -0
  468. data/rspec-mocks/upstream/CODE_OF_CONDUCT.md +59 -0
  469. data/rspec-mocks/upstream/CONTRIBUTING.md +86 -0
  470. data/rspec-mocks/upstream/Changelog.md +398 -3
  471. data/rspec-mocks/upstream/DEV-README.md +3 -3
  472. data/rspec-mocks/upstream/DEVELOPMENT.md +131 -0
  473. data/rspec-mocks/upstream/Gemfile +77 -10
  474. data/rspec-mocks/upstream/ISSUE_TEMPLATE.md +24 -0
  475. data/{rspec-expectations/upstream/License.txt → rspec-mocks/upstream/LICENSE.md} +5 -4
  476. data/rspec-mocks/upstream/README.md +83 -17
  477. data/rspec-mocks/upstream/REPORT_TEMPLATE.md +43 -0
  478. data/rspec-mocks/upstream/Rakefile +3 -3
  479. data/rspec-mocks/upstream/benchmarks/accessing_configuration_via_method_vs_cache.rb +52 -0
  480. data/rspec-mocks/upstream/benchmarks/allocations/1_object_1000_mocks.rb +76 -0
  481. data/rspec-mocks/upstream/benchmarks/allocations/helper.rb +17 -0
  482. data/rspec-mocks/upstream/benchmarks/each_value_v_values_each.rb +4 -5
  483. data/rspec-mocks/upstream/benchmarks/find_original_method_early.rb +1 -1
  484. data/rspec-mocks/upstream/benchmarks/method_defined_at_any_visibility.rb +3 -3
  485. data/rspec-mocks/upstream/benchmarks/thread_safety.rb +1 -1
  486. data/rspec-mocks/upstream/benchmarks/transfer_nested_constants.rb +1 -1
  487. data/rspec-mocks/upstream/cucumber.yml +8 -1
  488. data/rspec-mocks/upstream/features/.nav +2 -0
  489. data/rspec-mocks/upstream/features/basics/allowing_messages.feature +1 -1
  490. data/rspec-mocks/upstream/features/basics/expecting_messages.feature +40 -1
  491. data/rspec-mocks/upstream/features/basics/null_object_doubles.feature +1 -1
  492. data/rspec-mocks/upstream/features/basics/partial_test_doubles.feature +1 -1
  493. data/rspec-mocks/upstream/features/basics/scope.feature +5 -5
  494. data/rspec-mocks/upstream/features/basics/spies.feature +17 -30
  495. data/rspec-mocks/upstream/features/basics/test_doubles.feature +4 -4
  496. data/rspec-mocks/upstream/features/configuring_responses/README.md +2 -0
  497. data/rspec-mocks/upstream/features/configuring_responses/calling_the_original_implementation.feature +2 -2
  498. data/rspec-mocks/upstream/features/configuring_responses/mixed_responses.feature +25 -0
  499. data/rspec-mocks/upstream/features/configuring_responses/raising_an_error.feature +1 -0
  500. data/rspec-mocks/upstream/features/configuring_responses/wrapping_the_original_implementation.feature +3 -3
  501. data/rspec-mocks/upstream/features/configuring_responses/yielding.feature +2 -2
  502. data/rspec-mocks/upstream/features/mutating_constants/README.md +1 -1
  503. data/rspec-mocks/upstream/features/old_syntax/any_instance.feature +3 -3
  504. data/rspec-mocks/upstream/features/old_syntax/should_receive.feature +3 -1
  505. data/rspec-mocks/upstream/features/outside_rspec/any_test_framework.feature +116 -0
  506. data/rspec-mocks/upstream/features/outside_rspec/minitest.feature +202 -46
  507. data/rspec-mocks/upstream/features/outside_rspec/standalone.feature +5 -5
  508. data/rspec-mocks/upstream/features/setting_constraints/matching_arguments.feature +54 -27
  509. data/rspec-mocks/upstream/features/setting_constraints/message_order.feature +2 -2
  510. data/rspec-mocks/upstream/features/setting_constraints/receive_counts.feature +18 -0
  511. data/rspec-mocks/upstream/features/step_definitions/additional_cli_steps.rb +4 -4
  512. data/rspec-mocks/upstream/features/support/disallow_certain_apis.rb +3 -2
  513. data/rspec-mocks/upstream/features/support/env.rb +12 -12
  514. data/rspec-mocks/upstream/features/support/rubinius.rb +1 -1
  515. data/rspec-mocks/upstream/features/verifying_doubles/README.md +2 -2
  516. data/rspec-mocks/upstream/features/verifying_doubles/class_doubles.feature +1 -1
  517. data/rspec-mocks/upstream/features/verifying_doubles/dynamic_classes.feature +41 -5
  518. data/rspec-mocks/upstream/features/verifying_doubles/instance_doubles.feature +5 -3
  519. data/rspec-mocks/upstream/features/working_with_legacy_code/any_instance.feature +8 -6
  520. data/rspec-mocks/upstream/features/working_with_legacy_code/message_chains.feature +16 -1
  521. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/chain.rb +3 -1
  522. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  523. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expect_chain_chain.rb +1 -5
  524. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expectation_chain.rb +7 -5
  525. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/message_chains.rb +1 -3
  526. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/recorder.rb +42 -14
  527. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain.rb +13 -7
  528. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain_chain.rb +1 -5
  529. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance.rb +1 -0
  530. data/rspec-mocks/upstream/lib/rspec/mocks/argument_list_matcher.rb +53 -10
  531. data/rspec-mocks/upstream/lib/rspec/mocks/argument_matchers.rb +66 -26
  532. data/rspec-mocks/upstream/lib/rspec/mocks/configuration.rb +59 -4
  533. data/rspec-mocks/upstream/lib/rspec/mocks/error_generator.rb +235 -108
  534. data/rspec-mocks/upstream/lib/rspec/mocks/example_methods.rb +82 -27
  535. data/rspec-mocks/upstream/lib/rspec/mocks/instance_method_stasher.rb +12 -1
  536. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/have_received.rb +30 -17
  537. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive.rb +28 -1
  538. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_message_chain.rb +17 -1
  539. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_messages.rb +6 -0
  540. data/rspec-mocks/upstream/lib/rspec/mocks/message_chain.rb +0 -4
  541. data/rspec-mocks/upstream/lib/rspec/mocks/message_expectation.rb +430 -304
  542. data/rspec-mocks/upstream/lib/rspec/mocks/method_double.rb +46 -15
  543. data/rspec-mocks/upstream/lib/rspec/mocks/method_reference.rb +78 -19
  544. data/rspec-mocks/upstream/lib/rspec/mocks/minitest_integration.rb +68 -0
  545. data/rspec-mocks/upstream/lib/rspec/mocks/mutate_const.rb +23 -8
  546. data/rspec-mocks/upstream/lib/rspec/mocks/object_reference.rb +81 -23
  547. data/rspec-mocks/upstream/lib/rspec/mocks/proxy.rb +135 -41
  548. data/rspec-mocks/upstream/lib/rspec/mocks/space.rb +33 -16
  549. data/rspec-mocks/upstream/lib/rspec/mocks/standalone.rb +1 -1
  550. data/rspec-mocks/upstream/lib/rspec/mocks/syntax.rb +18 -22
  551. data/rspec-mocks/upstream/lib/rspec/mocks/targets.rb +51 -24
  552. data/rspec-mocks/upstream/lib/rspec/mocks/test_double.rb +42 -6
  553. data/rspec-mocks/upstream/lib/rspec/mocks/verifying_double.rb +15 -21
  554. data/rspec-mocks/upstream/lib/rspec/mocks/{verifying_message_expecation.rb → verifying_message_expectation.rb} +11 -18
  555. data/rspec-mocks/upstream/lib/rspec/mocks/verifying_proxy.rb +60 -11
  556. data/rspec-mocks/upstream/lib/rspec/mocks/version.rb +1 -1
  557. data/rspec-mocks/upstream/lib/rspec/mocks.rb +8 -1
  558. data/rspec-mocks/upstream/maintenance-branch +1 -1
  559. data/rspec-mocks/upstream/rspec-mocks.gemspec +14 -6
  560. data/rspec-mocks/upstream/script/ci_functions.sh +73 -0
  561. data/rspec-mocks/upstream/script/clone_all_rspec_repos +2 -2
  562. data/rspec-mocks/upstream/script/cucumber.sh +8 -0
  563. data/rspec-mocks/upstream/script/functions.sh +125 -89
  564. data/rspec-mocks/upstream/script/legacy_setup.sh +20 -0
  565. data/rspec-mocks/upstream/script/predicate_functions.sh +162 -0
  566. data/rspec-mocks/upstream/script/run_build +14 -9
  567. data/rspec-mocks/upstream/script/run_rubocop +14 -0
  568. data/rspec-mocks/upstream/script/update_rubygems_and_install_bundler +20 -0
  569. data/{stubs/diff/lcs/assertions.rb → rspec-mocks/upstream/tmp/.gitkeep} +0 -0
  570. data/rspec-support/upstream/.github/FUNDING.yml +5 -0
  571. data/rspec-support/upstream/.github/workflows/ci.yml +150 -0
  572. data/rspec-support/upstream/.gitignore +4 -0
  573. data/rspec-support/upstream/.rubocop.yml +33 -1
  574. data/rspec-support/upstream/.rubocop_rspec_base.yml +224 -38
  575. data/rspec-support/upstream/.rubocop_todo.yml +424 -0
  576. data/rspec-support/upstream/BUILD_DETAIL.md +149 -0
  577. data/rspec-support/upstream/CODE_OF_CONDUCT.md +59 -0
  578. data/rspec-support/upstream/CONTRIBUTING.md +86 -0
  579. data/rspec-support/upstream/Changelog.md +287 -0
  580. data/rspec-support/upstream/DEVELOPMENT.md +131 -0
  581. data/rspec-support/upstream/Gemfile +52 -4
  582. data/rspec-support/upstream/ISSUE_TEMPLATE.md +24 -0
  583. data/rspec-support/upstream/{LICENSE.txt → LICENSE.md} +3 -2
  584. data/rspec-support/upstream/README.md +29 -6
  585. data/rspec-support/upstream/REPORT_TEMPLATE.md +43 -0
  586. data/rspec-support/upstream/Rakefile +9 -5
  587. data/rspec-support/upstream/benchmarks/caller_vs_caller_locations.rb +19 -0
  588. data/rspec-support/upstream/benchmarks/caller_vs_caller_locations_vs_raise.rb +153 -0
  589. data/rspec-support/upstream/benchmarks/class_exec_vs_klass_exec.rb +43 -0
  590. data/rspec-support/upstream/benchmarks/map_hash.rb +70 -0
  591. data/rspec-support/upstream/benchmarks/ripper.rb +44 -0
  592. data/rspec-support/upstream/benchmarks/skip_frames_for_caller_filter.rb +27 -0
  593. data/rspec-support/upstream/lib/rspec/support/caller_filter.rb +35 -15
  594. data/rspec-support/upstream/lib/rspec/support/comparable_version.rb +46 -0
  595. data/rspec-support/upstream/lib/rspec/support/differ.rb +35 -34
  596. data/rspec-support/upstream/lib/rspec/support/directory_maker.rb +3 -1
  597. data/rspec-support/upstream/lib/rspec/support/encoded_string.rb +103 -11
  598. data/rspec-support/upstream/lib/rspec/support/fuzzy_matcher.rb +5 -5
  599. data/rspec-support/upstream/lib/rspec/support/matcher_definition.rb +11 -0
  600. data/rspec-support/upstream/lib/rspec/support/method_signature_verifier.rb +192 -26
  601. data/rspec-support/upstream/lib/rspec/support/mutex.rb +73 -0
  602. data/rspec-support/upstream/lib/rspec/support/object_formatter.rb +275 -0
  603. data/rspec-support/upstream/lib/rspec/support/recursive_const_methods.rb +1 -1
  604. data/rspec-support/upstream/lib/rspec/support/reentrant_mutex.rb +78 -0
  605. data/rspec-support/upstream/lib/rspec/support/ruby_features.rb +168 -15
  606. data/rspec-support/upstream/lib/rspec/support/source/location.rb +21 -0
  607. data/rspec-support/upstream/lib/rspec/support/source/node.rb +110 -0
  608. data/rspec-support/upstream/lib/rspec/support/source/token.rb +94 -0
  609. data/rspec-support/upstream/lib/rspec/support/source.rb +85 -0
  610. data/rspec-support/upstream/lib/rspec/support/spec/deprecation_helpers.rb +17 -29
  611. data/rspec-support/upstream/lib/rspec/support/spec/diff_helpers.rb +31 -0
  612. data/rspec-support/upstream/lib/rspec/support/spec/in_sub_process.rb +41 -17
  613. data/rspec-support/upstream/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  614. data/rspec-support/upstream/lib/rspec/support/spec/shell_out.rb +39 -3
  615. data/rspec-support/upstream/lib/rspec/support/spec/stderr_splitter.rb +27 -4
  616. data/rspec-support/upstream/lib/rspec/support/spec/string_matcher.rb +45 -0
  617. data/rspec-support/upstream/lib/rspec/support/spec/with_isolated_directory.rb +5 -1
  618. data/rspec-support/upstream/lib/rspec/support/spec.rb +17 -7
  619. data/rspec-support/upstream/lib/rspec/support/version.rb +1 -1
  620. data/rspec-support/upstream/lib/rspec/support/warnings.rb +3 -3
  621. data/rspec-support/upstream/lib/rspec/support/with_keywords_when_needed.rb +33 -0
  622. data/rspec-support/upstream/lib/rspec/support.rb +81 -3
  623. data/rspec-support/upstream/maintenance-branch +1 -1
  624. data/rspec-support/upstream/rspec-support.gemspec +10 -4
  625. data/rspec-support/upstream/script/ci_functions.sh +73 -0
  626. data/rspec-support/upstream/script/clone_all_rspec_repos +2 -2
  627. data/rspec-support/upstream/script/cucumber.sh +8 -0
  628. data/rspec-support/upstream/script/functions.sh +125 -89
  629. data/rspec-support/upstream/script/legacy_setup.sh +20 -0
  630. data/rspec-support/upstream/script/predicate_functions.sh +162 -0
  631. data/rspec-support/upstream/script/run_build +14 -9
  632. data/rspec-support/upstream/script/run_rubocop +14 -0
  633. data/rspec-support/upstream/script/update_rubygems_and_install_bundler +20 -0
  634. data/stubs/{diff/lcs/block.rb → coderay.rb} +0 -0
  635. data/stubs/{diff/lcs/callbacks.rb → drb/acl.rb} +0 -0
  636. data/stubs/{diff/lcs/change.rb → erb/version.rb} +0 -0
  637. data/stubs/{diff/lcs/hunk.rb → open3.rb} +0 -0
  638. data/stubs/{diff/lcs/internals.rb → psych.rb} +0 -0
  639. data/stubs/{optparse.rb → ripper.rb} +0 -0
  640. data/stubs/{prettyprint.rb → thread_order.rb} +0 -0
  641. data/tasks/testing.rake +7 -3
  642. metadata +270 -61
  643. data/gemfiles/.bundle/config +0 -2
  644. data/gemfiles/opal_0.11.gemfile +0 -14
  645. data/gemfiles/opal_master.gemfile +0 -14
  646. data/lib-opal/opal/rspec/async/core_ext.rb +0 -23
  647. data/lib-opal/opal/rspec/async/legacy.rb +0 -49
  648. data/lib-opal/opal/rspec/fixes/rspec/caller_filter.rb +0 -6
  649. data/lib-opal/opal/rspec/fixes/rspec/core/example.rb +0 -20
  650. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/backtrace_formatter.rb +0 -20
  651. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/console_codes.rb +0 -11
  652. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/generated_deprecation_message.rb +0 -15
  653. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/json_formatter.rb +0 -15
  654. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/failed_example_notification.rb +0 -20
  655. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/summary_notification.rb +0 -21
  656. data/lib-opal/opal/rspec/fixes/rspec/core/warnings.rb +0 -27
  657. data/lib-opal/opal/rspec/fixes/rspec/expectations/fail_with.rb +0 -21
  658. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/all.rb +0 -10
  659. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/compound.rb +0 -15
  660. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/yield.rb +0 -21
  661. data/lib-opal/opal/rspec/fixes/rspec/matchers/pretty.rb +0 -15
  662. data/lib-opal/opal/rspec/fixes/rspec/mocks/space.rb +0 -41
  663. data/lib-opal/opal/rspec/fixes/rspec/mocks/test_double.rb +0 -39
  664. data/lib-opal/opal/rspec/fixes/rspec/mocks/verifying_double.rb +0 -29
  665. data/lib-opal/opal/rspec/fixes/rspec/support/recursive_const_methods.rb +0 -7
  666. data/lib-opal/opal/rspec/fixes/rspec/support/spec/stderr_splitter.rb +0 -13
  667. data/lib-opal/opal/rspec/fixes/rspec/support/spec.rb +0 -1
  668. data/lib-opal/opal/rspec/fixes/rspec/support/warnings.rb +0 -16
  669. data/rspec/upstream/License.txt +0 -24
  670. data/rspec-core/upstream/.travis.yml +0 -35
  671. data/rspec-core/upstream/benchmarks/sort_by_v_shuffle.rb +0 -83
  672. data/rspec-core/upstream/features/Upgrade.md +0 -352
  673. data/rspec-core/upstream/lib/rspec/core/backport_random.rb +0 -336
  674. data/rspec-expectations/upstream/.travis.yml +0 -35
  675. data/rspec-expectations/upstream/lib/rspec/matchers/pretty.rb +0 -77
  676. data/rspec-mocks/upstream/.travis.yml +0 -35
  677. data/rspec-support/upstream/.travis.yml +0 -35
  678. data/rspec-support/upstream/lib/rspec/support/os.rb +0 -18
  679. data/rspec-support/upstream/lib/rspec/support/spec/prevent_load_time_warnings.rb +0 -44
  680. data/rspec-support/upstream/lib/rspec/support/version_checker.rb +0 -53
  681. data/stubs/shellwords.rb +0 -0
  682. data/stubs/uri.rb +0 -0
  683. data/vendor/spec_runner.js +0 -64
@@ -1,16 +1,19 @@
1
1
  Feature: `include` matcher
2
2
 
3
- Use the include matcher to specify that a collection includes one or more expected objects.
4
- This works on any object that responds to #include? (such as a string or array):
3
+ Use the `include` matcher to specify that a collection includes one or more expected objects. It succeeds if any object of the given collection passes the specified matcher. This works on any object that responds to `#include?` (such as a string or array):
5
4
 
6
5
  ```ruby
7
6
  expect("a string").to include("a")
8
- expect("a string").to include("str")
7
+ expect("a string").to include(/a|str/).twice
9
8
  expect("a string").to include("str", "g")
10
9
  expect("a string").not_to include("foo")
11
10
 
12
11
  expect([1, 2]).to include(1)
13
12
  expect([1, 2]).to include(1, 2)
13
+ expect([1, 2]).to include(a_kind_of(Integer))
14
+ expect([1, 2]).to include(be_odd.and be < 10 )
15
+ expect([1, 2]).to include(be_odd)
16
+ expect([1, 2]).to include(be < 10).at_least(2).times
14
17
  expect([1, 2]).not_to include(17)
15
18
  ```
16
19
 
@@ -21,6 +24,8 @@ Feature: `include` matcher
21
24
  expect(:a => 1, :b => 2).to include(:a, :b)
22
25
  expect(:a => 1, :b => 2).to include(:a => 1)
23
26
  expect(:a => 1, :b => 2).to include(:b => 2, :a => 1)
27
+ expect(:a => 1, :b => 2).to include(match(/b/) => 2)
28
+ expect(:a => 1, :b => 2).to include(match(/b/) => be_even)
24
29
  expect(:a => 1, :b => 2).not_to include(:c)
25
30
  expect(:a => 1, :b => 2).not_to include(:a => 2)
26
31
  expect(:a => 1, :b => 2).not_to include(:c => 3)
@@ -35,11 +40,17 @@ Feature: `include` matcher
35
40
  it { is_expected.to include(7) }
36
41
  it { is_expected.to include(1, 7) }
37
42
  it { is_expected.to include(1, 3, 7) }
43
+ it { is_expected.to include(a_kind_of(Integer)) }
44
+ it { is_expected.to include(be_odd.and be < 10) }
45
+ it { is_expected.to include(be_odd).at_least(:twice) }
46
+ it { is_expected.not_to include(be_even) }
38
47
  it { is_expected.not_to include(17) }
39
48
  it { is_expected.not_to include(43, 100) }
40
49
 
41
50
  # deliberate failures
42
51
  it { is_expected.to include(4) }
52
+ it { is_expected.to include(be_even) }
53
+ it { is_expected.to include(be_odd).at_most(2).times }
43
54
  it { is_expected.not_to include(1) }
44
55
  it { is_expected.not_to include(3) }
45
56
  it { is_expected.not_to include(7) }
@@ -52,14 +63,16 @@ Feature: `include` matcher
52
63
  """
53
64
  When I run `rspec array_include_matcher_spec.rb`
54
65
  Then the output should contain all of these:
55
- | 14 examples, 7 failures |
56
- | expected [1, 3, 7] to include 4 |
57
- | expected [1, 3, 7] not to include 1 |
58
- | expected [1, 3, 7] not to include 3 |
59
- | expected [1, 3, 7] not to include 7 |
60
- | expected [1, 3, 7] not to include 1, 3, and 7 |
61
- | expected [1, 3, 7] to include 1 and 9 |
62
- | expected [1, 3, 7] not to include 1 and 9 |
66
+ | 20 examples, 9 failures |
67
+ | expected [1, 3, 7] to include 4 |
68
+ | expected [1, 3, 7] to include (be even) |
69
+ | expected [1, 3, 7] to include (be odd) at most twice but it is included 3 times |
70
+ | expected [1, 3, 7] not to include 1 |
71
+ | expected [1, 3, 7] not to include 3 |
72
+ | expected [1, 3, 7] not to include 7 |
73
+ | expected [1, 3, 7] not to include 1, 3, and 7 |
74
+ | expected [1, 3, 7] to include 9 |
75
+ | expected [1, 3, 7] not to include 1 |
63
76
 
64
77
  Scenario: string usage
65
78
  Given a file named "string_include_matcher_spec.rb" with:
@@ -67,23 +80,26 @@ Feature: `include` matcher
67
80
  RSpec.describe "a string" do
68
81
  it { is_expected.to include("str") }
69
82
  it { is_expected.to include("a", "str", "ng") }
83
+ it { is_expected.to include(/a|str/).twice }
70
84
  it { is_expected.not_to include("foo") }
71
85
  it { is_expected.not_to include("foo", "bar") }
72
86
 
73
87
  # deliberate failures
74
88
  it { is_expected.to include("foo") }
75
89
  it { is_expected.not_to include("str") }
90
+ it { is_expected.to include("str").at_least(:twice) }
76
91
  it { is_expected.to include("str", "foo") }
77
92
  it { is_expected.not_to include("str", "foo") }
78
93
  end
79
94
  """
80
95
  When I run `rspec string_include_matcher_spec.rb`
81
96
  Then the output should contain all of these:
82
- | 8 examples, 4 failures |
83
- | expected "a string" to include "foo" |
84
- | expected "a string" not to include "str" |
85
- | expected "a string" to include "str" and "foo" |
86
- | expected "a string" not to include "str" and "foo" |
97
+ | 10 examples, 5 failures |
98
+ | expected "a string" to include "foo" |
99
+ | expected "a string" not to include "str" |
100
+ | expected "a string" to include "str" at least twice but it is included once |
101
+ | expected "a string" to include "foo" |
102
+ | expected "a string" not to include "str" |
87
103
 
88
104
  Scenario: hash usage
89
105
  Given a file named "hash_include_matcher_spec.rb" with:
@@ -119,5 +135,46 @@ Feature: `include` matcher
119
135
  end
120
136
  """
121
137
  When I run `rspec hash_include_matcher_spec.rb`
122
- Then the output should contain "13 failure"
138
+ Then the output should contain all of these:
139
+ | 22 examples, 13 failures |
140
+ | expected {:a => 7, :b => 5} not to include :a |
141
+ | expected {:a => 7, :b => 5} not to include :b and :a |
142
+ | expected {:a => 7, :b => 5} not to include {:a => 7} |
143
+ | expected {:a => 7, :b => 5} not to include {:a => 7, :b => 5} |
144
+ | expected {:a => 7, :b => 5} to include :c |
145
+ | expected {:a => 7, :b => 5} to include :c and :d |
146
+ | expected {:a => 7, :b => 5} to include {:d => 2} |
147
+ | expected {:a => 7, :b => 5} to include {:a => 5} |
148
+ | expected {:a => 7, :b => 5} to include {:a => 5, :b => 7} |
149
+ | expected {:a => 7, :b => 5} to include :d |
150
+ | expected {:a => 7, :b => 5} not to include :a |
151
+ | expected {:a => 7, :b => 5} to include {:d => 3} |
152
+ | expected {:a => 7, :b => 5} not to include {:a => 7} |
153
+
154
+ Scenario: counts usage
155
+ Given a file named "include_matcher_with_counts_spec.rb" with:
156
+ """ruby
157
+ RSpec.describe [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] do
158
+ it { is_expected.to include(:b => 2).exactly(1).times }
159
+ it { is_expected.to include(:b => 2).once }
160
+ it { is_expected.to include(have_key(:a)).twice }
161
+ it { is_expected.to include(have_key(:c)).at_least(2).times }
162
+ it { is_expected.to include(have_key(:a)).at_least(:once) }
163
+ it { is_expected.to include(have_key(:c)).at_least(:twice) }
164
+ it { is_expected.to include(have_key(:d)).at_most(:once) }
165
+ it { is_expected.to include(have_key(:b)).at_most(:twice) }
123
166
 
167
+ # deliberate failures
168
+ it { is_expected.not_to include(have_key(:b)).once }
169
+ it { is_expected.not_to include(have_key(:a)).twice }
170
+ it { is_expected.not_to include(have_key(:c)).at_least(2).times }
171
+ it { is_expected.not_to include(have_key(:d)).at_most(:once) }
172
+ end
173
+ """
174
+ When I run `rspec include_matcher_with_counts_spec.rb`
175
+ Then the output should contain all of these:
176
+ | 12 examples, 4 failures |
177
+ | expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :b) once |
178
+ | expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :a) twice |
179
+ | expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :c) at least twice |
180
+ | expected [{:c => 7}, {:a => 1}, {:b => 2}, {:c => 1}, {:a => 3}, {:c => 7}] not to include (have key :d) at most once |
@@ -1,7 +1,7 @@
1
1
  Feature: `match` matcher
2
2
 
3
- The match matcher calls `#match` on the object, passing if `#match` returns a truthy (not
4
- `false` or `nil`) value. Regexp and String both provide a `#match` method.
3
+ The `match` matcher calls `#match` on the object, passing if `#match` returns a truthy (not
4
+ `false` or `nil`) value. `Regexp` and `String` both provide a `#match` method.
5
5
 
6
6
  ```ruby
7
7
  expect("a string").to match(/str/) # passes
@@ -1,15 +1,22 @@
1
1
  Feature: `output` matcher
2
2
 
3
- The `output` matcher provides a way to assert that the has emitted content to either
3
+ The `output` matcher provides a way to assert that the block has emitted content to either
4
4
  `$stdout` or `$stderr`.
5
5
 
6
6
  With no arg, passes if the block outputs `to_stdout` or `to_stderr`. With a string, passes
7
7
  if the blocks outputs that specific string `to_stdout` or `to_stderr`. With a regexp or
8
8
  matcher, passes if the blocks outputs a string `to_stdout` or `to_stderr` that matches.
9
9
 
10
- Note: This matcher works by temporarily replacing `$stdout` or `$stderr`, so it's not able
11
- to intercept stream output that explicitly uses `STDOUT`/`STDERR` or that uses a reference
12
- to `$stdout`/`$stderr` that was stored before the matcher is used.
10
+ Note: `to_stdout` and `to_stderr` work by temporarily replacing `$stdout` or `$stderr`, so
11
+ they're not able to intercept stream output that explicitly uses `STDOUT`/`STDERR` or that
12
+ uses a reference to `$stdout`/`$stderr` that was stored before the matcher is used.
13
+
14
+ To capture output from any spawned subprocess as well, use `to_stdout_from_any_process`
15
+ or `to_stderr_from_any_process`. Output from any process that inherits the main process's
16
+ corresponding standard stream will be captured.
17
+
18
+ Note: `to_stdout_from_any_process` and `to_stderr_from_any_process` use tempfiles to
19
+ capture output, and are thus significantly (~30x) slower than `to_stdout` and `to_stderr`.
13
20
 
14
21
  Scenario: output_to_stdout matcher
15
22
  Given a file named "output_to_stdout_spec.rb" with:
@@ -66,3 +73,59 @@ Feature: `output` matcher
66
73
  | expected block to output "bar" to stderr, but output "foo\n" |
67
74
  | expected block to output "foo" to stderr, but output nothing |
68
75
  | expected block to output /bar/ to stderr, but output "foo\n" |
76
+
77
+ Scenario: output_to_stdout_from_any_process matcher
78
+ Given a file named "output_to_stdout_from_any_process_spec.rb" with:
79
+ """ruby
80
+ RSpec.describe "output.to_stdout_from_any_process matcher" do
81
+ specify { expect { system('printf foo') }.to output.to_stdout_from_any_process }
82
+ specify { expect { system('printf foo') }.to output("foo").to_stdout_from_any_process }
83
+ specify { expect { system('printf foo') }.to output(/foo/).to_stdout_from_any_process }
84
+ specify { expect { }.to_not output.to_stdout_from_any_process }
85
+ specify { expect { system('printf foo') }.to_not output("bar").to_stdout_from_any_process }
86
+ specify { expect { system('printf foo') }.to_not output(/bar/).to_stdout_from_any_process }
87
+
88
+ # deliberate failures
89
+ specify { expect { }.to output.to_stdout_from_any_process }
90
+ specify { expect { }.to output('foo').to_stdout_from_any_process }
91
+ specify { expect { system('printf foo') }.to_not output.to_stdout_from_any_process }
92
+ specify { expect { system('printf foo') }.to output('bar').to_stdout_from_any_process }
93
+ specify { expect { system('printf foo') }.to output(/bar/).to_stdout_from_any_process }
94
+ end
95
+ """
96
+ When I run `rspec output_to_stdout_from_any_process_spec.rb`
97
+ Then the output should contain all of these:
98
+ | 11 examples, 5 failures |
99
+ | expected block to output to stdout, but did not |
100
+ | expected block to not output to stdout, but output "foo" |
101
+ | expected block to output "bar" to stdout, but output "foo" |
102
+ | expected block to output "foo" to stdout, but output nothing |
103
+ | expected block to output /bar/ to stdout, but output "foo" |
104
+
105
+ Scenario: output_to_stderr_from_any_process matcher
106
+ Given a file named "output_to_stderr_from_any_process_spec.rb" with:
107
+ """ruby
108
+ RSpec.describe "output.to_stderr_from_any_process matcher" do
109
+ specify { expect { system('printf foo 1>&2') }.to output.to_stderr_from_any_process }
110
+ specify { expect { system('printf foo 1>&2') }.to output("foo").to_stderr_from_any_process }
111
+ specify { expect { system('printf foo 1>&2') }.to output(/foo/).to_stderr_from_any_process }
112
+ specify { expect { }.to_not output.to_stderr_from_any_process }
113
+ specify { expect { system('printf foo 1>&2') }.to_not output("bar").to_stderr_from_any_process }
114
+ specify { expect { system('printf foo 1>&2') }.to_not output(/bar/).to_stderr_from_any_process }
115
+
116
+ # deliberate failures
117
+ specify { expect { }.to output.to_stderr_from_any_process }
118
+ specify { expect { }.to output('foo').to_stderr_from_any_process }
119
+ specify { expect { system('printf foo 1>&2') }.to_not output.to_stderr_from_any_process }
120
+ specify { expect { system('printf foo 1>&2') }.to output('bar').to_stderr_from_any_process }
121
+ specify { expect { system('printf foo 1>&2') }.to output(/bar/).to_stderr_from_any_process }
122
+ end
123
+ """
124
+ When I run `rspec output_to_stderr_from_any_process_spec.rb`
125
+ Then the output should contain all of these:
126
+ | 11 examples, 5 failures |
127
+ | expected block to output to stderr, but did not |
128
+ | expected block to not output to stderr, but output "foo" |
129
+ | expected block to output "bar" to stderr, but output "foo" |
130
+ | expected block to output "foo" to stderr, but output nothing |
131
+ | expected block to output /bar/ to stderr, but output "foo" |
@@ -39,7 +39,7 @@ Feature: Predicate matchers
39
39
 
40
40
  In either case, RSpec provides nice, clear error messages, such as:
41
41
 
42
- `expected zero? to return true, got false`
42
+ `expected zero? to be truthy, got false`
43
43
 
44
44
  Calling private methods will also fail:
45
45
 
@@ -47,7 +47,7 @@ Feature: Predicate matchers
47
47
 
48
48
  Any arguments passed to the matcher will be passed on to the predicate method.
49
49
 
50
- Scenario: should be_zero (based on Fixnum#zero?)
50
+ Scenario: should be_zero (based on Integer#zero?)
51
51
  Given a file named "should_be_zero_spec.rb" with:
52
52
  """ruby
53
53
  RSpec.describe 0 do
@@ -60,7 +60,7 @@ Feature: Predicate matchers
60
60
  """
61
61
  When I run `rspec should_be_zero_spec.rb`
62
62
  Then the output should contain "2 examples, 1 failure"
63
- And the output should contain "expected `7.zero?` to return true, got false"
63
+ And the output should contain "expected `7.zero?` to be truthy, got false"
64
64
 
65
65
  Scenario: should_not be_empty (based on Array#empty?)
66
66
  Given a file named "should_not_be_empty_spec.rb" with:
@@ -75,7 +75,7 @@ Feature: Predicate matchers
75
75
  """
76
76
  When I run `rspec should_not_be_empty_spec.rb`
77
77
  Then the output should contain "2 examples, 1 failure"
78
- And the output should contain "expected `[].empty?` to return false, got true"
78
+ And the output should contain "expected `[].empty?` to be falsey, got true"
79
79
 
80
80
  Scenario: should have_key (based on Hash#has_key?)
81
81
  Given a file named "should_have_key_spec.rb" with:
@@ -88,37 +88,38 @@ Feature: Predicate matchers
88
88
  """
89
89
  When I run `rspec should_have_key_spec.rb`
90
90
  Then the output should contain "2 examples, 1 failure"
91
- And the output should contain "expected #has_key?(:bar) to return true, got false"
91
+ And the output should contain "expected `{:foo=>7}.has_key?(:bar)` to be truthy, got false"
92
92
 
93
93
  Scenario: should_not have_all_string_keys (based on custom #has_all_string_keys? method)
94
94
  Given a file named "should_not_have_all_string_keys_spec.rb" with:
95
95
  """ruby
96
- class Hash
97
- def has_all_string_keys?
98
- keys.all? { |k| String === k }
96
+ class Float
97
+ def has_decimals?
98
+ round != self
99
99
  end
100
100
  end
101
101
 
102
- RSpec.describe Hash do
103
- context 'with symbol keys' do
104
- subject { { :foo => 7, :bar => 5 } }
105
- it { is_expected.not_to have_all_string_keys }
102
+ RSpec.describe Float do
103
+ context 'with decimals' do
104
+ subject { 4.2 }
105
+
106
+ it { is_expected.to have_decimals }
106
107
  end
107
108
 
108
- context 'with string keys' do
109
- subject { { 'foo' => 7, 'bar' => 5 } }
110
- it { is_expected.not_to have_all_string_keys } # deliberate failure
109
+ context 'with no decimals' do
110
+ subject { 42.0 }
111
+ it { is_expected.to have_decimals } # deliberate failure
111
112
  end
112
113
  end
113
114
  """
114
115
  When I run `rspec should_not_have_all_string_keys_spec.rb`
115
116
  Then the output should contain "2 examples, 1 failure"
116
- And the output should contain "expected #has_all_string_keys? to return false, got true"
117
+ And the output should contain "expected `42.0.has_decimals?` to be truthy, got false"
117
118
 
118
119
  Scenario: matcher arguments are passed on to the predicate method
119
120
  Given a file named "predicate_matcher_argument_spec.rb" with:
120
121
  """ruby
121
- class Fixnum
122
+ class Integer
122
123
  def multiple_of?(x)
123
124
  (self % x).zero?
124
125
  end
@@ -135,8 +136,44 @@ Feature: Predicate matchers
135
136
  """
136
137
  When I run `rspec predicate_matcher_argument_spec.rb`
137
138
  Then the output should contain "4 examples, 2 failures"
138
- And the output should contain "expected `12.multiple_of?(4)` to return false, got true"
139
- And the output should contain "expected `12.multiple_of?(5)` to return true, got false"
139
+ And the output should contain "expected `12.multiple_of?(4)` to be falsey, got true"
140
+ And the output should contain "expected `12.multiple_of?(5)` to be truthy, got false"
141
+
142
+ Scenario: the config `strict_predicate_matchers` impacts matching of results other than `true` and `false`
143
+ Given a file named "strict_or_not.rb" with:
144
+ """ruby
145
+ class StrangeResult
146
+ def has_strange_result?
147
+ 42
148
+ end
149
+ end
150
+
151
+ RSpec.describe StrangeResult do
152
+ subject { StrangeResult.new }
153
+
154
+ before do
155
+ RSpec.configure do |config|
156
+ config.expect_with :rspec do |expectations|
157
+ expectations.strict_predicate_matchers = strict
158
+ end
159
+ end
160
+ end
161
+
162
+ context 'with non-strict matchers (default)' do
163
+ let(:strict) { false }
164
+ it { is_expected.to have_strange_result }
165
+ end
166
+
167
+ context 'with strict matchers' do
168
+ let(:strict) { true }
169
+ # deliberate failure
170
+ it { is_expected.to have_strange_result }
171
+ end
172
+ end
173
+ """
174
+ When I run `rspec strict_or_not.rb`
175
+ Then the output should contain "2 examples, 1 failure"
176
+ And the output should contain "has_strange_result?` to return true, got 42"
140
177
 
141
178
  Scenario: calling private method with be_predicate causes error
142
179
  Given a file named "attempting_to_match_private_method_spec.rb" with:
@@ -26,6 +26,7 @@ Feature: `raise_error` matcher
26
26
  expect { raise "oops" }.to raise_error(/op/)
27
27
  expect { raise "oops" }.to raise_error(RuntimeError, "oops")
28
28
  expect { raise "oops" }.to raise_error(RuntimeError, /op/)
29
+ expect { raise "oops" }.to raise_error(an_instance_of(RuntimeError).and having_attributes(message: "oops"))
29
30
  ```
30
31
 
31
32
  Scenario: expect any error
@@ -91,7 +92,7 @@ Feature: `raise_error` matcher
91
92
  When I run `rspec example_spec.rb`
92
93
  Then the example should pass
93
94
 
94
- Scenario: match type + message with string
95
+ Scenario: match class + message with string
95
96
  Given a file named "example_spec.rb" with:
96
97
  """ruby
97
98
  RSpec.describe "matching error message with string" do
@@ -104,7 +105,7 @@ Feature: `raise_error` matcher
104
105
  When I run `rspec example_spec.rb`
105
106
  Then the example should pass
106
107
 
107
- Scenario: match type + message with regexp
108
+ Scenario: match class + message with regexp
108
109
  Given a file named "example_spec.rb" with:
109
110
  """ruby
110
111
  RSpec.describe "matching error message with regex" do
@@ -131,6 +132,19 @@ Feature: `raise_error` matcher
131
132
  When I run `rspec example_spec`
132
133
  Then the example should pass
133
134
 
135
+ Scenario: set expectations on error object with chained matchers
136
+ Given a file named "example_spec" with:
137
+ """
138
+ RSpec.describe "composing matchers" do
139
+ it "raises StandardError" do
140
+ expect { raise StandardError, "my message" }.
141
+ to raise_error(an_instance_of(StandardError).and having_attributes({"message" => "my message"}))
142
+ end
143
+ end
144
+ """
145
+ When I run `rspec example_spec`
146
+ Then the example should pass
147
+
134
148
  Scenario: expect no error at all
135
149
  Given a file named "example_spec" with:
136
150
  """
@@ -1,6 +1,6 @@
1
1
  Feature: `respond_to` matcher
2
2
 
3
- Use the respond_to matcher to specify details of an object's interface. In its most basic form:
3
+ Use the `respond_to` matcher to specify details of an object's interface. In its most basic form:
4
4
 
5
5
  ```ruby
6
6
  expect(obj).to respond_to(:foo) # pass if obj.respond_to?(:foo)
@@ -19,10 +19,21 @@ Feature: `respond_to` matcher
19
19
  ```ruby
20
20
  expect(obj).to respond_to(:foo).with(1).argument
21
21
  expect(obj).to respond_to(:bar).with(2).arguments
22
+ expect(obj).to respond_to(:baz).with(1..2).arguments
23
+ expect(obj).to respond_to(:xyz).with_unlimited_arguments
22
24
  ```
23
25
 
24
- Note that this matcher relies entirely upon #respond_to?. If an object dynamically responds
25
- to a message via #method_missing, but does not indicate this via #respond_to?, then this
26
+ If your Ruby version supports keyword arguments, you can specify a list of keywords accepted
27
+ by the method.
28
+
29
+ ```ruby
30
+ expect(obj).to respond_to(:foo).with_keywords(:ichi, :ni)
31
+ expect(obj).to respond_to(:bar).with(2).arguments.and_keywords(:san, :yon)
32
+ expect(obj).to respond_to(:baz).with_arbitrary_keywords
33
+ ```
34
+
35
+ Note that this matcher relies entirely upon `#respond_to?`. If an object dynamically responds
36
+ to a message via `#method_missing`, but does not indicate this via `#respond_to?`, then this
26
37
  matcher will give you false results.
27
38
 
28
39
  Scenario: basic usage
@@ -81,3 +92,180 @@ Feature: `respond_to` matcher
81
92
  | expected 7 not to respond to :zero? with 0 arguments |
82
93
  | expected 7 to respond to :between? with 7 arguments |
83
94
  | expected 7 not to respond to :between? with 2 arguments |
95
+
96
+ @skip-when-splat-args-unsupported
97
+ Scenario: specify arguments range
98
+ Given a file named "respond_to_matcher_argument_range_checking_spec.rb" with:
99
+ """ruby
100
+ class MyClass
101
+ def build(name, options = {})
102
+ end
103
+
104
+ def inspect
105
+ 'my_object'
106
+ end
107
+ end
108
+
109
+ RSpec.describe MyClass do
110
+ it { is_expected.to respond_to(:build).with(1..2).arguments }
111
+ it { is_expected.not_to respond_to(:build).with(0..1).arguments }
112
+ it { is_expected.not_to respond_to(:build).with(2..3).arguments }
113
+ it { is_expected.not_to respond_to(:build).with(0..3).arguments }
114
+
115
+ # deliberate failures
116
+ it { is_expected.not_to respond_to(:build).with(1..2).arguments }
117
+ it { is_expected.to respond_to(:build).with(0..1).arguments }
118
+ it { is_expected.to respond_to(:build).with(2..3).arguments }
119
+ it { is_expected.to respond_to(:build).with(0..3).arguments }
120
+ end
121
+ """
122
+ When I run `rspec respond_to_matcher_argument_range_checking_spec.rb`
123
+ Then the output should contain all of these:
124
+ | 8 examples, 4 failures |
125
+ | expected my_object not to respond to :build with 1..2 arguments |
126
+ | expected my_object to respond to :build with 0..1 arguments |
127
+ | expected my_object to respond to :build with 2..3 arguments |
128
+ | expected my_object to respond to :build with 0..3 arguments |
129
+
130
+ @skip-when-splat-args-unsupported
131
+ Scenario: specify unlimited arguments
132
+ Given a file named "respond_to_matcher_unlimited_argument_checking_spec.rb" with:
133
+ """ruby
134
+ class MyClass
135
+ def greet(message = 'Hello', *people)
136
+ end
137
+
138
+ def hail(person)
139
+ end
140
+
141
+ def inspect
142
+ 'my_object'
143
+ end
144
+ end
145
+
146
+ RSpec.describe MyClass do
147
+ it { is_expected.to respond_to(:greet).with_unlimited_arguments }
148
+ it { is_expected.to respond_to(:greet).with(1).argument.and_unlimited_arguments }
149
+ it { is_expected.not_to respond_to(:hail).with_unlimited_arguments }
150
+ it { is_expected.not_to respond_to(:hail).with(1).argument.and_unlimited_arguments }
151
+
152
+ # deliberate failures
153
+ it { is_expected.not_to respond_to(:greet).with_unlimited_arguments }
154
+ it { is_expected.not_to respond_to(:greet).with(1).argument.and_unlimited_arguments }
155
+ it { is_expected.to respond_to(:hail).with_unlimited_arguments }
156
+ it { is_expected.to respond_to(:hail).with(1).argument.and_unlimited_arguments }
157
+ end
158
+ """
159
+ When I run `rspec respond_to_matcher_unlimited_argument_checking_spec.rb`
160
+ Then the output should contain all of these:
161
+ | 8 examples, 4 failures |
162
+ | expected my_object not to respond to :greet with unlimited arguments |
163
+ | expected my_object not to respond to :greet with 1 argument and unlimited arguments |
164
+ | expected my_object to respond to :hail with unlimited arguments |
165
+ | expected my_object to respond to :hail with 1 argument and unlimited arguments |
166
+
167
+ @skip-when-keyword-args-unsupported
168
+ Scenario: specify keywords
169
+ Given a file named "respond_to_matcher_keyword_checking_spec.rb" with:
170
+ """ruby
171
+ class MyClass
172
+ def find(name = 'id', limit: 1_000, offset: 0)
173
+ []
174
+ end
175
+
176
+ def inspect
177
+ 'my_object'
178
+ end
179
+ end
180
+
181
+ RSpec.describe MyClass do
182
+ it { is_expected.to respond_to(:find).with_keywords(:limit, :offset) }
183
+ it { is_expected.to respond_to(:find).with(1).argument.and_keywords(:limit, :offset) }
184
+
185
+ it { is_expected.not_to respond_to(:find).with_keywords(:limit, :offset, :page) }
186
+ it { is_expected.not_to respond_to(:find).with(1).argument.and_keywords(:limit, :offset, :page) }
187
+
188
+ # deliberate failures
189
+ it { is_expected.to respond_to(:find).with_keywords(:limit, :offset, :page) }
190
+ it { is_expected.to respond_to(:find).with(1).argument.and_keywords(:limit, :offset, :page) }
191
+
192
+ it { is_expected.not_to respond_to(:find).with_keywords(:limit, :offset) }
193
+ it { is_expected.not_to respond_to(:find).with(1).argument.and_keywords(:limit, :offset) }
194
+ end
195
+ """
196
+ When I run `rspec respond_to_matcher_keyword_checking_spec.rb`
197
+ Then the output should contain all of these:
198
+ | 8 examples, 4 failures |
199
+ | expected my_object to respond to :find with keywords :limit, :offset, and :page |
200
+ | expected my_object to respond to :find with 1 argument and keywords :limit, :offset, and :page |
201
+ | expected my_object not to respond to :find with keywords :limit and :offset |
202
+ | expected my_object not to respond to :find with 1 argument and keywords :limit and :offset |
203
+
204
+ @skip-when-keyword-args-unsupported
205
+ Scenario: specify any keywords
206
+ Given a file named "respond_to_matcher_any_keywords_checking_spec.rb" with:
207
+ """ruby
208
+ class MyClass
209
+ def build(name: 'object', **opts)
210
+ end
211
+
212
+ def create(name: 'object', type: String)
213
+ end
214
+
215
+ def inspect
216
+ 'my_object'
217
+ end
218
+ end
219
+
220
+ RSpec.describe MyClass do
221
+ it { is_expected.to respond_to(:build).with_any_keywords }
222
+ it { is_expected.to respond_to(:build).with_keywords(:name).and_any_keywords }
223
+ it { is_expected.not_to respond_to(:create).with_any_keywords }
224
+ it { is_expected.not_to respond_to(:create).with_keywords(:name).and_any_keywords }
225
+
226
+ # deliberate failures
227
+ it { is_expected.not_to respond_to(:build).with_any_keywords }
228
+ it { is_expected.not_to respond_to(:build).with_keywords(:name).and_any_keywords }
229
+ it { is_expected.to respond_to(:create).with_any_keywords }
230
+ it { is_expected.to respond_to(:create).with_keywords(:name).and_any_keywords }
231
+ end
232
+ """
233
+ When I run `rspec respond_to_matcher_any_keywords_checking_spec.rb`
234
+ Then the output should contain all of these:
235
+ | 8 examples, 4 failures |
236
+ | expected my_object not to respond to :build with any keywords |
237
+ | expected my_object not to respond to :build with keyword :name and any keywords |
238
+ | expected my_object to respond to :create with any keywords |
239
+ | expected my_object to respond to :create with keyword :name and any keywords |
240
+
241
+ @skip-when-required-keyword-args-unsupported
242
+ Scenario: specify required keywords
243
+ Given a file named "respond_to_matcher_required_keyword_checking_spec.rb" with:
244
+ """ruby
245
+ class MyClass
246
+ def plant(seed:, fertilizer: nil, water: 'daily')
247
+ []
248
+ end
249
+
250
+ def inspect
251
+ 'my_object'
252
+ end
253
+ end
254
+
255
+ RSpec.describe MyClass do
256
+ it { is_expected.to respond_to(:plant).with_keywords(:seed) }
257
+ it { is_expected.to respond_to(:plant).with_keywords(:seed, :fertilizer, :water) }
258
+ it { is_expected.not_to respond_to(:plant).with_keywords(:fertilizer, :water) }
259
+
260
+ # deliberate failures
261
+ it { is_expected.not_to respond_to(:plant).with_keywords(:seed) }
262
+ it { is_expected.not_to respond_to(:plant).with_keywords(:seed, :fertilizer, :water) }
263
+ it { is_expected.to respond_to(:plant).with_keywords(:fertilizer, :water) }
264
+ end
265
+ """
266
+ When I run `rspec respond_to_matcher_required_keyword_checking_spec.rb`
267
+ Then the output should contain all of these:
268
+ | 6 examples, 3 failures |
269
+ | expected my_object not to respond to :plant with keyword :seed |
270
+ | expected my_object not to respond to :plant with keywords :seed, :fertilizer, and :water |
271
+ | expected my_object to respond to :plant with keywords :fertilizer and :water |