opal-rspec 0.4.3 → 0.5.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +9 -3
  4. data/Gemfile +6 -5
  5. data/README.md +73 -13
  6. data/Rakefile +108 -12
  7. data/lib/opal/rspec/version.rb +1 -1
  8. data/lib/opal/rspec.rb +35 -12
  9. data/opal/opal/rspec/async/async_example.rb +87 -0
  10. data/opal/opal/rspec/async/example_group.rb +94 -0
  11. data/opal/opal/rspec/async/hooks.rb +46 -0
  12. data/opal/opal/rspec/async/legacy.rb +50 -0
  13. data/opal/opal/rspec/async.rb +4 -289
  14. data/opal/opal/rspec/browser_formatter.rb +55 -18
  15. data/opal/opal/rspec/fixes/caller_filter.rb +6 -0
  16. data/opal/opal/rspec/fixes/example.rb +20 -0
  17. data/opal/opal/rspec/fixes/example_groups.rb +32 -0
  18. data/opal/opal/rspec/fixes/expectations.rb +21 -0
  19. data/opal/opal/rspec/fixes/formatter.rb +62 -0
  20. data/opal/opal/rspec/fixes/kernel.rb +35 -0
  21. data/opal/opal/rspec/fixes/matchers.rb +15 -0
  22. data/opal/opal/rspec/fixes/mocks.rb +13 -0
  23. data/opal/opal/rspec/fixes/reporter.rb +12 -0
  24. data/opal/opal/rspec/fixes.rb +11 -115
  25. data/opal/opal/rspec/pre_require_fixes.rb +4 -0
  26. data/opal/opal/rspec/requires.rb +103 -35
  27. data/opal/opal/rspec/runner.rb +19 -15
  28. data/opal/opal/rspec/text_formatter.rb +24 -10
  29. data/opal/opal/rspec.rb +4 -9
  30. data/opal-rspec.gemspec +5 -2
  31. data/{vendor_lib → rspec/lib}/rspec/version.rb +1 -1
  32. data/{vendor_lib → rspec/lib}/rspec.rb +0 -0
  33. data/rspec-core/benchmarks/call_v_yield.rb +81 -0
  34. data/rspec-core/benchmarks/check_inclusion.rb +125 -0
  35. data/rspec-core/benchmarks/define_method_v_attr_reader_v_def.rb +81 -0
  36. data/rspec-core/benchmarks/eager_vs_lazy_metadata/define_examples.rb +22 -0
  37. data/rspec-core/benchmarks/eager_vs_lazy_metadata.rb +126 -0
  38. data/rspec-core/benchmarks/filter_object.rb +35 -0
  39. data/rspec-core/benchmarks/index_v_take_while.rb +47 -0
  40. data/rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb +94 -0
  41. data/rspec-core/benchmarks/require_relative_v_require.rb +75 -0
  42. data/rspec-core/benchmarks/respond_to_v_defined.rb +72 -0
  43. data/rspec-core/benchmarks/several_regexps_v_one_big_one.rb +86 -0
  44. data/rspec-core/benchmarks/sort_by_v_shuffle.rb +83 -0
  45. data/rspec-core/benchmarks/to_proc_v_not_to_proc.rb +539 -0
  46. data/rspec-core/features/step_definitions/additional_cli_steps.rb +126 -0
  47. data/rspec-core/features/step_definitions/core_standalone_steps.rb +12 -0
  48. data/rspec-core/features/support/env.rb +21 -0
  49. data/rspec-core/features/support/require_expect_syntax_in_aruba_specs.rb +29 -0
  50. data/rspec-core/features/support/rubinius.rb +6 -0
  51. data/{vendor_lib → rspec-core/lib}/rspec/autorun.rb +0 -0
  52. data/{vendor_lib → rspec-core/lib}/rspec/core/backport_random.rb +40 -6
  53. data/rspec-core/lib/rspec/core/backtrace_formatter.rb +66 -0
  54. data/{vendor_lib → rspec-core/lib}/rspec/core/configuration.rb +561 -250
  55. data/rspec-core/lib/rspec/core/configuration_options.rb +173 -0
  56. data/rspec-core/lib/rspec/core/drb.rb +111 -0
  57. data/rspec-core/lib/rspec/core/dsl.rb +93 -0
  58. data/rspec-core/lib/rspec/core/example.rb +502 -0
  59. data/rspec-core/lib/rspec/core/example_group.rb +606 -0
  60. data/rspec-core/lib/rspec/core/filter_manager.rb +259 -0
  61. data/{vendor_lib → rspec-core/lib}/rspec/core/flat_map.rb +1 -0
  62. data/rspec-core/lib/rspec/core/formatters/base_formatter.rb +67 -0
  63. data/rspec-core/lib/rspec/core/formatters/base_text_formatter.rb +76 -0
  64. data/rspec-core/lib/rspec/core/formatters/console_codes.rb +64 -0
  65. data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/deprecation_formatter.rb +65 -36
  66. data/rspec-core/lib/rspec/core/formatters/documentation_formatter.rb +68 -0
  67. data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/helpers.rb +18 -13
  68. data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/html_formatter.rb +69 -75
  69. data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/html_printer.rb +17 -22
  70. data/rspec-core/lib/rspec/core/formatters/json_formatter.rb +94 -0
  71. data/rspec-core/lib/rspec/core/formatters/profile_formatter.rb +65 -0
  72. data/rspec-core/lib/rspec/core/formatters/progress_formatter.rb +28 -0
  73. data/rspec-core/lib/rspec/core/formatters/protocol.rb +163 -0
  74. data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/snippet_extractor.rb +15 -12
  75. data/rspec-core/lib/rspec/core/formatters.rb +240 -0
  76. data/rspec-core/lib/rspec/core/hooks.rb +591 -0
  77. data/{vendor_lib → rspec-core/lib}/rspec/core/memoized_helpers.rb +82 -41
  78. data/rspec-core/lib/rspec/core/metadata.rb +437 -0
  79. data/rspec-core/lib/rspec/core/metadata_filter.rb +95 -0
  80. data/rspec-core/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
  81. data/rspec-core/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
  82. data/{vendor_lib/rspec/core/mocking/with_mocha.rb → rspec-core/lib/rspec/core/mocking_adapters/mocha.rb} +21 -16
  83. data/rspec-core/lib/rspec/core/mocking_adapters/null.rb +14 -0
  84. data/rspec-core/lib/rspec/core/mocking_adapters/rr.rb +31 -0
  85. data/rspec-core/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
  86. data/rspec-core/lib/rspec/core/notifications.rb +542 -0
  87. data/{vendor_lib → rspec-core/lib}/rspec/core/option_parser.rb +53 -65
  88. data/{vendor_lib → rspec-core/lib}/rspec/core/ordering.rb +11 -10
  89. data/rspec-core/lib/rspec/core/pending.rb +163 -0
  90. data/rspec-core/lib/rspec/core/project_initializer/spec/spec_helper.rb +89 -0
  91. data/rspec-core/lib/rspec/core/project_initializer.rb +48 -0
  92. data/rspec-core/lib/rspec/core/rake_task.rb +187 -0
  93. data/rspec-core/lib/rspec/core/reporter.rb +149 -0
  94. data/{vendor_lib → rspec-core/lib}/rspec/core/ruby_project.rb +3 -2
  95. data/rspec-core/lib/rspec/core/runner.rb +158 -0
  96. data/{vendor_lib → rspec-core/lib}/rspec/core/shared_context.rb +7 -5
  97. data/rspec-core/lib/rspec/core/shared_example_group.rb +182 -0
  98. data/rspec-core/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  99. data/rspec-core/lib/rspec/core/version.rb +9 -0
  100. data/rspec-core/lib/rspec/core/warnings.rb +40 -0
  101. data/{vendor_lib → rspec-core/lib}/rspec/core/world.rb +78 -26
  102. data/{vendor_lib → rspec-core/lib}/rspec/core.rb +64 -98
  103. data/rspec-core/spec/command_line/order_spec.rb +213 -0
  104. data/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb +306 -0
  105. data/rspec-core/spec/rspec/core/configuration_options_spec.rb +425 -0
  106. data/rspec-core/spec/rspec/core/configuration_spec.rb +1963 -0
  107. data/rspec-core/spec/rspec/core/drb_spec.rb +278 -0
  108. data/rspec-core/spec/rspec/core/dsl_spec.rb +85 -0
  109. data/rspec-core/spec/rspec/core/example_execution_result_spec.rb +142 -0
  110. data/rspec-core/spec/rspec/core/example_group_constants_spec.rb +16 -0
  111. data/rspec-core/spec/rspec/core/example_group_spec.rb +1621 -0
  112. data/rspec-core/spec/rspec/core/example_spec.rb +662 -0
  113. data/rspec-core/spec/rspec/core/failed_example_notification_spec.rb +25 -0
  114. data/rspec-core/spec/rspec/core/filter_manager_spec.rb +299 -0
  115. data/rspec-core/spec/rspec/core/formatters/base_text_formatter_spec.rb +182 -0
  116. data/rspec-core/spec/rspec/core/formatters/console_codes_spec.rb +65 -0
  117. data/rspec-core/spec/rspec/core/formatters/deprecation_formatter_spec.rb +225 -0
  118. data/rspec-core/spec/rspec/core/formatters/documentation_formatter_spec.rb +111 -0
  119. data/rspec-core/spec/rspec/core/formatters/helpers_spec.rb +104 -0
  120. data/rspec-core/spec/rspec/core/formatters/html_formatter_spec.rb +111 -0
  121. data/rspec-core/spec/rspec/core/formatters/json_formatter_spec.rb +183 -0
  122. data/rspec-core/spec/rspec/core/formatters/profile_formatter_spec.rb +99 -0
  123. data/rspec-core/spec/rspec/core/formatters/progress_formatter_spec.rb +55 -0
  124. data/rspec-core/spec/rspec/core/formatters/snippet_extractor_spec.rb +26 -0
  125. data/rspec-core/spec/rspec/core/formatters_spec.rb +160 -0
  126. data/rspec-core/spec/rspec/core/hooks_filtering_spec.rb +227 -0
  127. data/rspec-core/spec/rspec/core/hooks_spec.rb +447 -0
  128. data/rspec-core/spec/rspec/core/memoized_helpers_spec.rb +537 -0
  129. data/rspec-core/spec/rspec/core/metadata_filter_spec.rb +181 -0
  130. data/rspec-core/spec/rspec/core/metadata_spec.rb +642 -0
  131. data/rspec-core/spec/rspec/core/notifications_spec.rb +92 -0
  132. data/rspec-core/spec/rspec/core/option_parser_spec.rb +270 -0
  133. data/rspec-core/spec/rspec/core/ordering_spec.rb +102 -0
  134. data/rspec-core/spec/rspec/core/pending_example_spec.rb +221 -0
  135. data/rspec-core/spec/rspec/core/pending_spec.rb +8 -0
  136. data/rspec-core/spec/rspec/core/project_initializer_spec.rb +123 -0
  137. data/rspec-core/spec/rspec/core/rake_task_spec.rb +351 -0
  138. data/rspec-core/spec/rspec/core/random_spec.rb +47 -0
  139. data/rspec-core/spec/rspec/core/reporter_spec.rb +198 -0
  140. data/rspec-core/spec/rspec/core/resources/a_bar.rb +0 -0
  141. data/rspec-core/spec/rspec/core/resources/a_foo.rb +0 -0
  142. data/rspec-core/spec/rspec/core/resources/a_spec.rb +1 -0
  143. data/rspec-core/spec/rspec/core/resources/acceptance/bar.rb +0 -0
  144. data/rspec-core/spec/rspec/core/resources/acceptance/foo_spec.rb +0 -0
  145. data/rspec-core/spec/rspec/core/resources/custom_example_group_runner.rb +14 -0
  146. data/rspec-core/spec/rspec/core/resources/formatter_specs.rb +58 -0
  147. data/rspec-core/spec/rspec/core/resources/utf8_encoded.rb +9 -0
  148. data/rspec-core/spec/rspec/core/rspec_matchers_spec.rb +45 -0
  149. data/rspec-core/spec/rspec/core/ruby_project_spec.rb +26 -0
  150. data/rspec-core/spec/rspec/core/runner_spec.rb +309 -0
  151. data/rspec-core/spec/rspec/core/shared_context_spec.rb +102 -0
  152. data/rspec-core/spec/rspec/core/shared_example_group_spec.rb +268 -0
  153. data/rspec-core/spec/rspec/core/warnings_spec.rb +72 -0
  154. data/rspec-core/spec/rspec/core/world_spec.rb +142 -0
  155. data/rspec-core/spec/rspec/core_spec.rb +103 -0
  156. data/rspec-core/spec/spec_helper.rb +89 -0
  157. data/rspec-core/spec/support/config_options_helper.rb +13 -0
  158. data/rspec-core/spec/support/fake_minitest/minitest/minitest_assertions.rb +4 -0
  159. data/rspec-core/spec/support/fake_minitest/minitest.rb +0 -0
  160. data/rspec-core/spec/support/fake_minitest/test/unit/assertions.rb +6 -0
  161. data/rspec-core/spec/support/formatter_support.rb +263 -0
  162. data/rspec-core/spec/support/helper_methods.rb +26 -0
  163. data/rspec-core/spec/support/isolated_home_directory.rb +16 -0
  164. data/rspec-core/spec/support/matchers.rb +103 -0
  165. data/rspec-core/spec/support/mathn_integration_support.rb +12 -0
  166. data/rspec-core/spec/support/sandboxing.rb +50 -0
  167. data/rspec-core/spec/support/shared_example_groups.rb +43 -0
  168. data/rspec-core/spec/support/spec_files.rb +44 -0
  169. data/rspec-expectations/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +253 -0
  170. data/rspec-expectations/benchmarks/autoload_v_require.rb +25 -0
  171. data/rspec-expectations/benchmarks/cloning_matchers.rb +19 -0
  172. data/rspec-expectations/benchmarks/default_messages_as_methods_v_blocks.rb +27 -0
  173. data/rspec-expectations/benchmarks/example_spec.rb +9 -0
  174. data/rspec-expectations/benchmarks/include_v_superclass.rb +39 -0
  175. data/rspec-expectations/benchmarks/match_array/failing_with_distinct_items.rb +147 -0
  176. data/rspec-expectations/benchmarks/match_array/failing_with_duplicate_items.rb +122 -0
  177. data/rspec-expectations/benchmarks/match_array/passing_with_distinct_items.rb +154 -0
  178. data/rspec-expectations/benchmarks/match_array/passing_with_duplicate_items.rb +132 -0
  179. data/rspec-expectations/benchmarks/match_array/rubyprof/passing_with_distinct_items.rb +9 -0
  180. data/rspec-expectations/benchmarks/matcher_dsl_vs_classes.rb +180 -0
  181. data/rspec-expectations/benchmarks/method_to_proc.rb +72 -0
  182. data/rspec-expectations/benchmarks/set_vs_array_include.rb +68 -0
  183. data/rspec-expectations/features/step_definitions/additional_cli_steps.rb +22 -0
  184. data/rspec-expectations/features/support/disallow_certain_apis.rb +34 -0
  185. data/rspec-expectations/features/support/env.rb +21 -0
  186. data/rspec-expectations/features/support/rubinius.rb +6 -0
  187. data/{vendor_lib/rspec/matchers → rspec-expectations/lib/rspec/expectations}/configuration.rb +50 -16
  188. data/rspec-expectations/lib/rspec/expectations/expectation_target.rb +119 -0
  189. data/rspec-expectations/lib/rspec/expectations/fail_with.rb +34 -0
  190. data/rspec-expectations/lib/rspec/expectations/handler.rb +167 -0
  191. data/rspec-expectations/lib/rspec/expectations/minitest_integration.rb +17 -0
  192. data/rspec-expectations/lib/rspec/expectations/syntax.rb +132 -0
  193. data/{vendor_lib → rspec-expectations/lib}/rspec/expectations/version.rb +1 -1
  194. data/rspec-expectations/lib/rspec/expectations.rb +68 -0
  195. data/rspec-expectations/lib/rspec/matchers/aliased_matcher.rb +116 -0
  196. data/rspec-expectations/lib/rspec/matchers/built_in/all.rb +85 -0
  197. data/rspec-expectations/lib/rspec/matchers/built_in/base_matcher.rb +132 -0
  198. data/rspec-expectations/lib/rspec/matchers/built_in/be.rb +277 -0
  199. data/rspec-expectations/lib/rspec/matchers/built_in/be_between.rb +77 -0
  200. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/be_instance_of.rb +11 -4
  201. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/be_kind_of.rb +5 -0
  202. data/rspec-expectations/lib/rspec/matchers/built_in/be_within.rb +72 -0
  203. data/rspec-expectations/lib/rspec/matchers/built_in/change.rb +337 -0
  204. data/rspec-expectations/lib/rspec/matchers/built_in/compound.rb +258 -0
  205. data/rspec-expectations/lib/rspec/matchers/built_in/contain_exactly.rb +249 -0
  206. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/cover.rb +3 -0
  207. data/rspec-expectations/lib/rspec/matchers/built_in/eq.rb +75 -0
  208. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/eql.rb +17 -6
  209. data/rspec-expectations/lib/rspec/matchers/built_in/equal.rb +81 -0
  210. data/rspec-expectations/lib/rspec/matchers/built_in/exist.rb +86 -0
  211. data/rspec-expectations/lib/rspec/matchers/built_in/has.rb +101 -0
  212. data/rspec-expectations/lib/rspec/matchers/built_in/have_attributes.rb +84 -0
  213. data/rspec-expectations/lib/rspec/matchers/built_in/include.rb +105 -0
  214. data/rspec-expectations/lib/rspec/matchers/built_in/match.rb +29 -0
  215. data/rspec-expectations/lib/rspec/matchers/built_in/operators.rb +119 -0
  216. data/rspec-expectations/lib/rspec/matchers/built_in/output.rb +152 -0
  217. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/raise_error.rb +66 -46
  218. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/respond_to.rb +43 -26
  219. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/satisfy.rb +13 -4
  220. data/rspec-expectations/lib/rspec/matchers/built_in/start_and_end_with.rb +82 -0
  221. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/throw_symbol.rb +51 -13
  222. data/rspec-expectations/lib/rspec/matchers/built_in/yield.rb +420 -0
  223. data/rspec-expectations/lib/rspec/matchers/built_in.rb +52 -0
  224. data/rspec-expectations/lib/rspec/matchers/composable.rb +183 -0
  225. data/{vendor_lib/rspec/matchers/matcher.rb → rspec-expectations/lib/rspec/matchers/dsl.rb} +120 -30
  226. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/generated_descriptions.rb +13 -6
  227. data/rspec-expectations/lib/rspec/matchers/matcher_delegator.rb +33 -0
  228. data/rspec-expectations/lib/rspec/matchers/matcher_protocol.rb +99 -0
  229. data/rspec-expectations/lib/rspec/matchers/pretty.rb +77 -0
  230. data/{vendor_lib → rspec-expectations/lib}/rspec/matchers.rb +408 -74
  231. data/rspec-expectations/spec/rspec/expectations/configuration_spec.rb +226 -0
  232. data/rspec-expectations/spec/rspec/expectations/expectation_target_spec.rb +147 -0
  233. data/rspec-expectations/spec/rspec/expectations/extensions/kernel_spec.rb +69 -0
  234. data/rspec-expectations/spec/rspec/expectations/fail_with_spec.rb +73 -0
  235. data/rspec-expectations/spec/rspec/expectations/handler_spec.rb +200 -0
  236. data/rspec-expectations/spec/rspec/expectations/minitest_integration_spec.rb +25 -0
  237. data/rspec-expectations/spec/rspec/expectations/syntax_spec.rb +93 -0
  238. data/rspec-expectations/spec/rspec/expectations_spec.rb +15 -0
  239. data/rspec-expectations/spec/rspec/matchers/aliased_matcher_spec.rb +113 -0
  240. data/rspec-expectations/spec/rspec/matchers/aliases_spec.rb +455 -0
  241. data/rspec-expectations/spec/rspec/matchers/built_in/all_spec.rb +212 -0
  242. data/rspec-expectations/spec/rspec/matchers/built_in/base_matcher_spec.rb +140 -0
  243. data/rspec-expectations/spec/rspec/matchers/built_in/be_between_spec.rb +157 -0
  244. data/rspec-expectations/spec/rspec/matchers/built_in/be_instance_of_spec.rb +61 -0
  245. data/rspec-expectations/spec/rspec/matchers/built_in/be_kind_of_spec.rb +39 -0
  246. data/rspec-expectations/spec/rspec/matchers/built_in/be_spec.rb +685 -0
  247. data/rspec-expectations/spec/rspec/matchers/built_in/be_within_spec.rb +139 -0
  248. data/rspec-expectations/spec/rspec/matchers/built_in/change_spec.rb +829 -0
  249. data/rspec-expectations/spec/rspec/matchers/built_in/compound_spec.rb +537 -0
  250. data/rspec-expectations/spec/rspec/matchers/built_in/contain_exactly_spec.rb +556 -0
  251. data/rspec-expectations/spec/rspec/matchers/built_in/cover_spec.rb +67 -0
  252. data/rspec-expectations/spec/rspec/matchers/built_in/eq_spec.rb +176 -0
  253. data/rspec-expectations/spec/rspec/matchers/built_in/eql_spec.rb +39 -0
  254. data/rspec-expectations/spec/rspec/matchers/built_in/equal_spec.rb +130 -0
  255. data/rspec-expectations/spec/rspec/matchers/built_in/exist_spec.rb +139 -0
  256. data/rspec-expectations/spec/rspec/matchers/built_in/has_spec.rb +179 -0
  257. data/rspec-expectations/spec/rspec/matchers/built_in/have_attributes_spec.rb +177 -0
  258. data/rspec-expectations/spec/rspec/matchers/built_in/include_spec.rb +587 -0
  259. data/rspec-expectations/spec/rspec/matchers/built_in/match_spec.rb +100 -0
  260. data/rspec-expectations/spec/rspec/matchers/built_in/operators_spec.rb +250 -0
  261. data/rspec-expectations/spec/rspec/matchers/built_in/output_spec.rb +168 -0
  262. data/rspec-expectations/spec/rspec/matchers/built_in/raise_error_spec.rb +446 -0
  263. data/rspec-expectations/spec/rspec/matchers/built_in/respond_to_spec.rb +290 -0
  264. data/rspec-expectations/spec/rspec/matchers/built_in/satisfy_spec.rb +42 -0
  265. data/rspec-expectations/spec/rspec/matchers/built_in/start_and_end_with_spec.rb +347 -0
  266. data/rspec-expectations/spec/rspec/matchers/built_in/throw_symbol_spec.rb +133 -0
  267. data/rspec-expectations/spec/rspec/matchers/built_in/yield_spec.rb +643 -0
  268. data/rspec-expectations/spec/rspec/matchers/composable_spec.rb +77 -0
  269. data/rspec-expectations/spec/rspec/matchers/define_negated_matcher_spec.rb +199 -0
  270. data/rspec-expectations/spec/rspec/matchers/description_generation_spec.rb +189 -0
  271. data/rspec-expectations/spec/rspec/matchers/dsl_spec.rb +1036 -0
  272. data/rspec-expectations/spec/rspec/matchers/legacy_spec.rb +104 -0
  273. data/rspec-expectations/spec/rspec/matchers_spec.rb +108 -0
  274. data/rspec-expectations/spec/spec_helper.rb +94 -0
  275. data/rspec-expectations/spec/support/matchers.rb +54 -0
  276. data/rspec-expectations/spec/support/shared_examples.rb +101 -0
  277. data/rspec-mocks/benchmarks/double_creation.rb +66 -0
  278. data/rspec-mocks/benchmarks/each_value_v_values_each.rb +58 -0
  279. data/rspec-mocks/benchmarks/find_original_method_early.rb +64 -0
  280. data/rspec-mocks/benchmarks/method_defined_at_any_visibility.rb +101 -0
  281. data/rspec-mocks/benchmarks/thread_safety.rb +24 -0
  282. data/rspec-mocks/benchmarks/transfer_nested_constants.rb +77 -0
  283. data/rspec-mocks/features/step_definitions/additional_cli_steps.rb +21 -0
  284. data/rspec-mocks/features/support/disallow_certain_apis.rb +24 -0
  285. data/rspec-mocks/features/support/env.rb +22 -0
  286. data/rspec-mocks/features/support/rubinius.rb +6 -0
  287. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/chain.rb +19 -2
  288. data/rspec-mocks/lib/rspec/mocks/any_instance/expect_chain_chain.rb +35 -0
  289. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/expectation_chain.rb +12 -11
  290. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/message_chains.rb +15 -5
  291. data/rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb +116 -0
  292. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/recorder.rb +105 -38
  293. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/stub_chain.rb +9 -9
  294. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/stub_chain_chain.rb +5 -1
  295. data/rspec-mocks/lib/rspec/mocks/any_instance.rb +10 -0
  296. data/rspec-mocks/lib/rspec/mocks/argument_list_matcher.rb +72 -0
  297. data/rspec-mocks/lib/rspec/mocks/argument_matchers.rb +282 -0
  298. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/configuration.rb +60 -14
  299. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/error_generator.rb +93 -43
  300. data/rspec-mocks/lib/rspec/mocks/example_methods.rb +379 -0
  301. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/instance_method_stasher.rb +30 -7
  302. data/rspec-mocks/lib/rspec/mocks/marshal_extension.rb +41 -0
  303. data/rspec-mocks/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
  304. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/matchers/have_received.rb +36 -14
  305. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/matchers/receive.rb +24 -30
  306. data/rspec-mocks/lib/rspec/mocks/matchers/receive_message_chain.rb +66 -0
  307. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/matchers/receive_messages.rb +9 -10
  308. data/rspec-mocks/lib/rspec/mocks/message_chain.rb +91 -0
  309. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/message_expectation.rb +156 -105
  310. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/method_double.rb +81 -30
  311. data/rspec-mocks/lib/rspec/mocks/method_reference.rb +155 -0
  312. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/mutate_const.rb +84 -166
  313. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/object_reference.rb +19 -18
  314. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/order_group.rb +4 -5
  315. data/rspec-mocks/lib/rspec/mocks/proxy.rb +431 -0
  316. data/rspec-mocks/lib/rspec/mocks/space.rb +221 -0
  317. data/rspec-mocks/lib/rspec/mocks/standalone.rb +3 -0
  318. data/rspec-mocks/lib/rspec/mocks/syntax.rb +329 -0
  319. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/targets.rb +20 -13
  320. data/rspec-mocks/lib/rspec/mocks/test_double.rb +135 -0
  321. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/verifying_double.rb +69 -19
  322. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/verifying_message_expecation.rb +23 -21
  323. data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/verifying_proxy.rb +58 -38
  324. data/rspec-mocks/lib/rspec/mocks/version.rb +9 -0
  325. data/rspec-mocks/lib/rspec/mocks.rb +126 -0
  326. data/rspec-mocks/spec/rspec/mocks/and_call_original_spec.rb +267 -0
  327. data/rspec-mocks/spec/rspec/mocks/and_return_spec.rb +21 -0
  328. data/rspec-mocks/spec/rspec/mocks/and_wrap_original_spec.rb +63 -0
  329. data/rspec-mocks/spec/rspec/mocks/and_yield_spec.rb +161 -0
  330. data/rspec-mocks/spec/rspec/mocks/any_instance/message_chains_spec.rb +39 -0
  331. data/rspec-mocks/spec/rspec/mocks/any_instance_spec.rb +1242 -0
  332. data/rspec-mocks/spec/rspec/mocks/argument_matchers_spec.rb +336 -0
  333. data/rspec-mocks/spec/rspec/mocks/array_including_matcher_spec.rb +39 -0
  334. data/rspec-mocks/spec/rspec/mocks/at_least_spec.rb +147 -0
  335. data/rspec-mocks/spec/rspec/mocks/at_most_spec.rb +113 -0
  336. data/rspec-mocks/spec/rspec/mocks/before_all_spec.rb +75 -0
  337. data/rspec-mocks/spec/rspec/mocks/block_return_value_spec.rb +68 -0
  338. data/rspec-mocks/spec/rspec/mocks/combining_implementation_instructions_spec.rb +196 -0
  339. data/rspec-mocks/spec/rspec/mocks/configuration_spec.rb +175 -0
  340. data/rspec-mocks/spec/rspec/mocks/double_spec.rb +830 -0
  341. data/rspec-mocks/spec/rspec/mocks/example_methods_spec.rb +11 -0
  342. data/rspec-mocks/spec/rspec/mocks/expiration_spec.rb +90 -0
  343. data/rspec-mocks/spec/rspec/mocks/hash_excluding_matcher_spec.rb +65 -0
  344. data/rspec-mocks/spec/rspec/mocks/hash_including_matcher_spec.rb +92 -0
  345. data/rspec-mocks/spec/rspec/mocks/instance_method_stasher_spec.rb +72 -0
  346. data/rspec-mocks/spec/rspec/mocks/marshal_extension_spec.rb +67 -0
  347. data/rspec-mocks/spec/rspec/mocks/matchers/have_received_spec.rb +513 -0
  348. data/rspec-mocks/spec/rspec/mocks/matchers/receive_message_chain_spec.rb +227 -0
  349. data/rspec-mocks/spec/rspec/mocks/matchers/receive_messages_spec.rb +148 -0
  350. data/rspec-mocks/spec/rspec/mocks/matchers/receive_spec.rb +525 -0
  351. data/rspec-mocks/spec/rspec/mocks/methods_spec.rb +24 -0
  352. data/rspec-mocks/spec/rspec/mocks/mock_expectation_error_spec.rb +20 -0
  353. data/rspec-mocks/spec/rspec/mocks/mock_ordering_spec.rb +112 -0
  354. data/rspec-mocks/spec/rspec/mocks/multiple_return_value_spec.rb +130 -0
  355. data/rspec-mocks/spec/rspec/mocks/mutate_const_spec.rb +561 -0
  356. data/rspec-mocks/spec/rspec/mocks/nil_expectation_warning_spec.rb +52 -0
  357. data/rspec-mocks/spec/rspec/mocks/null_object_double_spec.rb +135 -0
  358. data/rspec-mocks/spec/rspec/mocks/once_counts_spec.rb +50 -0
  359. data/rspec-mocks/spec/rspec/mocks/order_group_spec.rb +26 -0
  360. data/rspec-mocks/spec/rspec/mocks/partial_double_spec.rb +379 -0
  361. data/rspec-mocks/spec/rspec/mocks/partial_double_using_mocks_directly_spec.rb +83 -0
  362. data/rspec-mocks/spec/rspec/mocks/precise_counts_spec.rb +66 -0
  363. data/rspec-mocks/spec/rspec/mocks/serialization_spec.rb +89 -0
  364. data/rspec-mocks/spec/rspec/mocks/should_syntax_spec.rb +539 -0
  365. data/rspec-mocks/spec/rspec/mocks/space_spec.rb +242 -0
  366. data/rspec-mocks/spec/rspec/mocks/spy_spec.rb +127 -0
  367. data/rspec-mocks/spec/rspec/mocks/stash_spec.rb +43 -0
  368. data/rspec-mocks/spec/rspec/mocks/stub_chain_spec.rb +166 -0
  369. data/rspec-mocks/spec/rspec/mocks/stub_implementation_spec.rb +98 -0
  370. data/rspec-mocks/spec/rspec/mocks/stub_spec.rb +520 -0
  371. data/rspec-mocks/spec/rspec/mocks/stubbed_message_expectations_spec.rb +56 -0
  372. data/rspec-mocks/spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb +99 -0
  373. data/rspec-mocks/spec/rspec/mocks/syntax_spec.rb +7 -0
  374. data/rspec-mocks/spec/rspec/mocks/test_double_spec.rb +53 -0
  375. data/rspec-mocks/spec/rspec/mocks/thrice_counts_spec.rb +72 -0
  376. data/rspec-mocks/spec/rspec/mocks/to_ary_spec.rb +52 -0
  377. data/rspec-mocks/spec/rspec/mocks/twice_counts_spec.rb +64 -0
  378. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/class_double_with_class_loaded_spec.rb +118 -0
  379. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/class_double_with_class_not_loaded_spec.rb +58 -0
  380. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/construction_spec.rb +54 -0
  381. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb +81 -0
  382. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/instance_double_with_class_loaded_spec.rb +195 -0
  383. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/instance_double_with_class_not_loaded_spec.rb +57 -0
  384. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/method_visibility_spec.rb +129 -0
  385. data/rspec-mocks/spec/rspec/mocks/verifying_doubles/object_double_spec.rb +68 -0
  386. data/rspec-mocks/spec/rspec/mocks_spec.rb +199 -0
  387. data/rspec-mocks/spec/spec_helper.rb +131 -0
  388. data/rspec-mocks/spec/support/before_all_shared_example_group.rb +16 -0
  389. data/rspec-mocks/spec/support/doubled_classes.rb +74 -0
  390. data/rspec-mocks/spec/support/matchers.rb +15 -0
  391. data/rspec-support/benchmarks/caller.rb +81 -0
  392. data/{vendor_lib → rspec-support/lib}/rspec/support/caller_filter.rb +11 -4
  393. data/rspec-support/lib/rspec/support/differ.rb +214 -0
  394. data/rspec-support/lib/rspec/support/directory_maker.rb +61 -0
  395. data/rspec-support/lib/rspec/support/encoded_string.rb +69 -0
  396. data/rspec-support/lib/rspec/support/fuzzy_matcher.rb +48 -0
  397. data/rspec-support/lib/rspec/support/hunk_generator.rb +47 -0
  398. data/rspec-support/lib/rspec/support/matcher_definition.rb +31 -0
  399. data/rspec-support/lib/rspec/support/method_signature_verifier.rb +272 -0
  400. data/rspec-support/lib/rspec/support/os.rb +18 -0
  401. data/rspec-support/lib/rspec/support/recursive_const_methods.rb +76 -0
  402. data/rspec-support/lib/rspec/support/ruby_features.rb +45 -0
  403. data/rspec-support/lib/rspec/support/spec/deprecation_helpers.rb +60 -0
  404. data/rspec-support/lib/rspec/support/spec/formatting_support.rb +9 -0
  405. data/{vendor_lib → rspec-support/lib}/rspec/support/spec/in_sub_process.rb +5 -2
  406. data/rspec-support/lib/rspec/support/spec/prevent_load_time_warnings.rb +44 -0
  407. data/rspec-support/lib/rspec/support/spec/shell_out.rb +69 -0
  408. data/{vendor_lib → rspec-support/lib}/rspec/support/spec/stderr_splitter.rb +7 -5
  409. data/rspec-support/lib/rspec/support/spec/with_isolated_directory.rb +9 -0
  410. data/rspec-support/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
  411. data/rspec-support/lib/rspec/support/spec.rb +72 -0
  412. data/{vendor_lib → rspec-support/lib}/rspec/support/version.rb +1 -1
  413. data/rspec-support/lib/rspec/support/version_checker.rb +53 -0
  414. data/rspec-support/lib/rspec/support/warnings.rb +39 -0
  415. data/rspec-support/lib/rspec/support.rb +76 -0
  416. data/rspec-support/spec/rspec/support/caller_filter_spec.rb +66 -0
  417. data/rspec-support/spec/rspec/support/differ_spec.rb +322 -0
  418. data/rspec-support/spec/rspec/support/directory_maker_spec.rb +58 -0
  419. data/rspec-support/spec/rspec/support/encoded_string_spec.rb +86 -0
  420. data/rspec-support/spec/rspec/support/fuzzy_matcher_spec.rb +179 -0
  421. data/rspec-support/spec/rspec/support/method_signature_verifier_spec.rb +357 -0
  422. data/rspec-support/spec/rspec/support/os_spec.rb +36 -0
  423. data/rspec-support/spec/rspec/support/recursive_const_methods_spec.rb +49 -0
  424. data/rspec-support/spec/rspec/support/spec/in_sub_process_spec.rb +36 -0
  425. data/rspec-support/spec/rspec/support/spec/prevent_load_time_warnings_spec.rb +10 -0
  426. data/rspec-support/spec/rspec/support/spec/shell_out_spec.rb +44 -0
  427. data/rspec-support/spec/rspec/support/spec/stderr_splitter_spec.rb +60 -0
  428. data/rspec-support/spec/rspec/support/spec/with_isolated_std_err_spec.rb +21 -0
  429. data/rspec-support/spec/rspec/support/version_checker_spec.rb +29 -0
  430. data/rspec-support/spec/rspec/support/warnings_spec.rb +66 -0
  431. data/rspec-support/spec/rspec/support_spec.rb +119 -0
  432. data/rspec-support/spec/spec_helper.rb +2 -0
  433. data/spec/after_hooks_spec.rb +140 -0
  434. data/spec/around_hooks_spec.rb +223 -0
  435. data/spec/async_spec.rb +147 -1
  436. data/spec/before_hooks_spec.rb +183 -0
  437. data/spec/example_spec.rb +11 -0
  438. data/spec/matchers_spec.rb +4 -0
  439. data/spec/skip_pending_spec.rb +43 -0
  440. data/spec/subject_spec.rb +87 -0
  441. data/util/create_requires.rb +45 -0
  442. metadata +443 -147
  443. data/spec/named_subject_spec.rb +0 -11
  444. data/vendor_lib/rspec/core/backtrace_formatter.rb +0 -65
  445. data/vendor_lib/rspec/core/command_line.rb +0 -36
  446. data/vendor_lib/rspec/core/configuration_options.rb +0 -143
  447. data/vendor_lib/rspec/core/drb_command_line.rb +0 -26
  448. data/vendor_lib/rspec/core/drb_options.rb +0 -87
  449. data/vendor_lib/rspec/core/dsl.rb +0 -26
  450. data/vendor_lib/rspec/core/example.rb +0 -312
  451. data/vendor_lib/rspec/core/example_group.rb +0 -540
  452. data/vendor_lib/rspec/core/filter_manager.rb +0 -224
  453. data/vendor_lib/rspec/core/formatters/base_formatter.rb +0 -291
  454. data/vendor_lib/rspec/core/formatters/base_text_formatter.rb +0 -307
  455. data/vendor_lib/rspec/core/formatters/documentation_formatter.rb +0 -67
  456. data/vendor_lib/rspec/core/formatters/json_formatter.rb +0 -99
  457. data/vendor_lib/rspec/core/formatters/progress_formatter.rb +0 -32
  458. data/vendor_lib/rspec/core/formatters.rb +0 -54
  459. data/vendor_lib/rspec/core/hooks.rb +0 -535
  460. data/vendor_lib/rspec/core/metadata.rb +0 -313
  461. data/vendor_lib/rspec/core/mocking/with_absolutely_nothing.rb +0 -11
  462. data/vendor_lib/rspec/core/mocking/with_flexmock.rb +0 -27
  463. data/vendor_lib/rspec/core/mocking/with_rr.rb +0 -27
  464. data/vendor_lib/rspec/core/mocking/with_rspec.rb +0 -27
  465. data/vendor_lib/rspec/core/pending.rb +0 -110
  466. data/vendor_lib/rspec/core/project_initializer.rb +0 -88
  467. data/vendor_lib/rspec/core/rake_task.rb +0 -128
  468. data/vendor_lib/rspec/core/reporter.rb +0 -132
  469. data/vendor_lib/rspec/core/runner.rb +0 -97
  470. data/vendor_lib/rspec/core/shared_example_group/collection.rb +0 -27
  471. data/vendor_lib/rspec/core/shared_example_group.rb +0 -146
  472. data/vendor_lib/rspec/core/version.rb +0 -7
  473. data/vendor_lib/rspec/core/warnings.rb +0 -22
  474. data/vendor_lib/rspec/expectations/differ.rb +0 -154
  475. data/vendor_lib/rspec/expectations/errors.rb +0 -9
  476. data/vendor_lib/rspec/expectations/expectation_target.rb +0 -87
  477. data/vendor_lib/rspec/expectations/extensions/object.rb +0 -29
  478. data/vendor_lib/rspec/expectations/extensions.rb +0 -1
  479. data/vendor_lib/rspec/expectations/fail_with.rb +0 -79
  480. data/vendor_lib/rspec/expectations/handler.rb +0 -68
  481. data/vendor_lib/rspec/expectations/syntax.rb +0 -182
  482. data/vendor_lib/rspec/expectations.rb +0 -75
  483. data/vendor_lib/rspec/matchers/built_in/base_matcher.rb +0 -68
  484. data/vendor_lib/rspec/matchers/built_in/be.rb +0 -213
  485. data/vendor_lib/rspec/matchers/built_in/be_within.rb +0 -55
  486. data/vendor_lib/rspec/matchers/built_in/change.rb +0 -141
  487. data/vendor_lib/rspec/matchers/built_in/eq.rb +0 -22
  488. data/vendor_lib/rspec/matchers/built_in/equal.rb +0 -48
  489. data/vendor_lib/rspec/matchers/built_in/exist.rb +0 -26
  490. data/vendor_lib/rspec/matchers/built_in/has.rb +0 -48
  491. data/vendor_lib/rspec/matchers/built_in/include.rb +0 -61
  492. data/vendor_lib/rspec/matchers/built_in/match.rb +0 -17
  493. data/vendor_lib/rspec/matchers/built_in/match_array.rb +0 -51
  494. data/vendor_lib/rspec/matchers/built_in/start_and_end_with.rb +0 -48
  495. data/vendor_lib/rspec/matchers/built_in/yield.rb +0 -297
  496. data/vendor_lib/rspec/matchers/built_in.rb +0 -39
  497. data/vendor_lib/rspec/matchers/compatibility.rb +0 -14
  498. data/vendor_lib/rspec/matchers/dsl.rb +0 -23
  499. data/vendor_lib/rspec/matchers/method_missing.rb +0 -12
  500. data/vendor_lib/rspec/matchers/operator_matcher.rb +0 -99
  501. data/vendor_lib/rspec/matchers/pretty.rb +0 -70
  502. data/vendor_lib/rspec/matchers/test_unit_integration.rb +0 -11
  503. data/vendor_lib/rspec/mocks/argument_list_matcher.rb +0 -104
  504. data/vendor_lib/rspec/mocks/argument_matchers.rb +0 -264
  505. data/vendor_lib/rspec/mocks/arity_calculator.rb +0 -66
  506. data/vendor_lib/rspec/mocks/errors.rb +0 -12
  507. data/vendor_lib/rspec/mocks/example_methods.rb +0 -201
  508. data/vendor_lib/rspec/mocks/extensions/marshal.rb +0 -17
  509. data/vendor_lib/rspec/mocks/framework.rb +0 -36
  510. data/vendor_lib/rspec/mocks/method_reference.rb +0 -95
  511. data/vendor_lib/rspec/mocks/mock.rb +0 -7
  512. data/vendor_lib/rspec/mocks/proxy.rb +0 -269
  513. data/vendor_lib/rspec/mocks/proxy_for_nil.rb +0 -37
  514. data/vendor_lib/rspec/mocks/space.rb +0 -95
  515. data/vendor_lib/rspec/mocks/standalone.rb +0 -3
  516. data/vendor_lib/rspec/mocks/stub_chain.rb +0 -51
  517. data/vendor_lib/rspec/mocks/syntax.rb +0 -374
  518. data/vendor_lib/rspec/mocks/test_double.rb +0 -109
  519. data/vendor_lib/rspec/mocks/version.rb +0 -7
  520. data/vendor_lib/rspec/mocks.rb +0 -100
  521. data/vendor_lib/rspec/support/spec/deprecation_helpers.rb +0 -29
  522. data/vendor_lib/rspec/support/spec.rb +0 -14
  523. data/vendor_lib/rspec/support/warnings.rb +0 -41
  524. data/vendor_lib/rspec/support.rb +0 -6
  525. data/vendor_lib/rspec-expectations.rb +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0e842ffe93edffeb7e5f97c5ebd881053b61642
