opal-rspec 0.8.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (682) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +7 -7
  3. data/.gitmodules +6 -0
  4. data/CHANGELOG.md +18 -0
  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/html_printer.rb +1 -1
  123. data/lib-opal/opal/rspec/pre_require_fixes.rb +1 -5
  124. data/lib-opal/opal/rspec/requires.rb +32 -19
  125. data/lib-opal/opal/rspec/sprockets_runner.rb.erb +1 -0
  126. data/lib-opal/opal/rspec.rb +3 -0
  127. data/opal-rspec.gemspec +1 -2
  128. data/rspec/upstream/.document +1 -1
  129. data/rspec/upstream/.github/FUNDING.yml +5 -0
  130. data/rspec/upstream/.gitignore +1 -0
  131. data/rspec/upstream/LICENSE.md +27 -0
  132. data/rspec/upstream/README.md +26 -26
  133. data/rspec/upstream/Rakefile +1 -1
  134. data/rspec/upstream/certs/rspec.pem +32 -20
  135. data/rspec/upstream/certs/samphippen.asc +18 -0
  136. data/rspec/upstream/code_of_conduct.md +59 -0
  137. data/rspec/upstream/lib/rspec/version.rb +1 -1
  138. data/rspec/upstream/rspec.gemspec +7 -2
  139. data/rspec-core/upstream/.document +1 -1
  140. data/rspec-core/upstream/.github/FUNDING.yml +5 -0
  141. data/rspec-core/upstream/.github/workflows/ci.yml +150 -0
  142. data/rspec-core/upstream/.gitignore +2 -0
  143. data/rspec-core/upstream/.rspec +1 -0
  144. data/rspec-core/upstream/.rubocop.yml +64 -12
  145. data/rspec-core/upstream/.rubocop_rspec_base.yml +224 -38
  146. data/rspec-core/upstream/.rubocop_todo.yml +1031 -0
  147. data/rspec-core/upstream/.yardopts +2 -1
  148. data/rspec-core/upstream/BUILD_DETAIL.md +149 -0
  149. data/rspec-core/upstream/CODE_OF_CONDUCT.md +59 -0
  150. data/rspec-core/upstream/CONTRIBUTING.md +86 -0
  151. data/rspec-core/upstream/Changelog.md +721 -2
  152. data/rspec-core/upstream/DEV-README.md +2 -2
  153. data/rspec-core/upstream/DEVELOPMENT.md +131 -0
  154. data/rspec-core/upstream/Filtering.md +173 -0
  155. data/rspec-core/upstream/Gemfile +78 -9
  156. data/rspec-core/upstream/ISSUE_TEMPLATE.md +24 -0
  157. data/rspec-core/upstream/{License.txt → LICENSE.md} +6 -5
  158. data/rspec-core/upstream/README.md +165 -24
  159. data/rspec-core/upstream/REPORT_TEMPLATE.md +43 -0
  160. data/rspec-core/upstream/Rakefile +1 -1
  161. data/rspec-core/upstream/benchmarks/allocations/1000_groups_1_example.rb +124 -0
  162. data/rspec-core/upstream/benchmarks/allocations/1_group_1000_examples.rb +63 -0
  163. data/rspec-core/upstream/benchmarks/allocations/helper.rb +30 -0
  164. data/rspec-core/upstream/benchmarks/allocations/running_1000_groups_1_example.rb +100 -0
  165. data/rspec-core/upstream/benchmarks/allocations/running_1_group_1000_examples.rb +60 -0
  166. data/rspec-core/upstream/benchmarks/capture_block_vs_yield.rb +208 -0
  167. data/rspec-core/upstream/benchmarks/flat_map_vs_inject.rb +55 -0
  168. data/rspec-core/upstream/benchmarks/hash_functions.rb +74 -0
  169. data/rspec-core/upstream/benchmarks/keys_each_vs_each_key.rb +43 -0
  170. data/rspec-core/upstream/benchmarks/module_inclusion_filtering.rb +89 -0
  171. data/rspec-core/upstream/benchmarks/precalculate_absolute_file_path_or_not.rb +29 -0
  172. data/rspec-core/upstream/benchmarks/shuffle_vs_sort_by_for_random_ordering.rb +131 -0
  173. data/rspec-core/upstream/benchmarks/singleton_example_groups/helper.rb +122 -0
  174. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks.rb +28 -0
  175. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks_module_inclusions_and_shared_context_inclusions.rb +35 -0
  176. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_module_inclusions.rb +28 -0
  177. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_no_config_hooks_or_inclusions.rb +22 -0
  178. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_shared_context_inclusions.rb +28 -0
  179. data/rspec-core/upstream/benchmarks/threadsafe_let_block.rb +312 -0
  180. data/rspec-core/upstream/cucumber.yml +7 -2
  181. data/rspec-core/upstream/features/.nav +5 -1
  182. data/rspec-core/upstream/features/README.md +2 -2
  183. data/rspec-core/upstream/features/clear_examples.feature +106 -0
  184. data/rspec-core/upstream/features/command_line/bisect.feature +178 -0
  185. data/rspec-core/upstream/features/command_line/example_matches_name_option.feature +131 -0
  186. data/rspec-core/upstream/features/command_line/example_name_option.feature +2 -0
  187. data/rspec-core/upstream/features/command_line/fail_fast.feature +21 -4
  188. data/rspec-core/upstream/features/command_line/init.feature +2 -2
  189. data/rspec-core/upstream/features/command_line/line_number_appended_to_path.feature +2 -2
  190. data/rspec-core/upstream/features/command_line/only_failures.feature +113 -0
  191. data/rspec-core/upstream/features/command_line/order.md +8 -1
  192. data/rspec-core/upstream/features/command_line/pattern_option.feature +6 -3
  193. data/rspec-core/upstream/features/command_line/rake_task.feature +3 -3
  194. data/rspec-core/upstream/features/command_line/randomization.feature +5 -2
  195. data/rspec-core/upstream/features/command_line/ruby.feature +6 -2
  196. data/rspec-core/upstream/features/command_line/tag.feature +13 -11
  197. data/rspec-core/upstream/features/command_line/warnings_option.feature +20 -3
  198. data/rspec-core/upstream/features/configuration/backtrace_exclusion_patterns.feature +45 -29
  199. data/rspec-core/upstream/features/configuration/color.feature +22 -0
  200. data/rspec-core/upstream/features/configuration/custom_settings.feature +9 -13
  201. data/rspec-core/upstream/features/configuration/default_path.feature +1 -1
  202. data/rspec-core/upstream/features/configuration/enable_global_dsl.feature +15 -1
  203. data/rspec-core/upstream/features/configuration/error_exit_code.feature +52 -0
  204. data/rspec-core/upstream/features/configuration/fail_fast.feature +42 -12
  205. data/rspec-core/upstream/features/configuration/fail_if_no_examples.feature +31 -0
  206. data/rspec-core/upstream/features/configuration/failure_exit_code.feature +26 -0
  207. data/rspec-core/upstream/features/configuration/overriding_global_ordering.feature +1 -1
  208. data/rspec-core/upstream/features/configuration/pattern.feature +1 -1
  209. data/rspec-core/upstream/features/configuration/profile.feature +25 -0
  210. data/rspec-core/upstream/features/configuration/read_options_from_file.feature +25 -19
  211. data/rspec-core/upstream/features/configuration/run_all_when_everything_filtered.feature +4 -0
  212. data/rspec-core/upstream/features/core_standalone.feature +2 -0
  213. data/rspec-core/upstream/features/example_groups/basic_structure.feature +1 -0
  214. data/rspec-core/upstream/features/example_groups/shared_context.feature +55 -5
  215. data/rspec-core/upstream/features/example_groups/shared_examples.feature +59 -15
  216. data/rspec-core/upstream/features/expectation_framework_integration/aggregating_failures.feature +602 -0
  217. data/rspec-core/upstream/features/expectation_framework_integration/configure_expectation_framework.feature +13 -5
  218. data/rspec-core/upstream/features/filtering/filter_run_when_matching.feature +75 -0
  219. data/rspec-core/upstream/features/formatters/configurable_colors.feature +23 -4
  220. data/rspec-core/upstream/features/helper_methods/let.feature +3 -0
  221. data/rspec-core/upstream/features/helper_methods/modules.feature +6 -0
  222. data/rspec-core/upstream/features/hooks/around_hooks.feature +36 -6
  223. data/rspec-core/upstream/features/hooks/before_and_after_hooks.feature +47 -5
  224. data/rspec-core/upstream/features/hooks/filtering.feature +199 -4
  225. data/rspec-core/upstream/features/hooks/when_first_matching_example_defined.feature +70 -0
  226. data/rspec-core/upstream/features/metadata/current_scope.feature +87 -0
  227. data/rspec-core/upstream/features/metadata/described_class.feature +12 -5
  228. data/rspec-core/upstream/features/metadata/user_defined.feature +3 -3
  229. data/rspec-core/upstream/features/mock_framework_integration/use_any_framework.feature +1 -1
  230. data/rspec-core/upstream/features/mock_framework_integration/use_flexmock.feature +5 -5
  231. data/rspec-core/upstream/features/mock_framework_integration/use_mocha.feature +5 -5
  232. data/rspec-core/upstream/features/mock_framework_integration/use_rr.feature +5 -5
  233. data/rspec-core/upstream/features/mock_framework_integration/use_rspec.feature +6 -6
  234. data/rspec-core/upstream/features/pending_and_skipped_examples/pending_examples.feature +8 -7
  235. data/rspec-core/upstream/features/pending_and_skipped_examples/skipped_examples.feature +49 -22
  236. data/rspec-core/upstream/features/step_definitions/additional_cli_steps.rb +142 -12
  237. data/rspec-core/upstream/features/step_definitions/core_standalone_steps.rb +6 -2
  238. data/rspec-core/upstream/features/subject/implicit_subject.feature +3 -2
  239. data/rspec-core/upstream/features/subject/one_liner_syntax.feature +9 -5
  240. data/rspec-core/upstream/features/support/diff_lcs_versions.rb +17 -0
  241. data/rspec-core/upstream/features/support/env.rb +20 -7
  242. data/rspec-core/upstream/features/support/jruby.rb +8 -0
  243. data/rspec-core/upstream/features/support/require_expect_syntax_in_aruba_specs.rb +6 -3
  244. data/rspec-core/upstream/features/support/rubinius.rb +5 -1
  245. data/rspec-core/upstream/features/support/ruby_27_support.rb +7 -0
  246. data/rspec-core/upstream/features/support/send_sigint_during_bisect.rb +21 -0
  247. data/rspec-core/upstream/lib/rspec/autorun.rb +1 -0
  248. data/rspec-core/upstream/lib/rspec/core/backtrace_formatter.rb +3 -4
  249. data/rspec-core/upstream/lib/rspec/core/bisect/coordinator.rb +62 -0
  250. data/rspec-core/upstream/lib/rspec/core/bisect/example_minimizer.rb +173 -0
  251. data/rspec-core/upstream/lib/rspec/core/bisect/fork_runner.rb +138 -0
  252. data/rspec-core/upstream/lib/rspec/core/bisect/server.rb +61 -0
  253. data/rspec-core/upstream/lib/rspec/core/bisect/shell_command.rb +126 -0
  254. data/rspec-core/upstream/lib/rspec/core/bisect/shell_runner.rb +73 -0
  255. data/rspec-core/upstream/lib/rspec/core/bisect/utilities.rb +69 -0
  256. data/rspec-core/upstream/lib/rspec/core/configuration.rb +1157 -212
  257. data/rspec-core/upstream/lib/rspec/core/configuration_options.rb +82 -22
  258. data/rspec-core/upstream/lib/rspec/core/did_you_mean.rb +46 -0
  259. data/rspec-core/upstream/lib/rspec/core/drb.rb +10 -1
  260. data/rspec-core/upstream/lib/rspec/core/dsl.rb +10 -5
  261. data/rspec-core/upstream/lib/rspec/core/example.rb +271 -107
  262. data/rspec-core/upstream/lib/rspec/core/example_group.rb +426 -127
  263. data/rspec-core/upstream/lib/rspec/core/example_status_persister.rb +235 -0
  264. data/rspec-core/upstream/lib/rspec/core/filter_manager.rb +76 -104
  265. data/rspec-core/upstream/lib/rspec/core/flat_map.rb +6 -4
  266. data/rspec-core/upstream/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
  267. data/rspec-core/upstream/lib/rspec/core/formatters/base_formatter.rb +7 -4
  268. data/rspec-core/upstream/lib/rspec/core/formatters/base_text_formatter.rb +15 -16
  269. data/rspec-core/upstream/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
  270. data/rspec-core/upstream/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
  271. data/rspec-core/upstream/lib/rspec/core/formatters/console_codes.rb +28 -16
  272. data/rspec-core/upstream/lib/rspec/core/formatters/deprecation_formatter.rb +14 -13
  273. data/rspec-core/upstream/lib/rspec/core/formatters/documentation_formatter.rb +47 -13
  274. data/rspec-core/upstream/lib/rspec/core/formatters/exception_presenter.rb +525 -0
  275. data/rspec-core/upstream/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
  276. data/rspec-core/upstream/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  277. data/rspec-core/upstream/lib/rspec/core/formatters/helpers.rb +40 -9
  278. data/rspec-core/upstream/lib/rspec/core/formatters/html_formatter.rb +20 -16
  279. data/rspec-core/upstream/lib/rspec/core/formatters/html_printer.rb +27 -18
  280. data/rspec-core/upstream/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
  281. data/rspec-core/upstream/lib/rspec/core/formatters/json_formatter.rb +15 -7
  282. data/rspec-core/upstream/lib/rspec/core/formatters/profile_formatter.rb +10 -7
  283. data/rspec-core/upstream/lib/rspec/core/formatters/progress_formatter.rb +1 -0
  284. data/rspec-core/upstream/lib/rspec/core/formatters/protocol.rb +62 -43
  285. data/rspec-core/upstream/lib/rspec/core/formatters/snippet_extractor.rb +115 -85
  286. data/rspec-core/upstream/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  287. data/rspec-core/upstream/lib/rspec/core/formatters.rb +71 -32
  288. data/rspec-core/upstream/lib/rspec/core/hooks.rb +303 -248
  289. data/rspec-core/upstream/lib/rspec/core/invocations.rb +87 -0
  290. data/rspec-core/upstream/lib/rspec/core/memoized_helpers.rb +155 -47
  291. data/rspec-core/upstream/lib/rspec/core/metadata.rb +102 -41
  292. data/rspec-core/upstream/lib/rspec/core/metadata_filter.rb +209 -49
  293. data/rspec-core/upstream/lib/rspec/core/minitest_assertions_adapter.rb +5 -2
  294. data/rspec-core/upstream/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  295. data/rspec-core/upstream/lib/rspec/core/mocking_adapters/mocha.rb +8 -8
  296. data/rspec-core/upstream/lib/rspec/core/notifications.rb +180 -201
  297. data/rspec-core/upstream/lib/rspec/core/option_parser.rb +159 -58
  298. data/rspec-core/upstream/lib/rspec/core/ordering.rb +40 -26
  299. data/rspec-core/upstream/lib/rspec/core/output_wrapper.rb +29 -0
  300. data/rspec-core/upstream/lib/rspec/core/pending.rb +19 -25
  301. data/rspec-core/upstream/lib/rspec/core/profiler.rb +34 -0
  302. data/rspec-core/upstream/lib/rspec/core/project_initializer/.rspec +0 -1
  303. data/rspec-core/upstream/lib/rspec/core/project_initializer/spec/spec_helper.rb +31 -22
  304. data/rspec-core/upstream/lib/rspec/core/project_initializer.rb +1 -1
  305. data/rspec-core/upstream/lib/rspec/core/rake_task.rb +73 -72
  306. data/rspec-core/upstream/lib/rspec/core/reporter.rb +134 -18
  307. data/rspec-core/upstream/lib/rspec/core/ruby_project.rb +13 -5
  308. data/rspec-core/upstream/lib/rspec/core/runner.rb +99 -45
  309. data/rspec-core/upstream/lib/rspec/core/sandbox.rb +37 -0
  310. data/rspec-core/upstream/lib/rspec/core/set.rb +54 -0
  311. data/rspec-core/upstream/lib/rspec/core/shared_example_group.rb +126 -37
  312. data/rspec-core/upstream/lib/rspec/core/shell_escape.rb +49 -0
  313. data/rspec-core/upstream/lib/rspec/core/test_unit_assertions_adapter.rb +3 -3
  314. data/rspec-core/upstream/lib/rspec/core/version.rb +1 -1
  315. data/rspec-core/upstream/lib/rspec/core/warnings.rb +2 -2
  316. data/rspec-core/upstream/lib/rspec/core/world.rb +164 -60
  317. data/rspec-core/upstream/lib/rspec/core.rb +64 -21
  318. data/rspec-core/upstream/maintenance-branch +1 -1
  319. data/rspec-core/upstream/rspec-core.gemspec +16 -11
  320. data/rspec-core/upstream/script/ci_functions.sh +73 -0
  321. data/rspec-core/upstream/script/clone_all_rspec_repos +2 -2
  322. data/rspec-core/upstream/script/cucumber.sh +8 -0
  323. data/rspec-core/upstream/script/custom_build_functions.sh +22 -0
  324. data/rspec-core/upstream/script/functions.sh +125 -89
  325. data/rspec-core/upstream/script/legacy_setup.sh +20 -0
  326. data/rspec-core/upstream/script/predicate_functions.sh +162 -0
  327. data/rspec-core/upstream/script/rspec_with_simplecov +6 -6
  328. data/rspec-core/upstream/script/run_build +14 -9
  329. data/rspec-core/upstream/script/run_rubocop +14 -0
  330. data/rspec-core/upstream/script/update_rubygems_and_install_bundler +20 -0
  331. data/rspec-expectations/upstream/.document +1 -1
  332. data/rspec-expectations/upstream/.github/FUNDING.yml +5 -0
  333. data/rspec-expectations/upstream/.github/workflows/ci.yml +150 -0
  334. data/rspec-expectations/upstream/.gitignore +2 -0
  335. data/rspec-expectations/upstream/.rubocop.yml +126 -2
  336. data/rspec-expectations/upstream/.rubocop_rspec_base.yml +224 -38
  337. data/rspec-expectations/upstream/.rubocop_todo.yml +335 -0
  338. data/rspec-expectations/upstream/.yardopts +1 -1
  339. data/rspec-expectations/upstream/BUILD_DETAIL.md +149 -0
  340. data/rspec-expectations/upstream/CODE_OF_CONDUCT.md +59 -0
  341. data/rspec-expectations/upstream/CONTRIBUTING.md +86 -0
  342. data/rspec-expectations/upstream/Changelog.md +454 -4
  343. data/rspec-expectations/upstream/DEV-README.md +3 -3
  344. data/rspec-expectations/upstream/DEVELOPMENT.md +131 -0
  345. data/rspec-expectations/upstream/Gemfile +77 -9
  346. data/rspec-expectations/upstream/ISSUE_TEMPLATE.md +24 -0
  347. data/{rspec-mocks/upstream/License.txt → rspec-expectations/upstream/LICENSE.md} +5 -4
  348. data/rspec-expectations/upstream/README.md +73 -31
  349. data/rspec-expectations/upstream/REPORT_TEMPLATE.md +43 -0
  350. data/rspec-expectations/upstream/Rakefile +13 -10
  351. data/rspec-expectations/upstream/Should.md +13 -5
  352. data/rspec-expectations/upstream/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +1 -2
  353. data/rspec-expectations/upstream/benchmarks/caller_vs_raise_for_backtrace.rb +77 -0
  354. data/rspec-expectations/upstream/benchmarks/count_vs_select_size.rb +68 -0
  355. data/rspec-expectations/upstream/benchmarks/default_messages_as_methods_v_blocks.rb +1 -1
  356. data/rspec-expectations/upstream/benchmarks/gsub_vs_tr_single_character.rb +28 -0
  357. data/rspec-expectations/upstream/benchmarks/include_matcher.rb +249 -0
  358. data/rspec-expectations/upstream/benchmarks/include_v_superclass.rb +0 -1
  359. data/rspec-expectations/upstream/benchmarks/match_array/failing_with_duplicate_items.rb +1 -1
  360. data/rspec-expectations/upstream/benchmarks/output_stringio_vs_tempfile.rb +31 -0
  361. data/rspec-expectations/upstream/benchmarks/set_vs_array_include.rb +1 -3
  362. data/rspec-expectations/upstream/cucumber.yml +9 -4
  363. data/rspec-expectations/upstream/features/.nav +1 -0
  364. data/rspec-expectations/upstream/features/aggregating_failures.feature +56 -0
  365. data/rspec-expectations/upstream/features/built_in_matchers/README.md +3 -3
  366. data/rspec-expectations/upstream/features/built_in_matchers/all.feature +3 -2
  367. data/rspec-expectations/upstream/features/built_in_matchers/be_within.feature +1 -1
  368. data/rspec-expectations/upstream/features/built_in_matchers/change.feature +8 -6
  369. data/rspec-expectations/upstream/features/built_in_matchers/comparisons.feature +33 -1
  370. data/rspec-expectations/upstream/features/built_in_matchers/contain_exactly.feature +1 -0
  371. data/rspec-expectations/upstream/features/built_in_matchers/cover.feature +3 -3
  372. data/rspec-expectations/upstream/features/built_in_matchers/exist.feature +1 -1
  373. data/rspec-expectations/upstream/features/built_in_matchers/have_attributes.feature +1 -2
  374. data/rspec-expectations/upstream/features/built_in_matchers/include.feature +74 -17
  375. data/rspec-expectations/upstream/features/built_in_matchers/match.feature +2 -2
  376. data/rspec-expectations/upstream/features/built_in_matchers/output.feature +67 -4
  377. data/rspec-expectations/upstream/features/built_in_matchers/predicates.feature +56 -19
  378. data/rspec-expectations/upstream/features/built_in_matchers/raise_error.feature +16 -2
  379. data/rspec-expectations/upstream/features/built_in_matchers/respond_to.feature +191 -3
  380. data/rspec-expectations/upstream/features/built_in_matchers/satisfy.feature +17 -8
  381. data/rspec-expectations/upstream/features/built_in_matchers/throw_symbol.feature +1 -1
  382. data/rspec-expectations/upstream/features/built_in_matchers/types.feature +34 -34
  383. data/rspec-expectations/upstream/features/built_in_matchers/yield.feature +2 -2
  384. data/rspec-expectations/upstream/features/composing_matchers.feature +4 -4
  385. data/rspec-expectations/upstream/features/custom_matchers/define_block_matcher.feature +78 -0
  386. data/rspec-expectations/upstream/features/custom_matchers/define_diffable_matcher.feature +115 -3
  387. data/rspec-expectations/upstream/features/custom_matchers/define_matcher.feature +173 -21
  388. data/rspec-expectations/upstream/features/custom_matchers/define_matcher_with_fluent_interface.feature +21 -2
  389. data/rspec-expectations/upstream/features/define_negated_matcher.feature +2 -1
  390. data/rspec-expectations/upstream/features/diffing.feature +29 -1
  391. data/rspec-expectations/upstream/features/implicit_docstrings.feature +8 -8
  392. data/rspec-expectations/upstream/features/step_definitions/additional_cli_steps.rb +11 -7
  393. data/rspec-expectations/upstream/features/support/diff_lcs_versions.rb +25 -0
  394. data/rspec-expectations/upstream/features/support/disallow_certain_apis.rb +3 -3
  395. data/rspec-expectations/upstream/features/support/env.rb +11 -11
  396. data/rspec-expectations/upstream/features/support/rubinius.rb +1 -1
  397. data/rspec-expectations/upstream/features/support/ruby_features.rb +39 -0
  398. data/rspec-expectations/upstream/features/syntax_configuration.feature +9 -9
  399. data/rspec-expectations/upstream/features/test_frameworks/minitest.feature +69 -2
  400. data/rspec-expectations/upstream/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  401. data/rspec-expectations/upstream/lib/rspec/expectations/configuration.rb +84 -1
  402. data/rspec-expectations/upstream/lib/rspec/expectations/expectation_target.rb +82 -38
  403. data/rspec-expectations/upstream/lib/rspec/expectations/fail_with.rb +11 -6
  404. data/rspec-expectations/upstream/lib/rspec/expectations/failure_aggregator.rb +212 -0
  405. data/rspec-expectations/upstream/lib/rspec/expectations/handler.rb +27 -12
  406. data/rspec-expectations/upstream/lib/rspec/expectations/minitest_integration.rb +43 -2
  407. data/rspec-expectations/upstream/lib/rspec/expectations/syntax.rb +5 -5
  408. data/rspec-expectations/upstream/lib/rspec/expectations/version.rb +1 -1
  409. data/rspec-expectations/upstream/lib/rspec/expectations.rb +15 -1
  410. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/all.rb +1 -0
  411. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/base_matcher.rb +77 -11
  412. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be.rb +28 -114
  413. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_between.rb +1 -1
  414. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_instance_of.rb +5 -1
  415. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_kind_of.rb +5 -1
  416. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_within.rb +4 -4
  417. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/change.rb +168 -55
  418. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/compound.rb +61 -29
  419. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/contain_exactly.rb +73 -12
  420. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/count_expectation.rb +169 -0
  421. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eq.rb +3 -38
  422. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eql.rb +2 -2
  423. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/equal.rb +3 -3
  424. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/exist.rb +7 -3
  425. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/has.rb +90 -24
  426. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/have_attributes.rb +37 -7
  427. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/include.rb +124 -23
  428. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/match.rb +79 -2
  429. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/operators.rb +14 -5
  430. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/output.rb +56 -1
  431. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/raise_error.rb +126 -29
  432. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/respond_to.rb +118 -9
  433. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/satisfy.rb +28 -7
  434. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/{start_and_end_with.rb → start_or_end_with.rb} +20 -8
  435. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/throw_symbol.rb +11 -5
  436. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/yield.rb +110 -155
  437. data/rspec-expectations/upstream/lib/rspec/matchers/built_in.rb +4 -3
  438. data/rspec-expectations/upstream/lib/rspec/matchers/composable.rb +23 -35
  439. data/rspec-expectations/upstream/lib/rspec/matchers/dsl.rb +179 -26
  440. data/rspec-expectations/upstream/lib/rspec/matchers/english_phrasing.rb +58 -0
  441. data/rspec-expectations/upstream/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
  442. data/rspec-expectations/upstream/lib/rspec/matchers/fail_matchers.rb +42 -0
  443. data/rspec-expectations/upstream/lib/rspec/matchers/generated_descriptions.rb +1 -2
  444. data/rspec-expectations/upstream/lib/rspec/matchers/matcher_delegator.rb +2 -0
  445. data/rspec-expectations/upstream/lib/rspec/matchers/matcher_protocol.rb +72 -66
  446. data/rspec-expectations/upstream/lib/rspec/matchers.rb +227 -150
  447. data/rspec-expectations/upstream/maintenance-branch +1 -1
  448. data/rspec-expectations/upstream/rspec-expectations.gemspec +13 -8
  449. data/rspec-expectations/upstream/script/ci_functions.sh +73 -0
  450. data/rspec-expectations/upstream/script/clone_all_rspec_repos +2 -2
  451. data/rspec-expectations/upstream/script/cucumber.sh +8 -0
  452. data/rspec-expectations/upstream/script/functions.sh +125 -89
  453. data/rspec-expectations/upstream/script/legacy_setup.sh +20 -0
  454. data/rspec-expectations/upstream/script/predicate_functions.sh +162 -0
  455. data/rspec-expectations/upstream/script/run_build +14 -9
  456. data/rspec-expectations/upstream/script/run_rubocop +14 -0
  457. data/rspec-expectations/upstream/script/update_rubygems_and_install_bundler +20 -0
  458. data/rspec-mocks/upstream/.document +1 -1
  459. data/rspec-mocks/upstream/.github/FUNDING.yml +5 -0
  460. data/rspec-mocks/upstream/.github/workflows/ci.yml +150 -0
  461. data/rspec-mocks/upstream/.gitignore +2 -0
  462. data/rspec-mocks/upstream/.rubocop.yml +28 -9
  463. data/rspec-mocks/upstream/.rubocop_rspec_base.yml +224 -38
  464. data/rspec-mocks/upstream/.rubocop_todo.yml +573 -0
  465. data/rspec-mocks/upstream/.yardopts +1 -1
  466. data/rspec-mocks/upstream/BUILD_DETAIL.md +149 -0
  467. data/rspec-mocks/upstream/CODE_OF_CONDUCT.md +59 -0
  468. data/rspec-mocks/upstream/CONTRIBUTING.md +86 -0
  469. data/rspec-mocks/upstream/Changelog.md +398 -3
  470. data/rspec-mocks/upstream/DEV-README.md +3 -3
  471. data/rspec-mocks/upstream/DEVELOPMENT.md +131 -0
  472. data/rspec-mocks/upstream/Gemfile +77 -10
  473. data/rspec-mocks/upstream/ISSUE_TEMPLATE.md +24 -0
  474. data/{rspec-expectations/upstream/License.txt → rspec-mocks/upstream/LICENSE.md} +5 -4
  475. data/rspec-mocks/upstream/README.md +83 -17
  476. data/rspec-mocks/upstream/REPORT_TEMPLATE.md +43 -0
  477. data/rspec-mocks/upstream/Rakefile +3 -3
  478. data/rspec-mocks/upstream/benchmarks/accessing_configuration_via_method_vs_cache.rb +52 -0
  479. data/rspec-mocks/upstream/benchmarks/allocations/1_object_1000_mocks.rb +76 -0
  480. data/rspec-mocks/upstream/benchmarks/allocations/helper.rb +17 -0
  481. data/rspec-mocks/upstream/benchmarks/each_value_v_values_each.rb +4 -5
  482. data/rspec-mocks/upstream/benchmarks/find_original_method_early.rb +1 -1
  483. data/rspec-mocks/upstream/benchmarks/method_defined_at_any_visibility.rb +3 -3
  484. data/rspec-mocks/upstream/benchmarks/thread_safety.rb +1 -1
  485. data/rspec-mocks/upstream/benchmarks/transfer_nested_constants.rb +1 -1
  486. data/rspec-mocks/upstream/cucumber.yml +8 -1
  487. data/rspec-mocks/upstream/features/.nav +2 -0
  488. data/rspec-mocks/upstream/features/basics/allowing_messages.feature +1 -1
  489. data/rspec-mocks/upstream/features/basics/expecting_messages.feature +40 -1
  490. data/rspec-mocks/upstream/features/basics/null_object_doubles.feature +1 -1
  491. data/rspec-mocks/upstream/features/basics/partial_test_doubles.feature +1 -1
  492. data/rspec-mocks/upstream/features/basics/scope.feature +5 -5
  493. data/rspec-mocks/upstream/features/basics/spies.feature +17 -30
  494. data/rspec-mocks/upstream/features/basics/test_doubles.feature +4 -4
  495. data/rspec-mocks/upstream/features/configuring_responses/README.md +2 -0
  496. data/rspec-mocks/upstream/features/configuring_responses/calling_the_original_implementation.feature +2 -2
  497. data/rspec-mocks/upstream/features/configuring_responses/mixed_responses.feature +25 -0
  498. data/rspec-mocks/upstream/features/configuring_responses/raising_an_error.feature +1 -0
  499. data/rspec-mocks/upstream/features/configuring_responses/wrapping_the_original_implementation.feature +3 -3
  500. data/rspec-mocks/upstream/features/configuring_responses/yielding.feature +2 -2
  501. data/rspec-mocks/upstream/features/mutating_constants/README.md +1 -1
  502. data/rspec-mocks/upstream/features/old_syntax/any_instance.feature +3 -3
  503. data/rspec-mocks/upstream/features/old_syntax/should_receive.feature +3 -1
  504. data/rspec-mocks/upstream/features/outside_rspec/any_test_framework.feature +116 -0
  505. data/rspec-mocks/upstream/features/outside_rspec/minitest.feature +202 -46
  506. data/rspec-mocks/upstream/features/outside_rspec/standalone.feature +5 -5
  507. data/rspec-mocks/upstream/features/setting_constraints/matching_arguments.feature +54 -27
  508. data/rspec-mocks/upstream/features/setting_constraints/message_order.feature +2 -2
  509. data/rspec-mocks/upstream/features/setting_constraints/receive_counts.feature +18 -0
  510. data/rspec-mocks/upstream/features/step_definitions/additional_cli_steps.rb +4 -4
  511. data/rspec-mocks/upstream/features/support/disallow_certain_apis.rb +3 -2
  512. data/rspec-mocks/upstream/features/support/env.rb +12 -12
  513. data/rspec-mocks/upstream/features/support/rubinius.rb +1 -1
  514. data/rspec-mocks/upstream/features/verifying_doubles/README.md +2 -2
  515. data/rspec-mocks/upstream/features/verifying_doubles/class_doubles.feature +1 -1
  516. data/rspec-mocks/upstream/features/verifying_doubles/dynamic_classes.feature +41 -5
  517. data/rspec-mocks/upstream/features/verifying_doubles/instance_doubles.feature +5 -3
  518. data/rspec-mocks/upstream/features/working_with_legacy_code/any_instance.feature +8 -6
  519. data/rspec-mocks/upstream/features/working_with_legacy_code/message_chains.feature +16 -1
  520. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/chain.rb +3 -1
  521. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  522. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expect_chain_chain.rb +1 -5
  523. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expectation_chain.rb +7 -5
  524. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/message_chains.rb +1 -3
  525. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/recorder.rb +42 -14
  526. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain.rb +13 -7
  527. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain_chain.rb +1 -5
  528. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance.rb +1 -0
  529. data/rspec-mocks/upstream/lib/rspec/mocks/argument_list_matcher.rb +53 -10
  530. data/rspec-mocks/upstream/lib/rspec/mocks/argument_matchers.rb +66 -26
  531. data/rspec-mocks/upstream/lib/rspec/mocks/configuration.rb +59 -4
  532. data/rspec-mocks/upstream/lib/rspec/mocks/error_generator.rb +235 -108
  533. data/rspec-mocks/upstream/lib/rspec/mocks/example_methods.rb +82 -27
  534. data/rspec-mocks/upstream/lib/rspec/mocks/instance_method_stasher.rb +12 -1
  535. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/have_received.rb +30 -17
  536. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive.rb +28 -1
  537. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_message_chain.rb +17 -1
  538. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_messages.rb +6 -0
  539. data/rspec-mocks/upstream/lib/rspec/mocks/message_chain.rb +0 -4
  540. data/rspec-mocks/upstream/lib/rspec/mocks/message_expectation.rb +430 -304
  541. data/rspec-mocks/upstream/lib/rspec/mocks/method_double.rb +46 -15
  542. data/rspec-mocks/upstream/lib/rspec/mocks/method_reference.rb +78 -19
  543. data/rspec-mocks/upstream/lib/rspec/mocks/minitest_integration.rb +68 -0
  544. data/rspec-mocks/upstream/lib/rspec/mocks/mutate_const.rb +23 -8
  545. data/rspec-mocks/upstream/lib/rspec/mocks/object_reference.rb +81 -23
  546. data/rspec-mocks/upstream/lib/rspec/mocks/proxy.rb +135 -41
  547. data/rspec-mocks/upstream/lib/rspec/mocks/space.rb +33 -16
  548. data/rspec-mocks/upstream/lib/rspec/mocks/standalone.rb +1 -1
  549. data/rspec-mocks/upstream/lib/rspec/mocks/syntax.rb +18 -22
  550. data/rspec-mocks/upstream/lib/rspec/mocks/targets.rb +51 -24
  551. data/rspec-mocks/upstream/lib/rspec/mocks/test_double.rb +42 -6
  552. data/rspec-mocks/upstream/lib/rspec/mocks/verifying_double.rb +15 -21
  553. data/rspec-mocks/upstream/lib/rspec/mocks/{verifying_message_expecation.rb → verifying_message_expectation.rb} +11 -18
  554. data/rspec-mocks/upstream/lib/rspec/mocks/verifying_proxy.rb +60 -11
  555. data/rspec-mocks/upstream/lib/rspec/mocks/version.rb +1 -1
  556. data/rspec-mocks/upstream/lib/rspec/mocks.rb +8 -1
  557. data/rspec-mocks/upstream/maintenance-branch +1 -1
  558. data/rspec-mocks/upstream/rspec-mocks.gemspec +14 -6
  559. data/rspec-mocks/upstream/script/ci_functions.sh +73 -0
  560. data/rspec-mocks/upstream/script/clone_all_rspec_repos +2 -2
  561. data/rspec-mocks/upstream/script/cucumber.sh +8 -0
  562. data/rspec-mocks/upstream/script/functions.sh +125 -89
  563. data/rspec-mocks/upstream/script/legacy_setup.sh +20 -0
  564. data/rspec-mocks/upstream/script/predicate_functions.sh +162 -0
  565. data/rspec-mocks/upstream/script/run_build +14 -9
  566. data/rspec-mocks/upstream/script/run_rubocop +14 -0
  567. data/rspec-mocks/upstream/script/update_rubygems_and_install_bundler +20 -0
  568. data/{stubs/diff/lcs/assertions.rb → rspec-mocks/upstream/tmp/.gitkeep} +0 -0
  569. data/rspec-support/upstream/.github/FUNDING.yml +5 -0
  570. data/rspec-support/upstream/.github/workflows/ci.yml +150 -0
  571. data/rspec-support/upstream/.gitignore +4 -0
  572. data/rspec-support/upstream/.rubocop.yml +33 -1
  573. data/rspec-support/upstream/.rubocop_rspec_base.yml +224 -38
  574. data/rspec-support/upstream/.rubocop_todo.yml +424 -0
  575. data/rspec-support/upstream/BUILD_DETAIL.md +149 -0
  576. data/rspec-support/upstream/CODE_OF_CONDUCT.md +59 -0
  577. data/rspec-support/upstream/CONTRIBUTING.md +86 -0
  578. data/rspec-support/upstream/Changelog.md +287 -0
  579. data/rspec-support/upstream/DEVELOPMENT.md +131 -0
  580. data/rspec-support/upstream/Gemfile +52 -4
  581. data/rspec-support/upstream/ISSUE_TEMPLATE.md +24 -0
  582. data/rspec-support/upstream/{LICENSE.txt → LICENSE.md} +3 -2
  583. data/rspec-support/upstream/README.md +29 -6
  584. data/rspec-support/upstream/REPORT_TEMPLATE.md +43 -0
  585. data/rspec-support/upstream/Rakefile +9 -5
  586. data/rspec-support/upstream/benchmarks/caller_vs_caller_locations.rb +19 -0
  587. data/rspec-support/upstream/benchmarks/caller_vs_caller_locations_vs_raise.rb +153 -0
  588. data/rspec-support/upstream/benchmarks/class_exec_vs_klass_exec.rb +43 -0
  589. data/rspec-support/upstream/benchmarks/map_hash.rb +70 -0
  590. data/rspec-support/upstream/benchmarks/ripper.rb +44 -0
  591. data/rspec-support/upstream/benchmarks/skip_frames_for_caller_filter.rb +27 -0
  592. data/rspec-support/upstream/lib/rspec/support/caller_filter.rb +35 -15
  593. data/rspec-support/upstream/lib/rspec/support/comparable_version.rb +46 -0
  594. data/rspec-support/upstream/lib/rspec/support/differ.rb +35 -34
  595. data/rspec-support/upstream/lib/rspec/support/directory_maker.rb +3 -1
  596. data/rspec-support/upstream/lib/rspec/support/encoded_string.rb +103 -11
  597. data/rspec-support/upstream/lib/rspec/support/fuzzy_matcher.rb +5 -5
  598. data/rspec-support/upstream/lib/rspec/support/matcher_definition.rb +11 -0
  599. data/rspec-support/upstream/lib/rspec/support/method_signature_verifier.rb +192 -26
  600. data/rspec-support/upstream/lib/rspec/support/mutex.rb +73 -0
  601. data/rspec-support/upstream/lib/rspec/support/object_formatter.rb +275 -0
  602. data/rspec-support/upstream/lib/rspec/support/recursive_const_methods.rb +1 -1
  603. data/rspec-support/upstream/lib/rspec/support/reentrant_mutex.rb +78 -0
  604. data/rspec-support/upstream/lib/rspec/support/ruby_features.rb +168 -15
  605. data/rspec-support/upstream/lib/rspec/support/source/location.rb +21 -0
  606. data/rspec-support/upstream/lib/rspec/support/source/node.rb +110 -0
  607. data/rspec-support/upstream/lib/rspec/support/source/token.rb +94 -0
  608. data/rspec-support/upstream/lib/rspec/support/source.rb +85 -0
  609. data/rspec-support/upstream/lib/rspec/support/spec/deprecation_helpers.rb +17 -29
  610. data/rspec-support/upstream/lib/rspec/support/spec/diff_helpers.rb +31 -0
  611. data/rspec-support/upstream/lib/rspec/support/spec/in_sub_process.rb +41 -17
  612. data/rspec-support/upstream/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  613. data/rspec-support/upstream/lib/rspec/support/spec/shell_out.rb +39 -3
  614. data/rspec-support/upstream/lib/rspec/support/spec/stderr_splitter.rb +27 -4
  615. data/rspec-support/upstream/lib/rspec/support/spec/string_matcher.rb +45 -0
  616. data/rspec-support/upstream/lib/rspec/support/spec/with_isolated_directory.rb +5 -1
  617. data/rspec-support/upstream/lib/rspec/support/spec.rb +17 -7
  618. data/rspec-support/upstream/lib/rspec/support/version.rb +1 -1
  619. data/rspec-support/upstream/lib/rspec/support/warnings.rb +3 -3
  620. data/rspec-support/upstream/lib/rspec/support/with_keywords_when_needed.rb +33 -0
  621. data/rspec-support/upstream/lib/rspec/support.rb +81 -3
  622. data/rspec-support/upstream/maintenance-branch +1 -1
  623. data/rspec-support/upstream/rspec-support.gemspec +10 -4
  624. data/rspec-support/upstream/script/ci_functions.sh +73 -0
  625. data/rspec-support/upstream/script/clone_all_rspec_repos +2 -2
  626. data/rspec-support/upstream/script/cucumber.sh +8 -0
  627. data/rspec-support/upstream/script/functions.sh +125 -89
  628. data/rspec-support/upstream/script/legacy_setup.sh +20 -0
  629. data/rspec-support/upstream/script/predicate_functions.sh +162 -0
  630. data/rspec-support/upstream/script/run_build +14 -9
  631. data/rspec-support/upstream/script/run_rubocop +14 -0
  632. data/rspec-support/upstream/script/update_rubygems_and_install_bundler +20 -0
  633. data/stubs/{diff/lcs/block.rb → coderay.rb} +0 -0
  634. data/stubs/{diff/lcs/callbacks.rb → drb/acl.rb} +0 -0
  635. data/stubs/{diff/lcs/change.rb → erb/version.rb} +0 -0
  636. data/stubs/{diff/lcs/hunk.rb → open3.rb} +0 -0
  637. data/stubs/{diff/lcs/internals.rb → psych.rb} +0 -0
  638. data/stubs/{optparse.rb → ripper.rb} +0 -0
  639. data/stubs/{prettyprint.rb → thread_order.rb} +0 -0
  640. data/tasks/testing.rake +7 -3
  641. metadata +270 -75
  642. data/gemfiles/.bundle/config +0 -2
  643. data/gemfiles/opal_0.11.gemfile +0 -14
  644. data/gemfiles/opal_master.gemfile +0 -14
  645. data/lib-opal/opal/rspec/async/core_ext.rb +0 -23
  646. data/lib-opal/opal/rspec/async/legacy.rb +0 -49
  647. data/lib-opal/opal/rspec/fixes/rspec/caller_filter.rb +0 -6
  648. data/lib-opal/opal/rspec/fixes/rspec/core/example.rb +0 -20
  649. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/backtrace_formatter.rb +0 -20
  650. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/console_codes.rb +0 -11
  651. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/generated_deprecation_message.rb +0 -15
  652. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/json_formatter.rb +0 -15
  653. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/failed_example_notification.rb +0 -20
  654. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/summary_notification.rb +0 -21
  655. data/lib-opal/opal/rspec/fixes/rspec/core/warnings.rb +0 -27
  656. data/lib-opal/opal/rspec/fixes/rspec/expectations/fail_with.rb +0 -21
  657. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/all.rb +0 -10
  658. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/compound.rb +0 -15
  659. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/yield.rb +0 -21
  660. data/lib-opal/opal/rspec/fixes/rspec/matchers/pretty.rb +0 -15
  661. data/lib-opal/opal/rspec/fixes/rspec/mocks/space.rb +0 -41
  662. data/lib-opal/opal/rspec/fixes/rspec/mocks/test_double.rb +0 -39
  663. data/lib-opal/opal/rspec/fixes/rspec/mocks/verifying_double.rb +0 -29
  664. data/lib-opal/opal/rspec/fixes/rspec/support/recursive_const_methods.rb +0 -7
  665. data/lib-opal/opal/rspec/fixes/rspec/support/spec/stderr_splitter.rb +0 -13
  666. data/lib-opal/opal/rspec/fixes/rspec/support/spec.rb +0 -1
  667. data/lib-opal/opal/rspec/fixes/rspec/support/warnings.rb +0 -16
  668. data/rspec/upstream/License.txt +0 -24
  669. data/rspec-core/upstream/.travis.yml +0 -35
  670. data/rspec-core/upstream/benchmarks/sort_by_v_shuffle.rb +0 -83
  671. data/rspec-core/upstream/features/Upgrade.md +0 -352
  672. data/rspec-core/upstream/lib/rspec/core/backport_random.rb +0 -336
  673. data/rspec-expectations/upstream/.travis.yml +0 -35
  674. data/rspec-expectations/upstream/lib/rspec/matchers/pretty.rb +0 -77
  675. data/rspec-mocks/upstream/.travis.yml +0 -35
  676. data/rspec-support/upstream/.travis.yml +0 -35
  677. data/rspec-support/upstream/lib/rspec/support/os.rb +0 -18
  678. data/rspec-support/upstream/lib/rspec/support/spec/prevent_load_time_warnings.rb +0 -44
  679. data/rspec-support/upstream/lib/rspec/support/version_checker.rb +0 -53
  680. data/stubs/shellwords.rb +0 -0
  681. data/stubs/uri.rb +0 -0
  682. data/vendor/spec_runner.js +0 -64
