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,1036 @@
1
+ # encoding: utf-8
2
+
3
+ RSpec.describe "a matcher defined using the matcher DSL" do
4
+ def question?
5
+ :answer
6
+ end
7
+
8
+ def ok
9
+ "ok"
10
+ end
11
+
12
+ it "supports calling custom matchers from within other custom matchers" do
13
+ RSpec::Matchers.define :be_ok do
14
+ match { |actual| actual == ok }
15
+ end
16
+
17
+ RSpec::Matchers.define :be_well do
18
+ match { |actual| expect(actual).to be_ok }
19
+ end
20
+
21
+ expect(ok).to be_well
22
+ end
23
+
24
+ it "has access to methods available in the scope of the example" do
25
+ RSpec::Matchers::define(:matcher_a) {}
26
+ expect(matcher_a.question?).to eq(:answer)
27
+ end
28
+
29
+ it "raises when method is missing from local scope as well as matcher" do
30
+ RSpec::Matchers::define(:matcher_b) {}
31
+ expect { matcher_b.i_dont_exist }.to raise_error(NameError)
32
+ end
33
+
34
+ it "clears user instance variables between invocations" do
35
+ RSpec::Matchers::define(:be_just_like) do |expected|
36
+ match do |actual|
37
+ @foo ||= expected
38
+ @foo == actual
39
+ end
40
+ end
41
+
42
+ expect(3).to be_just_like(3)
43
+ expect(4).to be_just_like(4)
44
+ end
45
+
46
+ describe "#respond_to?" do
47
+ it "returns true for methods in example scope" do
48
+ RSpec::Matchers::define(:matcher_c) {}
49
+ expect(matcher_c).to respond_to(:question?)
50
+ end
51
+
52
+ it "returns false for methods not defined in matcher or example scope" do
53
+ RSpec::Matchers::define(:matcher_d) {}
54
+ expect(matcher_d).not_to respond_to(:i_dont_exist)
55
+ end
56
+ end
57
+ end
58
+
59
+ class UnexpectedError < StandardError; end
60
+ module MatcherHelperModule
61
+ def self.included(base)
62
+ base.module_exec do
63
+ def included_method; end
64
+ end
65
+ end
66
+
67
+ def self.extended(base)
68
+ base.instance_exec do
69
+ def extended_method; end
70
+ end
71
+ end
72
+
73
+ def greeting
74
+ "Hello, World"
75
+ end
76
+ end
77
+
78
+ module RSpec::Matchers::DSL
79
+ RSpec.describe Matcher do
80
+ def new_matcher(name, *expected, &block)
81
+ RSpec::Matchers::DSL::Matcher.new(name, block, self, *expected)
82
+ end
83
+
84
+ it_behaves_like "an RSpec matcher", :valid_value => 1, :invalid_value => 2 do
85
+ let(:matcher) do
86
+ new_matcher(:equal_to_1) do
87
+ match { |v| v == 1 }
88
+ end
89
+ end
90
+ end
91
+
92
+ it "can be stored aside and used later" do
93
+ # Supports using rspec-expectation matchers as argument matchers in
94
+ # rspec-mocks.
95
+ RSpec::Matchers.define :example_matcher do |expected|
96
+ match do |actual|
97
+ actual == expected
98
+ end
99
+ end
100
+
101
+ m1 = example_matcher(1)
102
+ m2 = example_matcher(2)
103
+
104
+ expect(m1.matches?(1)).to be_truthy
105
+ expect(m2.matches?(2)).to be_truthy
106
+ end
107
+
108
+ context 'using deprecated APIs' do
109
+ before { allow_deprecation }
110
+
111
+ describe "failure_message_for_should" do
112
+ let(:matcher) do
113
+ new_matcher(:foo) do
114
+ match { false }
115
+ failure_message_for_should { "failed" }
116
+ end
117
+ end
118
+ line = __LINE__ - 3
119
+
120
+ it 'defines the failure message for a positive expectation' do
121
+ expect {
122
+ expect(nil).to matcher
123
+ }.to fail_with("failed")
124
+ end
125
+
126
+ it 'prints a deprecation warning' do
127
+ expect_deprecation_with_call_site(__FILE__, line, /failure_message_for_should/)
128
+ matcher
129
+ end
130
+ end
131
+
132
+ describe "failure_message_for_should_not" do
133
+ let(:matcher) do
134
+ new_matcher(:foo) do
135
+ match { true }
136
+ failure_message_for_should_not { "failed" }
137
+ end
138
+ end
139
+ line = __LINE__ - 3
140
+
141
+ it 'defines the failure message for a negative expectation' do
142
+ expect {
143
+ expect(nil).not_to matcher
144
+ }.to fail_with("failed")
145
+ end
146
+
147
+ it 'prints a deprecation warning' do
148
+ expect_deprecation_with_call_site(__FILE__, line, /failure_message_for_should_not/)
149
+ matcher
150
+ end
151
+ end
152
+
153
+ describe "match_for_should" do
154
+ let(:matcher) do
155
+ new_matcher(:foo) do
156
+ match_for_should { |arg| arg }
157
+ end
158
+ end
159
+ line = __LINE__ - 3
160
+
161
+ it 'defines the positive expectation match logic' do
162
+ expect(true).to matcher
163
+ expect { expect(false).to matcher }.to fail_with(/foo/)
164
+ end
165
+
166
+ it 'prints a deprecation warning' do
167
+ expect_deprecation_with_call_site(__FILE__, line, /match_for_should/)
168
+ matcher
169
+ end
170
+ end
171
+
172
+ describe "match_for_should_not" do
173
+ let(:matcher) do
174
+ new_matcher(:foo) do
175
+ match_for_should_not { |arg| !arg }
176
+ end
177
+ end
178
+ line = __LINE__ - 3
179
+
180
+ it 'defines the positive expectation match logic' do
181
+ expect(false).not_to matcher
182
+ expect { expect(true).not_to matcher }.to fail_with(/foo/)
183
+ end
184
+
185
+ it 'prints a deprecation warning' do
186
+ expect_deprecation_with_call_site(__FILE__, line, /match_for_should_not/)
187
+ matcher
188
+ end
189
+ end
190
+ end
191
+
192
+ context "with an included module" do
193
+ let(:matcher) do
194
+ new_matcher(:be_a_greeting) do
195
+ include MatcherHelperModule
196
+ match { |actual| actual == greeting }
197
+ end
198
+ end
199
+
200
+ it "has access to the module's methods" do
201
+ matcher.matches?("Hello, World")
202
+ end
203
+
204
+ it "runs the module's included hook" do
205
+ expect(matcher).to respond_to(:included_method)
206
+ end
207
+
208
+ it "does not run the module's extended hook" do
209
+ expect(matcher).not_to respond_to(:extended_method)
210
+ end
211
+
212
+ it 'allows multiple modules to be included at once' do
213
+ m = new_matcher(:multiple_modules) do
214
+ include Enumerable, Comparable
215
+ end
216
+ expect(m).to be_a(Enumerable)
217
+ expect(m).to be_a(Comparable)
218
+ end
219
+ end
220
+
221
+ context "without overrides" do
222
+ let(:matcher) do
223
+ new_matcher(:be_a_multiple_of, 3) do |multiple|
224
+ match do |actual|
225
+ actual % multiple == 0
226
+ end
227
+ end
228
+ end
229
+
230
+ it "provides a default description" do
231
+ expect(matcher.description).to eq "be a multiple of 3"
232
+ end
233
+
234
+ it "provides a default positive expectation failure message" do
235
+ expect { expect(8).to matcher }.to fail_with 'expected 8 to be a multiple of 3'
236
+ end
237
+
238
+ it "provides a default negative expectation failure message" do
239
+ expect { expect(9).to_not matcher }.to fail_with 'expected 9 not to be a multiple of 3'
240
+ end
241
+ end
242
+
243
+ context "without overrides with chained matchers" do
244
+ let(:matcher) do
245
+ new_matcher(:be_bigger_than, 5) do |five|
246
+ match do |to_match|
247
+ (to_match > five) && smaller_than_ceiling?(to_match) && divisible_by_divisor?(to_match)
248
+ end
249
+
250
+ match_when_negated do |to_match|
251
+ (to_match <= five) || greater_than_ceiling(to_match) && not_divisible_by_divisor?(to_match)
252
+ end
253
+
254
+ chain :and_smaller_than do |ceiling|
255
+ @ceiling = ceiling
256
+ end
257
+
258
+ chain :and_divisible_by do |divisor|
259
+ @divisor = divisor
260
+ end
261
+
262
+ private
263
+
264
+ def smaller_than_ceiling?(to_match)
265
+ to_match < @ceiling
266
+ end
267
+
268
+ def greater_than_ceiling(to_match)
269
+ to_match >= @ceiling
270
+ end
271
+
272
+ def divisible_by_divisor?(to_match)
273
+ @divisor % to_match == 0
274
+ end
275
+
276
+ def not_divisible_by_divisor?(to_match)
277
+ @divisor % to_match != 0
278
+ end
279
+ end
280
+ end
281
+
282
+ context "when the matchers are chained" do
283
+ include_context "isolate include_chain_clauses_in_custom_matcher_descriptions"
284
+
285
+ context "without include_chain_clauses_in_custom_matcher_descriptions configured" do
286
+ before { RSpec::Expectations.configuration.include_chain_clauses_in_custom_matcher_descriptions = false }
287
+ let(:match) { matcher.and_smaller_than(10).and_divisible_by(3) }
288
+
289
+ it "provides a default description that does not include any of the chained matchers' descriptions" do
290
+ expect(match.description).to eq 'be bigger than 5'
291
+ end
292
+
293
+ it "provides a default positive expectation failure message that does not include any of the chained matchers' descriptions" do
294
+ expect { expect(8).to match }.to fail_with 'expected 8 to be bigger than 5'
295
+ end
296
+
297
+ it "provides a default negative expectation failure message that does not include the any of the chained matchers's descriptions" do
298
+ expect { expect(9).to_not match }.to fail_with 'expected 9 not to be bigger than 5'
299
+ end
300
+ end
301
+
302
+ context "with include_chain_clauses_in_custom_matcher_descriptions configured to be true" do
303
+ before do
304
+ expect(RSpec::Expectations.configuration.include_chain_clauses_in_custom_matcher_descriptions?).to be true
305
+ end
306
+
307
+ it "provides a default description that includes the chained matchers' descriptions in they were used" do
308
+ expect(matcher.and_divisible_by(3).and_smaller_than(29).and_smaller_than(20).and_divisible_by(5).description).to \
309
+ eq 'be bigger than 5 and divisible by 3 and smaller than 29 and smaller than 20 and divisible by 5'
310
+ end
311
+
312
+ it "provides a default positive expectation failure message that includes the chained matchers' failures" do
313
+ expect { expect(30).to matcher.and_smaller_than(29).and_divisible_by(3) }.to \
314
+ fail_with 'expected 30 to be bigger than 5 and smaller than 29 and divisible by 3'
315
+ end
316
+
317
+ it "provides a default negative expectation failure message that includes the chained matchers' failures" do
318
+ expect { expect(21).to_not matcher.and_smaller_than(29).and_divisible_by(3) }.to \
319
+ fail_with 'expected 21 not to be bigger than 5 and smaller than 29 and divisible by 3'
320
+ end
321
+ end
322
+
323
+ it 'only decides if to include the chained clauses at the time description is invoked' do
324
+ matcher.and_divisible_by(3)
325
+
326
+ expect {
327
+ RSpec::Expectations.configuration.include_chain_clauses_in_custom_matcher_descriptions = false
328
+ }.to change { matcher.description }.
329
+ from('be bigger than 5 and divisible by 3').
330
+ to('be bigger than 5')
331
+ end
332
+ end
333
+ end
334
+
335
+ context "with separate match logic for positive and negative expectations" do
336
+ let(:matcher) do
337
+ new_matcher(:to_be_composed_of, 7, 11) do |a, b|
338
+ match do |actual|
339
+ actual == a * b
340
+ end
341
+
342
+ match_when_negated do |actual|
343
+ actual == a + b
344
+ end
345
+ end
346
+ end
347
+
348
+ it "invokes the match block for #matches?" do
349
+ expect(matcher.matches?(77)).to be_truthy
350
+ expect(matcher.matches?(18)).to be_falsey
351
+ end
352
+
353
+ it "invokes the match_when_negated block for #does_not_match?" do
354
+ expect(matcher.does_not_match?(77)).to be_falsey
355
+ expect(matcher.does_not_match?(18)).to be_truthy
356
+ end
357
+
358
+ it "provides a default failure message for negative expectations" do
359
+ matcher.does_not_match?(77)
360
+ expect(matcher.failure_message_when_negated).to eq "expected 77 not to to be composed of 7 and 11"
361
+ end
362
+
363
+ it 'can access helper methods from `match_when_negated`' do
364
+ matcher = new_matcher(:be_foo) do
365
+ def foo
366
+ :foo
367
+ end
368
+
369
+ match_when_negated do |actual|
370
+ actual != foo
371
+ end
372
+ end
373
+
374
+ expect(matcher.does_not_match?(:bar)).to be true
375
+ end
376
+ end
377
+
378
+ it "allows helper methods to be defined with #define_method to have access to matcher parameters" do
379
+ matcher = new_matcher(:name, 3, 4) do |a, b|
380
+ define_method(:sum) { a + b }
381
+ end
382
+
383
+ expect(matcher.sum).to eq 7
384
+ end
385
+
386
+ it "is not diffable by default" do
387
+ matcher = new_matcher(:name) { }
388
+ expect(matcher).not_to be_diffable
389
+ end
390
+
391
+ it "is diffable when told to be" do
392
+ matcher = new_matcher(:name) { diffable }
393
+ expect(matcher).to be_diffable
394
+ end
395
+
396
+ it 'handles multiline string diffs' do
397
+ actual = "LINE1\nline2\n"
398
+ expected = "line1\nline2\n"
399
+
400
+ matcher = new_matcher(:custom_match, expected) do
401
+ match { |act| act == expected }
402
+ diffable
403
+ end
404
+
405
+ diff = nil
406
+ begin
407
+ allow(RSpec::Matchers.configuration).to receive(:color?).and_return(false)
408
+ expect(actual).to matcher
409
+ rescue RSpec::Expectations::ExpectationNotMetError => e
410
+ diff = e.message.sub(/\A.*Diff:/m, "Diff:").gsub(/^\s*/,'')
411
+ end
412
+
413
+ expect(diff).to eq "Diff:\n@@ -1,3 +1,3 @@\n-line1\n+LINE1\nline2\n"
414
+ end
415
+
416
+ it 'does not confuse the diffability of different matchers' do
417
+ # Necessary to guard against a regression that involved
418
+ # using a class variable to store the diffable state,
419
+ # which had the side effect of causing all custom matchers
420
+ # to share that state
421
+ m1 = new_matcher(:m1) { diffable }
422
+ m2 = new_matcher(:m2) { }
423
+ m3 = new_matcher(:m3) { diffable }
424
+
425
+ expect(m1).to be_diffable
426
+ expect(m2).not_to be_diffable
427
+ expect(m3).to be_diffable
428
+ end
429
+
430
+ it "provides expected" do
431
+ matcher = new_matcher(:name, "expected string") { }
432
+ expect(matcher.expected).to eq 'expected string'
433
+ end
434
+
435
+ it "provides expected when there is more than one argument" do
436
+ matcher = new_matcher(:name, "expected string", "another arg") { }
437
+ expect(matcher.expected).to eq ['expected string', "another arg"]
438
+ end
439
+
440
+ it "provides expected_as_array which returns an array regardless of expected" do
441
+ matcher = new_matcher(:name, "expected string") { }
442
+ expect(matcher.expected_as_array).to eq ['expected string']
443
+ matcher = new_matcher(:name, "expected\nstring") { }
444
+ expect(matcher.expected_as_array).to eq ["expected\nstring"]
445
+ matcher = new_matcher(:name, "expected string", "another arg") { }
446
+ expect(matcher.expected_as_array).to eq ['expected string', "another arg"]
447
+ end
448
+
449
+ it "provides actual when `match` is used" do
450
+ matcher = new_matcher(:name, 'expected string') do
451
+ match {|actual|}
452
+ end
453
+
454
+ matcher.matches?('actual string')
455
+
456
+ expect(matcher.actual).to eq 'actual string'
457
+ end
458
+
459
+ it "provides actual when the `match` block accepts splat args" do
460
+ matcher = new_matcher(:actual) do
461
+ match { |*actual| actual == [5] }
462
+ end
463
+
464
+ expect(matcher.matches?(5)).to be true
465
+ expect(matcher.matches?(4)).to be false
466
+ end
467
+
468
+ it 'allows an early `return` to be used from a `match` block' do
469
+ matcher = new_matcher(:with_return, 5) do |expected|
470
+ match { |actual| return true if expected == actual }
471
+ end
472
+
473
+ expect(matcher.matches?(5)).to be true
474
+ expect(matcher.matches?(4)).to be_falsey
475
+ end
476
+
477
+ it 'provides actual when `match_unless_raises` is used' do
478
+ matcher = new_matcher(:name, 'expected string') do
479
+ match_unless_raises(SyntaxError) {|actual|}
480
+ end
481
+
482
+ matcher.matches?('actual string')
483
+
484
+ expect(matcher.actual).to eq 'actual string'
485
+ end
486
+
487
+ it 'allows an early `return` to be used from a `match_unless_raises` block' do
488
+ matcher = new_matcher(:with_return) do
489
+ match_unless_raises(ArgumentError) do |actual|
490
+ return actual if [true, false].include?(actual)
491
+ raise ArgumentError
492
+ end
493
+ end
494
+
495
+ expect(matcher.matches?(true)).to be true
496
+ # It should match even if it returns false, because no error was raised.
497
+ expect(matcher.matches?(false)).to be true
498
+ expect(matcher.matches?(4)).to be_falsey
499
+ end
500
+
501
+ it 'provides actual when `match_when_negated` is used' do
502
+ matcher = new_matcher(:name, 'expected string') do
503
+ match_when_negated {|actual|}
504
+ end
505
+
506
+ matcher.does_not_match?('actual string')
507
+
508
+ expect(matcher.actual).to eq 'actual string'
509
+ end
510
+
511
+ it 'allows an early `return` to be used from a `match_when_negated` block' do
512
+ matcher = new_matcher(:with_return, 5) do |expected|
513
+ match_when_negated { |actual| return true if expected != actual }
514
+ end
515
+
516
+ expect(matcher.does_not_match?(5)).to be_falsey
517
+ expect(matcher.does_not_match?(4)).to be true
518
+ end
519
+
520
+ context "wrapping another expectation (expect(...).to eq ...)" do
521
+ let(:matcher) do
522
+ new_matcher(:name, "value") do |expected|
523
+ match do |actual|
524
+ expect(actual).to eq expected
525
+ end
526
+ end
527
+ end
528
+
529
+ it "returns true if the wrapped expectation passes" do
530
+ expect(matcher.matches?('value')).to be_truthy
531
+ end
532
+
533
+ it "returns false if the wrapped expectation fails" do
534
+ expect(matcher.matches?('other value')).to be_falsey
535
+ end
536
+
537
+ it "can use the `include` matcher from a `match` block" do
538
+ RSpec::Matchers.define(:descend_from) do |mod|
539
+ match do |klass|
540
+ expect(klass.ancestors).to include(mod)
541
+ end
542
+ end
543
+
544
+ expect(Fixnum).to descend_from(Object)
545
+ expect(Fixnum).not_to descend_from(Array)
546
+
547
+ expect {
548
+ expect(Fixnum).to descend_from(Array)
549
+ }.to fail_with(/expected Fixnum to descend from Array/)
550
+
551
+ expect {
552
+ expect(Fixnum).not_to descend_from(Object)
553
+ }.to fail_with(/expected Fixnum not to descend from Object/)
554
+ end
555
+
556
+ it "can use the `match` matcher from a `match` block" do
557
+ RSpec::Matchers.define(:be_a_phone_number_string) do
558
+ match do |string|
559
+ expect(string).to match(/\A\d{3}\-\d{3}\-\d{4}\z/)
560
+ end
561
+ end
562
+
563
+ expect("206-123-1234").to be_a_phone_number_string
564
+ expect("foo").not_to be_a_phone_number_string
565
+
566
+ expect {
567
+ expect("foo").to be_a_phone_number_string
568
+ }.to fail_with(/expected "foo" to be a phone number string/)
569
+
570
+ expect {
571
+ expect("206-123-1234").not_to be_a_phone_number_string
572
+ }.to fail_with(/expected "206-123-1234" not to be a phone number string/)
573
+ end
574
+ end
575
+
576
+ context "with overrides" do
577
+ let(:matcher) do
578
+ new_matcher(:be_boolean, true) do |boolean|
579
+ match do |actual|
580
+ actual
581
+ end
582
+ description do |actual|
583
+ "be the boolean #{boolean} (actual was #{actual})"
584
+ end
585
+ failure_message do |actual|
586
+ "expected #{actual} to be the boolean #{boolean}"
587
+ end
588
+ failure_message_when_negated do |actual|
589
+ "expected #{actual} not to be the boolean #{boolean}"
590
+ end
591
+ end
592
+ end
593
+
594
+ it "does not hide result of match block when true" do
595
+ expect(matcher.matches?(true)).to be_truthy
596
+ end
597
+
598
+ it "does not hide result of match block when false" do
599
+ expect(matcher.matches?(false)).to be_falsey
600
+ end
601
+
602
+ it "overrides the description (which yields `actual`)" do
603
+ matcher.matches?(true)
604
+ expect(matcher.description).to eq "be the boolean true (actual was true)"
605
+ end
606
+
607
+ it "overrides the failure message for positive expectations" do
608
+ matcher.matches?(false)
609
+ expect(matcher.failure_message).to eq "expected false to be the boolean true"
610
+ end
611
+
612
+ it "overrides the failure message for negative expectations" do
613
+ matcher.matches?(true)
614
+ expect(matcher.failure_message_when_negated).to eq "expected true not to be the boolean true"
615
+ end
616
+
617
+ it 'can access helper methods from `description`' do
618
+ matcher = new_matcher(:desc) do
619
+ def subdesc() "sub description" end
620
+ description { "Desc (#{subdesc})" }
621
+ end
622
+
623
+ expect(matcher.description).to eq("Desc (sub description)")
624
+ end
625
+
626
+ it 'can access helper methods from `failure_message`' do
627
+ matcher = new_matcher(:positive_failure_message) do
628
+ def helper() "helper" end
629
+ failure_message { helper }
630
+ end
631
+
632
+ expect(matcher.failure_message).to eq("helper")
633
+ end
634
+
635
+ it 'can access helper methods from `failure_message_when_negated`' do
636
+ matcher = new_matcher(:negative_failure_message) do
637
+ def helper() "helper" end
638
+ failure_message_when_negated { helper }
639
+ end
640
+
641
+ expect(matcher.failure_message_when_negated).to eq("helper")
642
+ end
643
+
644
+ it 'can exit early with a `return` from `description` just like in a method' do
645
+ matcher = new_matcher(:desc) do
646
+ description { return "Desc" }
647
+ end
648
+
649
+ expect(matcher.description).to eq("Desc")
650
+ end
651
+
652
+ it 'can exit early with a `return` from `failure_message` just like in a method' do
653
+ matcher = new_matcher(:positive_failure_message) do
654
+ failure_message { return "msg" }
655
+ end
656
+
657
+ expect(matcher.failure_message).to eq("msg")
658
+ end
659
+
660
+ it 'can exit early with a `return` from `failure_message_when_negated` just like in a method' do
661
+ matcher = new_matcher(:negative_failure_message) do
662
+ failure_message_when_negated { return "msg" }
663
+ end
664
+
665
+ expect(matcher.failure_message_when_negated).to eq("msg")
666
+ end
667
+ end
668
+
669
+ context "with description override and chained matcher" do
670
+ context "by default" do
671
+ let(:matcher) do
672
+ new_matcher(:be_even) do
673
+ match do |to_match|
674
+ (to_match % 2 == 0) && (to_match % @divisible_by == 0)
675
+ end
676
+
677
+ chain :and_divisible_by do |divisible_by|
678
+ @divisible_by = divisible_by
679
+ end
680
+
681
+ description { super() + " and divisible by #{@divisible_by}" }
682
+ end
683
+ end
684
+
685
+ context "with include_chain_clauses_in_custom_matcher_descriptions configured to false" do
686
+ include_context "isolate include_chain_clauses_in_custom_matcher_descriptions"
687
+ before { RSpec::Expectations.configuration.include_chain_clauses_in_custom_matcher_descriptions = false }
688
+
689
+ it "provides a default description that does not include any of the chained matchers' descriptions" do
690
+ expect(matcher.and_divisible_by(10).description).to eq 'be even and divisible by 10'
691
+ end
692
+ end
693
+
694
+ context "with include_chain_clauses_in_custom_matcher_descriptions configured to true" do
695
+ it "provides a default description that does includes the chained matchers' descriptions" do
696
+ expect(matcher.and_divisible_by(10).description).to eq 'be even and divisible by 10 and divisible by 10'
697
+ end
698
+ end
699
+ end
700
+ end
701
+
702
+ context "matching blocks" do
703
+ it 'cannot match blocks by default' do
704
+ matcher = new_matcher(:foo) { match { true } }
705
+ expect(3).to matcher
706
+
707
+ expect {
708
+ expect { 3 }.to matcher
709
+ }.to fail_with(/must pass an argument/)
710
+ end
711
+
712
+ it 'can match blocks if it declares `supports_block_expectations`' do
713
+ matcher = new_matcher(:foo) do
714
+ match { true }
715
+ supports_block_expectations
716
+ end
717
+
718
+ expect(3).to matcher
719
+ expect { 3 }.to matcher
720
+ end
721
+ end
722
+
723
+ context "#new" do
724
+ it "passes matches? arg to match block" do
725
+ matcher = new_matcher(:ignore) do
726
+ match do |actual|
727
+ actual == 5
728
+ end
729
+ end
730
+ expect(matcher.matches?(5)).to be_truthy
731
+ end
732
+
733
+ it "exposes arg submitted through #new to matcher block" do
734
+ matcher = new_matcher(:ignore, 4) do |expected|
735
+ match do |actual|
736
+ actual > expected
737
+ end
738
+ end
739
+ expect(matcher.matches?(5)).to be_truthy
740
+ end
741
+ end
742
+
743
+ context "with no args" do
744
+ let(:matcher) do
745
+ new_matcher(:matcher_name) do
746
+ match do |actual|
747
+ actual == 5
748
+ end
749
+ end
750
+ end
751
+
752
+ it "matches" do
753
+ expect(matcher.matches?(5)).to be_truthy
754
+ end
755
+
756
+ it "describes" do
757
+ expect(matcher.description).to eq "matcher name"
758
+ end
759
+ end
760
+
761
+ context "with 1 arg" do
762
+ let(:matcher) do
763
+ new_matcher(:matcher_name, 1) do |expected|
764
+ match do |actual|
765
+ actual == 5 && expected == 1
766
+ end
767
+ end
768
+ end
769
+
770
+ it "matches" do
771
+ expect(matcher.matches?(5)).to be_truthy
772
+ end
773
+
774
+ it "describes" do
775
+ expect(matcher.description).to eq "matcher name 1"
776
+ end
777
+ end
778
+
779
+ context "with multiple args" do
780
+ let(:matcher) do
781
+ new_matcher(:matcher_name, 1, 2, 3, 4) do |a, b, c, d|
782
+ match do |sum|
783
+ a + b + c + d == sum
784
+ end
785
+ end
786
+ end
787
+
788
+ it "matches" do
789
+ expect(matcher.matches?(10)).to be_truthy
790
+ end
791
+
792
+ it "describes" do
793
+ expect(matcher.description).to eq "matcher name 1, 2, 3, and 4"
794
+ end
795
+ end
796
+
797
+ it "supports helper methods" do
798
+ matcher = new_matcher(:be_similar_to, [1, 2, 3]) do |sample|
799
+ match do |actual|
800
+ similar?(sample, actual)
801
+ end
802
+
803
+ def similar?(a, b)
804
+ a.sort == b.sort
805
+ end
806
+ end
807
+
808
+ expect(matcher.matches?([2,3,1])).to be_truthy
809
+ end
810
+
811
+ it "supports fluent interface" do
812
+ matcher = new_matcher(:first_word) do
813
+ def second_word
814
+ self
815
+ end
816
+ end
817
+
818
+ expect(matcher.second_word).to eq matcher
819
+ end
820
+
821
+ it "treats method missing normally for undeclared methods" do
822
+ matcher = new_matcher(:ignore) { }
823
+ expect { matcher.non_existent_method }.to raise_error(NoMethodError)
824
+ end
825
+
826
+ it "has access to other matchers" do
827
+ matcher = new_matcher(:ignore, 3) do |expected|
828
+ match do |actual|
829
+ extend RSpec::Matchers
830
+ expect(actual).to eql(5 + expected)
831
+ end
832
+ end
833
+
834
+ expect(matcher.matches?(8)).to be_truthy
835
+ end
836
+
837
+ context 'when multiple instances of the same matcher are used in the same example' do
838
+ RSpec::Matchers.define(:be_like_a) do |expected|
839
+ match { |actual| actual == expected }
840
+ description { "be like a #{expected}" }
841
+ failure_message { "expected to be like a #{expected}" }
842
+ failure_message_when_negated { "expected not to be like a #{expected}" }
843
+ end
844
+
845
+ # Note: these bugs were only exposed when creating both instances
846
+ # first, then checking their descriptions/failure messages.
847
+ #
848
+ # That's why we eager-instantiate them here.
849
+ let!(:moose) { be_like_a("moose") }
850
+ let!(:horse) { be_like_a("horse") }
851
+
852
+ it 'allows them to use the expected value in the description' do
853
+ expect(horse.description).to eq("be like a horse")
854
+ expect(moose.description).to eq("be like a moose")
855
+ end
856
+
857
+ it 'allows them to use the expected value in the positive failure message' do
858
+ expect(moose.failure_message).to eq("expected to be like a moose")
859
+ expect(horse.failure_message).to eq("expected to be like a horse")
860
+ end
861
+
862
+ it 'allows them to use the expected value in the negative failure message' do
863
+ expect(moose.failure_message_when_negated).to eq("expected not to be like a moose")
864
+ expect(horse.failure_message_when_negated).to eq("expected not to be like a horse")
865
+ end
866
+
867
+ it 'allows them to match separately' do
868
+ expect("moose").to moose
869
+ expect("horse").to horse
870
+ expect("horse").not_to moose
871
+ expect("moose").not_to horse
872
+ end
873
+ end
874
+
875
+ describe "#match_unless_raises" do
876
+ context "with an assertion" do
877
+ mod = Module.new do
878
+ def assert_equal(a,b)
879
+ raise UnexpectedError.new("#{b} does not equal #{a}") unless a == b
880
+ end
881
+ end
882
+
883
+ let(:matcher) do
884
+ new_matcher(:equal, 4) do |expected|
885
+ include mod
886
+ match_unless_raises UnexpectedError do
887
+ assert_equal expected, actual
888
+ end
889
+ end
890
+ end
891
+
892
+ context "with passing assertion" do
893
+ it "passes" do
894
+ expect(matcher.matches?(4)).to be_truthy
895
+ end
896
+ end
897
+
898
+ context "with failing assertion" do
899
+ it "fails" do
900
+ expect(matcher.matches?(5)).to be_falsey
901
+ end
902
+
903
+ it "provides the raised exception" do
904
+ matcher.matches?(5)
905
+ expect(matcher.rescued_exception.message).to eq("5 does not equal 4")
906
+ end
907
+ end
908
+ end
909
+
910
+ context "with an unexpected error" do
911
+ let(:matcher) do
912
+ new_matcher(:foo, :bar) do |expected|
913
+ match_unless_raises SyntaxError do |actual|
914
+ raise "unexpected exception"
915
+ end
916
+ end
917
+ end
918
+
919
+ it "raises the error" do
920
+ expect {
921
+ matcher.matches?(:bar)
922
+ }.to raise_error("unexpected exception")
923
+ end
924
+ end
925
+
926
+ context "without a specified error class" do
927
+ let(:matcher) do
928
+ new_matcher(:foo) do
929
+ match_unless_raises do |actual|
930
+ raise Exception unless actual == 5
931
+ end
932
+ end
933
+ end
934
+
935
+ it 'passes if no error is raised' do
936
+ expect(matcher.matches?(5)).to be true
937
+ end
938
+
939
+ it 'fails if an exception is raised' do
940
+ expect(matcher.matches?(4)).to be false
941
+ end
942
+ end
943
+
944
+ end
945
+
946
+ it "can define chainable methods" do
947
+ matcher = new_matcher(:name) do
948
+ chain(:expecting) do |expected_value|
949
+ @expected_value = expected_value
950
+ end
951
+ match { |actual| actual == @expected_value }
952
+ end
953
+
954
+ expect(matcher.expecting('value').matches?('value')).to be_truthy
955
+ expect(matcher.expecting('value').matches?('other value')).to be_falsey
956
+ end
957
+
958
+ it 'can use an early return from a `chain` block' do
959
+ matcher = new_matcher(:name) do
960
+ chain(:expecting) do |expected_value|
961
+ @expected_value = expected_value
962
+ return
963
+ end
964
+ match { |actual| actual == @expected_value }
965
+ end
966
+
967
+ expect(matcher.expecting('value').matches?('value')).to be_truthy
968
+ expect(matcher.expecting('value').matches?('other value')).to be_falsey
969
+ end
970
+
971
+ it 'allows chainable methods to accept blocks' do
972
+ matcher = new_matcher(:name) do
973
+ chain(:for_block) { |&b| @block = b }
974
+ match { |value| @block.call == value }
975
+ end
976
+
977
+ expect(matcher.for_block { 5 }.matches?(5)).to be true
978
+ expect(matcher.for_block { 3 }.matches?(4)).to be false
979
+ end
980
+
981
+ it "prevents name collisions on chainable methods from different matchers" do
982
+ m1 = new_matcher(:m1) { chain(:foo) { raise "foo in m1" } }
983
+ m2 = new_matcher(:m2) { chain(:foo) { raise "foo in m2" } }
984
+
985
+ expect { m1.foo }.to raise_error("foo in m1")
986
+ expect { m2.foo }.to raise_error("foo in m2")
987
+ end
988
+
989
+ context "defined using the dsl" do
990
+ def a_method_in_the_example
991
+ "method defined in the example"
992
+ end
993
+
994
+ it "can access methods in the running example" do |example|
995
+ RSpec::Matchers.define(:__access_running_example) do
996
+ match do |actual|
997
+ a_method_in_the_example == "method defined in the example"
998
+ end
999
+ end
1000
+ expect(example).to __access_running_example
1001
+ end
1002
+
1003
+ it 'can get a method object for methods in the running example', :if => (RUBY_VERSION.to_f > 1.8) do
1004
+ matcher = new_matcher(:get_method_object) { }
1005
+ method = matcher.method(:a_method_in_the_example)
1006
+ expect(method.call).to eq("method defined in the example")
1007
+ end
1008
+
1009
+ it 'indicates that it responds to a method from the running example' do
1010
+ matcher = new_matcher(:respond_to) { }
1011
+ expect(matcher).to respond_to(:a_method_in_the_example)
1012
+ expect(matcher).not_to respond_to(:a_method_not_in_the_example)
1013
+ end
1014
+
1015
+ it "raises NoMethodError for methods not in the running_example" do |example|
1016
+ RSpec::Matchers.define(:__raise_no_method_error) do
1017
+ match do |actual|
1018
+ self.a_method_not_in_the_example == "method defined in the example"
1019
+ end
1020
+ end
1021
+
1022
+ expected_msg = "RSpec::Matchers::DSL::Matcher"
1023
+ expected_msg << " __raise_no_method_error" unless rbx?
1024
+
1025
+ expect {
1026
+ expect(example).to __raise_no_method_error
1027
+ }.to raise_error(NoMethodError, /#{expected_msg}/)
1028
+ end
1029
+
1030
+ def rbx?
1031
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
1032
+ end
1033
+ end
1034
+
1035
+ end
1036
+ end