4
- data.tar.gz: ea64cb916e97deaa54763bf386ca1e63d08ea832
3
+ metadata.gz: dbd011de53ddb59b6953bb90ecddf3082402cc8d
4
+ data.tar.gz: cfb1bcebd79e37b25dda19aaa9b57e173c446154
5
5
  SHA512:
6
- metadata.gz: 7d14e6849697b8cca91f618cfabf52ff6abcbc95e7f721949abf3ef250a5606bf9b4a109888f53acf11703407669111fd82e696309d9021b8061d5e129bebd34
7
- data.tar.gz: f8d41ede39787d54ddf1e6d859ff9adb7d3e2c271f9bd0a62359bd4580c2f2288463caad92cb41f931abd0e34fe559d4f6f03aee7bebb314b14f6ee0b303fc2a
6
+ metadata.gz: dea4bff6ec1be0af8b3d3f205407cdbeff969307fd5ae8817653762c5099428c359756ec9ea55630e38350a9b302b41e8dcc091a05c7f8429ca927ba207170ab
7
+ data.tar.gz: a0ba39d3e3851bf95ad496da0635dd9b0bd2db21aa8875a77da7fa4c3f5a9984f65cd8421fcde54dcc5434ecc5fc85fccd25e639af1c69880a2054a9e3064128
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  .DS_Store
2
2
  Gemfile.lock
