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,44 @@
1
+ module Spec
2
+ module Example
3
+ class ExampleMatcher
4
+ def initialize(example_group_description, example_name)
5
+ @example_group_description = example_group_description
6
+ @example_name = example_name
7
+ end
8
+
9
+ def matches?(specified_examples)
10
+ specified_examples.each do |specified_example|
11
+ return true if matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
12
+ end
13
+ false
14
+ end
15
+
16
+ protected
17
+ def matches_literal_example?(specified_example)
18
+ specified_example =~ /(^#{example_group_regex} #{example_regexp}$|^#{example_group_regex}$|^#{example_group_with_before_all_regexp}$|^#{example_regexp}$)/
19
+ end
20
+
21
+ def matches_example_not_considering_modules?(specified_example)
22
+ specified_example =~ /(^#{example_group_regex_not_considering_modules} #{example_regexp}$|^#{example_group_regex_not_considering_modules}$|^#{example_regexp}$)/
23
+ end
24
+
25
+ def example_group_regex
26
+ Regexp.escape(@example_group_description)
27
+ end
28
+
29
+ def example_group_with_before_all_regexp
30
+ Regexp.escape("#{@example_group_description} before(:all)")
31
+ end
32
+
33
+ def example_group_regex_not_considering_modules
34
+ Regexp.escape(@example_group_description.split('::').last)
35
+ end
36
+
37
+ def example_regexp
38
+ Regexp.escape(@example_name)
39
+ end
40
+ end
41
+
42
+ ExampleGroupMethods.matcher_class = ExampleMatcher
43
+ end
44
+ end
@@ -0,0 +1,112 @@
1
+ module Spec
2
+ module Example
3
+ module ExampleMethods
4
+ extend ExampleGroupMethods
5
+ extend ModuleReopeningFix
6
+ include ModuleInclusionWarnings
7
+
8
+
9
+ PENDING_EXAMPLE_BLOCK = lambda {
10
+ raise Spec::Example::ExamplePendingError.new("Not Yet Implemented")
11
+ }
12
+
13
+ def execute(options, instance_variables)
14
+ options.reporter.example_started(self)
15
+ set_instance_variables_from_hash(instance_variables)
16
+
17
+ execution_error = nil
18
+ Timeout.timeout(options.timeout) do
19
+ begin
20
+ before_example
21
+ run_with_description_capturing
22
+ rescue Exception => e
23
+ execution_error ||= e
24
+ end
25
+ begin
26
+ after_example
27
+ rescue Exception => e
28
+ execution_error ||= e
29
+ end
30
+ end
31
+
32
+ options.reporter.example_finished(self, execution_error)
33
+ success = execution_error.nil? || ExamplePendingError === execution_error
34
+ end
35
+
36
+ def instance_variable_hash
37
+ instance_variables.inject({}) do |variable_hash, variable_name|
38
+ variable_hash[variable_name] = instance_variable_get(variable_name)
39
+ variable_hash
40
+ end
41
+ end
42
+
43
+ def violated(message="")
44
+ raise Spec::Expectations::ExpectationNotMetError.new(message)
45
+ end
46
+
47
+ def eval_each_fail_fast(procs) #:nodoc:
48
+ procs.each do |proc|
49
+ instance_eval(&proc)
50
+ end
51
+ end
52
+
53
+ def eval_each_fail_slow(procs) #:nodoc:
54
+ first_exception = nil
55
+ procs.each do |proc|
56
+ begin
57
+ instance_eval(&proc)
58
+ rescue Exception => e
59
+ first_exception ||= e
60
+ end
61
+ end
62
+ raise first_exception if first_exception
63
+ end
64
+
65
+ def description
66
+ @_defined_description || @_matcher_description || "NO NAME"
67
+ end
68
+
69
+ def __full_description
70
+ "#{self.class.description} #{self.description}"
71
+ end
72
+
73
+ def set_instance_variables_from_hash(ivars)
74
+ ivars.each do |variable_name, value|
75
+ # Ruby 1.9 requires variable.to_s on the next line
76
+ unless ['@_implementation', '@_defined_description', '@_matcher_description', '@method_name'].include?(variable_name.to_s)
77
+ instance_variable_set variable_name, value
78
+ end
79
+ end
80
+ end
81
+
82
+ def run_with_description_capturing
83
+ begin
84
+ return instance_eval(&(@_implementation || PENDING_EXAMPLE_BLOCK))
85
+ ensure
86
+ @_matcher_description = Spec::Matchers.generated_description
87
+ Spec::Matchers.clear_generated_description
88
+ end
89
+ end
90
+
91
+ def implementation_backtrace
92
+ eval("caller", @_implementation)
93
+ end
94
+
95
+ protected
96
+ include Matchers
97
+ include Pending
98
+
99
+ def before_example
100
+ setup_mocks_for_rspec
101
+ self.class.run_before_each(self)
102
+ end
103
+
104
+ def after_example
105
+ self.class.run_after_each(self)
106
+ verify_mocks_for_rspec
107
+ ensure
108
+ teardown_mocks_for_rspec
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,38 @@
1
+ module Spec
2
+ module Example
3
+ # In the future, modules will no longer be automatically included
4
+ # in the Example Group (based on the description name); when that
5
+ # time comes, this code should be removed.
6
+ module ModuleInclusionWarnings
7
+ # Thanks, Francis Hwang.
8
+ class MethodDispatcher
9
+ def initialize(mod, target=nil)
10
+ @mod = mod
11
+ @target = target
12
+ end
13
+
14
+ def respond_to?(sym)
15
+ @mod && @mod.instance_methods.include?(sym.to_s)
16
+ end
17
+
18
+ def call(sym, *args, &blk)
19
+ Kernel.warn("Modules will no longer be automatically included in RSpec version 1.1.4. Called from #{caller[2]}")
20
+ @target.extend @mod
21
+ @target.send(sym, *args, &blk)
22
+ end
23
+ end
24
+
25
+ # NOTE - we don't need the second arg, but extenders do: http://www.ruby-doc.org/core/classes/Object.html#M000604
26
+ def respond_to?(sym, include_private_data=false)
27
+ MethodDispatcher.new(self.class.described_module).respond_to?(sym) ? true : super
28
+ end
29
+
30
+ private
31
+
32
+ def method_missing(sym, *args, &blk)
33
+ md = MethodDispatcher.new(self.class.described_module, self)
34
+ self.respond_to?(sym) ? md.call(sym, *args, &blk) : super
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,21 @@
1
+ module Spec
2
+ module Example
3
+ # This is a fix for ...Something in Ruby 1.8.6??... (Someone fill in here please - Aslak)
4
+ module ModuleReopeningFix
5
+ def child_modules
6
+ @child_modules ||= []
7
+ end
8
+
9
+ def included(mod)
10
+ child_modules << mod
11
+ end
12
+
13
+ def include(mod)
14
+ super
15
+ child_modules.each do |child_module|
16
+ child_module.__send__(:include, mod)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Spec
2
+ module Example
3
+ module Pending
4
+ def pending(message = "TODO")
5
+ if block_given?
6
+ begin
7
+ yield
8
+ rescue Exception => e
9
+ raise Spec::Example::ExamplePendingError.new(message)
10
+ end
11
+ raise Spec::Example::PendingExampleFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
12
+ else
13
+ raise Spec::Example::ExamplePendingError.new(message)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,58 @@
1
+ module Spec
2
+ module Example
3
+ class SharedExampleGroup < Module
4
+ class << self
5
+ def add_shared_example_group(new_example_group)
6
+ guard_against_redefining_existing_example_group(new_example_group)
7
+ shared_example_groups << new_example_group
8
+ end
9
+
10
+ def find_shared_example_group(example_group_description)
11
+ shared_example_groups.find do |b|
12
+ b.description == example_group_description
13
+ end
14
+ end
15
+
16
+ def shared_example_groups
17
+ # TODO - this needs to be global, or at least accessible from
18
+ # from subclasses of Example in a centralized place. I'm not loving
19
+ # this as a solution, but it works for now.
20
+ $shared_example_groups ||= []
21
+ end
22
+
23
+ private
24
+ def guard_against_redefining_existing_example_group(new_example_group)
25
+ existing_example_group = find_shared_example_group(new_example_group.description)
26
+ return unless existing_example_group
27
+ return if new_example_group.equal?(existing_example_group)
28
+ return if spec_path(new_example_group) == spec_path(existing_example_group)
29
+ raise ArgumentError.new("Shared Example '#{existing_example_group.description}' already exists")
30
+ end
31
+
32
+ def spec_path(example_group)
33
+ File.expand_path(example_group.spec_path)
34
+ end
35
+ end
36
+ include ExampleGroupMethods
37
+ public :include
38
+
39
+ def initialize(*args, &example_group_block)
40
+ describe(*args)
41
+ @example_group_block = example_group_block
42
+ self.class.add_shared_example_group(self)
43
+ end
44
+
45
+ def included(mod) # :nodoc:
46
+ mod.module_eval(&@example_group_block)
47
+ end
48
+
49
+ def execute_in_class_hierarchy(superclass_last=false)
50
+ classes = [self]
51
+ superclass_last ? classes << ExampleMethods : classes.unshift(ExampleMethods)
52
+ classes.each do |example_group|
53
+ yield example_group
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec/matchers'
2
+ require 'spec/expectations/errors'
3
+ require 'spec/expectations/extensions'
4
+ require 'spec/expectations/handler'
5
+
6
+ module Spec
7
+
8
+ # Spec::Expectations lets you set expectations on your objects.
9
+ #
10
+ # result.should == 37
11
+ # team.should have(11).players_on_the_field
12
+ #
13
+ # == How Expectations work.
14
+ #
15
+ # Spec::Expectations adds two methods to Object:
16
+ #
17
+ # should(matcher=nil)
18
+ # should_not(matcher=nil)
19
+ #
20
+ # Both methods take an optional Expression Matcher (See Spec::Matchers).
21
+ #
22
+ # When +should+ receives an Expression Matcher, it calls <tt>matches?(self)</tt>. If
23
+ # it returns +true+, the spec passes and execution continues. If it returns
24
+ # +false+, then the spec fails with the message returned by <tt>matcher.failure_message</tt>.
25
+ #
26
+ # Similarly, when +should_not+ receives a matcher, it calls <tt>matches?(self)</tt>. If
27
+ # it returns +false+, the spec passes and execution continues. If it returns
28
+ # +true+, then the spec fails with the message returned by <tt>matcher.negative_failure_message</tt>.
29
+ #
30
+ # RSpec ships with a standard set of useful matchers, and writing your own
31
+ # matchers is quite simple. See Spec::Matchers for details.
32
+ module Expectations
33
+ class << self
34
+ attr_accessor :differ
35
+
36
+ # raises a Spec::Expectations::ExpectationNotMetError with message
37
+ #
38
+ # When a differ has been assigned and fail_with is passed
39
+ # <code>expected</code> and <code>target</code>, passes them
40
+ # to the differ to append a diff message to the failure message.
41
+ def fail_with(message, expected=nil, target=nil) # :nodoc:
42
+ if Array === message && message.length == 3
43
+ message, expected, target = message[0], message[1], message[2]
44
+ end
45
+ unless (differ.nil? || expected.nil? || target.nil?)
46
+ if expected.is_a?(String)
47
+ message << "\nDiff:" << self.differ.diff_as_string(target.to_s, expected)
48
+ elsif !target.is_a?(Proc)
49
+ message << "\nDiff:" << self.differ.diff_as_object(target, expected)
50
+ end
51
+ end
52
+ Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,66 @@
1
+ begin
2
+ require 'rubygems'
3
+ require 'diff/lcs' #necessary due to loading bug on some machines - not sure why - DaC
4
+ require 'diff/lcs/hunk'
5
+ rescue LoadError ; raise "You must gem install diff-lcs to use diffing" ; end
6
+
7
+ require 'pp'
8
+
9
+ module Spec
10
+ module Expectations
11
+ module Differs
12
+
13
+ # TODO add some rdoc
14
+ class Default
15
+ def initialize(options)
16
+ @options = options
17
+ end
18
+
19
+ # This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
20
+ def diff_as_string(data_new, data_old)
21
+ data_old = data_old.split(/\n/).map! { |e| e.chomp }
22
+ data_new = data_new.split(/\n/).map! { |e| e.chomp }
23
+ output = ""
24
+ diffs = Diff::LCS.diff(data_old, data_new)
25
+ return output if diffs.empty?
26
+ oldhunk = hunk = nil
27
+ file_length_difference = 0
28
+ diffs.each do |piece|
29
+ begin
30
+ hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines,
31
+ file_length_difference)
32
+ file_length_difference = hunk.file_length_difference
33
+ next unless oldhunk
34
+ # Hunks may overlap, which is why we need to be careful when our
35
+ # diff includes lines of context. Otherwise, we might print
36
+ # redundant lines.
37
+ if (context_lines > 0) and hunk.overlaps?(oldhunk)
38
+ hunk.unshift(oldhunk)
39
+ else
40
+ output << oldhunk.diff(format)
41
+ end
42
+ ensure
43
+ oldhunk = hunk
44
+ output << "\n"
45
+ end
46
+ end
47
+ #Handle the last remaining hunk
48
+ output << oldhunk.diff(format) << "\n"
49
+ end
50
+
51
+ def diff_as_object(target,expected)
52
+ diff_as_string(PP.pp(target,""), PP.pp(expected,""))
53
+ end
54
+
55
+ protected
56
+ def format
57
+ @options.diff_format
58
+ end
59
+
60
+ def context_lines
61
+ @options.context_lines
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,12 @@
1
+ module Spec
2
+ module Expectations
3
+ # If Test::Unit is loaed, we'll use its error as baseclass, so that Test::Unit
4
+ # will report unmet RSpec expectations as failures rather than errors.
5
+ superclass = ['Test::Unit::AssertionFailedError', '::StandardError'].map do |c|
6
+ eval(c) rescue nil
7
+ end.compact.first
8
+
9
+ class ExpectationNotMetError < superclass
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ require 'spec/expectations/extensions/object'
2
+ require 'spec/expectations/extensions/string_and_symbol'
@@ -0,0 +1,63 @@
1
+ module Spec
2
+ module Expectations
3
+ # rspec adds #should and #should_not to every Object (and,
4
+ # implicitly, every Class).
5
+ module ObjectExpectations
6
+ # :call-seq:
7
+ # should(matcher)
8
+ # should == expected
9
+ # should === expected
10
+ # should =~ expected
11
+ #
12
+ # receiver.should(matcher)
13
+ # => Passes if matcher.matches?(receiver)
14
+ #
15
+ # receiver.should == expected #any value
16
+ # => Passes if (receiver == expected)
17
+ #
18
+ # receiver.should === expected #any value
19
+ # => Passes if (receiver === expected)
20
+ #
21
+ # receiver.should =~ regexp
22
+ # => Passes if (receiver =~ regexp)
23
+ #
24
+ # See Spec::Matchers for more information about matchers
25
+ #
26
+ # == Warning
27
+ #
28
+ # NOTE that this does NOT support receiver.should != expected.
29
+ # Instead, use receiver.should_not == expected
30
+ def should(matcher=:use_operator_matcher, &block)
31
+ ExpectationMatcherHandler.handle_matcher(self, matcher, &block)
32
+ end
33
+
34
+ # :call-seq:
35
+ # should_not(matcher)
36
+ # should_not == expected
37
+ # should_not === expected
38
+ # should_not =~ expected
39
+ #
40
+ # receiver.should_not(matcher)
41
+ # => Passes unless matcher.matches?(receiver)
42
+ #
43
+ # receiver.should_not == expected
44
+ # => Passes unless (receiver == expected)
45
+ #
46
+ # receiver.should_not === expected
47
+ # => Passes unless (receiver === expected)
48
+ #
49
+ # receiver.should_not =~ regexp
50
+ # => Passes unless (receiver =~ regexp)
51
+ #
52
+ # See Spec::Matchers for more information about matchers
53
+ def should_not(matcher=:use_operator_matcher, &block)
54
+ NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block)
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+
61
+ class Object
62
+ include Spec::Expectations::ObjectExpectations
63
+ end