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,173 @@
1
+ require 'erb'
2
+ require 'shellwords'
3
+ require 'set'
4
+
5
+ module RSpec
6
+ module Core
7
+ # Responsible for utilizing externally provided configuration options,
8
+ # whether via the command line, `.rspec`, `~/.rspec`, `.rspec-local`
9
+ # or a custom options file.
10
+ class ConfigurationOptions
11
+ # @param args [Array<String>] command line arguments
12
+ def initialize(args)
13
+ @args = args.dup
14
+ organize_options
15
+ end
16
+
17
+ # Updates the provided {Configuration} instance based on the provided
18
+ # external configuration options.
19
+ #
20
+ # @param config [Configuration] the configuration instance to update
21
+ def configure(config)
22
+ process_options_into config
23
+ configure_filter_manager config.filter_manager
24
+ load_formatters_into config
25
+ end
26
+
27
+ # @api private
28
+ # Updates the provided {FilterManager} based on the filter options.
29
+ # @param filter_manager [FilterManager] instance to update
30
+ def configure_filter_manager(filter_manager)
31
+ @filter_manager_options.each do |command, value|
32
+ filter_manager.__send__ command, value
33
+ end
34
+ end
35
+
36
+ # @return [Hash] the final merged options, drawn from all external sources
37
+ attr_reader :options
38
+
39
+ private
40
+
41
+ def organize_options
42
+ @filter_manager_options = []
43
+
44
+ @options = (file_options << command_line_options << env_options).each do |opts|
45
+ @filter_manager_options << [:include, opts.delete(:inclusion_filter)] if opts.key?(:inclusion_filter)
46
+ @filter_manager_options << [:exclude, opts.delete(:exclusion_filter)] if opts.key?(:exclusion_filter)
47
+ end
48
+
49
+ @options = @options.inject(:libs => [], :requires => []) do |hash, opts|
50
+ hash.merge(opts) do |key, oldval, newval|
51
+ [:libs, :requires].include?(key) ? oldval + newval : newval
52
+ end
53
+ end
54
+ end
55
+
56
+ UNFORCED_OPTIONS = [
57
+ :requires, :profile, :drb, :libs, :files_or_directories_to_run,
58
+ :full_description, :full_backtrace, :tty
59
+ ].to_set
60
+
61
+ UNPROCESSABLE_OPTIONS = [:formatters].to_set
62
+
63
+ def force?(key)
64
+ !UNFORCED_OPTIONS.include?(key)
65
+ end
66
+
67
+ def order(keys)
68
+ OPTIONS_ORDER.reverse.each do |key|
69
+ keys.unshift(key) if keys.delete(key)
70
+ end
71
+ keys
72
+ end
73
+
74
+ OPTIONS_ORDER = [
75
+ # It's important to set this before anything that might issue a
76
+ # deprecation (or otherwise access the reporter).
77
+ :deprecation_stream,
78
+
79
+ # load paths depend on nothing, but must be set before `requires`
80
+ # to support load-path-relative requires.
81
+ :libs,
82
+
83
+ # `files_or_directories_to_run` uses `default_path` so it must be
84
+ # set before it.
85
+ :default_path,
86
+
87
+ # These must be set before `requires` to support checking `config.files_to_run`
88
+ # from within `spec_helper.rb` when a `-rspec_helper` option is used.
89
+ :files_or_directories_to_run, :pattern, :exclude_pattern,
90
+
91
+ # In general, we want to require the specified files as early as possible.
92
+ # The `--require` option is specifically intended to allow early requires.
93
+ # For later requires, they can just put the require in their spec files, but
94
+ # `--require` provides a unique opportunity for users to instruct RSpec to
95
+ # load an extension file early for maximum flexibility.
96
+ :requires
97
+ ]
98
+
99
+ def process_options_into(config)
100
+ opts = options.reject { |k, _| UNPROCESSABLE_OPTIONS.include? k }
101
+
102
+ order(opts.keys).each do |key|
103
+ force?(key) ? config.force(key => opts[key]) : config.__send__("#{key}=", opts[key])
104
+ end
105
+ end
106
+
107
+ def load_formatters_into(config)
108
+ options[:formatters].each { |pair| config.add_formatter(*pair) } if options[:formatters]
109
+ end
110
+
111
+ def file_options
112
+ custom_options_file ? [custom_options] : [global_options, project_options, local_options]
113
+ end
114
+
115
+ def env_options
116
+ ENV["SPEC_OPTS"] ? Parser.parse(Shellwords.split(ENV["SPEC_OPTS"])) : {}
117
+ end
118
+
119
+ def command_line_options
120
+ @command_line_options ||= Parser.parse(@args).merge :files_or_directories_to_run => @args
121
+ end
122
+
123
+ def custom_options
124
+ options_from(custom_options_file)
125
+ end
126
+
127
+ def local_options
128
+ @local_options ||= options_from(local_options_file)
129
+ end
130
+
131
+ def project_options
132
+ @project_options ||= options_from(project_options_file)
133
+ end
134
+
135
+ def global_options
136
+ @global_options ||= options_from(global_options_file)
137
+ end
138
+
139
+ def options_from(path)
140
+ Parser.parse(args_from_options_file(path))
141
+ end
142
+
143
+ def args_from_options_file(path)
144
+ return [] unless path && File.exist?(path)
145
+ config_string = options_file_as_erb_string(path)
146
+ FlatMap.flat_map(config_string.split(/\n+/), &:shellsplit)
147
+ end
148
+
149
+ def options_file_as_erb_string(path)
150
+ ERB.new(File.read(path), nil, '-').result(binding)
151
+ end
152
+
153
+ def custom_options_file
154
+ command_line_options[:custom_options_file]
155
+ end
156
+
157
+ def project_options_file
158
+ ".rspec"
159
+ end
160
+
161
+ def local_options_file
162
+ ".rspec-local"
163
+ end
164
+
165
+ def global_options_file
166
+ File.join(File.expand_path("~"), ".rspec")
167
+ rescue ArgumentError
168
+ RSpec.warning "Unable to find ~/.rspec because the HOME environment variable is not set"
169
+ nil
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,111 @@
1
+ require 'drb/drb'
2
+
3
+ module RSpec
4
+ module Core
5
+ # @private
6
+ class DRbRunner
7
+ def initialize(options, configuration=RSpec.configuration)
8
+ @options = options
9
+ @configuration = configuration
10
+ end
11
+
12
+ def drb_port
13
+ @options.options[:drb_port] || ENV['RSPEC_DRB'] || 8989
14
+ end
15
+
16
+ def run(err, out)
17
+ begin
18
+ DRb.start_service("druby://localhost:0")
19
+ rescue SocketError, Errno::EADDRNOTAVAIL
20
+ DRb.start_service("druby://:0")
21
+ end
22
+ spec_server = DRbObject.new_with_uri("druby://127.0.0.1:#{drb_port}")
23
+ spec_server.run(drb_argv, err, out)
24
+ end
25
+
26
+ def drb_argv
27
+ @drb_argv ||= begin
28
+ @options.configure_filter_manager(@configuration.filter_manager)
29
+ DRbOptions.new(@options.options, @configuration.filter_manager).options
30
+ end
31
+ end
32
+ end
33
+
34
+ # @private
35
+ class DRbOptions
36
+ def initialize(submitted_options, filter_manager)
37
+ @submitted_options = submitted_options
38
+ @filter_manager = filter_manager
39
+ end
40
+
41
+ def options
42
+ argv = []
43
+ argv << "--color" if @submitted_options[:color]
44
+ argv << "--profile" if @submitted_options[:profile_examples]
45
+ argv << "--backtrace" if @submitted_options[:full_backtrace]
46
+ argv << "--tty" if @submitted_options[:tty]
47
+ argv << "--fail-fast" if @submitted_options[:fail_fast]
48
+ argv << "--options" << @submitted_options[:custom_options_file] if @submitted_options[:custom_options_file]
49
+ argv << "--order" << @submitted_options[:order] if @submitted_options[:order]
50
+
51
+ add_failure_exit_code(argv)
52
+ add_full_description(argv)
53
+ add_filter(argv, :inclusion, @filter_manager.inclusions)
54
+ add_filter(argv, :exclusion, @filter_manager.exclusions)
55
+ add_formatters(argv)
56
+ add_libs(argv)
57
+ add_requires(argv)
58
+
59
+ argv + @submitted_options[:files_or_directories_to_run]
60
+ end
61
+
62
+ def add_failure_exit_code(argv)
63
+ return unless @submitted_options[:failure_exit_code]
64
+
65
+ argv << "--failure-exit-code" << @submitted_options[:failure_exit_code].to_s
66
+ end
67
+
68
+ def add_full_description(argv)
69
+ return unless @submitted_options[:full_description]
70
+
71
+ # The argument to --example is regexp-escaped before being stuffed
72
+ # into a regexp when received for the first time (see OptionParser).
73
+ # Hence, merely grabbing the source of this regexp will retain the
74
+ # backslashes, so we must remove them.
75
+ @submitted_options[:full_description].each do |description|
76
+ argv << "--example" << description.source.delete('\\')
77
+ end
78
+ end
79
+
80
+ CONDITIONAL_FILTERS = [:if, :unless]
81
+
82
+ def add_filter(argv, name, hash)
83
+ hash.each_pair do |k, v|
84
+ next if CONDITIONAL_FILTERS.include?(k)
85
+ tag = name == :inclusion ? k.to_s : "~#{k}"
86
+ tag << ":#{v}" if v.is_a?(String)
87
+ argv << "--tag" << tag
88
+ end unless hash.empty?
89
+ end
90
+
91
+ def add_formatters(argv)
92
+ @submitted_options[:formatters].each do |pair|
93
+ argv << "--format" << pair[0]
94
+ argv << "--out" << pair[1] if pair[1]
95
+ end if @submitted_options[:formatters]
96
+ end
97
+
98
+ def add_libs(argv)
99
+ @submitted_options[:libs].each do |path|
100
+ argv << "-I" << path
101
+ end if @submitted_options[:libs]
102
+ end
103
+
104
+ def add_requires(argv)
105
+ @submitted_options[:requires].each do |path|
106
+ argv << "--require" << path
107
+ end if @submitted_options[:requires]
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,93 @@
1
+ module RSpec
2
+ module Core
3
+ # DSL defines methods to group examples, most notably `describe`,
4
+ # and exposes them as class methods of {RSpec}. They can also be
5
+ # exposed globally (on `main` and instances of `Module`) through
6
+ # the {Configuration} option `expose_dsl_globally`.
7
+ #
8
+ # By default the methods `describe`, `context` and `example_group`
9
+ # are exposed. These methods define a named context for one or
10
+ # more examples. The given block is evaluated in the context of
11
+ # a generated subclass of {RSpec::Core::ExampleGroup}
12
+ #
13
+ # ## Examples:
14
+ #
15
+ # RSpec.describe "something" do
16
+ # context "when something is a certain way" do
17
+ # it "does something" do
18
+ # # example code goes here
19
+ # end
20
+ # end
21
+ # end
22
+ #
23
+ # @see ExampleGroup
24
+ # @see ExampleGroup.example_group
25
+ module DSL
26
+ # @private
27
+ def self.example_group_aliases
28
+ @example_group_aliases ||= []
29
+ end
30
+
31
+ # @private
32
+ def self.exposed_globally?
33
+ @exposed_globally ||= false
34
+ end
35
+
36
+ # @private
37
+ def self.expose_example_group_alias(name)
38
+ example_group_aliases << name
39
+
40
+ (class << RSpec; self; end).__send__(:define_method, name) do |*args, &example_group_block|
41
+ RSpec.world.register RSpec::Core::ExampleGroup.__send__(name, *args, &example_group_block)
42
+ end
43
+
44
+ expose_example_group_alias_globally(name) if exposed_globally?
45
+ end
46
+
47
+ class << self
48
+ # @private
49
+ attr_accessor :top_level
50
+ end
51
+
52
+ # Adds the describe method to Module and the top level binding
53
+ # @api private
54
+ def self.expose_globally!
55
+ return if exposed_globally?
56
+
57
+ example_group_aliases.each do |method_name|
58
+ expose_example_group_alias_globally(method_name)
59
+ end
60
+
61
+ @exposed_globally = true
62
+ end
63
+
64
+ # Removes the describe method from Module and the top level binding
65
+ # @api private
66
+ def self.remove_globally!
67
+ return unless exposed_globally?
68
+
69
+ example_group_aliases.each do |method_name|
70
+ change_global_dsl { undef_method method_name }
71
+ end
72
+
73
+ @exposed_globally = false
74
+ end
75
+
76
+ # @private
77
+ def self.expose_example_group_alias_globally(method_name)
78
+ change_global_dsl do
79
+ define_method(method_name) { |*a, &b| ::RSpec.__send__(method_name, *a, &b) }
80
+ end
81
+ end
82
+
83
+ # @private
84
+ def self.change_global_dsl(&changes)
85
+ (class << top_level; self; end).class_exec(&changes)
86
+ Module.class_exec(&changes)
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ # capture main without an eval
93
+ ::RSpec::Core::DSL.top_level = self
@@ -0,0 +1,502 @@
1
+ module RSpec
2
+ module Core
3
+ # Wrapper for an instance of a subclass of {ExampleGroup}. An instance of
4
+ # `RSpec::Core::Example` is returned by example definition methods
5
+ # such as {ExampleGroup.it it} and is yielded to the {ExampleGroup.it it},
6
+ # {Hooks#before before}, {Hooks#after after}, {Hooks#around around},
7
+ # {MemoizedHelpers::ClassMethods#let let} and
8
+ # {MemoizedHelpers::ClassMethods#subject subject} blocks.
9
+ #
10
+ # This allows us to provide rich metadata about each individual
11
+ # example without adding tons of methods directly to the ExampleGroup
12
+ # that users may inadvertantly redefine.
13
+ #
14
+ # Useful for configuring logging and/or taking some action based
15
+ # on the state of an example's metadata.
16
+ #
17
+ # @example
18
+ #
19
+ # RSpec.configure do |config|
20
+ # config.before do |example|
21
+ # log example.description
22
+ # end
23
+ #
24
+ # config.after do |example|
25
+ # log example.description
26
+ # end
27
+ #
28
+ # config.around do |example|
29
+ # log example.description
30
+ # example.run
31
+ # end
32
+ # end
33
+ #
34
+ # shared_examples "auditable" do
35
+ # it "does something" do
36
+ # log "#{example.full_description}: #{auditable.inspect}"
37
+ # auditable.should do_something
38
+ # end
39
+ # end
40
+ #
41
+ # @see ExampleGroup
42
+ # @note Example blocks are evaluated in the context of an instance
43
+ # of an `ExampleGroup`, not in the context of an instance of `Example`.
44
+ class Example
45
+ # @private
46
+ #
47
+ # Used to define methods that delegate to this example's metadata
48
+ def self.delegate_to_metadata(key)
49
+ define_method(key) { @metadata[key] }
50
+ end
51
+
52
+ # @return [ExecutionResult] represents the result of running this example.
53
+ delegate_to_metadata :execution_result
54
+ # @return [String] the relative path to the file where this example was defined.
55
+ delegate_to_metadata :file_path
56
+ # @return [String] the full description (including the docstrings of
57
+ # all parent example groups).
58
+ delegate_to_metadata :full_description
59
+ # @return [String] the exact source location of this example in a form
60
+ # like `./path/to/spec.rb:17`
61
+ delegate_to_metadata :location
62
+ # @return [Boolean] flag that indicates that the example is not expected to pass.
63
+ # It will be run and will either have a pending result (if a failure occurs)
64
+ # or a failed result (if no failure occurs).
65
+ delegate_to_metadata :pending
66
+ # @return [Boolean] flag that will cause the example to not run.
67
+ # The {ExecutionResult} status will be `:pending`.
68
+ delegate_to_metadata :skip
69
+
70
+ # Returns the string submitted to `example` or its aliases (e.g.
71
+ # `specify`, `it`, etc). If no string is submitted (e.g. `it { is_expected.to
72
+ # do_something }`) it returns the message generated by the matcher if
73
+ # there is one, otherwise returns a message including the location of the
74
+ # example.
75
+ def description
76
+ description = if metadata[:description].to_s.empty?
77
+ "example at #{location}"
78
+ else
79
+ metadata[:description]
80
+ end
81
+
82
+ RSpec.configuration.format_docstrings_block.call(description)
83
+ end
84
+
85
+ # @attr_reader
86
+ #
87
+ # Returns the first exception raised in the context of running this
88
+ # example (nil if no exception is raised)
89
+ attr_reader :exception
90
+
91
+ # @attr_reader
92
+ #
93
+ # Returns the metadata object associated with this example.
94
+ attr_reader :metadata
95
+
96
+ # @attr_reader
97
+ # @private
98
+ #
99
+ # Returns the example_group_instance that provides the context for
100
+ # running this example.
101
+ attr_reader :example_group_instance
102
+
103
+ # @attr
104
+ # @private
105
+ attr_accessor :clock
106
+
107
+ # Creates a new instance of Example.
108
+ # @param example_group_class [Class] the subclass of ExampleGroup in which this Example is declared
109
+ # @param description [String] the String passed to the `it` method (or alias)
110
+ # @param user_metadata [Hash] additional args passed to `it` to be used as metadata
111
+ # @param example_block [Proc] the block of code that represents the example
112
+ # @api private
113
+ def initialize(example_group_class, description, user_metadata, example_block=nil)
114
+ @example_group_class = example_group_class
115
+ @example_block = example_block
116
+
117
+ @metadata = Metadata::ExampleHash.create(
118
+ @example_group_class.metadata, user_metadata, description, example_block
119
+ )
120
+
121
+ @example_group_instance = @exception = nil
122
+ @clock = RSpec::Core::Time
123
+ end
124
+
125
+ # Returns the example group class that provides the context for running
126
+ # this example.
127
+ def example_group
128
+ @example_group_class
129
+ end
130
+
131
+ alias_method :pending?, :pending
132
+ alias_method :skipped?, :skip
133
+
134
+ # @api private
135
+ # instance_execs the block passed to the constructor in the context of
136
+ # the instance of {ExampleGroup}.
137
+ # @param example_group_instance the instance of an ExampleGroup subclass
138
+ def run(example_group_instance, reporter)
139
+ @example_group_instance = example_group_instance
140
+ RSpec.current_example = self
141
+
142
+ start(reporter)
143
+ Pending.mark_pending!(self, pending) if pending?
144
+
145
+ begin
146
+ if skipped?
147
+ Pending.mark_pending! self, skip
148
+ elsif !RSpec.configuration.dry_run?
149
+ with_around_example_hooks do
150
+ begin
151
+ run_before_example
152
+ @example_group_instance.instance_exec(self, &@example_block)
153
+
154
+ if pending?
155
+ Pending.mark_fixed! self
156
+
157
+ raise Pending::PendingExampleFixedError,
158
+ 'Expected example to fail since it is pending, but it passed.',
159
+ [location]
160
+ end
161
+ rescue Pending::SkipDeclaredInExample
162
+ # no-op, required metadata has already been set by the `skip`
163
+ # method.
164
+ rescue Exception => e
165
+ set_exception(e)
166
+ ensure
167
+ run_after_example
168
+ end
169
+ end
170
+ end
171
+ rescue Exception => e
172
+ set_exception(e)
173
+ ensure
174
+ @example_group_instance.instance_variables.each do |ivar|
175
+ @example_group_instance.instance_variable_set(ivar, nil)
176
+ end
177
+ @example_group_instance = nil
178
+ end
179
+
180
+ finish(reporter)
181
+ ensure
182
+ RSpec.current_example = nil
183
+ end
184
+
185
+ # Wraps both a `Proc` and an {Example} for use in {Hooks#around
186
+ # around} hooks. In around hooks we need to yield this special
187
+ # kind of object (rather than the raw {Example}) because when
188
+ # there are multiple `around` hooks we have to wrap them recursively.
189
+ #
190
+ # @example
191
+ #
192
+ # RSpec.configure do |c|
193
+ # c.around do |ex| # Procsy which wraps the example
194
+ # if ex.metadata[:key] == :some_value && some_global_condition
195
+ # raise "some message"
196
+ # end
197
+ # ex.run # run delegates to ex.call
198
+ # end
199
+ # end
200
+ #
201
+ # @note This class also exposes the instance methods of {Example},
202
+ # proxying them through to the wrapped {Example} instance.
203
+ class Procsy
204
+ # The {Example} instance.
205
+ attr_reader :example
206
+
207
+ Example.public_instance_methods(false).each do |name|
208
+ next if name.to_sym == :run || name.to_sym == :inspect
209
+
210
+ define_method(name) { |*a, &b| @example.__send__(name, *a, &b) }
211
+ end
212
+
213
+ Proc.public_instance_methods(false).each do |name|
214
+ next if name.to_sym == :call || name.to_sym == :inspect || name.to_sym == :to_proc
215
+
216
+ define_method(name) { |*a, &b| @proc.__send__(name, *a, &b) }
217
+ end
218
+
219
+ # Calls the proc and notes that the example has been executed.
220
+ def call(*args, &block)
221
+ @executed = true
222
+ @proc.call(*args, &block)
223
+ end
224
+ alias run call
225
+
226
+ # Provides a wrapped proc that will update our `executed?` state when executed.
227
+ def to_proc
228
+ method(:call).to_proc
229
+ end
230
+
231
+ def initialize(example, &block)
232
+ @example = example
233
+ @proc = block
234
+ @executed = false
235
+ end
236
+
237
+ # @private
238
+ def wrap(&block)
239
+ self.class.new(example, &block)
240
+ end
241
+
242
+ # Indicates whether or not the around hook has executed the example.
243
+ def executed?
244
+ @executed
245
+ end
246
+
247
+ # @private
248
+ def inspect
249
+ @example.inspect.gsub('Example', 'ExampleProcsy')
250
+ end
251
+ end
252
+
253
+ # @private
254
+ def any_apply?(filters)
255
+ MetadataFilter.any_apply?(filters, metadata)
256
+ end
257
+
258
+ # @private
259
+ def all_apply?(filters)
260
+ MetadataFilter.all_apply?(filters, metadata) || @example_group_class.all_apply?(filters)
261
+ end
262
+
263
+ # @private
264
+ def around_example_hooks
265
+ @around_example_hooks ||= example_group.hooks.around_example_hooks_for(self)
266
+ end
267
+
268
+ # @private
269
+ #
270
+ # Used internally to set an exception in an after hook, which
271
+ # captures the exception but doesn't raise it.
272
+ def set_exception(exception, context=nil)
273
+ if pending? && !(Pending::PendingExampleFixedError === exception)
274
+ execution_result.pending_exception = exception
275
+ else
276
+ if @exception
277
+ # An error has already been set; we don't want to override it,
278
+ # but we also don't want silence the error, so let's print it.
279
+ msg = <<-EOS
280
+
281
+ An error occurred #{context}
282
+ #{exception.class}: #{exception.message}
283
+ occurred at #{exception.backtrace.first}
284
+
285
+ EOS
286
+ RSpec.configuration.reporter.message(msg)
287
+ end
288
+
289
+ @exception ||= exception
290
+ end
291
+ end
292
+
293
+ # @private
294
+ #
295
+ # Used internally to set an exception and fail without actually executing
296
+ # the example when an exception is raised in before(:context).
297
+ def fail_with_exception(reporter, exception)
298
+ start(reporter)
299
+ set_exception(exception)
300
+ finish(reporter)
301
+ end
302
+
303
+ # @private
304
+ #
305
+ # Used internally to skip without actually executing the example when
306
+ # skip is used in before(:context)
307
+ def skip_with_exception(reporter, exception)
308
+ start(reporter)
309
+ Pending.mark_skipped! self, exception.argument
310
+ finish(reporter)
311
+ end
312
+
313
+ # @private
314
+ def instance_exec_with_rescue(context, &block)
315
+ @example_group_instance.instance_exec(self, &block)
316
+ rescue Exception => e
317
+ set_exception(e, context)
318
+ end
319
+
320
+ # @private
321
+ def instance_exec(*args, &block)
322
+ @example_group_instance.instance_exec(*args, &block)
323
+ end
324
+
325
+ private
326
+
327
+ def with_around_example_hooks(&block)
328
+ if around_example_hooks.empty?
329
+ yield
330
+ else
331
+ @example_group_class.hooks.run(:around, :example, self, Procsy.new(self, &block))
332
+ end
333
+ rescue Exception => e
334
+ set_exception(e, "in an `around(:example)` hook")
335
+ end
336
+
337
+ def start(reporter)
338
+ reporter.example_started(self)
339
+ execution_result.started_at = clock.now
340
+ end
341
+
342
+ def finish(reporter)
343
+ pending_message = execution_result.pending_message
344
+
345
+ if @exception
346
+ record_finished :failed
347
+ execution_result.exception = @exception
348
+ reporter.example_failed self
349
+ false
350
+ elsif pending_message
351
+ record_finished :pending
352
+ execution_result.pending_message = pending_message
353
+ reporter.example_pending self
354
+ true
355
+ else
356
+ record_finished :passed
357
+ reporter.example_passed self
358
+ true
359
+ end
360
+ end
361
+
362
+ def record_finished(status)
363
+ execution_result.record_finished(status, clock.now)
364
+ end
365
+
366
+ def run_before_example
367
+ @example_group_instance.setup_mocks_for_rspec
368
+ @example_group_class.hooks.run(:before, :example, self)
369
+ end
370
+
371
+ def run_after_example
372
+ @example_group_class.hooks.run(:after, :example, self)
373
+ verify_mocks
374
+ assign_generated_description if RSpec.configuration.expecting_with_rspec?
375
+ rescue Exception => e
376
+ set_exception(e, "in an `after(:example)` hook")
377
+ ensure
378
+ @example_group_instance.teardown_mocks_for_rspec
379
+ end
380
+
381
+ def verify_mocks
382
+ @example_group_instance.verify_mocks_for_rspec if mocks_need_verification?
383
+ rescue Exception => e
384
+ if pending?
385
+ execution_result.pending_fixed = false
386
+ @exception = nil
387
+ else
388
+ set_exception(e)
389
+ end
390
+ end
391
+
392
+ def mocks_need_verification?
393
+ exception.nil? || execution_result.pending_fixed?
394
+ end
395
+
396
+ def assign_generated_description
397
+ if metadata[:description].empty? && (description = RSpec::Matchers.generated_description)
398
+ metadata[:description] = description
399
+ metadata[:full_description] << description
400
+ end
401
+ rescue Exception => e
402
+ set_exception(e, "while assigning the example description")
403
+ ensure
404
+ RSpec::Matchers.clear_generated_description
405
+ end
406
+
407
+ def skip_message
408
+ if String === skip
409
+ skip
410
+ else
411
+ Pending::NO_REASON_GIVEN
412
+ end
413
+ end
414
+
415
+ # Represents the result of executing an example.
416
+ # Behaves like a hash for backwards compatibility.
417
+ class ExecutionResult
418
+ include HashImitatable
419
+
420
+ # @return [Symbol] `:passed`, `:failed` or `:pending`.
421
+ attr_accessor :status
422
+
423
+ # @return [Exception, nil] The failure, if there was one.
424
+ attr_accessor :exception
425
+
426
+ # @return [Time] When the example started.
427
+ attr_accessor :started_at
428
+
429
+ # @return [Time] When the example finished.
430
+ attr_accessor :finished_at
431
+
432
+ # @return [Float] How long the example took in seconds.
433
+ attr_accessor :run_time
434
+
435
+ # @return [String, nil] The reason the example was pending,
436
+ # or nil if the example was not pending.
437
+ attr_accessor :pending_message
438
+
439
+ # @return [Exception, nil] The exception triggered while
440
+ # executing the pending example. If no exception was triggered
441
+ # it would no longer get a status of `:pending` unless it was
442
+ # tagged with `:skip`.
443
+ attr_accessor :pending_exception
444
+
445
+ # @return [Boolean] For examples tagged with `:pending`,
446
+ # this indicates whether or not it now passes.
447
+ attr_accessor :pending_fixed
448
+
449
+ alias pending_fixed? pending_fixed
450
+
451
+ # @api private
452
+ # Records the finished status of the example.
453
+ def record_finished(status, finished_at)
454
+ self.status = status
455
+ self.finished_at = finished_at
456
+ self.run_time = (finished_at - started_at).to_f
457
+ end
458
+
459
+ private
460
+
461
+ # For backwards compatibility we present `status` as a string
462
+ # when presenting the legacy hash interface.
463
+ def hash_for_delegation
464
+ super.tap do |hash|
465
+ hash[:status] &&= status.to_s
466
+ end
467
+ end
468
+
469
+ def set_value(name, value)
470
+ value &&= value.to_sym if name == :status
471
+ super(name, value)
472
+ end
473
+
474
+ def get_value(name)
475
+ if name == :status
476
+ status.to_s if status
477
+ else
478
+ super
479
+ end
480
+ end
481
+
482
+ def issue_deprecation(_method_name, *_args)
483
+ RSpec.deprecate("Treating `metadata[:execution_result]` as a hash",
484
+ :replacement => "the attributes methods to access the data")
485
+ end
486
+ end
487
+ end
488
+
489
+ # @private
490
+ # Provides an execution context for before/after :suite hooks.
491
+ class SuiteHookContext < Example
492
+ def initialize
493
+ super(AnonymousExampleGroup, "", {})
494
+ end
495
+
496
+ # To ensure we don't silence errors...
497
+ def set_exception(exception, _context=nil)
498
+ raise exception
499
+ end
500
+ end
501
+ end
502
+ end