@@ -1,80 +1,236 @@
1
1
  Feature: Integrate with Minitest
2
2
 
3
- rspec-mocks is a stand-alone gem that can be integrated with any test framework. The
4
- example below demonstrates using rspec-mocks with [minitest](http://docs.seattlerb.org/minitest/), but these steps
5
- would apply when integrating rspec-mocks with any library or framework:
6
-
7
- * Include `RSpec::Mocks::ExampleMethods` in your test context. This provides rspec-mocks' API.
8
- * Call `RSpec::Mocks.setup` before a test begins.
9
- * Call `RSpec::Mocks.verify` after a test completes to verify message expectations. Note
10
- that this step is optional; rspec-core, for example, skips this when an example has already failed.
11
- * Call `RSpec::Mocks.teardown` after a test completes (and after `verify`) to cleanup. This
12
- _must_ be called, even if an error has occurred, so it generally goes in an `ensure` clause.
13
-
14
- Scenario: Use rspec-mocks with Minitest
15
- Given a file named "test/test_helper.rb" with:
3
+ To use rspec-mocks with minitest, simply require `rspec/mocks/minitest_integration`.
4
+
5
+ Scenario: Use rspec-mocks with Minitest::Test
6
+ Given a file named "test/rspec_mocks_test.rb" with:
16
7
  """ruby
17
8
  require 'minitest/autorun'
18
- require 'rspec/mocks'
9
+ require 'rspec/mocks/minitest_integration'
10
+
11
+ class RSpecMocksTest < Minitest::Test
12
+ def test_passing_positive_expectation
13
+ dbl = double
14
+ expect(dbl).to receive(:message)
15
+ dbl.message
16
+ end
17
+
18
+ def test_failing_positive_expectation
19
+ dbl = double
20
+ expect(dbl).to receive(:message)
21
+ end
22
+
23
+ def test_passing_negative_expectation
24
+ dbl = double
25
+ expect(dbl).to_not receive(:message)
26
+ end
27
+
28
+ def test_failing_negative_expectation
29
+ dbl = double
30
+ expect(dbl).to_not receive(:message)
31
+ dbl.message
32
+ end
19
33
 
20
- module MinitestRSpecMocksIntegration
21
- include ::RSpec::Mocks::ExampleMethods
34
+ def test_passing_positive_spy_expectation
35
+ bond = spy
36
+ bond.james
37
+ expect(bond).to have_received(:james)
38
+ end
39
+
40
+ def test_failing_positive_spy_expectation
41
+ bond = spy
42
+ expect(bond).to have_received(:james)
43
+ end
22
44
 
23
- def before_setup
24
- ::RSpec::Mocks.setup
25
- super
45
+ def test_passing_negative_spy_expectation
46
+ bond = spy
47
+ expect(bond).not_to have_received(:james)
26
48
  end
27
49
 
28
- def after_teardown
29
- super
30
- ::RSpec::Mocks.verify
31
- ensure
32
- ::RSpec::Mocks.teardown
50
+ def test_failing_negative_spy_expectation
51
+ bond = spy
52
+ bond.james
53
+ expect(bond).not_to have_received(:james)
33
54
  end
34
55
  end
56
+ """
57
+ When I run `ruby test/rspec_mocks_test.rb --seed 0`
58
+ Then it should fail with the following output:
59
+ | 1) Failure: |
60
+ | RSpecMocksTest#test_failing_positive_expectation |
61
+ | (Double (anonymous)).message(*(any args)) |
62
+ | expected: 1 time with any arguments |
63
+ | received: 0 times with any arguments |
64
+ | |
65
+ | 2) Failure: |
66
+ | RSpecMocksTest#test_failing_negative_expectation |
67
+ | (Double (anonymous)).message(no args) |
68
+ | expected: 0 times with any arguments |
69
+ | received: 1 time |
70
+ | |
71
+ | 3) Failure: |
72
+ | RSpecMocksTest#test_failing_positive_spy_expectation |
73
+ | (Double (anonymous)).james(*(any args)) |
74
+ | expected: 1 time with any arguments |
75
+ | received: 0 times with any arguments |
76
+ | |
77
+ | 4) Failure: |
78
+ | RSpecMocksTest#test_failing_negative_spy_expectation |
79
+ | (Double (anonymous)).james(no args) |
80
+ | expected: 0 times with any arguments |
81
+ | received: 1 time |
82
+ | |
83
+ | 8 runs, 0 assertions, 4 failures, 0 errors, 0 skips |
84
+
85
+ Scenario: Use rspec-mocks with Minitest::Spec
86
+ Given a file named "spec/rspec_mocks_spec.rb" with:
87
+ """ruby
88
+ require 'minitest/autorun'
89
+ require 'minitest/spec'
90
+ require 'rspec/mocks/minitest_integration'
35
91
 
36
- Minitest::Test.send(:include, MinitestRSpecMocksIntegration)
92
+ describe "Minitest Spec integration" do
93
+ it 'passes a positive expectation' do
94
+ dbl = double
95
+ expect(dbl).to receive(:message)
96
+ dbl.message
97
+ end
98
+
99
+ it 'fails a positive expectation' do
100
+ dbl = double
101
+ expect(dbl).to receive(:message)
102
+ end
103
+
104
+ it 'passes a negative expectation (using to_not)' do
105
+ dbl = double
106
+ expect(dbl).to_not receive(:message)
107
+ end
108
+
109
+ it 'fails a negative expectation (using not_to)' do
110
+ dbl = double
111
+ expect(dbl).not_to receive(:message)
112
+ dbl.message
113
+ end
114
+ end
37
115
  """