3
3
  *.gem
4
+ Gemfile.lock
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.5.0 (edge)
2
+
3
+ * By default, any subject, it example block, before(:each), after(:each), and around that returns a promise will be executed asynchronously. Async is NOT yet supported for context level hooks. Async approach from < 0.4.3 will still work.
4
+
5
+ * Update to RSpec 3.1 (core is 3.1.7, expectations/support 3.1.2, mocks 3.1.3)
6
+
7
+ * Remove copy of source (and just rely on git submodule fetch)
8
+
1
9
  ## 0.4.3 (2015-06-14)
2
10
 
3
11
  * Allow the gem to be run under Opal 0.7 and 0.8
@@ -8,7 +16,7 @@
8
16
 
9
17
  * Avoid phantomjs warning messages
10
18
 
11
- ## 0.4.1
19
+ ## 0.4.1 (2015-02-25)
12
20
 
13
21
  * Remove predicate matcher fixes as Opal supports $1..$9 special gvars.
14
22
 
@@ -21,5 +29,3 @@
21
29
  * Replaced browser formatter to use html printer from rspec
22
30
 
23
31
  * Add timeout support to asynchronous specs
24
-
25
- ## 0.2.1 November 24, 2013
data/Gemfile CHANGED
@@ -1,8 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
- gem 'rspec', path: 'rspec'
5
- gem 'rspec-support', path: 'rspec-support'
6
- gem 'rspec-core', path: 'rspec-core'
7
- gem 'rspec-mocks', path: 'rspec-mocks'
8
- gem 'rspec-expectations', path: 'rspec-expectations'
4
+ unless Dir['rspec{,-{core,expectations,mocks,support}}'].any?
5
+ warn 'Run: "git submodule update --init" to get RSpec sources'
6
+ end
7
+
8
+ # Opal 0.9 still in development
9
+ # gem 'opal', git: 'https://github.com/opal/opal.git'
data/README.md CHANGED
@@ -51,8 +51,12 @@ in any web browser.
51
51
 
