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,63 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'hpricot' # Needed to compare generated with wanted HTML
3
+ require 'spec/runner/formatter/html_formatter'
4
+
5
+ module Spec
6
+ module Runner
7
+ module Formatter
8
+ describe HtmlFormatter do
9
+ ['--diff', '--dry-run'].each do |opt|
10
+ def jruby?
11
+ PLATFORM == 'java'
12
+ end
13
+
14
+ it "should produce HTML identical to the one we designed manually with #{opt}" do
15
+ root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
16
+ suffix = jruby? ? '-jruby' : ''
17
+ expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html"
18
+ raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
19
+ expected_html = File.read(expected_file)
20
+
21
+ Dir.chdir(root) do
22
+ args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt]
23
+ err = StringIO.new
24
+ out = StringIO.new
25
+ CommandLine.run(
26
+ OptionParser.parse(args, err, out)
27
+ )
28
+
29
+ seconds = /\d+\.\d+ seconds/
30
+ html = out.string.gsub seconds, 'x seconds'
31
+ expected_html.gsub! seconds, 'x seconds'
32
+
33
+ if opt == '--diff'
34
+ # Uncomment this line temporarily in order to overwrite the expected with actual.
35
+ # Use with care!!!
36
+ # File.open(expected_file, 'w') {|io| io.write(html)}
37
+
38
+ doc = Hpricot(html)
39
+ backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
40
+ doc.search("div.backtrace").remove
41
+
42
+ expected_doc = Hpricot(expected_html)
43
+ expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
44
+ expected_doc.search("div.backtrace").remove
45
+
46
+ doc.inner_html.should == expected_doc.inner_html
47
+
48
+ expected_backtraces.each_with_index do |expected_line, i|
49
+ expected_path, expected_line_number, expected_suffix = expected_line.split(':')
50
+ actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
51
+ File.expand_path(actual_path).should == File.expand_path(expected_path)
52
+ actual_line_number.should == expected_line_number
53
+ end
54
+ else
55
+ html.should =~ /This was a dry-run/m
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,333 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/nested_text_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ describe NestedTextFormatter do
8
+ it_should_behave_like "sandboxed rspec_options"
9
+ attr_reader :io, :options, :formatter, :example_group
10
+ before(:each) do
11
+ @io = StringIO.new
12
+ options.stub!(:dry_run).and_return(false)
13
+ options.stub!(:colour).and_return(false)
14
+ @formatter = NestedTextFormatter.new(options, io)
15
+ @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
16
+ specify "example" do
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "where ExampleGroup has no superclasss with a description" do
22
+ before do
23
+ add_example_group
24
+ end
25
+
26
+ def add_example_group
27
+ formatter.add_example_group(example_group)
28
+ end
29
+
30
+ describe "#dump_summary" do
31
+ it "should produce standard summary without pending when pending has a 0 count" do
32
+ formatter.dump_summary(3, 2, 1, 0)
33
+ expected_output = <<-OUT
34
+ ExampleGroup
35
+
36
+ Finished in 3 seconds
37
+
38
+ 2 examples, 1 failure
39
+ OUT
40
+
41
+ io.string.should == expected_output.gsub(/^ /, '')
42
+ end
43
+
44
+ it "should produce standard summary" do
45
+ formatter.dump_summary(3, 2, 1, 4)
46
+ expected_output = <<-OUT
47
+ ExampleGroup
48
+
49
+ Finished in 3 seconds
50
+
51
+ 2 examples, 1 failure, 4 pending
52
+ OUT
53
+ io.string.should == expected_output.gsub(/^ /, '')
54
+ end
55
+ end
56
+
57
+ describe "#add_example_group" do
58
+ describe "when ExampleGroup has description_args" do
59
+ before do
60
+ example_group.description_args.should_not be_nil
61
+ end
62
+
63
+ describe "when ExampleGroup has no parents with description args" do
64
+ before do
65
+ example_group.superclass.description_args.should be_nil
66
+ end
67
+
68
+ it "should push ExampleGroup name" do
69
+ io.string.should eql("ExampleGroup\n")
70
+ end
71
+ end
72
+
73
+ describe "when ExampleGroup has one parent with description args" do
74
+ attr_reader :child_example_group
75
+ def add_example_group
76
+ example_group.description_args.should_not be_nil
77
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
78
+ end
79
+
80
+ describe "and parent ExampleGroups have not been printed" do
81
+ before do
82
+ formatter.add_example_group(child_example_group)
83
+ end
84
+
85
+ it "should push ExampleGroup name with two spaces of indentation" do
86
+ expected_output = <<-OUT
87
+ ExampleGroup
88
+ Child ExampleGroup
89
+ OUT
90
+ io.string.should == expected_output.gsub(/^ /, '')
91
+ end
92
+ end
93
+
94
+ describe "and parent ExampleGroups have been printed" do
95
+ before do
96
+ formatter.add_example_group(example_group)
97
+ io.string = ""
98
+ formatter.add_example_group(child_example_group)
99
+ end
100
+
101
+ it "should print only the indented ExampleGroup" do
102
+ expected_output = <<-OUT
103
+ Child ExampleGroup
104
+ OUT
105
+ io.string.should == expected_output.gsub(/^ /, '')
106
+ end
107
+ end
108
+ end
109
+
110
+ describe "when ExampleGroup has two parents with description args" do
111
+ attr_reader :child_example_group, :grand_child_example_group
112
+ def add_example_group
113
+ example_group.description_args.should_not be_nil
114
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
115
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
116
+ end
117
+
118
+ describe "and parent ExampleGroups have not been printed" do
119
+ before do
120
+ formatter.add_example_group(grand_child_example_group)
121
+ end
122
+
123
+ it "should print the entire nested ExampleGroup heirarchy" do
124
+ expected_output = <<-OUT
125
+ ExampleGroup
126
+ Child ExampleGroup
127
+ GrandChild ExampleGroup
128
+ OUT
129
+ io.string.should == expected_output.gsub(/^ /, '')
130
+ end
131
+ end
132
+
133
+ describe "and parent ExampleGroups have been printed" do
134
+ before do
135
+ formatter.add_example_group(child_example_group)
136
+ io.string = ""
137
+ formatter.add_example_group(grand_child_example_group)
138
+ end
139
+
140
+ it "should print only the indented ExampleGroup" do
141
+ expected_output = <<-OUT
142
+ GrandChild ExampleGroup
143
+ OUT
144
+ io.string.should == expected_output.gsub(/^ /, '')
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ describe "when ExampleGroup description_args is nil" do
151
+ attr_reader :child_example_group
152
+
153
+ describe "and parent ExampleGroups have not been printed" do
154
+ def add_example_group
155
+ @child_example_group = Class.new(example_group)
156
+ child_example_group.description_args.should be_nil
157
+ formatter.add_example_group(child_example_group)
158
+ end
159
+
160
+ it "should render only the parent ExampleGroup" do
161
+ expected_output = <<-OUT
162
+ ExampleGroup
163
+ OUT
164
+ io.string.should == expected_output.gsub(/^ /, '')
165
+ end
166
+ end
167
+
168
+ describe "and parent ExampleGroups have been printed" do
169
+ def add_example_group
170
+ @child_example_group = Class.new(example_group)
171
+ child_example_group.description_args.should be_nil
172
+ formatter.add_example_group(example_group)
173
+ io.string = ""
174
+ formatter.add_example_group(child_example_group)
175
+ end
176
+
177
+ it "should not render anything" do
178
+ io.string.should == ""
179
+ end
180
+ end
181
+ end
182
+
183
+ describe "when ExampleGroup description_args is empty" do
184
+ def add_example_group
185
+ example_group.set_description
186
+ example_group.description_args.should be_empty
187
+ super
188
+ end
189
+
190
+ it "should not render anything" do
191
+ io.string.should == ""
192
+ end
193
+ end
194
+ end
195
+
196
+ describe "#example_failed" do
197
+ describe "where ExampleGroup has no superclasss with a description" do
198
+ describe "when having an error" do
199
+ it "should push failing spec name and failure number" do
200
+ formatter.example_failed(
201
+ example_group.it("spec"),
202
+ 98,
203
+ Reporter::Failure.new("c s", RuntimeError.new)
204
+ )
205
+ expected_output = <<-OUT
206
+ ExampleGroup
207
+ spec (ERROR - 98)
208
+ OUT
209
+ io.string.should == expected_output.gsub(/^ /, '')
210
+ end
211
+ end
212
+
213
+ describe "when having an expectation failure" do
214
+ it "should push failing spec name and failure number" do
215
+ formatter.example_failed(
216
+ example_group.it("spec"),
217
+ 98,
218
+ Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
219
+ )
220
+ expected_output = <<-OUT
221
+ ExampleGroup
222
+ spec (FAILED - 98)
223
+ OUT
224
+ io.string.should == expected_output.gsub(/^ /, '')
225
+ end
226
+ end
227
+ end
228
+
229
+ describe "where ExampleGroup has two superclasses with a description" do
230
+ attr_reader :child_example_group, :grand_child_example_group
231
+
232
+ def add_example_group
233
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
234
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
235
+ formatter.add_example_group(grand_child_example_group)
236
+ end
237
+
238
+ describe "when having an error" do
239
+ it "should push failing spec name and failure number" do
240
+ formatter.example_failed(
241
+ grand_child_example_group.it("spec"),
242
+ 98,
243
+ Reporter::Failure.new("c s", RuntimeError.new)
244
+ )
245
+ expected_output = <<-OUT
246
+ ExampleGroup
247
+ Child ExampleGroup
248
+ GrandChild ExampleGroup
249
+ spec (ERROR - 98)
250
+ OUT
251
+ io.string.should == expected_output.gsub(/^ /, '')
252
+ end
253
+ end
254
+
255
+ describe "when having an expectation" do
256
+ it "should push failing spec name and failure number" do
257
+ formatter.example_failed(
258
+ grand_child_example_group.it("spec"),
259
+ 98,
260
+ Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
261
+ )
262
+ expected_output = <<-OUT
263
+ ExampleGroup
264
+ Child ExampleGroup
265
+ GrandChild ExampleGroup
266
+ spec (FAILED - 98)
267
+ OUT
268
+ io.string.should == expected_output.gsub(/^ /, '')
269
+ end
270
+ end
271
+ end
272
+ end
273
+
274
+ describe "#start" do
275
+ it "should push nothing on start" do
276
+ formatter.start(5)
277
+ expected_output = <<-OUT
278
+ ExampleGroup
279
+ OUT
280
+ io.string.should == expected_output.gsub(/^ /, '')
281
+ end
282
+ end
283
+
284
+ describe "#start_dump" do
285
+ it "should push nothing on start dump" do
286
+ formatter.start_dump
287
+ expected_output = <<-OUT
288
+ ExampleGroup
289
+ OUT
290
+ io.string.should == expected_output.gsub(/^ /, '')
291
+ end
292
+ end
293
+
294
+ describe "#example_passed" do
295
+ it "should push passing spec name" do
296
+ formatter.example_passed(example_group.it("spec"))
297
+ expected_output = <<-OUT
298
+ ExampleGroup
299
+ spec
300
+ OUT
301
+ io.string.should == expected_output.gsub(/^ /, '')
302
+ end
303
+ end
304
+
305
+ describe "#example_pending" do
306
+ it "should push pending example name and message" do
307
+ formatter.example_pending(example_group.examples.first, 'reason')
308
+ expected_output = <<-OUT
309
+ ExampleGroup
310
+ example (PENDING: reason)
311
+ OUT
312
+ io.string.should == expected_output.gsub(/^ /, '')
313
+ end
314
+
315
+ it "should dump pending" do
316
+ formatter.example_pending(example_group.examples.first, 'reason')
317
+ io.rewind
318
+ formatter.dump_pending
319
+ io.string.should =~ /Pending\:\nExampleGroup example \(reason\)\n/
320
+ end
321
+ end
322
+
323
+ def have_single_level_example_group_output(expected_output)
324
+ expected = "ExampleGroup\n #{expected_output}"
325
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
326
+ actual == expected
327
+ end
328
+ end
329
+ end
330
+ end
331
+ end
332
+ end
333
+ end
@@ -0,0 +1,65 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/profile_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ describe ProfileFormatter do
8
+ attr_reader :io, :formatter
9
+ before(:each) do
10
+ @io = StringIO.new
11
+ options = mock('options')
12
+ options.stub!(:colour).and_return(true)
13
+ @formatter = ProfileFormatter.new(options, io)
14
+ end
15
+
16
+ it "should print a heading" do
17
+ formatter.start(0)
18
+ io.string.should eql("Profiling enabled.\n")
19
+ end
20
+
21
+ it "should record the current time when starting a new example" do
22
+ now = Time.now
23
+ Time.stub!(:now).and_return(now)
24
+ formatter.example_started('should foo')
25
+ formatter.instance_variable_get("@time").should == now
26
+ end
27
+
28
+ it "should correctly record a passed example" do
29
+ now = Time.now
30
+ Time.stub!(:now).and_return(now)
31
+ parent_example_group = Class.new(ExampleGroup).describe('Parent')
32
+ child_example_group = Class.new(parent_example_group).describe('Child')
33
+
34
+ formatter.add_example_group(child_example_group)
35
+
36
+ formatter.example_started('when foo')
37
+ Time.stub!(:now).and_return(now+1)
38
+ formatter.example_passed(stub('foo', :description => 'i like ice cream'))
39
+
40
+ formatter.start_dump
41
+ io.string.should include('Parent Child')
42
+ end
43
+
44
+ it "should sort the results in descending order" do
45
+ formatter.instance_variable_set("@example_times", [['a', 'a', 0.1], ['b', 'b', 0.3], ['c', 'c', 0.2]])
46
+ formatter.start_dump
47
+ formatter.instance_variable_get("@example_times").should == [ ['b', 'b', 0.3], ['c', 'c', 0.2], ['a', 'a', 0.1]]
48
+ end
49
+
50
+ it "should print the top 10 results" do
51
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
52
+ formatter.add_example_group(example_group)
53
+ formatter.instance_variable_set("@time", Time.now)
54
+
55
+ 15.times do
56
+ formatter.example_passed(stub('foo', :description => 'i like ice cream'))
57
+ end
58
+
59
+ io.should_receive(:print).exactly(10)
60
+ formatter.start_dump
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end