38
- And a file named "test/rspec_mocks_test.rb" with:
116
+ When I run `ruby spec/rspec_mocks_spec.rb --seed 0`
117
+ Then it should fail with the following output:
118
+ | 1) Failure: |
119
+ | Minitest Spec integration#test_0002_fails a positive expectation |
120
+ | (Double (anonymous)).message(*(any args)) |
121
+ | expected: 1 time with any arguments |
122
+ | received: 0 times with any arguments |
123
+ | |
124
+ | 2) Failure: |
125
+ | Minitest Spec integration#test_0004_fails a negative expectation (using not_to) |
126
+ | (Double (anonymous)).message(no args) |
127
+ | expected: 0 times with any arguments |
128
+ | received: 1 time |
129
+ | |
130
+ | 4 runs, 4 assertions, 2 failures, 0 errors, 0 skips |
131
+
132
+ Scenario: Load rspec-mocks before rspec-expectations, with Minitest::Spec
133
+ Given a file named "spec/rspec_mocks_spec.rb" with:
39
134
  """ruby
40
- require 'test_helper'
135
+ require 'minitest/autorun'
136
+ require 'minitest/spec'
137
+ require 'rspec/mocks/minitest_integration'
138
+ require 'rspec/expectations/minitest_integration'
41
139
 
42
- class RSpecMocksTest < Minitest::Test
43
- def test_passing_positive_expectation
140
+ describe "Minitest Spec integration" do
141
+ it 'passes a positive expectation' do
44
142
  dbl = double
45
143
  expect(dbl).to receive(:message)
46
144
  dbl.message
47
145
  end
48
146
 
49
- def test_failing_positive_expectation
147
+ it 'fails a positive expectation' do
50
148
  dbl = double
51
149
  expect(dbl).to receive(:message)
52
150
  end
53
151
 
54
- def test_passing_negative_expectation
152
+ it 'passes a negative expectation (using to_not)' do
55
153
  dbl = double
56
154
  expect(dbl).to_not receive(:message)
57
155
  end
58
156
 
59
- def test_failing_negative_expectation
157
+ it 'fails a negative expectation (using not_to)' do
158
+ dbl = double
159
+ expect(dbl).not_to receive(:message)
160
+ dbl.message
161
+ end
162
+
163
+ it 'can use both minitest and rspec expectations' do
164
+ expect(1 + 3).must_equal 4
165
+ expect(1 + 3).to eq 4
166
+ end
167
+ end
168
+ """
169
+ When I run `ruby spec/rspec_mocks_spec.rb --seed 0`
170
+ Then it should fail with the following output:
171
+ | 1) Failure: |
172
+ | Minitest Spec integration#test_0002_fails a positive expectation |
173
+ | (Double (anonymous)).message(*(any args)) |
174
+ | expected: 1 time with any arguments |
175
+ | received: 0 times with any arguments |
176
+ | |
177
+ | 2) Failure: |
178
+ | Minitest Spec integration#test_0004_fails a negative expectation (using not_to) |
179
+ | (Double (anonymous)).message(no args) |
180
+ | expected: 0 times with any arguments |
181
+ | received: 1 time |
182
+ | |
183
+ | 5 runs, 6 assertions, 2 failures, 0 errors, 0 skips |
184
+
185
+ Scenario: Load rspec-mocks after rspec-expectations, with Minitest::Spec
186
+ Given a file named "spec/rspec_mocks_spec.rb" with:
187
+ """ruby
188
+ require 'minitest/autorun'
189
+ require 'minitest/spec'
190
+ require 'rspec/expectations/minitest_integration'
191
+ require 'rspec/mocks/minitest_integration'
192
+
193
+ describe "Minitest Spec integration" do
194
+ it 'passes a positive expectation' do
195
+ dbl = double
196
+ expect(dbl).to receive(:message)
197
+ dbl.message
198
+ end
199
+
200
+ it 'fails a positive expectation' do
201
+ dbl = double
202
+ expect(dbl).to receive(:message)
203
+ end
204
+
205
+ it 'passes a negative expectation (using to_not)' do
60
206
  dbl = double
61
207
  expect(dbl).to_not receive(:message)
208
+ end
209
+
210
+ it 'fails a negative expectation (using not_to)' do
211
+ dbl = double
212
+ expect(dbl).not_to receive(:message)
62
213
  dbl.message
63
214
  end
215
+
216
+ it 'can use both minitest and rspec expectations' do
217
+ expect(1 + 3).must_equal 4
218
+ expect(1 + 3).to eq 4
219
+ end
64
220
  end
65
221
  """