52
52
  ## Async examples
53
53
 
54
- `opal-rspec` adds support for async specs to rspec. These specs are defined using
55
- `#async` instead of `#it`:
54
+ `opal-rspec` adds support for async specs to rspec. These specs can be defined using 2 approaches:
55
+
56
+ 1. Promises returned from subject or the `#it` block (preferred)
57
+ 1. `#async` instead of `#it` (in use with opal-rspec <= 0.4.3)
58
+
59
+ ### Promise approach
56
60
 
57
61
  ```ruby
58
62
  describe MyClass do
@@ -62,29 +66,85 @@ describe MyClass do
62
66
  end
63
67
 
64
68
  # async example
65
- async 'does something else, too' do
66
- # ...
69
+ it 'does something else, too' do
70
+ promise = Promise.new
71
+ delay 1 do
72
+ expect(:foo).to eq(:foo)
73
+ promise.resolve
74
+ end
75
+ promise
76
+ end
77
+
78
+ it 'does another thing' do
79
+ # Argument is number of seconds, delay_with_promise is a convenience method that will
80
+ # call setTimeout with the block and return a promise
81
+ delay_with_promise 0 do
82
+ expect(:foo).to eq(:foo)
83
+ end
84
+ end
85
+ end
86
+
87
+ describe MyClass2 do
88
+ # will wait for the before promise to complete before proceeding
89
+ before do
90
+ delay_with_promise 0 do
91
+ puts 'async before 'action
92
+ end
93
+ end
94
+
95
+ # async subject works too
96
+ subject do
97
+ delay_with_promise 0 do
98
+ 42
99
+ end
100
+ end
101
+
102
+ it { is_expected.to eq 42 }
103
+
104
+ # If you use an around block and have async specs, you must use this approach
105
+ around do |example|
106
+ puts 'do stuff before'
107
+ example.run.then do
108
+ puts 'do stuff after example'
109
+ end
67
110
  end
68
111
  end
69
112
  ```
