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,39 @@
1
+ RSpec.describe RSpec::Mocks::AnyInstance::MessageChains do
2
+ let(:recorder) { double }
3
+ let(:chains) { RSpec::Mocks::AnyInstance::MessageChains.new }
4
+ let(:stub_chain) { RSpec::Mocks::AnyInstance::StubChain.new recorder }
5
+ let(:expectation_chain) { RSpec::Mocks::AnyInstance::PositiveExpectationChain.new recorder }
6
+
7
+ it "knows if a method does not have an expectation set on it" do
8
+ chains.add(:method_name, stub_chain)
9
+ expect(chains.has_expectation?(:method_name)).to be_falsey
10
+ end
11
+
12
+ it "knows if a method has an expectation set on it" do
13
+ chains.add(:method_name, stub_chain)
14
+ chains.add(:method_name, expectation_chain)
15
+ expect(chains.has_expectation?(:method_name)).to be_truthy
16
+ end
17
+
18
+ it "can remove all stub chains" do
19
+ chains.add(:method_name, stub_chain)
20
+ chains.add(:method_name, expectation_chain)
21
+ chains.add(:method_name, RSpec::Mocks::AnyInstance::StubChain.new(recorder))
22
+
23
+ chains.remove_stub_chains_for!(:method_name)
24
+ expect(chains[:method_name]).to eq([expectation_chain])
25
+ end
26
+
27
+ context "creating stub chains" do
28
+ it "understands how to add a stub chain for a method" do
29
+ chains.add(:method_name, stub_chain)
30
+ expect(chains[:method_name]).to eq([stub_chain])
31
+ end
32
+
33
+ it "allows multiple stub chains for a method" do
34
+ chains.add(:method_name, stub_chain)
35
+ chains.add(:method_name, another_stub_chain = RSpec::Mocks::AnyInstance::StubChain.new(recorder))
36
+ expect(chains[:method_name]).to eq([stub_chain, another_stub_chain])
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,1242 @@
1
+ require 'delegate'
2
+
3
+ module RSpec
4
+ module Mocks
5
+ RSpec.describe "#any_instance" do
6
+ class CustomErrorForAnyInstanceSpec < StandardError;end
7
+
8
+ let(:klass) do
9
+ Class.new do
10
+ def existing_method; :existing_method_return_value; end
11
+ def existing_method_with_arguments(arg_one, arg_two = nil); :existing_method_with_arguments_return_value; end
12
+ def another_existing_method; end
13
+ private
14
+ def private_method; :private_method_return_value; end
15
+ end
16
+ end
17
+ let(:existing_method_return_value){ :existing_method_return_value }
18
+
19
+ context "invocation order" do
20
+ context "when stubbing" do
21
+ it "raises an error if 'with' follows 'and_return'" do
22
+ expect { allow_any_instance_of(klass).to receive(:foo).and_return(1).with("1") }.to raise_error(NoMethodError)
23
+ end
24
+
25
+ it "raises an error if 'with' follows 'and_raise'" do
26
+ expect { allow_any_instance_of(klass).to receive(:foo).and_raise(1).with("1") }.to raise_error(NoMethodError)
27
+ end
28
+
29
+ it "raises an error if 'with' follows 'and_yield'" do
30
+ expect { allow_any_instance_of(klass).to receive(:foo).and_yield(1).with("1") }.to raise_error(NoMethodError)
31
+ end
32
+ end
33
+
34
+ context "when setting a message expectation" do
35
+ it "raises an error if 'with' follows 'and_return'" do
36
+ pending "see Github issue #42"
37
+ expect { expect_any_instance_of(klass).to receive(:foo).and_return(1).with("1") }.to raise_error(NoMethodError)
38
+ end
39
+
40
+ it "raises an error if 'with' follows 'and_raise'" do
41
+ pending "see Github issue #42"
42
+ expect { expect_any_instance_of(klass).to receive(:foo).and_raise(1).with("1") }.to raise_error(NoMethodError)
43
+ end
44
+ end
45
+ end
46
+
47
+ context "when stubbing" do
48
+ it "does not suppress an exception when a method that doesn't exist is invoked" do
49
+ allow_any_instance_of(klass).to receive(:foo)
50
+ expect { klass.new.bar }.to raise_error(NoMethodError)
51
+ end
52
+
53
+ context 'multiple methods' do
54
+ it "allows multiple methods to be stubbed in a single invocation" do
55
+ allow_any_instance_of(klass).to receive_messages(:foo => 'foo', :bar => 'bar')
56
+ instance = klass.new
57
+ expect(instance.foo).to eq('foo')
58
+ expect(instance.bar).to eq('bar')
59
+ end
60
+
61
+ context "allows a chain of methods to be stubbed using #receive_message_chain" do
62
+ example "given symbols representing the methods" do
63
+ allow_any_instance_of(klass).to receive_message_chain(:one, :two, :three).and_return(:four)
64
+ expect(klass.new.one.two.three).to eq(:four)
65
+ end
66
+
67
+ example "given a hash as the last argument uses the value as the expected return value" do
68
+ allow_any_instance_of(klass).to receive_message_chain(:one, :two, :three => :four)
69
+ expect(klass.new.one.two.three).to eq(:four)
70
+ end
71
+
72
+ example "given a string of '.' separated method names representing the chain" do
73
+ allow_any_instance_of(klass).to receive_message_chain('one.two.three').and_return(:four)
74
+ expect(klass.new.one.two.three).to eq(:four)
75
+ end
76
+ end
77
+ end
78
+
79
+ context "behaves as 'every instance'" do
80
+ let(:super_class) { Class.new { def foo; 'bar'; end } }
81
+ let(:sub_class) { Class.new(super_class) }
82
+
83
+ it "stubs every instance in the spec" do
84
+ allow_any_instance_of(klass).to receive(:foo).and_return(result = Object.new)
85
+ expect(klass.new.foo).to eq(result)
86
+ expect(klass.new.foo).to eq(result)
87
+ end
88
+
89
+ it "stubs instance created before any_instance was called" do
90
+ instance = klass.new
91
+ allow_any_instance_of(klass).to receive(:foo).and_return(result = Object.new)
92
+ expect(instance.foo).to eq(result)
93
+ end
94
+
95
+ it 'handles freeze and duplication correctly' do
96
+ allow_any_instance_of(String).to receive(:any_method)
97
+
98
+ foo = 'foo'.freeze
99
+ expect(foo.dup.concat 'bar').to eq 'foobar'
100
+ end
101
+
102
+ it 'handles stubbing on super and subclasses' do
103
+ allow_any_instance_of(super_class).to receive(:foo)
104
+ allow_any_instance_of(sub_class).to receive(:foo).and_return('baz')
105
+ expect(sub_class.new.foo).to eq('baz')
106
+ end
107
+
108
+ it 'handles method restoration on subclasses' do
109
+ allow_any_instance_of(super_class).to receive(:foo)
110
+ allow_any_instance_of(sub_class).to receive(:foo)
111
+ allow_any_instance_of(sub_class).to receive(:foo).and_call_original
112
+ expect(sub_class.new.foo).to eq("bar")
113
+ end
114
+ end
115
+
116
+ context "when the class has a prepended module", :if => Support::RubyFeatures.module_prepends_supported? do
117
+ it 'allows stubbing a method that is not defined on the prepended module' do
118
+ klass.class_eval { prepend Module.new { def other; end } }
119
+ allow_any_instance_of(klass).to receive(:foo).and_return(45)
120
+
121
+ expect(klass.new.foo).to eq(45)
122
+ end
123
+
124
+ it 'prevents stubbing a method that is defined on the prepended module' do
125
+ klass.class_eval { prepend Module.new { def foo; end } }
126
+
127
+ expect {
128
+ allow_any_instance_of(klass).to receive(:foo).and_return(45)
129
+ }.to fail_with(/prepended module/)
130
+ end
131
+
132
+ it 'allows stubbing a chain starting with a method that is not defined on the prepended module' do
133
+ klass.class_eval { prepend Module.new { def other; end } }
134
+ allow_any_instance_of(klass).to receive_message_chain(:foo, :bar).and_return(45)
135
+
136
+ expect(klass.new.foo.bar).to eq(45)
137
+ end
138
+
139
+ it 'prevents stubbing a chain starting with a method that is defined on the prepended module' do
140
+ klass.class_eval { prepend Module.new { def foo; end } }
141
+
142
+ expect {
143
+ allow_any_instance_of(klass).to receive_message_chain(:foo, :bar).and_return(45)
144
+ }.to fail_with(/prepended module/)
145
+ end
146
+ end
147
+
148
+ context "with argument matching" do
149
+ before do
150
+ allow_any_instance_of(klass).to receive(:foo).with(:param_one, :param_two).and_return(:result_one)
151
+ allow_any_instance_of(klass).to receive(:foo).with(:param_three, :param_four).and_return(:result_two)
152
+ end
153
+
154
+ it "returns the stubbed value when arguments match" do
155
+ instance = klass.new
156
+ expect(instance.foo(:param_one, :param_two)).to eq(:result_one)
157
+ expect(instance.foo(:param_three, :param_four)).to eq(:result_two)
158
+ end
159
+
160
+ it "fails the spec with an expectation error when the arguments do not match" do
161
+ expect do
162
+ klass.new.foo(:param_one, :param_three)
163
+ end.to(raise_error(RSpec::Mocks::MockExpectationError))
164
+ end
165
+ end
166
+
167
+ context "with multiple stubs" do
168
+ before do
169
+ allow_any_instance_of(klass).to receive(:foo).and_return(1)
170
+ allow_any_instance_of(klass).to receive(:bar).and_return(2)
171
+ end
172
+
173
+ it "stubs a method" do
174
+ instance = klass.new
175
+ expect(instance.foo).to eq(1)
176
+ expect(instance.bar).to eq(2)
177
+ end
178
+
179
+ it "returns the same value for calls on different instances" do
180
+ expect(klass.new.foo).to eq(klass.new.foo)
181
+ expect(klass.new.bar).to eq(klass.new.bar)
182
+ end
183
+ end
184
+
185
+ context "with #and_return" do
186
+ it "can stub a method that doesn't exist" do
187
+ allow_any_instance_of(klass).to receive(:foo).and_return(1)
188
+ expect(klass.new.foo).to eq(1)
189
+ end
190
+
191
+ it "can stub a method that exists" do
192
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(1)
193
+ expect(klass.new.existing_method).to eq(1)
194
+ end
195
+
196
+ it "returns the same object for calls on different instances" do
197
+ return_value = Object.new
198
+ allow_any_instance_of(klass).to receive(:foo).and_return(return_value)
199
+ expect(klass.new.foo).to be(return_value)
200
+ expect(klass.new.foo).to be(return_value)
201
+ end
202
+
203
+ it "can change how instances responds in the middle of an example" do
204
+ instance = klass.new
205
+
206
+ allow_any_instance_of(klass).to receive(:foo).and_return(1)
207
+ expect(instance.foo).to eq(1)
208
+ allow_any_instance_of(klass).to receive(:foo).and_return(2)
209
+ expect(instance.foo).to eq(2)
210
+ allow_any_instance_of(klass).to receive(:foo).and_raise("boom")
211
+ expect { instance.foo }.to raise_error("boom")
212
+ end
213
+ end
214
+
215
+ context "with #and_yield" do
216
+ it "yields the value specified" do
217
+ yielded_value = Object.new
218
+ allow_any_instance_of(klass).to receive(:foo).and_yield(yielded_value)
219
+ expect { |b| klass.new.foo(&b) }.to yield_with_args(yielded_value)
220
+ end
221
+ end
222
+
223
+ context 'with #and_call_original and competing #with' do
224
+ let(:klass) { Struct.new(:a_method) }
225
+
226
+ it 'can combine and_call_original, with, and_return' do
227
+ allow_any_instance_of(klass).to receive(:a_method).and_call_original
228
+ allow_any_instance_of(klass).to receive(:a_method).with(:arg).and_return('value')
229
+
230
+ expect(klass.new('org').a_method).to eq 'org'
231
+ expect(klass.new.a_method(:arg)).to eq 'value'
232
+ end
233
+
234
+ it 'can combine and_call_original, with, and_return (old syntax)' do
235
+ allow_any_instance_of(klass).to receive(:a_method).and_call_original
236
+ allow_any_instance_of(klass).to receive(:a_method).with(:arg).and_return('value')
237
+
238
+ expect(klass.new('org').a_method).to eq 'org'
239
+ expect(klass.new.a_method(:arg)).to eq 'value'
240
+ end
241
+ end
242
+
243
+ context "with #and_raise" do
244
+ it "can stub a method that doesn't exist" do
245
+ allow_any_instance_of(klass).to receive(:foo).and_raise(CustomErrorForAnyInstanceSpec)
246
+ expect { klass.new.foo }.to raise_error(CustomErrorForAnyInstanceSpec)
247
+ end
248
+
249
+ it "can stub a method that exists" do
250
+ allow_any_instance_of(klass).to receive(:existing_method).and_raise(CustomErrorForAnyInstanceSpec)
251
+ expect { klass.new.existing_method }.to raise_error(CustomErrorForAnyInstanceSpec)
252
+ end
253
+ end
254
+
255
+ context "with a block" do
256
+ it "stubs a method" do
257
+ allow_any_instance_of(klass).to receive(:foo) { 1 }
258
+ expect(klass.new.foo).to eq(1)
259
+ end
260
+
261
+ it "returns the same computed value for calls on different instances" do
262
+ allow_any_instance_of(klass).to receive(:foo) { 1 + 2 }
263
+ expect(klass.new.foo).to eq(klass.new.foo)
264
+ end
265
+ end
266
+
267
+ context "when partially mocking objects" do
268
+ let(:obj) { klass.new }
269
+
270
+ it "resets partially mocked objects correctly" do
271
+ allow_any_instance_of(klass).to receive(:existing_method).and_return("stubbed value")
272
+
273
+ # Simply resetting the proxy doesn't work
274
+ # what we need to have happen is
275
+ # ::RSpec::Mocks.space.any_instance_recorder_for(klass).stop_all_observation!
276
+ # but that is never invoked in ::
277
+ expect {
278
+ verify_all
279
+ }.to(
280
+ change { obj.existing_method }.from("stubbed value").to(:existing_method_return_value)
281
+ )
282
+ end
283
+ end
284
+
285
+ context "core ruby objects" do
286
+ it "works uniformly across *everything*" do
287
+ allow_any_instance_of(Object).to receive(:foo).and_return(1)
288
+ expect(Object.new.foo).to eq(1)
289
+ end
290
+
291
+ it "works with the non-standard constructor []" do
292
+ allow_any_instance_of(Array).to receive(:foo).and_return(1)
293
+ expect([].foo).to eq(1)
294
+ end
295
+
296
+ it "works with the non-standard constructor {}" do
297
+ allow_any_instance_of(Hash).to receive(:foo).and_return(1)
298
+ expect({}.foo).to eq(1)
299
+ end
300
+
301
+ it "works with the non-standard constructor \"\"" do
302
+ allow_any_instance_of(String).to receive(:foo).and_return(1)
303
+ expect("".foo).to eq(1)
304
+ end
305
+
306
+ it "works with the non-standard constructor \'\'" do
307
+ allow_any_instance_of(String).to receive(:foo).and_return(1)
308
+ expect(''.foo).to eq(1)
309
+ end
310
+
311
+ it "works with the non-standard constructor module" do
312
+ allow_any_instance_of(Module).to receive(:foo).and_return(1)
313
+ module RSpec::SampleRspecTestModule;end
314
+ expect(RSpec::SampleRspecTestModule.foo).to eq(1)
315
+ end
316
+
317
+ it "works with the non-standard constructor class" do
318
+ allow_any_instance_of(Class).to receive(:foo).and_return(1)
319
+ class RSpec::SampleRspecTestClass;end
320
+ expect(RSpec::SampleRspecTestClass.foo).to eq(1)
321
+ end
322
+ end
323
+ end
324
+
325
+ context "unstubbing using `and_call_original`" do
326
+ it "replaces the stubbed method with the original method" do
327
+ allow_any_instance_of(klass).to receive(:existing_method)
328
+ allow_any_instance_of(klass).to receive(:existing_method).and_call_original
329
+ expect(klass.new.existing_method).to eq(:existing_method_return_value)
330
+ end
331
+
332
+ it "removes all stubs with the supplied method name" do
333
+ allow_any_instance_of(klass).to receive(:existing_method).with(1)
334
+ allow_any_instance_of(klass).to receive(:existing_method).with(2)
335
+ allow_any_instance_of(klass).to receive(:existing_method).and_call_original
336
+ expect(klass.new.existing_method).to eq(:existing_method_return_value)
337
+ end
338
+
339
+ it "removes stubs even if they have already been invoked" do
340
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(:any_instance_value)
341
+ obj = klass.new
342
+ obj.existing_method
343
+ allow_any_instance_of(klass).to receive(:existing_method).and_call_original
344
+
345
+ expect(obj.existing_method).to eq(:existing_method_return_value)
346
+ end
347
+
348
+ it "removes stubs from sub class after invokation when super class was originally stubbed" do
349
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(:any_instance_value)
350
+ obj = Class.new(klass).new
351
+ expect(obj.existing_method).to eq(:any_instance_value)
352
+ allow_any_instance_of(klass).to receive(:existing_method).and_call_original
353
+
354
+ expect(obj.existing_method).to eq(:existing_method_return_value)
355
+ end
356
+
357
+ it "removes any stubs set directly on an instance" do
358
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(:any_instance_value)
359
+ obj = klass.new
360
+ allow(obj).to receive(:existing_method).and_return(:local_method)
361
+ allow_any_instance_of(klass).to receive(:existing_method).and_call_original
362
+ expect(obj.existing_method).to eq(:existing_method_return_value)
363
+ end
364
+
365
+ it "does not remove any expectations with the same method name" do
366
+ expect_any_instance_of(klass).to receive(:existing_method_with_arguments).with(3).and_return(:three)
367
+ allow_any_instance_of(klass).to receive(:existing_method_with_arguments).with(1)
368
+ allow_any_instance_of(klass).to receive(:existing_method_with_arguments).with(2)
369
+ allow_any_instance_of(klass).to receive(:existing_method_with_arguments).and_call_original
370
+ expect(klass.new.existing_method_with_arguments(3)).to eq(:three)
371
+ end
372
+
373
+ it 'does not get confused about string vs symbol usage for the message' do
374
+ allow_any_instance_of(klass).to receive(:existing_method) { :stubbed }
375
+ allow_any_instance_of(klass).to receive("existing_method").and_call_original
376
+ expect(klass.new.existing_method).to eq(:existing_method_return_value)
377
+ end
378
+ end
379
+
380
+ context "expect_any_instance_of(...).not_to receive" do
381
+ it "fails if the method is called" do
382
+ expect_any_instance_of(klass).not_to receive(:existing_method)
383
+ expect { klass.new.existing_method }.to raise_error(RSpec::Mocks::MockExpectationError)
384
+ end
385
+
386
+ it "passes if no method is called" do
387
+ expect { expect_any_instance_of(klass).not_to receive(:existing_method) }.to_not raise_error
388
+ end
389
+
390
+ it "passes if only a different method is called" do
391
+ expect_any_instance_of(klass).not_to receive(:existing_method)
392
+ expect { klass.new.another_existing_method }.to_not raise_error
393
+ end
394
+
395
+ it "affects previously stubbed instances" do
396
+ instance = klass.new
397
+
398
+ allow_any_instance_of(klass).to receive(:foo).and_return(1)
399
+ expect(instance.foo).to eq(1)
400
+ expect_any_instance_of(klass).not_to receive(:foo)
401
+ expect { instance.foo }.to fail
402
+ end
403
+
404
+ context "with constraints" do
405
+ it "fails if the method is called with the specified parameters" do
406
+ expect_any_instance_of(klass).not_to receive(:existing_method_with_arguments).with(:argument_one, :argument_two)
407
+ expect {
408
+ klass.new.existing_method_with_arguments(:argument_one, :argument_two)
409
+ }.to raise_error(RSpec::Mocks::MockExpectationError)
410
+ end
411
+
412
+ it "passes if the method is called with different parameters" do
413
+ expect_any_instance_of(klass).not_to receive(:existing_method_with_arguments).with(:argument_one, :argument_two)
414
+ expect { klass.new.existing_method_with_arguments(:argument_three, :argument_four) }.to_not raise_error
415
+ end
416
+ end
417
+
418
+ context 'when used in combination with should_receive' do
419
+ it 'passes if only the expected message is received' do
420
+ expect_any_instance_of(klass).to receive(:foo)
421
+ expect_any_instance_of(klass).not_to receive(:bar)
422
+ klass.new.foo
423
+ verify_all
424
+ end
425
+ end
426
+
427
+ it "prevents confusing double-negative expressions involving `never`" do
428
+ expect {
429
+ expect_any_instance_of(klass).not_to receive(:not_expected).never
430
+ }.to raise_error(/trying to negate it again/)
431
+ end
432
+ end
433
+
434
+ context "setting a message expectation" do
435
+ let(:foo_expectation_error_message) { 'Exactly one instance should have received the following message(s) but didn\'t: foo' }
436
+ let(:existing_method_expectation_error_message) { 'Exactly one instance should have received the following message(s) but didn\'t: existing_method' }
437
+
438
+ it "handles inspect accessing expected methods" do
439
+ klass.class_eval do
440
+ def inspect
441
+ "The contents of output: #{stdout}"
442
+ end
443
+ end
444
+
445
+ expect_any_instance_of(klass).to receive(:stdout).at_least(:twice)
446
+ expect do
447
+ klass.new.stdout
448
+ klass.new.stdout
449
+ end.to raise_error(/The message 'stdout' was received by/)
450
+ reset_all
451
+ end
452
+
453
+ it "affects previously stubbed instances" do
454
+ instance = klass.new
455
+
456
+ allow_any_instance_of(klass).to receive(:foo).and_return(1)
457
+ expect(instance.foo).to eq(1)
458
+ expect_any_instance_of(klass).to receive(:foo).with(2).and_return(2)
459
+ expect(instance.foo(2)).to eq(2)
460
+ end
461
+
462
+ it "does not set the expectation on every instance" do
463
+ # Setup an unrelated object of the same class that won't receive the expected message.
464
+ allow('non-related object').to receive(:non_related_method)
465
+
466
+ expect_any_instance_of(Object).to receive(:foo)
467
+ 'something'.foo
468
+ end
469
+
470
+ it "does not modify the return value of stubs set on an instance" do
471
+ expect_any_instance_of(Object).to receive(:foo).twice
472
+ object = Object.new
473
+ allow(object).to receive(:foo).and_return(3)
474
+ expect(object.foo).to eq(3)
475
+ expect(object.foo).to eq(3)
476
+ end
477
+
478
+ it "does not modify the return value of stubs set on an instance of a subclass" do
479
+ subklass = Class.new(klass)
480
+ subinstance = subklass.new
481
+ allow_any_instance_of(klass).to receive(:foo).and_return(1)
482
+ expect(subinstance.foo).to eq(1)
483
+ expect_any_instance_of(klass).to receive(:foo).with(2).and_return(2)
484
+ expect(subinstance.foo(2)).to eq(2)
485
+ end
486
+
487
+ it "properly notifies any instance recorders at multiple levels of hierarchy when a directly stubbed object receives a message" do
488
+ subclass = Class.new(klass)
489
+ instance = subclass.new
490
+
491
+ expect_any_instance_of(klass).to receive(:msg_1)
492
+ expect_any_instance_of(subclass).to receive(:msg_2)
493
+
494
+ allow(instance).to receive_messages(:msg_1 => "a", :msg_2 => "b")
495
+
496
+ expect(instance.msg_1).to eq("a")
497
+ expect(instance.msg_2).to eq("b")
498
+ end
499
+
500
+ it "properly notifies any instance recorders when they are created after the object's mock proxy" do
501
+ object = Object.new
502
+ allow(object).to receive(:bar)
503
+ expect_any_instance_of(Object).to receive(:foo).twice
504
+ allow(object).to receive(:foo).and_return(3)
505
+ expect(object.foo).to eq(3)
506
+ expect(object.foo).to eq(3)
507
+ end
508
+
509
+ context "when the class has a prepended module", :if => Support::RubyFeatures.module_prepends_supported? do
510
+ it 'allows mocking a method that is not defined on the prepended module' do
511
+ klass.class_eval { prepend Module.new { def other; end } }
512
+ expect_any_instance_of(klass).to receive(:foo).and_return(45)
513
+
514
+ expect(klass.new.foo).to eq(45)
515
+ end
516
+
517
+ it 'prevents mocking a method that is defined on the prepended module' do
518
+ klass.class_eval { prepend Module.new { def foo; end } }
519
+
520
+ expect {
521
+ expect_any_instance_of(klass).to receive(:foo).and_return(45)
522
+ }.to fail_with(/prepended module/)
523
+ end
524
+ end
525
+
526
+ context "when the class has an included module" do
527
+ it 'allows mocking a method that is defined on the module' do
528
+ mod = Module.new { def foo; end }
529
+ klass.class_eval { include mod }
530
+ expect_any_instance_of(mod).to receive(:foo).and_return(45)
531
+
532
+ expect(klass.new.foo).to eq(45)
533
+ end
534
+ end
535
+
536
+ context "when an instance has been directly stubbed" do
537
+ it "fails when a second instance to receive the message" do
538
+ expect_any_instance_of(klass).to receive(:foo)
539
+ instance_1 = klass.new
540
+
541
+ allow(instance_1).to receive(:foo).and_return(17)
542
+ expect(instance_1.foo).to eq(17)
543
+
544
+ expect {
545
+ klass.new.foo
546
+ }.to fail_with(/has already been received/)
547
+ end
548
+ end
549
+
550
+ context "when argument matching is used and an instance has stubbed the message" do
551
+ it "fails on verify if the arguments do not match" do
552
+ expect_any_instance_of(klass).to receive(:foo).with(3)
553
+ instance = klass.new
554
+ allow(instance).to receive(:foo).and_return(2)
555
+
556
+ expect(instance.foo(4)).to eq(2)
557
+ expect { verify_all }.to fail
558
+ end
559
+
560
+ it "passes on verify if the arguments do match" do
561
+ expect_any_instance_of(klass).to receive(:foo).with(3)
562
+ instance = klass.new
563
+ allow(instance).to receive(:foo).and_return(2)
564
+
565
+ expect(instance.foo(3)).to eq(2)
566
+ expect { verify_all }.not_to raise_error
567
+ end
568
+ end
569
+
570
+ context "with an expectation is set on a method which does not exist" do
571
+ it "returns the expected value" do
572
+ expect_any_instance_of(klass).to receive(:foo).and_return(1)
573
+ expect(klass.new.foo(1)).to eq(1)
574
+ end
575
+
576
+ it "fails if an instance is created but no invocation occurs" do
577
+ expect do
578
+ expect_any_instance_of(klass).to receive(:foo)
579
+ klass.new
580
+ verify_all
581
+ end.to raise_error(RSpec::Mocks::MockExpectationError, foo_expectation_error_message)
582
+ end
583
+
584
+ it "fails if no instance is created" do
585
+ expect do
586
+ expect_any_instance_of(klass).to receive(:foo).and_return(1)
587
+ verify_all
588
+ end.to raise_error(RSpec::Mocks::MockExpectationError, foo_expectation_error_message)
589
+ end
590
+
591
+ it "fails if no instance is created and there are multiple expectations" do
592
+ expect do
593
+ expect_any_instance_of(klass).to receive(:foo)
594
+ expect_any_instance_of(klass).to receive(:bar)
595
+ verify_all
596
+ end.to raise_error(RSpec::Mocks::MockExpectationError, 'Exactly one instance should have received the following message(s) but didn\'t: bar, foo')
597
+ end
598
+
599
+ it "allows expectations on instances to take priority" do
600
+ expect_any_instance_of(klass).to receive(:foo)
601
+ klass.new.foo
602
+
603
+ instance = klass.new
604
+ expect(instance).to receive(:foo).and_return(result = Object.new)
605
+ expect(instance.foo).to eq(result)
606
+ end
607
+
608
+ context "behaves as 'exactly one instance'" do
609
+ it "passes if subsequent invocations do not receive that message" do
610
+ expect_any_instance_of(klass).to receive(:foo)
611
+ klass.new.foo
612
+ klass.new
613
+ end
614
+
615
+ it "fails if the method is invoked on a second instance" do
616
+ instance_one = klass.new
617
+ instance_two = klass.new
618
+ expect do
619
+ expect_any_instance_of(klass).to receive(:foo)
620
+
621
+ instance_one.foo
622
+ instance_two.foo
623
+ end.to raise_error(RSpec::Mocks::MockExpectationError, /The message 'foo' was received by .*#{instance_two.object_id}.* but has already been received by #{instance_one.inspect}/)
624
+ end
625
+ end
626
+
627
+ context "normal expectations on the class object" do
628
+ it "fail when unfulfilled" do
629
+ expect do
630
+ expect_any_instance_of(klass).to receive(:foo)
631
+ expect(klass).to receive(:woot)
632
+ klass.new.foo
633
+ verify_all
634
+ end.to(raise_error(RSpec::Mocks::MockExpectationError) do |error|
635
+ expect(error.message).not_to eq(existing_method_expectation_error_message)
636
+ end)
637
+ end
638
+
639
+ it "pass when expectations are met" do
640
+ expect_any_instance_of(klass).to receive(:foo)
641
+ expect(klass).to receive(:woot).and_return(result = Object.new)
642
+ klass.new.foo
643
+ expect(klass.woot).to eq(result)
644
+ end
645
+ end
646
+ end
647
+
648
+ context "with an expectation is set on a method that exists" do
649
+ it "returns the expected value" do
650
+ expect_any_instance_of(klass).to receive(:existing_method).and_return(1)
651
+ expect(klass.new.existing_method(1)).to eq(1)
652
+ end
653
+
654
+ it "fails if an instance is created but no invocation occurs" do
655
+ expect do
656
+ expect_any_instance_of(klass).to receive(:existing_method)
657
+ klass.new
658
+ verify_all
659
+ end.to raise_error(RSpec::Mocks::MockExpectationError, existing_method_expectation_error_message)
660
+ end
661
+
662
+ it "fails if no instance is created" do
663
+ expect do
664
+ expect_any_instance_of(klass).to receive(:existing_method)
665
+ verify_all
666
+ end.to raise_error(RSpec::Mocks::MockExpectationError, existing_method_expectation_error_message)
667
+ end
668
+
669
+ it "fails if no instance is created and there are multiple expectations" do
670
+ expect do
671
+ expect_any_instance_of(klass).to receive(:existing_method)
672
+ expect_any_instance_of(klass).to receive(:another_existing_method)
673
+ verify_all
674
+ end.to raise_error(RSpec::Mocks::MockExpectationError, 'Exactly one instance should have received the following message(s) but didn\'t: another_existing_method, existing_method')
675
+ end
676
+
677
+ context "after any one instance has received a message" do
678
+ it "passes if subsequent invocations do not receive that message" do
679
+ expect_any_instance_of(klass).to receive(:existing_method)
680
+ klass.new.existing_method
681
+ klass.new
682
+ end
683
+
684
+ it "fails if the method is invoked on a second instance" do
685
+ instance_one = klass.new
686
+ instance_two = klass.new
687
+ expect do
688
+ expect_any_instance_of(klass).to receive(:existing_method)
689
+
690
+ instance_one.existing_method
691
+ instance_two.existing_method
692
+ end.to raise_error(RSpec::Mocks::MockExpectationError, /The message 'existing_method' was received by .*#{instance_two.object_id}.* but has already been received by #{instance_one.inspect}/)
693
+ end
694
+ end
695
+ end
696
+
697
+ it 'works with a BasicObject subclass that mixes in Kernel', :if => defined?(BasicObject) do
698
+ klass = Class.new(BasicObject) do
699
+ include ::Kernel
700
+ def foo; end
701
+ end
702
+
703
+ expect_any_instance_of(klass).to receive(:foo)
704
+ klass.new.foo
705
+ end
706
+
707
+ it 'works with a SimpleDelegator subclass', :if => (RUBY_VERSION.to_f > 1.8) do
708
+ klass = Class.new(SimpleDelegator) do
709
+ def foo; end
710
+ end
711
+
712
+ expect_any_instance_of(klass).to receive(:foo)
713
+ klass.new(Object.new).foo
714
+ end
715
+
716
+ context "with argument matching" do
717
+ before do
718
+ expect_any_instance_of(klass).to receive(:foo).with(:param_one, :param_two).and_return(:result_one)
719
+ expect_any_instance_of(klass).to receive(:foo).with(:param_three, :param_four).and_return(:result_two)
720
+ end
721
+
722
+ it "returns the expected value when arguments match" do
723
+ instance = klass.new
724
+ expect(instance.foo(:param_one, :param_two)).to eq(:result_one)
725
+ expect(instance.foo(:param_three, :param_four)).to eq(:result_two)
726
+ end
727
+
728
+ it "fails when the arguments match but different instances are used" do
729
+ instances = Array.new(2) { klass.new }
730
+ expect do
731
+ expect(instances[0].foo(:param_one, :param_two)).to eq(:result_one)
732
+ expect(instances[1].foo(:param_three, :param_four)).to eq(:result_two)
733
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
734
+
735
+ # ignore the fact that should_receive expectations were not met
736
+ instances.each { |instance| reset instance }
737
+ end
738
+
739
+ it "is not affected by the invocation of existing methods on other instances" do
740
+ expect(klass.new.existing_method_with_arguments(:param_one, :param_two)).to eq(:existing_method_with_arguments_return_value)
741
+ instance = klass.new
742
+ expect(instance.foo(:param_one, :param_two)).to eq(:result_one)
743
+ expect(instance.foo(:param_three, :param_four)).to eq(:result_two)
744
+ end
745
+
746
+ it "fails when arguments do not match" do
747
+ instance = klass.new
748
+ expect do
749
+ instance.foo(:param_one, :param_three)
750
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
751
+
752
+ # ignore the fact that should_receive expectations were not met
753
+ reset instance
754
+ end
755
+ end
756
+
757
+ context "message count" do
758
+ context "the 'once' constraint" do
759
+ it "passes for one invocation" do
760
+ expect_any_instance_of(klass).to receive(:foo).once
761
+ klass.new.foo
762
+ end
763
+
764
+ it "fails when no instances are declared" do
765
+ expect do
766
+ expect_any_instance_of(klass).to receive(:foo).once
767
+ verify_all
768
+ end.to raise_error(RSpec::Mocks::MockExpectationError, foo_expectation_error_message)
769
+ end
770
+
771
+ it "fails when an instance is declared but there are no invocations" do
772
+ expect do
773
+ expect_any_instance_of(klass).to receive(:foo).once
774
+ klass.new
775
+ verify_all
776
+ end.to raise_error(RSpec::Mocks::MockExpectationError, foo_expectation_error_message)
777
+ end
778
+
779
+ it "fails for more than one invocation" do
780
+ expect do
781
+ expect_any_instance_of(klass).to receive(:foo).once
782
+ instance = klass.new
783
+ 2.times { instance.foo }
784
+ verify instance
785
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
786
+ end
787
+ end
788
+
789
+ context "the 'twice' constraint" do
790
+ it "passes for two invocations" do
791
+ expect_any_instance_of(klass).to receive(:foo).twice
792
+ instance = klass.new
793
+ 2.times { instance.foo }
794
+ end
795
+
796
+ it "fails for more than two invocations" do
797
+ expect do
798
+ expect_any_instance_of(klass).to receive(:foo).twice
799
+ instance = klass.new
800
+ 3.times { instance.foo }
801
+ verify instance
802
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
803
+ end
804
+ end
805
+
806
+ context "the 'thrice' constraint" do
807
+ it "passes for three invocations" do
808
+ expect_any_instance_of(klass).to receive(:foo).thrice
809
+ instance = klass.new
810
+ 3.times { instance.foo }
811
+ end
812
+
813
+ it "fails for more than three invocations" do
814
+ expect do
815
+ expect_any_instance_of(klass).to receive(:foo).thrice
816
+ instance = klass.new
817
+ 4.times { instance.foo }
818
+ verify instance
819
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
820
+ end
821
+
822
+ it "fails for less than three invocations" do
823
+ expect do
824
+ expect_any_instance_of(klass).to receive(:foo).thrice
825
+ instance = klass.new
826
+ 2.times { instance.foo }
827
+ verify instance
828
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
829
+ end
830
+ end
831
+
832
+ context "the 'exactly(n)' constraint" do
833
+ it "passes for n invocations where n = 3" do
834
+ expect_any_instance_of(klass).to receive(:foo).exactly(3).times
835
+ instance = klass.new
836
+ 3.times { instance.foo }
837
+ end
838
+
839
+ it "fails for n invocations where n < 3" do
840
+ expect do
841
+ expect_any_instance_of(klass).to receive(:foo).exactly(3).times
842
+ instance = klass.new
843
+ 2.times { instance.foo }
844
+ verify instance
845
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
846
+ end
847
+
848
+ it "fails for n invocations where n > 3" do
849
+ expect do
850
+ expect_any_instance_of(klass).to receive(:foo).exactly(3).times
851
+ instance = klass.new
852
+ 4.times { instance.foo }
853
+ verify instance
854
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
855
+ end
856
+ end
857
+
858
+ context "the 'at_least(n)' constraint" do
859
+ it "passes for n invocations where n = 3" do
860
+ expect_any_instance_of(klass).to receive(:foo).at_least(3).times
861
+ instance = klass.new
862
+ 3.times { instance.foo }
863
+ end
864
+
865
+ it "fails for n invocations where n < 3" do
866
+ expect do
867
+ expect_any_instance_of(klass).to receive(:foo).at_least(3).times
868
+ instance = klass.new
869
+ 2.times { instance.foo }
870
+ verify instance
871
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
872
+ end
873
+
874
+ it "passes for n invocations where n > 3" do
875
+ expect_any_instance_of(klass).to receive(:foo).at_least(3).times
876
+ instance = klass.new
877
+ 4.times { instance.foo }
878
+ end
879
+ end
880
+
881
+ context "the 'at_most(n)' constraint" do
882
+ it "passes for n invocations where n = 3" do
883
+ expect_any_instance_of(klass).to receive(:foo).at_most(3).times
884
+ instance = klass.new
885
+ 3.times { instance.foo }
886
+ end
887
+
888
+ it "passes for n invocations where n < 3" do
889
+ expect_any_instance_of(klass).to receive(:foo).at_most(3).times
890
+ instance = klass.new
891
+ 2.times { instance.foo }
892
+ end
893
+
894
+ it "fails for n invocations where n > 3" do
895
+ expect do
896
+ expect_any_instance_of(klass).to receive(:foo).at_most(3).times
897
+ instance = klass.new
898
+ 4.times { instance.foo }
899
+ verify instance
900
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
901
+ end
902
+ end
903
+
904
+ context "the 'never' constraint" do
905
+ it "passes for 0 invocations" do
906
+ expect_any_instance_of(klass).to receive(:foo).never
907
+ verify_all
908
+ end
909
+
910
+ it "fails on the first invocation" do
911
+ expect do
912
+ expect_any_instance_of(klass).to receive(:foo).never
913
+ klass.new.foo
914
+ end.to raise_error(RSpec::Mocks::MockExpectationError)
915
+ end
916
+
917
+ context "when combined with other expectations" do
918
+ it "passes when the other expecations are met" do
919
+ expect_any_instance_of(klass).to receive(:foo).never
920
+ expect_any_instance_of(klass).to receive(:existing_method).and_return(5)
921
+ expect(klass.new.existing_method).to eq(5)
922
+ end
923
+
924
+ it "fails when the other expecations are not met" do
925
+ expect do
926
+ expect_any_instance_of(klass).to receive(:foo).never
927
+ expect_any_instance_of(klass).to receive(:existing_method).and_return(5)
928
+ verify_all
929
+ end.to raise_error(RSpec::Mocks::MockExpectationError, existing_method_expectation_error_message)
930
+ end
931
+ end
932
+ end
933
+ end
934
+ end
935
+
936
+ context "when resetting post-verification" do
937
+ let(:space) { RSpec::Mocks.space }
938
+
939
+ context "existing method" do
940
+ before(:each) do
941
+ RSpec::Mocks.space.any_instance_recorder_for(klass) # to force it to be tracked
942
+ end
943
+
944
+ context "with stubbing" do
945
+ context "public methods" do
946
+ before(:each) do
947
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(1)
948
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_truthy
949
+ end
950
+
951
+ it "restores the class to its original state after each example when no instance is created" do
952
+ verify_all
953
+
954
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_falsey
955
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
956
+ end
957
+
958
+ it "restores the class to its original state after each example when one instance is created" do
959
+ klass.new.existing_method
960
+
961
+ verify_all
962
+
963
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_falsey
964
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
965
+ end
966
+
967
+ it "restores the class to its original state after each example when more than one instance is created" do
968
+ klass.new.existing_method
969
+ klass.new.existing_method
970
+
971
+ verify_all
972
+
973
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_falsey
974
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
975
+ end
976
+ end
977
+
978
+ context "private methods" do
979
+ before :each do
980
+ allow_any_instance_of(klass).to receive(:private_method).and_return(:something)
981
+
982
+ verify_all
983
+ end
984
+
985
+ it "cleans up the backed up method" do
986
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_falsey
987
+ end
988
+
989
+ it "restores a stubbed private method after the spec is run" do
990
+ expect(klass.private_method_defined?(:private_method)).to be_truthy
991
+ end
992
+
993
+ it "ensures that the restored method behaves as it originally did" do
994
+ expect(klass.new.send(:private_method)).to eq(:private_method_return_value)
995
+ end
996
+ end
997
+ end
998
+
999
+ context "with expectations" do
1000
+ context "private methods" do
1001
+ before :each do
1002
+ expect_any_instance_of(klass).to receive(:private_method).and_return(:something)
1003
+ klass.new.private_method
1004
+
1005
+ verify_all
1006
+ end
1007
+
1008
+ it "cleans up the backed up method" do
1009
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_falsey
1010
+ end
1011
+
1012
+ it "restores a stubbed private method after the spec is run" do
1013
+ expect(klass.private_method_defined?(:private_method)).to be_truthy
1014
+ end
1015
+
1016
+ it "ensures that the restored method behaves as it originally did" do
1017
+ expect(klass.new.send(:private_method)).to eq(:private_method_return_value)
1018
+ end
1019
+ end
1020
+
1021
+ context "ensures that the subsequent specs do not see expectations set in previous specs" do
1022
+ context "when the instance created after the expectation is set" do
1023
+ it "first spec" do
1024
+ expect_any_instance_of(klass).to receive(:existing_method).and_return(Object.new)
1025
+ klass.new.existing_method
1026
+ end
1027
+
1028
+ it "second spec" do
1029
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
1030
+ end
1031
+ end
1032
+
1033
+ context "when the instance created before the expectation is set" do
1034
+ before :each do
1035
+ @instance = klass.new
1036
+ end
1037
+
1038
+ it "first spec" do
1039
+ expect_any_instance_of(klass).to receive(:existing_method).and_return(Object.new)
1040
+ @instance.existing_method
1041
+ end
1042
+
1043
+ it "second spec" do
1044
+ expect(@instance.existing_method).to eq(existing_method_return_value)
1045
+ end
1046
+ end
1047
+ end
1048
+
1049
+ it "ensures that the next spec does not see that expectation" do
1050
+ expect_any_instance_of(klass).to receive(:existing_method).and_return(Object.new)
1051
+ klass.new.existing_method
1052
+
1053
+ verify_all
1054
+
1055
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
1056
+ end
1057
+ end
1058
+ end
1059
+
1060
+ context "with multiple calls to any_instance in the same example" do
1061
+ it "does not prevent the change from being rolled back" do
1062
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(false)
1063
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(true)
1064
+
1065
+ verify_all
1066
+ expect(klass.new).to respond_to(:existing_method)
1067
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
1068
+ end
1069
+ end
1070
+
1071
+ it "adds an instance to the current space when stubbed method is invoked" do
1072
+ allow_any_instance_of(klass).to receive(:foo)
1073
+ instance = klass.new
1074
+ instance.foo
1075
+ expect(RSpec::Mocks.space.proxies.keys).to include(instance.object_id)
1076
+ end
1077
+ end
1078
+
1079
+ context "passing the receiver to the implementation block" do
1080
+ context "when configured to pass the instance" do
1081
+ include_context 'with isolated configuration'
1082
+ before(:each) do
1083
+ RSpec::Mocks.configuration.yield_receiver_to_any_instance_implementation_blocks = true
1084
+ end
1085
+
1086
+ describe "an any instance stub" do
1087
+ it "passes the instance as the first arg of the implementation block" do
1088
+ instance = klass.new
1089
+
1090
+ expect { |b|
1091
+ expect_any_instance_of(klass).to receive(:bees).with(:sup, &b)
1092
+ instance.bees(:sup)
1093
+ }.to yield_with_args(instance, :sup)
1094
+ end
1095
+
1096
+ it "does not pass the instance to and_call_original" do
1097
+ klass = Class.new do
1098
+ def call(*args)
1099
+ args.first
1100
+ end
1101
+ end
1102
+ expect_any_instance_of(klass).to receive(:call).and_call_original
1103
+ instance = klass.new
1104
+ expect(instance.call(:bees)).to be :bees
1105
+ end
1106
+ end
1107
+
1108
+ describe "an any instance expectation" do
1109
+ it "doesn't effect with" do
1110
+ instance = klass.new
1111
+ expect_any_instance_of(klass).to receive(:bees).with(:sup)
1112
+ instance.bees(:sup)
1113
+ end
1114
+
1115
+ it "passes the instance as the first arg of the implementation block" do
1116
+ instance = klass.new
1117
+
1118
+ expect { |b|
1119
+ expect_any_instance_of(klass).to receive(:bees).with(:sup, &b)
1120
+ instance.bees(:sup)
1121
+ }.to yield_with_args(instance, :sup)
1122
+ end
1123
+ end
1124
+ end
1125
+
1126
+ context "when configured not to pass the instance" do
1127
+ include_context 'with isolated configuration'
1128
+ before(:each) do
1129
+ RSpec::Mocks.configuration.yield_receiver_to_any_instance_implementation_blocks = false
1130
+ end
1131
+
1132
+ describe "an any instance stub" do
1133
+ it "does not pass the instance to the implementation block" do
1134
+ instance = klass.new
1135
+
1136
+ expect { |b|
1137
+ expect_any_instance_of(klass).to receive(:bees).with(:sup, &b)
1138
+ instance.bees(:sup)
1139
+ }.to yield_with_args(:sup)
1140
+ end
1141
+
1142
+ it "does not cause with to fail when the instance is passed" do
1143
+ instance = klass.new
1144
+ expect_any_instance_of(klass).to receive(:bees).with(:faces)
1145
+ instance.bees(:faces)
1146
+ end
1147
+ end
1148
+ end
1149
+ end
1150
+
1151
+ context 'when used in conjunction with a `dup`' do
1152
+ it "doesn't cause an infinite loop" do
1153
+ skip "This intermittently fails on JRuby" if RUBY_PLATFORM == 'java'
1154
+
1155
+ allow_any_instance_of(Object).to receive(:some_method)
1156
+ o = Object.new
1157
+ o.some_method
1158
+ expect { o.dup.some_method }.to_not raise_error
1159
+ end
1160
+
1161
+ it "doesn't bomb if the object doesn't support `dup`" do
1162
+ klass = Class.new do
1163
+ undef_method :dup
1164
+ end
1165
+ allow_any_instance_of(klass).to receive(:foo)
1166
+ end
1167
+
1168
+ it "doesn't fail when dup accepts parameters" do
1169
+ klass = Class.new do
1170
+ def dup(funky_option)
1171
+ end
1172
+ end
1173
+
1174
+ allow_any_instance_of(klass).to receive(:foo)
1175
+
1176
+ expect { klass.new.dup('Dup dup dup') }.to_not raise_error
1177
+ end
1178
+ end
1179
+
1180
+ context "when directed at a method defined on a superclass" do
1181
+ let(:sub_klass) { Class.new(klass) }
1182
+
1183
+ it "stubs the method correctly" do
1184
+ allow_any_instance_of(klass).to receive(:existing_method).and_return("foo")
1185
+ expect(sub_klass.new.existing_method).to eq "foo"
1186
+ end
1187
+
1188
+ it "mocks the method correctly" do
1189
+ instance_one = sub_klass.new
1190
+ instance_two = sub_klass.new
1191
+ expect do
1192
+ expect_any_instance_of(klass).to receive(:existing_method)
1193
+ instance_one.existing_method
1194
+ instance_two.existing_method
1195
+ end.to raise_error(RSpec::Mocks::MockExpectationError, /The message 'existing_method' was received by .*#{instance_two.object_id}.* but has already been received by #{instance_one.inspect}/)
1196
+ end
1197
+ end
1198
+
1199
+ context "when a class overrides Object#method" do
1200
+ let(:http_request_class) { Struct.new(:method, :uri) }
1201
+
1202
+ it "stubs the method correctly" do
1203
+ allow_any_instance_of(http_request_class).to receive(:existing_method).and_return("foo")
1204
+ expect(http_request_class.new.existing_method).to eq "foo"
1205
+ end
1206
+
1207
+ it "mocks the method correctly" do
1208
+ expect_any_instance_of(http_request_class).to receive(:existing_method).and_return("foo")
1209
+ expect(http_request_class.new.existing_method).to eq "foo"
1210
+ end
1211
+ end
1212
+
1213
+ context "when used after the test has finished" do
1214
+ it "restores the original behavior of a stubbed method" do
1215
+ allow_any_instance_of(klass).to receive(:existing_method).and_return(:stubbed_return_value)
1216
+
1217
+ instance = klass.new
1218
+ expect(instance.existing_method).to eq :stubbed_return_value
1219
+
1220
+ verify_all
1221
+
1222
+ expect(instance.existing_method).to eq :existing_method_return_value
1223
+ end
1224
+
1225
+ it "restores the original behaviour, even if the expectation fails" do
1226
+ expect_any_instance_of(klass).to receive(:existing_method).with(1).and_return(:stubbed_return_value)
1227
+
1228
+ instance = klass.new
1229
+ begin
1230
+ instance.existing_method
1231
+ verify_all
1232
+ rescue RSpec::Mocks::MockExpectationError
1233
+ end
1234
+
1235
+ reset_all
1236
+
1237
+ expect(instance.existing_method).to eq :existing_method_return_value
1238
+ end
1239
+ end
1240
+ end
1241
+ end
1242
+ end