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
@@ -2,29 +2,51 @@ module RSpec
2
2
  module Mocks
3
3
  # @private
4
4
  class Proxy
5
+ # @private
5
6
  SpecificMessage = Struct.new(:object, :message, :args) do
6
7
  def ==(expectation)
7
8
  expectation.orig_object == object && expectation.matches?(message, *args)
8
9
  end
9
10
  end
10
11
 
12
+ unless defined?(Mutex)
13
+ Support.require_rspec_support 'mutex'
14
+ Mutex = Support::Mutex
15
+ end
16
+
11
17
  # @private
12
18
  def ensure_implemented(*_args)
13
19
  # noop for basic proxies, see VerifyingProxy for behaviour.
14
20
  end
15
21
 
16
22
  # @private
17
- def initialize(object, order_group, name=nil, options={})
23
+ def initialize(object, order_group, options={})
24
+ ensure_can_be_proxied!(object)
25
+
18
26
  @object = object
19
27
  @order_group = order_group
20
- @name = name
21
- @error_generator = ErrorGenerator.new(object, name)
28
+ @error_generator = ErrorGenerator.new(object)
22
29
  @messages_received = []
30
+ @messages_received_mutex = Mutex.new
23
31
  @options = options
24
32
  @null_object = false
25
33
  @method_doubles = Hash.new { |h, k| h[k] = MethodDouble.new(@object, k, self) }
26
34
  end
27
35
 
36
+ # @private
37
+ def ensure_can_be_proxied!(object)
38
+ return unless object.is_a?(Symbol) || object.frozen?
39
+ return if object.nil?
40
+
41
+ msg = "Cannot proxy frozen objects"
42
+ if Symbol === object
43
+ msg << ". Symbols such as #{object} cannot be mocked or stubbed."
44
+ else
45
+ msg << ", rspec-mocks relies on proxies for method stubbing and expectations."
46
+ end
47
+ raise ArgumentError, msg
48
+ end
49
+
28
50
  # @private
29
51
  attr_reader :object
30
52
 
@@ -46,8 +68,10 @@ module RSpec
46
68
  nil
47
69
  end
48
70
 
71
+ DEFAULT_MESSAGE_EXPECTATION_OPTS = {}.freeze
72
+
49
73
  # @private
50
- def add_message_expectation(method_name, opts={}, &block)
74
+ def add_message_expectation(method_name, opts=DEFAULT_MESSAGE_EXPECTATION_OPTS, &block)
51
75
  location = opts.fetch(:expected_from) { CallerFilter.first_non_rspec_line }
52
76
  meth_double = method_double_for(method_name)
53
77
 
@@ -88,20 +112,30 @@ module RSpec
88
112
  @error_generator.raise_expectation_on_unstubbed_method(expected_method_name)
89
113
  end
90
114
 
91
- @messages_received.each do |(actual_method_name, args, _)|
92
- next unless expectation.matches?(actual_method_name, *args)
115
+ @messages_received_mutex.synchronize do
116
+ @messages_received.each do |(actual_method_name, args, received_block)|
117
+ next unless expectation.matches?(actual_method_name, *args)
93
118
 
94
- expectation.safe_invoke(nil)
95
- block.call(*args) if block
119
+ expectation.safe_invoke(nil)
120
+ block.call(*args, &received_block) if block
121
+ end
96
122
  end
97
123
  end
98
124
 
99
125
  # @private
100
126
  def check_for_unexpected_arguments(expectation)
101
- @messages_received.each do |(method_name, args, _)|
102
- next unless expectation.matches_name_but_not_args(method_name, *args)
127
+ @messages_received_mutex.synchronize do
128
+ return if @messages_received.empty?
129
+
130
+ return if @messages_received.any? { |method_name, args, _| expectation.matches?(method_name, *args) }
131
+
132
+ name_but_not_args, others = @messages_received.partition do |(method_name, args, _)|
133
+ expectation.matches_name_but_not_args(method_name, *args)
134
+ end
135
+
136
+ return if name_but_not_args.empty? && !others.empty?
103
137
 
104
- raise_unexpected_message_args_error(expectation, *args)
138
+ expectation.raise_unexpected_message_args_error(name_but_not_args.map { |args| args[1] })
105
139
  end
106
140
  end
107
141
 
@@ -133,12 +167,23 @@ module RSpec
133
167
 
134
168
  # @private
135
169
  def reset