66
- When I run `ruby -Itest test/rspec_mocks_test.rb`
222
+ When I run `ruby spec/rspec_mocks_spec.rb --seed 0`
67
223
  Then it should fail with the following output:
68
- | 1) Error: |
69
- | RSpecMocksTest#test_failing_negative_expectation: |
70
- | RSpec::Mocks::MockExpectationError: (Double).message(no args) |
71
- | expected: 0 times with any arguments |
72
- | received: 1 time |
73
- | |
74
- | 2) Error: |
75
- | RSpecMocksTest#test_failing_positive_expectation: |
76
- | RSpec::Mocks::MockExpectationError: (Double).message(any args) |
77
- | expected: 1 time with any arguments |
78
- | received: 0 times with any arguments |
79
- | |
80
- | 4 runs, 0 assertions, 0 failures, 2 errors, 0 skips |
224
+ | 1) Failure: |
225
+ | Minitest Spec integration#test_0002_fails a positive expectation |
226
+ | (Double (anonymous)).message(*(any args)) |
227
+ | expected: 1 time with any arguments |
228
+ | received: 0 times with any arguments |
229
+ | |
230
+ | 2) Failure: |
231
+ | Minitest Spec integration#test_0004_fails a negative expectation (using not_to) |
232
+ | (Double (anonymous)).message(no args) |
233
+ | expected: 0 times with any arguments |
234
+ | received: 1 time |
235
+ | |
236
+ | 5 runs, 6 assertions, 2 failures, 0 errors, 0 skips |
@@ -1,7 +1,7 @@
1
1
  Feature: Standalone
