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,54 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+ require 'spec/mocks'
3
+
4
+ module Spec
5
+ module Mocks
6
+ describe Space do
7
+ before :each do
8
+ @space = Space.new
9
+ klazz = Class.new do
10
+ def rspec_verify
11
+ @verified = true
12
+ end
13
+ def verified?
14
+ @verified
15
+ end
16
+ def rspec_reset
17
+ @reset = true
18
+ end
19
+ def reset?
20
+ @reset
21
+ end
22
+ end
23
+ @m1 = klazz.new
24
+ @m2 = klazz.new
25
+ end
26
+ it "should verify all mocks within" do
27
+ @space.add(@m1)
28
+ @space.add(@m2)
29
+ @space.verify_all
30
+ @m1.should be_verified
31
+ @m2.should be_verified
32
+ end
33
+ it "should reset all mocks within" do
34
+ @space.add(m1 = mock("mock1"))
35
+ @space.add(m2 = mock("mock2"))
36
+ m1.should_receive(:rspec_reset)
37
+ m2.should_receive(:rspec_reset)
38
+ @space.reset_all
39
+ end
40
+ it "should clear internal mocks on reset_all" do
41
+ @space.add(m = mock("mock"))
42
+ @space.reset_all
43
+ @space.instance_eval { mocks.empty? }.should be_true
44
+ end
45
+ it "should only add an instance once" do
46
+ @space.add(m1 = mock("mock1"))
47
+ @space.add(m1)
48
+ m1.should_receive(:rspec_verify)
49
+ @space.verify_all
50
+ end
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,555 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Mocks
5
+ describe Mock do
6
+
7
+ before(:each) do
8
+ @mock = mock("test mock")
9
+ end
10
+
11
+ after(:each) do
12
+ @mock.rspec_reset
13
+ end
14
+
15
+ it "should report line number of expectation of unreceived message" do
16
+ expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
17
+ begin
18
+ @mock.rspec_verify
19
+ violated
20
+ rescue MockExpectationError => e
21
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
22
+ e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
23
+ end
24
+ end
25
+
26
+ it "should report line number of expectation of unreceived message after #should_receive after similar stub" do
27
+ @mock.stub!(:wont_happen)
28
+ expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
29
+ begin
30
+ @mock.rspec_verify
31
+ violated
32
+ rescue MockExpectationError => e
33
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
34
+ e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
35
+ end
36
+ end
37
+
38
+ it "should pass when not receiving message specified as not to be received" do
39
+ @mock.should_not_receive(:not_expected)
40
+ @mock.rspec_verify
41
+ end
42
+
43
+ it "should pass when receiving message specified as not to be received with different args" do
44
+ @mock.should_not_receive(:message).with("unwanted text")
45
+ @mock.should_receive(:message).with("other text")
46
+ @mock.message "other text"
47
+ @mock.rspec_verify
48
+ end
49
+
50
+ it "should fail when receiving message specified as not to be received" do
51
+ @mock.should_not_receive(:not_expected)
52
+ lambda {
53
+ @mock.not_expected
54
+ violated
55
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
56
+ end
57
+
58
+ it "should fail when receiving message specified as not to be received with args" do
59
+ @mock.should_not_receive(:not_expected).with("unexpected text")
60
+ lambda {
61
+ @mock.not_expected("unexpected text")
62
+ violated
63
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once")
64
+ end
65
+
66
+ it "should pass when receiving message specified as not to be received with wrong args" do
67
+ @mock.should_not_receive(:not_expected).with("unexpected text")
68
+ @mock.not_expected "really unexpected text"
69
+ @mock.rspec_verify
70
+ end
71
+
72
+ it "should allow block to calculate return values" do
73
+ @mock.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
74
+ @mock.something("a","b","c").should == "cba"
75
+ @mock.rspec_verify
76
+ end
77
+
78
+ it "should allow parameter as return value" do
79
+ @mock.should_receive(:something).with("a","b","c").and_return("booh")
80
+ @mock.something("a","b","c").should == "booh"
81
+ @mock.rspec_verify
82
+ end
83
+
84
+ it "should return nil if no return value set" do
85
+ @mock.should_receive(:something).with("a","b","c")
86
+ @mock.something("a","b","c").should be_nil
87
+ @mock.rspec_verify
88
+ end
89
+
90
+ it "should raise exception if args don't match when method called" do
91
+ @mock.should_receive(:something).with("a","b","c").and_return("booh")
92
+ lambda {
93
+ @mock.something("a","d","c")
94
+ violated
95
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
96
+ end
97
+
98
+ it "should raise exception if args don't match when method called even when the method is stubbed" do
99
+ @mock.stub!(:something)
100
+ @mock.should_receive(:something).with("a","b","c")
101
+ lambda {
102
+ @mock.something("a","d","c")
103
+ @mock.rspec_verify
104
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
105
+ end
106
+
107
+ it "should raise exception if args don't match when method called even when using null_object" do
108
+ @mock = mock("test mock", :null_object => true)
109
+ @mock.should_receive(:something).with("a","b","c")
110
+ lambda {
111
+ @mock.something("a","d","c")
112
+ @mock.rspec_verify
113
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
114
+ end
115
+
116
+ it "should fail if unexpected method called" do
117
+ lambda {
118
+ @mock.something("a","b","c")
119
+ violated
120
+ }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")")
121
+ end
122
+
123
+ it "should use block for expectation if provided" do
124
+ @mock.should_receive(:something) do | a, b |
125
+ a.should == "a"
126
+ b.should == "b"
127
+ "booh"
128
+ end
129
+ @mock.something("a", "b").should == "booh"
130
+ @mock.rspec_verify
131
+ end
132
+
133
+ it "should fail if expectation block fails" do
134
+ @mock.should_receive(:something) {| bool | bool.should be_true}
135
+ lambda {
136
+ @mock.something false
137
+ }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/)
138
+ end
139
+
140
+ it "should fail right away when method defined as never is received" do
141
+ @mock.should_receive(:not_expected).never
142
+ lambda {
143
+ @mock.not_expected
144
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
145
+ end
146
+
147
+ it "should eventually fail when method defined as never is received" do
148
+ @mock.should_receive(:not_expected).never
149
+ lambda {
150
+ @mock.not_expected
151
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
152
+ end
153
+
154
+ it "should raise when told to" do
155
+ @mock.should_receive(:something).and_raise(RuntimeError)
156
+ lambda do
157
+ @mock.something
158
+ end.should raise_error(RuntimeError)
159
+ end
160
+
161
+ it "should raise passed an Exception instance" do
162
+ error = RuntimeError.new("error message")
163
+ @mock.should_receive(:something).and_raise(error)
164
+ lambda {
165
+ @mock.something
166
+ }.should raise_error(RuntimeError, "error message")
167
+ end
168
+
169
+ it "should raise RuntimeError with passed message" do
170
+ @mock.should_receive(:something).and_raise("error message")
171
+ lambda {
172
+ @mock.something
173
+ }.should raise_error(RuntimeError, "error message")
174
+ end
175
+
176
+ it "should not raise when told to if args dont match" do
177
+ @mock.should_receive(:something).with(2).and_raise(RuntimeError)
178
+ lambda {
179
+ @mock.something 1
180
+ }.should raise_error(MockExpectationError)
181
+ end
182
+
183
+ it "should throw when told to" do
184
+ @mock.should_receive(:something).and_throw(:blech)
185
+ lambda {
186
+ @mock.something
187
+ }.should throw_symbol(:blech)
188
+ end
189
+
190
+ it "should raise when explicit return and block constrained" do
191
+ lambda {
192
+ @mock.should_receive(:fruit) do |colour|
193
+ :strawberry
194
+ end.and_return :apple
195
+ }.should raise_error(AmbiguousReturnError)
196
+ end
197
+
198
+ it "should ignore args on any args" do
199
+ @mock.should_receive(:something).at_least(:once).with(any_args)
200
+ @mock.something
201
+ @mock.something 1
202
+ @mock.something "a", 2
203
+ @mock.something [], {}, "joe", 7
204
+ @mock.rspec_verify
205
+ end
206
+
207
+ it "should fail on no args if any args received" do
208
+ @mock.should_receive(:something).with(no_args())
209
+ lambda {
210
+ @mock.something 1
211
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)")
212
+ end
213
+
214
+ it "should fail when args are expected but none are received" do
215
+ @mock.should_receive(:something).with(1)
216
+ lambda {
217
+ @mock.something
218
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)")
219
+ end
220
+
221
+ it "should return value from block by default" do
222
+ @mock.stub!(:method_that_yields).and_yield
223
+ @mock.method_that_yields { :returned_obj }.should == :returned_obj
224
+ @mock.rspec_verify
225
+ end
226
+
227
+ it "should yield 0 args to blocks that take a variable number of arguments" do
228
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield
229
+ a = nil
230
+ @mock.yield_back {|*a|}
231
+ a.should == []
232
+ @mock.rspec_verify
233
+ end
234
+
235
+ it "should yield 0 args multiple times to blocks that take a variable number of arguments" do
236
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield.
237
+ and_yield
238
+ a = nil
239
+ b = []
240
+ @mock.yield_back {|*a| b << a}
241
+ b.should == [ [], [] ]
242
+ @mock.rspec_verify
243
+ end
244
+
245
+ it "should yield one arg to blocks that take a variable number of arguments" do
246
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
247
+ a = nil
248
+ @mock.yield_back {|*a|}
249
+ a.should == [99]
250
+ @mock.rspec_verify
251
+ end
252
+
253
+ it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do
254
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
255
+ and_yield(43).
256
+ and_yield("something fruity")
257
+ a = nil
258
+ b = []
259
+ @mock.yield_back {|*a| b << a}
260
+ b.should == [[99], [43], ["something fruity"]]
261
+ @mock.rspec_verify
262
+ end
263
+
264
+ it "should yield many args to blocks that take a variable number of arguments" do
265
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
266
+ a = nil
267
+ @mock.yield_back {|*a|}
268
+ a.should == [99, 27, "go"]
269
+ @mock.rspec_verify
270
+ end
271
+
272
+ it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do
273
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go").
274
+ and_yield("wait", :amber).
275
+ and_yield("stop", 12, :red)
276
+ a = nil
277
+ b = []
278
+ @mock.yield_back {|*a| b << a}
279
+ b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]]
280
+ @mock.rspec_verify
281
+ end
282
+
283
+ it "should yield single value" do
284
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
285
+ a = nil
286
+ @mock.yield_back {|a|}
287
+ a.should == 99
288
+ @mock.rspec_verify
289
+ end
290
+
291
+ it "should yield single value 3 times consecutively" do
292
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
293
+ and_yield(43).
294
+ and_yield("something fruity")
295
+ a = nil
296
+ b = []
297
+ @mock.yield_back {|a| b << a}
298
+ b.should == [99, 43, "something fruity"]
299
+ @mock.rspec_verify
300
+ end
301
+
302
+ it "should yield two values" do
303
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
304
+ a, b = nil
305
+ @mock.yield_back {|a,b|}
306
+ a.should == 'wha'
307
+ b.should == 'zup'
308
+ @mock.rspec_verify
309
+ end
310
+
311
+ it "should yield two values 3 times consecutively" do
312
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
313
+ and_yield('not', 'down').
314
+ and_yield(14, 65)
315
+ a, b = nil
316
+ c = []
317
+ @mock.yield_back {|a,b| c << [a, b]}
318
+ c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]]
319
+ @mock.rspec_verify
320
+ end
321
+
322
+ it "should fail when calling yielding method with wrong arity" do
323
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
324
+ lambda {
325
+ @mock.yield_back {|a|}
326
+ }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1")
327
+ end
328
+
329
+ it "should fail when calling yielding method consecutively with wrong arity" do
330
+ @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
331
+ and_yield('down').
332
+ and_yield(14, 65)
333
+ lambda {
334
+ a, b = nil
335
+ c = []
336
+ @mock.yield_back {|a,b| c << [a, b]}
337
+ }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"down\"| to block with arity of 2")
338
+ end
339
+
340
+ it "should fail when calling yielding method without block" do
341
+ @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
342
+ lambda {
343
+ @mock.yield_back
344
+ }.should raise_error(MockExpectationError, "Mock 'test mock' asked to yield |[\"wha\", \"zup\"]| but no block was passed")
345
+ end
346
+
347
+ it "should be able to mock send" do
348
+ @mock.should_receive(:send).with(any_args)
349
+ @mock.send 'hi'
350
+ @mock.rspec_verify
351
+ end
352
+
353
+ it "should be able to raise from method calling yielding mock" do
354
+ @mock.should_receive(:yield_me).and_yield 44
355
+
356
+ lambda {
357
+ @mock.yield_me do |x|
358
+ raise "Bang"
359
+ end
360
+ }.should raise_error(StandardError, "Bang")
361
+
362
+ @mock.rspec_verify
363
+ end
364
+
365
+ it "should clear expectations after verify" do
366
+ @mock.should_receive(:foobar)
367
+ @mock.foobar
368
+ @mock.rspec_verify
369
+ lambda {
370
+ @mock.foobar
371
+ }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :foobar with (no args)")
372
+ end
373
+
374
+ it "should restore objects to their original state on rspec_reset" do
375
+ mock = mock("this is a mock")
376
+ mock.should_receive(:blah)
377
+ mock.rspec_reset
378
+ mock.rspec_verify #should throw if reset didn't work
379
+ end
380
+
381
+ it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do
382
+ # Object#method_missing throws either NameErrors or NoMethodErrors.
383
+ #
384
+ # On a fresh ruby program Object#method_missing:
385
+ # * raises a NoMethodError when called directly
386
+ # * raises a NameError when called indirectly
387
+ #
388
+ # Once Object#method_missing has been called at least once (on any object)
389
+ # it starts behaving differently:
390
+ # * raises a NameError when called directly
391
+ # * raises a NameError when called indirectly
392
+ #
393
+ # There was a bug in Mock#method_missing that relied on the fact
394
+ # that calling Object#method_missing directly raises a NoMethodError.
395
+ # This example tests that the bug doesn't exist anymore.
396
+
397
+
398
+ # Ensures that method_missing always raises NameErrors.
399
+ a_method_that_doesnt_exist rescue
400
+
401
+
402
+ @mock.should_receive(:foobar)
403
+ @mock.foobar
404
+ @mock.rspec_verify
405
+
406
+ lambda { @mock.foobar }.should_not raise_error(NameError)
407
+ lambda { @mock.foobar }.should raise_error(MockExpectationError)
408
+ end
409
+
410
+ it "should temporarily replace a method stub on a mock" do
411
+ @mock.stub!(:msg).and_return(:stub_value)
412
+ @mock.should_receive(:msg).with(:arg).and_return(:mock_value)
413
+ @mock.msg(:arg).should equal(:mock_value)
414
+ @mock.msg.should equal(:stub_value)
415
+ @mock.msg.should equal(:stub_value)
416
+ @mock.rspec_verify
417
+ end
418
+
419
+ it "should not require a different signature to replace a method stub" do
420
+ @mock.stub!(:msg).and_return(:stub_value)
421
+ @mock.should_receive(:msg).and_return(:mock_value)
422
+ @mock.msg(:arg).should equal(:mock_value)
423
+ @mock.msg.should equal(:stub_value)
424
+ @mock.msg.should equal(:stub_value)
425
+ @mock.rspec_verify
426
+ end
427
+
428
+ it "should raise an error when a previously stubbed method has a negative expectation" do
429
+ @mock.stub!(:msg).and_return(:stub_value)
430
+ @mock.should_not_receive(:msg).and_return(:mock_value)
431
+ lambda {@mock.msg(:arg)}.should raise_error(MockExpectationError)
432
+ end
433
+
434
+ it "should temporarily replace a method stub on a non-mock" do
435
+ non_mock = Object.new
436
+ non_mock.stub!(:msg).and_return(:stub_value)
437
+ non_mock.should_receive(:msg).with(:arg).and_return(:mock_value)
438
+ non_mock.msg(:arg).should equal(:mock_value)
439
+ non_mock.msg.should equal(:stub_value)
440
+ non_mock.msg.should equal(:stub_value)
441
+ non_mock.rspec_verify
442
+ end
443
+
444
+ it "should return the stubbed value when no new value specified" do
445
+ @mock.stub!(:msg).and_return(:stub_value)
446
+ @mock.should_receive(:msg)
447
+ @mock.msg.should equal(:stub_value)
448
+ @mock.rspec_verify
449
+ end
450
+
451
+ it "should not mess with the stub's yielded values when also mocked" do
452
+ @mock.stub!(:yield_back).and_yield(:stub_value)
453
+ @mock.should_receive(:yield_back).and_yield(:mock_value)
454
+ @mock.yield_back{|v| v.should == :mock_value }
455
+ @mock.yield_back{|v| v.should == :stub_value }
456
+ @mock.rspec_verify
457
+ end
458
+
459
+ it "should yield multiple values after a similar stub" do
460
+ File.stub!(:open).and_yield(:stub_value)
461
+ File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
462
+ yielded_args = []
463
+ File.open {|v| yielded_args << v }
464
+ yielded_args.should == [:first_call, :second_call]
465
+ File.open {|v| v.should == :stub_value }
466
+ File.rspec_verify
467
+ end
468
+
469
+ it "should assign stub return values" do
470
+ mock = Mock.new('name', :message => :response)
471
+ mock.message.should == :response
472
+ end
473
+
474
+ end
475
+
476
+ describe "a mock message receiving a block" do
477
+ before(:each) do
478
+ @mock = mock("mock")
479
+ @calls = 0
480
+ end
481
+
482
+ def add_call
483
+ @calls = @calls + 1
484
+ end
485
+
486
+ it "should call the block after #should_receive" do
487
+ @mock.should_receive(:foo) { add_call }
488
+
489
+ @mock.foo
490
+
491
+ @calls.should == 1
492
+ end
493
+
494
+ it "should call the block after #should_receive after a similar stub" do
495
+ @mock.stub!(:foo).and_return(:bar)
496
+ @mock.should_receive(:foo) { add_call }
497
+
498
+ @mock.foo
499
+
500
+ @calls.should == 1
501
+ end
502
+
503
+ it "should call the block after #once" do
504
+ @mock.should_receive(:foo).once { add_call }
505
+
506
+ @mock.foo
507
+
508
+ @calls.should == 1
509
+ end
510
+
511
+ it "should call the block after #twice" do
512
+ @mock.should_receive(:foo).twice { add_call }
513
+
514
+ @mock.foo
515
+ @mock.foo
516
+
517
+ @calls.should == 2
518
+ end
519
+
520
+ it "should call the block after #times" do
521
+ @mock.should_receive(:foo).exactly(10).times { add_call }
522
+
523
+ (1..10).each { @mock.foo }
524
+
525
+ @calls.should == 10
526
+ end
527
+
528
+ it "should call the block after #any_number_of_times" do
529
+ @mock.should_receive(:foo).any_number_of_times { add_call }
530
+
531
+ (1..7).each { @mock.foo }
532
+
533
+ @calls.should == 7
534
+ end
535
+
536
+ it "should call the block after #ordered" do
537
+ @mock.should_receive(:foo).ordered { add_call }
538
+ @mock.should_receive(:bar).ordered { add_call }
539
+
540
+ @mock.foo
541
+ @mock.bar
542
+
543
+ @calls.should == 2
544
+ end
545
+ end
546
+
547
+ describe 'string representation generated by #to_s' do
548
+ it 'should not contain < because that might lead to invalid HTML in some situations' do
549
+ mock = mock("Dog")
550
+ valid_html_str = "#{mock}"
551
+ valid_html_str.should_not include('<')
552
+ end
553
+ end
554
+ end
555
+ end