136
- @messages_received.clear
170
+ @messages_received_mutex.synchronize do
171
+ @messages_received.clear
172
+ end
137
173
  end
138
174
 
139
175
  # @private
140
176
  def received_message?(method_name, *args, &block)
141
- @messages_received.any? { |array| array == [method_name, args, block] }
177
+ @messages_received_mutex.synchronize do
178
+ @messages_received.any? { |array| array == [method_name, args, block] }
179
+ end
180
+ end
181
+
182
+ # @private
183
+ def messages_arg_list
184
+ @messages_received_mutex.synchronize do
185
+ @messages_received.map { |_, args, _| args }
186
+ end
142
187
  end
143
188
 
144
189
  # @private
@@ -149,7 +194,9 @@ module RSpec
149
194
  # @private
150
195
  def record_message_received(message, *args, &block)
151
196
  @order_group.invoked SpecificMessage.new(object, message, args)
152
- @messages_received << [message, args, block]
197
+ @messages_received_mutex.synchronize do
198
+ @messages_received << [message, args, block]
199
+ end
153
200
  end
154
201
 
155
202
  # @private
@@ -166,36 +213,33 @@ module RSpec
166
213
  end
167
214
  stub.invoke(nil, *args, &block)
168
215
  elsif expectation
216
+ expectation.unadvise(messages_arg_list)
169
217
  expectation.invoke(stub, *args, &block)
170
218
  elsif (expectation = find_almost_matching_expectation(message, *args))
171
219
  expectation.advise(*args) if null_object? unless expectation.expected_messages_received?
172
220
 
173
221
  if null_object? || !has_negative_expectation?(message)
174
- raise_unexpected_message_args_error(expectation, *args)
222
+ expectation.raise_unexpected_message_args_error([args])
175
223
  end
176
224
  elsif (stub = find_almost_matching_stub(message, *args))
177
225
  stub.advise(*args)
178
- raise_missing_default_stub_error(stub, *args)
226
+ raise_missing_default_stub_error(stub, [args])
179
227
  elsif Class === @object
180
228
  @object.superclass.__send__(message, *args, &block)
181
229
  else
182
230
  @object.__send__(:method_missing, message, *args, &block)
183
231
  end
184
232
  end
233
+ ruby2_keywords :message_received if respond_to?(:ruby2_keywords, true)
185
234
 
186
235
  # @private
187
- def raise_unexpected_message_error(method_name, *args)
188
- @error_generator.raise_unexpected_message_error method_name, *args
236
+ def raise_unexpected_message_error(method_name, args)
237
+ @error_generator.raise_unexpected_message_error method_name, args
189
238
  end
190
239
 
191
240
  # @private
192
- def raise_unexpected_message_args_error(expectation, *args)
193
- @error_generator.raise_unexpected_message_args_error(expectation, *args)
194
- end
195
-
196
- # @private
197
- def raise_missing_default_stub_error(expectation, *args)
198
- @error_generator.raise_missing_default_stub_error(expectation, *args)
241
+ def raise_missing_default_stub_error(expectation, args_for_multiple_calls)
242
+ @error_generator.raise_missing_default_stub_error(expectation, args_for_multiple_calls)
199
243
  end
200
244
 
201
245
  # @private
@@ -220,6 +264,11 @@ module RSpec
220
264
  end
221
265
  end
222
266
 
267
+ # @private
268
+ def method_double_if_exists_for_message(message)
269
+ method_double_for(message) if @method_doubles.key?(message.to_sym)
270
+ end
271
+
223
272
  private
224
273
 
225
274
  def method_double_for(message)
@@ -231,12 +280,14 @@ module RSpec
231
280
  expectation.matches?(method_name, *args)
232
281
  end
233
282
  end
283
+ ruby2_keywords :find_matching_expectation if respond_to?(:ruby2_keywords, true)
234
284
 
235
285
  def find_almost_matching_expectation(method_name, *args)
236
286
  find_best_matching_expectation_for(method_name) do |expectation|
237
287
  expectation.matches_name_but_not_args(method_name, *args)
238
288
  end
239
289
  end
290
+ ruby2_keywords :find_almost_matching_expectation if respond_to?(:ruby2_keywords, true)
240
291
 
241
292
  def find_best_matching_expectation_for(method_name)
242
293
  first_match = nil
@@ -253,10 +304,12 @@ module RSpec
253
304
  def find_matching_method_stub(method_name, *args)
254
305
  method_double_for(method_name).stubs.find { |stub| stub.matches?(method_name, *args) }
