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,157 @@
1
+ module RSpec
2
+ module Mocks
3
+ # Provides configuration options for rspec-mocks.
4
+ class Configuration
5
+ def initialize
6
+ @yield_receiver_to_any_instance_implementation_blocks = true
7
+ @verify_doubled_constant_names = false
8
+ @transfer_nested_constants = false
9
+ @verify_partial_doubles = false
10
+ end
11
+
12
+ def yield_receiver_to_any_instance_implementation_blocks?
13
+ @yield_receiver_to_any_instance_implementation_blocks
14
+ end
15
+
16
+ # Sets whether or not RSpec will yield the receiving instance of a
17
+ # message to blocks that are used for any_instance stub implementations.
18
+ # When set, the first yielded argument will be the receiving instance.
19
+ # Defaults to `true`.
20
+ #
21
+ # @example
22
+ #
23
+ # RSpec.configure do |rspec|
24
+ # rspec.mock_with :rspec do |mocks|
25
+ # mocks.yield_receiver_to_any_instance_implementation_blocks = false
26
+ # end
27
+ # end
28
+ attr_writer :yield_receiver_to_any_instance_implementation_blocks
29
+
30
+ # Adds `stub` and `should_receive` to the given
31
+ # modules or classes. This is usually only necessary
32
+ # if you application uses some proxy classes that
33
+ # "strip themselves down" to a bare minimum set of
34
+ # methods and remove `stub` and `should_receive` in
35
+ # the process.
36
+ #
37
+ # @example
38
+ #
39
+ # RSpec.configure do |rspec|
40
+ # rspec.mock_with :rspec do |mocks|
41
+ # mocks.add_stub_and_should_receive_to Delegator
42
+ # end
43
+ # end
44
+ #
45
+ def add_stub_and_should_receive_to(*modules)
46
+ modules.each do |mod|
47
+ Syntax.enable_should(mod)
48
+ end
49
+ end
50
+
51
+ # Provides the ability to set either `expect`,
52
+ # `should` or both syntaxes. RSpec uses `expect`
53
+ # syntax by default. This is needed if you want to
54
+ # explicitly enable `should` syntax and/or explicitly
55
+ # disable `expect` syntax.
56
+ #
57
+ # @example
58
+ #
59
+ # RSpec.configure do |rspec|
60
+ # rspec.mock_with :rspec do |mocks|
61
+ # mocks.syntax = [:expect, :should]
62
+ # end
63
+ # end
64
+ #
65
+ def syntax=(*values)
66
+ syntaxes = values.flatten
67
+ if syntaxes.include?(:expect)
68
+ Syntax.enable_expect
69
+ else
70
+ Syntax.disable_expect
71
+ end
72
+
73
+ if syntaxes.include?(:should)
74
+ Syntax.enable_should
75
+ else
76
+ Syntax.disable_should
77
+ end
78
+ end
79
+
80
+ # Returns an array with a list of syntaxes
81
+ # that are enabled.
82
+ #
83
+ # @example
84
+ #
85
+ # unless RSpec::Mocks.configuration.syntax.include?(:expect)
86
+ # raise "this RSpec extension gem requires the rspec-mocks `:expect` syntax"
87
+ # end
88
+ #
89
+ def syntax
90
+ syntaxes = []
91
+ syntaxes << :should if Syntax.should_enabled?
92
+ syntaxes << :expect if Syntax.expect_enabled?
93
+ syntaxes
94
+ end
95
+
96
+ def verify_doubled_constant_names?
97
+ !!@verify_doubled_constant_names
98
+ end
99
+
100
+ # When this is set to true, an error will be raised when
101
+ # `instance_double` or `class_double` is given the name of an undefined
102
+ # constant. You probably only want to set this when running your entire
103
+ # test suite, with all production code loaded. Setting this for an
104
+ # isolated unit test will prevent you from being able to isolate it!
105
+ attr_writer :verify_doubled_constant_names
106
+
107
+ def transfer_nested_constants?
108
+ !!@transfer_nested_constants
109
+ end
110
+
111
+ # Sets the default for the `transfer_nested_constants` option when
112
+ # stubbing constants.
113
+ attr_writer :transfer_nested_constants
114
+
115
+ # When set to true, partial mocks will be verified the same as object
116
+ # doubles. Any stubs will have their arguments checked against the original
117
+ # method, and methods that do not exist cannot be stubbed.
118
+ def verify_partial_doubles=(val)
119
+ @verify_partial_doubles = !!val
120
+ end
121
+
122
+ def verify_partial_doubles?
123
+ @verify_partial_doubles
124
+ end
125
+
126
+ # Monkey-patch `Marshal.dump` to enable dumping of mocked or stubbed
127
+ # objects. By default this will not work since RSpec mocks works by
128
+ # adding singleton methods that cannot be serialized. This patch removes
129
+ # these singleton methods before serialization. Setting to falsey removes
130
+ # the patch.
131
+ #
132
+ # This method is idempotent.
133
+ def patch_marshal_to_support_partial_doubles=(val)
134
+ if val
135
+ RSpec::Mocks::MarshalExtension.patch!
136
+ else
137
+ RSpec::Mocks::MarshalExtension.unpatch!
138
+ end
139
+ end
140
+
141
+ # @api private
142
+ # Resets the configured syntax to the default.
143
+ def reset_syntaxes_to_default
144
+ self.syntax = [:should, :expect]
145
+ RSpec::Mocks::Syntax.warn_about_should!
146
+ end
147
+ end
148
+
149
+ # Mocks specific configuration, as distinct from `RSpec.configuration`
150
+ # which is core RSpec configuration.
151
+ def self.configuration
152
+ @configuration ||= Configuration.new
153
+ end
154
+
155
+ configuration.reset_syntaxes_to_default
156
+ end
157
+ end
@@ -0,0 +1,253 @@
1
+ module RSpec
2
+ module Mocks
3
+ # Raised when a message expectation is not satisfied.
4
+ MockExpectationError = Class.new(Exception)
5
+
6
+ # Raised when a test double is used after it has been torn
7
+ # down (typically at the end of an rspec-core example).
8
+ ExpiredTestDoubleError = Class.new(MockExpectationError)
9
+
10
+ # Raised when doubles or partial doubles are used outside of the per-test lifecycle.
11
+ OutsideOfExampleError = Class.new(StandardError)
12
+
13
+ # @private
14
+ UnsupportedMatcherError = Class.new(StandardError)
15
+ # @private
16
+ NegationUnsupportedError = Class.new(StandardError)
17
+ # @private
18
+ VerifyingDoubleNotDefinedError = Class.new(StandardError)
19
+
20
+ # @private
21
+ class ErrorGenerator
22
+ attr_writer :opts
23
+
24
+ def initialize(target, name)
25
+ @target = target
26
+ @name = name
27
+ end
28
+
29
+ # @private
30
+ def opts
31
+ @opts ||= {}
32
+ end
33
+
34
+ # @private
35
+ def raise_unexpected_message_error(message, *args)
36
+ __raise "#{intro} received unexpected message :#{message}#{arg_message(*args)}"
37
+ end
38
+
39
+ # @private
40
+ def raise_unexpected_message_args_error(expectation, *args)
41
+ expected_args = format_args(*expectation.expected_args)
42
+ actual_args = format_received_args(*args)
43
+ __raise "#{intro} received #{expectation.message.inspect} with " \
44
+ "unexpected arguments\n expected: #{expected_args}\n" \
45
+ " got: #{actual_args}"
46
+ end
47
+
48
+ # @private
49
+ def raise_missing_default_stub_error(expectation, *args)
50
+ expected_args = format_args(*expectation.expected_args)
51
+ actual_args = format_received_args(*args)
52
+ __raise "#{intro} received #{expectation.message.inspect} with " \
53
+ "unexpected arguments\n expected: #{expected_args}\n" \
54
+ " got: #{actual_args}\n Please stub a default value " \
55
+ "first if message might be received with other args as well. \n"
56
+ end
57
+
58
+ # @private
59
+ def raise_similar_message_args_error(expectation, *args_for_multiple_calls)
60
+ expected_args = format_args(*expectation.expected_args)
61
+ actual_args = args_for_multiple_calls.map { |a| format_received_args(*a) }.join(", ")
62
+ __raise "#{intro} received #{expectation.message.inspect} with " \
63
+ "unexpected arguments\n expected: #{expected_args}\n" \
64
+ " got: #{actual_args}"
65
+ end
66
+
67
+ # rubocop:disable Style/ParameterLists
68
+ # @private
69
+ def raise_expectation_error(message, expected_received_count, argument_list_matcher, actual_received_count, expectation_count_type, *args)
70
+ expected_part = expected_part_of_expectation_error(expected_received_count, expectation_count_type, argument_list_matcher)
71
+ received_part = received_part_of_expectation_error(actual_received_count, *args)
72
+ __raise "(#{intro}).#{message}#{format_args(*args)}\n #{expected_part}\n #{received_part}"
73
+ end
74
+ # rubocop:enable Style/ParameterLists
75
+
76
+ # @private
77
+ def raise_unimplemented_error(doubled_module, method_name)
78
+ __raise "%s does not implement: %s" % [
79
+ doubled_module.description,
80
+ method_name
81
+ ]
82
+ end
83
+
84
+ # @private
85
+ def raise_non_public_error(method_name, visibility)
86
+ raise NoMethodError, "%s method `%s' called on %s" % [
87
+ visibility, method_name, intro
88
+ ]
89
+ end
90
+
91
+ # @private
92
+ def raise_invalid_arguments_error(verifier)
93
+ __raise verifier.error_message
94
+ end
95
+
96
+ # @private
97
+ def raise_expired_test_double_error
98
+ raise ExpiredTestDoubleError,
99
+ "#{intro} was originally created in one example but has leaked into " \
100
+ "another example and can no longer be used. rspec-mocks' doubles are " \
101
+ "designed to only last for one example, and you need to create a new " \
102
+ "one in each example you wish to use it for."
103
+ end
104
+
105
+ # @private
106
+ def received_part_of_expectation_error(actual_received_count, *args)
107
+ "received: #{count_message(actual_received_count)}" +
108
+ actual_method_call_args_description(actual_received_count, args)
109
+ end
110
+
111
+ # @private
112
+ def expected_part_of_expectation_error(expected_received_count, expectation_count_type, argument_list_matcher)
113
+ "expected: #{count_message(expected_received_count, expectation_count_type)}" +
114
+ expected_method_call_args_description(argument_list_matcher.expected_args)
115
+ end
116
+
117
+ # @private
118
+ def actual_method_call_args_description(count, args)
119
+ method_call_args_description(args) ||
120
+ if count > 0 && args.length > 0
121
+ " with arguments: #{args.inspect.gsub(/\A\[(.+)\]\z/, '(\1)')}"
122
+ else
123
+ ""
124
+ end
125
+ end
126
+
127
+ # @private
128
+ def expected_method_call_args_description(args)
129
+ method_call_args_description(args) ||
130
+ if args.length > 0
131
+ " with arguments: #{format_args(*args)}"
132
+ else
133
+ ""
134
+ end
135
+ end
136
+
137
+ # @private
138
+ def method_call_args_description(args)
139
+ case args.first
140
+ when ArgumentMatchers::AnyArgsMatcher then " with any arguments"
141
+ when ArgumentMatchers::NoArgsMatcher then " with no arguments"
142
+ end
143
+ end
144
+
145
+ # @private
146
+ def describe_expectation(message, expected_received_count, _actual_received_count, *args)
147
+ "have received #{message}#{format_args(*args)} #{count_message(expected_received_count)}"
148
+ end
149
+
150
+ # @private
151
+ def raise_out_of_order_error(message)
152
+ __raise "#{intro} received :#{message} out of order"
153
+ end
154
+
155
+ # @private
156
+ def raise_block_failed_error(message, detail)
157
+ __raise "#{intro} received :#{message} but passed block failed with: #{detail}"
158
+ end
159
+
160
+ # @private
161
+ def raise_missing_block_error(args_to_yield)
162
+ __raise "#{intro} asked to yield |#{arg_list(*args_to_yield)}| but no block was passed"
163
+ end
164
+
165
+ # @private
166
+ def raise_wrong_arity_error(args_to_yield, signature)
167
+ __raise "#{intro} yielded |#{arg_list(*args_to_yield)}| to block with #{signature.description}"
168
+ end
169
+
170
+ # @private
171
+ def raise_only_valid_on_a_partial_double(method)
172
+ __raise "#{intro} is a pure test double. `#{method}` is only " \
173
+ "available on a partial double."
174
+ end
175
+
176
+ # @private
177
+ def raise_expectation_on_unstubbed_method(method)
178
+ __raise "#{intro} expected to have received #{method}, but that " \
179
+ "object is not a spy or method has not been stubbed."
180
+ end
181
+
182
+ # @private
183
+ def raise_expectation_on_mocked_method(method)
184
+ __raise "#{intro} expected to have received #{method}, but that " \
185
+ "method has been mocked instead of stubbed or spied."
186
+ end
187
+
188
+ def self.raise_double_negation_error(wrapped_expression)
189
+ raise "Isn't life confusing enough? You've already set a " \
190
+ "negative message expectation and now you are trying to " \
191
+ "negate it again with `never`. What does an expression like " \
192
+ "`#{wrapped_expression}.not_to receive(:msg).never` even mean?"
193
+ end
194
+
195
+ private
196
+
197
+ def intro
198
+ if @name
199
+ "Double #{@name.inspect}"
200
+ elsif TestDouble === @target
201
+ "Double"
202
+ elsif Class === @target
203
+ "<#{@target.inspect} (class)>"
204
+ elsif @target
205
+ @target
206
+ else
207
+ "nil"
208
+ end
209
+ end
210
+
211
+ def __raise(message)
212
+ message = opts[:message] unless opts[:message].nil?
213
+ Kernel.raise(RSpec::Mocks::MockExpectationError, message)
214
+ end
215
+
216
+ def arg_message(*args)
217
+ " with " + format_args(*args)
218
+ end
219
+
220
+ def format_args(*args)
221
+ args.empty? ? "(no args)" : "(" + arg_list(*args) + ")"
222
+ end
223
+
224
+ def arg_list(*args)
225
+ args.map { |arg| arg_has_valid_description(arg) ? arg.description : arg.inspect }.join(", ")
226
+ end
227
+
228
+ def arg_has_valid_description(arg)
229
+ return false unless arg.respond_to?(:description)
230
+
231
+ !arg.description.nil? && !arg.description.empty?
232
+ end
233
+
234
+ def format_received_args(*args)
235
+ args.empty? ? "(no args)" : "(" + received_arg_list(*args) + ")"
236
+ end
237
+
238
+ def received_arg_list(*args)
239
+ args.map(&:inspect).join(", ")
240
+ end
241
+
242
+ def count_message(count, expectation_count_type=nil)
243
+ return "at least #{times(count.abs)}" if count < 0 || expectation_count_type == :at_least
244
+ return "at most #{times(count)}" if expectation_count_type == :at_most
245
+ times(count)
246
+ end
247
+
248
+ def times(count)
249
+ "#{count} time#{count == 1 ? '' : 's'}"
250
+ end
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,379 @@
1
+ RSpec::Support.require_rspec_mocks 'object_reference'
2
+
3
+ module RSpec
4
+ module Mocks
5
+ # Contains methods intended to be used from within code examples.
6
+ # Mix this in to your test context (such as a test framework base class)
7
+ # to use rspec-mocks with your test framework. If you're using rspec-core,
8
+ # it'll take care of doing this for you.
9
+ module ExampleMethods
10
+ include RSpec::Mocks::ArgumentMatchers
11
+
12
+ # @overload double()
13
+ # @overload double(name)
14
+ # @param name [String/Symbol] used to clarify intent
15
+ # @overload double(stubs)
16
+ # @param stubs (Hash) hash of message/return-value pairs
17
+ # @overload double(name, stubs)
18
+ # @param name [String/Symbol] used to clarify intent
19
+ # @param stubs (Hash) hash of message/return-value pairs
20
+ # @return (Double)
21
+ #
22
+ # Constructs an instance of [RSpec::Mocks::Double](RSpec::Mocks::Double) configured
23
+ # with an optional name, used for reporting in failure messages, and an optional
24
+ # hash of message/return-value pairs.
25
+ #
26
+ # @example
27
+ #
28
+ # book = double("book", :title => "The RSpec Book")
29
+ # book.title #=> "The RSpec Book"
30
+ #
31
+ # card = double("card", :suit => "Spades", :rank => "A")
32
+ # card.suit #=> "Spades"
33
+ # card.rank #=> "A"
34
+ #
35
+ def double(*args)
36
+ ExampleMethods.declare_double(Double, *args)
37
+ end
38
+
39
+ # @overload instance_double(doubled_class)
40
+ # @param doubled_class [String, Class]
41
+ # @overload instance_double(doubled_class, stubs)
42
+ # @param doubled_class [String, Class]
43
+ # @param stubs [Hash] hash of message/return-value pairs
44
+ # @return InstanceVerifyingDouble
45
+ #
46
+ # Constructs a test double against a specific class. If the given class
47
+ # name has been loaded, only instance methods defined on the class are
48
+ # allowed to be stubbed. In all other ways it behaves like a
49
+ # [double](double).
50
+ def instance_double(doubled_class, *args)
51
+ ref = ObjectReference.for(doubled_class)
52
+ ExampleMethods.declare_verifying_double(InstanceVerifyingDouble, ref, *args)
53
+ end
54
+
55
+ # @overload class_double(doubled_class)
56
+ # @param doubled_class [String, Module]
57
+ # @overload class_double(doubled_class, stubs)
58
+ # @param doubled_class [String, Module]
59
+ # @param stubs [Hash] hash of message/return-value pairs
60
+ # @return ClassVerifyingDouble
61
+ #
62
+ # Constructs a test double against a specific class. If the given class
63
+ # name has been loaded, only class methods defined on the class are
64
+ # allowed to be stubbed. In all other ways it behaves like a
65
+ # [double](double).
66
+ def class_double(doubled_class, *args)
67
+ ref = ObjectReference.for(doubled_class)
68
+ ExampleMethods.declare_verifying_double(ClassVerifyingDouble, ref, *args)
69
+ end
70
+
71
+ # @overload object_double(object_or_name)
72
+ # @param object_or_name [String, Object]
73
+ # @overload object_double(object_or_name, stubs)
74
+ # @param object_or_name [String, Object]
75
+ # @param stubs [Hash] hash of message/return-value pairs
76
+ # @return ObjectVerifyingDouble
77
+ #
78
+ # Constructs a test double against a specific object. Only the methods
79
+ # the object responds to are allowed to be stubbed. If a String argument
80
+ # is provided, it is assumed to reference a constant object which is used
81
+ # for verification. In all other ways it behaves like a [double](double).
82
+ def object_double(object_or_name, *args)
83
+ ref = ObjectReference.for(object_or_name, :allow_direct_object_refs)
84
+ ExampleMethods.declare_verifying_double(ObjectVerifyingDouble, ref, *args)
85
+ end
86
+
87
+ # @overload spy()
88
+ # @overload spy(name)
89
+ # @param name [String/Symbol] used to clarify intent
90
+ # @overload spy(stubs)
91
+ # @param stubs (Hash) hash of message/return-value pairs
92
+ # @overload spy(name, stubs)
93
+ # @param name [String/Symbol] used to clarify intent
94
+ # @param stubs (Hash) hash of message/return-value pairs
95
+ # @return (Double)
96
+ #
97
+ # Constructs a test double that is optimized for use with
98
+ # `have_received`. With a normal double one has to stub methods in order
99
+ # to be able to spy them. A spy automatically spies on all methods.
100
+ def spy(*args)
101
+ double(*args).as_null_object
102
+ end
103
+
104
+ # @overload instance_spy(doubled_class)
105
+ # @param doubled_class [String, Class]
106
+ # @overload instance_spy(doubled_class, stubs)
107
+ # @param doubled_class [String, Class]
108
+ # @param stubs [Hash] hash of message/return-value pairs
109
+ # @return InstanceVerifyingDouble
110
+ #
111
+ # Constructs a test double that is optimized for use with `have_received`
112
+ # against a specific class. If the given class name has been loaded, only
113
+ # instance methods defined on the class are allowed to be stubbed. With
114
+ # a normal double one has to stub methods in order to be able to spy
115
+ # them. An instance_spy automatically spies on all instance methods to
116
+ # which the class responds.
117
+ def instance_spy(*args)
118
+ instance_double(*args).as_null_object
119
+ end
120
+
121
+ # @overload object_spy(object_or_name)
122
+ # @param object_or_name [String, Object]
123
+ # @overload object_spy(object_or_name, stubs)
124
+ # @param object_or_name [String, Object]
125
+ # @param stubs [Hash] hash of message/return-value pairs
126
+ # @return ObjectVerifyingDouble
127
+ #
128
+ # Constructs a test double that is optimized for use with `have_received`
129
+ # against a specific object. Only instance methods defined on the object
130
+ # are allowed to be stubbed. With a normal double one has to stub
131
+ # methods in order to be able to spy them. An object_spy automatically
132
+ # spies on all methods to which the object responds.
133
+ def object_spy(*args)
134
+ object_double(*args).as_null_object
135
+ end
136
+
137
+ # @overload class_spy(doubled_class)
138
+ # @param doubled_class [String, Module]
139
+ # @overload class_spy(doubled_class, stubs)
140
+ # @param doubled_class [String, Module]
141
+ # @param stubs [Hash] hash of message/return-value pairs
142
+ # @return ClassVerifyingDouble
143
+ #
144
+ # Constructs a test double that is optimized for use with `have_received`
145
+ # against a specific class. If the given class name has been loaded,
146
+ # only class methods defined on the class are allowed to be stubbed.
147
+ # With a normal double one has to stub methods in order to be able to spy
148
+ # them. An class_spy automatically spies on all class methods to which the
149
+ # class responds.
150
+ def class_spy(*args)
151
+ class_double(*args).as_null_object
152
+ end
153
+
154
+ # Disables warning messages about expectations being set on nil.
155
+ #
156
+ # By default warning messages are issued when expectations are set on
157
+ # nil. This is to prevent false-positives and to catch potential bugs
158
+ # early on.
159
+ def allow_message_expectations_on_nil
160
+ RSpec::Mocks.space.proxy_for(nil).warn_about_expectations = false
161
+ end
162
+
163
+ # Stubs the named constant with the given value.
164
+ # Like method stubs, the constant will be restored
165
+ # to its original value (or lack of one, if it was
166
+ # undefined) when the example completes.
167
+ #
168
+ # @param constant_name [String] The fully qualified name of the constant. The current
169
+ # constant scoping at the point of call is not considered.
170
+ # @param value [Object] The value to make the constant refer to. When the
171
+ # example completes, the constant will be restored to its prior state.
172
+ # @param options [Hash] Stubbing options.
173
+ # @option options :transfer_nested_constants [Boolean, Array<Symbol>] Determines
174
+ # what nested constants, if any, will be transferred from the original value
175
+ # of the constant to the new value of the constant. This only works if both
176
+ # the original and new values are modules (or classes).
177
+ # @return [Object] the stubbed value of the constant
178
+ #
179
+ # @example
180
+ #
181
+ # stub_const("MyClass", Class.new) # => Replaces (or defines) MyClass with a new class object.
182
+ # stub_const("SomeModel::PER_PAGE", 5) # => Sets SomeModel::PER_PAGE to 5.
183
+ #
184
+ # class CardDeck
185
+ # SUITS = [:Spades, :Diamonds, :Clubs, :Hearts]
186
+ # NUM_CARDS = 52
187
+ # end
188
+ #
189
+ # stub_const("CardDeck", Class.new)
190
+ # CardDeck::SUITS # => uninitialized constant error
191
+ # CardDeck::NUM_CARDS # => uninitialized constant error
192
+ #
193
+ # stub_const("CardDeck", Class.new, :transfer_nested_constants => true)
194
+ # CardDeck::SUITS # => our suits array
195
+ # CardDeck::NUM_CARDS # => 52
196
+ #
197
+ # stub_const("CardDeck", Class.new, :transfer_nested_constants => [:SUITS])
198
+ # CardDeck::SUITS # => our suits array
199
+ # CardDeck::NUM_CARDS # => uninitialized constant error
200
+ def stub_const(constant_name, value, options={})
201
+ ConstantMutator.stub(constant_name, value, options)
202
+ end
203
+
204
+ # Hides the named constant with the given value. The constant will be
205
+ # undefined for the duration of the test.
206
+ #
207
+ # Like method stubs, the constant will be restored to its original value
208
+ # when the example completes.
209
+ #
210
+ # @param constant_name [String] The fully qualified name of the constant.
211
+ # The current constant scoping at the point of call is not considered.
212
+ #
213
+ # @example
214
+ #
215
+ # hide_const("MyClass") # => MyClass is now an undefined constant
216
+ def hide_const(constant_name)
217
+ ConstantMutator.hide(constant_name)
218
+ end
219
+
220
+ # Verifies that the given object received the expected message during the
221
+ # course of the test. On a spy objects or as null object doubles this
222
+ # works for any method, on other objects the method must have
223
+ # been stubbed beforehand in order for messages to be verified.
224
+ #
225
+ # Stubbing and verifying messages received in this way implements the
226
+ # Test Spy pattern.
227
+ #
228
+ # @param method_name [Symbol] name of the method expected to have been
229
+ # called.
230
+ #
231
+ # @example
232
+ #
233
+ # invitation = double('invitation', accept: true)
234
+ # user.accept_invitation(invitation)
235
+ # expect(invitation).to have_received(:accept)
236
+ #
237
+ # # You can also use most message expectations:
238
+ # expect(invitation).to have_received(:accept).with(mailer).once
239
+ def have_received(method_name, &block)
240
+ Matchers::HaveReceived.new(method_name, &block)
241
+ end
242
+
243
+ # @method expect
244
+ # Used to wrap an object in preparation for setting a mock expectation
245
+ # on it.
246
+ #
247
+ # @example
248
+ #
249
+ # expect(obj).to receive(:foo).with(5).and_return(:return_value)
250
+ #
251
+ # @note This method is usually provided by rspec-expectations. However,
252
+ # if you use rspec-mocks without rspec-expectations, there's a definition
253
+ # of it that is made available here. If you disable the `:expect` syntax
254
+ # this method will be undefined.
255
+
256
+ # @method allow
257
+ # Used to wrap an object in preparation for stubbing a method
258
+ # on it.
259
+ #
260
+ # @example
261
+ #
262
+ # allow(dbl).to receive(:foo).with(5).and_return(:return_value)
263
+ #
264
+ # @note If you disable the `:expect` syntax this method will be undefined.
265
+
266
+ # @method expect_any_instance_of
267
+ # Used to wrap a class in preparation for setting a mock expectation
268
+ # on instances of it.
269
+ #
270
+ # @example
271
+ #
272
+ # expect_any_instance_of(MyClass).to receive(:foo)
273
+ #
274
+ # @note If you disable the `:expect` syntax this method will be undefined.
275
+
276
+ # @method allow_any_instance_of
277
+ # Used to wrap a class in preparation for stubbing a method
278
+ # on instances of it.
279
+ #
280
+ # @example
281
+ #
282
+ # allow_any_instance_of(MyClass).to receive(:foo)
283
+ #
284
+ # @note This is only available when you have enabled the `expect` syntax.
285
+
286
+ # @method receive
287
+ # Used to specify a message that you expect or allow an object
288
+ # to receive. The object returned by `receive` supports the same
289
+ # fluent interface that `should_receive` and `stub` have always
290
+ # supported, allowing you to constrain the arguments or number of
291
+ # times, and configure how the object should respond to the message.
292
+ #
293
+ # @example
294
+ #
295
+ # expect(obj).to receive(:hello).with("world").exactly(3).times
296
+ #
297
+ # @note If you disable the `:expect` syntax this method will be undefined.
298
+
299
+ # @method receive_messages
300
+ # Shorthand syntax used to setup message(s), and their return value(s),
301
+ # that you expect or allow an object to receive. The method takes a hash
302
+ # of messages and their respective return values. Unlike with `receive`,
303
+ # you cannot apply further customizations using a block or the fluent
304
+ # interface.
305
+ #
306
+ # @example
307
+ #
308
+ # allow(obj).to receive_messages(:speak => "Hello World")
309
+ # allow(obj).to receive_messages(:speak => "Hello", :meow => "Meow")
310
+ #
311
+ # @note If you disable the `:expect` syntax this method will be undefined.
312
+
313
+ # @method receive_message_chain
314
+ # @overload receive_message_chain(method1, method2)
315
+ # @overload receive_message_chain("method1.method2")
316
+ # @overload receive_message_chain(method1, method_to_value_hash)
317
+ #
318
+ # stubs/mocks a chain of messages on an object or test double.
319
+ #
320
+ # ## Warning:
321
+ #
322
+ # Chains can be arbitrarily long, which makes it quite painless to
323
+ # violate the Law of Demeter in violent ways, so you should consider any
324
+ # use of `receive_message_chain` a code smell. Even though not all code smells
325
+ # indicate real problems (think fluent interfaces), `receive_message_chain` still
326
+ # results in brittle examples. For example, if you write
327
+ # `allow(foo).to receive_message_chain(:bar, :baz => 37)` in a spec and then the
328
+ # implementation calls `foo.baz.bar`, the stub will not work.
329
+ #
330
+ # @example
331
+ #
332
+ # allow(double).to receive_message_chain("foo.bar") { :baz }
333
+ # allow(double).to receive_message_chain(:foo, :bar => :baz)
334
+ # allow(double).to receive_message_chain(:foo, :bar) { :baz }
335
+ #
336
+ # # Given any of ^^ these three forms ^^:
337
+ # double.foo.bar # => :baz
338
+ #
339
+ # # Common use in Rails/ActiveRecord:
340
+ # allow(Article).to receive_message_chain("recent.published") { [Article.new] }
341
+ #
342
+ # @note If you disable the `:expect` syntax this method will be undefined.
343
+
344
+ # @private
345
+ def self.included(klass)
346
+ klass.class_exec do
347
+ # This gets mixed in so that if `RSpec::Matchers` is included in
348
+ # `klass` later, it's definition of `expect` will take precedence.
349
+ include ExpectHost unless method_defined?(:expect)
350
+ end
351
+ end
352
+
353
+ # @private
354
+ def self.declare_verifying_double(type, ref, *args)
355
+ if RSpec::Mocks.configuration.verify_doubled_constant_names? &&
356
+ !ref.defined?
357
+
358
+ raise VerifyingDoubleNotDefinedError,
359
+ "#{ref.description} is not a defined constant. " \
360
+ "Perhaps you misspelt it? " \
361
+ "Disable check with verify_doubled_constant_names configuration option."
362
+ end
363
+
364
+ declare_double(type, ref, *args)
365
+ end
366
+
367
+ # @private
368
+ def self.declare_double(type, *args)
369
+ args << {} unless Hash === args.last
370
+ type.new(*args)
371
+ end
372
+
373
+ # This module exists to host the `expect` method for cases where
374
+ # rspec-mocks is used w/o rspec-expectations.
375
+ module ExpectHost
376
+ end
377
+ end
378
+ end
379
+ end