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,24 @@
1
+ module RSpec
2
+ module Mocks
3
+ RSpec.describe "Methods added to every object" do
4
+ include_context "with syntax", :expect
5
+
6
+ def added_methods
7
+ host = Class.new
8
+ orig_instance_methods = host.instance_methods
9
+ Syntax.enable_should(host)
10
+ (host.instance_methods - orig_instance_methods).map(&:to_sym)
11
+ end
12
+
13
+ it 'limits the number of methods that get added to all objects' do
14
+ # If really necessary, you can add to this list, but long term,
15
+ # we are hoping to cut down on the number of methods added to all objects
16
+ expect(added_methods).to match_array([
17
+ :as_null_object, :null_object?,
18
+ :received_message?, :should_not_receive, :should_receive,
19
+ :stub, :stub_chain, :unstub
20
+ ])
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ module RSpec
2
+ module Mocks
3
+ RSpec.describe 'MockExpectationError' do
4
+
5
+ class Foo
6
+ def self.foo
7
+ bar
8
+ rescue StandardError
9
+ end
10
+ end
11
+
12
+ it 'is not caught by StandardError rescue blocks' do
13
+ expect(Foo).not_to receive(:bar)
14
+ expect {
15
+ Foo.foo
16
+ }.to raise_error(RSpec::Mocks::MockExpectationError)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,112 @@
1
+ module RSpec
2
+ module Mocks
3
+
4
+ RSpec.describe "ordering" do
5
+ before { @double = double("test double") }
6
+ after { reset @double }
7
+
8
+ it "passes when messages are received in order" do
9
+ expect(@double).to receive(:one).ordered
10
+ expect(@double).to receive(:two).ordered
11
+ expect(@double).to receive(:three).ordered
12
+ @double.one
13
+ @double.two
14
+ @double.three
15
+ end
16
+
17
+ it "passes when messages are received in order" do
18
+ allow(@double).to receive(:something)
19
+ expect(@double).to receive(:one).ordered
20
+ expect(@double).to receive(:two).ordered
21
+ expect(@double).to receive(:three).at_least(:once).ordered
22
+ @double.one
23
+ @double.two
24
+ @double.three
25
+ @double.three
26
+ end
27
+
28
+ it "passes when messages are received in order across objects" do
29
+ a = double("a")
30
+ b = double("b")
31
+ expect(a).to receive(:one).ordered
32
+ expect(b).to receive(:two).ordered
33
+ expect(a).to receive(:three).ordered
34
+ a.one
35
+ b.two
36
+ a.three
37
+ end
38
+
39
+ it "fails when messages are received out of order (2nd message 1st)" do
40
+ expect(@double).to receive(:one).ordered
41
+ expect(@double).to receive(:two).ordered
42
+ expect {
43
+ @double.two
44
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :two out of order")
45
+ end
46
+
47
+ it "fails when messages are received out of order (3rd message 1st)" do
48
+ expect(@double).to receive(:one).ordered
49
+ expect(@double).to receive(:two).ordered
50
+ expect(@double).to receive(:three).ordered
51
+ @double.one
52
+ expect {
53
+ @double.three
54
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
55
+ end
56
+
57
+ it "fails when messages are received out of order (3rd message 2nd)" do
58
+ expect(@double).to receive(:one).ordered
59
+ expect(@double).to receive(:two).ordered
60
+ expect(@double).to receive(:three).ordered
61
+ @double.one
62
+ expect {
63
+ @double.three
64
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
65
+ end
66
+
67
+ it "fails when messages are out of order across objects" do
68
+ a = double("test double")
69
+ b = double("another test double")
70
+ expect(a).to receive(:one).ordered
71
+ expect(b).to receive(:two).ordered
72
+ expect(a).to receive(:three).ordered
73
+ a.one
74
+ expect {
75
+ a.three
76
+ }.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"test double\" received :three out of order")
77
+ reset a
78
+ reset b
79
+ end
80
+
81
+ it "ignores order of non ordered messages" do
82
+ expect(@double).to receive(:ignored_0)
83
+ expect(@double).to receive(:ordered_1).ordered
84
+ expect(@double).to receive(:ignored_1)
85
+ expect(@double).to receive(:ordered_2).ordered
86
+ expect(@double).to receive(:ignored_2)
87
+ expect(@double).to receive(:ignored_3)
88
+ expect(@double).to receive(:ordered_3).ordered
89
+ expect(@double).to receive(:ignored_4)
90
+ @double.ignored_3
91
+ @double.ordered_1
92
+ @double.ignored_0
93
+ @double.ordered_2
94
+ @double.ignored_4
95
+ @double.ignored_2
96
+ @double.ordered_3
97
+ @double.ignored_1
98
+ verify @double
99
+ end
100
+
101
+ it "supports duplicate messages" do
102
+ expect(@double).to receive(:a).ordered
103
+ expect(@double).to receive(:b).ordered
104
+ expect(@double).to receive(:a).ordered
105
+
106
+ @double.a
107
+ @double.b
108
+ @double.a
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,130 @@
1
+ module RSpec
2
+ module Mocks
3
+ RSpec.describe "a double stubbed with multiple return values" do
4
+ let(:a_double) { double }
5
+
6
+ before do
7
+ allow(a_double).to receive(:foo).and_return(:val_1, nil)
8
+ end
9
+
10
+ it 'can still set a message expectation with a single return value' do
11
+ expect(a_double).to receive(:foo).once.and_return(:val_1)
12
+ expect(a_double.foo).to eq(:val_1)
13
+ end
14
+ end
15
+
16
+ RSpec.describe "a message expectation with multiple return values and no specified count" do
17
+ before(:each) do
18
+ @double = double
19
+ @return_values = [1,2,3]
20
+ expect(@double).to receive(:do_something).and_return(@return_values[0],@return_values[1],@return_values[2])
21
+ end
22
+
23
+ it "returns values in order" do
24
+ expect(@double.do_something).to eq @return_values[0]
25
+ expect(@double.do_something).to eq @return_values[1]
26
+ expect(@double.do_something).to eq @return_values[2]
27
+ verify @double
28
+ end
29
+
30
+ it "falls back to a previously stubbed value" do
31
+ allow(@double).to receive_messages :do_something => :stub_result
32
+ expect(@double.do_something).to eq @return_values[0]
33
+ expect(@double.do_something).to eq @return_values[1]
34
+ expect(@double.do_something).to eq @return_values[2]
35
+ expect(@double.do_something).to eq :stub_result
36
+ end
37
+
38
+ it "fails when there are too few calls (if there is no stub)" do
39
+ @double.do_something
40
+ @double.do_something
41
+ expect { verify @double }.to raise_error
42
+ end
43
+
44
+ it "fails when there are too many calls (if there is no stub)" do
45
+ @double.do_something
46
+ @double.do_something
47
+ @double.do_something
48
+ @double.do_something
49
+ expect { verify @double }.to raise_error
50
+ end
51
+ end
52
+
53
+ RSpec.describe "a message expectation with multiple return values with a specified count equal to the number of values" do
54
+ before(:each) do
55
+ @double = double
56
+ @return_values = [1,2,3]
57
+ expect(@double).to receive(:do_something).exactly(3).times.and_return(@return_values[0], @return_values[1], @return_values[2])
58
+ end
59
+
60
+ it "returns values in order to consecutive calls" do
61
+ expect(@double.do_something).to eq @return_values[0]
62
+ expect(@double.do_something).to eq @return_values[1]
63
+ expect(@double.do_something).to eq @return_values[2]
64
+ verify @double
65
+ end
66
+ end
67
+
68
+ RSpec.describe "a message expectation with multiple return values specifying at_least less than the number of values" do
69
+ before(:each) do
70
+ @double = double
71
+ expect(@double).to receive(:do_something).at_least(:twice).with(no_args).and_return(11, 22)
72
+ end
73
+
74
+ it "uses the last return value for subsequent calls" do
75
+ expect(@double.do_something).to equal(11)
76
+ expect(@double.do_something).to equal(22)
77
+ expect(@double.do_something).to equal(22)
78
+ verify @double
79
+ end
80
+
81
+ it "fails when called less than the specified number" do
82
+ expect(@double.do_something).to equal(11)
83
+ expect { verify @double }.to raise_error(RSpec::Mocks::MockExpectationError)
84
+ end
85
+
86
+ context "when method is stubbed too" do
87
+ before { allow(@double).to receive(:do_something).and_return :stub_result }
88
+
89
+ it "uses the last value for subsequent calls" do
90
+ expect(@double.do_something).to equal(11)
91
+ expect(@double.do_something).to equal(22)
92
+ expect(@double.do_something).to equal(22)
93
+ verify @double
94
+ end
95
+
96
+ it "fails when called less than the specified number" do
97
+ expect(@double.do_something).to equal(11)
98
+ expect { verify @double }.to raise_error(RSpec::Mocks::MockExpectationError)
99
+ end
100
+ end
101
+ end
102
+
103
+ RSpec.describe "a message expectation with multiple return values with a specified count larger than the number of values" do
104
+ before(:each) do
105
+ @double = RSpec::Mocks::Double.new("double")
106
+ expect(@double).to receive(:do_something).exactly(3).times.and_return(11, 22)
107
+ end
108
+
109
+ it "uses the last return value for subsequent calls" do
110
+ expect(@double.do_something).to equal(11)
111
+ expect(@double.do_something).to equal(22)
112
+ expect(@double.do_something).to equal(22)
113
+ verify @double
114
+ end
115
+
116
+ it "fails when called less than the specified number" do
117
+ @double.do_something
118
+ @double.do_something
119
+ expect { verify @double }.to raise_error
120
+ end
121
+
122
+ it "fails fast when called greater than the specified number" do
123
+ @double.do_something
124
+ @double.do_something
125
+ @double.do_something
126
+ expect { @double.do_something }.to raise_error
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,561 @@
1
+ TOP_LEVEL_VALUE_CONST = 7
2
+
3
+ class TestClass
4
+ M = :m
5
+ N = :n
6
+
7
+ class Nested
8
+ class NestedEvenMore
9
+ end
10
+ end
11
+ end
12
+
13
+ class TestClassThatDefinesSend
14
+ C = :c
15
+
16
+ def self.send
17
+ end
18
+ end
19
+
20
+ class TestSubClass < TestClass
21
+ P = :p
22
+ end
23
+
24
+ module RSpec
25
+ module Mocks
26
+ RSpec.describe "Constant Mutating" do
27
+ include RSpec::Support::RecursiveConstMethods
28
+
29
+ def reset_rspec_mocks
30
+ ::RSpec::Mocks.space.reset_all
31
+ end
32
+
33
+ shared_context "constant example methods" do |const_name|
34
+ define_method :const do
35
+ recursive_const_get(const_name)
36
+ end
37
+
38
+ define_method :parent_const do
39
+ recursive_const_get("Object::" + const_name.sub(/(::)?[^:]+\z/, ''))
40
+ end
41
+
42
+ define_method :last_const_part do
43
+ const_name.split('::').last
44
+ end
45
+ end
46
+
47
+ shared_examples "loaded constant stubbing" do |const_name|
48
+ include_context "constant example methods", const_name
49
+
50
+ let!(:original_const_value) { const }
51
+ after { change_const_value_to(original_const_value) }
52
+
53
+ def change_const_value_to(value)
54
+ parent_const.__send__(:remove_const, last_const_part)
55
+ parent_const.const_set(last_const_part, value)
56
+ end
57
+
58
+ it 'allows it to be stubbed' do
59
+ expect(const).not_to eq(7)
60
+ stub_const(const_name, 7)
61
+ expect(const).to eq(7)
62
+ end
63
+
64
+ it 'resets it to its original value when rspec clears its mocks' do
65
+ original_value = const
66
+ expect(original_value).not_to eq(:a)
67
+ stub_const(const_name, :a)
68
+ reset_rspec_mocks
69
+ expect(const).to be(original_value)
70
+ end
71
+
72
+ it 'returns the stubbed value' do
73
+ expect(stub_const(const_name, 7)).to eq(7)
74
+ end
75
+ end
76
+
77
+ shared_examples "loaded constant hiding" do |const_name|
78
+ before do
79
+ expect(recursive_const_defined?(const_name)).to be_truthy
80
+ end
81
+
82
+ it 'allows it to be hidden' do
83
+ hide_const(const_name)
84
+ expect(recursive_const_defined?(const_name)).to be_falsey
85
+ end
86
+
87
+ it 'resets the constant when rspec clear its mocks' do
88
+ hide_const(const_name)
89
+ reset_rspec_mocks
90
+ expect(recursive_const_defined?(const_name)).to be_truthy
91
+ end
92
+
93
+ it 'returns nil' do
94
+ expect(hide_const(const_name)).to be_nil
95
+ end
96
+ end
97
+
98
+ shared_examples "unloaded constant stubbing" do |const_name|
99
+ include_context "constant example methods", const_name
100
+
101
+ before do
102
+ expect(recursive_const_defined?(const_name)).to be_falsey
103
+ end
104
+
105
+ it 'allows it to be stubbed' do
106
+ stub_const(const_name, 7)
107
+ expect(const).to eq(7)
108
+ end
109
+
110
+ it 'removes the constant when rspec clears its mocks' do
111
+ stub_const(const_name, 7)
112
+ reset_rspec_mocks
113
+ expect(recursive_const_defined?(const_name)).to be_falsey
114
+ end
115
+
116
+ it 'returns the stubbed value' do
117
+ expect(stub_const(const_name, 7)).to eq(7)
118
+ end
119
+
120
+ it 'ignores the :transfer_nested_constants option if passed' do
121
+ stub = Module.new
122
+ stub_const(const_name, stub, :transfer_nested_constants => true)
123
+ expect(stub.constants).to eq([])
124
+ end
125
+ end
126
+
127
+ shared_examples "unloaded constant hiding" do |const_name|
128
+ include_context "constant example methods", const_name
129
+
130
+ before do
131
+ expect(recursive_const_defined?(const_name)).to be_falsey
132
+ end
133
+
134
+ it 'allows it to be hidden, though the operation has no effect' do
135
+ hide_const(const_name)
136
+ expect(recursive_const_defined?(const_name)).to be_falsey
137
+ end
138
+
139
+ it 'remains undefined after rspec clears its mocks' do
140
+ hide_const(const_name)
141
+ reset_rspec_mocks
142
+ expect(recursive_const_defined?(const_name)).to be_falsey
143
+ end
144
+
145
+ it 'returns nil' do
146
+ expect(hide_const(const_name)).to be_nil
147
+ end
148
+ end
149
+
150
+ describe "#hide_const" do
151
+ context "for a loaded constant nested in a module that redefines `send`" do
152
+ it_behaves_like "loaded constant hiding", "TestClassThatDefinesSend::C"
153
+ end
154
+
155
+
156
+ context 'for a loaded nested constant' do
157
+ it_behaves_like "loaded constant hiding", "TestClass::Nested"
158
+ end
159
+
160
+ context 'for a loaded constant prefixed with ::' do
161
+ it_behaves_like 'loaded constant hiding', "::TestClass"
162
+ end
163
+
164
+ context 'for an unloaded constant with nested name that matches a top-level constant' do
165
+ it_behaves_like "unloaded constant hiding", "TestClass::Hash"
166
+
167
+ it 'does not hide the top-level constant' do
168
+ top_level_hash = ::Hash
169
+
170
+ hide_const("TestClass::Hash")
171
+ expect(::Hash).to equal(top_level_hash)
172
+ end
173
+
174
+ it 'does not affect the ability to access the top-level constant from nested contexts', :silence_warnings do
175
+ top_level_hash = ::Hash
176
+
177
+ hide_const("TestClass::Hash")
178
+ expect(TestClass::Hash).to equal(top_level_hash)
179
+ end
180
+ end
181
+
182
+ context 'for a loaded deeply nested constant' do
183
+ it_behaves_like "loaded constant hiding", "TestClass::Nested::NestedEvenMore"
184
+ end
185
+
186
+ context 'for an unloaded unnested constant' do
187
+ it_behaves_like "unloaded constant hiding", "X"
188
+ end
189
+
190
+ context 'for an unloaded nested constant' do
191
+ it_behaves_like "unloaded constant hiding", "X::Y"
192
+ end
193
+
194
+ it 'can be hidden multiple times but still restores the original value properly' do
195
+ orig_value = TestClass
196
+ hide_const("TestClass")
197
+ hide_const("TestClass")
198
+
199
+ reset_rspec_mocks
200
+ expect(TestClass).to be(orig_value)
201
+ end
202
+
203
+ it 'allows a constant to be hidden, then stubbed, restoring it to its original value properly' do
204
+ orig_value = TOP_LEVEL_VALUE_CONST
205
+
206
+ hide_const("TOP_LEVEL_VALUE_CONST")
207
+ expect(recursive_const_defined?("TOP_LEVEL_VALUE_CONST")).to be_falsey
208
+
209
+ stub_const("TOP_LEVEL_VALUE_CONST", 12345)
210
+ expect(TOP_LEVEL_VALUE_CONST).to eq 12345
211
+
212
+ reset_rspec_mocks
213
+ expect(TOP_LEVEL_VALUE_CONST).to eq orig_value
214
+ end
215
+ end
216
+
217
+ describe "#stub_const" do
218
+ context "for a loaded constant nested in a module that redefines `send`" do
219
+ it_behaves_like "loaded constant stubbing", "TestClassThatDefinesSend::C"
220
+ end
221
+
222
+ context 'for a loaded unnested constant' do
223
+ it_behaves_like "loaded constant stubbing", "TestClass"
224
+
225
+ it 'can be stubbed multiple times but still restores the original value properly' do
226
+ orig_value = TestClass
227
+ stub1, stub2 = Module.new, Module.new
228
+ stub_const("TestClass", stub1)
229
+ stub_const("TestClass", stub2)
230
+
231
+ reset_rspec_mocks
232
+ expect(TestClass).to be(orig_value)
233
+ end
234
+
235
+ it 'allows nested constants to be transferred to a stub module' do
236
+ tc_nested = TestClass::Nested
237
+ stub = Module.new
238
+ stub_const("TestClass", stub, :transfer_nested_constants => true)
239
+ expect(stub::M).to eq(:m)
240
+ expect(stub::N).to eq(:n)
241
+ expect(stub::Nested).to be(tc_nested)
242
+ end
243
+
244
+ it 'removes the transferred constants on reset' do
245
+ stub = Module.new
246
+ stub_const("TestClass", stub, :transfer_nested_constants => true)
247
+
248
+ expect {
249
+ reset_all
250
+ }.to change { stub.constants }.to([])
251
+ end
252
+
253
+ it 'does not transfer nested constants that are inherited from a superclass' do
254
+ stub = Module.new
255
+ stub_const("TestSubClass", stub, :transfer_nested_constants => true)
256
+ expect(stub::P).to eq(:p)
257
+ expect(defined?(stub::M)).to be_falsey
258
+ expect(defined?(stub::N)).to be_falsey
259
+ end
260
+
261
+ it 'raises an error when asked to transfer a nested inherited constant' do
262
+ original_tsc = TestSubClass
263
+
264
+ expect {
265
+ stub_const("TestSubClass", Module.new, :transfer_nested_constants => [:M])
266
+ }.to raise_error(ArgumentError)
267
+
268
+ expect(TestSubClass).to be(original_tsc)
269
+ end
270
+
271
+ it 'allows nested constants to be selectively transferred to a stub module' do
272
+ stub = Module.new
273
+ stub_const("TestClass", stub, :transfer_nested_constants => [:M, :N])
274
+ expect(stub::M).to eq(:m)
275
+ expect(stub::N).to eq(:n)
276
+ expect(defined?(stub::Nested)).to be_falsey
277
+ end
278
+
279
+ it 'raises an error if asked to transfer nested constants but given an object that does not support them' do
280
+ original_tc = TestClass
281
+ stub = Object.new
282
+ expect {
283
+ stub_const("TestClass", stub, :transfer_nested_constants => true)
284
+ }.to raise_error(ArgumentError)
285
+
286
+ expect(TestClass).to be(original_tc)
287
+
288
+ expect {
289
+ stub_const("TestClass", stub, :transfer_nested_constants => [:M])
290
+ }.to raise_error(ArgumentError)
291
+
292
+ expect(TestClass).to be(original_tc)
293
+ end
294
+
295
+ it 'raises an error if asked to transfer nested constants on a constant that does not support nested constants' do
296
+ stub = Module.new
297
+ expect {
298
+ stub_const("TOP_LEVEL_VALUE_CONST", stub, :transfer_nested_constants => true)
299
+ }.to raise_error(ArgumentError)
300
+
301
+ expect(TOP_LEVEL_VALUE_CONST).to eq(7)
302
+
303
+ expect {
304
+ stub_const("TOP_LEVEL_VALUE_CONST", stub, :transfer_nested_constants => [:M])
305
+ }.to raise_error(ArgumentError)
306
+
307
+ expect(TOP_LEVEL_VALUE_CONST).to eq(7)
308
+ end
309
+
310
+ it 'raises an error if asked to transfer a nested constant that is not defined' do
311
+ original_tc = TestClass
312
+ expect(defined?(TestClass::V)).to be_falsey
313
+ stub = Module.new
314
+
315
+ expect {
316
+ stub_const("TestClass", stub, :transfer_nested_constants => [:V])
317
+ }.to raise_error(/cannot transfer nested constant.*V/i)
318
+
319
+ expect(TestClass).to be(original_tc)
320
+ end
321
+
322
+ describe 'with global transfer_nested_constant option set' do
323
+ include_context "with isolated configuration"
324
+
325
+ before do
326
+ RSpec::Mocks.configuration.transfer_nested_constants = true
327
+ end
328
+
329
+ it 'allows nested constants to be transferred to a stub module' do
330
+ tc_nested = TestClass::Nested
331
+ stub = Module.new
332
+ stub_const("TestClass", stub)
333
+ expect(stub::M).to eq(:m)
334
+ expect(stub::N).to eq(:n)
335
+ expect(stub::Nested).to be(tc_nested)
336
+ end
337
+
338
+ context "when stubbing a constant that is not a module or a class" do
339
+ it 'does not attempt to transfer constants' do
340
+ stub_const("TOP_LEVEL_VALUE_CONST", 4)
341
+ expect(TOP_LEVEL_VALUE_CONST).to eq(4)
342
+ end
343
+
344
+ it 'still raises an error when the `:transfer_nested_constants` option is provided' do
345
+ expect {
346
+ stub_const("TOP_LEVEL_VALUE_CONST", 4, :transfer_nested_constants => true)
347
+ }.to raise_error(/cannot transfer nested constant/i)
348
+ end
349
+ end
350
+ end
351
+ end
352
+
353
+ context 'for a loaded nested constant' do
354
+ it_behaves_like "loaded constant stubbing", "TestClass::Nested"
355
+ end
356
+
357
+ context 'for a loaded constant prefixed with ::' do
358
+ it_behaves_like 'loaded constant stubbing', "::TestClass"
359
+ end
360
+
361
+ context 'for an unloaded constant prefixed with ::' do
362
+ it_behaves_like 'unloaded constant stubbing', "::SomeUndefinedConst"
363
+ end
364
+
365
+ context "for an unloaded constant nested in a module that redefines `send`" do
366
+ it_behaves_like 'unloaded constant stubbing', "TestClassThatDefinesSend::SomeUndefinedConst"
367
+ end
368
+
369
+ context 'for an unloaded constant with nested name that matches a top-level constant' do
370
+ it_behaves_like "unloaded constant stubbing", "TestClass::Hash"
371
+ end
372
+
373
+ context 'for a loaded deeply nested constant' do
374
+ it_behaves_like "loaded constant stubbing", "TestClass::Nested::NestedEvenMore"
375
+ end
376
+
377
+ context 'for an unloaded unnested constant' do
378
+ it_behaves_like "unloaded constant stubbing", "X"
379
+ end
380
+
381
+ context 'for an unloaded nested constant' do
382
+ it_behaves_like "unloaded constant stubbing", "X::Y"
383
+
384
+ it 'removes the root constant when rspec clears its mocks' do
385
+ expect(defined?(X)).to be_falsey
386
+ stub_const("X::Y", 7)
387
+ reset_rspec_mocks
388
+ expect(defined?(X)).to be_falsey
389
+ end
390
+ end
391
+
392
+ context 'for an unloaded deeply nested constant' do
393
+ it_behaves_like "unloaded constant stubbing", "X::Y::Z"
394
+
395
+ it 'removes the root constant when rspec clears its mocks' do
396
+ expect(defined?(X)).to be_falsey
397
+ stub_const("X::Y::Z", 7)
398
+ reset_rspec_mocks
399
+ expect(defined?(X)).to be_falsey
400
+ end
401
+ end
402
+
403
+ context 'for an unloaded constant nested within a loaded constant' do
404
+ it_behaves_like "unloaded constant stubbing", "TestClass::X"
405
+
406
+ it 'removes the unloaded constant but leaves the loaded constant when rspec resets its mocks' do
407
+ expect(defined?(TestClass)).to be_truthy
408
+ expect(defined?(TestClass::X)).to be_falsey
409
+ stub_const("TestClass::X", 7)
410
+ reset_rspec_mocks
411
+ expect(defined?(TestClass)).to be_truthy
412
+ expect(defined?(TestClass::X)).to be_falsey
413
+ end
414
+
415
+ it 'raises a helpful error if it cannot be stubbed due to an intermediary constant that is not a module' do
416
+ expect(TestClass::M).to be_a(Symbol)
417
+ expect { stub_const("TestClass::M::X", 5) }.to raise_error(/cannot stub/i)
418
+ end
419
+ end
420
+
421
+ context 'for an unloaded constant nested deeply within a deeply nested loaded constant' do
422
+ it_behaves_like "unloaded constant stubbing", "TestClass::Nested::NestedEvenMore::X::Y::Z"
423
+
424
+ it 'removes the first unloaded constant but leaves the loaded nested constant when rspec resets its mocks' do
425
+ expect(defined?(TestClass::Nested::NestedEvenMore)).to be_truthy
426
+ expect(defined?(TestClass::Nested::NestedEvenMore::X)).to be_falsey
427
+ stub_const("TestClass::Nested::NestedEvenMore::X::Y::Z", 7)
428
+ reset_rspec_mocks
429
+ expect(defined?(TestClass::Nested::NestedEvenMore)).to be_truthy
430
+ expect(defined?(TestClass::Nested::NestedEvenMore::X)).to be_falsey
431
+ end
432
+ end
433
+ end
434
+ end
435
+
436
+ RSpec.describe Constant do
437
+ describe ".original" do
438
+ context 'for a previously defined unstubbed constant' do
439
+ let(:const) { Constant.original("TestClass::M") }
440
+
441
+ it("exposes its name") { expect(const.name).to eq("TestClass::M") }
442
+ it("indicates it was previously defined") { expect(const).to be_previously_defined }
443
+ it("indicates it has not been mutated") { expect(const).not_to be_mutated }
444
+ it("indicates it has not been stubbed") { expect(const).not_to be_stubbed }
445
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
446
+ it("exposes its original value") { expect(const.original_value).to eq(:m) }
447
+ end
448
+
449
+ context 'for a previously defined stubbed constant' do
450
+ before { stub_const("TestClass::M", :other) }
451
+ let(:const) { Constant.original("TestClass::M") }
452
+
453
+ it("exposes its name") { expect(const.name).to eq("TestClass::M") }
454
+ it("indicates it was previously defined") { expect(const).to be_previously_defined }
455
+ it("indicates it has been mutated") { expect(const).to be_mutated }
456
+ it("indicates it has been stubbed") { expect(const).to be_stubbed }
457
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
458
+ it("exposes its original value") { expect(const.original_value).to eq(:m) }
459
+ end
460
+
461
+ context 'for a previously undefined stubbed constant' do
462
+ before { stub_const("TestClass::Undefined", :other) }
463
+ let(:const) { Constant.original("TestClass::Undefined") }
464
+
465
+ it("exposes its name") { expect(const.name).to eq("TestClass::Undefined") }
466
+ it("indicates it was not previously defined") { expect(const).not_to be_previously_defined }
467
+ it("indicates it has been mutated") { expect(const).to be_mutated }
468
+ it("indicates it has been stubbed") { expect(const).to be_stubbed }
469
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
470
+ it("returns nil for the original value") { expect(const.original_value).to be_nil }
471
+ end
472
+
473
+ context 'for a previously undefined parent of a stubbed constant' do
474
+ before { stub_const("TestClass::UndefinedModule::Undefined", :other) }
475
+ let(:const) { Constant.original("TestClass::UndefinedModule") }
476
+
477
+ it("exposes its name") { expect(const.name).to eq("TestClass::UndefinedModule") }
478
+ it("indicates it was not previously defined") { expect(const).not_to be_previously_defined }
479
+ it("indicates it has been mutated") { expect(const).to be_mutated }
480
+ it("indicates it has been stubbed") { expect(const).to be_stubbed }
481
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
482
+ it("returns nil for the original value") { expect(const.original_value).to be_nil }
483
+ end
484
+
485
+ context 'for a previously undefined unstubbed constant' do
486
+ let(:const) { Constant.original("TestClass::Undefined") }
487
+
488
+ it("exposes its name") { expect(const.name).to eq("TestClass::Undefined") }
489
+ it("indicates it was not previously defined") { expect(const).not_to be_previously_defined }
490
+ it("indicates it has not been mutated") { expect(const).not_to be_mutated }
491
+ it("indicates it has not been stubbed") { expect(const).not_to be_stubbed }
492
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
493
+ it("returns nil for the original value") { expect(const.original_value).to be_nil }
494
+ end
495
+
496
+ context 'for a previously defined constant that has been stubbed twice' do
497
+ before { stub_const("TestClass::M", 1) }
498
+ before { stub_const("TestClass::M", 2) }
499
+ let(:const) { Constant.original("TestClass::M") }
500
+
501
+ it("exposes its name") { expect(const.name).to eq("TestClass::M") }
502
+ it("indicates it was previously defined") { expect(const).to be_previously_defined }
503
+ it("indicates it has been mutated") { expect(const).to be_mutated }
504
+ it("indicates it has been stubbed") { expect(const).to be_stubbed }
505
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
506
+ it("exposes its original value") { expect(const.original_value).to eq(:m) }
507
+ end
508
+
509
+ context 'for a previously undefined constant that has been stubbed twice' do
510
+ before { stub_const("TestClass::Undefined", 1) }
511
+ before { stub_const("TestClass::Undefined", 2) }
512
+ let(:const) { Constant.original("TestClass::Undefined") }
513
+
514
+ it("exposes its name") { expect(const.name).to eq("TestClass::Undefined") }
515
+ it("indicates it was not previously defined") { expect(const).not_to be_previously_defined }
516
+ it("indicates it has been mutated") { expect(const).to be_mutated }
517
+ it("indicates it has been stubbed") { expect(const).to be_stubbed }
518
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
519
+ it("returns nil for the original value") { expect(const.original_value).to be_nil }
520
+ end
521
+
522
+ context 'for a previously undefined hidden constant' do
523
+ before { hide_const("SomeUndefinedConst") }
524
+ let(:const) { Constant.original("SomeUndefinedConst") }
525
+
526
+ it("exposes its name") { expect(const.name).to eq("SomeUndefinedConst") }
527
+ it("indicates it was previously undefined") { expect(const).not_to be_previously_defined }
528
+ it("indicates it has not been mutated") { expect(const).not_to be_mutated }
529
+ it("indicates it has not not been stubbed") { expect(const).not_to be_stubbed }
530
+ it("indicates it has not been hidden") { expect(const).not_to be_hidden }
531
+ it("returns nil for the original value") { expect(const.original_value).to be_nil }
532
+ end
533
+
534
+ context 'for a previously defined hidden constant' do
535
+ before { hide_const("TestClass::M") }
536
+ let(:const) { Constant.original("TestClass::M") }
537
+
538
+ it("exposes its name") { expect(const.name).to eq("TestClass::M") }
539
+ it("indicates it was previously defined") { expect(const).to be_previously_defined }
540
+ it("indicates it has been mutated") { expect(const).to be_mutated }
541
+ it("indicates it has not been stubbed") { expect(const).not_to be_stubbed }
542
+ it("indicates it has been hidden") { expect(const).to be_hidden }
543
+ it("exposes its original value") { expect(const.original_value).to eq(:m) }
544
+ end
545
+
546
+ context 'for a previously defined constant that has been hidden twice' do
547
+ before { hide_const("TestClass::M") }
548
+ before { hide_const("TestClass::M") }
549
+ let(:const) { Constant.original("TestClass::M") }
550
+
551
+ it("exposes its name") { expect(const.name).to eq("TestClass::M") }
552
+ it("indicates it was previously defined") { expect(const).to be_previously_defined }
553
+ it("indicates it has been mutated") { expect(const).to be_mutated }
554
+ it("indicates it has not been stubbed") { expect(const).not_to be_stubbed }
555
+ it("indicates it has been hidden") { expect(const).to be_hidden }
556
+ it("exposes its original value") { expect(const.original_value).to eq(:m) }
557
+ end
558
+ end
559
+ end
560
+ end
561
+ end