255
306
  end
307
+ ruby2_keywords :find_matching_method_stub if respond_to?(:ruby2_keywords, true)
256
308
 
257
309
  def find_almost_matching_stub(method_name, *args)
258
310
  method_double_for(method_name).stubs.find { |stub| stub.matches_name_but_not_args(method_name, *args) }
259
311
  end
312
+ ruby2_keywords :find_almost_matching_stub if respond_to?(:ruby2_keywords, true)
260
313
  end
261
314
 
262
315
  # @private
@@ -312,6 +365,7 @@ module RSpec
312
365
  end
313
366
  super
314
367
  end
368
+ ruby2_keywords :message_received if respond_to?(:ruby2_keywords, true)
315
369
 
316
370
  private
317
371
 
@@ -363,27 +417,43 @@ module RSpec
363
417
 
364
418
  return super unless unbound_method
365
419
  unbound_method.bind(object)
420
+ # :nocov:
421
+ rescue TypeError
422
+ if RUBY_VERSION == '1.8.7'
423
+ # In MRI 1.8.7, a singleton method on a class cannot be rebound to its subclass
424
+ if unbound_method && unbound_method.owner.ancestors.first != unbound_method.owner
425
+ # This is a singleton method; we can't do anything with it
426
+ # But we can work around this using a different implementation
427
+ double = method_double_from_ancestor_for(message)
428
+ return object.method(double.method_stasher.stashed_method_name)
429
+ end
430
+ end
431
+ raise
432
+ # :nocov:
366
433
  end
367
434
 
368
435
  protected
369
436
 
370
437
  def original_unbound_method_handle_from_ancestor_for(message)
371
- method_double = @method_doubles.fetch(message) do
438
+ double = method_double_from_ancestor_for(message)
439
+ double && double.original_method.unbind
440
+ end
441
+
442
+ def method_double_from_ancestor_for(message)
443
+ @method_doubles.fetch(message) do
372
444
  # The fact that there is no method double for this message indicates
373
445
  # that it has not been redefined by rspec-mocks. We need to continue
374
446
  # looking up the ancestor chain.
375
447
  return superclass_proxy &&
376
- superclass_proxy.original_unbound_method_handle_from_ancestor_for(message)
448
+ superclass_proxy.method_double_from_ancestor_for(message)
377
449
  end
378
-
379
- method_double.original_method.unbind
380
450
  end
381
451
 
382
452
  def superclass_proxy
383
453
  return @superclass_proxy if defined?(@superclass_proxy)
384
454
 
385
455
  if (superclass = object.superclass)
386
- @superclass_proxy = @source_space.proxy_for(superclass)
456
+ @superclass_proxy = @source_space.superclass_proxy_for(superclass)
387
457
  else
388
458
  @superclass_proxy = nil
389
459
  end
@@ -398,33 +468,57 @@ module RSpec
398
468
  # @private
399
469
  class ProxyForNil < PartialDoubleProxy
400
470
  def initialize(order_group)
401
- @warn_about_expectations = true
471
+ set_expectation_behavior
402
472
  super(nil, order_group)
403
473
  end
404
474
 
475
+ attr_accessor :disallow_expectations
405
476
  attr_accessor :warn_about_expectations
406
- alias warn_about_expectations? warn_about_expectations
407
477
 
408
478
  def add_message_expectation(method_name, opts={}, &block)
409
- warn(method_name) if warn_about_expectations?
410
- super
411
- end
412
-
413
- def add_negative_message_expectation(location, method_name, &implementation)
414
- warn(method_name) if warn_about_expectations?
479
+ warn_or_raise!(method_name)
415
480
  super
416
481
  end
417
482
 
418
483
  def add_stub(method_name, opts={}, &implementation)
419
- warn(method_name) if warn_about_expectations?
484
+ warn_or_raise!(method_name)
420
485
  super
421
486
  end
422
487
 
423
488
  private
424
489
 
490
+ def set_expectation_behavior
491
+ case RSpec::Mocks.configuration.allow_message_expectations_on_nil
492
+ when false
493
+ @warn_about_expectations = false
494
+ @disallow_expectations = true
495
+ when true
496
+ @warn_about_expectations = false
497
+ @disallow_expectations = false
498
+ else
499
+ @warn_about_expectations = true
500
+ @disallow_expectations = false
501
+ end
502
+ end
503
+
504
+ def warn_or_raise!(method_name)
505
+ # This method intentionally swallows the message when
506
+ # neither disallow_expectations nor warn_about_expectations
507
+ # are set to true.
508
+ if disallow_expectations
509
+ raise_error(method_name)
510
+ elsif warn_about_expectations
511
+ warn(method_name)
512
+ end
513
+ end
514
+
425
515
  def warn(method_name)
