opal-connect-rspec 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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,66 @@
1
+ module RSpec
2
+ module Core
3
+ # @private
4
+ class BacktraceFormatter
5
+ # @private
6
+ attr_accessor :exclusion_patterns, :inclusion_patterns
7
+
8
+ def initialize
9
+ @full_backtrace = false
10
+
11
+ patterns = %w[ /lib\d*/ruby/ bin/ exe/rspec ]
12
+ patterns << "org/jruby/" if RUBY_PLATFORM == 'java'
13
+ patterns.map! { |s| Regexp.new(s.gsub("/", File::SEPARATOR)) }
14
+
15
+ @exclusion_patterns = [Regexp.union(RSpec::CallerFilter::IGNORE_REGEX, *patterns)]
16
+ @inclusion_patterns = []
17
+
18
+ return unless matches?(@exclusion_patterns, File.join(Dir.getwd, "lib", "foo.rb:13"))
19
+ inclusion_patterns << Regexp.new(Dir.getwd)
20
+ end
21
+
22
+ attr_writer :full_backtrace
23
+
24
+ def full_backtrace?
25
+ @full_backtrace || exclusion_patterns.empty?
26
+ end
27
+
28
+ def filter_gem(gem_name)
29
+ sep = File::SEPARATOR
30
+ exclusion_patterns << /#{sep}#{gem_name}(-[^#{sep}]+)?#{sep}/
31
+ end
32
+
33
+ def format_backtrace(backtrace, options={})
34
+ return backtrace if options[:full_backtrace]
35
+
36
+ backtrace.map { |l| backtrace_line(l) }.compact.
37
+ tap do |filtered|
38
+ if filtered.empty?
39
+ filtered.concat backtrace
40
+ filtered << ""
41
+ filtered << " Showing full backtrace because every line was filtered out."
42
+ filtered << " See docs for RSpec::Configuration#backtrace_exclusion_patterns and"
43
+ filtered << " RSpec::Configuration#backtrace_inclusion_patterns for more information."
44
+ end
45
+ end
46
+ end
47
+
48
+ def backtrace_line(line)
49
+ Metadata.relative_path(line) unless exclude?(line)
50
+ rescue SecurityError
51
+ nil
52
+ end
53
+
54
+ def exclude?(line)
55
+ return false if @full_backtrace
56
+ matches?(exclusion_patterns, line) && !matches?(inclusion_patterns, line)
57
+ end
58
+
59
+ private
60
+
61
+ def matches?(patterns, line)
62
+ patterns.any? { |p| line =~ p }
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,1440 @@
1
+ RSpec::Support.require_rspec_core "backtrace_formatter"
2
+ RSpec::Support.require_rspec_core "ruby_project"
3
+ RSpec::Support.require_rspec_core "formatters/deprecation_formatter"
4
+
5
+ module RSpec
6
+ module Core
7
+ # rubocop:disable Style/ClassLength
8
+
9
+ # Stores runtime configuration information.
10
+ #
11
+ # Configuration options are loaded from `~/.rspec`, `.rspec`,
12
+ # `.rspec-local`, command line switches, and the `SPEC_OPTS` environment
13
+ # variable (listed in lowest to highest precedence; for example, an option
14
+ # in `~/.rspec` can be overridden by an option in `.rspec-local`).
15
+ #
16
+ # @example Standard settings
17
+ # RSpec.configure do |c|
18
+ # c.drb = true
19
+ # c.drb_port = 1234
20
+ # c.default_path = 'behavior'
21
+ # end
22
+ #
23
+ # @example Hooks
24
+ # RSpec.configure do |c|
25
+ # c.before(:suite) { establish_connection }
26
+ # c.before(:example) { log_in_as :authorized }
27
+ # c.around(:example) { |ex| Database.transaction(&ex) }
28
+ # end
29
+ #
30
+ # @see RSpec.configure
31
+ # @see Hooks
32
+ class Configuration
33
+ include RSpec::Core::Hooks
34
+
35
+ # @private
36
+ class MustBeConfiguredBeforeExampleGroupsError < StandardError; end
37
+
38
+ # @private
39
+ def self.define_reader(name)
40
+ define_method(name) do
41
+ variable = instance_variable_defined?("@#{name}") ? instance_variable_get("@#{name}") : nil
42
+ value_for(name, variable)
43
+ end
44
+ end
45
+
46
+ # @private
47
+ def self.define_aliases(name, alias_name)
48
+ alias_method alias_name, name
49
+ alias_method "#{alias_name}=", "#{name}="
50
+ define_predicate_for alias_name
51
+ end
52
+
53
+ # @private
54
+ def self.define_predicate_for(*names)
55
+ names.each { |name| alias_method "#{name}?", name }
56
+ end
57
+
58
+ # @private
59
+ #
60
+ # Invoked by the `add_setting` instance method. Use that method on a
61
+ # `Configuration` instance rather than this class method.
62
+ def self.add_setting(name, opts={})
63
+ raise "Use the instance add_setting method if you want to set a default" if opts.key?(:default)
64
+ attr_writer name
65
+ add_read_only_setting name
66
+
67
+ Array(opts[:alias_with]).each do |alias_name|
68
+ define_aliases(name, alias_name)
69
+ end
70
+ end
71
+
72
+ # @private
73
+ #
74
+ # As `add_setting` but only add the reader
75
+ def self.add_read_only_setting(name, opts={})
76
+ raise "Use the instance add_setting method if you want to set a default" if opts.key?(:default)
77
+ define_reader name
78
+ define_predicate_for name
79
+ end
80
+
81
+ # @macro [attach] add_setting
82
+ # @!attribute [rw] $1
83
+ # @!method $1=(value)
84
+ #
85
+ # @macro [attach] define_reader
86
+ # @!attribute [r] $1
87
+
88
+ # @macro add_setting
89
+ # Path to use if no path is provided to the `rspec` command (default:
90
+ # `"spec"`). Allows you to just type `rspec` instead of `rspec spec` to
91
+ # run all the examples in the `spec` directory.
92
+ #
93
+ # Note: Other scripts invoking `rspec` indirectly will ignore this
94
+ # setting.
95
+ add_setting :default_path
96
+
97
+ # @macro add_setting
98
+ # Run examples over DRb (default: `false`). RSpec doesn't supply the DRb
99
+ # server, but you can use tools like spork.
100
+ add_setting :drb
101
+
102
+ # @macro add_setting
103
+ # The drb_port (default: nil).
104
+ add_setting :drb_port
105
+
106
+ # @macro add_setting
107
+ # Default: `$stderr`.
108
+ add_setting :error_stream
109
+
110
+ # Indicates if the DSL has been exposed off of modules and `main`.
111
+ # Default: true
112
+ def expose_dsl_globally?
113
+ Core::DSL.exposed_globally?
114
+ end
115
+
116
+ # Use this to expose the core RSpec DSL via `Module` and the `main`
117
+ # object. It will be set automatically but you can override it to
118
+ # remove the DSL.
119
+ # Default: true
120
+ def expose_dsl_globally=(value)
121
+ if value
122
+ Core::DSL.expose_globally!
123
+ Core::SharedExampleGroup::TopLevelDSL.expose_globally!
124
+ else
125
+ Core::DSL.remove_globally!
126
+ Core::SharedExampleGroup::TopLevelDSL.remove_globally!
127
+ end
128
+ end
129
+
130
+ # Determines where deprecation warnings are printed.
131
+ # Defaults to `$stderr`.
132
+ # @return [IO, String] IO to write to or filename to write to
133
+ define_reader :deprecation_stream
134
+
135
+ # Determines where deprecation warnings are printed.
136
+ # @param value [IO, String] IO to write to or filename to write to
137
+ def deprecation_stream=(value)
138
+ if @reporter && !value.equal?(@deprecation_stream)
139
+ warn "RSpec's reporter has already been initialized with " \
140
+ "#{deprecation_stream.inspect} as the deprecation stream, so your change to "\
141
+ "`deprecation_stream` will be ignored. You should configure it earlier for " \
142
+ "it to take effect, or use the `--deprecation-out` CLI option. " \
143
+ "(Called from #{CallerFilter.first_non_rspec_line})"
144
+ else
145
+ @deprecation_stream = value
146
+ end
147
+ end
148
+
149
+ # @macro add_setting
150
+ # Clean up and exit after the first failure (default: `false`).
151
+ add_setting :fail_fast
152
+
153
+ # @macro add_setting
154
+ # Prints the formatter output of your suite without running any
155
+ # examples or hooks.
156
+ add_setting :dry_run
157
+
158
+ # @macro add_setting
159
+ # The exit code to return if there are any failures (default: 1).
160
+ add_setting :failure_exit_code
161
+
162
+ # @macro define_reader
163
+ # Indicates files configured to be required
164
+ define_reader :requires
165
+
166
+ # @macro define_reader
167
+ # Returns dirs that have been prepended to the load path by the `-I` command line option
168
+ define_reader :libs
169
+
170
+ # @macro add_setting
171
+ # Determines where RSpec will send its output.
172
+ # Default: `$stdout`.
173
+ define_reader :output_stream
174
+
175
+ # Set the output stream for reporter
176
+ # @attr value [IO] value for output, defaults to $stdout
177
+ def output_stream=(value)
178
+ if @reporter && !value.equal?(@output_stream)
179
+ warn "RSpec's reporter has already been initialized with " \
180
+ "#{output_stream.inspect} as the output stream, so your change to "\
181
+ "`output_stream` will be ignored. You should configure it earlier for " \
182
+ "it to take effect. (Called from #{CallerFilter.first_non_rspec_line})"
183
+ else
184
+ @output_stream = value
185
+ end
186
+ end
187
+
188
+ # @macro define_reader
189
+ # Load files matching this pattern (default: `'**{,/*/**}/*_spec.rb'`)
190
+ define_reader :pattern
191
+
192
+ # Set pattern to match files to load
193
+ # @attr value [String] the filename pattern to filter spec files by
194
+ def pattern=(value)
195
+ update_pattern_attr :pattern, value
196
+ end
197
+
198
+ # @macro define_reader
199
+ # Exclude files matching this pattern
200
+ define_reader :exclude_pattern
201
+
202
+ # Set pattern to match files to exclude
203
+ # @attr value [String] the filename pattern to exclude spec files by
204
+ def exclude_pattern=(value)
205
+ update_pattern_attr :exclude_pattern, value
206
+ end
207
+
208
+ # @macro add_setting
209
+ # Report the times for the slowest examples (default: `false`).
210
+ # Use this to specify the number of examples to include in the profile.
211
+ add_setting :profile_examples
212
+
213
+ # @macro add_setting
214
+ # Run all examples if none match the configured filters (default: `false`).
215
+ add_setting :run_all_when_everything_filtered
216
+
217
+ # @macro add_setting
218
+ # Color to use to indicate success.
219
+ # @param color [Symbol] defaults to `:green` but can be set to one of the
220
+ # following: `[:black, :white, :red, :green, :yellow,
221
+ # :blue, :magenta, :cyan]`
222
+ add_setting :success_color
223
+
224
+ # @macro add_setting
225
+ # Color to use to print pending examples.
226
+ # @param color [Symbol] defaults to `:yellow` but can be set to one of the
227
+ # following: `[:black, :white, :red, :green, :yellow,
228
+ # :blue, :magenta, :cyan]`
229
+ add_setting :pending_color
230
+
231
+ # @macro add_setting
232
+ # Color to use to indicate failure.
233
+ # @param color [Symbol] defaults to `:red` but can be set to one of the
234
+ # following: `[:black, :white, :red, :green, :yellow,
235
+ # :blue, :magenta, :cyan]`
236
+ add_setting :failure_color
237
+
238
+ # @macro add_setting
239
+ # The default output color.
240
+ # @param color [Symbol] defaults to `:white` but can be set to one of the
241
+ # following:`[:black, :white, :red, :green, :yellow,
242
+ # :blue, :magenta, :cyan]`
243
+ add_setting :default_color
244
+
245
+ # @macro add_setting
246
+ # Color used when a pending example is fixed.
247
+ # @param color [Symbol] defaults to `:blue` but can be set to one of the
248
+ # following: `[:black, :white, :red, :green, :yellow,
249
+ # :blue, :magenta, :cyan]`
250
+ add_setting :fixed_color
251
+
252
+ # @macro add_setting
253
+ # Color used to print details.
254
+ # @param color [Symbol] defaults to `:cyan` but can be set to one of the
255
+ # following: `[:black, :white, :red, :green, :yellow,
256
+ # :blue, :magenta, :cyan]`
257
+ add_setting :detail_color
258
+
259
+ # Deprecated. This config option was added in RSpec 2 to pave the way
260
+ # for this being the default behavior in RSpec 3. Now this option is
261
+ # a no-op.
262
+ def treat_symbols_as_metadata_keys_with_true_values=(_value)
263
+ RSpec.deprecate("RSpec::Core::Configuration#treat_symbols_as_metadata_keys_with_true_values=",
264
+ :message => "RSpec::Core::Configuration#treat_symbols_as_metadata_keys_with_true_values= " \
265
+ "is deprecated, it is now set to true as default and setting it to false has no effect.")
266
+ end
267
+
268
+ # Record the start time of the spec suite to measure load time
269
+ add_setting :start_time
270
+
271
+ # @private
272
+ add_setting :tty
273
+ # @private
274
+ add_setting :include_or_extend_modules
275
+ # @private
276
+ attr_writer :files_to_run
277
+ # @private
278
+ add_setting :expecting_with_rspec
279
+ # @private
280
+ attr_accessor :filter_manager
281
+ # @private
282
+ attr_reader :backtrace_formatter, :ordering_manager
283
+
284
+ def initialize
285
+ # rubocop:disable Style/GlobalVars
286
+ @start_time = $_rspec_core_load_started_at || ::RSpec::Core::Time.now
287
+ # rubocop:enable Style/GlobalVars
288
+ @expectation_frameworks = []
289
+ @include_or_extend_modules = []
290
+ @mock_framework = nil
291
+ @files_or_directories_to_run = []
292
+ @color = false
293
+ @pattern = '**{,/*/**}/*_spec.rb'
294
+ @exclude_pattern = ''
295
+ @failure_exit_code = 1
296
+ @spec_files_loaded = false
297
+
298
+ @backtrace_formatter = BacktraceFormatter.new
299
+
300
+ @default_path = 'spec'
301
+ @deprecation_stream = $stderr
302
+ @output_stream = $stdout
303
+ @reporter = nil
304
+ @reporter_buffer = nil
305
+ @filter_manager = FilterManager.new
306
+ @ordering_manager = Ordering::ConfigurationManager.new
307
+ @preferred_options = {}
308
+ @failure_color = :red
309
+ @success_color = :green
310
+ @pending_color = :yellow
311
+ @default_color = :white
312
+ @fixed_color = :blue
313
+ @detail_color = :cyan
314
+ @profile_examples = false
315
+ @requires = []
316
+ @libs = []
317
+ @derived_metadata_blocks = []
318
+ end
319
+
320
+ # @private
321
+ #
322
+ # Used to set higher priority option values from the command line.
323
+ def force(hash)
324
+ ordering_manager.force(hash)
325
+ @preferred_options.merge!(hash)
326
+ end
327
+
328
+ # @private
329
+ def reset
330
+ @spec_files_loaded = false
331
+ @reporter = nil
332
+ @formatter_loader = nil
333
+ end
334
+
335
+ # @overload add_setting(name)
336
+ # @overload add_setting(name, opts)
337
+ # @option opts [Symbol] :default
338
+ #
339
+ # set a default value for the generated getter and predicate methods:
340
+ #
341
+ # add_setting(:foo, :default => "default value")
342
+ #
343
+ # @option opts [Symbol] :alias_with
344
+ #
345
+ # Use `:alias_with` to alias the setter, getter, and predicate to another
346
+ # name, or names:
347
+ #
348
+ # add_setting(:foo, :alias_with => :bar)
349
+ # add_setting(:foo, :alias_with => [:bar, :baz])
350
+ #
351
+ # Adds a custom setting to the RSpec.configuration object.
352
+ #
353
+ # RSpec.configuration.add_setting :foo
354
+ #
355
+ # Used internally and by extension frameworks like rspec-rails, so they
356
+ # can add config settings that are domain specific. For example:
357
+ #
358
+ # RSpec.configure do |c|
359
+ # c.add_setting :use_transactional_fixtures,
360
+ # :default => true,
361
+ # :alias_with => :use_transactional_examples
362
+ # end
363
+ #
364
+ # `add_setting` creates three methods on the configuration object, a
365
+ # setter, a getter, and a predicate:
366
+ #
367
+ # RSpec.configuration.foo=(value)
368
+ # RSpec.configuration.foo
369
+ # RSpec.configuration.foo? # returns true if foo returns anything but nil or false
370
+ def add_setting(name, opts={})
371
+ default = opts.delete(:default)
372
+ (class << self; self; end).class_exec do
373
+ add_setting(name, opts)
374
+ end
375
+ __send__("#{name}=", default) if default
376
+ end
377
+
378
+ # Returns the configured mock framework adapter module
379
+ def mock_framework
380
+ if @mock_framework.nil?
381
+ begin
382
+ mock_with :rspec
383
+ rescue LoadError
384
+ mock_with :nothing
385
+ end
386
+ end
387
+ @mock_framework
388
+ end
389
+
390
+ # Delegates to mock_framework=(framework)
391
+ def mock_framework=(framework)
392
+ mock_with framework
393
+ end
394
+
395
+ # Regexps used to exclude lines from backtraces.
396
+ #
397
+ # Excludes lines from ruby (and jruby) source, installed gems, anything
398
+ # in any "bin" directory, and any of the rspec libs (outside gem
399
+ # installs) by default.
400
+ #
401
+ # You can modify the list via the getter, or replace it with the setter.
402
+ #
403
+ # To override this behaviour and display a full backtrace, use
404
+ # `--backtrace`on the command line, in a `.rspec` file, or in the
405
+ # `rspec_options` attribute of RSpec's rake task.
406
+ def backtrace_exclusion_patterns
407
+ @backtrace_formatter.exclusion_patterns
408
+ end
409
+
410
+ # Set regular expressions used to exclude lines in backtrace
411
+ # @param patterns [Regexp] set the backtrace exlusion pattern
412
+ def backtrace_exclusion_patterns=(patterns)
413
+ @backtrace_formatter.exclusion_patterns = patterns
414
+ end
415
+
416
+ # Regexps used to include lines in backtraces.
417
+ #
418
+ # Defaults to [Regexp.new Dir.getwd].
419
+ #
420
+ # Lines that match an exclusion _and_ an inclusion pattern
421
+ # will be included.
422
+ #
423
+ # You can modify the list via the getter, or replace it with the setter.
424
+ def backtrace_inclusion_patterns
425
+ @backtrace_formatter.inclusion_patterns
426
+ end
427
+
428
+ # Set regular expressions used to include lines in backtrace
429
+ # @attr patterns [Regexp] set backtrace_formatter inclusion_patterns
430
+ def backtrace_inclusion_patterns=(patterns)
431
+ @backtrace_formatter.inclusion_patterns = patterns
432
+ end
433
+
434
+ # Adds {#backtrace_exclusion_patterns} that will filter lines from
435
+ # the named gems from backtraces.
436
+ #
437
+ # @param gem_names [Array<String>] Names of the gems to filter
438
+ #
439
+ # @example
440
+ # RSpec.configure do |config|
441
+ # config.filter_gems_from_backtrace "rack", "rake"
442
+ # end
443
+ #
444
+ # @note The patterns this adds will match the named gems in their common
445
+ # locations (e.g. system gems, vendored with bundler, installed as a
446
+ # :git dependency with bundler, etc) but is not guaranteed to work for
447
+ # all possible gem locations. For example, if you have the gem source
448
+ # in a directory with a completely unrelated name, and use bundler's
449
+ # :path option, this will not filter it.
450
+ def filter_gems_from_backtrace(*gem_names)
451
+ gem_names.each do |name|
452
+ @backtrace_formatter.filter_gem(name)
453
+ end
454
+ end
455
+
456
+ # @private
457
+ MOCKING_ADAPTERS = {
458
+ :rspec => :RSpec,
459
+ :flexmock => :Flexmock,
460
+ :rr => :RR,
461
+ :mocha => :Mocha,
462
+ :nothing => :Null
463
+ }
464
+
465
+ # Sets the mock framework adapter module.
466
+ #
467
+ # `framework` can be a Symbol or a Module.
468
+ #
469
+ # Given any of `:rspec`, `:mocha`, `:flexmock`, or `:rr`, configures the
470
+ # named framework.
471
+ #
472
+ # Given `:nothing`, configures no framework. Use this if you don't use
473
+ # any mocking framework to save a little bit of overhead.
474
+ #
475
+ # Given a Module, includes that module in every example group. The module
476
+ # should adhere to RSpec's mock framework adapter API:
477
+ #
478
+ # setup_mocks_for_rspec
479
+ # - called before each example
480
+ #
481
+ # verify_mocks_for_rspec
482
+ # - called after each example if the example hasn't yet failed.
483
+ # Framework should raise an exception when expectations fail
484
+ #
485
+ # teardown_mocks_for_rspec
486
+ # - called after verify_mocks_for_rspec (even if there are errors)
487
+ #
488
+ # If the module responds to `configuration` and `mock_with` receives a block,
489
+ # it will yield the configuration object to the block e.g.
490
+ #
491
+ # config.mock_with OtherMockFrameworkAdapter do |mod_config|
492
+ # mod_config.custom_setting = true
493
+ # end
494
+ def mock_with(framework)
495
+ framework_module =
496
+ if framework.is_a?(Module)
497
+ framework
498
+ else
499
+ const_name = MOCKING_ADAPTERS.fetch(framework) do
500
+ raise ArgumentError,
501
+ "Unknown mocking framework: #{framework.inspect}. " \
502
+ "Pass a module or one of #{MOCKING_ADAPTERS.keys.inspect}"
503
+ end
504
+
505
+ RSpec::Support.require_rspec_core "mocking_adapters/#{const_name.to_s.downcase}"
506
+ RSpec::Core::MockingAdapters.const_get(const_name)
507
+ end
508
+
509
+ new_name, old_name = [framework_module, @mock_framework].map do |mod|
510
+ mod.respond_to?(:framework_name) ? mod.framework_name : :unnamed
511
+ end
512
+
513
+ unless new_name == old_name
514
+ assert_no_example_groups_defined(:mock_framework)
515
+ end
516
+
517
+ if block_given?
518
+ raise "#{framework_module} must respond to `configuration` so that mock_with can yield it." unless framework_module.respond_to?(:configuration)
519
+ yield framework_module.configuration
520
+ end
521
+
522
+ @mock_framework = framework_module
523
+ end
524
+
525
+ # Returns the configured expectation framework adapter module(s)
526
+ def expectation_frameworks
527
+ if @expectation_frameworks.empty?
528
+ begin
529
+ expect_with :rspec
530
+ rescue LoadError
531
+ expect_with Module.new
532
+ end
533
+ end
534
+ @expectation_frameworks
535
+ end
536
+
537
+ # Delegates to expect_with(framework)
538
+ def expectation_framework=(framework)
539
+ expect_with(framework)
540
+ end
541
+
542
+ # Sets the expectation framework module(s) to be included in each example
543
+ # group.
544
+ #
545
+ # `frameworks` can be `:rspec`, `:test_unit`, `:minitest`, a custom
546
+ # module, or any combination thereof:
547
+ #
548
+ # config.expect_with :rspec
549
+ # config.expect_with :test_unit
550
+ # config.expect_with :minitest
551
+ # config.expect_with :rspec, :minitest
552
+ # config.expect_with OtherExpectationFramework
553
+ #
554
+ # RSpec will translate `:rspec`, `:minitest`, and `:test_unit` into the
555
+ # appropriate modules.
556
+ #
557
+ # ## Configuration
558
+ #
559
+ # If the module responds to `configuration`, `expect_with` will
560
+ # yield the `configuration` object if given a block:
561
+ #
562
+ # config.expect_with OtherExpectationFramework do |custom_config|
563
+ # custom_config.custom_setting = true
564
+ # end
565
+ def expect_with(*frameworks)
566
+ modules = frameworks.map do |framework|
567
+ case framework
568
+ when Module
569
+ framework
570
+ when :rspec
571
+ require 'rspec/expectations'
572
+ self.expecting_with_rspec = true
573
+ ::RSpec::Matchers
574
+ when :test_unit
575
+ require 'rspec/core/test_unit_assertions_adapter'
576
+ ::RSpec::Core::TestUnitAssertionsAdapter
577
+ when :minitest
578
+ require 'rspec/core/minitest_assertions_adapter'
579
+ ::RSpec::Core::MinitestAssertionsAdapter
580
+ else
581
+ raise ArgumentError, "#{framework.inspect} is not supported"
582
+ end
583
+ end
584
+
585
+ if (modules - @expectation_frameworks).any?
586
+ assert_no_example_groups_defined(:expect_with)
587
+ end
588
+
589
+ if block_given?
590
+ raise "expect_with only accepts a block with a single argument. Call expect_with #{modules.length} times, once with each argument, instead." if modules.length > 1
591
+ raise "#{modules.first} must respond to `configuration` so that expect_with can yield it." unless modules.first.respond_to?(:configuration)
592
+ yield modules.first.configuration
593
+ end
594
+
595
+ @expectation_frameworks.push(*modules)
596
+ end
597
+
598
+ # Check if full backtrace is enabled
599
+ # @return [Boolean] is full backtrace enabled
600
+ def full_backtrace?
601
+ @backtrace_formatter.full_backtrace?
602
+ end
603
+
604
+ # Toggle full backtrace
605
+ # @attr true_or_false [Boolean] toggle full backtrace display
606
+ def full_backtrace=(true_or_false)
607
+ @backtrace_formatter.full_backtrace = true_or_false
608
+ end
609
+
610
+ # Returns the configuration option for color, but should not
611
+ # be used to check if color is supported.
612
+ #
613
+ # @see color_enabled?
614
+ # @return [Boolean]
615
+ def color
616
+ value_for(:color, @color)
617
+ end
618
+
619
+ # Check if color is enabled for a particular output
620
+ # @param output [IO] an output stream to use, defaults to the current
621
+ # `output_stream`
622
+ # @return [Boolean]
623
+ def color_enabled?(output=output_stream)
624
+ output_to_tty?(output) && color
625
+ end
626
+
627
+ # Toggle output color
628
+ # @attr true_or_false [Boolean] toggle color enabled
629
+ def color=(true_or_false)
630
+ return unless true_or_false
631
+
632
+ if RSpec.world.windows_os? && !ENV['ANSICON']
633
+ RSpec.warning "You must use ANSICON 1.31 or later (http://adoxa.3eeweb.com/ansicon/) to use colour on Windows"
634
+ @color = false
635
+ else
636
+ @color = true
637
+ end
638
+ end
639
+
640
+ # @private
641
+ def libs=(libs)
642
+ libs.map do |lib|
643
+ @libs.unshift lib
644
+ $LOAD_PATH.unshift lib
645
+ end
646
+ end
647
+
648
+ # Run examples matching on `description` in all files to run.
649
+ # @param description [String, Regexp] the pattern to filter on
650
+ def full_description=(description)
651
+ filter_run :full_description => Regexp.union(*Array(description).map { |d| Regexp.new(d) })
652
+ end
653
+
654
+ # @return [Array] full description filter
655
+ def full_description
656
+ filter.fetch :full_description, nil
657
+ end
658
+
659
+ # @overload add_formatter(formatter)
660
+ #
661
+ # Adds a formatter to the formatters collection. `formatter` can be a
662
+ # string representing any of the built-in formatters (see
663
+ # `built_in_formatter`), or a custom formatter class.
664
+ #
665
+ # ### Note
666
+ #
667
+ # For internal purposes, `add_formatter` also accepts the name of a class
668
+ # and paths to use for output streams, but you should consider that a
669
+ # private api that may change at any time without notice.
670
+ def add_formatter(formatter_to_use, *paths)
671
+ paths << output_stream if paths.empty?
672
+ formatter_loader.add formatter_to_use, *paths
673
+ end
674
+ alias_method :formatter=, :add_formatter
675
+
676
+ # The formatter that will be used if no formatter has been set.
677
+ # Defaults to 'progress'.
678
+ def default_formatter
679
+ formatter_loader.default_formatter
680
+ end
681
+
682
+ # Sets a fallback formatter to use if none other has been set.
683
+ #
684
+ # @example
685
+ #
686
+ # RSpec.configure do |rspec|
687
+ # rspec.default_formatter = 'doc'
688
+ # end
689
+ def default_formatter=(value)
690
+ formatter_loader.default_formatter = value
691
+ end
692
+
693
+ # Returns a duplicate of the formatters currently loaded in
694
+ # the `FormatterLoader` for introspection.
695
+ #
696
+ # Note as this is a duplicate, any mutations will be disregarded.
697
+ #
698
+ # @return [Array] the formatters currently loaded
699
+ def formatters
700
+ formatter_loader.formatters.dup
701
+ end
702
+
703
+ # @private
704
+ def formatter_loader
705
+ @formatter_loader ||= Formatters::Loader.new(Reporter.new(self))
706
+ end
707
+
708
+ # @private
709
+ #
710
+ # This buffer is used to capture all messages sent to the reporter during
711
+ # reporter initialization. It can then replay those messages after the
712
+ # formatter is correctly initialized. Otherwise, deprecation warnings
713
+ # during formatter initialization can cause an infinite loop.
714
+ class DeprecationReporterBuffer
715
+ def initialize
716
+ @calls = []
717
+ end
718
+
719
+ def deprecation(*args)
720
+ @calls << args
721
+ end
722
+
723
+ def play_onto(reporter)
724
+ @calls.each do |args|
725
+ reporter.deprecation(*args)
726
+ end
727
+ end
728
+ end
729
+
730
+ # @private
731
+ def reporter
732
+ # @reporter_buffer should only ever be set in this method to cover
733
+ # initialization of @reporter.
734
+ @reporter_buffer || @reporter ||=
735
+ begin
736
+ @reporter_buffer = DeprecationReporterBuffer.new
737
+ formatter_loader.setup_default output_stream, deprecation_stream
738
+ @reporter_buffer.play_onto(formatter_loader.reporter)
739
+ @reporter_buffer = nil
740
+ formatter_loader.reporter
741
+ end
742
+ end
743
+
744
+ # @api private
745
+ #
746
+ # Defaults `profile_examples` to 10 examples when `@profile_examples` is `true`.
747
+ #
748
+ def profile_examples
749
+ profile = value_for(:profile_examples, @profile_examples)
750
+ if profile && !profile.is_a?(Integer)
751
+ 10
752
+ else
753
+ profile
754
+ end
755
+ end
756
+
757
+ # @private
758
+ def files_or_directories_to_run=(*files)
759
+ files = files.flatten
760
+ files << default_path if (command == 'rspec' || Runner.running_in_drb?) && default_path && files.empty?
761
+ @files_or_directories_to_run = files
762
+ @files_to_run = nil
763
+ end
764
+
765
+ # The spec files RSpec will run
766
+ # @return [Array] specified files about to run
767
+ def files_to_run
768
+ @files_to_run ||= get_files_to_run(@files_or_directories_to_run)
769
+ end
770
+
771
+ # Creates a method that delegates to `example` including the submitted
772
+ # `args`. Used internally to add variants of `example` like `pending`:
773
+ # @param name [String] example name alias
774
+ # @param args [Array<Symbol>, Hash] metadata for the generated example
775
+ #
776
+ # @note The specific example alias below (`pending`) is already
777
+ # defined for you.
778
+ # @note Use with caution. This extends the language used in your
779
+ # specs, but does not add any additional documentation. We use this
780
+ # in rspec to define methods like `focus` and `xit`, but we also add
781
+ # docs for those methods.
782
+ #
783
+ # @example
784
+ # RSpec.configure do |config|
785
+ # config.alias_example_to :pending, :pending => true
786
+ # end
787
+ #
788
+ # # This lets you do this:
789
+ #
790
+ # describe Thing do
791
+ # pending "does something" do
792
+ # thing = Thing.new
793
+ # end
794
+ # end
795
+ #
796
+ # # ... which is the equivalent of
797
+ #
798
+ # describe Thing do
799
+ # it "does something", :pending => true do
800
+ # thing = Thing.new
801
+ # end
802
+ # end
803
+ def alias_example_to(name, *args)
804
+ extra_options = Metadata.build_hash_from(args)
805
+ RSpec::Core::ExampleGroup.define_example_method(name, extra_options)
806
+ end
807
+
808
+ # Creates a method that defines an example group with the provided
809
+ # metadata. Can be used to define example group/metadata shortcuts.
810
+ #
811
+ # @example
812
+ # RSpec.configure do |config|
813
+ # config.alias_example_group_to :describe_model, :type => :model
814
+ # end
815
+ #
816
+ # shared_context_for "model tests", :type => :model do
817
+ # # define common model test helper methods, `let` declarations, etc
818
+ # end
819
+ #
820
+ # # This lets you do this:
821
+ #
822
+ # RSpec.describe_model User do
823
+ # end
824
+ #
825
+ # # ... which is the equivalent of
826
+ #
827
+ # RSpec.describe User, :type => :model do
828
+ # end
829
+ #
830
+ # @note The defined aliased will also be added to the top level
831
+ # (e.g. `main` and from within modules) if
832
+ # `expose_dsl_globally` is set to true.
833
+ # @see #alias_example_to
834
+ # @see #expose_dsl_globally=
835
+ def alias_example_group_to(new_name, *args)
836
+ extra_options = Metadata.build_hash_from(args)
837
+ RSpec::Core::ExampleGroup.define_example_group_method(new_name, extra_options)
838
+ end
839
+
840
+ # Define an alias for it_should_behave_like that allows different
841
+ # language (like "it_has_behavior" or "it_behaves_like") to be
842
+ # employed when including shared examples.
843
+ #
844
+ # @example
845
+ # RSpec.configure do |config|
846
+ # config.alias_it_behaves_like_to(:it_has_behavior, 'has behavior:')
847
+ # end
848
+ #
849
+ # # allows the user to include a shared example group like:
850
+ #
851
+ # describe Entity do
852
+ # it_has_behavior 'sortability' do
853
+ # let(:sortable) { Entity.new }
854
+ # end
855
+ # end
856
+ #
857
+ # # which is reported in the output as:
858
+ # # Entity
859
+ # # has behavior: sortability
860
+ # # ...sortability examples here
861
+ #
862
+ # @note Use with caution. This extends the language used in your
863
+ # specs, but does not add any additional documentation. We use this
864
+ # in rspec to define `it_should_behave_like` (for backward
865
+ # compatibility), but we also add docs for that method.
866
+ def alias_it_behaves_like_to(new_name, report_label='')
867
+ RSpec::Core::ExampleGroup.define_nested_shared_group_method(new_name, report_label)
868
+ end
869
+ alias_method :alias_it_should_behave_like_to, :alias_it_behaves_like_to
870
+
871
+ # Adds key/value pairs to the `inclusion_filter`. If `args`
872
+ # includes any symbols that are not part of the hash, each symbol
873
+ # is treated as a key in the hash with the value `true`.
874
+ #
875
+ # ### Note
876
+ #
877
+ # Filters set using this method can be overridden from the command line
878
+ # or config files (e.g. `.rspec`).
879
+ #
880
+ # @example
881
+ # # given this declaration
882
+ # describe "something", :foo => 'bar' do
883
+ # # ...
884
+ # end
885
+ #
886
+ # # any of the following will include that group
887
+ # config.filter_run_including :foo => 'bar'
888
+ # config.filter_run_including :foo => /^ba/
889
+ # config.filter_run_including :foo => lambda {|v| v == 'bar'}
890
+ # config.filter_run_including :foo => lambda {|v,m| m[:foo] == 'bar'}
891
+ #
892
+ # # given a proc with an arity of 1, the lambda is passed the value related to the key, e.g.
893
+ # config.filter_run_including :foo => lambda {|v| v == 'bar'}
894
+ #
895
+ # # given a proc with an arity of 2, the lambda is passed the value related to the key,
896
+ # # and the metadata itself e.g.
897
+ # config.filter_run_including :foo => lambda {|v,m| m[:foo] == 'bar'}
898
+ #
899
+ # filter_run_including :foo # same as filter_run_including :foo => true
900
+ def filter_run_including(*args)
901
+ meta = Metadata.build_hash_from(args, :warn_about_example_group_filtering)
902
+ filter_manager.include_with_low_priority meta
903
+ end
904
+
905
+ alias_method :filter_run, :filter_run_including
906
+
907
+ # Clears and reassigns the `inclusion_filter`. Set to `nil` if you don't
908
+ # want any inclusion filter at all.
909
+ #
910
+ # ### Warning
911
+ #
912
+ # This overrides any inclusion filters/tags set on the command line or in
913
+ # configuration files.
914
+ def inclusion_filter=(filter)
915
+ meta = Metadata.build_hash_from([filter], :warn_about_example_group_filtering)
916
+ filter_manager.include_only meta
917
+ end
918
+
919
+ alias_method :filter=, :inclusion_filter=
920
+
921
+ # Returns the `inclusion_filter`. If none has been set, returns an empty
922
+ # hash.
923
+ def inclusion_filter
924
+ filter_manager.inclusions
925
+ end
926
+
927
+ alias_method :filter, :inclusion_filter
928
+
929
+ # Adds key/value pairs to the `exclusion_filter`. If `args`
930
+ # includes any symbols that are not part of the hash, each symbol
931
+ # is treated as a key in the hash with the value `true`.
932
+ #
933
+ # ### Note
934
+ #
935
+ # Filters set using this method can be overridden from the command line
936
+ # or config files (e.g. `.rspec`).
937
+ #
938
+ # @example
939
+ # # given this declaration
940
+ # describe "something", :foo => 'bar' do
941
+ # # ...
942
+ # end
943
+ #
944
+ # # any of the following will exclude that group
945
+ # config.filter_run_excluding :foo => 'bar'
946
+ # config.filter_run_excluding :foo => /^ba/
947
+ # config.filter_run_excluding :foo => lambda {|v| v == 'bar'}
948
+ # config.filter_run_excluding :foo => lambda {|v,m| m[:foo] == 'bar'}
949
+ #
950
+ # # given a proc with an arity of 1, the lambda is passed the value related to the key, e.g.
951
+ # config.filter_run_excluding :foo => lambda {|v| v == 'bar'}
952
+ #
953
+ # # given a proc with an arity of 2, the lambda is passed the value related to the key,
954
+ # # and the metadata itself e.g.
955
+ # config.filter_run_excluding :foo => lambda {|v,m| m[:foo] == 'bar'}
956
+ #
957
+ # filter_run_excluding :foo # same as filter_run_excluding :foo => true
958
+ def filter_run_excluding(*args)
959
+ meta = Metadata.build_hash_from(args, :warn_about_example_group_filtering)
960
+ filter_manager.exclude_with_low_priority meta
961
+ end
962
+
963
+ # Clears and reassigns the `exclusion_filter`. Set to `nil` if you don't
964
+ # want any exclusion filter at all.
965
+ #
966
+ # ### Warning
967
+ #
968
+ # This overrides any exclusion filters/tags set on the command line or in
969
+ # configuration files.
970
+ def exclusion_filter=(filter)
971
+ meta = Metadata.build_hash_from([filter], :warn_about_example_group_filtering)
972
+ filter_manager.exclude_only meta
973
+ end
974
+
975
+ # Returns the `exclusion_filter`. If none has been set, returns an empty
976
+ # hash.
977
+ def exclusion_filter
978
+ filter_manager.exclusions
979
+ end
980
+
981
+ # Tells RSpec to include `mod` in example groups. Methods defined in
982
+ # `mod` are exposed to examples (not example groups). Use `filters` to
983
+ # constrain the groups in which to include the module.
984
+ #
985
+ # @example
986
+ #
987
+ # module AuthenticationHelpers
988
+ # def login_as(user)
989
+ # # ...
990
+ # end
991
+ # end
992
+ #
993
+ # module UserHelpers
994
+ # def users(username)
995
+ # # ...
996
+ # end
997
+ # end
998
+ #
999
+ # RSpec.configure do |config|
1000
+ # config.include(UserHelpers) # included in all modules
1001
+ # config.include(AuthenticationHelpers, :type => :request)
1002
+ # end
1003
+ #
1004
+ # describe "edit profile", :type => :request do
1005
+ # it "can be viewed by owning user" do
1006
+ # login_as users(:jdoe)
1007
+ # get "/profiles/jdoe"
1008
+ # assert_select ".username", :text => 'jdoe'
1009
+ # end
1010
+ # end
1011
+ #
1012
+ # @see #extend
1013
+ def include(mod, *filters)
1014
+ meta = Metadata.build_hash_from(filters, :warn_about_example_group_filtering)
1015
+ include_or_extend_modules << [:include, mod, meta]
1016
+ end
1017
+
1018
+ # Tells RSpec to extend example groups with `mod`. Methods defined in
1019
+ # `mod` are exposed to example groups (not examples). Use `filters` to
1020
+ # constrain the groups to extend.
1021
+ #
1022
+ # Similar to `include`, but behavior is added to example groups, which
1023
+ # are classes, rather than the examples, which are instances of those
1024
+ # classes.
1025
+ #
1026
+ # @example
1027
+ #
1028
+ # module UiHelpers
1029
+ # def run_in_browser
1030
+ # # ...
1031
+ # end
1032
+ # end
1033
+ #
1034
+ # RSpec.configure do |config|
1035
+ # config.extend(UiHelpers, :type => :request)
1036
+ # end
1037
+ #
1038
+ # describe "edit profile", :type => :request do
1039
+ # run_in_browser
1040
+ #
1041
+ # it "does stuff in the client" do
1042
+ # # ...
1043
+ # end
1044
+ # end
1045
+ #
1046
+ # @see #include
1047
+ def extend(mod, *filters)
1048
+ meta = Metadata.build_hash_from(filters, :warn_about_example_group_filtering)
1049
+ include_or_extend_modules << [:extend, mod, meta]
1050
+ end
1051
+
1052
+ # @private
1053
+ #
1054
+ # Used internally to extend a group with modules using `include` and/or
1055
+ # `extend`.
1056
+ def configure_group(group)
1057
+ include_or_extend_modules.each do |include_or_extend, mod, filters|
1058
+ next unless filters.empty? || group.any_apply?(filters)
1059
+ __send__("safe_#{include_or_extend}", mod, group)
1060
+ end
1061
+ end
1062
+
1063
+ # @private
1064
+ def safe_include(mod, host)
1065
+ host.__send__(:include, mod) unless host < mod
1066
+ end
1067
+
1068
+ # @private
1069
+ def requires=(paths)
1070
+ directories = ['lib', default_path].select { |p| File.directory? p }
1071
+ RSpec::Core::RubyProject.add_to_load_path(*directories)
1072
+ paths.each { |path| require path }
1073
+ @requires += paths
1074
+ end
1075
+
1076
+ # @private
1077
+ if RUBY_VERSION.to_f >= 1.9
1078
+ # @private
1079
+ def safe_extend(mod, host)
1080
+ host.extend(mod) unless host.singleton_class < mod
1081
+ end
1082
+ else
1083
+ # @private
1084
+ def safe_extend(mod, host)
1085
+ host.extend(mod) unless (class << host; self; end).included_modules.include?(mod)
1086
+ end
1087
+ end
1088
+
1089
+ # @private
1090
+ def configure_mock_framework
1091
+ RSpec::Core::ExampleGroup.__send__(:include, mock_framework)
1092
+ conditionally_disable_mocks_monkey_patching
1093
+ end
1094
+
1095
+ # @private
1096
+ def configure_expectation_framework
1097
+ expectation_frameworks.each do |framework|
1098
+ RSpec::Core::ExampleGroup.__send__(:include, framework)
1099
+ end
1100
+ conditionally_disable_expectations_monkey_patching
1101
+ end
1102
+
1103
+ # @private
1104
+ def load_spec_files
1105
+ files_to_run.uniq.each { |f| load File.expand_path(f) }
1106
+ @spec_files_loaded = true
1107
+ end
1108
+
1109
+ # @private
1110
+ DEFAULT_FORMATTER = lambda { |string| string }
1111
+
1112
+ # Formats the docstring output using the block provided.
1113
+ #
1114
+ # @example
1115
+ # # This will strip the descriptions of both examples and example groups.
1116
+ # RSpec.configure do |config|
1117
+ # config.format_docstrings { |s| s.strip }
1118
+ # end
1119
+ def format_docstrings(&block)
1120
+ @format_docstrings_block = block_given? ? block : DEFAULT_FORMATTER
1121
+ end
1122
+
1123
+ # @private
1124
+ def format_docstrings_block
1125
+ @format_docstrings_block ||= DEFAULT_FORMATTER
1126
+ end
1127
+
1128
+ # @private
1129
+ # @macro [attach] delegate_to_ordering_manager
1130
+ # @!method $1
1131
+ def self.delegate_to_ordering_manager(*methods)
1132
+ methods.each do |method|
1133
+ define_method method do |*args, &block|
1134
+ ordering_manager.__send__(method, *args, &block)
1135
+ end
1136
+ end
1137
+ end
1138
+
1139
+ # @macro delegate_to_ordering_manager
1140
+ #
1141
+ # Sets the seed value and sets the default global ordering to random.
1142
+ delegate_to_ordering_manager :seed=
1143
+
1144
+ # @macro delegate_to_ordering_manager
1145
+ # Seed for random ordering (default: generated randomly each run).
1146
+ #
1147
+ # When you run specs with `--order random`, RSpec generates a random seed
1148
+ # for the randomization and prints it to the `output_stream` (assuming
1149
+ # you're using RSpec's built-in formatters). If you discover an ordering
1150
+ # dependency (i.e. examples fail intermittently depending on order), set
1151
+ # this (on Configuration or on the command line with `--seed`) to run
1152
+ # using the same seed while you debug the issue.
1153
+ #
1154
+ # We recommend, actually, that you use the command line approach so you
1155
+ # don't accidentally leave the seed encoded.
1156
+ delegate_to_ordering_manager :seed
1157
+
1158
+ # @macro delegate_to_ordering_manager
1159
+ #
1160
+ # Sets the default global order and, if order is `'rand:<seed>'`, also sets the seed.
1161
+ delegate_to_ordering_manager :order=
1162
+
1163
+ # @macro delegate_to_ordering_manager
1164
+ # Registers a named ordering strategy that can later be
1165
+ # used to order an example group's subgroups by adding
1166
+ # `:order => <name>` metadata to the example group.
1167
+ #
1168
+ # @param name [Symbol] The name of the ordering.
1169
+ # @yield Block that will order the given examples or example groups
1170
+ # @yieldparam list [Array<RSpec::Core::Example>, Array<RSpec::Core::ExampleGroup>] The examples or groups to order
1171
+ # @yieldreturn [Array<RSpec::Core::Example>, Array<RSpec::Core::ExampleGroup>] The re-ordered examples or groups
1172
+ #
1173
+ # @example
1174
+ # RSpec.configure do |rspec|
1175
+ # rspec.register_ordering :reverse do |list|
1176
+ # list.reverse
1177
+ # end
1178
+ # end
1179
+ #
1180
+ # describe MyClass, :order => :reverse do
1181
+ # # ...
1182
+ # end
1183
+ #
1184
+ # @note Pass the symbol `:global` to set the ordering strategy that
1185
+ # will be used to order the top-level example groups and any example
1186
+ # groups that do not have declared `:order` metadata.
1187
+ delegate_to_ordering_manager :register_ordering
1188
+
1189
+ # @private
1190
+ delegate_to_ordering_manager :seed_used?, :ordering_registry
1191
+
1192
+ # Set Ruby warnings on or off
1193
+ def warnings=(value)
1194
+ $VERBOSE = !!value
1195
+ end
1196
+
1197
+ # @return [Boolean] Whether or not ruby warnings are enabled.
1198
+ def warnings?
1199
+ $VERBOSE
1200
+ end
1201
+
1202
+ # Exposes the current running example via the named
1203
+ # helper method. RSpec 2.x exposed this via `example`,
1204
+ # but in RSpec 3.0, the example is instead exposed via
1205
+ # an arg yielded to `it`, `before`, `let`, etc. However,
1206
+ # some extension gems (such as Capybara) depend on the
1207
+ # RSpec 2.x's `example` method, so this config option
1208
+ # can be used to maintain compatibility.
1209
+ #
1210
+ # @param method_name [Symbol] the name of the helper method
1211
+ #
1212
+ # @example
1213
+ #
1214
+ # RSpec.configure do |rspec|
1215
+ # rspec.expose_current_running_example_as :example
1216
+ # end
1217
+ #
1218
+ # describe MyClass do
1219
+ # before do
1220
+ # # `example` can be used here because of the above config.
1221
+ # do_something if example.metadata[:type] == "foo"
1222
+ # end
1223
+ # end
1224
+ def expose_current_running_example_as(method_name)
1225
+ ExposeCurrentExample.module_exec do
1226
+ extend RSpec::SharedContext
1227
+ let(method_name) { |ex| ex }
1228
+ end
1229
+
1230
+ include ExposeCurrentExample
1231
+ end
1232
+
1233
+ # @private
1234
+ module ExposeCurrentExample; end
1235
+
1236
+ # Turns deprecation warnings into errors, in order to surface
1237
+ # the full backtrace of the call site. This can be useful when
1238
+ # you need more context to address a deprecation than the
1239
+ # single-line call site normally provided.
1240
+ #
1241
+ # @example
1242
+ #
1243
+ # RSpec.configure do |rspec|
1244
+ # rspec.raise_errors_for_deprecations!
1245
+ # end
1246
+ def raise_errors_for_deprecations!
1247
+ self.deprecation_stream = Formatters::DeprecationFormatter::RaiseErrorStream.new
1248
+ end
1249
+
1250
+ # Enables zero monkey patching mode for RSpec. It removes monkey
1251
+ # patching of the top-level DSL methods (`describe`,
1252
+ # `shared_examples_for`, etc) onto `main` and `Module`, instead
1253
+ # requiring you to prefix these methods with `RSpec.`. It enables
1254
+ # expect-only syntax for rspec-mocks and rspec-expectations. It
1255
+ # simply disables monkey patching on whatever pieces of rspec
1256
+ # the user is using.
1257
+ #
1258
+ # @note It configures rspec-mocks and rspec-expectations only
1259
+ # if the user is using those (either explicitly or implicitly
1260
+ # by not setting `mock_with` or `expect_with` to anything else).
1261
+ #
1262
+ # @note If the user uses this options with `mock_with :mocha`
1263
+ # (or similiar) they will still have monkey patching active
1264
+ # in their test environment from mocha.
1265
+ #
1266
+ # @example
1267
+ #
1268
+ # # It disables all monkey patching
1269
+ # RSpec.configure do |config|
1270
+ # config.disable_monkey_patching!
1271
+ # end
1272
+ #
1273
+ # # Is an equivalent to
1274
+ # RSpec.configure do |config|
1275
+ # config.expose_dsl_globally = false
1276
+ #
1277
+ # config.mock_with :rspec do |mocks|
1278
+ # mocks.syntax = :expect
1279
+ # mocks.patch_marshal_to_support_partial_doubles = false
1280
+ # end
1281
+ #
1282
+ # config.mock_with :rspec do |expectations|
1283
+ # expectations.syntax = :expect
1284
+ # end
1285
+ # end
1286
+ def disable_monkey_patching!
1287
+ self.expose_dsl_globally = false
1288
+ self.disable_monkey_patching = true
1289
+ conditionally_disable_mocks_monkey_patching
1290
+ conditionally_disable_expectations_monkey_patching
1291
+ end
1292
+
1293
+ # @private
1294
+ attr_accessor :disable_monkey_patching
1295
+
1296
+ # Defines a callback that can assign derived metadata values.
1297
+ #
1298
+ # @param filters [Array<Symbol>, Hash] metadata filters that determine which example
1299
+ # or group metadata hashes the callback will be triggered for. If none are given,
1300
+ # the callback will be run against the metadata hashes of all groups and examples.
1301
+ # @yieldparam metadata [Hash] original metadata hash from an example or group. Mutate this in
1302
+ # your block as needed.
1303
+ #
1304
+ # @example
1305
+ # RSpec.configure do |config|
1306
+ # # Tag all groups and examples in the spec/unit directory with :type => :unit
1307
+ # config.define_derived_metadata(:file_path => %r{/spec/unit/}) do |metadata|
1308
+ # metadata[:type] = :unit
1309
+ # end
1310
+ # end
1311
+ def define_derived_metadata(*filters, &block)
1312
+ meta = Metadata.build_hash_from(filters, :warn_about_example_group_filtering)
1313
+ @derived_metadata_blocks << [meta, block]
1314
+ end
1315
+
1316
+ # @private
1317
+ def apply_derived_metadata_to(metadata)
1318
+ @derived_metadata_blocks.each do |filter, block|
1319
+ block.call(metadata) if filter.empty? || MetadataFilter.any_apply?(filter, metadata)
1320
+ end
1321
+ end
1322
+
1323
+ private
1324
+
1325
+ def get_files_to_run(paths)
1326
+ FlatMap.flat_map(paths_to_check(paths)) do |path|
1327
+ path = path.gsub(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
1328
+ File.directory?(path) ? gather_directories(path) : extract_location(path)
1329
+ end.sort.uniq
1330
+ end
1331
+
1332
+ def paths_to_check(paths)
1333
+ return paths if pattern_might_load_specs_from_vendored_dirs?
1334
+ paths + ['.']
1335
+ end
1336
+
1337
+ def pattern_might_load_specs_from_vendored_dirs?
1338
+ pattern.split(File::SEPARATOR).first.include?('**')
1339
+ end
1340
+
1341
+ def gather_directories(path)
1342
+ include_files = get_matching_files(path, pattern)
1343
+ exclude_files = get_matching_files(path, exclude_pattern)
1344
+ (include_files - exclude_files).sort.uniq
1345
+ end
1346
+
1347
+ def get_matching_files(path, pattern)
1348
+ Dir[file_glob_from(path, pattern)].map { |file| File.expand_path(file) }
1349
+ end
1350
+
1351
+ def file_glob_from(path, pattern)
1352
+ stripped = "{#{pattern.gsub(/\s*,\s*/, ',')}}"
1353
+ return stripped if pattern =~ /^(\.\/)?#{Regexp.escape path}/ || absolute_pattern?(pattern)
1354
+ File.join(path, stripped)
1355
+ end
1356
+
1357
+ if RSpec::Support::OS.windows?
1358
+ def absolute_pattern?(pattern)
1359
+ pattern =~ /\A[A-Z]:\\/ || windows_absolute_network_path?(pattern)
1360
+ end
1361
+
1362
+ def windows_absolute_network_path?(pattern)
1363
+ return false unless ::File::ALT_SEPARATOR
1364
+ pattern.start_with?(::File::ALT_SEPARATOR + ::File::ALT_SEPARATOR)
1365
+ end
1366
+ else
1367
+ def absolute_pattern?(pattern)
1368
+ pattern.start_with?(File::Separator)
1369
+ end
1370
+ end
1371
+
1372
+ def extract_location(path)
1373
+ match = /^(.*?)((?:\:\d+)+)$/.match(path)
1374
+
1375
+ if match
1376
+ captures = match.captures
1377
+ path, lines = captures[0], captures[1][1..-1].split(":").map { |n| n.to_i }
1378
+ filter_manager.add_location path, lines
1379
+ end
1380
+
1381
+ return [] if path == default_path
1382
+ path
1383
+ end
1384
+
1385
+ def command
1386
+ $0.split(File::SEPARATOR).last
1387
+ end
1388
+
1389
+ def value_for(key, default=nil)
1390
+ @preferred_options.key?(key) ? @preferred_options[key] : default
1391
+ end
1392
+
1393
+ def assert_no_example_groups_defined(config_option)
1394
+ return unless RSpec.world.example_groups.any?
1395
+
1396
+ raise MustBeConfiguredBeforeExampleGroupsError.new(
1397
+ "RSpec's #{config_option} configuration option must be configured before " \
1398
+ "any example groups are defined, but you have already defined a group."
1399
+ )
1400
+ end
1401
+
1402
+ def output_to_tty?(output=output_stream)
1403
+ tty? || (output.respond_to?(:tty?) && output.tty?)
1404
+ end
1405
+
1406
+ def conditionally_disable_mocks_monkey_patching
1407
+ return unless disable_monkey_patching && rspec_mocks_loaded?
1408
+
1409
+ RSpec::Mocks.configuration.tap do |config|
1410
+ config.syntax = :expect
1411
+ config.patch_marshal_to_support_partial_doubles = false
1412
+ end
1413
+ end
1414
+
1415
+ def conditionally_disable_expectations_monkey_patching
1416
+ return unless disable_monkey_patching && rspec_expectations_loaded?
1417
+
1418
+ RSpec::Expectations.configuration.syntax = :expect
1419
+ end
1420
+
1421
+ def rspec_mocks_loaded?
1422
+ defined?(RSpec::Mocks.configuration)
1423
+ end
1424
+
1425
+ def rspec_expectations_loaded?
1426
+ defined?(RSpec::Expectations.configuration)
1427
+ end
1428
+
1429
+ def update_pattern_attr(name, value)
1430
+ if @spec_files_loaded
1431
+ RSpec.warning "Configuring `#{name}` to #{value} has no effect since RSpec has already loaded the spec files."
1432
+ end
1433
+
1434
+ instance_variable_set(:"@#{name}", value)
1435
+ @files_to_run = nil
1436
+ end
1437
+ end
1438
+ # rubocop:enable Style/ClassLength
1439
+ end
1440
+ end