dchelimsky-rspec 1.1.10

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 (404) hide show
  1. data/History.txt +1192 -0
  2. data/License.txt +22 -0
  3. data/Manifest.txt +403 -0
  4. data/README.txt +39 -0
  5. data/Rakefile +90 -0
  6. data/TODO.txt +10 -0
  7. data/bin/autospec +4 -0
  8. data/bin/spec +4 -0
  9. data/examples/pure/autogenerated_docstrings_example.rb +19 -0
  10. data/examples/pure/before_and_after_example.rb +40 -0
  11. data/examples/pure/behave_as_example.rb +45 -0
  12. data/examples/pure/custom_expectation_matchers.rb +54 -0
  13. data/examples/pure/custom_formatter.rb +12 -0
  14. data/examples/pure/dynamic_spec.rb +9 -0
  15. data/examples/pure/file_accessor.rb +19 -0
  16. data/examples/pure/file_accessor_spec.rb +38 -0
  17. data/examples/pure/greeter_spec.rb +31 -0
  18. data/examples/pure/helper_method_example.rb +14 -0
  19. data/examples/pure/io_processor.rb +8 -0
  20. data/examples/pure/io_processor_spec.rb +21 -0
  21. data/examples/pure/legacy_spec.rb +11 -0
  22. data/examples/pure/mocking_example.rb +27 -0
  23. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  24. data/examples/pure/nested_classes_example.rb +36 -0
  25. data/examples/pure/partial_mock_example.rb +29 -0
  26. data/examples/pure/pending_example.rb +20 -0
  27. data/examples/pure/predicate_example.rb +27 -0
  28. data/examples/pure/priority.txt +1 -0
  29. data/examples/pure/shared_example_group_example.rb +81 -0
  30. data/examples/pure/shared_stack_examples.rb +38 -0
  31. data/examples/pure/spec_helper.rb +3 -0
  32. data/examples/pure/stack.rb +36 -0
  33. data/examples/pure/stack_spec.rb +63 -0
  34. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  35. data/examples/pure/stubbing_example.rb +69 -0
  36. data/examples/pure/yielding_example.rb +33 -0
  37. data/examples/stories/adder.rb +13 -0
  38. data/examples/stories/addition +34 -0
  39. data/examples/stories/addition.rb +9 -0
  40. data/examples/stories/calculator.rb +65 -0
  41. data/examples/stories/game-of-life/.loadpath +5 -0
  42. data/examples/stories/game-of-life/README.txt +21 -0
  43. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  44. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  45. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  46. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  47. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  48. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  49. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  50. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  51. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  52. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  53. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  54. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  55. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  56. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  57. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  58. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  59. data/examples/stories/game-of-life/life/game.rb +23 -0
  60. data/examples/stories/game-of-life/life/grid.rb +43 -0
  61. data/examples/stories/game-of-life/life.rb +3 -0
  62. data/examples/stories/helper.rb +9 -0
  63. data/examples/stories/steps/addition_steps.rb +18 -0
  64. data/failing_examples/README.txt +7 -0
  65. data/failing_examples/diffing_spec.rb +36 -0
  66. data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
  67. data/failing_examples/failure_in_setup.rb +10 -0
  68. data/failing_examples/failure_in_teardown.rb +10 -0
  69. data/failing_examples/mocking_example.rb +40 -0
  70. data/failing_examples/mocking_with_flexmock.rb +26 -0
  71. data/failing_examples/mocking_with_mocha.rb +25 -0
  72. data/failing_examples/mocking_with_rr.rb +27 -0
  73. data/failing_examples/partial_mock_example.rb +20 -0
  74. data/failing_examples/predicate_example.rb +29 -0
  75. data/failing_examples/raising_example.rb +47 -0
  76. data/failing_examples/spec_helper.rb +3 -0
  77. data/failing_examples/syntax_error_example.rb +7 -0
  78. data/failing_examples/team_spec.rb +44 -0
  79. data/failing_examples/timeout_behaviour.rb +7 -0
  80. data/init.rb +9 -0
  81. data/lib/autotest/discover.rb +3 -0
  82. data/lib/autotest/rspec.rb +46 -0
  83. data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
  84. data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
  85. data/lib/spec/adapters/ruby_engine.rb +26 -0
  86. data/lib/spec/adapters.rb +1 -0
  87. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  88. data/lib/spec/example/configuration.rb +167 -0
  89. data/lib/spec/example/errors.rb +30 -0
  90. data/lib/spec/example/example_group.rb +25 -0
  91. data/lib/spec/example/example_group_factory.rb +81 -0
  92. data/lib/spec/example/example_group_methods.rb +368 -0
  93. data/lib/spec/example/example_matcher.rb +44 -0
  94. data/lib/spec/example/example_methods.rb +105 -0
  95. data/lib/spec/example/module_reopening_fix.rb +21 -0
  96. data/lib/spec/example/pending.rb +18 -0
  97. data/lib/spec/example/shared_example_group.rb +52 -0
  98. data/lib/spec/example.rb +12 -0
  99. data/lib/spec/expectations/differs/default.rb +66 -0
  100. data/lib/spec/expectations/errors.rb +12 -0
  101. data/lib/spec/expectations/extensions/object.rb +63 -0
  102. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  103. data/lib/spec/expectations/extensions.rb +2 -0
  104. data/lib/spec/expectations/handler.rb +52 -0
  105. data/lib/spec/expectations.rb +56 -0
  106. data/lib/spec/extensions/class.rb +24 -0
  107. data/lib/spec/extensions/main.rb +87 -0
  108. data/lib/spec/extensions/metaclass.rb +7 -0
  109. data/lib/spec/extensions/object.rb +6 -0
  110. data/lib/spec/extensions.rb +4 -0
  111. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  112. data/lib/spec/interop/test/unit/testcase.rb +71 -0
  113. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  114. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  115. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  116. data/lib/spec/interop/test.rb +12 -0
  117. data/lib/spec/matchers/be.rb +221 -0
  118. data/lib/spec/matchers/be_close.rb +37 -0
  119. data/lib/spec/matchers/change.rb +148 -0
  120. data/lib/spec/matchers/eql.rb +43 -0
  121. data/lib/spec/matchers/equal.rb +43 -0
  122. data/lib/spec/matchers/exist.rb +22 -0
  123. data/lib/spec/matchers/has.rb +34 -0
  124. data/lib/spec/matchers/have.rb +150 -0
  125. data/lib/spec/matchers/include.rb +77 -0
  126. data/lib/spec/matchers/match.rb +41 -0
  127. data/lib/spec/matchers/operator_matcher.rb +79 -0
  128. data/lib/spec/matchers/raise_error.rb +132 -0
  129. data/lib/spec/matchers/respond_to.rb +46 -0
  130. data/lib/spec/matchers/satisfy.rb +47 -0
  131. data/lib/spec/matchers/simple_matcher.rb +132 -0
  132. data/lib/spec/matchers/throw_symbol.rb +74 -0
  133. data/lib/spec/matchers.rb +162 -0
  134. data/lib/spec/mocks/argument_constraints.rb +165 -0
  135. data/lib/spec/mocks/argument_expectation.rb +49 -0
  136. data/lib/spec/mocks/error_generator.rb +84 -0
  137. data/lib/spec/mocks/errors.rb +10 -0
  138. data/lib/spec/mocks/extensions/object.rb +3 -0
  139. data/lib/spec/mocks/extensions.rb +1 -0
  140. data/lib/spec/mocks/framework.rb +15 -0
  141. data/lib/spec/mocks/message_expectation.rb +331 -0
  142. data/lib/spec/mocks/methods.rb +51 -0
  143. data/lib/spec/mocks/mock.rb +56 -0
  144. data/lib/spec/mocks/order_group.rb +29 -0
  145. data/lib/spec/mocks/proxy.rb +224 -0
  146. data/lib/spec/mocks/space.rb +28 -0
  147. data/lib/spec/mocks/spec_methods.rb +46 -0
  148. data/lib/spec/mocks.rb +200 -0
  149. data/lib/spec/rake/spectask.rb +227 -0
  150. data/lib/spec/rake/verify_rcov.rb +52 -0
  151. data/lib/spec/runner/backtrace_tweaker.rb +56 -0
  152. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  153. data/lib/spec/runner/command_line.rb +17 -0
  154. data/lib/spec/runner/drb_command_line.rb +20 -0
  155. data/lib/spec/runner/example_group_runner.rb +59 -0
  156. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  157. data/lib/spec/runner/formatter/base_text_formatter.rb +126 -0
  158. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  159. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  160. data/lib/spec/runner/formatter/html_formatter.rb +337 -0
  161. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  162. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  163. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  164. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  165. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  166. data/lib/spec/runner/formatter/story/html_formatter.rb +174 -0
  167. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +194 -0
  168. data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
  169. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  170. data/lib/spec/runner/heckle_runner.rb +72 -0
  171. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  172. data/lib/spec/runner/option_parser.rb +205 -0
  173. data/lib/spec/runner/options.rb +320 -0
  174. data/lib/spec/runner/reporter.rb +167 -0
  175. data/lib/spec/runner/spec_parser.rb +71 -0
  176. data/lib/spec/runner.rb +213 -0
  177. data/lib/spec/story/extensions/main.rb +86 -0
  178. data/lib/spec/story/extensions/regexp.rb +9 -0
  179. data/lib/spec/story/extensions/string.rb +9 -0
  180. data/lib/spec/story/extensions.rb +3 -0
  181. data/lib/spec/story/given_scenario.rb +14 -0
  182. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  183. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  184. data/lib/spec/story/runner/scenario_runner.rb +54 -0
  185. data/lib/spec/story/runner/story_mediator.rb +137 -0
  186. data/lib/spec/story/runner/story_parser.rb +247 -0
  187. data/lib/spec/story/runner/story_runner.rb +70 -0
  188. data/lib/spec/story/runner.rb +59 -0
  189. data/lib/spec/story/scenario.rb +14 -0
  190. data/lib/spec/story/step.rb +70 -0
  191. data/lib/spec/story/step_group.rb +89 -0
  192. data/lib/spec/story/step_mother.rb +38 -0
  193. data/lib/spec/story/story.rb +39 -0
  194. data/lib/spec/story/world.rb +128 -0
  195. data/lib/spec/story.rb +10 -0
  196. data/lib/spec/version.rb +13 -0
  197. data/lib/spec.rb +32 -0
  198. data/plugins/mock_frameworks/flexmock.rb +23 -0
  199. data/plugins/mock_frameworks/mocha.rb +19 -0
  200. data/plugins/mock_frameworks/rr.rb +21 -0
  201. data/plugins/mock_frameworks/rspec.rb +20 -0
  202. data/rake_tasks/examples.rake +7 -0
  203. data/rake_tasks/examples_with_rcov.rake +9 -0
  204. data/rake_tasks/failing_examples_with_html.rake +9 -0
  205. data/rake_tasks/verify_rcov.rake +7 -0
  206. data/rspec.gemspec +42 -0
  207. data/spec/README.jruby +15 -0
  208. data/spec/autotest/autotest_helper.rb +6 -0
  209. data/spec/autotest/autotest_matchers.rb +47 -0
  210. data/spec/autotest/discover_spec.rb +19 -0
  211. data/spec/autotest/rspec_spec.rb +150 -0
  212. data/spec/rspec_suite.rb +6 -0
  213. data/spec/ruby_forker.rb +13 -0
  214. data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
  215. data/spec/spec/example/configuration_spec.rb +296 -0
  216. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  217. data/spec/spec/example/example_group_factory_spec.rb +165 -0
  218. data/spec/spec/example/example_group_methods_spec.rb +584 -0
  219. data/spec/spec/example/example_group_spec.rb +683 -0
  220. data/spec/spec/example/example_matcher_spec.rb +96 -0
  221. data/spec/spec/example/example_methods_spec.rb +169 -0
  222. data/spec/spec/example/example_runner_spec.rb +194 -0
  223. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  224. data/spec/spec/example/pending_module_spec.rb +145 -0
  225. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  226. data/spec/spec/example/shared_example_group_spec.rb +281 -0
  227. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  228. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  229. data/spec/spec/expectations/extensions/object_spec.rb +95 -0
  230. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  231. data/spec/spec/extensions/main_spec.rb +71 -0
  232. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  233. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  234. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  235. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  236. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  237. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  238. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  239. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  240. data/spec/spec/interop/test/unit/spec_spec.rb +52 -0
  241. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  242. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  243. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  244. data/spec/spec/matchers/be_close_spec.rb +39 -0
  245. data/spec/spec/matchers/be_spec.rb +248 -0
  246. data/spec/spec/matchers/change_spec.rb +329 -0
  247. data/spec/spec/matchers/description_generation_spec.rb +153 -0
  248. data/spec/spec/matchers/eql_spec.rb +28 -0
  249. data/spec/spec/matchers/equal_spec.rb +28 -0
  250. data/spec/spec/matchers/exist_spec.rb +57 -0
  251. data/spec/spec/matchers/handler_spec.rb +150 -0
  252. data/spec/spec/matchers/has_spec.rb +63 -0
  253. data/spec/spec/matchers/have_spec.rb +394 -0
  254. data/spec/spec/matchers/include_spec.rb +64 -0
  255. data/spec/spec/matchers/match_spec.rb +37 -0
  256. data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
  257. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
  258. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  259. data/spec/spec/matchers/raise_error_spec.rb +315 -0
  260. data/spec/spec/matchers/respond_to_spec.rb +54 -0
  261. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  262. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  263. data/spec/spec/matchers/throw_symbol_spec.rb +54 -0
  264. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  265. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  266. data/spec/spec/mocks/at_least_spec.rb +97 -0
  267. data/spec/spec/mocks/at_most_spec.rb +93 -0
  268. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  269. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  270. data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
  271. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  272. data/spec/spec/mocks/bug_report_496.rb +17 -0
  273. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  274. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  275. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  276. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  277. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +95 -0
  278. data/spec/spec/mocks/hash_including_matcher_spec.rb +53 -0
  279. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  280. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  281. data/spec/spec/mocks/mock_spec.rb +555 -0
  282. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  283. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  284. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  285. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  286. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  287. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  288. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  289. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +130 -0
  290. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  291. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  292. data/spec/spec/mocks/stub_spec.rb +188 -0
  293. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  294. data/spec/spec/package/bin_spec_spec.rb +22 -0
  295. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  296. data/spec/spec/runner/command_line_spec.rb +141 -0
  297. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  298. data/spec/spec/runner/empty_file.txt +0 -0
  299. data/spec/spec/runner/examples.txt +2 -0
  300. data/spec/spec/runner/failed.txt +3 -0
  301. data/spec/spec/runner/formatter/base_formatter_spec.rb +112 -0
  302. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  303. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  304. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  305. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  306. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  307. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  308. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
  309. data/spec/spec/runner/formatter/html_formatter_spec.rb +61 -0
  310. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  311. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  312. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +155 -0
  313. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  314. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  315. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  316. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +135 -0
  317. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +600 -0
  318. data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
  319. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  320. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
  321. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  322. data/spec/spec/runner/heckler_spec.rb +13 -0
  323. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  324. data/spec/spec/runner/option_parser_spec.rb +421 -0
  325. data/spec/spec/runner/options_spec.rb +450 -0
  326. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  327. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  328. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  329. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  330. data/spec/spec/runner/reporter_spec.rb +238 -0
  331. data/spec/spec/runner/resources/a_bar.rb +0 -0
  332. data/spec/spec/runner/resources/a_foo.rb +0 -0
  333. data/spec/spec/runner/resources/a_spec.rb +1 -0
  334. data/spec/spec/runner/spec.opts +2 -0
  335. data/spec/spec/runner/spec_drb.opts +1 -0
  336. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  337. data/spec/spec/runner/spec_parser_spec.rb +85 -0
  338. data/spec/spec/runner/spec_spaced.opts +2 -0
  339. data/spec/spec/runner_spec.rb +11 -0
  340. data/spec/spec/spec_classes.rb +133 -0
  341. data/spec/spec/story/builders.rb +46 -0
  342. data/spec/spec/story/extensions/main_spec.rb +161 -0
  343. data/spec/spec/story/extensions_spec.rb +14 -0
  344. data/spec/spec/story/given_scenario_spec.rb +27 -0
  345. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +90 -0
  346. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  347. data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
  348. data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
  349. data/spec/spec/story/runner/story_parser_spec.rb +401 -0
  350. data/spec/spec/story/runner/story_runner_spec.rb +294 -0
  351. data/spec/spec/story/runner_spec.rb +93 -0
  352. data/spec/spec/story/scenario_spec.rb +18 -0
  353. data/spec/spec/story/step_group_spec.rb +157 -0
  354. data/spec/spec/story/step_mother_spec.rb +84 -0
  355. data/spec/spec/story/step_spec.rb +272 -0
  356. data/spec/spec/story/story_helper.rb +2 -0
  357. data/spec/spec/story/story_spec.rb +84 -0
  358. data/spec/spec/story/world_spec.rb +423 -0
  359. data/spec/spec.opts +6 -0
  360. data/spec/spec_helper.rb +77 -0
  361. data/stories/all.rb +5 -0
  362. data/stories/configuration/before_blocks.story +21 -0
  363. data/stories/configuration/stories.rb +7 -0
  364. data/stories/example_groups/autogenerated_docstrings +45 -0
  365. data/stories/example_groups/example_group_with_should_methods +17 -0
  366. data/stories/example_groups/nested_groups +17 -0
  367. data/stories/example_groups/output +25 -0
  368. data/stories/example_groups/stories.rb +7 -0
  369. data/stories/helper.rb +6 -0
  370. data/stories/interop/examples_and_tests_together +30 -0
  371. data/stories/interop/stories.rb +7 -0
  372. data/stories/interop/test_case_with_should_methods +17 -0
  373. data/stories/mock_framework_integration/stories.rb +7 -0
  374. data/stories/mock_framework_integration/use_flexmock.story +9 -0
  375. data/stories/pending_stories/README +3 -0
  376. data/stories/resources/helpers/cmdline.rb +9 -0
  377. data/stories/resources/helpers/story_helper.rb +16 -0
  378. data/stories/resources/matchers/smart_match.rb +37 -0
  379. data/stories/resources/spec/before_blocks_example.rb +32 -0
  380. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  381. data/stories/resources/spec/simple_spec.rb +8 -0
  382. data/stories/resources/spec/spec_with_flexmock.rb +18 -0
  383. data/stories/resources/steps/running_rspec.rb +50 -0
  384. data/stories/resources/stories/failing_story.rb +15 -0
  385. data/stories/resources/test/spec_and_test_together.rb +57 -0
  386. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  387. data/stories/stories/multiline_steps.story +23 -0
  388. data/stories/stories/steps/multiline_steps.rb +13 -0
  389. data/stories/stories/stories.rb +6 -0
  390. data/story_server/prototype/javascripts/builder.js +136 -0
  391. data/story_server/prototype/javascripts/controls.js +972 -0
  392. data/story_server/prototype/javascripts/dragdrop.js +976 -0
  393. data/story_server/prototype/javascripts/effects.js +1117 -0
  394. data/story_server/prototype/javascripts/prototype.js +4140 -0
  395. data/story_server/prototype/javascripts/rspec.js +149 -0
  396. data/story_server/prototype/javascripts/scriptaculous.js +58 -0
  397. data/story_server/prototype/javascripts/slider.js +276 -0
  398. data/story_server/prototype/javascripts/sound.js +55 -0
  399. data/story_server/prototype/javascripts/unittest.js +568 -0
  400. data/story_server/prototype/lib/server.rb +24 -0
  401. data/story_server/prototype/stories.html +176 -0
  402. data/story_server/prototype/stylesheets/rspec.css +136 -0
  403. data/story_server/prototype/stylesheets/test.css +90 -0
  404. metadata +495 -0