426
- source = CallerFilter.first_non_rspec_line
427
- Kernel.warn("An expectation of :#{method_name} was set on nil. Called from #{source}. Use allow_message_expectations_on_nil to disable warnings.")
516
+ warning_msg = @error_generator.expectation_on_nil_message(method_name)
517
+ RSpec.warning(warning_msg)
518
+ end
519
+
520
+ def raise_error(method_name)
521
+ @error_generator.raise_expectation_on_nil_error(method_name)
428
522
  end
429
523
  end
430
524
  end
@@ -1,3 +1,5 @@
1
+ RSpec::Support.require_rspec_support 'reentrant_mutex'
2
+
1
3
  module RSpec
2
4
  module Mocks
3
5
  # @private
@@ -35,6 +37,10 @@ module RSpec
35
37
  false
36
38
  end
37
39
 
40
+ def superclass_proxy_for(*_args)
41
+ raise_lifecycle_message
42
+ end
43
+
38
44
  def new_scope
39
45
  Space.new
40
46
  end
@@ -109,6 +115,13 @@ module RSpec
109
115
  end
110
116
  end
111
117
 
118
+ def superclass_proxy_for(klass)
119
+ proxy_mutex.synchronize do
120
+ id = id_for(klass)
121
+ proxies.fetch(id) { superclass_proxy_not_found_for(id, klass) }
122
+ end
123
+ end
124
+
112
125
  alias ensure_registered proxy_for
113
126
 
114
127
  def registered?(object)
@@ -131,18 +144,8 @@ module RSpec
131
144
 
132
145
  private
133
146
 
134
- # We don't want to depend on the stdlib ourselves, but if the user is
135
- # using threads then a Mutex will be available to us. If not, we don't
136
- # need to synchronize anyway.
137
147
  def new_mutex
138
- defined?(::Mutex) ? ::Mutex.new : FakeMutex
139
- end
140
-
141
- # @private
142
- module FakeMutex
143
- def self.synchronize
144
- yield
145
- end
148
+ Support::ReentrantMutex.new
146
149
  end
147
150
 
148
151
  def proxy_not_found_for(id, object)
@@ -150,11 +153,7 @@ module RSpec
150
153
  when NilClass then ProxyForNil.new(@expectation_ordering)
151
154
  when TestDouble then object.__build_mock_proxy_unless_expired(@expectation_ordering)
152
155
  when Class
153
- if RSpec::Mocks.configuration.verify_partial_doubles?
154
- VerifyingPartialClassDoubleProxy.new(self, object, @expectation_ordering)
155
- else
156
- PartialClassDoubleProxy.new(self, object, @expectation_ordering)
157
- end
156
+ class_proxy_with_callback_verification_strategy(object, CallbackInvocationStrategy.new)
158
157
  else
159
158
  if RSpec::Mocks.configuration.verify_partial_doubles?
160
159
  VerifyingPartialDoubleProxy.new(object, @expectation_ordering)
@@ -164,6 +163,24 @@ module RSpec
164
163
  end
165
164
  end
166
165
 
166
+ def superclass_proxy_not_found_for(id, object)
167
+ raise "superclass_proxy_not_found_for called with something that is not a class" unless Class === object
168
+ proxies[id] = class_proxy_with_callback_verification_strategy(object, NoCallbackInvocationStrategy.new)
169
+ end
170
+
171
+ def class_proxy_with_callback_verification_strategy(object, strategy)
172
+ if RSpec::Mocks.configuration.verify_partial_doubles?
173
+ VerifyingPartialClassDoubleProxy.new(
174
+ self,
175
+ object,
176
+ @expectation_ordering,
177
+ strategy
178
+ )
179
+ else
180
+ PartialClassDoubleProxy.new(self, object, @expectation_ordering)
181
+ end
182
+ end
183
+
167
184
  def any_instance_recorder_not_found_for(id, klass)
168
185
  any_instance_recorders[id] = AnyInstance::Recorder.new(klass)
169
186
  end
@@ -1,3 +1,3 @@
1
1
  require 'rspec/mocks'
2
- include RSpec::Mocks::ExampleMethods
2
+ extend RSpec::Mocks::ExampleMethods
3
3
  RSpec::Mocks.setup