2
2
 
3
3
  `require "rspec/mocks/standalone"` to expose the API at the top level (e.g. `main`) outside
4
- the RSpec environment. This is especially useful for exploring rspec-mocks in irb.
4
+ the RSpec environment in a REPL like IRB or in a one-off script.
5
5
 
6
6
  Scenario: Allow a message outside RSpec
7
7
  Given a file named "example.rb" with:
@@ -27,7 +27,7 @@ Feature: Standalone
27
27
  """
28
28
  When I run `ruby example.rb`
29
29
  Then it should fail with the following output:
30
- | (Double "greeter").say_hi(any args) |
31
- | RSpec::Mocks::MockExpectationError |
32
- | expected: 1 time with any arguments |
33
- | received: 0 times with any arguments |
30
+ | (Double "greeter").say_hi(*(any args)) |
31
+ | RSpec::Mocks::MockExpectationError |
32
+ | expected: 1 time with any arguments |
33
+ | received: 0 times with any arguments |
@@ -4,21 +4,23 @@ Feature: Matching arguments
4
4
  will only be satisfied when called with matching arguments. A canned response for an
5
5
  [allowed message](../basics/allowing-messages) will only be used when the arguments match.
6
6
 
7
- | To match... | ...use an expression like: | ...which matches calls like: |
8
- | --------------------------------------------------- | ------------------------------- | ------------------------------------- |
9
- | Literal arguments | `with(1, true)` | `foo(1, true)` |
10
- | Anything that supports case equality (`===`) | `with(/bar/)` | `foo("barn")` |
11
- | Any list of args | `with(any_args)` | `foo()`<br>`foo(1)`<br>`foo(:bar, 2)` |
12
- | An empty list of args | `with(no_args)` | `foo()` |
13
- | Anything for a given positional arg | `with(3, anything)` | `foo(3, nil)`<br>`foo(3, :bar)` |
14
- | Against an interface | `with(duck_type(:each))` | `foo([])` |
15
- | A boolean | `with(3, boolean)` | `foo(3, true)`<br>`foo(3, false)` |
16
- | A subset of a hash | `with(hash_including(:a => 1))` | `foo(:a => 1, :b => 2)` |
17
- | An excluded subset of a hash | `with(hash_excluding(:a => 1))` | `foo(:b => 2)` |
18
- | A subset of an array | `with(array_including(:a, :b))` | `foo([:a, :b, :c])` |
19
- | An instance of a specific class | `with(instance_of(Fixnum))` | `foo(3)` |
20
- | An object with a given module in its ancestors list | `with(kind_of(Numeric))` | `foo(3)` |
21
- | Any RSpec matcher | `with(<matcher>)` | `foo(<object that matches>)` |
7
+ | To match... | ...use an expression like: | ...which matches calls like: |
8
+ | --------------------------------------------------- | --------------------------------- | ------------------------------------- |
9
+ | Literal arguments | `with(1, true)` | `foo(1, true)` |
10
+ | Anything that supports case equality (`===`) | `with(/bar/)` | `foo("barn")` |
11
+ | Any list of args | `with(any_args)` | `foo()`<br>`foo(1)`<br>`foo(:bar, 2)` |
12
+ | Any sublist of args (like an arg splat) | `with(1, any_args)` | `foo(1)`<br>`foo(1, :bar, :bazz)` |
13
+ | An empty list of args | `with(no_args)` | `foo()` |
14
+ | Anything for a given positional arg | `with(3, anything)` | `foo(3, nil)`<br>`foo(3, :bar)` |
15
+ | Against an interface | `with(duck_type(:each))` | `foo([])` |
16
+ | A boolean | `with(3, boolean)` | `foo(3, true)`<br>`foo(3, false)` |
17
+ | A subset of a hash | `with(hash_including(:a => 1))` | `foo(:a => 1, :b => 2)` |
18
+ | An excluded subset of a hash | `with(hash_excluding(:a => 1))` | `foo(:b => 2)` |
19
+ | A subset of an array | `with(array_including(:a, :b))` | `foo([:a, :b, :c])` |
20
+ | An instance of a specific class | `with(instance_of(Integer))` | `foo(3)` |
21
+ | An object with a given module in its ancestors list | `with(kind_of(Numeric))` | `foo(3)` |
22
+ | An object with matching attributes | `with(having_attributes(:a => 1))` | `foo(:a => 1, :b => 2)` |
23
+ | Any RSpec matcher | `with(<matcher>)` | `foo(<object that matches>)` |
22
24
 
23
25
  Scenario: Basic example
24
26
  Given a file named "basic_example_spec.rb" with:
@@ -38,12 +40,37 @@ Feature: Matching arguments
38
40
  """
