opal-connect-rspec 0.5.0

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 (685) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.gitmodules +15 -0
  4. data/.travis.yml +51 -0
  5. data/.yardopts +5 -0
  6. data/CHANGELOG.md +54 -0
  7. data/Gemfile +19 -0
  8. data/README.md +325 -0
  9. data/Rakefile +169 -0
  10. data/config.ru +15 -0
  11. data/example/Gemfile +4 -0
  12. data/example/README.md +13 -0
  13. data/example/Rakefile +8 -0
  14. data/example/opal/user.rb +11 -0
  15. data/example/spec/user_spec.rb +15 -0
  16. data/gemfiles/opal_master.gemfile +18 -0
  17. data/lib/opal-rspec.rb +2 -0
  18. data/lib/opal/rspec.rb +39 -0
  19. data/lib/opal/rspec/cached_environment.rb +25 -0
  20. data/lib/opal/rspec/post_rack_locator.rb +20 -0
  21. data/lib/opal/rspec/pre_rack_locator.rb +32 -0
  22. data/lib/opal/rspec/rake_task.rb +132 -0
  23. data/lib/opal/rspec/sprockets_environment.rb +37 -0
  24. data/lib/opal/rspec/version.rb +5 -0
  25. data/opal-rspec.gemspec +21 -0
  26. data/opal/opal-rspec.rb +1 -0
  27. data/opal/opal/rspec.rb +23 -0
  28. data/opal/opal/rspec/async.rb +5 -0
  29. data/opal/opal/rspec/async/async_example.rb +96 -0
  30. data/opal/opal/rspec/async/example_group.rb +96 -0
  31. data/opal/opal/rspec/async/hooks.rb +10 -0
  32. data/opal/opal/rspec/async/legacy.rb +50 -0
  33. data/opal/opal/rspec/async/reporter.rb +9 -0
  34. data/opal/opal/rspec/fixes.rb +5 -0
  35. data/opal/opal/rspec/fixes/opal.rb +5 -0
  36. data/opal/opal/rspec/fixes/opal/class.rb +8 -0
  37. data/opal/opal/rspec/fixes/opal/compatibility.rb +228 -0
  38. data/opal/opal/rspec/fixes/opal/corelib.rb +3 -0
  39. data/opal/opal/rspec/fixes/opal/corelib/error.rb +61 -0
  40. data/opal/opal/rspec/fixes/opal/corelib/regexp.rb +92 -0
  41. data/opal/opal/rspec/fixes/opal/corelib/struct.rb +260 -0
  42. data/opal/opal/rspec/fixes/opal/kernel.rb +80 -0
  43. data/opal/opal/rspec/fixes/opal/stdlib.rb +2 -0
  44. data/opal/opal/rspec/fixes/opal/stdlib/pp.rb +23 -0
  45. data/opal/opal/rspec/fixes/opal/stdlib/set.rb +36 -0
  46. data/opal/opal/rspec/fixes/rspec.rb +7 -0
  47. data/opal/opal/rspec/fixes/rspec/caller_filter.rb +6 -0
  48. data/opal/opal/rspec/fixes/rspec/core.rb +9 -0
  49. data/opal/opal/rspec/fixes/rspec/core/configuration.rb +11 -0
  50. data/opal/opal/rspec/fixes/rspec/core/example.rb +20 -0
  51. data/opal/opal/rspec/fixes/rspec/core/example_group.rb +9 -0
  52. data/opal/opal/rspec/fixes/rspec/core/formatters.rb +6 -0
  53. data/opal/opal/rspec/fixes/rspec/core/formatters/backtrace_formatter.rb +20 -0
  54. data/opal/opal/rspec/fixes/rspec/core/formatters/console_codes.rb +11 -0
  55. data/opal/opal/rspec/fixes/rspec/core/formatters/deprecation_formatter.rb +20 -0
  56. data/opal/opal/rspec/fixes/rspec/core/formatters/generated_deprecation_message.rb +15 -0
  57. data/opal/opal/rspec/fixes/rspec/core/formatters/json_formatter.rb +10 -0
  58. data/opal/opal/rspec/fixes/rspec/core/formatters/loader.rb +38 -0
  59. data/opal/opal/rspec/fixes/rspec/core/metadata.rb +39 -0
  60. data/opal/opal/rspec/fixes/rspec/core/notifications.rb +3 -0
  61. data/opal/opal/rspec/fixes/rspec/core/notifications/examples_notification.rb +30 -0
  62. data/opal/opal/rspec/fixes/rspec/core/notifications/failed_example_notification.rb +20 -0
  63. data/opal/opal/rspec/fixes/rspec/core/notifications/summary_notification.rb +26 -0
  64. data/opal/opal/rspec/fixes/rspec/core/ordering.rb +1 -0
  65. data/opal/opal/rspec/fixes/rspec/core/ordering/random.rb +13 -0
  66. data/opal/opal/rspec/fixes/rspec/core/reporter.rb +14 -0
  67. data/opal/opal/rspec/fixes/rspec/core/warnings.rb +18 -0
  68. data/opal/opal/rspec/fixes/rspec/example_groups.rb +49 -0
  69. data/opal/opal/rspec/fixes/rspec/expectations.rb +2 -0
  70. data/opal/opal/rspec/fixes/rspec/expectations/fail_with.rb +21 -0
  71. data/opal/opal/rspec/fixes/rspec/expectations/syntax.rb +25 -0
  72. data/opal/opal/rspec/fixes/rspec/matchers.rb +2 -0
  73. data/opal/opal/rspec/fixes/rspec/matchers/built_in.rb +4 -0
  74. data/opal/opal/rspec/fixes/rspec/matchers/built_in/all.rb +10 -0
  75. data/opal/opal/rspec/fixes/rspec/matchers/built_in/compound.rb +15 -0
  76. data/opal/opal/rspec/fixes/rspec/matchers/built_in/start_and_end_with.rb +42 -0
  77. data/opal/opal/rspec/fixes/rspec/matchers/built_in/yield.rb +21 -0
  78. data/opal/opal/rspec/fixes/rspec/matchers/pretty.rb +15 -0
  79. data/opal/opal/rspec/fixes/rspec/mocks.rb +4 -0
  80. data/opal/opal/rspec/fixes/rspec/mocks/error_generator.rb +40 -0
  81. data/opal/opal/rspec/fixes/rspec/mocks/space.rb +37 -0
  82. data/opal/opal/rspec/fixes/rspec/mocks/test_double.rb +39 -0
  83. data/opal/opal/rspec/fixes/rspec/mocks/verifying_double.rb +29 -0
  84. data/opal/opal/rspec/fixes/rspec/support.rb +4 -0
  85. data/opal/opal/rspec/fixes/rspec/support/encoded_string.rb +10 -0
  86. data/opal/opal/rspec/fixes/rspec/support/fuzzy_matcher.rb +23 -0
  87. data/opal/opal/rspec/fixes/rspec/support/recursive_const_methods.rb +7 -0
  88. data/opal/opal/rspec/fixes/rspec/support/ruby_features.rb +8 -0
  89. data/opal/opal/rspec/fixes/rspec/support/warnings.rb +18 -0
  90. data/opal/opal/rspec/formatter/browser_formatter.rb +38 -0
  91. data/opal/opal/rspec/formatter/document_io.rb +27 -0
  92. data/opal/opal/rspec/formatter/element.rb +100 -0
  93. data/opal/opal/rspec/formatter/html_printer.rb +121 -0
  94. data/opal/opal/rspec/formatter/noop_flush_string_io.rb +9 -0
  95. data/opal/opal/rspec/formatter/opal_closed_tty_io.rb +27 -0
  96. data/opal/opal/rspec/pre_require_fixes.rb +11 -0
  97. data/opal/opal/rspec/requires.rb +145 -0
  98. data/opal/opal/rspec/runner.rb +91 -0
  99. data/opal/opal/rspec/spec_opts.rb.erb +28 -0
  100. data/opal/opal/rspec/sprockets_runner.rb.erb +13 -0
  101. data/rspec-core/benchmarks/call_v_yield.rb +81 -0
  102. data/rspec-core/benchmarks/check_inclusion.rb +125 -0
  103. data/rspec-core/benchmarks/define_method_v_attr_reader_v_def.rb +81 -0
  104. data/rspec-core/benchmarks/eager_vs_lazy_metadata.rb +126 -0
  105. data/rspec-core/benchmarks/eager_vs_lazy_metadata/define_examples.rb +22 -0
  106. data/rspec-core/benchmarks/filter_object.rb +35 -0
  107. data/rspec-core/benchmarks/index_v_take_while.rb +47 -0
  108. data/rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb +94 -0
  109. data/rspec-core/benchmarks/require_relative_v_require.rb +75 -0
  110. data/rspec-core/benchmarks/respond_to_v_defined.rb +72 -0
  111. data/rspec-core/benchmarks/several_regexps_v_one_big_one.rb +86 -0
  112. data/rspec-core/benchmarks/sort_by_v_shuffle.rb +83 -0
  113. data/rspec-core/benchmarks/to_proc_v_not_to_proc.rb +539 -0
  114. data/rspec-core/features/step_definitions/additional_cli_steps.rb +126 -0
  115. data/rspec-core/features/step_definitions/core_standalone_steps.rb +12 -0
  116. data/rspec-core/features/support/env.rb +21 -0
  117. data/rspec-core/features/support/require_expect_syntax_in_aruba_specs.rb +29 -0
  118. data/rspec-core/features/support/rubinius.rb +6 -0
  119. data/rspec-core/lib/rspec/autorun.rb +2 -0
  120. data/rspec-core/lib/rspec/core.rb +169 -0
  121. data/rspec-core/lib/rspec/core/backport_random.rb +336 -0
  122. data/rspec-core/lib/rspec/core/backtrace_formatter.rb +66 -0
  123. data/rspec-core/lib/rspec/core/configuration.rb +1440 -0
  124. data/rspec-core/lib/rspec/core/configuration_options.rb +173 -0
  125. data/rspec-core/lib/rspec/core/drb.rb +111 -0
  126. data/rspec-core/lib/rspec/core/dsl.rb +93 -0
  127. data/rspec-core/lib/rspec/core/example.rb +502 -0
  128. data/rspec-core/lib/rspec/core/example_group.rb +606 -0
  129. data/rspec-core/lib/rspec/core/filter_manager.rb +259 -0
  130. data/rspec-core/lib/rspec/core/flat_map.rb +18 -0
  131. data/rspec-core/lib/rspec/core/formatters.rb +240 -0
  132. data/rspec-core/lib/rspec/core/formatters/base_formatter.rb +67 -0
  133. data/rspec-core/lib/rspec/core/formatters/base_text_formatter.rb +76 -0
  134. data/rspec-core/lib/rspec/core/formatters/console_codes.rb +64 -0
  135. data/rspec-core/lib/rspec/core/formatters/deprecation_formatter.rb +222 -0
  136. data/rspec-core/lib/rspec/core/formatters/documentation_formatter.rb +68 -0
  137. data/rspec-core/lib/rspec/core/formatters/helpers.rb +87 -0
  138. data/rspec-core/lib/rspec/core/formatters/html_formatter.rb +149 -0
  139. data/rspec-core/lib/rspec/core/formatters/html_printer.rb +403 -0
  140. data/rspec-core/lib/rspec/core/formatters/json_formatter.rb +94 -0
  141. data/rspec-core/lib/rspec/core/formatters/profile_formatter.rb +65 -0
  142. data/rspec-core/lib/rspec/core/formatters/progress_formatter.rb +28 -0
  143. data/rspec-core/lib/rspec/core/formatters/protocol.rb +163 -0
  144. data/rspec-core/lib/rspec/core/formatters/snippet_extractor.rb +104 -0
  145. data/rspec-core/lib/rspec/core/hooks.rb +591 -0
  146. data/rspec-core/lib/rspec/core/memoized_helpers.rb +472 -0
  147. data/rspec-core/lib/rspec/core/metadata.rb +437 -0
  148. data/rspec-core/lib/rspec/core/metadata_filter.rb +95 -0
  149. data/rspec-core/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
  150. data/rspec-core/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
  151. data/rspec-core/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
  152. data/rspec-core/lib/rspec/core/mocking_adapters/null.rb +14 -0
  153. data/rspec-core/lib/rspec/core/mocking_adapters/rr.rb +31 -0
  154. data/rspec-core/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
  155. data/rspec-core/lib/rspec/core/notifications.rb +542 -0
  156. data/rspec-core/lib/rspec/core/option_parser.rb +222 -0
  157. data/rspec-core/lib/rspec/core/ordering.rb +155 -0
  158. data/rspec-core/lib/rspec/core/pending.rb +163 -0
  159. data/rspec-core/lib/rspec/core/project_initializer.rb +48 -0
  160. data/rspec-core/lib/rspec/core/project_initializer/spec/spec_helper.rb +89 -0
  161. data/rspec-core/lib/rspec/core/rake_task.rb +187 -0
  162. data/rspec-core/lib/rspec/core/reporter.rb +149 -0
  163. data/rspec-core/lib/rspec/core/ruby_project.rb +45 -0
  164. data/rspec-core/lib/rspec/core/runner.rb +158 -0
  165. data/rspec-core/lib/rspec/core/shared_context.rb +55 -0
  166. data/rspec-core/lib/rspec/core/shared_example_group.rb +182 -0
  167. data/rspec-core/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  168. data/rspec-core/lib/rspec/core/version.rb +9 -0
  169. data/rspec-core/lib/rspec/core/warnings.rb +40 -0
  170. data/rspec-core/lib/rspec/core/world.rb +183 -0
  171. data/rspec-core/spec/command_line/order_spec.rb +213 -0
  172. data/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb +306 -0
  173. data/rspec-core/spec/rspec/core/configuration_options_spec.rb +425 -0
  174. data/rspec-core/spec/rspec/core/configuration_spec.rb +1963 -0
  175. data/rspec-core/spec/rspec/core/drb_spec.rb +278 -0
  176. data/rspec-core/spec/rspec/core/dsl_spec.rb +85 -0
  177. data/rspec-core/spec/rspec/core/example_execution_result_spec.rb +142 -0
  178. data/rspec-core/spec/rspec/core/example_group_constants_spec.rb +16 -0
  179. data/rspec-core/spec/rspec/core/example_group_spec.rb +1621 -0
  180. data/rspec-core/spec/rspec/core/example_spec.rb +662 -0
  181. data/rspec-core/spec/rspec/core/failed_example_notification_spec.rb +25 -0
  182. data/rspec-core/spec/rspec/core/filter_manager_spec.rb +299 -0
  183. data/rspec-core/spec/rspec/core/formatters/base_text_formatter_spec.rb +182 -0
  184. data/rspec-core/spec/rspec/core/formatters/console_codes_spec.rb +65 -0
  185. data/rspec-core/spec/rspec/core/formatters/deprecation_formatter_spec.rb +225 -0
  186. data/rspec-core/spec/rspec/core/formatters/documentation_formatter_spec.rb +111 -0
  187. data/rspec-core/spec/rspec/core/formatters/helpers_spec.rb +104 -0
  188. data/rspec-core/spec/rspec/core/formatters/html_formatter_spec.rb +111 -0
  189. data/rspec-core/spec/rspec/core/formatters/json_formatter_spec.rb +183 -0
  190. data/rspec-core/spec/rspec/core/formatters/profile_formatter_spec.rb +99 -0
  191. data/rspec-core/spec/rspec/core/formatters/progress_formatter_spec.rb +55 -0
  192. data/rspec-core/spec/rspec/core/formatters/snippet_extractor_spec.rb +26 -0
  193. data/rspec-core/spec/rspec/core/formatters_spec.rb +160 -0
  194. data/rspec-core/spec/rspec/core/hooks_filtering_spec.rb +227 -0
  195. data/rspec-core/spec/rspec/core/hooks_spec.rb +447 -0
  196. data/rspec-core/spec/rspec/core/memoized_helpers_spec.rb +537 -0
  197. data/rspec-core/spec/rspec/core/metadata_filter_spec.rb +181 -0
  198. data/rspec-core/spec/rspec/core/metadata_spec.rb +642 -0
  199. data/rspec-core/spec/rspec/core/notifications_spec.rb +92 -0
  200. data/rspec-core/spec/rspec/core/option_parser_spec.rb +270 -0
  201. data/rspec-core/spec/rspec/core/ordering_spec.rb +102 -0
  202. data/rspec-core/spec/rspec/core/pending_example_spec.rb +221 -0
  203. data/rspec-core/spec/rspec/core/pending_spec.rb +8 -0
  204. data/rspec-core/spec/rspec/core/project_initializer_spec.rb +123 -0
  205. data/rspec-core/spec/rspec/core/rake_task_spec.rb +351 -0
  206. data/rspec-core/spec/rspec/core/random_spec.rb +47 -0
  207. data/rspec-core/spec/rspec/core/reporter_spec.rb +198 -0
  208. data/rspec-core/spec/rspec/core/resources/a_bar.rb +0 -0
  209. data/rspec-core/spec/rspec/core/resources/a_foo.rb +0 -0
  210. data/rspec-core/spec/rspec/core/resources/a_spec.rb +1 -0
  211. data/rspec-core/spec/rspec/core/resources/acceptance/bar.rb +0 -0
  212. data/rspec-core/spec/rspec/core/resources/acceptance/foo_spec.rb +0 -0
  213. data/rspec-core/spec/rspec/core/resources/custom_example_group_runner.rb +14 -0
  214. data/rspec-core/spec/rspec/core/resources/formatter_specs.rb +58 -0
  215. data/rspec-core/spec/rspec/core/resources/utf8_encoded.rb +9 -0
  216. data/rspec-core/spec/rspec/core/rspec_matchers_spec.rb +45 -0
  217. data/rspec-core/spec/rspec/core/ruby_project_spec.rb +26 -0
  218. data/rspec-core/spec/rspec/core/runner_spec.rb +309 -0
  219. data/rspec-core/spec/rspec/core/shared_context_spec.rb +102 -0
  220. data/rspec-core/spec/rspec/core/shared_example_group_spec.rb +268 -0
  221. data/rspec-core/spec/rspec/core/warnings_spec.rb +72 -0
  222. data/rspec-core/spec/rspec/core/world_spec.rb +142 -0
  223. data/rspec-core/spec/rspec/core_spec.rb +103 -0
  224. data/rspec-core/spec/spec_helper.rb +89 -0
  225. data/rspec-core/spec/support/config_options_helper.rb +13 -0
  226. data/rspec-core/spec/support/fake_minitest/minitest.rb +0 -0
  227. data/rspec-core/spec/support/fake_minitest/minitest/minitest_assertions.rb +4 -0
  228. data/rspec-core/spec/support/fake_minitest/test/unit/assertions.rb +6 -0
  229. data/rspec-core/spec/support/formatter_support.rb +263 -0
  230. data/rspec-core/spec/support/helper_methods.rb +26 -0
  231. data/rspec-core/spec/support/isolated_home_directory.rb +16 -0
  232. data/rspec-core/spec/support/matchers.rb +103 -0
  233. data/rspec-core/spec/support/mathn_integration_support.rb +12 -0
  234. data/rspec-core/spec/support/sandboxing.rb +50 -0
  235. data/rspec-core/spec/support/shared_example_groups.rb +43 -0
  236. data/rspec-core/spec/support/spec_files.rb +44 -0
  237. data/rspec-expectations/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +253 -0
  238. data/rspec-expectations/benchmarks/autoload_v_require.rb +25 -0
  239. data/rspec-expectations/benchmarks/cloning_matchers.rb +19 -0
  240. data/rspec-expectations/benchmarks/default_messages_as_methods_v_blocks.rb +27 -0
  241. data/rspec-expectations/benchmarks/example_spec.rb +9 -0
  242. data/rspec-expectations/benchmarks/include_v_superclass.rb +39 -0
  243. data/rspec-expectations/benchmarks/match_array/failing_with_distinct_items.rb +147 -0
  244. data/rspec-expectations/benchmarks/match_array/failing_with_duplicate_items.rb +122 -0
  245. data/rspec-expectations/benchmarks/match_array/passing_with_distinct_items.rb +154 -0
  246. data/rspec-expectations/benchmarks/match_array/passing_with_duplicate_items.rb +132 -0
  247. data/rspec-expectations/benchmarks/match_array/rubyprof/passing_with_distinct_items.rb +9 -0
  248. data/rspec-expectations/benchmarks/matcher_dsl_vs_classes.rb +180 -0
  249. data/rspec-expectations/benchmarks/method_to_proc.rb +72 -0
  250. data/rspec-expectations/benchmarks/set_vs_array_include.rb +68 -0
  251. data/rspec-expectations/features/step_definitions/additional_cli_steps.rb +22 -0
  252. data/rspec-expectations/features/support/disallow_certain_apis.rb +34 -0
  253. data/rspec-expectations/features/support/env.rb +21 -0
  254. data/rspec-expectations/features/support/rubinius.rb +6 -0
  255. data/rspec-expectations/lib/rspec/expectations.rb +68 -0
  256. data/rspec-expectations/lib/rspec/expectations/configuration.rb +147 -0
  257. data/rspec-expectations/lib/rspec/expectations/expectation_target.rb +119 -0
  258. data/rspec-expectations/lib/rspec/expectations/fail_with.rb +34 -0
  259. data/rspec-expectations/lib/rspec/expectations/handler.rb +167 -0
  260. data/rspec-expectations/lib/rspec/expectations/minitest_integration.rb +17 -0
  261. data/rspec-expectations/lib/rspec/expectations/syntax.rb +132 -0
  262. data/rspec-expectations/lib/rspec/expectations/version.rb +8 -0
  263. data/rspec-expectations/lib/rspec/matchers.rb +967 -0
  264. data/rspec-expectations/lib/rspec/matchers/aliased_matcher.rb +116 -0
  265. data/rspec-expectations/lib/rspec/matchers/built_in.rb +52 -0
  266. data/rspec-expectations/lib/rspec/matchers/built_in/all.rb +85 -0
  267. data/rspec-expectations/lib/rspec/matchers/built_in/base_matcher.rb +132 -0
  268. data/rspec-expectations/lib/rspec/matchers/built_in/be.rb +277 -0
  269. data/rspec-expectations/lib/rspec/matchers/built_in/be_between.rb +77 -0
  270. data/rspec-expectations/lib/rspec/matchers/built_in/be_instance_of.rb +22 -0
  271. data/rspec-expectations/lib/rspec/matchers/built_in/be_kind_of.rb +16 -0
  272. data/rspec-expectations/lib/rspec/matchers/built_in/be_within.rb +72 -0
  273. data/rspec-expectations/lib/rspec/matchers/built_in/change.rb +337 -0
  274. data/rspec-expectations/lib/rspec/matchers/built_in/compound.rb +258 -0
  275. data/rspec-expectations/lib/rspec/matchers/built_in/contain_exactly.rb +249 -0
  276. data/rspec-expectations/lib/rspec/matchers/built_in/cover.rb +24 -0
  277. data/rspec-expectations/lib/rspec/matchers/built_in/eq.rb +75 -0
  278. data/rspec-expectations/lib/rspec/matchers/built_in/eql.rb +34 -0
  279. data/rspec-expectations/lib/rspec/matchers/built_in/equal.rb +81 -0
  280. data/rspec-expectations/lib/rspec/matchers/built_in/exist.rb +86 -0
  281. data/rspec-expectations/lib/rspec/matchers/built_in/has.rb +101 -0
  282. data/rspec-expectations/lib/rspec/matchers/built_in/have_attributes.rb +84 -0
  283. data/rspec-expectations/lib/rspec/matchers/built_in/include.rb +105 -0
  284. data/rspec-expectations/lib/rspec/matchers/built_in/match.rb +29 -0
  285. data/rspec-expectations/lib/rspec/matchers/built_in/operators.rb +119 -0
  286. data/rspec-expectations/lib/rspec/matchers/built_in/output.rb +152 -0
  287. data/rspec-expectations/lib/rspec/matchers/built_in/raise_error.rb +174 -0
  288. data/rspec-expectations/lib/rspec/matchers/built_in/respond_to.rb +91 -0
  289. data/rspec-expectations/lib/rspec/matchers/built_in/satisfy.rb +39 -0
  290. data/rspec-expectations/lib/rspec/matchers/built_in/start_and_end_with.rb +82 -0
  291. data/rspec-expectations/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
  292. data/rspec-expectations/lib/rspec/matchers/built_in/yield.rb +420 -0
  293. data/rspec-expectations/lib/rspec/matchers/composable.rb +183 -0
  294. data/rspec-expectations/lib/rspec/matchers/dsl.rb +391 -0
  295. data/rspec-expectations/lib/rspec/matchers/generated_descriptions.rb +42 -0
  296. data/rspec-expectations/lib/rspec/matchers/matcher_delegator.rb +33 -0
  297. data/rspec-expectations/lib/rspec/matchers/matcher_protocol.rb +99 -0
  298. data/rspec-expectations/lib/rspec/matchers/pretty.rb +77 -0
  299. data/rspec-expectations/spec/rspec/expectations/configuration_spec.rb +226 -0
  300. data/rspec-expectations/spec/rspec/expectations/expectation_target_spec.rb +147 -0
  301. data/rspec-expectations/spec/rspec/expectations/extensions/kernel_spec.rb +69 -0
  302. data/rspec-expectations/spec/rspec/expectations/fail_with_spec.rb +73 -0
  303. data/rspec-expectations/spec/rspec/expectations/handler_spec.rb +200 -0
  304. data/rspec-expectations/spec/rspec/expectations/minitest_integration_spec.rb +25 -0
  305. data/rspec-expectations/spec/rspec/expectations/syntax_spec.rb +93 -0
  306. data/rspec-expectations/spec/rspec/expectations_spec.rb +15 -0
  307. data/rspec-expectations/spec/rspec/matchers/aliased_matcher_spec.rb +113 -0
  308. data/rspec-expectations/spec/rspec/matchers/aliases_spec.rb +455 -0
  309. data/rspec-expectations/spec/rspec/matchers/built_in/all_spec.rb +212 -0
  310. data/rspec-expectations/spec/rspec/matchers/built_in/base_matcher_spec.rb +140 -0
  311. data/rspec-expectations/spec/rspec/matchers/built_in/be_between_spec.rb +157 -0
  312. data/rspec-expectations/spec/rspec/matchers/built_in/be_instance_of_spec.rb +61 -0
  313. data/rspec-expectations/spec/rspec/matchers/built_in/be_kind_of_spec.rb +39 -0
  314. data/rspec-expectations/spec/rspec/matchers/built_in/be_spec.rb +685 -0
  315. data/rspec-expectations/spec/rspec/matchers/built_in/be_within_spec.rb +139 -0
  316. data/rspec-expectations/spec/rspec/matchers/built_in/change_spec.rb +829 -0
  317. data/rspec-expectations/spec/rspec/matchers/built_in/compound_spec.rb +537 -0
  318. data/rspec-expectations/spec/rspec/matchers/built_in/contain_exactly_spec.rb +556 -0
  319. data/rspec-expectations/spec/rspec/matchers/built_in/cover_spec.rb +67 -0
  320. data/rspec-expectations/spec/rspec/matchers/built_in/eq_spec.rb +176 -0
  321. data/rspec-expectations/spec/rspec/matchers/built_in/eql_spec.rb +39 -0
  322. data/rspec-expectations/spec/rspec/matchers/built_in/equal_spec.rb +130 -0
  323. data/rspec-expectations/spec/rspec/matchers/built_in/exist_spec.rb +139 -0
  324. data/rspec-expectations/spec/rspec/matchers/built_in/has_spec.rb +179 -0
  325. data/rspec-expectations/spec/rspec/matchers/built_in/have_attributes_spec.rb +177 -0
  326. data/rspec-expectations/spec/rspec/matchers/built_in/include_spec.rb +587 -0
  327. data/rspec-expectations/spec/rspec/matchers/built_in/match_spec.rb +100 -0
  328. data/rspec-expectations/spec/rspec/matchers/built_in/operators_spec.rb +250 -0
  329. data/rspec-expectations/spec/rspec/matchers/built_in/output_spec.rb +168 -0
  330. data/rspec-expectations/spec/rspec/matchers/built_in/raise_error_spec.rb +446 -0
  331. data/rspec-expectations/spec/rspec/matchers/built_in/respond_to_spec.rb +290 -0
  332. data/rspec-expectations/spec/rspec/matchers/built_in/satisfy_spec.rb +42 -0
  333. data/rspec-expectations/spec/rspec/matchers/built_in/start_and_end_with_spec.rb +347 -0
  334. data/rspec-expectations/spec/rspec/matchers/built_in/throw_symbol_spec.rb +133 -0
  335. data/rspec-expectations/spec/rspec/matchers/built_in/yield_spec.rb +643 -0
  336. data/rspec-expectations/spec/rspec/matchers/composable_spec.rb +77 -0
  337. data/rspec-expectations/spec/rspec/matchers/define_negated_matcher_spec.rb +199 -0
  338. data/rspec-expectations/spec/rspec/matchers/description_generation_spec.rb +189 -0
  339. data/rspec-expectations/spec/rspec/matchers/dsl_spec.rb +1036 -0
  340. data/rspec-expectations/spec/rspec/matchers/legacy_spec.rb +104 -0
  341. data/rspec-expectations/spec/rspec/matchers_spec.rb +108 -0
  342. data/rspec-expectations/spec/spec_helper.rb +94 -0
  343. data/rspec-expectations/spec/support/matchers.rb +54 -0
  344. data/rspec-expectations/spec/support/shared_examples.rb +101 -0
  345. data/rspec-mocks/benchmarks/double_creation.rb +66 -0
  346. data/rspec-mocks/benchmarks/each_value_v_values_each.rb +58 -0
  347. data/rspec-mocks/benchmarks/find_original_method_early.rb +64 -0
  348. data/rspec-mocks/benchmarks/method_defined_at_any_visibility.rb +101 -0
  349. data/rspec-mocks/benchmarks/thread_safety.rb +24 -0
  350. data/rspec-mocks/benchmarks/transfer_nested_constants.rb +77 -0
  351. data/rspec-mocks/features/step_definitions/additional_cli_steps.rb +21 -0
  352. data/rspec-mocks/features/support/disallow_certain_apis.rb +24 -0
  353. data/rspec-mocks/features/support/env.rb +22 -0
  354. data/rspec-mocks/features/support/rubinius.rb +6 -0
  355. data/rspec-mocks/lib/rspec/mocks.rb +126 -0
  356. data/rspec-mocks/lib/rspec/mocks/any_instance.rb +10 -0
  357. data/rspec-mocks/lib/rspec/mocks/any_instance/chain.rb +109 -0
  358. data/rspec-mocks/lib/rspec/mocks/any_instance/expect_chain_chain.rb +35 -0
  359. data/rspec-mocks/lib/rspec/mocks/any_instance/expectation_chain.rb +48 -0
  360. data/rspec-mocks/lib/rspec/mocks/any_instance/message_chains.rb +85 -0
  361. data/rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb +116 -0
  362. data/rspec-mocks/lib/rspec/mocks/any_instance/recorder.rb +267 -0
  363. data/rspec-mocks/lib/rspec/mocks/any_instance/stub_chain.rb +45 -0
  364. data/rspec-mocks/lib/rspec/mocks/any_instance/stub_chain_chain.rb +27 -0
  365. data/rspec-mocks/lib/rspec/mocks/argument_list_matcher.rb +72 -0
  366. data/rspec-mocks/lib/rspec/mocks/argument_matchers.rb +282 -0
  367. data/rspec-mocks/lib/rspec/mocks/configuration.rb +157 -0
  368. data/rspec-mocks/lib/rspec/mocks/error_generator.rb +253 -0
  369. data/rspec-mocks/lib/rspec/mocks/example_methods.rb +379 -0
  370. data/rspec-mocks/lib/rspec/mocks/instance_method_stasher.rb +135 -0
  371. data/rspec-mocks/lib/rspec/mocks/marshal_extension.rb +41 -0
  372. data/rspec-mocks/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
  373. data/rspec-mocks/lib/rspec/mocks/matchers/have_received.rb +121 -0
  374. data/rspec-mocks/lib/rspec/mocks/matchers/receive.rb +106 -0
  375. data/rspec-mocks/lib/rspec/mocks/matchers/receive_message_chain.rb +66 -0
  376. data/rspec-mocks/lib/rspec/mocks/matchers/receive_messages.rb +71 -0
  377. data/rspec-mocks/lib/rspec/mocks/message_chain.rb +91 -0
  378. data/rspec-mocks/lib/rspec/mocks/message_expectation.rb +694 -0
  379. data/rspec-mocks/lib/rspec/mocks/method_double.rb +260 -0
  380. data/rspec-mocks/lib/rspec/mocks/method_reference.rb +155 -0
  381. data/rspec-mocks/lib/rspec/mocks/mutate_const.rb +324 -0
  382. data/rspec-mocks/lib/rspec/mocks/object_reference.rb +91 -0
  383. data/rspec-mocks/lib/rspec/mocks/order_group.rb +81 -0
  384. data/rspec-mocks/lib/rspec/mocks/proxy.rb +431 -0
  385. data/rspec-mocks/lib/rspec/mocks/space.rb +221 -0
  386. data/rspec-mocks/lib/rspec/mocks/standalone.rb +3 -0
  387. data/rspec-mocks/lib/rspec/mocks/syntax.rb +329 -0
  388. data/rspec-mocks/lib/rspec/mocks/targets.rb +97 -0
  389. data/rspec-mocks/lib/rspec/mocks/test_double.rb +135 -0
  390. data/rspec-mocks/lib/rspec/mocks/verifying_double.rb +127 -0
  391. data/rspec-mocks/lib/rspec/mocks/verifying_message_expecation.rb +62 -0
  392. data/rspec-mocks/lib/rspec/mocks/verifying_proxy.rb +171 -0
  393. data/rspec-mocks/lib/rspec/mocks/version.rb +9 -0
  394. data/rspec-mocks/spec/rspec/mocks/and_call_original_spec.rb +267 -0
  395. data/rspec-mocks/spec/rspec/mocks/and_return_spec.rb +21 -0
  396. data/rspec-mocks/spec/rspec/mocks/and_wrap_original_spec.rb +63 -0
  397. data/rspec-mocks/spec/rspec/mocks/and_yield_spec.rb +161 -0
  398. data/rspec-mocks/spec/rspec/mocks/any_instance/message_chains_spec.rb +39 -0
  399. data/rspec-mocks/spec/rspec/mocks/any_instance_spec.rb +1242 -0
  400. data/rspec-mocks/spec/rspec/mocks/argument_matchers_spec.rb +336 -0
  401. data/rspec-mocks/spec/rspec/mocks/array_including_matcher_spec.rb +39 -0
  402. data/rspec-mocks/spec/rspec/mocks/at_least_spec.rb +147 -0
  403. data/rspec-mocks/spec/rspec/mocks/at_most_spec.rb +113 -0
  404. data/rspec-mocks/spec/rspec/mocks/before_all_spec.rb +75 -0
  405. data/rspec-mocks/spec/rspec/mocks/block_return_value_spec.rb +68 -0
  406. data/rspec-mocks/spec/rspec/mocks/combining_implementation_instructions_spec.rb +196 -0
  407. data/rspec-mocks/spec/rspec/mocks/configuration_spec.rb +175 -0
  408. data/rspec-mocks/spec/rspec/mocks/double_spec.rb +830 -0
  409. data/rspec-mocks/spec/rspec/mocks/example_methods_spec.rb +11 -0
  410. data/rspec-mocks/spec/rspec/mocks/expiration_spec.rb +90 -0
  411. data/rspec-mocks/spec/rspec/mocks/hash_excluding_matcher_spec.rb +65 -0
  412. data/rspec-mocks/spec/rspec/mocks/hash_including_matcher_spec.rb +92 -0
  413. data/rspec-mocks/spec/rspec/mocks/instance_method_stasher_spec.rb +72 -0
  414. data/rspec-mocks/spec/rspec/mocks/marshal_extension_spec.rb +67 -0
  415. data/rspec-mocks/spec/rspec/mocks/matchers/have_received_spec.rb +513 -0
  416. data/rspec-mocks/spec/rspec/mocks/matchers/receive_message_chain_spec.rb +227 -0
  417. data/rspec-mocks/spec/rspec/mocks/matchers/receive_messages_spec.rb +148 -0
  418. data/rspec-mocks/spec/rspec/mocks/matchers/receive_spec.rb +525 -0
  419. data/rspec-mocks/spec/rspec/mocks/methods_spec.rb +24 -0
  420. data/rspec-mocks/spec/rspec/mocks/mock_expectation_error_spec.rb +20 -0
  421. data/rspec-mocks/spec/rspec/mocks/mock_ordering_spec.rb +112 -0
  422. data/rspec-mocks/spec/rspec/mocks/multiple_return_value_spec.rb +130 -0
  423. data/rspec-mocks/spec/rspec/mocks/mutate_const_spec.rb +561 -0
  424. data/rspec-mocks/spec/rspec/mocks/nil_expectation_warning_spec.rb +52 -0
  425. data/rspec-mocks/spec/rspec/mocks/null_object_double_spec.rb +135 -0
  426. data/rspec-mocks/spec/rspec/mocks/once_counts_spec.rb +50 -0
  427. data/rspec-mocks/spec/rspec/mocks/order_group_spec.rb +26 -0
  428. data/rspec-mocks/spec/rspec/mocks/partial_double_spec.rb +379 -0
  429. data/rspec-mocks/spec/rspec/mocks/partial_double_using_mocks_directly_spec.rb +83 -0
  430. data/rspec-mocks/spec/rspec/mocks/precise_counts_spec.rb +66 -0
  431. data/rspec-mocks/spec/rspec/mocks/serialization_spec.rb +89 -0
  432. data/rspec-mocks/spec/rspec/mocks/should_syntax_spec.rb +539 -0
  433. data/rspec-mocks/spec/rspec/mocks/space_spec.rb +242 -0
  434. data/rspec-mocks/spec/rspec/mocks/spy_spec.rb +127 -0
  435. data/rspec-mocks/spec/rspec/mocks/stash_spec.rb +43 -0
  436. data/rspec-mocks/spec/rspec/mocks/stub_chain_spec.rb +166 -0
  437. data/rspec-mocks/spec/rspec/mocks/stub_implementation_spec.rb +98 -0
  438. data/rspec-mocks/spec/rspec/mocks/stub_spec.rb +520 -0
  439. data/rspec-mocks/spec/rspec/mocks/stubbed_message_expectations_spec.rb +56 -0
  440. data/rspec-mocks/spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb +99 -0
  441. data/rspec-mocks/spec/rspec/mocks/syntax_spec.rb +7 -0
  442. data/rspec-mocks/spec/rspec/mocks/test_double_spec.rb +53 -0
  443. data/rspec-mocks/spec/rspec/mocks/thrice_counts_spec.rb +72 -0
  444. data/rspec-mocks/spec/rspec/mocks/to_ary_spec.rb +52 -0
  445. data/rspec-mocks/spec/rspec/mocks/twice_counts_spec.rb +64 -0
  446. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/class_double_with_class_loaded_spec.rb +118 -0
  447. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/class_double_with_class_not_loaded_spec.rb +58 -0
  448. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/construction_spec.rb +54 -0
  449. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb +81 -0
  450. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/instance_double_with_class_loaded_spec.rb +195 -0
  451. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/instance_double_with_class_not_loaded_spec.rb +57 -0
  452. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/method_visibility_spec.rb +129 -0
  453. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/object_double_spec.rb +68 -0
  454. data/rspec-mocks/spec/rspec/mocks_spec.rb +199 -0
  455. data/rspec-mocks/spec/spec_helper.rb +131 -0
  456. data/rspec-mocks/spec/support/before_all_shared_example_group.rb +16 -0
  457. data/rspec-mocks/spec/support/doubled_classes.rb +74 -0
  458. data/rspec-mocks/spec/support/matchers.rb +15 -0
  459. data/rspec-support/benchmarks/caller.rb +81 -0
  460. data/rspec-support/lib/rspec/support.rb +76 -0
  461. data/rspec-support/lib/rspec/support/caller_filter.rb +63 -0
  462. data/rspec-support/lib/rspec/support/differ.rb +214 -0
  463. data/rspec-support/lib/rspec/support/directory_maker.rb +61 -0
  464. data/rspec-support/lib/rspec/support/encoded_string.rb +69 -0
  465. data/rspec-support/lib/rspec/support/fuzzy_matcher.rb +48 -0
  466. data/rspec-support/lib/rspec/support/hunk_generator.rb +47 -0
  467. data/rspec-support/lib/rspec/support/matcher_definition.rb +31 -0
  468. data/rspec-support/lib/rspec/support/method_signature_verifier.rb +272 -0
  469. data/rspec-support/lib/rspec/support/os.rb +18 -0
  470. data/rspec-support/lib/rspec/support/recursive_const_methods.rb +76 -0
  471. data/rspec-support/lib/rspec/support/ruby_features.rb +45 -0
  472. data/rspec-support/lib/rspec/support/spec.rb +72 -0
  473. data/rspec-support/lib/rspec/support/spec/deprecation_helpers.rb +60 -0
  474. data/rspec-support/lib/rspec/support/spec/formatting_support.rb +9 -0
  475. data/rspec-support/lib/rspec/support/spec/in_sub_process.rb +43 -0
  476. data/rspec-support/lib/rspec/support/spec/prevent_load_time_warnings.rb +44 -0
  477. data/rspec-support/lib/rspec/support/spec/shell_out.rb +69 -0
  478. data/rspec-support/lib/rspec/support/spec/stderr_splitter.rb +52 -0
  479. data/rspec-support/lib/rspec/support/spec/with_isolated_directory.rb +9 -0
  480. data/rspec-support/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
  481. data/rspec-support/lib/rspec/support/version.rb +7 -0
  482. data/rspec-support/lib/rspec/support/version_checker.rb +53 -0
  483. data/rspec-support/lib/rspec/support/warnings.rb +39 -0
  484. data/rspec-support/spec/rspec/support/caller_filter_spec.rb +66 -0
  485. data/rspec-support/spec/rspec/support/differ_spec.rb +322 -0
  486. data/rspec-support/spec/rspec/support/directory_maker_spec.rb +58 -0
  487. data/rspec-support/spec/rspec/support/encoded_string_spec.rb +86 -0
  488. data/rspec-support/spec/rspec/support/fuzzy_matcher_spec.rb +179 -0
  489. data/rspec-support/spec/rspec/support/method_signature_verifier_spec.rb +357 -0
  490. data/rspec-support/spec/rspec/support/os_spec.rb +36 -0
  491. data/rspec-support/spec/rspec/support/recursive_const_methods_spec.rb +49 -0
  492. data/rspec-support/spec/rspec/support/spec/in_sub_process_spec.rb +36 -0
  493. data/rspec-support/spec/rspec/support/spec/prevent_load_time_warnings_spec.rb +10 -0
  494. data/rspec-support/spec/rspec/support/spec/shell_out_spec.rb +44 -0
  495. data/rspec-support/spec/rspec/support/spec/stderr_splitter_spec.rb +60 -0
  496. data/rspec-support/spec/rspec/support/spec/with_isolated_std_err_spec.rb +21 -0
  497. data/rspec-support/spec/rspec/support/version_checker_spec.rb +29 -0
  498. data/rspec-support/spec/rspec/support/warnings_spec.rb +66 -0
  499. data/rspec-support/spec/rspec/support_spec.rb +119 -0
  500. data/rspec-support/spec/spec_helper.rb +2 -0
  501. data/rspec/lib/rspec.rb +3 -0
  502. data/rspec/lib/rspec/version.rb +5 -0
  503. data/spec/mri/integration/browser_spec.rb +31 -0
  504. data/spec/mri/integration/rack/sprockets_runner_js_errors.rb.erb +20 -0
  505. data/spec/mri/integration/spec_opts_spec.rb +81 -0
  506. data/spec/mri/unit/opal/rspec/browser_formatter_spec.rb +35 -0
  507. data/spec/mri/unit/opal/rspec/cached_environment_spec.rb +85 -0
  508. data/spec/mri/unit/opal/rspec/opal/browser_formatter_spec.rb +14 -0
  509. data/spec/mri/unit/opal/rspec/rack/config.ru +12 -0
  510. data/spec/mri/unit/opal/rspec/rake_task_spec.rb +261 -0
  511. data/spec/mri/unit/opal/rspec/sprockets_environment_spec.rb +55 -0
  512. data/spec/mri/unit/opal/rspec/temp_dir_helper.rb +19 -0
  513. data/spec/opal/after_hooks_spec.rb +140 -0
  514. data/spec/opal/around_hooks_spec.rb +164 -0
  515. data/spec/opal/async_spec.rb +184 -0
  516. data/spec/opal/before_hooks_spec.rb +183 -0
  517. data/spec/opal/example_spec.rb +174 -0
  518. data/spec/opal/expected_failures.txt +40 -0
  519. data/spec/opal/matchers_spec.rb +205 -0
  520. data/spec/opal/mock_spec.rb +63 -0
  521. data/spec/opal/should_syntax_spec.rb +17 -0
  522. data/spec/opal/skip_pending_spec.rb +43 -0
  523. data/spec/opal/subject_spec.rb +87 -0
  524. data/spec/other/color_on_by_default_spec.rb +9 -0
  525. data/spec/other/dummy_spec.rb +5 -0
  526. data/spec/other/formatter_dependency.rb +3 -0
  527. data/spec/other/ignored_spec.opal +5 -0
  528. data/spec/other/test_formatter.rb +9 -0
  529. data/spec/rspec/core/config.rb +5 -0
  530. data/spec/rspec/core/config.ru +4 -0
  531. data/spec/rspec/core/core_spec_loader.rb +46 -0
  532. data/spec/rspec/core/filter/core/async/example_group.txt +13 -0
  533. data/spec/rspec/core/filter/core/async/hooks.rb +12 -0
  534. data/spec/rspec/core/filter/core/async/memoized_helpers.txt +3 -0
  535. data/spec/rspec/core/filter/core/async/metadata.txt +2 -0
  536. data/spec/rspec/core/filter/core/bugs/filter_manager.txt +4 -0
  537. data/spec/rspec/core/filter/core/bugs/formatters.txt +4 -0
  538. data/spec/rspec/core/filter/core/bugs/memoized_helpers.rb +11 -0
  539. data/spec/rspec/core/filter/core/bugs/metadata.txt +5 -0
  540. data/spec/rspec/core/filter/core/bugs/sandbox/subject_issue_test.rb +328 -0
  541. data/spec/rspec/core/filter/core/bugs/warnings_deprecations.txt +3 -0
  542. data/spec/rspec/core/filter/core/unsupported/core.txt +5 -0
  543. data/spec/rspec/core/filter/core/unsupported/example.txt +7 -0
  544. data/spec/rspec/core/filter/core/unsupported/example_group.txt +13 -0
  545. data/spec/rspec/core/filter/core/unsupported/filter_manager.txt +7 -0
  546. data/spec/rspec/core/filter/core/unsupported/formatters.txt +27 -0
  547. data/spec/rspec/core/filter/core/unsupported/hooks.txt +2 -0
  548. data/spec/rspec/core/filter/core/unsupported/memoized_helpers.txt +6 -0
  549. data/spec/rspec/core/filter/core/unsupported/metadata.txt +14 -0
  550. data/spec/rspec/core/filter/core/unsupported/metadata_filter.txt +2 -0
  551. data/spec/rspec/core/filter/core/unsupported/notifications.txt +8 -0
  552. data/spec/rspec/core/filter/core/unsupported/world.txt +3 -0
  553. data/spec/rspec/core/fixes/missing_constants.rb +20 -0
  554. data/spec/rspec/core/fixes/opal_itself.rb +38 -0
  555. data/spec/rspec/core/fixes/shared_examples.rb +3 -0
  556. data/spec/rspec/core/opal_alternates/rspec/core/example_group_spec.rb +145 -0
  557. data/spec/rspec/core/opal_alternates/rspec/core/failed_example_notification_spec.rb +31 -0
  558. data/spec/rspec/core/opal_alternates/rspec/core/hooks_spec.rb +113 -0
  559. data/spec/rspec/core/opal_alternates/rspec/core/memoized_helpers_spec.rb +36 -0
  560. data/spec/rspec/core/opal_alternates/rspec/core/metadata_spec.rb +48 -0
  561. data/spec/rspec/core/require_specs.rb +25 -0
  562. data/spec/rspec/core/sandboxing.rb +72 -0
  563. data/spec/rspec/core/spec_files_exclude.txt +41 -0
  564. data/spec/rspec/expectations/config.rb +16 -0
  565. data/spec/rspec/expectations/config.ru +4 -0
  566. data/spec/rspec/expectations/expectation_spec_loader.rb +110 -0
  567. data/spec/rspec/expectations/filter/bugs/aliased_matcher.txt +2 -0
  568. data/spec/rspec/expectations/filter/bugs/aliases.rb +13 -0
  569. data/spec/rspec/expectations/filter/bugs/base_matcher.txt +2 -0
  570. data/spec/rspec/expectations/filter/bugs/be.rb +4 -0
  571. data/spec/rspec/expectations/filter/bugs/be_instance_of.rb +7 -0
  572. data/spec/rspec/expectations/filter/bugs/be_spec.txt +2 -0
  573. data/spec/rspec/expectations/filter/bugs/configuration.txt +8 -0
  574. data/spec/rspec/expectations/filter/bugs/contain_exactly.rb +13 -0
  575. data/spec/rspec/expectations/filter/bugs/define_negated_matcher.rb +9 -0
  576. data/spec/rspec/expectations/filter/bugs/description_generation.rb +4 -0
  577. data/spec/rspec/expectations/filter/bugs/dsl.txt +14 -0
  578. data/spec/rspec/expectations/filter/bugs/equal.txt +3 -0
  579. data/spec/rspec/expectations/filter/bugs/expectation_target.txt +2 -0
  580. data/spec/rspec/expectations/filter/bugs/expectations.txt +2 -0
  581. data/spec/rspec/expectations/filter/bugs/have_attributes.rb +8 -0
  582. data/spec/rspec/expectations/filter/bugs/include.rb +4 -0
  583. data/spec/rspec/expectations/filter/bugs/operators.txt +2 -0
  584. data/spec/rspec/expectations/filter/bugs/raise_error.txt +2 -0
  585. data/spec/rspec/expectations/filter/bugs/respond_to.rb +13 -0
  586. data/spec/rspec/expectations/filter/bugs/sandbox/undef.rb +20 -0
  587. data/spec/rspec/expectations/filter/unsupported/aliases.txt +5 -0
  588. data/spec/rspec/expectations/filter/unsupported/be.txt +2 -0
  589. data/spec/rspec/expectations/filter/unsupported/be_instance_of.txt +3 -0
  590. data/spec/rspec/expectations/filter/unsupported/change.txt +2 -0
  591. data/spec/rspec/expectations/filter/unsupported/configuration.txt +2 -0
  592. data/spec/rspec/expectations/filter/unsupported/contain_exactly.txt +2 -0
  593. data/spec/rspec/expectations/filter/unsupported/description_generation.txt +6 -0
  594. data/spec/rspec/expectations/filter/unsupported/dsl.txt +8 -0
  595. data/spec/rspec/expectations/filter/unsupported/eq.txt +10 -0
  596. data/spec/rspec/expectations/filter/unsupported/equal.txt +3 -0
  597. data/spec/rspec/expectations/filter/unsupported/expectation_target.txt +2 -0
  598. data/spec/rspec/expectations/filter/unsupported/expectations.txt +8 -0
  599. data/spec/rspec/expectations/filter/unsupported/has.txt +2 -0
  600. data/spec/rspec/expectations/filter/unsupported/include.txt +3 -0
  601. data/spec/rspec/expectations/filter/unsupported/match.txt +2 -0
  602. data/spec/rspec/expectations/filter/unsupported/matchers.txt +11 -0
  603. data/spec/rspec/expectations/filter/unsupported/output.txt +14 -0
  604. data/spec/rspec/expectations/filter/unsupported/raise_error.txt +3 -0
  605. data/spec/rspec/expectations/filter/unsupported/respond_to.rb +5 -0
  606. data/spec/rspec/expectations/filter/unsupported/syntax.txt +3 -0
  607. data/spec/rspec/expectations/filter/unsupported/yield.txt +2 -0
  608. data/spec/rspec/expectations/fixes/example_patches.rb +32 -0
  609. data/spec/rspec/expectations/fixes/missing_constants.rb +12 -0
  610. data/spec/rspec/expectations/fixes/not_compatible.rb +6 -0
  611. data/spec/rspec/expectations/fixes/opal_itself.rb +140 -0
  612. data/spec/rspec/expectations/opal_alternates/be_instance_of_spec.rb +11 -0
  613. data/spec/rspec/expectations/opal_alternates/dsl_spec.rb +66 -0
  614. data/spec/rspec/expectations/opal_alternates/expectation_target_spec.rb +21 -0
  615. data/spec/rspec/expectations/opal_alternates/yield_spec.rb +11 -0
  616. data/spec/rspec/expectations/require_specs.rb +16 -0
  617. data/spec/rspec/expectations/shared_examples.rb +47 -0
  618. data/spec/rspec/expectations/spec_files_exclude.txt +2 -0
  619. data/spec/rspec/expectations/spec_helper_opal.rb +13 -0
  620. data/spec/rspec/filter_processor.rb +77 -0
  621. data/spec/rspec/mocks/config.ru +4 -0
  622. data/spec/rspec/mocks/filter/bugs/and_call_original.txt +9 -0
  623. data/spec/rspec/mocks/filter/bugs/and_wrap_original.txt +2 -0
  624. data/spec/rspec/mocks/filter/bugs/any_instance.rb +24 -0
  625. data/spec/rspec/mocks/filter/bugs/argument_matchers.rb +3 -0
  626. data/spec/rspec/mocks/filter/bugs/configuration.txt +2 -0
  627. data/spec/rspec/mocks/filter/bugs/double.txt +3 -0
  628. data/spec/rspec/mocks/filter/bugs/expiration.txt +2 -0
  629. data/spec/rspec/mocks/filter/bugs/instance_method_stasher.txt +2 -0
  630. data/spec/rspec/mocks/filter/bugs/methods.rb +5 -0
  631. data/spec/rspec/mocks/filter/bugs/mocks.txt +6 -0
  632. data/spec/rspec/mocks/filter/bugs/mutate_const.txt +2 -0
  633. data/spec/rspec/mocks/filter/bugs/partial_double.rb +8 -0
  634. data/spec/rspec/mocks/filter/bugs/receive.txt +5 -0
  635. data/spec/rspec/mocks/filter/bugs/should_syntax.txt +5 -0
  636. data/spec/rspec/mocks/filter/bugs/space.txt +2 -0
  637. data/spec/rspec/mocks/filter/bugs/spy.txt +5 -0
  638. data/spec/rspec/mocks/filter/bugs/stub_implementation.rb +9 -0
  639. data/spec/rspec/mocks/filter/unsupported/and_call_original.txt +5 -0
  640. data/spec/rspec/mocks/filter/unsupported/and_return.txt +2 -0
  641. data/spec/rspec/mocks/filter/unsupported/any_instance.rb +6 -0
  642. data/spec/rspec/mocks/filter/unsupported/argument_matchers.rb +10 -0
  643. data/spec/rspec/mocks/filter/unsupported/combining_implementation_instructions.rb +9 -0
  644. data/spec/rspec/mocks/filter/unsupported/double.rb +16 -0
  645. data/spec/rspec/mocks/filter/unsupported/expected_arg_verification.txt +2 -0
  646. data/spec/rspec/mocks/filter/unsupported/have_received.txt +2 -0
  647. data/spec/rspec/mocks/filter/unsupported/instance_double_with_class_loaded.txt +8 -0
  648. data/spec/rspec/mocks/filter/unsupported/mocks.rb +8 -0
  649. data/spec/rspec/mocks/filter/unsupported/nil_expectation_warning.rb +8 -0
  650. data/spec/rspec/mocks/filter/unsupported/partial_double.rb +6 -0
  651. data/spec/rspec/mocks/filter/unsupported/receive.txt +13 -0
  652. data/spec/rspec/mocks/filter/unsupported/receive_message_chain.rb +4 -0
  653. data/spec/rspec/mocks/filter/unsupported/receive_messages.txt +2 -0
  654. data/spec/rspec/mocks/filter/unsupported/should_syntax.txt +1 -0
  655. data/spec/rspec/mocks/filter/unsupported/space.rb +7 -0
  656. data/spec/rspec/mocks/filter/unsupported/stub.rb +7 -0
  657. data/spec/rspec/mocks/fixes/doubled_classes.rb +76 -0
  658. data/spec/rspec/mocks/fixes/missing_constants.rb +3 -0
  659. data/spec/rspec/mocks/fixes/opal_itself.rb +59 -0
  660. data/spec/rspec/mocks/mocks_spec_loader.rb +91 -0
  661. data/spec/rspec/mocks/require_specs.rb +15 -0
  662. data/spec/rspec/mocks/spec_files_exclude.txt +11 -0
  663. data/spec/rspec/mocks/spec_helper_opal.rb +129 -0
  664. data/spec/rspec/opal_rspec_spec_loader.rb +359 -0
  665. data/spec/rspec/shared/opal/fixes/deprecation_helpers.rb +31 -0
  666. data/spec/rspec/shared/opal/fixes/rspec_helpers.rb +6 -0
  667. data/spec/rspec/shared/opal/progress_json_formatter.rb +29 -0
  668. data/spec/rspec/support/config.rb +5 -0
  669. data/spec/rspec/support/config.ru +4 -0
  670. data/spec/rspec/support/filter/bugs/recursive_const_methods.txt +3 -0
  671. data/spec/rspec/support/filter/bugs/sandbox/basic_object.rb +30 -0
  672. data/spec/rspec/support/filter/bugs/stderr_splitter_spec.txt +2 -0
  673. data/spec/rspec/support/filter/bugs/support.txt +2 -0
  674. data/spec/rspec/support/filter/unsupported/fuzzy_matcher.txt +2 -0
  675. data/spec/rspec/support/filter/unsupported/support.rb +7 -0
  676. data/spec/rspec/support/filter/unsupported/warnings.txt +6 -0
  677. data/spec/rspec/support/fixes/missing_constants.rb +3 -0
  678. data/spec/rspec/support/fixes/opal_itself.rb +13 -0
  679. data/spec/rspec/support/require_specs.rb +15 -0
  680. data/spec/rspec/support/spec_files_exclude.txt +26 -0
  681. data/spec/rspec/support/spec_helper.rb +27 -0
  682. data/spec/rspec/support/support_spec_loader.rb +38 -0
  683. data/util/create_requires.rb +49 -0
  684. data/vendor/spec_runner.js +64 -0
  685. metadata +774 -0