@@ -48,7 +48,7 @@ module RSpec
48
48
  end
49
49
 
50
50
  def unstub(message)
51
- ::RSpec::Mocks::Syntax.warn_unless_should_configured(__method__, "`allow(...).to_receive(...).and_call_original` or explicitly enable `:should`")
51
+ ::RSpec::Mocks::Syntax.warn_unless_should_configured(__method__, "`allow(...).to receive(...).and_call_original` or explicitly enable `:should`")
52
52
  ::RSpec::Mocks.space.proxy_for(self).remove_stub(message)
53
53
  end
54
54
 
@@ -214,11 +214,10 @@ if defined?(BasicObject)
214
214
  # the end of the example.
215
215
  #
216
216
  # @example
217
- #
218
- # logger = double('logger')
219
- # thing_that_logs = ThingThatLogs.new(logger)
220
- # logger.should_receive(:log)
221
- # thing_that_logs.do_something_that_logs_a_message
217
+ # logger = double('logger')
218
+ # thing_that_logs = ThingThatLogs.new(logger)
219
+ # logger.should_receive(:log)
220
+ # thing_that_logs.do_something_that_logs_a_message
222
221
  #
223
222
  # @note This is only available when you have enabled the `should` syntax.
224
223
  # @see RSpec::Mocks::ExampleMethods#expect
@@ -232,10 +231,9 @@ if defined?(BasicObject)
232
231
  # Tells the object to respond to the message with the specified value.
233
232
  #
234
233
  # @example
235
- #
236
- # counter.stub(:count).and_return(37)
237
- # counter.stub(:count => 37)
238
- # counter.stub(:count) { 37 }
234
+ # counter.stub(:count).and_return(37)
235
+ # counter.stub(:count => 37)
236
+ # counter.stub(:count) { 37 }
239
237
  #
240
238
  # @note This is only available when you have enabled the `should` syntax.
241
239
  # @see RSpec::Mocks::ExampleMethods#allow
@@ -269,10 +267,9 @@ if defined?(BasicObject)
269
267
  # implementation calls `foo.baz.bar`, the stub will not work.
270
268
  #
271
269
  # @example
272
- #
273
- # double.stub_chain("foo.bar") { :baz }
274
- # double.stub_chain(:foo, :bar => :baz)
275
- # double.stub_chain(:foo, :bar) { :baz }
270
+ # double.stub_chain("foo.bar") { :baz }
271
+ # double.stub_chain(:foo, :bar => :baz)
272
+ # double.stub_chain(:foo, :bar) { :baz }
276
273
  #
277
274
  # # Given any of ^^ these three forms ^^:
278
275
  # double.foo.bar # => :baz
@@ -311,15 +308,14 @@ class Class
311
308
  # class.
312
309
  #
313
310
  # @example
311
+ # Car.any_instance.should_receive(:go)
312
+ # race = Race.new
313
+ # race.cars << Car.new
314
+ # race.go # assuming this delegates to all of its cars
315
+ # # this example would pass
314
316
  #
315
- # Car.any_instance.should_receive(:go)
316
- # race = Race.new
317
- # race.cars << Car.new
318
- # race.go # assuming this delegates to all of its cars
319
- # # this example would pass
320
- #
321
- # Account.any_instance.stub(:balance) { Money.new(:USD, 25) }
322
- # Account.new.balance # => Money.new(:USD, 25))
317
+ # Account.any_instance.stub(:balance) { Money.new(:USD, 25) }
318
+ # Account.new.balance # => Money.new(:USD, 25))
323
319
  #
324
320
  # @return [Recorder]
325
321
  #
@@ -1,12 +1,8 @@
1
1
  module RSpec
2
2
  module Mocks
3
3
  # @private
4
- class TargetBase
5
- def initialize(target)
6
- @target = target
7
- end
8
-
9
- def self.delegate_to(matcher_method)
4
+ module TargetDelegationClassMethods
5
+ def delegate_to(matcher_method)
10
6
  define_method(:to) do |matcher, &block|
11
7
  unless matcher_allowed?(matcher)
12
8
  raise_unsupported_matcher(:to, matcher)
@@ -15,11 +11,11 @@ module RSpec
15
11
  end
16
12
  end
17
13
 
18
- def self.delegate_not_to(matcher_method, options={})
14
+ def delegate_not_to(matcher_method, options={})
19
15
  method_name = options.fetch(:from)