39
41
  When I run `rspec basic_example_spec.rb`
40
42
  Then it should fail with the following output:
41
- | 2 examples, 1 failure |
42
- | |
43
- | Failure/Error: dbl.foo(1, nil, "other") |
44
- | Double received :foo with unexpected arguments |
45
- | expected: (1, anything, /bar/) |
46
- | got: (1, nil, "other") |
43
+ | 2 examples, 1 failure |
44
+ | |
45
+ | Failure/Error: dbl.foo(1, nil, "other") |
46
+ | #<Double (anonymous)> received :foo with unexpected arguments |
47
+ | expected: (1, anything, /bar/) |
48
+ | got: (1, nil, "other") |
49
+
50
+ Scenario: Using a RSpec matcher
51
+ Given a file named "rspec_matcher_spec.rb" with:
52
+ """ruby
53
+ RSpec.describe "Using a RSpec matcher" do
54
+ let(:dbl) { double }
55
+ before { expect(dbl).to receive(:foo).with(a_collection_containing_exactly(1, 2)) }
56
+
57
+ it "passes when the args match" do
58
+ dbl.foo([2, 1])
59
+ end
60
+
61
+ it "fails when the args do not match" do
62
+ dbl.foo([1, 3])
63
+ end
64
+ end
65
+ """
66
+ When I run `rspec rspec_matcher_spec.rb`
67
+ Then it should fail with the following output:
68
+ | 2 examples, 1 failure |
69
+ | |
70
+ | Failure/Error: dbl.foo([1, 3]) |
71
+ | #<Double (anonymous)> received :foo with unexpected arguments |
72
+ | expected: (a collection containing exactly 1 and 2) |
73
+ | got: ([1, 3]) |
47
74
 