70
113
 
71
- This just marks the example as running async. To actually handle the async result,
72
- you also need to use a `run_async` call inside some future handler:
114
+ Advantages:
115
+ * Assuming your subject under test (or matchers) return/use promises, the syntax is the same for sync or async specs
116
+
117
+ Limitations:
118
+ * Right now, async `before(:context)` and `after(:context)` hooks cannot be async
119
+ * `let` dependencies cannot be async, only subject
120
+ * Opal-rspec will not timeout while waiting for your async code to finish
121
+
122
+ ### Async/it approach
123
+
124
+ This is the approach that was supported in opal-rspec <= 0.4.3 and it still works.
73
125
 
74
126
  ```ruby
75
- async 'HTTP requests should work' do
76
- HTTP.get('/users/1.json') do |res|
77
- run_async {
78
- expect(res).to be_ok
79
- }
80
- end
127
+ describe MyClass2 do
128
+ async 'HTTP requests should work' do
129
+ HTTP.get('/users/1.json') do |res|
130
+ async {
131
+ expect(res).to be_ok
132
+ }
133
+ end
134
+ end
81
135
  end
82
136
  ```
83
137
 
84
- The block passed to `run_async` informs the runner that this spec is finished
138
+ The block passed to the second `async` call informs the runner that this spec is finished
85
139
  so it can move on. Any failures/expectations run inside this block will be run