@@ -0,0 +1,175 @@
1
+ module RSpec
2
+ module Mocks
3
+ RSpec.describe Configuration do
4
+ let(:config) { Configuration.new }
5
+ let(:mod_1) { Module.new }
6
+ let(:mod_2) { Module.new }
7
+
8
+ def instance_methods_of(mod)
9
+ mod_1.instance_methods.map(&:to_sym)
10
+ end
11
+
12
+ it 'adds stub and should_receive to the given modules' do
13
+ expect(instance_methods_of(mod_1)).not_to include(:stub, :should_receive)
14
+ expect(instance_methods_of(mod_2)).not_to include(:stub, :should_receive)
15
+
16
+ config.add_stub_and_should_receive_to(mod_1, mod_2)
17
+
18
+ expect(instance_methods_of(mod_1)).to include(:stub, :should_receive)
19
+ expect(instance_methods_of(mod_2)).to include(:stub, :should_receive)
20
+ end
21
+
22
+ shared_examples "configuring the syntax" do
23
+ def sandboxed
24
+ orig_syntax = RSpec::Mocks.configuration.syntax
25
+ yield
26
+ ensure
27
+ configure_syntax(orig_syntax)
28
+ end
29
+
30
+ around(:each) { |ex| sandboxed(&ex) }
31
+ let(:dbl) { double }
32
+ let(:should_methods) { [:should_receive, :stub, :should_not_receive] }
33
+ let(:should_class_methods) { [:any_instance] }
34
+ let(:expect_methods) { [:receive, :allow, :expect_any_instance_of, :allow_any_instance_of] }
35
+
36
+ it 'defaults to enabling both the :should and :expect syntaxes' do
37
+ # This is kinda a hack, but since we want to enforce use of
38
+ # the expect syntax within our specs here, we have modified the
39
+ # config setting, which makes it hard to get at the original
40
+ # default value. in spec_helper.rb we store the default value
41
+ # in $default_rspec_mocks_syntax so we can use it here.
42
+ RSpec::Mocks.configuration.syntax = $default_rspec_mocks_syntax
43
+ expect(dbl).to respond_to(*should_methods)
44
+ expect(self).to respond_to(*expect_methods)
45
+ end
46
+
47
+ context 'when configured to :expect' do
48
+ before { configure_syntax :expect }
49
+
50
+ it 'removes the should methods from every object' do
51
+ expect(dbl).not_to respond_to(*should_methods)
52
+ end
53
+
54
+ it 'removes `any_instance` from every class' do
55
+ expect(Class.new).not_to respond_to(*should_class_methods)
56
+ end
57
+
58
+ it 'adds the expect methods to the example group context' do
59
+ expect(self).to respond_to(*expect_methods)
60
+ end
61
+
62
+ it 'reports that the syntax is :expect' do
63
+ expect(configured_syntax).to eq([:expect])
64
+ end
65
+
66
+ it 'is a no-op when configured a second time' do
67
+ expect(Syntax.default_should_syntax_host).not_to receive(:method_undefined)
68
+ expect(::RSpec::Mocks::ExampleMethods).not_to receive(:method_added)
69
+ configure_syntax :expect
70
+ end
71
+ end
72
+
73
+ context 'when configured to :should' do
74
+ before { configure_syntax :should }
75
+
76
+ it 'adds the should methods to every object' do
77
+ expect(dbl).to respond_to(*should_methods)
78
+ end
79
+
80
+ it 'adds `any_instance` to every class' do
81
+ expect(Class.new).to respond_to(*should_class_methods)
82
+ end
83
+
84
+ it 'removes the expect methods from the example group context' do
85
+ expect(self).not_to respond_to(*expect_methods)
86
+ end
87
+
88
+ it 'reports that the syntax is :should' do
89
+ expect(configured_syntax).to eq([:should])
90
+ end
91
+
92
+ it "does not warn about the should syntax" do
93
+ RSpec.should_not_receive(:deprecate)
94
+ Object.new.should_not_receive(:bees)
95
+ end
96
+
97
+ it 'is a no-op when configured a second time' do
98
+ Syntax.default_should_syntax_host.should_not_receive(:method_added)
99
+ ::RSpec::Mocks::ExampleMethods.should_not_receive(:method_undefined)
100
+ configure_syntax :should
101
+ end
102
+ end
103
+
104
+ context 'when configured to [:should, :expect]' do
105
+ before { configure_syntax [:should, :expect] }
106
+
107
+ it 'adds the should methods to every object' do
108
+ expect(dbl).to respond_to(*should_methods)
109
+ end
110
+
111
+ it 'adds `any_instance` to every class' do
112
+ expect(Class.new).to respond_to(*should_class_methods)
113
+ end
114
+
115
+ it 'adds the expect methods to the example group context' do
116
+ expect(self).to respond_to(*expect_methods)
117
+ end
118
+
119
+ it 'reports that both syntaxes are enabled' do
120
+ expect(configured_syntax).to eq([:should, :expect])
121
+ end
122
+
123
+ it "does not warn about the should syntax" do
124
+ expect(RSpec).not_to receive(:deprecate)
125
+ expect(Object.new).not_to receive(:bees)
126
+ end
127
+ end
128
+ end
129
+
130
+ describe "configuring rspec-mocks directly" do
131
+ it_behaves_like "configuring the syntax" do
132
+ def configure_syntax(syntax)
133
+ RSpec::Mocks.configuration.syntax = syntax
134
+ end
135
+
136
+ def configured_syntax
137
+ RSpec::Mocks.configuration.syntax
138
+ end
139
+
140
+ def configure_default_syntax
141
+ RSpec::Mocks.configuration.reset_syntaxes_to_default
142
+ end
143
+ end
144
+ end
145
+
146
+ describe "configuring using the rspec-core config API" do
147
+ it_behaves_like "configuring the syntax" do
148
+ def configure_syntax(syntax)
149
+ RSpec.configure do |rspec|
150
+ rspec.mock_with :rspec do |c|
151
+ c.syntax = syntax
152
+ end
153
+ end
154
+ end
155
+
156
+ def configured_syntax
157
+ RSpec.configure do |rspec|
158
+ rspec.mock_with :rspec do |c|
159
+ return c.syntax
160
+ end
161
+ end
162
+ end
163
+
164
+ def configure_default_syntax
165
+ RSpec.configure do |rspec|
166
+ rspec.mock_with :rspec do |c|
167
+ c.reset_syntaxes_to_default
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,830 @@
1
+ module RSpec
2
+ module Mocks
3
+ RSpec.describe Double do
4
+ before(:each) { @double = double("test double") }
5
+ after(:each) { reset @double }
6
+
7
+ it "has method_missing as private" do
8
+ expect(RSpec::Mocks::Double.private_instance_methods).to include_method(:method_missing)
9
+ end
10
+
11
+ it "does not respond_to? method_missing (because it's private)" do
12
+ expect(RSpec::Mocks::Double.new).not_to respond_to(:method_missing)
13
+ end
14
+
15
+ it "uses 'Double' in failure messages" do
16
+ double = double('name')
17
+ expect { double.foo }.to raise_error(/Double "name" received/)
18
+ end
19
+
20
+ it "hides internals in its inspect representation" do
21
+ m = double('cup')
22
+ expect(m.inspect).to match(/#<RSpec::Mocks::Double:0x[a-f0-9.]+ @name="cup">/)
23
+ end
24
+
25
+ it 'does not blow up when resetting standard object methods' do
26
+ dbl = double(:tainted? => true)
27
+ expect(dbl.tainted?).to eq(true)
28
+ expect { reset dbl }.not_to raise_error
29
+ end
30
+
31
+ it 'does not get string vs symbol messages confused' do
32
+ dbl = double("foo" => 1)
33
+ allow(dbl).to receive(:foo).and_return(2)
34
+ expect(dbl.foo).to eq(2)
35
+ expect { reset dbl }.not_to raise_error
36
+ end
37
+
38
+ it "generates the correct error when an unfulfilled expectation uses an unused double as a `with` argument" do
39
+ expect {
40
+ a = double('a')
41
+ b = double('b')
42
+ expect(a).to receive(:append).with(b)
43
+ verify_all
44
+ }.to raise_error(RSpec::Mocks::MockExpectationError)
45
+ end
46
+
47
+ it 'allows string representation of methods in constructor' do
48
+ dbl = double('foo' => 1)
49
+ expect(dbl.foo).to eq(1)
50
+ end
51
+
52
+ it 'allows setter methods to be stubbed' do
53
+ dbl = double('foo=' => 1)
54
+
55
+ # Note the specified return value is thrown away. This is a Ruby semantics
56
+ # thing. You cannot change the return value of assignment.
57
+ expect(dbl.foo = "bar").to eq("bar")
58
+ end
59
+
60
+ it 'allows `class` to be stubbed even when `any_instance` has already been used' do
61
+ # See https://github.com/rspec/rspec-mocks/issues/687
62
+ # The infinite recursion code path was only triggered when there were
63
+ # active any instance recorders in the current example, so we make one here.
64
+ allow_any_instance_of(Object).to receive(:bar).and_return(2)
65
+
66
+ dbl = double(:foo => 1, :class => String)
67
+ expect(dbl.foo).to eq(1)
68
+ expect(dbl.class).to eq(String)
69
+ end
70
+
71
+ it 'allows `send` to be stubbed' do
72
+ dbl = double
73
+ allow(dbl).to receive(:send).and_return("received")
74
+ expect(dbl.send(:some_msg)).to eq("received")
75
+ end
76
+
77
+ it "reports line number of expectation of unreceived message" do
78
+ expected_error_line = __LINE__; expect(@double).to receive(:wont_happen).with("x", 3)
79
+ expect {
80
+ verify @double
81
+ }.to raise_error(RSpec::Mocks::MockExpectationError) { |e|
82
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
83
+ expect(e.backtrace[0]).to match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
84
+ }
85
+ end
86
+
87
+ it "reports line number of expectation of unreceived message after a message expecation after similar stub" do
88
+ allow(@double).to receive(:wont_happen)
89
+ expected_error_line = __LINE__; expect(@double).to receive(:wont_happen).with("x", 3)
90
+ expect {
91
+ verify @double
92
+ }.to raise_error(RSpec::Mocks::MockExpectationError) { |e|
93
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
94
+ expect(e.backtrace[0]).to match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
95
+ }
96
+ end
97
+
98
+ it "passes when not receiving message specified as not to be received" do
99
+ expect(@double).not_to receive(:not_expected)
100
+ verify @double
101
+ end
102
+
103
+ it "prevents confusing double-negative expressions involving `never`" do
104
+ expect {
105
+ expect(@double).not_to receive(:not_expected).never
106
+ }.to raise_error(/trying to negate it again/)
107
+ end
108
+
109
+ it "warns when `and_return` is called on a negative expectation" do
110
+ expect {
111
+ expect(@double).not_to receive(:do_something).and_return(1)
112
+ }.to raise_error(/not supported/)
113
+
114
+ expect {
115
+ expect(@double).not_to receive(:do_something).and_return(1)
116
+ }.to raise_error(/not supported/)
117
+
118
+ expect {
119
+ expect(@double).to receive(:do_something).never.and_return(1)
120
+ }.to raise_error(/not supported/)
121
+ end
122
+
123
+ it "passes when receiving message specified as not to be received with different args" do
124
+ expect(@double).not_to receive(:message).with("unwanted text")
125
+ expect(@double).to receive(:message).with("other text")
126
+ @double.message "other text"
127
+ verify @double
128
+ end
129
+
130
+ it "fails when receiving message specified as not to be received" do
131
+ expect(@double).not_to receive(:not_expected)
132
+ expect {
133
+ @double.not_expected
134
+ }.to raise_error(
135
+ RSpec::Mocks::MockExpectationError,
136
+ %Q|(Double "test double").not_expected(no args)\n expected: 0 times with any arguments\n received: 1 time|
137
+ )
138
+ end
139
+
140
+ it "fails when receiving message specified as not to be received with args" do
141
+ expect(@double).not_to receive(:not_expected).with("unexpected text")
142
+ expect {
143
+ @double.not_expected("unexpected text")
144
+ }.to raise_error(
145
+ RSpec::Mocks::MockExpectationError,
146
+ %Q|(Double "test double").not_expected("unexpected text")\n expected: 0 times with arguments: ("unexpected text")\n received: 1 time with arguments: ("unexpected text")|
147
+ )
148
+ end
149
+
150
+ it "fails when array arguments do not match" do
151
+ expect(@double).not_to receive(:not_expected).with(["do not want"])
152
+ expect {
153
+ @double.not_expected(["do not want"])
154
+ }.to raise_error(
155
+ RSpec::Mocks::MockExpectationError,
156
+ %Q|(Double "test double").not_expected(["do not want"])\n expected: 0 times with arguments: (["do not want"])\n received: 1 time with arguments: (["do not want"])|
157
+ )
158
+ end
159
+
160
+ context "when specifying a message should not be received with specific args" do
161
+ context "using `expect(...).not_to receive()`" do
162
+ it 'passes when receiving the message with different args' do
163
+ expect(@double).not_to receive(:not_expected).with("unexpected text")
164
+ @double.not_expected "really unexpected text"
165
+ verify @double
166
+ end
167
+ end
168
+
169
+ context "using `expect(...).to receive().never`" do
170
+ it 'passes when receiving the message with different args' do
171
+ expect(@double).to receive(:not_expected).with("unexpected text").never
172
+ @double.not_expected "really unexpected text"
173
+ verify @double
174
+ end
175
+ end
176
+ end
177
+
178
+ it 'does not get confused when a negative expecation is used with a string and symbol message' do
179
+ allow(@double).to receive(:foo) { 3 }
180
+ expect(@double).not_to receive(:foo).with(1)
181
+ expect(@double).not_to receive("foo").with(2)
182
+
183
+ expect(@double.foo).to eq(3)
184
+ verify @double
185
+ end
186
+
187
+ it 'does not get confused when a positive expectation is used with a string and symbol message' do
188
+ expect(@double).to receive(:foo).with(1)
189
+ expect(@double).to receive("foo").with(2)
190
+
191
+ @double.foo(1)
192
+ @double.foo(2)
193
+
194
+ verify @double
195
+ end
196
+
197
+ it "allows parameter as return value" do
198
+ expect(@double).to receive(:something).with("a","b","c").and_return("booh")
199
+ expect(@double.something("a","b","c")).to eq "booh"
200
+ verify @double
201
+ end
202
+
203
+ it "returns the previously stubbed value if no return value is set" do
204
+ allow(@double).to receive(:something).with("a","b","c").and_return(:stubbed_value)
205
+ expect(@double).to receive(:something).with("a","b","c")
206
+ expect(@double.something("a","b","c")).to eq :stubbed_value
207
+ verify @double
208
+ end
209
+
210
+ it "returns nil if no return value is set and there is no previously stubbed value" do
211
+ expect(@double).to receive(:something).with("a","b","c")
212
+ expect(@double.something("a","b","c")).to be_nil
213
+ verify @double
214
+ end
215
+
216
+ it "raises exception if args don't match when method called" do
217
+ expect(@double).to receive(:something).with("a","b","c").and_return("booh")
218
+ expect {
219
+ @double.something("a","d","c")
220
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
221
+ end
222
+
223
+ describe "even when a similar expectation with different arguments exist" do
224
+ it "raises exception if args don't match when method called, correctly reporting the offending arguments" do
225
+ expect(@double).to receive(:something).with("a","b","c").once
226
+ expect(@double).to receive(:something).with("z","x","c").once
227
+ expect {
228
+ @double.something("a","b","c")
229
+ @double.something("z","x","g")
230
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (\"z\", \"x\", \"c\")\n got: (\"z\", \"x\", \"g\")")
231
+ end
232
+ end
233
+
234
+ it "raises exception if args don't match when method called even when the method is stubbed" do
235
+ allow(@double).to receive(:something)
236
+ expect(@double).to receive(:something).with("a","b","c")
237
+ expect {
238
+ @double.something("a","d","c")
239
+ verify @double
240
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
241
+ end
242
+
243
+ it "raises exception if args don't match when method called even when using null_object" do
244
+ @double = double("test double").as_null_object
245
+ expect(@double).to receive(:something).with("a","b","c")
246
+ expect {
247
+ @double.something("a","d","c")
248
+ verify @double
249
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
250
+ end
251
+
252
+ describe 'with a method that has a default argument' do
253
+ it "raises an exception if the arguments don't match when the method is called, correctly reporting the offending arguments" do
254
+ def @double.method_with_default_argument(arg={}); end
255
+ expect(@double).to receive(:method_with_default_argument).with({})
256
+
257
+ expect {
258
+ @double.method_with_default_argument(nil)
259
+ verify @double
260
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :method_with_default_argument with unexpected arguments\n expected: ({})\n got: (nil)")
261
+ end
262
+ end
263
+
264
+ it "fails if unexpected method called" do
265
+ expect {
266
+ @double.something("a","b","c")
267
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received unexpected message :something with (\"a\", \"b\", \"c\")")
268
+ end
269
+
270
+ it "uses block for expectation if provided" do
271
+ expect(@double).to receive(:something) do | a, b |
272
+ expect(a).to eq "a"
273
+ expect(b).to eq "b"
274
+ "booh"
275
+ end
276
+ expect(@double.something("a", "b")).to eq "booh"
277
+ verify @double
278
+ end
279
+
280
+ it "fails if expectation block fails" do
281
+ expect(@double).to receive(:something) do |bool|
282
+ expect(bool).to be_truthy
283
+ end
284
+
285
+ expect {
286
+ @double.something false
287
+ }.to raise_error(RSpec::Expectations::ExpectationNotMetError)
288
+ end
289
+
290
+ it "is wrappable in an array" do
291
+ with_isolated_stderr do
292
+ expect( Array(@double) ).to eq([@double])
293
+ end
294
+ end
295
+
296
+ it "is wrappable in an array when a null object" do
297
+ with_isolated_stderr do
298
+ expect( Array(@double.as_null_object) ).to eq [@double]
299
+ end
300
+ end
301
+
302
+ it "responds to to_ary as a null object" do
303
+ expect(@double.as_null_object.to_ary).to eq nil
304
+ end
305
+
306
+ it "responds to to_a as a null object" do
307
+ if RUBY_VERSION.to_f > 1.8
308
+ expect(@double.as_null_object.to_a).to eq nil
309
+ else
310
+ with_isolated_stderr do
311
+ expect(@double.as_null_object.to_a).to eq [@double]
312
+ end
313
+ end
314
+ end
315
+
316
+ it "passes proc to expectation block without an argument" do
317
+ expect(@double).to receive(:foo) { |&block| expect(block.call).to eq(:bar) }
318
+ @double.foo { :bar }
319
+ end
320
+
321
+ it "passes proc to expectation block with an argument" do
322
+ expect(@double).to receive(:foo) { |arg, &block| expect(block.call).to eq(:bar) }
323
+ @double.foo(:arg) { :bar }
324
+ end
325
+
326
+ it "passes proc to stub block without an argurment" do
327
+ allow(@double).to receive(:foo) { |&block| expect(block.call).to eq(:bar) }
328
+ @double.foo { :bar }
329
+ end
330
+
331
+ it "passes proc to stub block with an argument" do
332
+ allow(@double).to receive(:foo) { |arg, &block| expect(block.call).to eq(:bar) }
333
+ @double.foo(:arg) { :bar }
334
+ end
335
+
336
+ it "fails right away when method defined as never is received" do
337
+ expect(@double).to receive(:not_expected).never
338
+ expect { @double.not_expected }.
339
+ to raise_error(RSpec::Mocks::MockExpectationError,
340
+ %Q|(Double "test double").not_expected(no args)\n expected: 0 times with any arguments\n received: 1 time|
341
+ )
342
+ end
343
+
344
+ it "raises RuntimeError by default" do
345
+ expect(@double).to receive(:something).and_raise
346
+ expect { @double.something }.to raise_error(RuntimeError)
347
+ end
348
+
349
+ it "raises RuntimeError with a message by default" do
350
+ expect(@double).to receive(:something).and_raise("error message")
351
+ expect { @double.something }.to raise_error(RuntimeError, "error message")
352
+ end
353
+
354
+ it "raises an exception of a given type without an error message" do
355
+ expect(@double).to receive(:something).and_raise(StandardError)
356
+ expect { @double.something }.to raise_error(StandardError)
357
+ end
358
+
359
+ it "raises an exception of a given type with a message" do
360
+ expect(@double).to receive(:something).and_raise(RuntimeError, "error message")
361
+ expect { @double.something }.to raise_error(RuntimeError, "error message")
362
+ end
363
+
364
+ it "raises a given instance of an exception" do
365
+ expect(@double).to receive(:something).and_raise(RuntimeError.new("error message"))
366
+ expect { @double.something }.to raise_error(RuntimeError, "error message")
367
+ end
368
+
369
+ class OutOfGas < StandardError
370
+ attr_reader :amount, :units
371
+ def initialize(amount, units)
372
+ @amount = amount
373
+ @units = units
374
+ end
375
+ end
376
+
377
+ it "raises a given instance of an exception with arguments other than the standard 'message'" do
378
+ expect(@double).to receive(:something).and_raise(OutOfGas.new(2, :oz))
379
+
380
+ expect {
381
+ @double.something
382
+ }.to raise_error(OutOfGas) { |e|
383
+ expect(e.amount).to eq 2
384
+ expect(e.units).to eq :oz
385
+ }
386
+ end
387
+
388
+ it "does not raise when told to if args dont match" do
389
+ expect(@double).to receive(:something).with(2).and_raise(RuntimeError)
390
+ expect {
391
+ @double.something 1
392
+ }.to raise_error(RSpec::Mocks::MockExpectationError)
393
+ end
394
+
395
+ it "throws when told to" do
396
+ expect(@double).to receive(:something).and_throw(:blech)
397
+ expect {
398
+ @double.something
399
+ }.to throw_symbol(:blech)
400
+ end
401
+
402
+ it "ignores args on any args" do
403
+ expect(@double).to receive(:something).at_least(:once).with(any_args)
404
+ @double.something
405
+ @double.something 1
406
+ @double.something "a", 2
407
+ @double.something [], {}, "joe", 7
408
+ verify @double
409
+ end
410
+
411
+ it "fails on no args if any args received" do
412
+ expect(@double).to receive(:something).with(no_args())
413
+ expect {
414
+ @double.something 1
415
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (no args)\n got: (1)")
416
+ end
417
+
418
+ it "fails when args are expected but none are received" do
419
+ expect(@double).to receive(:something).with(1)
420
+ expect {
421
+ @double.something
422
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :something with unexpected arguments\n expected: (1)\n got: (no args)")
423
+ end
424
+
425
+ it "returns value from block by default" do
426
+ allow(@double).to receive(:method_that_yields).and_yield
427
+ value = @double.method_that_yields { :returned_obj }
428
+ expect(value).to eq :returned_obj
429
+ verify @double
430
+ end
431
+
432
+ it "yields 0 args to blocks that take a variable number of arguments" do
433
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield
434
+ a = nil
435
+ @double.yield_back {|*x| a = x}
436
+ expect(a).to eq []
437
+ verify @double
438
+ end
439
+
440
+ it "yields 0 args multiple times to blocks that take a variable number of arguments" do
441
+ expect(@double).to receive(:yield_back).once.with(no_args()).once.and_yield.
442
+ and_yield
443
+ b = []
444
+ @double.yield_back {|*a| b << a}
445
+ expect(b).to eq [ [], [] ]
446
+ verify @double
447
+ end
448
+
449
+ it "yields one arg to blocks that take a variable number of arguments" do
450
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield(99)
451
+ a = nil
452
+ @double.yield_back {|*x| a = x}
453
+ expect(a).to eq [99]
454
+ verify @double
455
+ end
456
+
457
+ it "yields one arg 3 times consecutively to blocks that take a variable number of arguments" do
458
+ expect(@double).to receive(:yield_back).once.with(no_args()).once.and_yield(99).
459
+ and_yield(43).
460
+ and_yield("something fruity")
461
+ b = []
462
+ @double.yield_back {|*a| b << a}
463
+ expect(b).to eq [[99], [43], ["something fruity"]]
464
+ verify @double
465
+ end
466
+
467
+ it "yields many args to blocks that take a variable number of arguments" do
468
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
469
+ a = nil
470
+ @double.yield_back {|*x| a = x}
471
+ expect(a).to eq [99, 27, "go"]
472
+ verify @double
473
+ end
474
+
475
+ it "yields many args 3 times consecutively to blocks that take a variable number of arguments" do
476
+ expect(@double).to receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go").
477
+ and_yield("wait", :amber).
478
+ and_yield("stop", 12, :red)
479
+ b = []
480
+ @double.yield_back {|*a| b << a}
481
+ expect(b).to eq [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]]
482
+ verify @double
483
+ end
484
+
485
+ it "yields single value" do
486
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield(99)
487
+ a = nil
488
+ @double.yield_back {|x| a = x}
489
+ expect(a).to eq 99
490
+ verify @double
491
+ end
492
+
493
+ it "yields single value 3 times consecutively" do
494
+ expect(@double).to receive(:yield_back).once.with(no_args()).once.and_yield(99).
495
+ and_yield(43).
496
+ and_yield("something fruity")
497
+ b = []
498
+ @double.yield_back {|a| b << a}
499
+ expect(b).to eq [99, 43, "something fruity"]
500
+ verify @double
501
+ end
502
+
503
+ it "yields two values" do
504
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
505
+ a, b = nil
506
+ @double.yield_back {|x,y| a=x; b=y}
507
+ expect(a).to eq 'wha'
508
+ expect(b).to eq 'zup'
509
+ verify @double
510
+ end
511
+
512
+ it "yields two values 3 times consecutively" do
513
+ expect(@double).to receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
514
+ and_yield('not', 'down').
515
+ and_yield(14, 65)
516
+ c = []
517
+ @double.yield_back {|a,b| c << [a, b]}
518
+ expect(c).to eq [['wha', 'zup'], ['not', 'down'], [14, 65]]
519
+ verify @double
520
+ end
521
+
522
+ it "fails when calling yielding method with wrong arity" do
523
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
524
+ expect {
525
+ @double.yield_back {|a|}
526
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" yielded |\"wha\", \"zup\"| to block with arity of 1")
527
+ end
528
+
529
+ if kw_args_supported?
530
+ it 'fails when calling yielding method with invalid kw args' do
531
+ expect(@double).to receive(:yield_back).and_yield(:x => 1, :y => 2)
532
+ expect {
533
+ eval("@double.yield_back { |x: 1| }")
534
+ }.to raise_error(RSpec::Mocks::MockExpectationError,
535
+ 'Double "test double" yielded |{:x=>1, :y=>2}| to block with optional keyword args (:x)')
536
+ end
537
+ end
538
+
539
+ it "fails when calling yielding method consecutively with wrong arity" do
540
+ expect(@double).to receive(:yield_back).once.with(no_args()).and_yield('wha', 'zup').
541
+ and_yield('down').
542
+ and_yield(14, 65)
543
+ expect {
544
+ c = []
545
+ @double.yield_back {|a,b| c << [a, b]}
546
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" yielded |\"down\"| to block with arity of 2")
547
+ end
548
+
549
+ it "fails when calling yielding method without block" do
550
+ expect(@double).to receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
551
+ expect {
552
+ @double.yield_back
553
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" asked to yield |[\"wha\", \"zup\"]| but no block was passed")
554
+ end
555
+
556
+ it "is able to double send" do
557
+ expect(@double).to receive(:send).with(any_args)
558
+ @double.send 'hi'
559
+ verify @double
560
+ end
561
+
562
+ it "is able to raise from method calling yielding double" do
563
+ expect(@double).to receive(:yield_me).and_yield 44
564
+
565
+ expect {
566
+ @double.yield_me do |x|
567
+ raise "Bang"
568
+ end
569
+ }.to raise_error(StandardError, "Bang")
570
+
571
+ verify @double
572
+ end
573
+
574
+ it "clears expectations after verify" do
575
+ expect(@double).to receive(:foobar)
576
+ @double.foobar
577
+ verify @double
578
+ expect {
579
+ @double.foobar
580
+ }.to raise_error(RSpec::Mocks::MockExpectationError, %q|Double "test double" received unexpected message :foobar with (no args)|)
581
+ end
582
+
583
+ it "restores objects to their original state on rspec_reset" do
584
+ double = double("this is a double")
585
+ expect(double).to receive(:blah)
586
+ reset double
587
+ verify double #should throw if reset didn't work
588
+ end
589
+
590
+ it "temporarily replaces a method stub on a double" do
591
+ allow(@double).to receive(:msg).and_return(:stub_value)
592
+ expect(@double).to receive(:msg).with(:arg).and_return(:double_value)
593
+ expect(@double.msg(:arg)).to equal(:double_value)
594
+ expect(@double.msg).to equal(:stub_value)
595
+ expect(@double.msg).to equal(:stub_value)
596
+ verify @double
597
+ end
598
+
599
+ it "does not require a different signature to replace a method stub" do
600
+ allow(@double).to receive(:msg).and_return(:stub_value)
601
+ expect(@double).to receive(:msg).and_return(:double_value)
602
+ expect(@double.msg(:arg)).to equal(:double_value)
603
+ expect(@double.msg).to equal(:stub_value)
604
+ expect(@double.msg).to equal(:stub_value)
605
+ verify @double
606
+ end
607
+
608
+ it "raises an error when a previously stubbed method has a negative expectation" do
609
+ allow(@double).to receive(:msg).and_return(:stub_value)
610
+ expect(@double).not_to receive(:msg)
611
+ expect { @double.msg(:arg) }.to raise_error(RSpec::Mocks::MockExpectationError)
612
+ end
613
+
614
+ it "temporarily replaces a method stub on a non-double" do
615
+ non_double = Object.new
616
+ allow(non_double).to receive(:msg).and_return(:stub_value)
617
+ expect(non_double).to receive(:msg).with(:arg).and_return(:double_value)
618
+ expect(non_double.msg(:arg)).to equal(:double_value)
619
+ expect(non_double.msg).to equal(:stub_value)
620
+ expect(non_double.msg).to equal(:stub_value)
621
+ verify non_double
622
+ end
623
+
624
+ it "returns the stubbed value when no new value specified" do
625
+ allow(@double).to receive(:msg).and_return(:stub_value)
626
+ expect(@double).to receive(:msg)
627
+ expect(@double.msg).to equal(:stub_value)
628
+ verify @double
629
+ end
630
+
631
+ it "returns the stubbed value when stubbed with args and no new value specified" do
632
+ allow(@double).to receive(:msg).with(:arg).and_return(:stub_value)
633
+ expect(@double).to receive(:msg).with(:arg)
634
+ expect(@double.msg(:arg)).to equal(:stub_value)
635
+ verify @double
636
+ end
637
+
638
+ it "does not mess with the stub's yielded values when also doubleed" do
639
+ allow(@double).to receive(:yield_back).and_yield(:stub_value)
640
+ expect(@double).to receive(:yield_back).and_yield(:double_value)
641
+ @double.yield_back{|v| expect(v).to eq :double_value }
642
+ @double.yield_back{|v| expect(v).to eq :stub_value }
643
+ verify @double
644
+ end
645
+
646
+ it "can yield multiple times when told to do so" do
647
+ allow(@double).to receive(:foo).and_yield(:stub_value)
648
+ expect(@double).to receive(:foo).and_yield(:first_yield).and_yield(:second_yield)
649
+
650
+ expect { |b| @double.foo(&b) }.to yield_successive_args(:first_yield, :second_yield)
651
+ expect { |b| @double.foo(&b) }.to yield_with_args(:stub_value)
652
+
653
+ verify @double
654
+ end
655
+
656
+ it "assigns stub return values" do
657
+ double = RSpec::Mocks::Double.new('name', :message => :response)
658
+ expect(double.message).to eq :response
659
+ end
660
+
661
+ describe "a double message receiving a block" do
662
+ before(:each) do
663
+ @double = double("double")
664
+ @calls = 0
665
+ end
666
+
667
+ def add_call
668
+ @calls = @calls + 1
669
+ end
670
+
671
+ it "supports a block passed to `receive` for `expect`" do
672
+ expect(@double).to receive(:foo) { add_call }
673
+
674
+ @double.foo
675
+
676
+ expect(@calls).to eq 1
677
+ end
678
+
679
+ it "supports a block passed to `receive` for `expect` after a similar stub" do
680
+ allow(@double).to receive(:foo).and_return(:bar)
681
+ expect(@double).to receive(:foo) { add_call }
682
+
683
+ @double.foo
684
+
685
+ expect(@calls).to eq 1
686
+ end
687
+
688
+ it "calls the block after #once" do
689
+ expect(@double).to receive(:foo).once { add_call }
690
+
691
+ @double.foo
692
+
693
+ expect(@calls).to eq 1
694
+ end
695
+
696
+ it "calls the block after #twice" do
697
+ expect(@double).to receive(:foo).twice { add_call }
698
+
699
+ @double.foo
700
+ @double.foo
701
+
702
+ expect(@calls).to eq 2
703
+ end
704
+
705
+ it "calls the block after #times" do
706
+ expect(@double).to receive(:foo).exactly(10).times { add_call }
707
+
708
+ (1..10).each { @double.foo }
709
+
710
+ expect(@calls).to eq 10
711
+ end
712
+
713
+ it "calls the block after #ordered" do
714
+ expect(@double).to receive(:foo).ordered { add_call }
715
+ expect(@double).to receive(:bar).ordered { add_call }
716
+
717
+ @double.foo
718
+ @double.bar
719
+
720
+ expect(@calls).to eq 2
721
+ end
722
+ end
723
+
724
+ describe 'string representation generated by #to_s' do
725
+ it 'does not contain < because that might lead to invalid HTML in some situations' do
726
+ double = double("Dog")
727
+ valid_html_str = "#{double}"
728
+ expect(valid_html_str).not_to include('<')
729
+ end
730
+ end
731
+
732
+ describe "#to_str", :unless => RUBY_VERSION == '1.9.2' do
733
+ it "should not respond to #to_str to avoid being coerced to strings by the runtime" do
734
+ double = double("Foo")
735
+ expect { double.to_str }.to raise_error(
736
+ RSpec::Mocks::MockExpectationError,
737
+ 'Double "Foo" received unexpected message :to_str with (no args)')
738
+ end
739
+ end
740
+
741
+ describe "double created with no name" do
742
+ it "does not use a name in a failure message" do
743
+ double = double()
744
+ expect {double.foo}.to raise_error(/Double received/)
745
+ end
746
+
747
+ it "does respond to initially stubbed methods" do
748
+ double = double(:foo => "woo", :bar => "car")
749
+ expect(double.foo).to eq "woo"
750
+ expect(double.bar).to eq "car"
751
+ end
752
+ end
753
+
754
+ describe "==" do
755
+ it "sends '== self' to the comparison object" do
756
+ first = double('first')
757
+ second = double('second')
758
+
759
+ expect(first).to receive(:==).with(second)
760
+ second == first
761
+ end
762
+ end
763
+
764
+ describe "with" do
765
+ before { @double = double('double') }
766
+ context "with args" do
767
+ context "with matching args" do
768
+ it "passes" do
769
+ expect(@double).to receive(:foo).with('bar')
770
+ @double.foo('bar')
771
+ end
772
+ end
773
+
774
+ context "with non-matching args" do
775
+ it "fails" do
776
+ expect(@double).to receive(:foo).with('bar')
777
+ expect do
778
+ @double.foo('baz')
779
+ end.to raise_error
780
+ reset @double
781
+ end
782
+ end
783
+
784
+ context "with non-matching doubles" do
785
+ it "fails" do
786
+ d1 = double('1')
787
+ d2 = double('2')
788
+ expect(@double).to receive(:foo).with(d1)
789
+ expect do
790
+ @double.foo(d2)
791
+ end.to raise_error
792
+ reset @double
793
+ end
794
+ end
795
+
796
+ context "with non-matching doubles as_null_object" do
797
+ it "fails" do
798
+ d1 = double('1').as_null_object
799
+ d2 = double('2').as_null_object
800
+ expect(@double).to receive(:foo).with(d1)
801
+ expect do
802
+ @double.foo(d2)
803
+ end.to raise_error
804
+ reset @double
805
+ end
806
+ end
807
+ end
808
+
809
+ context "with a block" do
810
+ context "with matching args" do
811
+ it "returns the result of the block" do
812
+ expect(@double).to receive(:foo).with('bar') { 'baz' }
813
+ expect(@double.foo('bar')).to eq('baz')
814
+ end
815
+ end
816
+
817
+ context "with non-matching args" do
818
+ it "fails" do
819
+ expect(@double).to receive(:foo).with('bar') { 'baz' }
820
+ expect do
821
+ expect(@double.foo('wrong')).to eq('baz')
822
+ end.to raise_error(/received :foo with unexpected arguments/)
823
+ reset @double
824
+ end
825
+ end
826
+ end
827
+ end
828
+ end
829
+ end
830
+ end