48
75
  Scenario: Using a custom matcher
49
76
  Given a file named "custom_matcher_spec.rb" with:
@@ -67,12 +94,12 @@ Feature: Matching arguments
67
94
  """
68
95
  When I run `rspec custom_matcher_spec.rb`
69
96
  Then it should fail with the following output:
70
- | 2 examples, 1 failure |
71
- | |
72
- | Failure/Error: dbl.foo(13) |
73
- | Double received :foo with unexpected arguments |
74
- | expected: (a multiple of 3) |
75
- | got: (13) |
97
+ | 2 examples, 1 failure |
98
+ | |
99
+ | Failure/Error: dbl.foo(13) |
100
+ | #<Double (anonymous)> received :foo with unexpected arguments |
101
+ | expected: (a multiple of 3) |
102
+ | got: (13) |
76
103
 
77
104
  Scenario: Responding differently based on the arguments
78
105
  Given a file named "responding_differently_spec.rb" with:
@@ -56,8 +56,8 @@ Feature: Message Order
56
56
  Then the examples should all fail, producing the following output:
57
57
  | 1) Constraining order fails when messages are received out of order on one collaborator |
58
58
  | Failure/Error: collaborator_1.step_2 |
59
- | Double "Collaborator 1" received :step_2 out of order |
59
+ | #<Double "Collaborator 1"> received :step_2 out of order |
60
60
  | |
61
61
  | 2) Constraining order fails when messages are received out of order between collaborators |
62
62
  | Failure/Error: collaborator_2.step_2 |
63
- | Double "Collaborator 2" received :step_2 out of order |
63
+ | #<Double "Collaborator 2"> received :step_2 out of order |
@@ -5,12 +5,15 @@ Feature: Receive Counts
5
5
 
6
6
  * `expect(...).to receive(...).once`
7
7
  * `expect(...).to receive(...).twice`
8
+ * `expect(...).to receive(...).exactly(n).time`
8
9
  * `expect(...).to receive(...).exactly(n).times`
9
10
  * `expect(...).to receive(...).at_least(:once)`
10
11
  * `expect(...).to receive(...).at_least(:twice)`
12
+ * `expect(...).to receive(...).at_least(n).time`
11
13
  * `expect(...).to receive(...).at_least(n).times`
12
14
  * `expect(...).to receive(...).at_most(:once)`
13
15
  * `expect(...).to receive(...).at_most(:twice)`
16
+ * `expect(...).to receive(...).at_most(n).time`
14
17
  * `expect(...).to receive(...).at_most(n).times`
15
18
 
16
19
  If you don't specify an expected receive count, it defaults to `once`.
@@ -49,6 +52,11 @@ Feature: Receive Counts
49
52
  account.open
50
53
  end
51
54
 
55
+ example "exactly(n).time" do
56
+ expect(logger).to receive(:account_opened).exactly(1).time
57
+ account.open
58
+ end
59
+
52
60
  example "exactly(n).times" do
53
61
  expect(logger).to receive(:account_opened).exactly(3).times
54
62
  account.open
@@ -69,6 +77,11 @@ Feature: Receive Counts
69
77
  account.open
70
78
  end
71
79
 
80
+ example "at_least(n).time" do
81
+ expect(logger).to receive(:account_opened).at_least(1).time
82
+ account.open
83
+ end
84
+
72
85
  example "at_least(n).times" do
73
86
  expect(logger).to receive(:account_opened).at_least(3).times
74
87
  account.open
@@ -86,6 +99,11 @@ Feature: Receive Counts
86
99
  account.open
87
100
  end
88
101
 
102
+ example "at_most(n).time" do
103
+ expect(logger).to receive(:account_opened).at_most(1).time
104
+ account.open
105
+ end
106
+
89
107
  example "at_most(n).times" do
90
108
  expect(logger).to receive(:account_opened).at_most(3).times
91
109
  account.open
@@ -1,10 +1,10 @@
1
1
  Then /^the example(?:s)? should(?: all)? pass$/ do
2
- step %q{the output should contain "0 failures"}
3
- step %q{the exit status should be 0}
2
+ step %q(the output should contain "0 failures")
3
+ step %q(the exit status should be 0)
4
4
  end
5
5
 
6
6
  Then /^the examples should all fail, producing the following output:$/ do |table|
7
- step %q{the exit status should be 1}
7
+ step %q(the exit status should be 1)
8
8
  examples, failures = all_output.match(/(\d+) examples?, (\d+) failures?/).captures.map(&:to_i)
9
9
 
10
10
  expect(examples).to be > 0
@@ -15,7 +15,7 @@ Then /^the examples should all fail, producing the following output:$/ do |table
15
15
  end
16
16
 
17
17
  Then /^it should fail with the following output:$/ do |table|
18
- step %q{the exit status should be 1}
18
+ step %q(the exit status should be 1)
19
19
  lines = table.raw.flatten.reject(&:empty?)
20
20
  expect(all_output).to include(*lines)
21
21
  end
@@ -3,8 +3,9 @@
3
3
 
4
4
  if defined?(Cucumber)
5
5
  require 'shellwords'
6
- Before('~@allow-old-syntax') do
7
- set_env('SPEC_OPTS', "-r#{Shellwords.escape(__FILE__)}")
6
+ tag = !defined?(::RUBY_ENGINE_VERSION) || (::RUBY_ENGINE_VERSION < '2.0.0') ? '~@allow-old-syntax' : 'not @allow-old-syntax'
7
+ Before(tag) do
8
+ set_environment_variable('SPEC_OPTS', "-r#{Shellwords.escape(__FILE__)}")
8
9
  end
9
10
  else
10
11
  module DisallowOneLinerShould
@@ -1,22 +1,22 @@
1
1
  require 'aruba/cucumber'
2
2
  require 'rspec/expectations'
3
3
 
4
- Before do
5
- if RUBY_PLATFORM =~ /java/ || defined?(Rubinius)
6
- @aruba_timeout_seconds = 60
4
+ Aruba.configure do |config|
5
+ if RUBY_PLATFORM =~ /java/ || defined?(Rubinius) || (defined?(RUBY_ENGINE) && RUBY_ENGINE == 'truffleruby')
6
+ config.exit_timeout = 60
7
7
  else
8
- @aruba_timeout_seconds = 5
8
+ config.exit_timeout = 5
9
9
  end
10
10
  end
11
11
 
12
- Aruba.configure do |config|
13
- config.before_cmd do |cmd|
14
- set_env('JRUBY_OPTS', "-X-C #{ENV['JRUBY_OPTS']}") # disable JIT since these processes are so short lived
12
+ Before do
13
+ if RUBY_PLATFORM == 'java'
14
+ # disable JIT since these processes are so short lived
15
+ set_environment_variable('JRUBY_OPTS', "-X-C #{ENV['JRUBY_OPTS']}")
15
16
  end
16
- end if RUBY_PLATFORM == 'java'
17
17
 
18
- Aruba.configure do |config|
19
- config.before_cmd do |cmd|
20
- set_env('RBXOPT', "-Xint=true #{ENV['RBXOPT']}") # disable JIT since these processes are so short lived
18
+ if defined?(Rubinius)
19
+ # disable JIT since these processes are so short lived
20
+ set_environment_variable('RBXOPT', "-Xint=true #{ENV['RBXOPT']}")
21
21
  end
22
- end if defined?(Rubinius)
22
+ end
@@ -1,6 +1,6 @@
1
1
  # Required until https://github.com/rubinius/rubinius/issues/2430 is resolved
2
2
  ENV['RBXOPT'] = "#{ENV["RBXOPT"]} -Xcompiler.no_rbc"
3
3
 
4
- Around "@unsupported-on-rbx" do |scenario, block|
4
+ Around "@unsupported-on-rbx" do |_scenario, block|
5
5
  block.call unless defined?(Rubinius)
6
6
  end
@@ -1,7 +1,7 @@
1
1
  Verifying doubles are a stricter alternative to [normal doubles](./basics/test-doubles) that provide guarantees about
2
2
  what is being verified. When using verifying doubles, RSpec will check that the methods
3
3
  being stubbed are actually present on the underlying object if it is available. Prefer using
4
- veryifing doubles over normal doubles.
4
+ verifying doubles over normal doubles.
5
5
 
6
6
  No checking will happen if the underlying object or class is not defined, but when run with
7
7
  it present (either as a full spec run or by explicitly preloading collaborators) a failure will be
@@ -10,4 +10,4 @@ number of arguments.
10
10
 
11
11
  This dual approach allows you to move very quickly and test components in isolation, while
12
12
  giving you confidence that your doubles are not a complete fiction. Testing in isolation is
13
- optional but recommend for classes that do not depend on third-party components.
13
+ optional but recommended for classes that do not depend on third-party components.
@@ -67,4 +67,4 @@ Feature: Using a class double
67
67
  """