@@ -0,0 +1,167 @@
1
+ module Spec
2
+ module Example
3
+ class Configuration
4
+ # Chooses what mock framework to use. Example:
5
+ #
6
+ # Spec::Runner.configure do |config|
7
+ # config.mock_with :rspec, :mocha, :flexmock, or :rr
8
+ # end
9
+ #
10
+ # To use any other mock framework, you'll have to provide your own
11
+ # adapter. This is simply a module that responds to the following
12
+ # methods:
13
+ #
14
+ # setup_mocks_for_rspec
15
+ # verify_mocks_for_rspec
16
+ # teardown_mocks_for_rspec.
17
+ #
18
+ # These are your hooks into the lifecycle of a given example. RSpec will
19
+ # call setup_mocks_for_rspec before running anything else in each
20
+ # Example. After executing the #after methods, RSpec will then call
21
+ # verify_mocks_for_rspec and teardown_mocks_for_rspec (this is
22
+ # guaranteed to run even if there are failures in
23
+ # verify_mocks_for_rspec).
24
+ #
25
+ # Once you've defined this module, you can pass that to mock_with:
26
+ #
27
+ # Spec::Runner.configure do |config|
28
+ # config.mock_with MyMockFrameworkAdapter
29
+ # end
30
+ #
31
+ def mock_with(mock_framework)
32
+ @mock_framework = case mock_framework
33
+ when Symbol
34
+ mock_framework_path(mock_framework.to_s)
35
+ else
36
+ mock_framework
37
+ end
38
+ end
39
+
40
+ def mock_framework # :nodoc:
41
+ @mock_framework ||= mock_framework_path("rspec")
42
+ end
43
+
44
+ # :call-seq:
45
+ # include(Some::Helpers)
46
+ # include(Some::Helpers, More::Helpers)
47
+ # include(My::Helpers, :type => :key)
48
+ #
49
+ # Declares modules to be included in multiple example groups
50
+ # (<tt>describe</tt> blocks). With no :type, the modules listed will be
51
+ # included in all example groups. Use :type to restrict the inclusion to
52
+ # a subset of example groups. The value assigned to :type should be a
53
+ # key that maps to a class that is either a subclass of
54
+ # Spec::Example::ExampleGroup or extends Spec::Example::ExampleGroupMethods
55
+ # and includes Spec::Example::ExampleMethods
56
+ #
57
+ # config.include(My::Pony, My::Horse, :type => :farm)
58
+ #
59
+ # Only example groups that have that type will get the modules included:
60
+ #
61
+ # describe "Downtown", :type => :city do
62
+ # # Will *not* get My::Pony and My::Horse included
63
+ # end
64
+ #
65
+ # describe "Old Mac Donald", :type => :farm do
66
+ # # *Will* get My::Pony and My::Horse included
67
+ # end
68
+ #
69
+ def include(*args)
70
+ include_or_extend(:include, *args)
71
+ end
72
+
73
+ def extend(*args)
74
+ include_or_extend(:extend, *args)
75
+ end
76
+
77
+ def include_or_extend(*args)
78
+ action = args.shift
79
+ args << {} unless Hash === args.last
80
+ modules, options = args_and_options(*args)
81
+ required_example_group = get_type_from_options(options)
82
+ required_example_group = required_example_group.to_sym if required_example_group
83
+ modules.each do |mod|
84
+ ExampleGroupFactory.get(required_example_group).send(action, mod)
85
+ end
86
+ end
87
+
88
+ # Defines global predicate matchers. Example:
89
+ #
90
+ # config.predicate_matchers[:swim] = :can_swim?
91
+ #
92
+ # This makes it possible to say:
93
+ #
94
+ # person.should swim # passes if person.can_swim? returns true
95
+ #
96
+ def predicate_matchers
97
+ @predicate_matchers ||= {}
98
+ end
99
+
100
+ # Prepends a global <tt>before</tt> block to all example groups.
101
+ # See #append_before for filtering semantics.
102
+ def prepend_before(*args, &proc)
103
+ scope, options = scope_and_options(*args)
104
+ example_group = ExampleGroupFactory.get(
105
+ get_type_from_options(options)
106
+ )
107
+ example_group.prepend_before(scope, &proc)
108
+ end
109
+
110
+ # Appends a global <tt>before</tt> block to all example groups.
111
+ #
112
+ # If you want to restrict the block to a subset of all the example
113
+ # groups then specify this in a Hash as the last argument:
114
+ #
115
+ # config.prepend_before(:all, :type => :farm)
116
+ #
117
+ # or
118
+ #
119
+ # config.prepend_before(:type => :farm)
120
+ #
121
+ def append_before(*args, &proc)
122
+ scope, options = scope_and_options(*args)
123
+ example_group = ExampleGroupFactory.get(
124
+ get_type_from_options(options)
125
+ )
126
+ example_group.append_before(scope, &proc)
127
+ end
128
+ alias_method :before, :append_before
129
+
130
+ # Prepends a global <tt>after</tt> block to all example groups.
131
+ # See #append_before for filtering semantics.
132
+ def prepend_after(*args, &proc)
133
+ scope, options = scope_and_options(*args)
134
+ example_group = ExampleGroupFactory.get(
135
+ get_type_from_options(options)
136
+ )
137
+ example_group.prepend_after(scope, &proc)
138
+ end
139
+ alias_method :after, :prepend_after
140
+
141
+ # Appends a global <tt>after</tt> block to all example groups.
142
+ # See #append_before for filtering semantics.
143
+ def append_after(*args, &proc)
144
+ scope, options = scope_and_options(*args)
145
+ example_group = ExampleGroupFactory.get(
146
+ get_type_from_options(options)
147
+ )
148
+ example_group.append_after(scope, &proc)
149
+ end
150
+
151
+ private
152
+
153
+ def scope_and_options(*args)
154
+ args, options = args_and_options(*args)
155
+ scope = (args[0] || :each), options
156
+ end
157
+
158
+ def get_type_from_options(options)
159
+ options[:type] || options[:behaviour_type]
160
+ end
161
+
162
+ def mock_framework_path(framework_name)
163
+ File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "plugins", "mock_frameworks", framework_name))
164
+ end
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,30 @@
1
+ module Spec
2
+ module Example
3
+ class ExamplePendingError < StandardError
4
+ attr_reader :pending_caller
5
+
6
+ def initialize(message=nil)
7
+ super
8
+ @pending_caller = caller[2]
9
+ end
10
+ end
11
+
12
+ class NotYetImplementedError < ExamplePendingError
13
+ MESSAGE = "Not Yet Implemented"
14
+ RSPEC_ROOT_LIB = File.expand_path(File.dirname(__FILE__) + "/../..")
15
+
16
+ def initialize(backtrace)
17
+ super(MESSAGE)
18
+ @pending_caller = pending_caller_from(backtrace)
19
+ end
20
+
21
+ private
22
+
23
+ def pending_caller_from(backtrace)
24
+ backtrace.detect {|line| !line.include?(RSPEC_ROOT_LIB) }
25
+ end
26
+ end
27
+
28
+ class PendingExampleFixedError < StandardError; end
29
+ end
30
+ end
@@ -0,0 +1,25 @@
1
+ module Spec
2
+ module Example
3
+ # Base class for customized example groups. Use this if you
4
+ # want to make a custom example group.
5
+ class ExampleGroup
6
+ extend Spec::Example::ExampleGroupMethods
7
+ include Spec::Example::ExampleMethods
8
+
9
+ def initialize(defined_description, options={}, &implementation)
10
+ @_options = options
11
+ @_defined_description = defined_description
12
+ @_implementation = implementation || pending_implementation
13
+ end
14
+
15
+ private
16
+
17
+ def pending_implementation
18
+ error = NotYetImplementedError.new(caller)
19
+ lambda { raise(error) }
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ Spec::ExampleGroup = Spec::Example::ExampleGroup
@@ -0,0 +1,81 @@
1
+ module Spec
2
+ module Example
3
+ class ExampleGroupFactory
4
+ class << self
5
+ def reset
6
+ @example_group_types = nil
7
+ default(ExampleGroup)
8
+ end
9
+
10
+ def all_registered?(example_group_classes)
11
+ example_group_classes.each do |example_group_class|
12
+ return false unless registered_or_ancestor_of_registered? example_group_class
13
+ end
14
+ return true
15
+ end
16
+
17
+ # Registers an example group class +klass+ with the symbol +type+. For
18
+ # example:
19
+ #
20
+ # Spec::Example::ExampleGroupFactory.register(:farm, FarmExampleGroup)
21
+ #
22
+ # With that you can append a hash with :type => :farm to the describe
23
+ # method and it will load an instance of FarmExampleGroup.
24
+ #
25
+ # describe Pig, :type => :farm do
26
+ # ...
27
+ #
28
+ # If you don't use the hash explicitly, <tt>describe</tt> will
29
+ # implicitly use an instance of FarmExampleGroup for any file loaded
30
+ # from the <tt>./spec/farm</tt> directory.
31
+ def register(key, example_group_class)
32
+ @example_group_types[key] = example_group_class
33
+ end
34
+
35
+ # Sets the default ExampleGroup class
36
+ def default(example_group_class)
37
+ old = @example_group_types
38
+ @example_group_types = Hash.new(example_group_class)
39
+ @example_group_types.merge!(old) if old
40
+ end
41
+
42
+ def get(key=nil)
43
+ if @example_group_types.values.include?(key)
44
+ key
45
+ else
46
+ @example_group_types[key]
47
+ end
48
+ end
49
+
50
+ def create_example_group(*args, &block)
51
+ opts = Hash === args.last ? args.last : {}
52
+ superclass = determine_superclass(opts)
53
+ superclass.describe(*args, &block)
54
+ end
55
+
56
+ protected
57
+
58
+ def determine_superclass(opts)
59
+ key = if opts[:type]
60
+ opts[:type]
61
+ elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.join('|')})/
62
+ $2 == '' ? nil : $2.to_sym
63
+ end
64
+ get(key)
65
+ end
66
+
67
+ private
68
+
69
+ def registered_or_ancestor_of_registered? example_group_class
70
+ registered_types.any? {|registered_type| registered_type.ancestors.include? example_group_class}
71
+ end
72
+
73
+ def registered_types
74
+ @example_group_types.values
75
+ end
76
+
77
+ end
78
+ self.reset
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,368 @@
1
+ module Spec
2
+ module Example
3
+
4
+ module ExampleGroupMethods
5
+ include Spec::Example::BeforeAndAfterHooks
6
+
7
+ class << self
8
+ attr_accessor :matcher_class
9
+
10
+ def description_text(*args)
11
+ args.inject("") do |result, arg|
12
+ result << " " unless (result == "" || arg.to_s =~ /^(\s|\.|#)/)
13
+ result << arg.to_s
14
+ end
15
+ end
16
+ end
17
+
18
+ attr_reader :description_text, :description_options, :spec_path
19
+ alias :options :description_options
20
+
21
+ def description_args
22
+ @description_args ||= []
23
+ end
24
+
25
+ def inherited(klass)
26
+ super
27
+ klass.register {}
28
+ Spec::Runner.register_at_exit_hook
29
+ end
30
+
31
+ # Makes the describe/it syntax available from a class. For example:
32
+ #
33
+ # class StackSpec < Spec::ExampleGroup
34
+ # describe Stack, "with no elements"
35
+ #
36
+ # before
37
+ # @stack = Stack.new
38
+ # end
39
+ #
40
+ # it "should raise on pop" do
41
+ # lambda{ @stack.pop }.should raise_error
42
+ # end
43
+ # end
44
+ #
45
+ def describe(*args, &example_group_block)
46
+ args << {} unless Hash === args.last
47
+ if example_group_block
48
+ options = args.last
49
+ options[:spec_path] = eval("caller(0)[1]", example_group_block) unless options[:spec_path]
50
+ if options[:shared]
51
+ create_shared_example_group(args, example_group_block)
52
+ else
53
+ create_nested_example_group(args, example_group_block)
54
+ end
55
+ else
56
+ set_description(*args)
57
+ end
58
+ end
59
+ alias :context :describe
60
+
61
+ def create_shared_example_group(args, example_group_block)
62
+ SharedExampleGroup.new(*args, &example_group_block)
63
+ end
64
+
65
+ def create_nested_example_group(args, example_group_block)
66
+ self.subclass("Subclass") do
67
+ describe(*args)
68
+ module_eval(&example_group_block)
69
+ end
70
+ end
71
+
72
+ # Use this to pull in examples from shared example groups.
73
+ # See Spec::Runner for information about shared example groups.
74
+ def it_should_behave_like(*shared_example_groups)
75
+ shared_example_groups.each do |group|
76
+ include_shared_example_group(group)
77
+ end
78
+ end
79
+
80
+ # :call-seq:
81
+ # predicate_matchers[matcher_name] = method_on_object
82
+ # predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
83
+ #
84
+ # Dynamically generates a custom matcher that will match
85
+ # a predicate on your class. RSpec provides a couple of these
86
+ # out of the box:
87
+ #
88
+ # exist (or state expectations)
89
+ # File.should exist("path/to/file")
90
+ #
91
+ # an_instance_of (for mock argument constraints)
92
+ # mock.should_receive(:message).with(an_instance_of(String))
93
+ #
94
+ # == Examples
95
+ #
96
+ # class Fish
97
+ # def can_swim?
98
+ # true
99
+ # end
100
+ # end
101
+ #
102
+ # describe Fish do
103
+ # predicate_matchers[:swim] = :can_swim?
104
+ # it "should swim" do
105
+ # Fish.new.should swim
106
+ # end
107
+ # end
108
+ def predicate_matchers
109
+ @predicate_matchers ||= {:an_instance_of => :is_a?}
110
+ end
111
+
112
+ # Creates an instance of the current example group class and adds it to
113
+ # a collection of examples of the current example group.
114
+ def example(description=nil, options={}, &implementation)
115
+ e = new(description, options, &implementation)
116
+ example_objects << e
117
+ e
118
+ end
119
+
120
+ alias_method :it, :example
121
+ alias_method :specify, :example
122
+
123
+ # Use this to temporarily disable an example.
124
+ def xexample(description=nil, opts={}, &block)
125
+ Kernel.warn("Example disabled: #{description}")
126
+ end
127
+
128
+ alias_method :xit, :xexample
129
+ alias_method :xspecify, :xexample
130
+
131
+ def run
132
+ examples = examples_to_run
133
+ reporter.add_example_group(self) unless examples_to_run.empty?
134
+ return true if examples.empty?
135
+ return dry_run(examples) if dry_run?
136
+
137
+ plugin_mock_framework
138
+ define_methods_from_predicate_matchers
139
+
140
+ success, before_all_instance_variables = run_before_all
141
+ success, after_all_instance_variables = execute_examples(success, before_all_instance_variables, examples)
142
+ success = run_after_all(success, after_all_instance_variables)
143
+ end
144
+
145
+ def description
146
+ result = ExampleGroupMethods.description_text(*description_parts)
147
+ if result.nil? || result == ""
148
+ return to_s
149
+ else
150
+ result
151
+ end
152
+ end
153
+
154
+ def described_type
155
+ description_parts.find {|part| part.is_a?(Module)}
156
+ end
157
+
158
+ def description_parts #:nodoc:
159
+ parts = []
160
+ each_ancestor_example_group_class do |example_group_class|
161
+ parts << example_group_class.description_args
162
+ end
163
+ parts.flatten.compact
164
+ end
165
+
166
+ def set_description(*args)
167
+ args, options = args_and_options(*args)
168
+ @description_args = args
169
+ @description_options = options
170
+ @description_text = ExampleGroupMethods.description_text(*args)
171
+ @spec_path = File.expand_path(options[:spec_path]) if options[:spec_path]
172
+ self
173
+ end
174
+
175
+ def examples #:nodoc:
176
+ examples = example_objects.dup
177
+ add_method_examples(examples)
178
+ Spec::Runner.options.reverse ? examples.reverse : examples
179
+ end
180
+
181
+ def number_of_examples #:nodoc:
182
+ examples.length
183
+ end
184
+
185
+ # Only used from RSpec's own examples
186
+ def reset # :nodoc:
187
+ @before_all_parts = nil
188
+ @after_all_parts = nil
189
+ @before_each_parts = nil
190
+ @after_each_parts = nil
191
+ end
192
+
193
+ def register(&registration_binding_block)
194
+ @registration_binding_block = registration_binding_block
195
+ Spec::Runner.options.add_example_group self
196
+ end
197
+
198
+ def unregister #:nodoc:
199
+ Spec::Runner.options.remove_example_group self
200
+ end
201
+
202
+ def registration_backtrace
203
+ eval("caller", @registration_binding_block)
204
+ end
205
+
206
+ def run_before_each(example)
207
+ each_ancestor_example_group_class do |example_group_class|
208
+ example.eval_each_fail_fast(example_group_class.before_each_parts)
209
+ end
210
+ end
211
+
212
+ def run_after_each(example)
213
+ each_ancestor_example_group_class(:superclass_first) do |example_group_class|
214
+ example.eval_each_fail_slow(example_group_class.after_each_parts)
215
+ end
216
+ end
217
+
218
+ private
219
+ def dry_run(examples)
220
+ examples.each do |example|
221
+ Spec::Runner.options.reporter.example_started(example)
222
+ Spec::Runner.options.reporter.example_finished(example)
223
+ end
224
+ return true
225
+ end
226
+
227
+ def run_before_all
228
+ before_all = new("before(:all)")
229
+ begin
230
+ each_ancestor_example_group_class do |example_group_class|
231
+ before_all.eval_each_fail_fast(example_group_class.before_all_parts)
232
+ end
233
+ return [true, before_all.instance_variable_hash]
234
+ rescue Exception => e
235
+ reporter.failure(before_all, e)
236
+ return [false, before_all.instance_variable_hash]
237
+ end
238
+ end
239
+
240
+ def execute_examples(success, instance_variables, examples)
241
+ return [success, instance_variables] unless success
242
+
243
+ after_all_instance_variables = instance_variables
244
+ examples.each do |example_group_instance|
245
+ success &= example_group_instance.execute(Spec::Runner.options, instance_variables)
246
+ after_all_instance_variables = example_group_instance.instance_variable_hash
247
+ end
248
+ return [success, after_all_instance_variables]
249
+ end
250
+
251
+ def run_after_all(success, instance_variables)
252
+ after_all = new("after(:all)")
253
+ after_all.set_instance_variables_from_hash(instance_variables)
254
+ each_ancestor_example_group_class(:superclass_first) do |example_group_class|
255
+ after_all.eval_each_fail_slow(example_group_class.after_all_parts)
256
+ end
257
+ return success
258
+ rescue Exception => e
259
+ reporter.failure(after_all, e)
260
+ return false
261
+ end
262
+
263
+ def examples_to_run
264
+ all_examples = examples
265
+ return all_examples unless specified_examples?
266
+ all_examples.reject do |example|
267
+ matcher = ExampleGroupMethods.matcher_class.
268
+ new(description.to_s, example.description)
269
+ !matcher.matches?(specified_examples)
270
+ end
271
+ end
272
+
273
+ def specified_examples?
274
+ specified_examples && !specified_examples.empty?
275
+ end
276
+
277
+ def specified_examples
278
+ Spec::Runner.options.examples
279
+ end
280
+
281
+ def reporter
282
+ Spec::Runner.options.reporter
283
+ end
284
+
285
+ def dry_run?
286
+ Spec::Runner.options.dry_run
287
+ end
288
+
289
+ def example_objects
290
+ @example_objects ||= []
291
+ end
292
+
293
+ def each_ancestor_example_group_class(superclass_last=false)
294
+ classes = []
295
+ current_class = self
296
+ while is_example_group_class?(current_class)
297
+ superclass_last ? classes << current_class : classes.unshift(current_class)
298
+ current_class = current_class.superclass
299
+ end
300
+
301
+ classes.each do |example_group|
302
+ yield example_group
303
+ end
304
+ end
305
+
306
+ def is_example_group_class?(klass)
307
+ klass.kind_of?(ExampleGroupMethods) && klass.included_modules.include?(ExampleMethods)
308
+ end
309
+
310
+ def plugin_mock_framework
311
+ case mock_framework = Spec::Runner.configuration.mock_framework
312
+ when Module
313
+ include mock_framework
314
+ else
315
+ require Spec::Runner.configuration.mock_framework
316
+ include Spec::Plugins::MockFramework
317
+ end
318
+ end
319
+
320
+ def define_methods_from_predicate_matchers # :nodoc:
321
+ all_predicate_matchers = predicate_matchers.merge(
322
+ Spec::Runner.configuration.predicate_matchers
323
+ )
324
+ all_predicate_matchers.each_pair do |matcher_method, method_on_object|
325
+ define_method matcher_method do |*args|
326
+ eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
327
+ end
328
+ end
329
+ end
330
+
331
+ def add_method_examples(examples)
332
+ instance_methods.sort.each do |method_name|
333
+ if example_method?(method_name)
334
+ examples << new(method_name) do
335
+ __send__(method_name)
336
+ end
337
+ end
338
+ end
339
+ end
340
+
341
+ def example_method?(method_name)
342
+ should_method?(method_name)
343
+ end
344
+
345
+ def should_method?(method_name)
346
+ !(method_name =~ /^should(_not)?$/) &&
347
+ method_name =~ /^should/ && (
348
+ [-1,0].include?(instance_method(method_name).arity)
349
+ )
350
+ end
351
+
352
+ def include_shared_example_group(shared_example_group)
353
+ case shared_example_group
354
+ when SharedExampleGroup
355
+ include shared_example_group
356
+ else
357
+ example_group = SharedExampleGroup.find_shared_example_group(shared_example_group)
358
+ unless example_group
359
+ raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
360
+ end
361
+ include(example_group)
362
+ end
363
+ end
364
+
365
+ end
366
+
367
+ end
368
+ end