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,179 @@
1
+ RSpec.describe "expect(...).to have_sym(*args)" do
2
+ it_behaves_like "an RSpec matcher", :valid_value => { :a => 1 },
3
+ :invalid_value => {} do
4
+ let(:matcher) { have_key(:a) }
5
+ end
6
+
7
+ it "passes if #has_sym?(*args) returns true" do
8
+ expect({:a => "A"}).to have_key(:a)
9
+ end
10
+
11
+ it "fails if #has_sym?(*args) returns false" do
12
+ expect {
13
+ expect({:b => "B"}).to have_key(:a)
14
+ }.to fail_with("expected #has_key?(:a) to return true, got false")
15
+ end
16
+
17
+ obj_with_block_method = Object.new
18
+ def obj_with_block_method.has_some_stuff?; yield; end
19
+
20
+ it 'forwards the given `{ }` block on to the `has_xyz?` method' do
21
+ expect(obj_with_block_method).to have_some_stuff { true }
22
+ expect(obj_with_block_method).to_not have_some_stuff { false }
23
+ end
24
+
25
+ it 'forwards the given `do..end` block on to the `has_xyz?` method' do
26
+ expect(obj_with_block_method).to have_some_stuff do
27
+ true
28
+ end
29
+
30
+ expect(obj_with_block_method).to_not have_some_stuff do
31
+ false
32
+ end
33
+ end
34
+
35
+ it 'favors a curly brace block over a do...end one since it binds to the matcher method' do
36
+ expect(obj_with_block_method).to have_some_stuff { true } do
37
+ false
38
+ end
39
+
40
+ expect(obj_with_block_method).not_to have_some_stuff { false } do
41
+ true
42
+ end
43
+ end
44
+
45
+ it 'does not include any args in the failure message if no args were given to the matcher' do
46
+ o = Object.new
47
+ def o.has_some_stuff?; false; end
48
+ expect {
49
+ expect(o).to have_some_stuff
50
+ }.to fail_with("expected #has_some_stuff? to return true, got false")
51
+ end
52
+
53
+ it 'includes multiple args in the failure message if multiple args were given to the matcher' do
54
+ o = Object.new
55
+ def o.has_some_stuff?(*_); false; end
56
+ expect {
57
+ expect(o).to have_some_stuff(:a, 7, "foo")
58
+ }.to fail_with('expected #has_some_stuff?(:a, 7, "foo") to return true, got false')
59
+ end
60
+
61
+ it "fails if #has_sym?(*args) returns nil" do
62
+ klass = Class.new do
63
+ def has_foo?
64
+ end
65
+ end
66
+ expect {
67
+ expect(klass.new).to have_foo
68
+ }.to fail_with(/expected #has_foo.* to return true, got false/)
69
+ end
70
+
71
+ it 'fails if #has_sym?(*args) is private' do
72
+ klass = Class.new do
73
+ private
74
+ def has_foo?
75
+ true
76
+ end
77
+ end
78
+ expect { expect(klass.new).to have_foo }.to fail_with(/private/)
79
+ end
80
+
81
+ it "fails if target does not respond to #has_sym?" do
82
+ expect {
83
+ expect(Object.new).to have_key(:a)
84
+ }.to fail_matching('to respond to `has_key?`')
85
+ end
86
+
87
+ it "reraises an exception thrown in #has_sym?(*args)" do
88
+ o = Object.new
89
+ def o.has_sym?(*args)
90
+ raise "Funky exception"
91
+ end
92
+ expect {
93
+ expect(o).to have_sym(:foo)
94
+ }.to raise_error("Funky exception")
95
+ end
96
+
97
+ it 'allows composable aliases to be defined' do
98
+ RSpec::Matchers.alias_matcher :an_object_having_sym, :have_sym
99
+ o = Object.new
100
+ def o.has_sym?(sym); sym == :foo; end
101
+
102
+ expect(o).to an_object_having_sym(:foo)
103
+ expect(o).not_to an_object_having_sym(:bar)
104
+
105
+ expect(an_object_having_sym(:foo).description).to eq("an object having sym :foo")
106
+ end
107
+
108
+ it 'composes gracefully' do
109
+ RSpec::Matchers.alias_matcher :an_object_having_foo, :have_foo
110
+
111
+ expect([
112
+ double,
113
+ double(:has_foo? => false),
114
+ double(:has_foo? => true),
115
+ ]).to include an_object_having_foo
116
+ end
117
+ end
118
+
119
+ RSpec.describe "expect(...).not_to have_sym(*args)" do
120
+ it "passes if #has_sym?(*args) returns false" do
121
+ expect({:a => "A"}).not_to have_key(:b)
122
+ end
123
+
124
+ it "passes if #has_sym?(*args) returns nil" do
125
+ klass = Class.new do
126
+ def has_foo?
127
+ end
128
+ end
129
+ expect(klass.new).not_to have_foo
130
+ end
131
+
132
+ it "fails if #has_sym?(*args) returns true" do
133
+ expect {
134
+ expect({:a => "A"}).not_to have_key(:a)
135
+ }.to fail_with("expected #has_key?(:a) to return false, got true")
136
+ end
137
+
138
+ it "fails if target does not respond to #has_sym?" do
139
+ expect {
140
+ expect(Object.new).not_to have_key(:a)
141
+ }.to fail_matching('to respond to `has_key?`')
142
+ end
143
+
144
+ it "reraises an exception thrown in #has_sym?(*args)" do
145
+ o = Object.new
146
+ def o.has_sym?(*args)
147
+ raise "Funky exception"
148
+ end
149
+ expect {
150
+ expect(o).not_to have_sym(:foo)
151
+ }.to raise_error("Funky exception")
152
+ end
153
+
154
+ it 'does not include any args in the failure message if no args were given to the matcher' do
155
+ o = Object.new
156
+ def o.has_some_stuff?; true; end
157
+ expect {
158
+ expect(o).not_to have_some_stuff
159
+ }.to fail_with("expected #has_some_stuff? to return false, got true")
160
+ end
161
+
162
+ it 'includes multiple args in the failure message if multiple args were given to the matcher' do
163
+ o = Object.new
164
+ def o.has_some_stuff?(*_); true; end
165
+ expect {
166
+ expect(o).not_to have_some_stuff(:a, 7, "foo")
167
+ }.to fail_with('expected #has_some_stuff?(:a, 7, "foo") to return false, got true')
168
+ end
169
+ end
170
+
171
+ RSpec.describe "has" do
172
+ it "works when the target implements #send" do
173
+ o = {:a => "A"}
174
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
175
+ expect {
176
+ expect(o).to have_key(:a)
177
+ }.not_to raise_error
178
+ end
179
+ end
@@ -0,0 +1,177 @@
1
+ RSpec.describe "#have_attributes matcher" do
2
+
3
+ Person = Struct.new(:name, :age)
4
+
5
+ class Person
6
+ def parent(parent_name)
7
+ @parent = parent_name
8
+ end
9
+ end
10
+
11
+ let(:wrong_name) { "Wrong Name" }
12
+ let(:wrong_age) { 11 }
13
+
14
+ let(:correct_name) { "Correct name" }
15
+ let(:correct_age) { 33 }
16
+
17
+ let(:person) { Person.new(correct_name, correct_age) }
18
+
19
+ it "is not diffable" do
20
+ expect(have_attributes(:age => correct_age)).to_not be_diffable
21
+ end
22
+
23
+ describe "expect(...).to have_attributes(with_one_attribute)" do
24
+
25
+ it_behaves_like "an RSpec matcher", :valid_value => Person.new("Correct name", 33), :invalid_value => Person.new("Wrong Name", 11) do
26
+ let(:matcher) { have_attributes(:name => "Correct name") }
27
+ end
28
+
29
+ it "passes if target has the provided attributes" do
30
+ expect(person).to have_attributes(:name => correct_name)
31
+ end
32
+
33
+ it "fails if target does not have any of the expected attributes" do
34
+ expect {
35
+ expect(person).to have_attributes(:name => wrong_name)
36
+ }.to fail_matching(%r|expected #{object_inspect person} to have attributes #{hash_inspect :name => wrong_name}|)
37
+ end
38
+
39
+ it "fails if target does not responds to any of the attributes" do
40
+ expect {
41
+ expect(person).to have_attributes(:color => 'red')
42
+ }.to fail_matching("expected #{object_inspect person} to respond to :color")
43
+ end
44
+
45
+ it "fails if target responds to the attribute but requires arguments" do
46
+ expect {
47
+ expect(person).to have_attributes(:parent => 'Billy')
48
+ }.to fail_matching("expected #{object_inspect person} to respond to :parent with 0 arguments")
49
+ end
50
+
51
+ describe "expect(...).to have_attributes(key => matcher)" do
52
+
53
+ it "passes when the matchers match" do
54
+ expect(person).to have_attributes(:age => (a_value > 30))
55
+ end
56
+
57
+ it 'provides a description' do
58
+ description = have_attributes(:age => (a_value > 30)).description
59
+ expect(description).to eq("have attributes {:age => (a value > 30)}")
60
+ end
61
+
62
+ it "fails with a clear message when the matcher does not match" do
63
+ expect {
64
+ expect(person).to have_attributes(:age => (a_value < 10))
65
+ }.to fail_matching("expected #{object_inspect person} to have attributes {:age => (a value < 10)}")
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "expect(...).to_not have_attributes(with_one_attribute)" do
71
+
72
+ it "passes if target does not have any of the expected attributes" do
73
+ expect(person).to_not have_attributes(:age => wrong_age)
74
+ end
75
+
76
+ it "fails if target has all of the expected attributes" do
77
+ expect {
78
+ expect(person).to_not have_attributes(:age => correct_age)
79
+ }.to fail_matching(%r|expected #{object_inspect person} not to have attributes #{hash_inspect :age => correct_age}|)
80
+ end
81
+
82
+ it "fails if target does not responds to any of the attributes" do
83
+ expect {
84
+ expect(person).to_not have_attributes(:color => 'red')
85
+ }.to fail_matching("expected #{object_inspect person} to respond to :color")
86
+ end
87
+
88
+ it "fails if target responds to the attribute but requires arguments" do
89
+ expect {
90
+ expect(person).to_not have_attributes(:parent => 'Billy')
91
+ }.to fail_matching("expected #{object_inspect person} to respond to :parent with 0 arguments")
92
+ end
93
+ end
94
+
95
+ describe "expect(...).to have_attributes(with_multiple_attributes)" do
96
+
97
+ it_behaves_like "an RSpec matcher", :valid_value => Person.new("Correct name", 33), :invalid_value => Person.new("Wrong Name", 11) do
98
+ let(:matcher) { have_attributes(:name => "Correct name", :age => 33) }
99
+ end
100
+
101
+ it "passes if target has the provided attributes" do
102
+ expect(person).to have_attributes(:name => correct_name, :age => correct_age)
103
+ end
104
+
105
+ it "fails if target does not have any of the expected attributes" do
106
+ expect {
107
+ expect(person).to have_attributes(:name => correct_name, :age => wrong_age)
108
+ }.to fail_matching(%r|expected #{object_inspect person} to have attributes #{hash_inspect :name => correct_name, :age => wrong_age}|)
109
+ end
110
+
111
+ it "fails if target does not responds to any of the attributes" do
112
+ expect {
113
+ expect(person).to have_attributes(:name => correct_name, :color => 'red')
114
+ }.to fail_matching("expected #{object_inspect person} to respond to :color")
115
+ end
116
+
117
+ it "fails if target responds to the attribute but requires arguments" do
118
+ expect {
119
+ expect(person).to have_attributes(:name => correct_name, :parent => 'Billy')
120
+ }.to fail_matching("expected #{object_inspect person} to respond to :parent with 0 arguments")
121
+ end
122
+ end
123
+
124
+ describe "expect(...).to_not have_attributes(with_multiple_attributes)" do
125
+
126
+ it "passes if target has none of the expected attributes" do
127
+ expect(person).to_not have_attributes(:name => wrong_name, :age => wrong_age)
128
+ end
129
+
130
+ it "fails if target has any of the expected attributes" do
131
+ expect {
132
+ expect(person).to_not have_attributes(:name => wrong_name, :age => correct_age)
133
+ }.to fail_matching(%r|expected #{object_inspect person} not to have attributes #{hash_inspect :name => wrong_name, :age => correct_age}|)
134
+ end
135
+
136
+ it "fails if target has all of the expected attributes" do
137
+ expect {
138
+ expect(person).to_not have_attributes(:name => correct_name, :age => correct_age)
139
+ }.to fail_matching(%r|expected #{object_inspect person} not to have attributes #{hash_inspect :name => correct_name, :age => correct_age}|)
140
+ end
141
+
142
+ it "fails if target does not responds to any of the attributes" do
143
+ expect {
144
+ expect(person).to_not have_attributes(:name => correct_name, :color => 'red')
145
+ }.to fail_matching("expected #{object_inspect person} to respond to :color")
146
+ end
147
+
148
+ it "fails if target responds to the attribute but requires arguments" do
149
+ expect {
150
+ expect(person).to_not have_attributes(:name => correct_name, :parent => 'Billy')
151
+ }.to fail_matching("expected #{object_inspect person} to respond to :parent with 0 arguments")
152
+ end
153
+ end
154
+
155
+
156
+ include RSpec::Matchers::Pretty
157
+ # We have to use Hash#inspect in examples that have multi-entry
158
+ # hashes because the #inspect output on 1.8.7 is non-deterministic
159
+ # due to the fact that hashes are not ordered. So we can't simply
160
+ # put a literal string for what we expect because it varies.
161
+ if RUBY_VERSION.to_f == 1.8
162
+ def hash_inspect(hash)
163
+ /\{(#{hash.map { |key,value| "#{key.inspect} => #{value.inspect}.*" }.join "|" }){#{hash.size}}\}/
164
+ end
165
+ else
166
+ def hash_inspect(hash)
167
+ improve_hash_formatting hash.inspect
168
+ end
169
+ end
170
+
171
+ include RSpec::Matchers::Composable
172
+ # a helper for failure message assertion
173
+ def object_inspect(object)
174
+ surface_descriptions_in object.inspect
175
+ end
176
+
177
+ end
@@ -0,0 +1,587 @@
1
+ require 'uri'
2
+
3
+ RSpec.describe "#include matcher" do
4
+ it "is diffable" do
5
+ expect(include("a")).to be_diffable
6
+ end
7
+
8
+ describe "expect(...).to include(with_one_arg)" do
9
+ it_behaves_like "an RSpec matcher", :valid_value => [1, 2], :invalid_value => [1] do
10
+ let(:matcher) { include(2) }
11
+ end
12
+
13
+ context "for an object that does not respond to `include?`" do
14
+ it 'fails gracefully' do
15
+ expect {
16
+ expect(5).to include(1)
17
+ }.to fail_matching("expected 5 to include 1, but it does not respond to `include?`")
18
+ end
19
+ end
20
+
21
+ context "for an arbitrary object that responds to `include?`" do
22
+ it 'delegates to `include?`' do
23
+ container = double("Container")
24
+ allow(container).to receive(:include?) { |arg| arg == :stuff }
25
+
26
+ expect(container).to include(:stuff)
27
+
28
+ expect {
29
+ expect(container).to include(:space)
30
+ }.to fail_matching("to include :space")
31
+ end
32
+ end
33
+
34
+ context "for a string target" do
35
+ it "passes if target includes expected" do
36
+ expect("abc").to include("a")
37
+ end
38
+
39
+ it "fails if target does not include expected" do
40
+ expect {
41
+ expect("abc").to include("d")
42
+ }.to fail_matching("expected \"abc\" to include \"d\"")
43
+ end
44
+
45
+ it "includes a diff when actual is multiline" do
46
+ expect {
47
+ expect("abc\ndef").to include("g")
48
+ }.to fail_matching("expected \"abc\\ndef\" to include \"g\"\nDiff")
49
+ end
50
+
51
+ it "includes a diff when actual is multiline and there are multiple expecteds" do
52
+ expect {
53
+ expect("abc\ndef").to include("g", "h")
54
+ }.to fail_matching("expected \"abc\\ndef\" to include \"g\" and \"h\"\nDiff")
55
+ end
56
+ end
57
+
58
+ context "for an array target" do
59
+ it "passes if target includes expected" do
60
+ expect([1,2,3]).to include(3)
61
+ end
62
+
63
+ it "fails if target does not include expected" do
64
+ expect {
65
+ expect([1,2,3]).to include(4)
66
+ }.to fail_matching("expected [1, 2, 3] to include 4")
67
+ end
68
+
69
+ it 'fails when given differing null doubles' do
70
+ dbl_1 = double.as_null_object
71
+ dbl_2 = double.as_null_object
72
+
73
+ expect {
74
+ expect([dbl_1]).to include(dbl_2)
75
+ }.to fail_matching("expected [#{dbl_1.inspect}] to include")
76
+ end
77
+
78
+ it 'passes when given the same null double' do
79
+ dbl = double.as_null_object
80
+ expect([dbl]).to include(dbl)
81
+ end
82
+ end
83
+
84
+ context "for a hash target" do
85
+ it 'passes if target has the expected as a key' do
86
+ expect({:key => 'value'}).to include(:key)
87
+ end
88
+
89
+ it "fails if target does not include expected" do
90
+ expect {
91
+ expect({:key => 'value'}).to include(:other)
92
+ }.to fail_matching(%Q|expected {:key => "value"} to include :other|)
93
+ end
94
+
95
+ it "fails if target doesn't have a key and we expect nil" do
96
+ expect {
97
+ expect({}).to include(:something => nil)
98
+ }.to fail_matching(%Q|expected {} to include {:something => nil}|)
99
+ end
100
+
101
+ it 'works even when an entry in the hash overrides #send' do
102
+ hash = { :key => 'value' }
103
+ def hash.send; :sent; end
104
+ expect(hash).to include(hash)
105
+ end
106
+
107
+ context 'that overrides #send' do
108
+ it 'still works' do
109
+ array = [1, 2]
110
+ def array.send; :sent; end
111
+
112
+ expect(array).to include(*array)
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ describe "expect(...).to include(with, multiple, args)" do
119
+ it "has a description" do
120
+ matcher = include("a")
121
+ expect(matcher.description).to eq("include \"a\"")
122
+ end
123
+ context "for a string target" do
124
+ it "passes if target includes all items" do
125
+ expect("a string").to include("str", "a")
126
+ end
127
+
128
+ it "fails if target does not include any one of the items" do
129
+ expect {
130
+ expect("a string").to include("str", "a", "foo")
131
+ }.to fail_matching(%Q{expected "a string" to include "str", "a", and "foo"})
132
+ end
133
+ end
134
+
135
+ context "for an array target" do
136
+ it "passes if target includes all items" do
137
+ expect([1,2,3]).to include(1,2,3)
138
+ end
139
+
140
+ it "fails if target does not include any one of the items" do
141
+ expect {
142
+ expect([1,2,3]).to include(1,2,4)
143
+ }.to fail_matching("expected [1, 2, 3] to include 1, 2, and 4")
144
+ end
145
+ end
146
+
147
+ context "for a hash target" do
148
+ it 'passes if target includes all items as keys' do
149
+ expect({:key => 'value', :other => 'value'}).to include(:key, :other)
150
+ end
151
+
152
+ it 'fails if target is missing any item as a key' do
153
+ expect {
154
+ expect({:key => 'value'}).to include(:key, :other)
155
+ }.to fail_matching(%Q|expected {:key => "value"} to include :key and :other|)
156
+ end
157
+ end
158
+ end
159
+
160
+ describe "expect(...).not_to include(expected)" do
161
+ context "for an object that does not respond to `include?`" do
162
+ it 'fails gracefully' do
163
+ expect {
164
+ expect(5).not_to include(1)
165
+ }.to fail_matching("expected 5 not to include 1, but it does not respond to `include?`")
166
+ end
167
+ end
168
+
169
+ context "for an arbitrary object that responds to `include?`" do
170
+ it 'delegates to `include?`' do
171
+ container = double("Container")
172
+ allow(container).to receive(:include?) { |arg| arg == :stuff }
173
+
174
+ expect(container).not_to include(:space)
175
+
176
+ expect {
177
+ expect(container).not_to include(:stuff)
178
+ }.to fail_matching("not to include :stuff")
179
+ end
180
+ end
181
+
182
+ context "for a string target" do
183
+ it "passes if target does not include expected" do
184
+ expect("abc").not_to include("d")
185
+ end
186
+
187
+ it "fails if target includes expected" do
188
+ expect {
189
+ expect("abc").not_to include("c")
190
+ }.to fail_with("expected \"abc\" not to include \"c\"")
191
+ end
192
+ end
193
+
194
+ context "for an array target" do
195
+ it "passes if target does not include expected" do
196
+ expect([1,2,3]).not_to include(4)
197
+ end
198
+
199
+ it "fails if target includes expected" do
200
+ expect {
201
+ expect([1,2,3]).not_to include(3)
202
+ }.to fail_with("expected [1, 2, 3] not to include 3")
203
+ end
204
+
205
+ it 'passes when given differing null doubles' do
206
+ expect([double.as_null_object]).not_to include(double.as_null_object)
207
+ end
208
+
209
+ it 'fails when given the same null double' do
210
+ dbl = double.as_null_object
211
+
212
+ expect {
213
+ expect([dbl]).not_to include(dbl)
214
+ }.to fail_matching("expected [#{dbl.inspect}] not to include")
215
+ end
216
+ end
217
+
218
+ context "for a hash target" do
219
+ it 'passes if target does not have the expected as a key' do
220
+ expect({:other => 'value'}).not_to include(:key)
221
+ end
222
+
223
+ it "fails if target includes expected key" do
224
+ expect {
225
+ expect({:key => 'value'}).not_to include(:key)
226
+ }.to fail_matching(%Q|expected {:key => "value"} not to include :key|)
227
+ end
228
+ end
229
+
230
+ end
231
+
232
+ describe "expect(...).not_to include(with, multiple, args)" do
233
+ context "for a string target" do
234
+ it "passes if the target does not include any of the expected" do
235
+ expect("abc").not_to include("d", "e", "f")
236
+ end
237
+
238
+ it "fails if the target includes all of the expected" do
239
+ expect {
240
+ expect("abc").not_to include("c", "a")
241
+ }.to fail_with('expected "abc" not to include "c" and "a"')
242
+ end
243
+
244
+ it "fails if the target includes some (but not all) of the expected" do
245
+ expect {
246
+ expect("abc").not_to include("d", "a")
247
+ }.to fail_with(%q{expected "abc" not to include "d" and "a"})
248
+ end
249
+ end
250
+
251
+ context "for a hash target" do
252
+ it "passes if it does not include any of the expected keys" do
253
+ expect({ :a => 1, :b => 2 }).not_to include(:c, :d)
254
+ end
255
+
256
+ it "fails if the target includes all of the expected keys" do
257
+ expect {
258
+ expect({ :a => 1, :b => 2 }).not_to include(:a, :b)
259
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 2} not to include :a and :b|)
260
+ end
261
+
262
+ it "fails if the target includes some (but not all) of the expected keys" do
263
+ expect {
264
+ expect({ :a => 1, :b => 2 }).not_to include(:d, :b)
265
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 2} not to include :d and :b|)
266
+ end
267
+ end
268
+
269
+ context "for an array target" do
270
+ it "passes if the target does not include any of the expected" do
271
+ expect([1, 2, 3]).not_to include(4, 5, 6)
272
+ end
273
+
274
+ it "fails if the target includes all of the expected" do
275
+ expect {
276
+ expect([1, 2, 3]).not_to include(3, 1)
277
+ }.to fail_with(%q{expected [1, 2, 3] not to include 3 and 1})
278
+ end
279
+
280
+ it "fails if the target includes some (but not all) of the expected" do
281
+ expect {
282
+ expect([1, 2, 3]).not_to include(4, 1)
283
+ }.to fail_with(%q{expected [1, 2, 3] not to include 4 and 1})
284
+ end
285
+ end
286
+ end
287
+
288
+ describe "expect(...).to include(:key => value)" do
289
+ context 'for a hash target' do
290
+ it "passes if target includes the key/value pair" do
291
+ expect({:key => 'value'}).to include(:key => 'value')
292
+ end
293
+
294
+ it "passes if target includes the key/value pair among others" do
295
+ expect({:key => 'value', :other => 'different'}).to include(:key => 'value')
296
+ end
297
+
298
+ it "fails if target has a different value for key" do
299
+ expect {
300
+ expect({:key => 'different'}).to include(:key => 'value')
301
+ }.to fail_matching(%Q|expected {:key => "different"} to include {:key => "value"}|)
302
+ end
303
+
304
+ it "fails if target has a different key" do
305
+ expect {
306
+ expect({:other => 'value'}).to include(:key => 'value')
307
+ }.to fail_matching(%Q|expected {:other => "value"} to include {:key => "value"}|)
308
+ end
309
+ end
310
+
311
+ context 'for a non-hash target' do
312
+ it "fails if the target does not contain the given hash" do
313
+ expect {
314
+ expect(['a', 'b']).to include(:key => 'value')
315
+ }.to fail_matching(%q|expected ["a", "b"] to include {:key => "value"}|)
316
+ end
317
+
318
+ it "passes if the target contains the given hash" do
319
+ expect(['a', { :key => 'value' } ]).to include(:key => 'value')
320
+ end
321
+ end
322
+ end
323
+
324
+ describe "expect(...).not_to include(:key => value)" do
325
+ context 'for a hash target' do
326
+ it "fails if target includes the key/value pair" do
327
+ expect {
328
+ expect({:key => 'value'}).not_to include(:key => 'value')
329
+ }.to fail_matching(%Q|expected {:key => "value"} not to include {:key => "value"}|)
330
+ end
331
+
332
+ it "fails if target includes the key/value pair among others" do
333
+ expect {
334
+ expect({:key => 'value', :other => 'different'}).not_to include(:key => 'value')
335
+ }.to fail_matching(%r|expected #{hash_inspect :key => "value", :other => "different"} not to include \{:key => "value"\}|)
336
+ end
337
+
338
+ it "passes if target has a different value for key" do
339
+ expect({:key => 'different'}).not_to include(:key => 'value')
340
+ end
341
+
342
+ it "passes if target has a different key" do
343
+ expect({:other => 'value'}).not_to include(:key => 'value')
344
+ end
345
+ end
346
+
347
+ context "for a non-hash target" do
348
+ it "passes if the target does not contain the given hash" do
349
+ expect(['a', 'b']).not_to include(:key => 'value')
350
+ end
351
+
352
+ it "fails if the target contains the given hash" do
353
+ expect {
354
+ expect(['a', { :key => 'value' } ]).not_to include(:key => 'value')
355
+ }.to fail_matching(%Q|expected ["a", {:key => "value"}] not to include {:key => "value"}|)
356
+ end
357
+ end
358
+ end
359
+
360
+ describe "expect(...).to include(:key1 => value1, :key2 => value2)" do
361
+ context 'for a hash target' do
362
+ it "passes if target includes the key/value pairs" do
363
+ expect({:a => 1, :b => 2}).to include(:b => 2, :a => 1)
364
+ end
365
+
366
+ it "passes if target includes the key/value pairs among others" do
367
+ expect({:a => 1, :c => 3, :b => 2}).to include(:b => 2, :a => 1)
368
+ end
369
+
370
+ it "fails if target has a different value for one of the keys" do
371
+ expect {
372
+ expect({:a => 1, :b => 2}).to include(:a => 2, :b => 2)
373
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 2} to include #{hash_inspect :a => 2, :b => 2}|)
374
+ end
375
+
376
+ it "fails if target has a different value for both of the keys" do
377
+ expect {
378
+ expect({:a => 1, :b => 1}).to include(:a => 2, :b => 2)
379
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 1} to include #{hash_inspect :a => 2, :b => 2}|)
380
+ end
381
+
382
+ it "fails if target lacks one of the keys" do
383
+ expect {
384
+ expect({:a => 1, :b => 1}).to include(:a => 1, :c => 1)
385
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 1} to include #{hash_inspect :a => 1, :c => 1}|)
386
+ end
387
+
388
+ it "fails if target lacks both of the keys" do
389
+ expect {
390
+ expect({:a => 1, :b => 1}).to include(:c => 1, :d => 1)
391
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 1} to include #{hash_inspect :c => 1, :d => 1}|)
392
+ end
393
+ end
394
+
395
+ context 'for a non-hash target' do
396
+ it "fails if the target does not contain the given hash" do
397
+ expect {
398
+ expect(['a', 'b']).to include(:a => 1, :b => 1)
399
+ }.to fail_matching(%r|expected \["a", "b"\] to include #{hash_inspect :a => 1, :b => 1}|)
400
+ end
401
+
402
+ it "passes if the target contains the given hash" do
403
+ expect(['a', { :a => 1, :b => 2 } ]).to include(:a => 1, :b => 2)
404
+ end
405
+ end
406
+ end
407
+
408
+ describe "expect(...).not_to include(:key1 => value1, :key2 => value2)" do
409
+ context 'for a hash target' do
410
+ it "fails if target includes the key/value pairs" do
411
+ expect {
412
+ expect({:a => 1, :b => 2}).not_to include(:a => 1, :b => 2)
413
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 2} not to include #{hash_inspect :a => 1, :b => 2}|)
414
+ end
415
+
416
+ it "fails if target includes the key/value pairs among others" do
417
+ hash = {:a => 1, :b => 2, :c => 3}
418
+ expect {
419
+ expect(hash).not_to include(:a => 1, :b => 2)
420
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 2, :c => 3} not to include #{hash_inspect :a => 1, :b => 2}|)
421
+ end
422
+
423
+ it "fails if target has a different value for one of the keys" do
424
+ expect {
425
+ expect({:a => 1, :b => 2}).not_to include(:a => 2, :b => 2)
426
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 2} not to include #{hash_inspect :a => 2, :b => 2}|)
427
+ end
428
+
429
+ it "passes if target has a different value for both of the keys" do
430
+ expect({:a => 1, :b => 1}).not_to include(:a => 2, :b => 2)
431
+ end
432
+
433
+ it "fails if target lacks one of the keys" do
434
+ expect {
435
+ expect({:a => 1, :b => 1}).not_to include(:a => 1, :c => 1)
436
+ }.to fail_matching(%r|expected #{hash_inspect :a => 1, :b => 1} not to include #{hash_inspect :a => 1, :c => 1}|)
437
+ end
438
+
439
+ it "passes if target lacks both of the keys" do
440
+ expect({:a => 1, :b => 1}).not_to include(:c => 1, :d => 1)
441
+ end
442
+ end
443
+
444
+ context 'for a non-hash target' do
445
+ it "passes if the target does not contain the given hash" do
446
+ expect(['a', 'b']).not_to include(:a => 1, :b => 1)
447
+ end
448
+
449
+ it "fails if the target contains the given hash" do
450
+ expect {
451
+ expect(['a', { :a => 1, :b => 2 } ]).not_to include(:a => 1, :b => 2)
452
+ }.to fail_matching(%r|expected \["a", #{hash_inspect :a => 1, :b => 2}\] not to include #{hash_inspect :a => 1, :b => 2}|)
453
+ end
454
+ end
455
+ end
456
+
457
+ describe "Composing matchers with `include`" do
458
+ RSpec::Matchers.define :a_string_containing do |expected|
459
+ match do |actual|
460
+ actual.include?(expected)
461
+ end
462
+
463
+ description do
464
+ "a string containing '#{expected}'"
465
+ end
466
+ end
467
+
468
+ describe "expect(array).to include(matcher)" do
469
+ it "passes when the matcher matches one of the values" do
470
+ expect([10, 20, 30]).to include( a_value_within(5).of(24) )
471
+ end
472
+
473
+ it 'provides a description' do
474
+ description = include( a_value_within(5).of(24) ).description
475
+ expect(description).to eq("include (a value within 5 of 24)")
476
+ end
477
+
478
+ it 'fails with a clear message when the matcher matches none of the values' do
479
+ expect {
480
+ expect([10, 30]).to include( a_value_within(5).of(24) )
481
+ }.to fail_with("expected [10, 30] to include (a value within 5 of 24)")
482
+ end
483
+
484
+ it 'works with comparison matchers' do
485
+ expect {
486
+ expect([100, 200]).to include(a_value < 90)
487
+ }.to fail_with("expected [100, 200] to include (a value < 90)")
488
+
489
+ expect([100, 200]).to include(a_value > 150)
490
+ end
491
+
492
+ it 'does not treat an object that only implements #matches? as a matcher' do
493
+ domain = Struct.new(:domain) do
494
+ def matches?(url)
495
+ URI(url).host == self.domain
496
+ end
497
+ end
498
+
499
+ expect([domain.new("rspec.info")]).to include(domain.new("rspec.info"))
500
+
501
+ expect {
502
+ expect([domain.new("rspec.info")]).to include(domain.new("foo.com"))
503
+ }.to fail_matching("expected [#{domain.new("rspec.info").inspect}] to include")
504
+ end
505
+ end
506
+
507
+ describe "expect(array).to include(multiple, matcher, arguments)" do
508
+ it "passes if target includes items satisfying all matchers" do
509
+ expect(['foo', 'bar', 'baz']).to include(a_string_containing("ar"), a_string_containing('oo'))
510
+ end
511
+
512
+ it "fails if target does not include an item satisfying any one of the items" do
513
+ expect {
514
+ expect(['foo', 'bar', 'baz']).to include(a_string_containing("ar"), a_string_containing("abc"))
515
+ }.to fail_matching(%Q|expected #{['foo', 'bar', 'baz'].inspect} to include (a string containing 'ar') and (a string containing 'abc')|)
516
+ end
517
+ end
518
+
519
+ describe "expect(hash).to include(key => matcher)" do
520
+ it "passes when the matcher matches" do
521
+ expect(:a => 12).to include(:a => a_value_within(3).of(10))
522
+ end
523
+
524
+ it 'provides a description' do
525
+ description = include(:a => a_value_within(3).of(10)).description
526
+ expect(description).to eq("include {:a => (a value within 3 of 10)}")
527
+ end
528
+
529
+ it "fails with a clear message when the matcher does not match" do
530
+ expect {
531
+ expect(:a => 15).to include(:a => a_value_within(3).of(10))
532
+ }.to fail_matching("expected {:a => 15} to include {:a => (a value within 3 of 10)}")
533
+ end
534
+ end
535
+
536
+ describe "expect(hash).to include(key_matcher)" do
537
+ it "passes when the matcher matches a key", :if => (RUBY_VERSION.to_f > 1.8) do
538
+ expect(:drink => "water", :food => "bread").to include(a_string_matching(/foo/))
539
+ end
540
+
541
+ it 'provides a description' do
542
+ description = include(a_string_matching(/foo/)).description
543
+ expect(description).to eq("include (a string matching /foo/)")
544
+ end
545
+
546
+ it 'fails with a clear message when the matcher does not match', :if => (RUBY_VERSION.to_f > 1.8) do
547
+ expect {
548
+ expect(:drink => "water", :food => "bread").to include(a_string_matching(/bar/))
549
+ }.to fail_matching('expected {:drink => "water", :food => "bread"} to include (a string matching /bar/)')
550
+ end
551
+ end
552
+
553
+ describe "expect(array).not_to include(multiple, matcher, arguments)" do
554
+ it "passes if none of the target values satisfies any of the matchers" do
555
+ expect(['foo', 'bar', 'baz']).not_to include(a_string_containing("gh"), a_string_containing('de'))
556
+ end
557
+
558
+ it 'fails if all of the matchers are satisfied by one of the target values' do
559
+ expect {
560
+ expect(['foo', 'bar', 'baz']).not_to include(a_string_containing("ar"), a_string_containing('az'))
561
+ }.to fail_matching(%Q|expected #{['foo', 'bar', 'baz'].inspect} not to include (a string containing 'ar') and (a string containing 'az')|)
562
+ end
563
+
564
+ it 'fails if the some (but not all) of the matchers are satisifed' do
565
+ expect {
566
+ expect(['foo', 'bar', 'baz']).not_to include(a_string_containing("ar"), a_string_containing('bz'))
567
+ }.to fail_matching(%Q|expected #{['foo', 'bar', 'baz'].inspect} not to include (a string containing 'ar') and (a string containing 'bz')|)
568
+ end
569
+ end
570
+ end
571
+
572
+ include RSpec::Matchers::Pretty
573
+ # We have to use Hash#inspect in examples that have multi-entry
574
+ # hashes because the #inspect output on 1.8.7 is non-deterministic
575
+ # due to the fact that hashes are not ordered. So we can't simply
576
+ # put a literal string for what we expect because it varies.
577
+ if RUBY_VERSION.to_f == 1.8
578
+ def hash_inspect(hash)
579
+ /\{(#{hash.map { |key,value| "#{key.inspect} => #{value.inspect}.*" }.join "|" }){#{hash.size}}\}/
580
+ end
581
+ else
582
+ def hash_inspect(hash)
583
+ improve_hash_formatting hash.inspect
584
+ end
585
+ end
586
+ end
587
+