68
68
  When I run `rspec spec/user_spec.rb`
69
69
  Then the output should contain "1 example, 1 failure"
70
- And the output should contain "ConsoleNotifier does not implement:"
70
+ And the output should contain "the ConsoleNotifier class does not implement the class method:"
@@ -2,13 +2,16 @@ Feature: Dynamic classes
2
2
 
3
3
  Verifying instance doubles do not support methods which the class reports to not exist
4
4
  since an actual instance of the class would be required to verify against. This is commonly
5
- the case when `method_missing` is used. For example, `ActiveRecord` does this to define
6
- methods from database columns.
5
+ the case when `method_missing` is used.
7
6
 
8
7
  There are a few ways to work around this. If the object has already been loaded you may
9
- consider using an [`object_double`](./using-an-object-double), but that cannot work if you
10
- are testing in isolation. Alternatively you could implement the methods directly (calling
11
- `super` to return the `method_missing` definition).
8
+ consider using an [`object_double`](./using-an-object-double), but that cannot work if you are testing in isolation.
9
+ Alternatively you could implement the methods directly (calling `super` to return the `method_missing` definition).
10
+
11
+ Some of these classes may have methods to define these methods on the objects at runtime.
12
+ (For example, `ActiveRecord` does this to define methods from database columns.) For these
13
+ cases we provide an API which can be used to customise verifying doubles on creation. We
14
+ use this ourselves in `rspec-rails` to set up some niceties for you.
12
15
 
13
16
  These types of methods are supported at class level (with `class_double`) however, since
14
17
  `respond_to?` can be queried directly on the class.
@@ -30,6 +33,12 @@ Feature: Dynamic classes
30
33
  super
31
34
  end
32
35
  end
36
+
37
+ def self.define_attribute_methods
38
+ COLUMNS.each do |name|
39
+ define_method(name) { instance_variable_get("@#{name}") }
40
+ end
41
+ end
33
42
  end
34
43
  """
35
44
 
@@ -71,3 +80,30 @@ Feature: Dynamic classes
71
80
 
72
81
  When I run `rspec spec/user_spec.rb`
73
82
  Then the examples should all pass
83
+
84
+ Scenario: workaround using callback
85
+
86
+ Given a file named "lib/user.rb" with:
87
+ """ruby
88
+ require 'fake_active_record'
89
+
90
+ class User < FakeActiveRecord
91
+ end
92
+ """
93
+ And a file named "spec/fake_record_helper.rb" with:
94
+ """ruby
95
+ RSpec.configuration.mock_with(:rspec) do |config|
96
+ config.before_verifying_doubles do |reference|
97
+ reference.target.define_attribute_methods
98
+ end
99
+ end
100
+ #
101
+ # or you can use:
102
+ #
103
+ # RSpec::Mocks.configuration.before_verifying_doubles do |reference|
104
+ # reference.target.define_attribute_methods
105
+ # end
106
+ """
107
+
108
+ When I run `rspec -r fake_record_helper spec/user_spec.rb`
109
+ Then the examples should all pass