86
140
  in the context of the example.
87
141
 
142
+ Advantages:
143
+ * Hides promises from the specs
144
+
145
+ Disadvantages:
146
+ * Requires different syntax for async specs vs. sync specs
147
+
88
148
  ## Contributing
89
149
 
90
150
  Install required gems at required versions:
data/Rakefile CHANGED
@@ -4,23 +4,119 @@ Bundler.require
4
4
  Bundler::GemHelper.install_tasks
5
5
 
6
6
  require 'opal/rspec/rake_task'
7
- Opal::RSpec::RakeTask.new(:default)
7
+ Opal::RSpec::RakeTask.new(:specs_untested)
8
8
 
9
+ desc 'Generates an RSpec requires file free of dynamic requires'
10
+ task :generate_requires do
11
+ # Do this free of any requires used to make this Rake task happen
12
+ sh 'ruby -Irspec/lib -Irspec-core/lib/rspec -Irspec-support/lib/rspec util/create_requires.rb'
13
+ end
14
+
15
+ task :default do
16
+ test_output = `rake specs_untested`
17
+ raise "Expected test runner to fail due to failed tests, but got return code of #{$?.exitstatus}" if $?.success?
18
+ count_match = /(\d+) examples, (\d+) failures, (\d+) pending/.match(test_output)
19
+ raise 'Expected a finished count of test failures/success/etc. but did not see it' unless count_match
20
+ total, failed, pending = count_match.captures
9
21
 
10
- require 'fileutils'
11
- desc "Copy RSpec sources"
12
- task :copy_rspec do
13
- gems = %w(rspec rspec-core rspec-expectations rspec-mocks rspec-support)
22
+ actual_failures = []
23
+ test_output.scan /\d+\) (.*)/ do |match|
24
+ actual_failures << match[0].strip
25
+ end
26
+ actual_failures.sort!
14
27
 
15
- gems.each do |gem|
16
- spec = Gem::Specification.find_by_name gem
17
- lib = File.join spec.gem_dir, 'lib'
28
+ failure_messages = []
18
29
 