20
16
  define_method(method_name) do |matcher, &block|
21
17
  case matcher
22
- when Matchers::Receive
18
+ when Matchers::Receive, Matchers::HaveReceived
23
19
  define_matcher(matcher, matcher_method, &block)
24
20
  when Matchers::ReceiveMessages, Matchers::ReceiveMessageChain
25
21
  raise_negation_unsupported(method_name, matcher)
@@ -29,25 +25,30 @@ module RSpec
29
25
  end
30
26
  end
31
27
 
32
- def self.disallow_negation(method_name)
28
+ def disallow_negation(method_name)
33
29
  define_method(method_name) do |matcher, *_args|
34
30
  raise_negation_unsupported(method_name, matcher)
35
31
  end
36
32
  end
33
+ end
34
+
35
+ # @private
36
+ module TargetDelegationInstanceMethods
37
+ attr_reader :target
37
38
 
38
39
  private
39
40
 
40
41
  def matcher_allowed?(matcher)
41
- matcher.class.name.start_with?("RSpec::Mocks::Matchers".freeze)
42
+ Matchers::Matcher === matcher
42
43
  end
43
44
 
44
45
  def define_matcher(matcher, name, &block)
45
- matcher.__send__(name, @target, &block)
46
+ matcher.__send__(name, target, &block)
46
47
  end
47
48
 
48
49
  def raise_unsupported_matcher(method_name, matcher)
49
50
  raise UnsupportedMatcherError,
50
- "only the `receive` or `receive_messages` matchers are supported " \
51
+ "only the `receive`, `have_received` and `receive_messages` matchers are supported " \
51
52
  "with `#{expression}(...).#{method_name}`, but you have provided: #{matcher}"
52
53
  end
53
54
 
@@ -56,31 +57,54 @@ module RSpec
56
57
  "`#{expression}(...).#{method_name} #{matcher.name}` is not supported since it " \
57
58
  "doesn't really make sense. What would it even mean?"
58
59
  end
60
+ end
61
+
62
+ # @private
63
+ class TargetBase
64
+ def initialize(target)
65
+ @target = target
66
+ end
67
+
68
+ extend TargetDelegationClassMethods
69
+ include TargetDelegationInstanceMethods
70
+ end
71
+
72
+ # @private
73
+ module ExpectationTargetMethods
74
+ extend TargetDelegationClassMethods
75
+ include TargetDelegationInstanceMethods
76
+
77
+ delegate_to :setup_expectation
78
+ delegate_not_to :setup_negative_expectation, :from => :not_to
79
+ delegate_not_to :setup_negative_expectation, :from => :to_not
59
80
 
60
81
  def expression
61
- self.class::EXPRESSION
82
+ :expect
62
83
  end
63
84
  end
64
85
 
86
+ # @private
87
+ class ExpectationTarget < TargetBase
88
+ include ExpectationTargetMethods
89
+ end
90
+
65
91
  # @private
66
92
  class AllowanceTarget < TargetBase
67
- EXPRESSION = :allow
93
+ def expression
94
+ :allow
95
+ end
96
+
68
97
  delegate_to :setup_allowance
69
98
  disallow_negation :not_to
70
99
  disallow_negation :to_not
71
100
  end
72
101
 
73
- # @private
74
- class ExpectationTarget < TargetBase
75
- EXPRESSION = :expect
76
- delegate_to :setup_expectation
77
- delegate_not_to :setup_negative_expectation, :from => :not_to
78
- delegate_not_to :setup_negative_expectation, :from => :to_not
79
- end
80
-
81
102
  # @private
82
103
  class AnyInstanceAllowanceTarget < TargetBase
83
- EXPRESSION = :allow_any_instance_of
104
+ def expression
105
+ :allow_any_instance_of
106
+ end
107
+
84
108
  delegate_to :setup_any_instance_allowance
85
109
  disallow_negation :not_to
86
110
  disallow_negation :to_not
@@ -88,7 +112,10 @@ module RSpec
88
112
 
89
113
  # @private
90
114
  class AnyInstanceExpectationTarget < TargetBase
91
- EXPRESSION = :expect_any_instance_of
115
+ def expression
116
+ :expect_any_instance_of
117
+ end
118
+
92
119
  delegate_to :setup_any_instance_expectation
93
120
  delegate_not_to :setup_any_instance_negative_expectation, :from => :not_to
94
121
  delegate_not_to :setup_any_instance_negative_expectation, :from => :to_not