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