19
- Dir["#{lib}/**/*.rb"].each do |file|
20
- out = file.sub(/^#{lib}\//, 'opal/')
30
+ bad_strings = [/.*is still running, after block problem.*/,
31
+ /.*should not have.*/,
32
+ /.*Expected \d+ after hits but got \d+.*/,
33
+ /.*Expected \d+ around hits but got \d+.*/]
21
34
 
22
- FileUtils.mkdir_p File.dirname(out)
23
- FileUtils.cp file, out
35
+ bad_strings.each do |regex|
36
+ test_output.scan(regex) do |match|
37
+ failure_messages << "Expected not to see #{regex} in output, but found match #{match}"
24
38
  end
25
39
  end
40
+
41
+ expected_pending_count = 22
42
+
43
+ expected_failures= ['promise should make example fail properly before async block reached',
44
+ 'promise matcher fails properly',
45
+ 'promise non-assertion failure in promise no args',
46
+ 'promise non-assertion failure in promise string arg',
47
+ 'promise non-assertion failure in promise exception arg',
48
+ 'pending in example no promise would not fail otherwise, thus fails properly',
49
+ 'async/sync mix fails properly if a sync test is among async tests',
50
+ 'async/sync mix can finish running after a long delay and fail properly',
51
+ 'be_truthy fails properly with truthy values',
52
+ 'subject sync unnamed assertion fails properly should eq 43',
53
+ 'subject sync unnamed fails properly during subject create',
54
+ 'subject async assertion implicit fails properly should eq 43',
55
+ 'subject async fails properly during creation explicit async',
56
+ 'subject async fails properly during creation implicit usage',
57
+ 'subject async assertion explicit async fails properly',
58
+ 'hooks around sync fails after example should equal 42',
59
+ 'hooks around sync fails before example',
60
+ 'hooks around async fails after example after(:each) async fails sync match passes',
61
+ 'hooks around async fails after example after(:each) async passes sync match passes',
62
+ 'hooks around async fails after example after(:each) sync fails sync match passes',
63
+ 'hooks around async fails after example after(:each) sync passes sync match passes',
64
+ 'hooks around async fails after example before(:each) fails should not reach the example',
65
+ 'hooks around async fails after example matches another async match',
66
+ 'hooks around async fails after example matches async match',
67
+ 'hooks around async fails after example matches async match fails properly',
68
+ 'hooks around async fails after example matches sync fails properly',
69
+ 'hooks around async fails after example matches sync match',
70
+ 'hooks around async fails before example after(:each) async fails sync match passes',
71
+ 'hooks around async fails before example after(:each) async passes sync match passes',
72
+ 'hooks around async fails before example after(:each) sync fails sync match passes',
73
+ 'hooks around async fails before example after(:each) sync passes sync match passes',
74
+ 'hooks around async fails before example before(:each) fails should not reach the example',
75
+ 'hooks around async fails before example matches another async match',
76
+ 'hooks around async fails before example matches async match',
77
+ 'hooks around async fails before example matches async match fails properly',
78
+ 'hooks around async fails before example matches sync fails properly',
79
+ 'hooks around async fails before example matches sync match',
80
+ 'hooks around async succeeds after(:each) async fails sync match passes',
81
+ 'hooks around async succeeds after(:each) sync fails sync match passes',
82
+ 'hooks around async succeeds before(:each) fails should not reach the example',
83
+ 'hooks around async succeeds matches async match fails properly',
84
+ 'hooks around async succeeds matches sync fails properly',
85
+ 'hooks before async with async subject async match fails properly',
86
+ 'hooks before async with async subject before :each fails properly should not reach the example',
87
+ 'hooks before async with async subject before :each succeeds, assertion fails properly should not eq 42',
88
+ 'hooks before async with async subject before :each succeeds, subject fails properly should not reach the example',
89
+ 'hooks before async with async subject both subject and before(:each) fail properly should not reach the example',
90
+ 'hooks before async with sync subject async match fails properly',
91
+ 'hooks before async with sync subject before :each fails properly should not reach the example',
92
+ 'hooks before async with sync subject match fails properly should not eq 42',
93
+ 'hooks before sync with sync subject context fails properly should not reach the example',
94
+ 'hooks before sync with sync subject before :each fails properly should not reach the example',
95
+ 'hooks before sync with sync subject match fails properly should not eq 42',
96
+ 'hooks before sync with sync subject first before :each in chain triggers failure inner context should not reach the example',
97
+ 'hooks after sync after fails should eq 42',
98
+ 'hooks after sync before fails should not reach the example',
99
+ 'hooks after sync match fails async match',
100
+ 'hooks after sync match fails sync match should eq 43',
101
+ 'hooks after async after(:each) fails properly',
102
+ 'hooks after async before(:each) fails properly',
103
+ 'hooks after async match fails properly async match',
104
+ 'hooks after async match fails properly sync match should eq 43',
105
+ 'exception handling should fail properly if an exception is raised',
106
+ 'exception handling should ignore an exception after a failed assertion',
107
+ 'legacy async fails properly after a long delay'].sort
108
+ if actual_failures != expected_failures
109
+ unexpected = actual_failures - expected_failures
110
+ missing = expected_failures - actual_failures
111
+ failure_messages << "Expected test failures do not match actual\n"
112
+ failure_messages << "\nUnexpected fails:\n#{unexpected.join("\n")}\n\nMissing fails:\n#{missing.join("\n")}\n\n"
113
+ end
114
+
115
+ failure_messages << "Expected #{expected_pending_count} pending examples but actual was #{pending}" unless pending == expected_pending_count.to_s
116
+
117
+ if failure_messages.empty?
118
+ puts 'Test successful!'
119
+ else
120
+ raise "Test failed, reasons:\n\n#{failure_messages.join("\n")}\n"
121
+ end
26
122
  end
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module RSpec
3
- VERSION = '0.4.3'
3
+ VERSION = '0.5.0.beta1'
4
4
  end
5
5
  end
data/lib/opal/rspec.rb CHANGED
@@ -1,20 +1,43 @@
1
1
  require 'opal'
2
2
  require 'opal/rspec/version'
3
+ require 'opal/minitest'
3
4
 
4
5
  # Just register our opal code path with opal build tools
5
6
  Opal.append_path File.expand_path('../../../opal', __FILE__)
6
- Opal.append_path File.expand_path('../../../vendor_lib', __FILE__)
7
+
8
+ # Catch our git submodule included directories
9
+ %w{rspec rspec-core rspec-expectations rspec-mocks rspec-support}.each do |gem|
10
+ Opal.append_path File.expand_path("../../../#{gem}/lib", __FILE__)
11
+ end
7
12
 
8
13
  Opal::Processor.dynamic_require_severity = :warning
9
14
 
10
- Opal::Processor.stub_file "rspec/matchers/built_in/have"
11
- Opal::Processor.stub_file "diff/lcs"
12
- Opal::Processor.stub_file "diff/lcs/hunk"
13
- Opal::Processor.stub_file "fileutils"
14
- Opal::Processor.stub_file "test/unit/assertions"
15
- Opal::Processor.stub_file "coderay"
16
- Opal::Processor.stub_file "optparse"
17
- Opal::Processor.stub_file "shellwords"
18
- Opal::Processor.stub_file "socket"
19
- Opal::Processor.stub_file "uri"
20
- Opal::Processor.stub_file "drb/drb"
15
+ stubs = [
16
+ 'mutex_m', # Used with some threading operations but seems to run OK without this
17
+ 'prettyprint',
18
+ 'tempfile', # Doesn't exist in Opal
19
+ 'diff/lcs',
20
+ 'diff/lcs/block',
21
+ 'diff/lcs/callbacks',
22
+ 'diff/lcs/change',
23
+ 'diff/lcs/hunk',
24
+ 'diff/lcs/internals',
25
+ 'test/unit/assertions',
26
+
27
+ # Opal doesn't have optparse, yet
28
+ 'optparse',
29
+
30
+ 'shellwords',
31
+ 'socket',
32
+ 'uri',
33
+ 'drb/drb',
34
+
35
+ # Minitest used to be in stdlib, now is in opal-minitest GEM,
36
+ # but this file does not exist
37
+ # (referenced from minitest_assertions_adapter.rb in RSpec)
38
+ 'minitest/unit',
39
+
40
+ 'cgi/util',
41
+ ]
42
+
43
+ stubs.each {|mod| Opal::Processor.stub_file mod }
@@ -0,0 +1,87 @@
1
+ class ::RSpec::Core::Example
2
+ def core_block_run
3
+ example_promise = Promise.value(@example_group_instance.instance_exec(self, &@example_block))
4
+ example_promise.then do |result|
5
+ result
6
+ end.rescue do |ex|
7
+ ex ||= Exception.new 'Async promise failed for unspecified reason'
8
+ ex = Exception.new ex unless ex.kind_of?(Exception)
9
+ ex
10
+ end
11
+ end
12
+
13
+ def resolve_subject
14
+ if example_group_instance.respond_to? :subject and example_group_instance.subject.is_a?(Promise)
15
+ example_group_instance.subject.then do |resolved_subject|
16
+ # This is a private method, but we're using Opal
17
+ example_group_instance.__memoized[:subject] = resolved_subject
18
+ end
19
+ else
20
+ Promise.value
21
+ end
22
+ end
23
+
24
+ def run_after_example
25
+ @example_group_class.hooks.run(:after, :example, self).then do
26
+ verify_mocks
27
+ assign_generated_description if RSpec.configuration.expecting_with_rspec?
28
+ end.rescue do |e|
29
+ set_exception(e, "in an `after(:example)` hook")
30
+ end.ensure do
31
+ @example_group_instance.teardown_mocks_for_rspec
32
+ end
33
+ end
34
+
35
+ def run(example_group_instance, reporter)
36
+ @example_group_instance = example_group_instance
37
+ RSpec.current_example = self
38
+
39
+ start(reporter)
40
+ Pending.mark_pending!(self, pending) if pending?
41
+
42
+ Promise.value.then do
43
+ Promise.value.then do
44
+ if skipped?
45
+ Pending.mark_pending! self, skip
46
+ elsif !RSpec.configuration.dry_run?
47
+ with_around_example_hooks do
48
+ Promise.value.then do
49
+ run_before_example.then do
50
+ resolve_subject
51
+ end.then do
52
+ core_block_run
53
+ end.then do
54
+ if pending?
55
+ Pending.mark_fixed! self
56
+
57
+ raise Pending::PendingExampleFixedError,
58
+ 'Expected example to fail since it is pending, but it passed.',
59
+ [location]
60
+ end
61
+ end
62
+ end.rescue do |e|
63
+ # no-op, required metadata has already been set by the `skip`
64
+ # method.
65
+ unless e.is_a? Pending::SkipDeclaredInExample
66
+ set_exception(e)
67
+ end
68
+ end.ensure do
69
+ run_after_example
70
+ end
71
+ end
72
+ end
73
+ end.rescue do |e|
74
+ set_exception(e)
75
+ end.ensure do
76
+ @example_group_instance.instance_variables.each do |ivar|
77
+ @example_group_instance.instance_variable_set(ivar, nil)
78
+ end
79
+ @example_group_instance = nil
80
+ end
81
+ end.then do
82
+ finish(reporter)
83
+ end.ensure do
84
+ RSpec.current_example = nil
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,94 @@
1
+ require 'promise'
2
+
3
+ class ::RSpec::Core::ExampleGroup
4
+ # @param duration [Integer, Float] time in seconds to wait
5
+ def delay(duration, &block)
6
+ `setTimeout(block, duration * 1000)`
7
+ self
8
+ end
9
+
10
+ def delay_with_promise(duration, &block)
11
+ result = Promise.new
12
+ delay(duration) { result.resolve }
13
+ result.then &block
14
+ end
15
+
16
+ def self.process_descendants(our_examples_result, reporter)
17
+ descendants = ordering_strategy.order(children)
18
+ return Promise.value our_examples_result if descendants.empty?
19
+
20
+ results_for_descendants = []
21
+ # Can use true for this because we're AND'ing everything anyways
22
+ seed = Promise.value(true)
23
+ latest_descendant = descendants.inject(seed) do |previous_promise, next_descendant|
24
+ previous_promise.then do |result|
25
+ results_for_descendants << result
26
+ next_descendant.run reporter
27
+ end
28
+ end
29
+ latest_descendant.then do |result|
30
+ results_for_descendants << result
31
+ combined_result = our_examples_result && results_for_descendants.all?
32
+ combined_result
33
+ end
34
+ end
35
+
36
+ # Promise oriented version
37
+ def self.run(reporter)
38
+ if RSpec.world.wants_to_quit
39
+ RSpec.world.clear_remaining_example_groups if top_level?
40
+ return
41
+ end
42
+
43
+ reporter.example_group_started(self)
44
+ Promise.value.then do
45
+ run_before_context_hooks(new)
46
+ end.then do
47
+ run_examples(reporter)
48
+ end.then do |our_examples_result|
49
+ process_descendants(our_examples_result, reporter)
50
+ end.rescue do |ex|
51
+ result = if ex.is_a? Pending::SkipDeclaredInExample
52
+ for_filtered_examples(reporter) { |example| example.skip_with_exception(reporter, ex) }
53
+ else
54
+ RSpec.world.wants_to_quit = true if fail_fast?
55
+ for_filtered_examples(reporter) { |example| example.fail_with_exception(reporter, ex) }
56
+ end
57
+ result
58
+ end.always do
59
+ run_after_context_hooks(new)
60
+ before_context_ivars.clear
61
+ reporter.example_group_finished(self)
62
+ end
63
+ end
64
+
65
+ # Promise oriented version
66
+ def self.run_examples(reporter)
67
+ examples = ordering_strategy.order(filtered_examples)
68
+ return Promise.value true if examples.empty?
69
+
70
+ example_promise = lambda do |example|
71
+ instance = new
72
+ set_ivars(instance, before_context_ivars)
73
+ # Always returns a promise since we modified the Example class
74
+ example.run(instance, reporter)
75
+ end
76
+
77
+ results = []
78
+ # Can use true for this because we're AND'ing everything anyways
79
+ seed = Promise.value true
80
+ latest_promise = examples.inject(seed) do |previous_promise, next_example|
81
+ previous_promise.then do |succeeded|
82
+ RSpec.world.wants_to_quit = true if fail_fast? && !succeeded
83
+ results << succeeded
84
+ example_promise[next_example]
85
+ end
86
+ end
87
+
88
+ latest_promise.then do |succeeded|
89
+ RSpec.world.wants_to_quit = true if fail_fast? && !succeeded
90
+ results << succeeded
91
+ results.all?
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,46 @@
1
+ class RSpec::Core::Hooks::HookCollection
2
+ def run
3
+ hooks.inject(Promise.value) do |previous_hook_promise, next_hook|
4
+ previous_hook_promise.then do
5
+ result = next_hook.run @example
6
+ Promise.value result
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ # Need to be able to work with a promise, but without modifying proxy, we can't get a promise back from our around hook
13
+ # therefore, modify this so that we pass a promise in
14
+ class RSpec::Core::Hooks::AroundHook
15
+ def execute_with_promise(use_promise, example, procsy)
16
+ Promise.value(example.instance_exec(procsy, &block)).then do
17
+ unless procsy.executed?
18
+ Pending.mark_skipped!(example, "#{hook_description} did not execute the example")
19
+ end
20
+ use_promise.resolve
21
+ end
22
+ end
23
+ end
24
+
25
+ # This is an odd one because of the way around hooks subclass themselves. We mirror the original code, we just carry
26
+ # around a promise with the procsy
27
+ class RSpec::Core::Hooks::AroundHookCollection
28
+ def run
29
+ seed = [@initial_procsy, Promise.value]
30
+ last_procsy, last_promise = hooks.inject(seed) do |procsy_and_around_hook_promise, around_hook|
31
+ procsy, previous_hook_promise = procsy_and_around_hook_promise
32
+ new_hook_promise = Promise.new
33
+ new_procsy = procsy.wrap do
34
+ previous_hook_promise.then do
35
+ around_hook.execute_with_promise new_hook_promise, @example, procsy
36
+ end.rescue do |ex|
37
+ # because of the way Procsy works, we need to set this here and not in the execute_with_promise method
38
+ new_hook_promise.reject ex
39
+ end
40
+ end
41
+ [new_procsy, new_hook_promise]
42
+ end
43
+ last_procsy.call
44
+ last_promise
45
+ end
46
+ end
@@ -0,0 +1,50 @@
1
+ module Opal
2
+ module RSpec
3
+ module AsyncHelpers
4
+ module ClassMethods
5
+ def async(desc, *args, &block)
6
+ options = ::RSpec::Core::Metadata.build_hash_from(args)
7
+ options.update(:skip => ::RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block
8
+
9
+ examples << Opal::RSpec::LegacyAsyncExample.new(self, desc, options, block)
10
+ examples.last
11
+ end
12
+ end
13
+
14
+ attr_accessor :legacy_promise
15
+
16
+ def self.included(base)
17
+ base.extend ClassMethods
18
+ end
19
+
20
+ # Use {#async} instead.
21
+ #
22
+ # @deprecated
23
+ def run_async(&block)
24
+ async(&block)
25
+ end
26
+
27
+ def async(&block)
28
+ begin
29
+ instance_eval &block
30
+ legacy_promise.resolve
31
+ rescue Exception => e
32
+ legacy_promise.reject e
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ class Opal::RSpec::LegacyAsyncExample < ::RSpec::Core::Example
40
+ def initialize(example_group_class, description, user_metadata, example_block=nil)
41
+ example = self
42
+ legacy_promise_ex_block = lambda do
43
+ self.legacy_promise = Promise.new
44
+ instance_exec(example, &example_block)
45
+ self.legacy_promise
46
+ end
47
+
48
+ super example_group_class, description, user_metadata, legacy_promise_ex_block
49
+ end
50
+ end